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