63 lines
1.5 KiB
C#
63 lines
1.5 KiB
C#
namespace AVSCartonShipmentVerifier.DTOs;
|
|
|
|
public sealed class MovementAnalyticsDto
|
|
{
|
|
public MovementSummaryDto Summary { get; init; } = new();
|
|
|
|
public MovementStatusShareDto StatusShare { get; init; } = new();
|
|
|
|
public IReadOnlyList<MovementChartDayDto> ChartByDay { get; init; } = [];
|
|
|
|
public IReadOnlyList<MovementDayDetailDto> DayDetails { get; init; } = [];
|
|
|
|
public string DateRangeLabel { get; init; } = string.Empty;
|
|
}
|
|
|
|
public sealed class MovementSummaryDto
|
|
{
|
|
public int MovedToday { get; init; }
|
|
|
|
public int MovedThisWeek { get; init; }
|
|
|
|
public int MovedThisMonth { get; init; }
|
|
|
|
public int TotalMoved { get; init; }
|
|
}
|
|
|
|
public sealed class MovementStatusShareDto
|
|
{
|
|
public int Moved { get; init; }
|
|
|
|
public int Pending { get; init; }
|
|
|
|
public int Total => Moved + Pending;
|
|
|
|
public double MovedPercent => Total > 0 ? Math.Round(Moved * 100.0 / Total, 1) : 0;
|
|
|
|
public double PendingPercent => Total > 0 ? Math.Round(Pending * 100.0 / Total, 1) : 0;
|
|
}
|
|
|
|
public sealed class MovementChartDayDto
|
|
{
|
|
public string DayLabel { get; init; } = string.Empty;
|
|
|
|
public int MovedCartons { get; init; }
|
|
}
|
|
|
|
public sealed class MovementDayDetailDto
|
|
{
|
|
public DateOnly Date { get; init; }
|
|
|
|
public string DateDisplay { get; init; } = string.Empty;
|
|
|
|
public int MovedCartons { get; init; }
|
|
|
|
public int SuccessfulScans { get; init; }
|
|
|
|
public int DuplicateRejections { get; init; }
|
|
|
|
public int ManualEntryRejections { get; init; }
|
|
|
|
public DateTime? LastMovedAtUtc { get; init; }
|
|
}
|