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 @@
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);
}