LaborRules.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. ExcludedBillRules.Add("PROGRESS");
  13. ProjectDate = new DateTime(2025, 9, 5); // rule applies only to projects created on/after this date
  14. }
  15. // Leave null => use AR Sales Prices (no fixed rate)
  16. public override decimal? FixedUnitRate
  17. {
  18. get { return null; }
  19. }
  20. public override decimal GetHours(decimal jobSize, DateTime? projectCreatedDate)
  21. {
  22. if (jobSize < 0m) return 0m;
  23. // Decide matrix by date (unknown => new matrix)
  24. var pivot = ProjectDate?.Date;
  25. var created = projectCreatedDate?.Date;
  26. bool useOldMatrix = pivot.HasValue && created.HasValue && created.Value < pivot.Value;
  27. if (useOldMatrix)
  28. {
  29. // ---- OLD MATRIX ----
  30. if (jobSize <= 615m) return 0.5m;
  31. if (jobSize <= 1000m) return 1.0m;
  32. if (jobSize <= 2500m) return 1.5m;
  33. if (jobSize <= 5000m) return 3.0m;
  34. if (jobSize <= 7500m) return 3.5m;
  35. if (jobSize <= 10000m) return 5.0m;
  36. if (jobSize <= 25000m) return 6.0m;
  37. if (jobSize <= 50000m) return 7.0m;
  38. return 10.5m;
  39. }
  40. // ---- NEW MATRIX ----
  41. if (jobSize <= 616m) return 0.5m;
  42. if (jobSize <= 1000m) return 1.0m;
  43. if (jobSize <= 2500m) return 2.5m;
  44. if (jobSize <= 5000m) return 4.5m;
  45. if (jobSize <= 7500m) return 5.0m;
  46. if (jobSize <= 10000m) return 7.0m;
  47. if (jobSize <= 25000m) return 8.5m;
  48. if (jobSize <= 50000m) return 9.5m;
  49. return 15.0m;
  50. }
  51. }
  52. }