@page "/driver/transfers/{driverId:guid}" @using BlazorAnimation @using TIAM.Core.Enums @using TIAM.Entities.Emails @using TIAM.Entities.Transfers @using TIAM.Resources @using TIAM.Services @using TIAMSharedUI.Pages.Components @using TIAMSharedUI.Pages.User.SysAdmins @using TIAMSharedUI.Shared @using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Models.ClientSide.UI @using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels @using TIAMWebApp.Shared.Application.Models.PageModels @using TIAMWebApp.Shared.Application.Utility @using AyCode.Services.Loggers @using TIAMWebApp.Shared.Application.Services @using TIAMSharedUI.Shared.Components.Grids @using AyCode.Core.Enums @using AyCode.Core.Extensions @using AyCode.Core.Consts @using AyCode.Core @using AyCode.Core.Helpers @using DevExpress.Data.Filtering @using TIAM.Entities.Emails @layout AdminLayout @inject IEnumerable LogWriters @inject IStringLocalizer localizer @inject IWizardProcessor wizardProcessor @inject ITransferDataService transferDataService @inject ISessionService sessionService @inject AdminSignalRClient AdminSignalRClient; Transfers

Transfer management

Manage transfers here!

@{ var idKeyField = ((Transfer)context.DataItem).Id.ToString("N"); var editUri = $"mytransfers/{idKeyField}"; @context.Value } @{ var keyField = context.Value; var keyItem = (Transfer)context.DataItem; string buttonText = "Contact"; } @{ TransferStatusModel keyField = Statuses.FirstOrDefault(x => x.StatusValue == (byte)context.Value)!; string transferStatusText = keyField.StatusName; @transferStatusText } @{ var transfer2 = (Transfer)editFormContext.EditModel; } @editFormContext.GetEditor("FirstName") @editFormContext.GetEditor("LastName") @editFormContext.GetEditor("ToAddress") @editFormContext.GetEditor("FromAddress") @editFormContext.GetEditor("PassengerCount") @editFormContext.GetEditor("Payed") @editFormContext.GetEditor("TransferStatusType")
@code { [Parameter] public Guid DriverId { get; set; } private Guid driverId; private LoggerClient _logger; private bool _popupVisible; private TransferGrid _gridTransfer; public List IgnoreList = [ "ReceiverEmailAddress", "ReceiverFullName", "ReceiverId", "SenderEmailAddress", "SenderFullName", "SenderId", "ContextId", ]; private static readonly List Statuses = [ new(Convert.ToByte(TransferStatusType.OrderSubmitted), "Order submitted"), new(Convert.ToByte(TransferStatusType.OrderConfirmed), "Order confirmed"), new(Convert.ToByte(TransferStatusType.AssignedToDriver), "Assigned to driver"), new(Convert.ToByte(TransferStatusType.DriverConfirmed), "Driver confirmed"), new(Convert.ToByte(TransferStatusType.DriverEnRoute), "Driver enroute"), new(Convert.ToByte(TransferStatusType.PassengerPickup), "Passenger in car"), new(Convert.ToByte(TransferStatusType.Finished), "Finished"), new(Convert.ToByte(TransferStatusType.UserCanceled), "User cancelled"), new(Convert.ToByte(TransferStatusType.AdminDenied), "Admin cancelled") ]; private static List _selectedCategories = Statuses.Where(x => /* x.StatusValue != (byte)TransferStatusType.OrderSubmitted && */ x.StatusValue != (byte)TransferStatusType.Finished && x.StatusValue != (byte)TransferStatusType.UserCanceled && x.StatusValue != (byte)TransferStatusType.AdminDenied).ToList(); private string _filterText = GetFilterText(_selectedCategories.Select(x => (TransferStatusType)x.StatusValue).ToList()); private MessageWizardModel _messageWizardModel = new(); public List AppointmentModels { get; set; } = null!; DateTime StartDate { get; set; } = DateTime.Today; DxSchedulerDataStorage _dataStorage = new(); protected override Task OnParametersSetAsync() { driverId = DriverId; return base.OnParametersSetAsync(); } void SendMail(Transfer item) { _logger.Info($"Sending mail to {item.ContactEmail}, {item.Id}"); _messageWizardModel.ReceiverId = item.UserId; _messageWizardModel.ContextId = item.Id; _messageWizardModel.SenderEmailAddress = "info@touriam.com"; _messageWizardModel.ReceiverEmailAddress = item.ContactEmail; _messageWizardModel.ReceiverFullName = item.FullName; _popupVisible = true; } void CancelCreateClick() { _popupVisible = false; } void EulaPopupClosed() { //cancel clicked } void EulaPopupClosing(PopupClosingEventArgs args) { //myModel = new TransferWizardModel(); _messageWizardModel = new MessageWizardModel(); } //----------------------------------------------------------------------------------- public async Task SubmitForm(object result) { var messageModel = (result as MessageWizardModel)!; messageModel.ContextId = _messageWizardModel.ContextId; //messageModel.SenderId = sessionService.User.UserId; string FormatEmailContent() { return $@"

Dear {messageModel.ReceiverFullName},

{messageModel.Content}:

Best regards,
Tour I Am team

"; } messageModel.Content = FormatEmailContent(); _logger.Info(messageModel.Content); var email = await wizardProcessor.ProcessWizardAsync(result.GetType(), messageModel); _logger.Info($"Submitted nested form: {result.GetType().FullName}"); } void Grid_CustomizeElement(GridCustomizeElementEventArgs e) { try { if (e.ElementType == GridElementType.HeaderCell) { e.Style = "background-color: rgba(0, 0, 0, 0.08)"; e.CssClass = "header-bold"; } if (e.ElementType != GridElementType.DataRow) return; var transferStatus = e.Grid?.GetRowValue(e.VisibleIndex, "TransferStatusType"); if (transferStatus == null) return; var transferStatusByte = (byte)transferStatus; switch (transferStatusByte) { case 5: e.CssClass = "bg-important"; break; case > 5 and < 35: e.CssClass = "bg-attention"; break; case 35: e.CssClass = "bg-finished"; break; case > 35: e.CssClass = "bg-cancel"; break; } } catch (Exception ex) { _logger.Error($"Grid_CustomizeElement; {ex.Message}", ex); } } void Grid_CustomizeEditModel(GridCustomizeEditModelEventArgs e) { if (!e.IsNew) return; var transferEditModel = (Transfer)e.EditModel; //TODO not valid cast transferEditModel.Id = Guid.NewGuid(); transferEditModel.ToAddress = "Where to?"; transferEditModel.FromAddress = "From where?"; transferEditModel.Appointment = DateTime.UtcNow.AddDays(3); transferEditModel.PassengerCount = 1; transferEditModel.FirstName = "John"; transferEditModel.LastName = "Doe"; transferEditModel.ContactPhone = "+00000000000"; transferEditModel.ContactEmail = "your@email.address"; } private static string GetFilterText(ICollection selectedTransferStatuses) => selectedTransferStatuses.Count == 0 ? string.Empty : CriteriaOperator.FromLambda(t => selectedTransferStatuses.Contains(t.TransferStatusType)).ToString(); void TagBox_ValuesChanged(IEnumerable newSelectedCategories) { var filterText = string.Empty; InOperator? filterCriteria = null; _selectedCategories = newSelectedCategories.ToList(); if (_selectedCategories.Count > 0) { filterCriteria = new InOperator("TransferStatusType", _selectedCategories.Select(c => c.StatusValue)); filterText = GetFilterText(_selectedCategories.Select(x => (TransferStatusType)x.StatusValue).ToList()); } _filterText = filterText; _gridTransfer.SetFieldFilterCriteria("TransferStatusType", filterCriteria); } private void DataSourceChanged(IList transfers) { _logger.Info("DataSourceChanged called"); InitializeAppointments(transfers); if (_selectedCategories.Count > 0) TagBox_ValuesChanged(_selectedCategories); // if(!SelectedCategories.Any()) // SelectedCategories = [Statuses.FirstOrDefault(x => x.StatusValue == (byte)TransferStatusType.Finished)!]; // var filterTransferStatusType = Statuses.FirstOrDefault(x => x.StatusValue == (byte)TransferStatusType.Finished)!; // if (SelectedCategories.All(x => x.StatusValue != filterTransferStatusType.StatusValue)) // SelectedCategories.Add(filterTransferStatusType); } private void DataSourceItemChanging(GridDataItemChangingEventArgs args) { _logger.Info("DataSourceItemChanging called"); } private void DataSourceItemChanged(GridDataItemChangedEventArgs args) { _logger.Info("DataSourceItemChanged called"); AppointmentModels.UpdateCollection(CreateAppointmentModel(args.DataItem), args.TrackingState == TrackingState.Remove); } private void DataItemSaving(GridEditModelSavingEventArgs e) { _logger.Info("DataItemSaving called"); } private void DataItemDeleting(GridDataItemDeletingEventArgs e) { _logger.Info($"DataItemDeleting OnItemDeleting"); } protected override Task OnInitializedAsync() { _logger = new LoggerClient(LogWriters.ToArray()); return base.OnInitializedAsync(); } private void InitializeAppointments(ICollection transferDataList) { _logger.Info("InitializeAppointments called"); AppointmentModels = new List(transferDataList.Count); foreach (var transfer in transferDataList) { // var bnm = DataStorage.CreateAppointmentItem(); // bnm.Start = transfer.Appointment; // bnm.Description = $"{transfer.FullName}, {transfer.ToAddress}"; // bnm.Location = transfer.FromAddress; // bnm.Subject = "Simple transfer"; AppointmentModels.Add(CreateAppointmentModel(transfer)); } _dataStorage = new DxSchedulerDataStorage { AppointmentMappings = new DxSchedulerAppointmentMappings() { Type = "AppointmentType", Start = "StartDate", End = "EndDate", Subject = "Caption", AllDay = "AllDay", Location = "Location", Description = "Description", LabelId = "Label", StatusId = "Status", RecurrenceInfo = "Recurrence" }, AppointmentsSource = AppointmentModels }; } public AppointmentModel CreateAppointmentModel(Transfer transfer) { return new AppointmentModel { Id = transfer.Id, StartDate = transfer.Appointment, EndDate = transfer.Appointment.AddMinutes(30), Description = $"{transfer.FullName}, {transfer.ToAddress}", Location = transfer.FromAddress, Caption = "Simple transfer" }; } void ColumnChooserButton_Click() { _gridTransfer.ShowColumnChooser(); } protected override void OnAfterRender(bool firstRender) { if (firstRender) { //_gridTransfer.ExpandDetailRow(0); } } }