TourIAm/TIAM.Models/PageViewModels/DriverManageTransfersPageMo...

94 lines
2.6 KiB
C#

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();
private const int AppointmentWaitingHours = 3;
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;
var localNowSubstractWaitingHour = localNow.AddHours(-1 * AppointmentWaitingHours);
_upcomings.AddRange(Transfers.Where(x => x.Appointment >= localNowSubstractWaitingHour));
}
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 localNowAddedWaitingHour = localNow.AddHours(AppointmentWaitingHours);
_problems.AddRange(Transfers.Where(x => x.Appointment < localNowAddedWaitingHour && 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;
}
}