EquipmentAssignmentModel.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System;
  2. using System.Collections.ObjectModel;
  3. using System.Windows.Media;
  4. using Comal.Classes;
  5. using InABox.Core;
  6. using InABox.WPF;
  7. namespace PRSDesktop
  8. {
  9. public class EquipmentAssignmentModel : Model<EquipmentAssignmentModel,EquipmentAssignment>
  10. {
  11. public Guid EquipmentID { get; }
  12. public int Number { get; set; }
  13. public String? Description { get; set; }
  14. public DateTime Completed { get; set; }
  15. public DateTime Date { get; }
  16. public TimeSpan BookedStart { get; set; }
  17. public TimeSpan BookedFinish { get; set; }
  18. public TimeSpan BookedDuration { get; }
  19. public TimeSpan ActualStart { get; set; }
  20. public TimeSpan ActualFinish { get; set; }
  21. public TimeSpan ActualDuration { get; }
  22. public static TimeSpan EffectiveTime(TimeSpan actual, TimeSpan booked) => actual.Ticks != 0L ? actual : booked;
  23. public TimeSpan EffectiveStart()
  24. {
  25. return EffectiveTime(ActualStart, BookedStart);
  26. }
  27. public TimeSpan EffectiveFinish()
  28. {
  29. // If we have an actual finish, always use that
  30. // otherwise use EffectiveStart() + booked.duration
  31. return EffectiveTime(
  32. ActualFinish,
  33. EffectiveTime(ActualStart, BookedStart)
  34. .Add(BookedDuration)
  35. );
  36. }
  37. public Guid JobID { get; }
  38. public string? JobNumber { get; }
  39. public string? JobName { get; }
  40. public EquipmentAssignmentModel(CoreRow row) : base(row)
  41. {
  42. EquipmentID = Get(x=>x.Equipment.ID);
  43. Number = Get(x => x.Number);
  44. Description = Get(x => x.Description);
  45. Completed = Get(x => x.Completed);
  46. Date = Get(x=>x.Date);
  47. BookedDuration = Get(x => x.Booked.Duration);
  48. BookedStart = Get(x => x.Booked.Start);
  49. BookedFinish = Get(x => x.Booked.Finish);
  50. ActualDuration = Get(x => x.Actual.Duration);
  51. ActualStart = Get(x => x.Actual.Start);
  52. ActualFinish = Get(x => x.Actual.Finish);
  53. JobID = Get(x => x.JobLink.ID);
  54. JobNumber = Get(x => x.JobLink.JobNumber);
  55. JobName = Get(x => x.JobLink.Name);
  56. }
  57. public override Columns<EquipmentAssignment> GetColumns()
  58. {
  59. return InABox.Core.Columns.None<EquipmentAssignment>().Add(x => x.ID)
  60. .Add(x => x.Equipment.ID)
  61. .Add(x => x.Number)
  62. .Add(x => x.Description)
  63. .Add(x => x.Completed)
  64. .Add(x => x.Date)
  65. .Add(x => x.Booked.Start)
  66. .Add(x => x.Booked.Duration)
  67. .Add(x => x.Booked.Finish)
  68. .Add(x => x.Actual.Start)
  69. .Add(x => x.Actual.Duration)
  70. .Add(x => x.Actual.Finish)
  71. .Add(x => x.JobLink.ID)
  72. .Add(x => x.JobLink.JobNumber)
  73. .Add(x => x.JobLink.Name);
  74. }
  75. }
  76. }