JobStageCalendar.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using System;
  2. using InABox.Core;
  3. namespace Comal.Classes
  4. {
  5. public class JobStageCalendarLink : EntityLink<JobStageCalendar>
  6. {
  7. [LookupEditor(typeof(JobStageCalendar))]
  8. public override Guid ID { get; set; }
  9. [TextBoxEditor(Editable = Editable.Hidden)]
  10. public string Name { get; set; }
  11. [DoubleEditor(Editable = Editable.Hidden)]
  12. public double Monday { get; set; }
  13. [DoubleEditor(Editable = Editable.Hidden)]
  14. public double Tuesday { get; set; }
  15. [DoubleEditor(Editable = Editable.Hidden)]
  16. public double Wednesday { get; set; }
  17. [DoubleEditor(Editable = Editable.Hidden)]
  18. public double Thursday { get; set; }
  19. [DoubleEditor(Editable = Editable.Hidden)]
  20. public double Friday { get; set; }
  21. [DoubleEditor(Editable = Editable.Hidden)]
  22. public double Saturday { get; set; }
  23. [DoubleEditor(Editable = Editable.Hidden)]
  24. public double Sunday { get; set; }
  25. protected override void Init()
  26. {
  27. base.Init();
  28. }
  29. private double WorkHours(DateTime date)
  30. {
  31. if (date.DayOfWeek.Equals(DayOfWeek.Sunday))
  32. return ID.Equals(Guid.Empty) ? 0.0F : Sunday;
  33. if (date.DayOfWeek.Equals(DayOfWeek.Monday))
  34. return ID.Equals(Guid.Empty) ? 8.0F : Monday;
  35. if (date.DayOfWeek.Equals(DayOfWeek.Tuesday))
  36. return ID.Equals(Guid.Empty) ? 8.0F : Tuesday;
  37. if (date.DayOfWeek.Equals(DayOfWeek.Wednesday))
  38. return ID.Equals(Guid.Empty) ? 8.0F : Wednesday;
  39. if (date.DayOfWeek.Equals(DayOfWeek.Thursday))
  40. return ID.Equals(Guid.Empty) ? 8.0F : Thursday;
  41. if (date.DayOfWeek.Equals(DayOfWeek.Friday))
  42. return ID.Equals(Guid.Empty) ? 8.0F : Friday;
  43. if (date.DayOfWeek.Equals(DayOfWeek.Saturday))
  44. return ID.Equals(Guid.Empty) ? 0.0F : Saturday;
  45. return 0.0F;
  46. }
  47. public int CalculateWorkDays(DateTime start, DateTime finish)
  48. {
  49. var result = 0;
  50. for (var date = start; date <= finish; date = date.AddDays(1))
  51. if (WorkHours(date) > 0.0F)
  52. result++;
  53. return result;
  54. }
  55. public DateTime CalculateEndDate(DateTime start, int days)
  56. {
  57. var result = start.AddDays(-1);
  58. var curdays = days;
  59. while (curdays > 0)
  60. {
  61. result = result.AddDays(1);
  62. var hours = WorkHours(result);
  63. if (hours > 0.0F)
  64. curdays--;
  65. }
  66. return result;
  67. }
  68. public double CalculateHours(DateTime start, DateTime end, double ratio)
  69. {
  70. double result = 0.0F;
  71. for (var date = start; date <= end; date = date.AddDays(1))
  72. result += WorkHours(date) * ratio;
  73. return result;
  74. }
  75. public double CalculateWorkers(DateTime start, DateTime end, double hours)
  76. {
  77. if (hours == 0.0F)
  78. return 0.0F;
  79. double hoursperworker = 0.0F;
  80. for (var date = start; date <= end; date = date.AddDays(1))
  81. hoursperworker += WorkHours(date);
  82. if (hoursperworker == 0.0F)
  83. return 0.0F;
  84. return hours / hoursperworker;
  85. }
  86. }
  87. [UserTracking(typeof(JobStage))]
  88. public class JobStageCalendar : Entity, IRemotable, IPersistent, ILicense<ProjectManagementLicense>
  89. {
  90. public string Name { get; set; }
  91. public double Monday { get; set; }
  92. public double Tuesday { get; set; }
  93. public double Wednesday { get; set; }
  94. public double Thursday { get; set; }
  95. public double Friday { get; set; }
  96. public double Saturday { get; set; }
  97. public double Sunday { get; set; }
  98. protected override void Init()
  99. {
  100. base.Init();
  101. Monday = 8.0F;
  102. Tuesday = 8.0F;
  103. Wednesday = 8.0F;
  104. Thursday = 8.0F;
  105. Friday = 8.0F;
  106. Saturday = 0.0F;
  107. Sunday = 0.0F;
  108. }
  109. }
  110. }