105 lines
2.8 KiB
C#
105 lines
2.8 KiB
C#
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<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 unreadMessagesCount)
|
|
{
|
|
Initialize(transfers, unreadMessagesCount);
|
|
}
|
|
|
|
public void Initialize(DriverManageTransfersPageModel? driverManageTransfersPageModel)
|
|
{
|
|
if (driverManageTransfersPageModel == null) return;
|
|
|
|
Initialize(driverManageTransfersPageModel.Transfers, driverManageTransfersPageModel.UnreadMessagesCount);
|
|
}
|
|
|
|
public void Initialize(IEnumerable<Transfer> 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;
|
|
}
|
|
}
|