From 919ea8b691c555e238606b91f6af82be9d94122d Mon Sep 17 00:00:00 2001 From: Loretta Date: Mon, 19 Aug 2024 19:03:03 +0200 Subject: [PATCH] Impoelement DriverManageTransfersPageModel; improvements, fixes, etc... --- TIAM.Database/DataLayers/Admins/AdminDal.cs | 49 +++++--- .../DriverManageTransfersPageModel.cs | 90 +++++++++++++++ TIAM.Models/TIAM.Models.csproj | 4 + TIAM.Services/SignalRTags.cs | 1 + .../User/Drivers/DriverManageTransfers.razor | 105 +++++++++--------- TIAMWebApp/Client/Program.cs | 2 + .../Controllers/TransferDataAPIController.cs | 15 +++ 7 files changed, 203 insertions(+), 63 deletions(-) create mode 100644 TIAM.Models/PageViewModels/DriverManageTransfersPageModel.cs diff --git a/TIAM.Database/DataLayers/Admins/AdminDal.cs b/TIAM.Database/DataLayers/Admins/AdminDal.cs index c110fc03..12bedea4 100644 --- a/TIAM.Database/DataLayers/Admins/AdminDal.cs +++ b/TIAM.Database/DataLayers/Admins/AdminDal.cs @@ -32,6 +32,7 @@ using TIAM.Database.DbSets.Drivers; using AyCode.Entities.Server.LogItems; using AyCode.Interfaces.Entities; using TIAM.Models.Dtos.Users; +using TIAM.Models.PageViewModels; namespace TIAM.Database.DataLayers.Admins { @@ -60,6 +61,19 @@ namespace TIAM.Database.DataLayers.Admins public Task> GetTransfersByProductIdAsync(Guid productId) => SessionAsync(ctx => ctx.GetTransfersByProductId(productId).OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToList()); public Task> GetTransfersByUserProductMappingIdAsync(Guid userProductMappingId) => SessionAsync(ctx => ctx.GetTransfersByUserProductMappingId(userProductMappingId).OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToList()); + /// + /// + /// + /// UserProductMappingId + /// + public Task GetDriverManageTransfersPageModelByDriverId(Guid driverId) => SessionAsync(ctx => + { + var transfers = ctx.GetTransfersByUserProductMappingId(driverId).OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId); + var unreadedMessagesCount = GetTransfersMessagesByDriverIdInnerAsync(ctx, driverId)?.Count(x => !x.IsReaded) ?? 0; + + return new DriverManageTransfersPageModel(transfers, unreadedMessagesCount); + }); + public Task> GetTransfersAsync() => SessionAsync(ctx => ctx.GetTransfers().OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToList()); public Task GetTransfersJsonAsync() => SessionAsync(ctx => ctx.GetTransfers().OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToJson()); public Task> GetTransfersByUserIdAsync(Guid userId) => SessionAsync(ctx => ctx.GetTransfersByUserId(userId).OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToList()); @@ -323,31 +337,40 @@ namespace TIAM.Database.DataLayers.Admins public Task> GetAllEmailMessagesAsync() => SessionAsync(ctx => ctx.GetAllEmailMessages().OrderByDescending(x => x.Created).ToList()); public Task> GetEmailMessagesByUserId(Guid userId) - { - return SessionAsync(ctx => - { - return ctx.GetEmailMessagesByIds(ctx.GetUserProductMappingsByUserId(userId).Select(x => x.Id).Concat([userId])).ToList(); - }); - } + => SessionAsync(ctx => ctx.GetEmailMessagesByIds(ctx.GetUserProductMappingsByUserId(userId).Select(x => x.Id).Concat([userId])).ToList()); + + /// + /// + /// + /// UserProductMappingId + /// + public Task> GetTransfersMessagesByDriverIdAsync(Guid driverId) + => SessionAsync(ctx => GetTransfersMessagesByDriverIdInnerAsync(ctx, driverId)?.OrderByDescending(x => x.Created).ToList() ?? []); /// /// /// /// UserProductMappingId /// - public Task> GetTransfersMessagesByDriverIdAsync(Guid driverId) => SessionAsync(ctx => + public Task GetTransfersMessagesUnreadedCountByDriverIdAsync(Guid driverId) + => SessionAsync(ctx => GetTransfersMessagesByDriverIdInnerAsync(ctx, driverId)?.Count(x => !x.IsReaded) ?? 0); + + /// + /// + /// + /// + /// UserProductMappingId + /// + private static IQueryable? GetTransfersMessagesByDriverIdInnerAsync(AdminDbContext ctx, Guid driverId) { //TODO: Az upm.UserId elvben nem kell, csak amíg nem fix a db! semmilyen gondot nem okoz... - J. var upm = ctx.GetUserProductMappingById(driverId); - if (upm == null) return []; + if (upm == null) return default; //return ctx.GetEmailMessages(driverId) //TODO: jövőben elég lesz a driverId is és mehet vissza ez a sor! - J. return ctx.GetEmailMessagesByUserIdOrUpmId(upm.UserId, driverId) - .Where(emailMessage => ctx.TransferToDrivers.Any(transferToDriver => transferToDriver.TransferId == emailMessage.ContextId && transferToDriver.UserProductMappingId == driverId)) - .OrderByDescending(x => x.Created) - .ToList(); - }); - + .Where(emailMessage => ctx.TransferToDrivers.Any(transferToDriver => transferToDriver.TransferId == emailMessage.ContextId && transferToDriver.UserProductMappingId == driverId)); + } public Task AddEmailMessageAsync(EmailMessage emailMessage) => TransactionAsync(ctx => ctx.AddEmailMessage(emailMessage)); diff --git a/TIAM.Models/PageViewModels/DriverManageTransfersPageModel.cs b/TIAM.Models/PageViewModels/DriverManageTransfersPageModel.cs new file mode 100644 index 00000000..2217ee75 --- /dev/null +++ b/TIAM.Models/PageViewModels/DriverManageTransfersPageModel.cs @@ -0,0 +1,90 @@ +using AyCode.Blazor.Models.ViewModels; +using Newtonsoft.Json; +using TIAM.Core.Enums; +using TIAM.Entities.Transfers; + +namespace TIAM.Models.PageViewModels; + +public class DriverManageTransfersPageModel : AcPageViewModelBase +{ + private readonly object _forLock = new(); + + public int UnreadedMessagesCount { get; set; } + public List Transfers { get; set; } = []; + + private readonly List _upcomings = []; + private readonly List _problems = []; + + + /// + /// Value set on the client side! + /// + [JsonIgnore] + public List Upcomings + { + get + { + lock (_forLock) + { + if (_upcomings.Count > 0) return _upcomings; + + var localNow = DateTime.Now; + _upcomings.AddRange(Transfers.Where(x => x.Appointment >= localNow)); + } + + return _upcomings; + } + } + + /// + /// Value set on the client side! + /// + [JsonIgnore] + public List Problems + { + get + { + lock (_forLock) + { + if (_problems.Count > 0) return _problems; + + var localNow = DateTime.Now; + var localNowAddedThreeHour = localNow.AddHours(3); + + _problems.AddRange(Transfers.Where(x => x.Appointment < localNowAddedThreeHour && x.TransferStatusType != TransferStatusType.Finished)); + } + + return _problems; + } + } + + public DriverManageTransfersPageModel() + { + } + + public DriverManageTransfersPageModel(IEnumerable transfers, int unreadedMessagesCount) + { + Initialize(transfers, unreadedMessagesCount); + } + + public void Initialize(DriverManageTransfersPageModel? driverManageTransfersPageModel) + { + if (driverManageTransfersPageModel == null) return; + + Initialize(driverManageTransfersPageModel.Transfers, driverManageTransfersPageModel.UnreadedMessagesCount); + } + + public void Initialize(IEnumerable transfers, int unreadedMessagesCount) + { + lock (_forLock) + { + Transfers.Clear(); + Transfers.AddRange(transfers.Where(t => t.TransferStatusType != TransferStatusType.UserCanceled && t.TransferStatusType != TransferStatusType.AdminDenied)); + + Upcomings.Clear(); + Problems.Clear(); + } + + UnreadedMessagesCount = unreadedMessagesCount; + } +} diff --git a/TIAM.Models/TIAM.Models.csproj b/TIAM.Models/TIAM.Models.csproj index 7238f820..140b006b 100644 --- a/TIAM.Models/TIAM.Models.csproj +++ b/TIAM.Models/TIAM.Models.csproj @@ -9,9 +9,13 @@ + + + + diff --git a/TIAM.Services/SignalRTags.cs b/TIAM.Services/SignalRTags.cs index 8619fb2f..6bac8829 100644 --- a/TIAM.Services/SignalRTags.cs +++ b/TIAM.Services/SignalRTags.cs @@ -13,6 +13,7 @@ public class SignalRTags : AcSignalRTags public const int GetTransfersByCompanyId = 6; public const int GetTransfersByUserProductMappingId = 701; public const int GetTransfersByOrderingProductId = 702; + public const int GetDriverManageTransfersPageModelByDriverId = 703; public const int GetTransfersByFilterText = 301; diff --git a/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor b/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor index a9e02353..b85c6d1b 100644 --- a/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor @@ -22,8 +22,10 @@ @using AyCode.Core.Consts @using AyCode.Core @using AyCode.Core.Helpers +@using AyCode.Services.SignalRs @using DevExpress.Data.Filtering @using TIAM.Entities.Emails +@using TIAM.Models.PageViewModels @using TIAMSharedUI.Shared.Components.BaseComponents @inherits UserBasePageComponent @layout AdminLayout @@ -32,6 +34,7 @@ @inject IWizardProcessor wizardProcessor @inject ITransferDataService transferDataService @inject ISessionService sessionService +@inject DriverManageTransfersPageModel PageModel; @inject AdminSignalRClient AdminSignalRClient; Transfers @@ -72,15 +75,14 @@
- + - @foreach (var (transfer, i) in Upcoming) + @foreach (var transfer in PageModel.Upcomings) { - - +
@@ -91,7 +93,33 @@ - + + +
+ +
+
+ + + + + @foreach (var transfer in PageModel.Problems) + { + + + +
+ +
+
+
+ } +
+
+
+
- - -
- -
-
- - - - - @foreach (var (transfer, i) in Problems) - { - - - -
- -
-
-
- } -
-
-
- - -
@@ -186,10 +185,6 @@ private TransferGrid _gridTransfer; private bool _popupVisible; - private List? transfers = []; - IEnumerable<(Transfer, int)> Upcoming = []; - IEnumerable<(Transfer, int)> Problems = []; - AccordionExpandMode ExpandMode { get; set; } = AccordionExpandMode.SingleOrNone; AccordionExpandCollapseAction ExpandCollapseAction { get; set; } = AccordionExpandCollapseAction.HeaderClick; @@ -299,8 +294,6 @@ { driverId = DriverId; // transfers = await AdminSignalRClient.GetByIdAsync>(SignalRTags.GetTransfersByUserProductMappingId, DriverId); - - } void SendMail(Transfer item) @@ -390,23 +383,35 @@ } - + //readonly DriverManageTransfersPageModel PageModel = new(); protected override async Task OnInitializedAsync() { _logger = new LoggerClient(LogWriters.ToArray()); - if (transfers != null) - { - var test = DriverId.ToString(); - var result = await AdminSignalRClient.GetByIdAsync>(SignalRTags.GetTransfersByUserProductMappingId, DriverId); - transfers = result.Where(t => t.TransferStatusType != TransferStatusType.UserCanceled && t.TransferStatusType != TransferStatusType.AdminDenied).ToList(); - Upcoming = transfers.Where(x => x.Appointment >= DateTime.Now).Select((item, index) => (item, index)); - Problems = transfers.Where(x => x.Appointment < DateTime.Now && x.TransferStatusType != TransferStatusType.Finished).Select((item, index) => (item, index)); - InitializeAppointments(transfers); - } + InitializePage(DriverId); + await base.OnInitializedAsync(); } + private void InitializePage(Guid driverId2) + { + AdminSignalRClient.GetByIdAsync(SignalRTags.GetDriverManageTransfersPageModelByDriverId, response=> + { + if (response.Status == SignalResponseStatus.Error || response.ResponseData == null) + { + _logger.Error("response.Status == SignalResponseStatus.Error || response.ResponseData == null"); + return Task.CompletedTask; + } + + PageModel.Initialize(response.ResponseData); + + InitializeAppointments(PageModel.Transfers); + StateHasChanged(); + + return Task.CompletedTask; + }, driverId2).Forget(); + } + private void GroupTransfers(List transferDataList) { diff --git a/TIAMWebApp/Client/Program.cs b/TIAMWebApp/Client/Program.cs index 7cea4e76..2b38c699 100644 --- a/TIAMWebApp/Client/Program.cs +++ b/TIAMWebApp/Client/Program.cs @@ -13,6 +13,7 @@ using TIAMWebApp.Shared.Application.Utility; using AyCode.Services.Loggers; using System.Net; using Microsoft.AspNetCore.Components.Authorization; +using TIAM.Models.PageViewModels; var builder = WebAssemblyHostBuilder.CreateDefault(args); @@ -29,6 +30,7 @@ builder.Services.AddScoped(); builder.Services.AddBlazoredLocalStorage(); builder.Services.AddSingleton(); +builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddScoped(); diff --git a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs index fcdd8575..3913a044 100644 --- a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs +++ b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs @@ -34,6 +34,7 @@ using TIAM.Entities.Products; using AyCode.Core.Enums; using TIAM.Core.Consts; using System.Security.Cryptography.Xml; +using TIAM.Models.PageViewModels; namespace TIAMWebApp.Server.Controllers { @@ -724,6 +725,20 @@ namespace TIAMWebApp.Server.Controllers return result.ToJson(); } + /// + /// + /// + /// UserProductMappingId + /// + [NonAction] + [SignalR(SignalRTags.GetDriverManageTransfersPageModelByDriverId)] + public async Task GetDriverManageTransfersPageModelByDriverId(Guid driverId) + { + _logger.Debug($"GetTransferByDriverId called; userProductMappingId: {driverId}"); + + return await _adminDal.GetDriverManageTransfersPageModelByDriverId(driverId); + } + [AllowAnonymous] [HttpPost]