Impoelement DriverManageTransfersPageModel; improvements, fixes, etc...
This commit is contained in:
parent
fa85155b57
commit
919ea8b691
|
|
@ -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<List<Transfer>> GetTransfersByProductIdAsync(Guid productId) => SessionAsync(ctx => ctx.GetTransfersByProductId(productId).OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToList());
|
||||
public Task<List<Transfer>> GetTransfersByUserProductMappingIdAsync(Guid userProductMappingId) => SessionAsync(ctx => ctx.GetTransfersByUserProductMappingId(userProductMappingId).OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToList());
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="driverId">UserProductMappingId</param>
|
||||
/// <returns></returns>
|
||||
public Task<DriverManageTransfersPageModel> 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<List<Transfer>> GetTransfersAsync() => SessionAsync(ctx => ctx.GetTransfers().OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToList());
|
||||
public Task<string> GetTransfersJsonAsync() => SessionAsync(ctx => ctx.GetTransfers().OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToJson());
|
||||
public Task<List<Transfer>> 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<List<EmailMessage>> GetAllEmailMessagesAsync() => SessionAsync(ctx => ctx.GetAllEmailMessages<EmailMessage, EmailRecipient>().OrderByDescending(x => x.Created).ToList());
|
||||
|
||||
public Task<List<EmailMessage>> GetEmailMessagesByUserId(Guid userId)
|
||||
{
|
||||
return SessionAsync(ctx =>
|
||||
{
|
||||
return ctx.GetEmailMessagesByIds<EmailMessage, EmailRecipient>(ctx.GetUserProductMappingsByUserId(userId).Select(x => x.Id).Concat([userId])).ToList();
|
||||
});
|
||||
}
|
||||
=> SessionAsync(ctx => ctx.GetEmailMessagesByIds<EmailMessage, EmailRecipient>(ctx.GetUserProductMappingsByUserId(userId).Select(x => x.Id).Concat([userId])).ToList());
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="driverId">UserProductMappingId</param>
|
||||
/// <returns></returns>
|
||||
public Task<List<EmailMessage>> GetTransfersMessagesByDriverIdAsync(Guid driverId)
|
||||
=> SessionAsync(ctx => GetTransfersMessagesByDriverIdInnerAsync(ctx, driverId)?.OrderByDescending(x => x.Created).ToList() ?? []);
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="driverId">UserProductMappingId</param>
|
||||
/// <returns></returns>
|
||||
public Task<List<EmailMessage>> GetTransfersMessagesByDriverIdAsync(Guid driverId) => SessionAsync(ctx =>
|
||||
public Task<int> GetTransfersMessagesUnreadedCountByDriverIdAsync(Guid driverId)
|
||||
=> SessionAsync(ctx => GetTransfersMessagesByDriverIdInnerAsync(ctx, driverId)?.Count(x => !x.IsReaded) ?? 0);
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="ctx"></param>
|
||||
/// <param name="driverId">UserProductMappingId</param>
|
||||
/// <returns></returns>
|
||||
private static IQueryable<EmailMessage>? 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<EmailMessage, EmailRecipient>(driverId) //TODO: jövőben elég lesz a driverId is és mehet vissza ez a sor! - J.
|
||||
return ctx.GetEmailMessagesByUserIdOrUpmId<EmailMessage, EmailRecipient>(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<bool> AddEmailMessageAsync(EmailMessage emailMessage)
|
||||
=> TransactionAsync(ctx => ctx.AddEmailMessage(emailMessage));
|
||||
|
|
|
|||
|
|
@ -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<Transfer> Transfers { get; set; } = [];
|
||||
|
||||
private readonly List<Transfer> _upcomings = [];
|
||||
private readonly List<Transfer> _problems = [];
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Value set on the client side!
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public List<Transfer> Upcomings
|
||||
{
|
||||
get
|
||||
{
|
||||
lock (_forLock)
|
||||
{
|
||||
if (_upcomings.Count > 0) return _upcomings;
|
||||
|
||||
var localNow = DateTime.Now;
|
||||
_upcomings.AddRange(Transfers.Where(x => x.Appointment >= localNow));
|
||||
}
|
||||
|
||||
return _upcomings;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Value set on the client side!
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public List<Transfer> 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<Transfer> transfers, int unreadedMessagesCount)
|
||||
{
|
||||
Initialize(transfers, unreadedMessagesCount);
|
||||
}
|
||||
|
||||
public void Initialize(DriverManageTransfersPageModel? driverManageTransfersPageModel)
|
||||
{
|
||||
if (driverManageTransfersPageModel == null) return;
|
||||
|
||||
Initialize(driverManageTransfersPageModel.Transfers, driverManageTransfersPageModel.UnreadedMessagesCount);
|
||||
}
|
||||
|
||||
public void Initialize(IEnumerable<Transfer> 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -9,9 +9,13 @@
|
|||
<ItemGroup>
|
||||
<Folder Include="Dtos\Profiles\" />
|
||||
<Folder Include="Dtos\UserProductMappings\" />
|
||||
<Folder Include="GridViewModels\" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\Aycode.Blazor\AyCode.Blazor.Components\AyCode.Blazor.Components.csproj" />
|
||||
<ProjectReference Include="..\..\Aycode.Blazor\AyCode.Blazor.Models\AyCode.Blazor.Models.csproj" />
|
||||
<ProjectReference Include="..\..\Aycode.Blazor\AyCode.Maui.Core\AyCode.Maui.Core.csproj" />
|
||||
<ProjectReference Include="..\TIAM.Core\TIAM.Core.csproj" />
|
||||
<ProjectReference Include="..\TIAM.Entities\TIAM.Entities.csproj" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
<PageTitle>Transfers</PageTitle>
|
||||
|
||||
|
|
@ -72,15 +75,14 @@
|
|||
<div class=" col-12">
|
||||
|
||||
<DxTabs>
|
||||
<DxTabPage Text="Upcoming">
|
||||
<DxTabPage Text="@($"Upcoming({PageModel.Upcomings.Count})")">
|
||||
<DxAccordion ExpandMode="ExpandMode"
|
||||
ExpandCollapseAction="ExpandCollapseAction"
|
||||
AnimationType="LayoutAnimationType.Slide">
|
||||
<Items>
|
||||
@foreach (var (transfer, i) in Upcoming)
|
||||
@foreach (var transfer in PageModel.Upcomings)
|
||||
{
|
||||
|
||||
<DxAccordionItem CssClass="@GetCustomColor(transfer.TransferStatusType)" Text=@($"{transfer.Appointment} - {transfer.FromAddress}") Expanded=@(i == 0)>
|
||||
<DxAccordionItem CssClass="@GetCustomColor(transfer.TransferStatusType)" Text=@($"{transfer.Appointment} - {transfer.FromAddress} [#{transfer.OrderId}]")>
|
||||
<ContentTemplate>
|
||||
<div class="py-3 px-3">
|
||||
<TransferCardComponent DataChanged="RefreshComponent" Context="@transfer" />
|
||||
|
|
@ -91,7 +93,33 @@
|
|||
</Items>
|
||||
</DxAccordion>
|
||||
</DxTabPage>
|
||||
|
||||
|
||||
<DxTabPage Text="@($"Messages({PageModel.UnreadedMessagesCount})")">
|
||||
<div class="d-flex flex-column mb-4 pb-2">
|
||||
<MessageDetailGridComponent ContextId="driverId" GetAllMessageTag="SignalRTags.GetTransfersMessagesByDriverId" IsSenderEmailVisible="false" IsMessageTextVisible="false"></MessageDetailGridComponent>
|
||||
</div>
|
||||
</DxTabPage>
|
||||
|
||||
<DxTabPage Text="@($"Problems({PageModel.Problems.Count})")">
|
||||
<DxAccordion ExpandMode="ExpandMode"
|
||||
ExpandCollapseAction="ExpandCollapseAction"
|
||||
AnimationType="LayoutAnimationType.Slide">
|
||||
<Items>
|
||||
@foreach (var transfer in PageModel.Problems)
|
||||
{
|
||||
|
||||
<DxAccordionItem CssClass="@GetCustomColor(transfer.TransferStatusType)" Text=@($"{transfer.Appointment} - {transfer.FromAddress} [#{transfer.OrderId}]")>
|
||||
<ContentTemplate>
|
||||
<div class="py-3 px-3">
|
||||
<TransferCardComponent DataChanged="RefreshComponent" Context="@transfer" />
|
||||
</div>
|
||||
</ContentTemplate>
|
||||
</DxAccordionItem>
|
||||
}
|
||||
</Items>
|
||||
</DxAccordion>
|
||||
</DxTabPage>
|
||||
|
||||
<DxTabPage Text="Calendar">
|
||||
<div class="d-flex flex-column mb-4 pb-2">
|
||||
<DxScheduler @bind-StartDate="@StartDate"
|
||||
|
|
@ -108,35 +136,6 @@
|
|||
</DxScheduler>
|
||||
</div>
|
||||
</DxTabPage>
|
||||
|
||||
<DxTabPage Text="Messages">
|
||||
<div class="d-flex flex-column mb-4 pb-2">
|
||||
<MessageDetailGridComponent ContextId="driverId" GetAllMessageTag="SignalRTags.GetTransfersMessagesByDriverId" IsSenderEmailVisible="false" IsMessageTextVisible="false"></MessageDetailGridComponent>
|
||||
</div>
|
||||
</DxTabPage>
|
||||
|
||||
<DxTabPage Text="Problems">
|
||||
<DxAccordion ExpandMode="ExpandMode"
|
||||
ExpandCollapseAction="ExpandCollapseAction"
|
||||
AnimationType="LayoutAnimationType.Slide">
|
||||
<Items>
|
||||
@foreach (var (transfer, i) in Problems)
|
||||
{
|
||||
|
||||
<DxAccordionItem CssClass="@GetCustomColor(transfer.TransferStatusType)" Text=@($"{transfer.Appointment} - {transfer.FromAddress}") Expanded=@(i == 0)>
|
||||
<ContentTemplate>
|
||||
<div class="py-3 px-3">
|
||||
<TransferCardComponent DataChanged="RefreshComponent" Context="@transfer" />
|
||||
</div>
|
||||
</ContentTemplate>
|
||||
</DxAccordionItem>
|
||||
}
|
||||
</Items>
|
||||
</DxAccordion>
|
||||
</DxTabPage>
|
||||
|
||||
|
||||
|
||||
|
||||
<DxTabPage Text="History">
|
||||
<div class="d-flex flex-column mb-4 pb-2">
|
||||
|
|
@ -186,10 +185,6 @@
|
|||
private TransferGrid _gridTransfer;
|
||||
private bool _popupVisible;
|
||||
|
||||
private List<Transfer>? 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<List<Transfer>>(SignalRTags.GetTransfersByUserProductMappingId, DriverId);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void SendMail(Transfer item)
|
||||
|
|
@ -390,23 +383,35 @@
|
|||
}
|
||||
|
||||
|
||||
|
||||
//readonly DriverManageTransfersPageModel PageModel = new();
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
_logger = new LoggerClient<DriverManageTransfers>(LogWriters.ToArray());
|
||||
if (transfers != null)
|
||||
{
|
||||
var test = DriverId.ToString();
|
||||
var result = await AdminSignalRClient.GetByIdAsync<List<Transfer>>(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<DriverManageTransfersPageModel>(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<Transfer> transferDataList)
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -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<ISecureStorageHandler, SecureStorageHandler>();
|
|||
builder.Services.AddBlazoredLocalStorage();
|
||||
builder.Services.AddSingleton<ISessionService, SessionServiceWeb>();
|
||||
|
||||
builder.Services.AddSingleton<DriverManageTransfersPageModel>();
|
||||
builder.Services.AddSingleton<IComponentUpdateService, ComponentUpdateServiceWeb>();
|
||||
|
||||
builder.Services.AddScoped<IServiceProviderDataService, ServiceProviderDataService>();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="driverId">UserProductMappingId</param>
|
||||
/// <returns></returns>
|
||||
[NonAction]
|
||||
[SignalR(SignalRTags.GetDriverManageTransfersPageModelByDriverId)]
|
||||
public async Task<DriverManageTransfersPageModel> GetDriverManageTransfersPageModelByDriverId(Guid driverId)
|
||||
{
|
||||
_logger.Debug($"GetTransferByDriverId called; userProductMappingId: {driverId}");
|
||||
|
||||
return await _adminDal.GetDriverManageTransfersPageModelByDriverId(driverId);
|
||||
}
|
||||
|
||||
|
||||
[AllowAnonymous]
|
||||
[HttpPost]
|
||||
|
|
|
|||
Loading…
Reference in New Issue