@page "/user/transfers" @using BlazorAnimation @using TIAM.Core.Enums @using TIAM.Entities.Transfers @using TIAM.Resources @using TIAMSharedUI.Pages.Components @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 AyCode.Services.SignalRs @using TIAMWebApp.Shared.Application.Services @using MessagePack @using MessagePack.Resolvers @using AyCode.Core.Extensions; @using AyCode.Core @using AyCode.Core.Helpers @using AyCode.Interfaces.Entities @using TIAM.Services @using TIAMSharedUI.Shared.Components @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 keyField = context.Value; var keyItem = (Transfer)context.DataItem; string buttonText = "Contact"; } @{ TransferStatusModel keyField = Statuses.FirstOrDefault(x => x.StatusValue == Convert.ToInt16(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("TransferStatusType")
@code { private LoggerClient _logger; //public Transfer myModel = new Transfer(); //public List TransferDataList { get; set; } bool PopupVisible { get; set; } TiamGrid TransferGrid { get; set; } bool AutoCollapseDetailRow { get; set; } public List IgnoreList = [ "ReceiverEmailAddress", "ReceiverFullName", "ReceiverId", "SenderEmailAddress", "SenderFullName", "SenderId", "ContextId", ]; public List Statuses { get; set; } = [ new(Convert.ToInt16(TransferStatusType.OrderSubmitted), "Order submitted"), new(Convert.ToInt16(TransferStatusType.OrderConfirmed), "Order confirmed"), new(Convert.ToInt16(TransferStatusType.AssignedToDriver), "Assigned to driver"), new(Convert.ToInt16(TransferStatusType.DriverConfirmed), "Driver confirmed"), new(Convert.ToInt16(TransferStatusType.DriverEnRoute), "Driver enroute"), new(Convert.ToInt16(TransferStatusType.PassengerPickup), "Passenger in car"), new(Convert.ToInt16(TransferStatusType.Finished), "Finished"), new(Convert.ToInt16(TransferStatusType.UserCanceled), "User cancelled"), new(Convert.ToInt16(TransferStatusType.AdminDenied), "Admin cancelled") ]; private MessageWizardModel _messageWizardModel = new(); public List AppointmentModels { get; set; } DateTime StartDate { get; set; } = DateTime.Today; DxSchedulerDataStorage _dataStorage = new(); 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.SenderFullName},

{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) { if (e.ElementType == GridElementType.DataRow && (byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") == 5) { e.CssClass = "bg-important"; } else if (e.ElementType == GridElementType.DataRow && (byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") > 5 && (byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") < 35) { e.CssClass = "bg-attention"; } else if (e.ElementType == GridElementType.DataRow && (byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") == 35) { e.CssClass = "bg-finished"; } else if (e.ElementType == GridElementType.DataRow && (byte)e.Grid.GetRowValue(e.VisibleIndex, "TransferStatusType") > 35) { e.CssClass = "bg-cancel"; } if (e.ElementType == GridElementType.HeaderCell) { e.Style = "background-color: rgba(0, 0, 0, 0.08)"; e.CssClass = "header-bold"; } } 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"; } async Task DataItemDeleting(GridDataItemDeletingEventArgs e) { _logger.Info($"ManageTransfers OnItemDeleting"); // var transfer = (Transfer)e.DataItem; // _logger.Info("ManageTransfers delete"); // PostDataToServerAsync(transfer, SignalRTags.DeleteTransferAsync, true).Forget(); // //await UpdateDataAsync(); } async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) { var transfer = (Transfer)e.EditModel; var logText = e.IsNew ? "add" : "update"; _logger.Info($"EditModelSaving, {logText} transfer; transferId " + transfer.Id); PostDataToServerAsync(transfer, e.IsNew ? SignalRTags.AddTransferAsync : SignalRTags.UpdateTransferAsync).Forget(); //await transferDataService.CreateTransfer((TransferWizardModel)e.EditModel); //transfer = await transferDataService.UpdateTransferAsync(transfer); } private Task PostDataToServerAsync(T transfer, int messageTag, bool isDelete = false) where T : Transfer //IEntityGuid { _logger.Info("PostDataToServerAsync called; transferId " + transfer.Id); RefreshAppointments(transfer, isDelete); //egyből látszódik a változás a grid-ben, nem csak a callback lefutásakor! felhasználóbarátabb... - J. return AdminSignalRClient.PostDataAsync(messageTag, transfer, repsonse => { if (repsonse.Status != SignalResponseStatus.Success || repsonse.ResponseData == null) { UpdateAllDataAsync().Forget(); return; } RefreshAppointments(repsonse.ResponseData, isDelete); StateHasChanged(); }); //transfer = await devAdminSignalClient.PostDataAsync(SignalRTags.UpdateTransferAsync, transfer); } private void RefreshAppointments(Transfer transfer, bool isDelete) { // var transferIndex = TransferDataList.FindIndex(x => x.Id == transfer.Id); // if (isDelete && transferIndex > -1) TransferDataList.RemoveAt(transferIndex); // else // { // if (transferIndex > -1) TransferDataList[transferIndex] = transfer; // else TransferDataList.Add(transfer); // } var appointmentIndex = AppointmentModels.FindIndex(x => x.SourceId == transfer.Id); if (isDelete && appointmentIndex > -1) AppointmentModels.RemoveAt(appointmentIndex); else { var appointment = CreateAppointmentModel(transfer); if (appointmentIndex > -1) AppointmentModels[appointmentIndex] = appointment; else AppointmentModels.Add(appointment); } } public Task UpdateAllDataAsync() { _logger.Info("UpdateAllDataAsync called"); return AdminSignalRClient.GetAllAsync>(SignalRTags.GetTransfersAsync, response => { if (response.Status == SignalResponseStatus.Error) return; InitializeAppointments(response.ResponseData ?? []); StateHasChanged(); }); } protected override Task OnInitializedAsync() { _logger = new LoggerClient(LogWriters.ToArray()); //UpdateAllDataAsync().Forget(); //var transfers = await devAdminSignalClient.GetAllAsync>(SignalRTags.GetTransfersAsync); //InitializeDataSources(transfers ?? []); //InitializeDataSources(await transferDataService.GetTransfersAsync()); 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 { SourceId = transfer.Id, StartDate = transfer.Appointment, EndDate = transfer.Appointment.AddMinutes(30), Description = $"{transfer.FullName}, {transfer.ToAddress}", Location = transfer.FromAddress, Caption = "Simple transfer" }; } void ColumnChooserButton_Click() { TransferGrid.ShowColumnChooser(); } protected override void OnAfterRender(bool firstRender) { if (firstRender) { TransferGrid.ExpandDetailRow(0); } } void AutoCollapseDetailRow_Changed(bool newValue) { AutoCollapseDetailRow = newValue; if (!newValue) return; TransferGrid.BeginUpdate(); TransferGrid.CollapseAllDetailRows(); TransferGrid.ExpandDetailRow(0); TransferGrid.EndUpdate(); } private void DataSourceChanged(IList transfers) { _logger.Info("DataSourceChanged called"); InitializeAppointments(transfers); } private void DataSourceItemChanged(Transfer transfer) { _logger.Info("DataSourceItemChanged called"); } }