using AyCode.Blazor.Models.ViewModels; using Newtonsoft.Json; using System.Security.Cryptography.Xml; using TIAM.Core.Enums; using TIAM.Entities.Transfers; namespace TIAM.Models.PageViewModels; public class DriverManageTransfersPageModel : AcPageViewModelBase { private readonly object _forLock = new(); private const int AppointmentWaitingHours = 3; public int UnreadMessagesCount { 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; var localNowSubstractWaitingHour = localNow.AddHours(-1 * AppointmentWaitingHours); _upcomings.AddRange(Transfers.Where(x => x.Appointment >= localNowSubstractWaitingHour)); } 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 localNowAddedWaitingHour = localNow.AddHours(AppointmentWaitingHours); _problems.AddRange(Transfers.Where(x => x.Appointment < localNowAddedWaitingHour && x.TransferStatusType != TransferStatusType.Finished)); } return _problems; } } public DriverManageTransfersPageModel() { } public DriverManageTransfersPageModel(IEnumerable transfers, int unreadMessagesCount) { Initialize(transfers, unreadMessagesCount); } public void Initialize(DriverManageTransfersPageModel? driverManageTransfersPageModel) { if (driverManageTransfersPageModel == null) return; Initialize(driverManageTransfersPageModel.Transfers, driverManageTransfersPageModel.UnreadMessagesCount); } public void Initialize(IEnumerable transfers, int unreadMessagesCount) { lock (_forLock) { ClearAll(); Transfers.AddRange(transfers.Where(t => t.TransferStatusType != TransferStatusType.UserCanceled && t.TransferStatusType != TransferStatusType.AdminDenied)); } UnreadMessagesCount = unreadMessagesCount; } public void ClearAll() { lock (_forLock) { Transfers.Clear(); Upcomings.Clear(); Problems.Clear(); } UnreadMessagesCount = 0; } }