Assignment.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using System;
  2. using System.Linq.Expressions;
  3. using InABox.Core;
  4. namespace Comal.Classes
  5. {
  6. //public class DeliveryAssignments : CoreAggregate<Assignment, Delivery, Guid>
  7. //{
  8. // public override Expression<Func<Delivery, Guid>> Aggregate => Delivery => Delivery.ID;
  9. // //public Expression<Func<Delivery, Guid>> Link => x => x.Assignment.ID;
  10. // public override AggregateCalculation Calculation => AggregateCalculation.Count;
  11. // public override Dictionary<Expression<Func<Delivery, object>>, Expression<Func<Assignment, object>>> Links =>
  12. // new Dictionary<Expression<Func<Delivery, object>>, Expression<Func<Assignment, object>>>
  13. // {
  14. // { Delivery => Delivery.Assignment.ID, x => x.ID }
  15. // };
  16. //}
  17. /// <summary>
  18. /// An assignment represents an anticipated booking for an employee, much like a diary entry
  19. /// <exclude />
  20. /// </summary>
  21. [UserTracking("Assignments")]
  22. [Caption("Assignments")]
  23. public class Assignment : Entity, IPersistent, IRemotable, INumericAutoIncrement<Assignment>, IOneToMany<Employee>, IOneToMany<Job>,
  24. IOneToMany<Kanban>, ILicense<SchedulingControlLicense>, IJobActivity, IOneToMany<Invoice>
  25. {
  26. private bool bChanging;
  27. [IntegerEditor(Editable = Editable.Hidden)]
  28. [EditorSequence(1)]
  29. public int Number { get; set; }
  30. [DateEditor]
  31. [EditorSequence(2)]
  32. public DateTime Date { get; set; }
  33. [EntityRelationship(DeleteAction.Cascade)]
  34. [EditorSequence(3)]
  35. public EmployeeLink EmployeeLink { get; set; }
  36. [TextBoxEditor]
  37. [EditorSequence(4)]
  38. public string Title { get; set; }
  39. [MemoEditor]
  40. [EditorSequence(5)]
  41. public string Description { get; set; }
  42. [EditorSequence(6)]
  43. public AssignmentActivityLink ActivityLink { get; set; }
  44. [EditorSequence(7)]
  45. [EntityRelationship(DeleteAction.SetNull)]
  46. public KanbanLink Task { get; set; }
  47. [EditorSequence(8)]
  48. public JobLink JobLink { get; set; }
  49. [EditorSequence(9)]
  50. public JobITPLink ITP { get; set; }
  51. [NullEditor]
  52. [Obsolete("Replaced with Actual.Start", true)]
  53. public TimeSpan Start { get; set; }
  54. [NullEditor]
  55. [Obsolete("Replaced with Actual.Duration", true)]
  56. public TimeSpan Duration { get; set; }
  57. [NullEditor]
  58. [Obsolete("Replaced with Actual.Finish", true)]
  59. public TimeSpan Finish { get; set; }
  60. [EditorSequence(10)]
  61. [CoreTimeEditor]
  62. public CoreTime Booked { get; set; }
  63. [EditorSequence(11)]
  64. [CoreTimeEditor]
  65. public CoreTime Actual { get; set; }
  66. [TimestampEditor]
  67. [EditorSequence(12)]
  68. public DateTime Completed { get; set; }
  69. [TimestampEditor]
  70. [EditorSequence(13)]
  71. public DateTime Processed { get; set; }
  72. [NullEditor]
  73. [EntityRelationship(DeleteAction.Cascade)]
  74. public LeaveRequestLink LeaveRequestLink { get; set; }
  75. [NullEditor]
  76. public DeliveryLink Delivery { get; set; }
  77. [NullEditor]
  78. [EntityRelationship(DeleteAction.SetNull)]
  79. public InvoiceLink Invoice { get; set; }
  80. public Expression<Func<Assignment, int>> AutoIncrementField()
  81. {
  82. return x => x.Number;
  83. }
  84. public Filter<Assignment> AutoIncrementFilter()
  85. {
  86. return null;
  87. }
  88. protected override void Init()
  89. {
  90. base.Init();
  91. JobLink = new JobLink();
  92. ITP = new JobITPLink();
  93. EmployeeLink = new EmployeeLink();
  94. LeaveRequestLink = new LeaveRequestLink();
  95. ActivityLink = new AssignmentActivityLink();
  96. Invoice = new InvoiceLink();
  97. Delivery = new DeliveryLink();
  98. Task = new KanbanLink();
  99. Booked = new CoreTime();
  100. Actual = new CoreTime();
  101. }
  102. public DateTime EffectiveStart()
  103. {
  104. if (Actual.Start.Ticks != 0)
  105. return Date.Add(Actual.Start);
  106. else
  107. return Date.Add(Booked.Start);
  108. }
  109. public DateTime EffectiveFinish()
  110. {
  111. if (Actual.Finish.Ticks != 0)
  112. return Date.Add(Actual.Finish);
  113. else if (Actual.Start.Ticks != 0)
  114. return Date.Add(Actual.Start).Add(Booked.Duration);
  115. else
  116. return Date.Add(Booked.Finish);
  117. }
  118. }
  119. }