diff --git a/TIAMSharedUI/Pages/User/Hotels/HotelComponent.razor b/TIAMSharedUI/Pages/User/Hotels/HotelComponent.razor index 1aadcc6d..c8c85b75 100644 --- a/TIAMSharedUI/Pages/User/Hotels/HotelComponent.razor +++ b/TIAMSharedUI/Pages/User/Hotels/HotelComponent.razor @@ -71,7 +71,7 @@
-
All transfers
+
All transfers
diff --git a/TIAMSharedUI/Pages/User/Hotels/HotelEditTransfers.razor b/TIAMSharedUI/Pages/User/Hotels/HotelEditTransfers.razor index d9accb09..b62a64f7 100644 --- a/TIAMSharedUI/Pages/User/Hotels/HotelEditTransfers.razor +++ b/TIAMSharedUI/Pages/User/Hotels/HotelEditTransfers.razor @@ -8,6 +8,7 @@ @using TIAM.Resources @using TIAM.Services @using TIAMSharedUI.Pages.Components.EditComponents +@using TIAMSharedUI.Shared @using TIAMSharedUI.Shared.Components.BaseComponents @using TIAMWebApp.Shared.Application.Interfaces @using AyCode.Services.Loggers @@ -17,6 +18,7 @@ @using TIAMWebApp.Shared.Application.Utility @using TIAMSharedUI.Pages.User.SysAdmins @using TIAMSharedUI.Pages.Components +@layout AdminLayout @inherits BasePageComponent @inject HttpClient Http @inject NavigationManager navManager diff --git a/TIAMSharedUI/Pages/User/Hotels/HotelManageTransfers.razor b/TIAMSharedUI/Pages/User/Hotels/HotelManageTransfers.razor new file mode 100644 index 00000000..29a9eb90 --- /dev/null +++ b/TIAMSharedUI/Pages/User/Hotels/HotelManageTransfers.razor @@ -0,0 +1,393 @@ +@page "/hotel/transfers/{HotelId:guid}" +@using BlazorAnimation +@using TIAM.Core.Consts +@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 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 +@using TIAMSharedUI.Shared.Components.BaseComponents +@inherits UserBasePageComponent +@layout AdminLayout +@inject IWizardProcessor wizardProcessor +@inject ITransferDataService transferDataService +@inject AdminSignalRClient AdminSignalRClient; +Transfers + +
+

Transfer management

+

Manage transfers here!

+
+ + + + + + + + + + + +
+
+
+ +
+ + + + +
+
+ +
+ + + + + + + + + @{ + var idKeyField = ((Transfer)context.DataItem).Id.ToString("N"); + var editUri = $"hotel/mytransfers/{idKeyField}"; + + @context.Value + + } + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+ +
+
+ +
+
+ + +@code { + + [Parameter] + public Guid HotelId { get; set; } + private LoggerClient _logger; + + private bool _popupVisible; + private TransferGrid _gridTransfer; + + private DxTagBox _filterTag; + + public List IgnoreList = + [ + "ReceiverEmailAddress", + "ReceiverFullName", + "ReceiverId", + "SenderEmailAddress", + "SenderFullName", + "SenderId", + "ContextId", + "ContextType" + ]; + + private static List _selectedCategories = TransferStatusModel.AllStatuses.Values.Where(x => x.StatusValue != TransferStatusType.Finished && x.StatusValue != TransferStatusType.UserCanceled && x.StatusValue != TransferStatusType.AdminDenied).ToList(); + + + private MessageWizardModel _messageWizardModel = new(); + + public List AppointmentModels { get; set; } = null!; + + DateTime StartDate { get; set; } = DateTime.Today; + DxSchedulerDataStorage _dataStorage = new(); + + + void SendMail(Transfer item) + { + _logger.Info($"Preparing mail to {item.ContactEmail}, {item.Id}"); + _messageWizardModel.Subject = $"[#{item.OrderId}] New message regarding your transfer"; + _messageWizardModel.ReceiverId = item.UserId; + _messageWizardModel.ContextId = item.Id; + _messageWizardModel.ContextType = MessageContextType.Transfer; + _messageWizardModel.SenderId = TiamConstClient.SysAccounts["SystemEmailSender"]; + _messageWizardModel.SenderEmailAddress = TiamConstClient.SystemEmailAddress; + _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)!; + _logger.Info(messageModel.Content); + var email = await wizardProcessor.ProcessWizardAsync(result.GetType(), messageModel); + _logger.Info($"Submitted nested form: {result.GetType().FullName}"); + CancelCreateClick(); + } + + 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()); + } + _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); + } + } + +} \ No newline at end of file diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageServiceProviders.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageServiceProviders.razor index 86e2ca68..ebb8a7ee 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageServiceProviders.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageServiceProviders.razor @@ -141,10 +141,10 @@ var transfer2 = (Company)EditFormContext.EditModel; } - + @EditFormContext.GetEditor("Name") - + @EditFormContext.GetEditor("CommissionPercent") diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor index 2aa0916e..9e34b187 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ProductDetailGridComponent.razor @@ -147,10 +147,10 @@ private ProductDetailGrid _productGrid = null!; private LoggerClient _logger = null!; - + private async Task CopyUrl(string url) { - + await JsRuntime.InvokeVoidAsync("copyToClipboard", url); } @@ -189,6 +189,7 @@ { TransferDestination transferDestination = new TransferDestination(); transferDestination.Id = Guid.NewGuid(); + transferDestination.ProductId = product.Id; transferDestination.Name = product.Name; if (!string.IsNullOrEmpty(product.Profile.Description)) { diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ProductGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/ProductGridComponent.razor index ca534687..b3f377c5 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ProductGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ProductGridComponent.razor @@ -126,9 +126,9 @@ @editFormContext.GetEditor("ProductType") - + @* @editFormContext.GetEditor("Price") - + *@ @editFormContext.GetEditor("Description") @@ -189,6 +189,7 @@ { TransferDestination transferDestination = new TransferDestination(); transferDestination.Id = Guid.NewGuid(); + transferDestination.ProductId = product.Id; transferDestination.Name = product.Name; if (!string.IsNullOrEmpty(product.Profile.Description)) { diff --git a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs index 41e40d3f..ea8eb0a9 100644 --- a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs +++ b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs @@ -668,8 +668,7 @@ namespace TIAMWebApp.Server.Controllers //check if revenue should be calculated if (transfer.ProductId.HasValue && transfer.Price > 0) { - if (transfer.Revenue == 0) - { + //price seems to have changed, update commission if (to == null) { @@ -677,15 +676,14 @@ namespace TIAMWebApp.Server.Controllers var product = await _adminDal.Context.Products.FirstOrDefaultAsync(x => x.Id == transfer.ProductId); if(product != null) { - transfer.Revenue = transfer.Price * product.ServiceProvider.CommissionPercent; + transfer.Revenue = transfer.Price * product.ServiceProvider.CommissionPercent/100; } } else { transfer.Revenue = _transferBackendService.GetCommission((Guid)transfer.ProductId, (double)transfer.Price, to); - } - } + } } return await _adminDal.UpdateTransferAsync(transfer); }