using System; using System.Collections.ObjectModel; using System.Windows.Media; using Comal.Classes; using InABox.Core; using InABox.WPF; namespace PRSDesktop { public class EquipmentAssignmentModel : Model { public Guid EquipmentID { get; } public int Number { get; set; } public String? Description { get; set; } public DateTime Completed { get; set; } public DateTime Date { get; } public TimeSpan BookedStart { get; set; } public TimeSpan BookedFinish { get; set; } public TimeSpan BookedDuration { get; } public TimeSpan ActualStart { get; set; } public TimeSpan ActualFinish { get; set; } public TimeSpan ActualDuration { get; } public static TimeSpan EffectiveTime(TimeSpan actual, TimeSpan booked) => actual.Ticks != 0L ? actual : booked; public TimeSpan EffectiveStart() { return EffectiveTime(ActualStart, BookedStart); } public TimeSpan EffectiveFinish() { // If we have an actual finish, always use that // otherwise use EffectiveStart() + booked.duration return EffectiveTime( ActualFinish, EffectiveTime(ActualStart, BookedStart) .Add(BookedDuration) ); } public Guid JobID { get; } public string? JobNumber { get; } public string? JobName { get; } public EquipmentAssignmentModel(CoreRow row) : base(row) { EquipmentID = Get(x=>x.Equipment.ID); Number = Get(x => x.Number); Description = Get(x => x.Description); Completed = Get(x => x.Completed); Date = Get(x=>x.Date); BookedDuration = Get(x => x.Booked.Duration); BookedStart = Get(x => x.Booked.Start); BookedFinish = Get(x => x.Booked.Finish); ActualDuration = Get(x => x.Actual.Duration); ActualStart = Get(x => x.Actual.Start); ActualFinish = Get(x => x.Actual.Finish); JobID = Get(x => x.JobLink.ID); JobNumber = Get(x => x.JobLink.JobNumber); JobName = Get(x => x.JobLink.Name); } public override Columns GetColumns() { return InABox.Core.Columns.None().Add(x => x.ID) .Add(x => x.Equipment.ID) .Add(x => x.Number) .Add(x => x.Description) .Add(x => x.Completed) .Add(x => x.Date) .Add(x => x.Booked.Start) .Add(x => x.Booked.Duration) .Add(x => x.Booked.Finish) .Add(x => x.Actual.Start) .Add(x => x.Actual.Duration) .Add(x => x.Actual.Finish) .Add(x => x.JobLink.ID) .Add(x => x.JobLink.JobNumber) .Add(x => x.JobLink.Name); } } }