JobStage.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. using System;
  2. using System.ComponentModel;
  3. using System.Linq;
  4. using InABox.Core;
  5. namespace Comal.Classes
  6. {
  7. public class JobStageJobLookup : LookupDefinitionGenerator<JobStage, Job>
  8. {
  9. public override Filter<JobStage> DefineFilter(Job[] items)
  10. {
  11. if (items.Length == 1)
  12. return new Filter<JobStage>(x => x.Job.ID).IsEqualTo(items.First().ID).And(x => x.IsHeader).IsEqualTo(false);
  13. return new Filter<JobStage>(x => x.ID).IsEqualTo(Guid.Empty);
  14. }
  15. public override Columns<Job> DefineFilterColumns()
  16. => Columns.None<Job>().Add(x => x.ID);
  17. }
  18. [UserTracking("Gantt Charts")]
  19. public class JobStage : Entity, IRemotable, IPersistent, ISequenceable, INotifyPropertyChanged, ILicense<ProjectManagementLicense>, IOneToMany<Job>,
  20. IChildEntityLookup<Job, JobStage, JobStageJobLookup>
  21. {
  22. private bool bChanging;
  23. [EntityRelationship(DeleteAction.Cascade)]
  24. [EditorSequence(0)]
  25. public JobLink Job { get; set; }
  26. [NullEditor]
  27. public bool IsHeader { get; set; }
  28. private class JobStageLookup : LookupDefinitionGenerator<JobStage, JobStage>
  29. {
  30. public override Filter<JobStage> DefineFilter(JobStage[] items)
  31. {
  32. if (items.Length == 1)
  33. return new Filter<JobStage>(x => x.Job.ID).IsEqualTo(items.First().Job.ID).And(x => x.IsHeader).IsEqualTo(false);
  34. return new Filter<JobStage>(x => x.ID).IsEqualTo(Guid.Empty);
  35. }
  36. public override Columns<JobStage> DefineFilterColumns()
  37. => Columns.None<JobStage>().Add(x => x.Job.ID);
  38. }
  39. [LookupDefinition(typeof(JobStageLookup))]
  40. [NullEditor]
  41. public JobStageLink Parent { get; set; }
  42. [EditorSequence(1)]
  43. public string Name { get; set; }
  44. [EditorSequence(2)]
  45. [NullEditor]
  46. public JobStageCalendarLink Calendar { get; set; }
  47. [DateEditor]
  48. [EditorSequence(3)]
  49. public DateTime StartDate { get; set; }
  50. [IntegerEditor]
  51. [EditorSequence(4)]
  52. public int WorkDays { get; set; }
  53. [DateEditor]
  54. [EditorSequence(5)]
  55. public DateTime EndDate { get; set; }
  56. [DoubleEditor]
  57. [EditorSequence(9)]
  58. public double SupervisionHours { get; set; }
  59. [DoubleEditor]
  60. [EditorSequence(10)]
  61. public double TradesHours { get; set; }
  62. [DoubleEditor]
  63. [EditorSequence(11)]
  64. public double ApprenticeHours { get; set; }
  65. [DoubleEditor(Editable = Editable.Disabled)]
  66. [EditorSequence("Summary", 1)]
  67. public double TotalHours { get; set; }
  68. [DoubleEditor(Editable = Editable.Disabled)]
  69. [EditorSequence("Summary", 2)]
  70. public double Supervisors { get; set; }
  71. [DoubleEditor(Editable = Editable.Disabled)]
  72. [EditorSequence("Summary", 3)]
  73. public double Tradespersons { get; set; }
  74. [DoubleEditor(Editable = Editable.Disabled)]
  75. [EditorSequence("Summary", 4)]
  76. public double Apprentices { get; set; }
  77. [NullEditor]
  78. public long Sequence { get; set; }
  79. protected override void DoPropertyChanged(string name, object? before, object? after)
  80. {
  81. base.DoPropertyChanged(name, before, after);
  82. if (bChanging)
  83. return;
  84. bChanging = true;
  85. if (name.Equals("WorkDays"))
  86. {
  87. EndDate = Calendar.CalculateEndDate(StartDate, (int)after);
  88. Tradespersons = Calendar.CalculateWorkers(StartDate, EndDate, TradesHours);
  89. Supervisors = Calendar.CalculateWorkers(StartDate, EndDate, SupervisionHours);
  90. Apprentices = Calendar.CalculateWorkers(StartDate, EndDate, ApprenticeHours);
  91. }
  92. else if (name.Equals("EndDate"))
  93. {
  94. WorkDays = Calendar.CalculateWorkDays(StartDate, (DateTime)after);
  95. Tradespersons = Calendar.CalculateWorkers(StartDate, (DateTime)after, TradesHours);
  96. Supervisors = Calendar.CalculateWorkers(StartDate, (DateTime)after, SupervisionHours);
  97. Apprentices = Calendar.CalculateWorkers(StartDate, (DateTime)after, ApprenticeHours);
  98. }
  99. else if (name.Equals("TradesHours"))
  100. {
  101. Tradespersons = Calendar.CalculateWorkers(StartDate, EndDate, (double)after);
  102. TotalHours = SupervisionHours + (double)after + ApprenticeHours;
  103. }
  104. else if (name.Equals("SupervisionHours"))
  105. {
  106. Supervisors = Calendar.CalculateWorkers(StartDate, EndDate, (double)after);
  107. TotalHours = (double)after + TradesHours + ApprenticeHours;
  108. }
  109. else if (name.Equals("ApprenticeHours"))
  110. {
  111. Apprentices = Calendar.CalculateWorkers(StartDate, EndDate, (double)after);
  112. TotalHours = SupervisionHours + TradesHours + (double)after;
  113. }
  114. bChanging = false;
  115. }
  116. }
  117. }