LaborRules.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System;
  2. namespace ProjectEntryLaborAdjust
  3. {
  4. // ===================== RULE (ALL SETTINGS LIVE HERE) =====================
  5. public sealed class L023PmLaborRule : LaborRuleBase
  6. {
  7. public L023PmLaborRule() : base("L023", "Auto-added PM Labor")
  8. {
  9. ExcludedBranchCDs.Add("301");
  10. ExcludedBranchCDs.Add("112");
  11. ExcludedTemplateCDs.Add("ENVIRONMENTAL");
  12. ExcludedTemplateCDs.Add("REST&M");
  13. ExcludedBillRules.Add("PROGRESS");
  14. ProjectDate = new DateTime(2025, 9, 5); // rule applies only to projects created on/after this date
  15. }
  16. // Leave null => use AR Sales Prices (no fixed rate)
  17. public override decimal? FixedUnitRate
  18. {
  19. get { return null; }
  20. }
  21. public override decimal GetHours(decimal jobSize, DateTime? projectCreatedDate)
  22. {
  23. if (jobSize < 0m) return 0m;
  24. // Decide matrix by date (unknown => new matrix)
  25. var pivot = ProjectDate?.Date;
  26. var created = projectCreatedDate?.Date;
  27. bool useOldMatrix = pivot.HasValue && created.HasValue && created.Value < pivot.Value;
  28. if (useOldMatrix)
  29. {
  30. // ---- OLD MATRIX ----
  31. if (jobSize <= 615m) return 0.5m;
  32. if (jobSize <= 1000m) return 1.0m;
  33. if (jobSize <= 2500m) return 1.5m;
  34. if (jobSize <= 5000m) return 3.0m;
  35. if (jobSize <= 7500m) return 3.5m;
  36. if (jobSize <= 10000m) return 5.0m;
  37. if (jobSize <= 25000m) return 6.0m;
  38. if (jobSize <= 50000m) return 7.0m;
  39. return 10.5m;
  40. }
  41. // ---- NEW MATRIX ----
  42. if (jobSize <= 616m) return 0.5m;
  43. if (jobSize <= 1000m) return 1.0m;
  44. if (jobSize <= 2500m) return 2.5m;
  45. if (jobSize <= 5000m) return 4.5m;
  46. if (jobSize <= 7500m) return 5.0m;
  47. if (jobSize <= 10000m) return 7.0m;
  48. if (jobSize <= 25000m) return 8.5m;
  49. if (jobSize <= 50000m) return 9.5m;
  50. return 15.0m;
  51. }
  52. }
  53. }