diff --git a/TIAM.Database/DataLayers/Admins/AdminDal.cs b/TIAM.Database/DataLayers/Admins/AdminDal.cs index 83d49ecd..ba616507 100644 --- a/TIAM.Database/DataLayers/Admins/AdminDal.cs +++ b/TIAM.Database/DataLayers/Admins/AdminDal.cs @@ -168,6 +168,8 @@ namespace TIAM.Database.DataLayers.Admins public Task> GetTransferToDriversByUpmId(Guid upmId, bool autoInclude = true) => SessionAsync(ctx => ctx.GetTransferToDriversByUpmId(upmId, autoInclude).ToList()); public Task> GetTransferToDriversByTransferIdAsync(Guid transferId, bool autoInclude = true) => SessionAsync(ctx => ctx.GetTransferToDriversByTransferId(transferId, autoInclude).ToList()); + public Task> GetTransferToDriversByProductIdAsync(Guid productId, bool autoInclude = true) => SessionAsync(ctx => ctx.GetTransferToDriversByProductId(productId, autoInclude).ToList()); + public Task AddTransferToDriverAsync(TransferToDriver transferToDriver) => TransactionAsync(ctx => ctx.AddTransferToDriver(transferToDriver)); public Task UpdateTransferToDriverAsync(TransferToDriver transferToDriver) diff --git a/TIAM.Database/DbSets/Transfers/TransferToDriverDbSetExtensions.cs b/TIAM.Database/DbSets/Transfers/TransferToDriverDbSetExtensions.cs index 1251a877..ac8300b1 100644 --- a/TIAM.Database/DbSets/Transfers/TransferToDriverDbSetExtensions.cs +++ b/TIAM.Database/DbSets/Transfers/TransferToDriverDbSetExtensions.cs @@ -21,21 +21,41 @@ public static class TransferToDriverDbSetExtensions .FirstOrDefault(x => x.Id == transferToDriverId); public static IQueryable GetTransferToDriversByTransferId(this ITransferToDriverDbSet ctx, Guid transferId, bool autoInclude = true) - => ctx.TransferToDrivers - .Where(x => x.TransferId == transferId) - .Include(x => x.Car.UserProductMapping.Product.ServiceProvider).ThenInclude(x => x.Products) - .Include(x => x.UserProductMapping.User.Profile.Address) - .Include(x => x.Transfer); + { + var query = ctx.TransferToDrivers.Where(x => x.TransferId == transferId); - //.Include(x => x.UserProductMapping.User.Products).ThenInclude(x => x.UserProductMappings) - //.Include(x => x.Car.UserProductMapping.Product.ServiceProvider).ThenInclude(x => x.Products) - //.Include(x => x.UserProductMapping.User.Profile.Address) - //.Include(x => x.Transfer); + if (autoInclude) + { + query = query.Include(x => x.Car.UserProductMapping.Product.ServiceProvider).ThenInclude(x => x.Products) + .Include(x => x.UserProductMapping.User.Profile.Address) + .Include(x => x.Transfer); + } - //.Include(x => x.UserProductMapping.User.Products).ThenInclude(x => x.UserProductMappings).ThenInclude(x => x.User.Profile.Address) - //.Include(x => x.Car.UserProductMapping.Product.ServiceProvider).ThenInclude(x => x.Products) - //.Include(x => x.UserProductMapping.User.Profile.Address) - //.Include(x => x.Transfer); + return query; + //.Include(x => x.UserProductMapping.User.Products).ThenInclude(x => x.UserProductMappings) + //.Include(x => x.Car.UserProductMapping.Product.ServiceProvider).ThenInclude(x => x.Products) + //.Include(x => x.UserProductMapping.User.Profile.Address) + //.Include(x => x.Transfer); + + //.Include(x => x.UserProductMapping.User.Products).ThenInclude(x => x.UserProductMappings).ThenInclude(x => x.User.Profile.Address) + //.Include(x => x.Car.UserProductMapping.Product.ServiceProvider).ThenInclude(x => x.Products) + //.Include(x => x.UserProductMapping.User.Profile.Address) + //.Include(x => x.Transfer); + } + + public static IQueryable GetTransferToDriversByProductId(this ITransferToDriverDbSet ctx, Guid productId, bool autoInclude = true) + { + var query = ctx.TransferToDrivers.Where(x => x.UserProductMapping.ProductId == productId); + + if (autoInclude) + { + query = query.Include(x => x.Car.UserProductMapping.Product.ServiceProvider).ThenInclude(x => x.Products) + .Include(x => x.UserProductMapping.User.Profile.Address) + .Include(x => x.Transfer); + } + + return query; + } public static IQueryable GetTransferToDriversByUpmId(this ITransferToDriverDbSet ctx, Guid upmId, bool autoInclude = true) => ctx.TransferToDrivers.Where(x => x.UserProductMappingId == upmId); diff --git a/TIAM.Services/Interfaces/ITransferApiControllerClient.cs b/TIAM.Services/Interfaces/ITransferApiControllerClient.cs index fcee6203..48490958 100644 --- a/TIAM.Services/Interfaces/ITransferApiControllerClient.cs +++ b/TIAM.Services/Interfaces/ITransferApiControllerClient.cs @@ -1,4 +1,5 @@ -using TIAM.Entities.Transfers; +using AyCode.Services.SignalRs; +using TIAM.Entities.Transfers; namespace TIAM.Services.Interfaces; @@ -6,4 +7,6 @@ public interface ITransferApiControllerClient : ITransferApiControllerCommon { Task GetTransferDestinationsAsync(List intoDestinationList, Action? callback = null); Task GetPublicTransferDestinationsAsync(List intoDestinationList, Guid includeProductId, Action? callback = null); + + Task GetTransferToDriversByProductIdAsync(Guid productId, Func?>, Task> responseCallback); } \ No newline at end of file diff --git a/TIAM.Services/Interfaces/ITransferApiControllerCommon.cs b/TIAM.Services/Interfaces/ITransferApiControllerCommon.cs index 430e755c..3168990c 100644 --- a/TIAM.Services/Interfaces/ITransferApiControllerCommon.cs +++ b/TIAM.Services/Interfaces/ITransferApiControllerCommon.cs @@ -20,6 +20,7 @@ public interface ITransferApiControllerCommon public Task> GetAllDriversByProductId(Guid productId); public Task GetTransferDriver(Guid transferDriverId); public Task> GetTransferDrivers(Guid transferId); + public Task?> GetTransferToDriversByProductId(Guid productId); public Task AddTransferDriver(TransferToDriver transferToDriver); public Task UpdateTransferDriver(TransferToDriver transferToDriver); public Task RemoveTransferDriver(TransferToDriver transferToDriver); diff --git a/TIAM.Services/SignalRTags.cs b/TIAM.Services/SignalRTags.cs index 4770865b..b21a3385 100644 --- a/TIAM.Services/SignalRTags.cs +++ b/TIAM.Services/SignalRTags.cs @@ -36,9 +36,11 @@ public class SignalRTags : AcSignalRTags public const int GetAllDrivers = 23; public const int GetAllDriversByProductId = 24; public const int GetTransferDriversByTransferId = 25; - public const int AddTransferToDriver = 26; - public const int UpdateTransferToDriver = 27; - public const int RemoveTransferToDriver = 28; + public const int GetTransferToDriversByProductId = 26; + public const int AddTransferToDriver = 27; + public const int UpdateTransferToDriver = 28; + public const int RemoveTransferToDriver = 29; + public const int GetDriverManageTransfersPageModelByDriverId = 803; public const int GetAddress = 29; diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor index f366fd85..dfbd87d8 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor @@ -125,7 +125,7 @@ @{ var keyItem = (Transfer)context.DataItem; - @(string.Join(", ", keyItem.TransferToDrivers.Select(x => x.UserProductMapping?.User?.Profile?.GetFullName()))) + @(string.Join(", ", keyItem.TransferToDrivers.Select(x => x.UserProductMapping?.User?.Profile?.Name))) } @@ -164,7 +164,9 @@ - + @@ -274,7 +276,7 @@ private DxTagBox _filterTag; public List IgnoreList = - [ + [ "ReceiverEmailAddress", "ReceiverFullName", "ReceiverId", @@ -438,10 +440,15 @@ // _gridTransfer.SetFieldFilterCriteria(nameof(Transfer.TransferStatusType), filterCriteria); // } + private List? _allTransfersDrivers = null; + private void DataSourceChanged(IList transfers) { _logger.Info("DataSourceChanged called"); + if (_allTransfersDrivers == null && transfers.Count > 0) GetAllTransferToDriversFromDb(transfers); + else RefreshDatasourceAllTransferToDrivers(transfers); + InitializeAppointments(transfers); if (_selectedCategories.Count > 0) @@ -482,6 +489,8 @@ { _logger = new LoggerClient(_logWriters.ToArray()); + //GetAllTransferToDriversFromDb(null); + //await AdminSignalRClient.GetAllCarsByProductIdAsync(TiamConstClient.TransferProductId, _cars, StateHasChanged); //await base.OnInitializedAsync(); @@ -506,23 +515,23 @@ } _dataStorage = new DxSchedulerDataStorage + { + AppointmentMappings = new DxSchedulerAppointmentMappings() { - AppointmentMappings = new DxSchedulerAppointmentMappings() - { - Type = "AppointmentType", - Start = "StartDate", - End = "EndDate", - Subject = "Caption", - AllDay = "AllDay", - Location = "Location", - Description = "Description", - LabelId = "Label", - StatusId = "Status", - RecurrenceInfo = "Recurrence" - }, + Type = "AppointmentType", + Start = "StartDate", + End = "EndDate", + Subject = "Caption", + AllDay = "AllDay", + Location = "Location", + Description = "Description", + LabelId = "Label", + StatusId = "Status", + RecurrenceInfo = "Recurrence" + }, - AppointmentsSource = AppointmentModels - }; + AppointmentsSource = AppointmentModels + }; } public AppointmentModel CreateAppointmentModel(Transfer transfer) @@ -548,7 +557,7 @@ { if (selectedRow is not Transfer selectedTransfer) return; - RefreshTransferToDriversData(selectedTransfer, () => { _gridTransfer.Reload(); }); + //RefreshTransferToDriversData(selectedTransfer, () => { _gridTransfer.Reload(); }); } private void RefreshTransferToDriversData(Transfer? transfer, Action? callback = null) @@ -562,7 +571,7 @@ { if (x?.ResponseData == null) return Task.CompletedTask; - transfer.TransferToDrivers.UpdateCollection(x.ResponseData, false); + transfer.TransferToDrivers.UpdateCollection(x.ResponseData, false); callback?.Invoke(); return Task.CompletedTask; @@ -574,4 +583,50 @@ } } + private void GetAllTransferToDriversFromDb(IList? transfers) + { + _allTransfersDrivers = []; + + // _allTransfersDrivers = await AdminSignalRClient.GetTransferToDriversByProductId(TiamConstClient.TransferProductId); + // RefreshDatasourceAllTransferToDrivers(transfers); + + //TODO: itt kell az animált Driver column töltő icon-t megjeleníteni! - J. + AdminSignalRClient.GetTransferToDriversByProductIdAsync(TiamConstClient.TransferProductId, response => + { + //TODO: itt kell a Driver column töltő icon-t eltüntetni! - J. + if (response.ResponseData == null || response.ResponseData.Count == 0) return Task.CompletedTask; + + _allTransfersDrivers.AddRange(response.ResponseData); + + RefreshDatasourceAllTransferToDrivers(transfers); + + return Task.CompletedTask; + }).Forget(); + } + + private void RefreshDatasourceAllTransferToDrivers(IList? transfers) + { + if (_allTransfersDrivers == null || _allTransfersDrivers.Count == 0 || transfers == null || transfers.Count == 0) return; + + //lock (transfers) + { + foreach (var transfer in transfers.Where(t => t is { TransferStatusType: >= TransferStatusType.AssignedToDriver, TransferToDrivers.Count: 0 })) + { + var currentTransferDrivers = _allTransfersDrivers.Where(x => x.TransferId == transfer.Id).ToList(); + + if (currentTransferDrivers.Count > 0) + transfer.TransferToDrivers.UpdateCollection(currentTransferDrivers, false); + } + } + + _gridTransfer.Reload(); + //StateHasChanged(); + } + + private void OnTransferToDriverChanged(GridDataItemChangedEventArgs args) + { + _allTransfersDrivers?.UpdateCollection(args.DataItem, args.TrackingState == TrackingState.Remove); + _gridTransfer.Reload(); + } + } \ No newline at end of file diff --git a/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor index 8cd522fe..374009d3 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor @@ -50,7 +50,7 @@ var email = string.Empty; var transferToDriverDataItem = ((TransferToDriver)context.DataItem); - if (HasReadPermission(transferToDriverDataItem.UserProductMappingId)) + if (transferToDriverDataItem != null && HasReadPermission(transferToDriverDataItem.UserProductMappingId)) email = transferToDriverDataItem.UserProductMapping?.User.EmailAddress; } @email @@ -142,7 +142,7 @@ var price = string.Empty; var transferToDriverDataItem = ((TransferToDriver)context.DataItem); - if (HasReadPermission(transferToDriverDataItem.UserProductMappingId)) + if (transferToDriverDataItem != null && HasReadPermission(transferToDriverDataItem.UserProductMappingId)) price = transferToDriverDataItem.Price.ToString("N0"); } @@ -163,7 +163,7 @@ [Parameter] public Guid? DriverId { get; set; } = null; [Parameter] public Guid ContextId { get; set; } [Parameter] public ITransferToDriversRelation ParentData { get; set; } = null!; - [Parameter] public EventCallback OnTransferToDriverChanged { get; set; } + [Parameter] public EventCallback> OnTransferToDriverChanged { get; set; } [Parameter] public bool CommandColumnVisible { get; set; } = true; [Parameter] public bool NewButtonVisible { get; set; } = true; @@ -227,7 +227,7 @@ { //ParentData?.TransferToDrivers?.UpdateCollection(args.DataItem, args.TrackingState == TrackingState.Remove); - OnTransferToDriverChanged.InvokeAsync(args.DataItem); + OnTransferToDriverChanged.InvokeAsync(args); } private void DataItemSaving(GridEditModelSavingEventArgs args) diff --git a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs index 90e6e278..ebd95311 100644 --- a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs +++ b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs @@ -801,6 +801,18 @@ namespace TIAMWebApp.Server.Controllers return result; } + [Authorize] + [HttpGet] + [Route(APIUrls.GetTransferDriversByTransferIdRouteName)] + [SignalR(SignalRTags.GetTransferToDriversByProductId)] + public async Task> GetTransferToDriversByProductId(Guid productId) + { + _logger.Debug($"GetTransferToDriversByProductId called; productId: {productId}"); + + var result = await _adminDal.GetTransferToDriversByProductIdAsync(productId, false); + return result; + } + //[Authorize] //[HttpGet] //[Route(APIUrls.GetTransferDriversByTransferIdRouteName)] diff --git a/TIAMWebApp/Server/Program.cs b/TIAMWebApp/Server/Program.cs index bf06f344..5100ca03 100644 --- a/TIAMWebApp/Server/Program.cs +++ b/TIAMWebApp/Server/Program.cs @@ -52,7 +52,7 @@ builder.Services.AddSingleton(); builder.Services.AddScoped(); builder.Services.AddScoped(); -//Eddig a 23kb volt a legnagyobb MaximumReceiveMessageSize! "The default value of MaximumReceiveMessageSize is 32 KB" - J. +//Eddig a 32kb volt a legnagyobb MaximumReceiveMessageSize! "The default value of MaximumReceiveMessageSize is 32 KB" - J. builder.Services.AddSignalR(options => options.MaximumReceiveMessageSize = 256 * 1024);//.AddMessagePackProtocol(options => options.SerializerOptions = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData)); builder.Services.Configure(options => diff --git a/TIAMWebApp/Shared/Models/APIUrls.cs b/TIAMWebApp/Shared/Models/APIUrls.cs index 1b4af989..f4a779a0 100644 --- a/TIAMWebApp/Shared/Models/APIUrls.cs +++ b/TIAMWebApp/Shared/Models/APIUrls.cs @@ -159,6 +159,10 @@ namespace TIAMWebApp.Shared.Application.Models public const string GetTransferDriversByTransferIdRouteName = "GetTransferDriversByTransferId"; public const string GetTransferDriversByTransferId = TransferDataAPI + GetTransferDriversByTransferIdRouteName; + public const string GetTransferToDriversByProductIdRouteName = "GetTransferToDriversByProductId"; + public const string GetTransferToDriversByProductId = TransferDataAPI + GetTransferToDriversByProductIdRouteName; + + //serviceprovider public const string CreateServiceProviderRouteName = "CreateServiceProvider/"; public const string CreateServiceProvider = ServiceProviderAPI + CreateServiceProviderRouteName; diff --git a/TIAMWebApp/Shared/Services/AdminSignalRClient.cs b/TIAMWebApp/Shared/Services/AdminSignalRClient.cs index 6c2e9fb5..bc783c3b 100644 --- a/TIAMWebApp/Shared/Services/AdminSignalRClient.cs +++ b/TIAMWebApp/Shared/Services/AdminSignalRClient.cs @@ -102,6 +102,12 @@ namespace TIAMWebApp.Shared.Application.Services throw new NotImplementedException(); } + public Task GetTransferToDriversByProductIdAsync(Guid productId, Func?>, Task> responseCallback) + => GetByIdAsync?>(SignalRTags.GetTransferToDriversByProductId, responseCallback, [productId]); + + public Task?> GetTransferToDriversByProductId(Guid productId) + => GetByIdAsync>(SignalRTags.GetTransferToDriversByProductId, productId); + public async Task GetTransferDriver(Guid transferDriverId) { throw new NotImplementedException(); diff --git a/Tiam.Services.Client.Tests/SignalRClientTest.cs b/Tiam.Services.Client.Tests/SignalRClientTest.cs index 85455b19..42f0fe8e 100644 --- a/Tiam.Services.Client.Tests/SignalRClientTest.cs +++ b/Tiam.Services.Client.Tests/SignalRClientTest.cs @@ -317,10 +317,34 @@ namespace Tiam.Services.Client.Tests //var drivers = await _signalRClient.GetByIdAsync>(SignalRTags.GetTransferDriversByTransferId, transferId); var drivers = await _signalRClient.GetTransferDrivers(transferId); - await TaskHelper.WaitToAsync(() => drivers.Count > 0, 5000, 50); - + //await TaskHelper.WaitToAsync(() => drivers.Count > 0, 5000, 50); + + Assert.IsNotNull(drivers); Assert.IsTrue(drivers.Count > 0); Assert.IsTrue(drivers.All(driver => driver.TransferId == transferId)); } + + [TestMethod] + public async Task GetTransferDiversByProductIdAsyncTest_ReturnDrivers_WhenHasDrivers() + { + var transferToDrivers = new List(); + + _signalRClient.GetTransferToDriversByProductIdAsync(TiamConstClient.TransferProductId, response => + { + if (response.ResponseData == null || response.ResponseData.Count == 0) return Task.CompletedTask; + + transferToDrivers.AddRange(response.ResponseData); + return Task.CompletedTask; + }).Forget(); + + await TaskHelper.WaitToAsync(() => transferToDrivers.Count > 0, 10000, 50); + + //var transferToDrivers = await _signalRClient.GetTransferToDriversByProductId(TiamConstClient.TransferProductId); + + Assert.IsNotNull(transferToDrivers); + Assert.IsTrue(transferToDrivers.Count > 0); + Assert.IsTrue(transferToDrivers.All(driver => driver.UserProductMapping.ProductId == TiamConstClient.TransferProductId)); + } + } } \ No newline at end of file