|
|
@@ -1,67 +1,68 @@
|
|
|
-using System;
|
|
|
-
|
|
|
-
|
|
|
-namespace ProjectEntryLaborAdjust
|
|
|
-{
|
|
|
- // ===================== RULE (ALL SETTINGS LIVE HERE) =====================
|
|
|
- public sealed class L023PmLaborRule : LaborRuleBase
|
|
|
- {
|
|
|
- public L023PmLaborRule() : base("L023", "Auto-added PM Labor")
|
|
|
- {
|
|
|
- ExcludedBranchCDs.Add("301");
|
|
|
- ExcludedBranchCDs.Add("112");
|
|
|
- ExcludedTemplateCDs.Add("ENVIRONMENTAL");
|
|
|
- ExcludedBillRules.Add("PROGRESS");
|
|
|
- ProjectDate = new DateTime(2025, 9, 5); // rule applies only to projects created on/after this date
|
|
|
- }
|
|
|
-
|
|
|
- // Leave null => use AR Sales Prices (no fixed rate)
|
|
|
- public override decimal? FixedUnitRate
|
|
|
- {
|
|
|
- get { return null; }
|
|
|
- }
|
|
|
-
|
|
|
- public override decimal GetHours(decimal jobSize, DateTime? projectCreatedDate)
|
|
|
- {
|
|
|
- if (jobSize < 0m) return 0m;
|
|
|
-
|
|
|
- // Decide matrix by date (unknown => new matrix)
|
|
|
- var pivot = ProjectDate?.Date;
|
|
|
- var created = projectCreatedDate?.Date;
|
|
|
- bool useOldMatrix = pivot.HasValue && created.HasValue && created.Value < pivot.Value;
|
|
|
-
|
|
|
- if (useOldMatrix)
|
|
|
- {
|
|
|
- // ---- OLD MATRIX ----
|
|
|
- if (jobSize <= 615m) return 0.5m;
|
|
|
- if (jobSize <= 1000m) return 1.0m;
|
|
|
- if (jobSize <= 2500m) return 1.5m;
|
|
|
- if (jobSize <= 5000m) return 3.0m;
|
|
|
- if (jobSize <= 7500m) return 3.5m;
|
|
|
- if (jobSize <= 10000m) return 5.0m;
|
|
|
- if (jobSize <= 25000m) return 6.0m;
|
|
|
- if (jobSize <= 50000m) return 7.0m;
|
|
|
- return 10.5m;
|
|
|
- }
|
|
|
-
|
|
|
- // ---- NEW MATRIX ----
|
|
|
- if (jobSize <= 616m) return 0.5m;
|
|
|
- if (jobSize <= 1000m) return 1.0m;
|
|
|
- if (jobSize <= 2500m) return 2.5m;
|
|
|
- if (jobSize <= 5000m) return 4.5m;
|
|
|
- if (jobSize <= 7500m) return 5.0m;
|
|
|
- if (jobSize <= 10000m) return 7.0m;
|
|
|
- if (jobSize <= 25000m) return 8.5m;
|
|
|
- if (jobSize <= 50000m) return 9.5m;
|
|
|
- return 15.0m;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+using System;
|
|
|
+
|
|
|
+
|
|
|
+namespace ProjectEntryLaborAdjust
|
|
|
+{
|
|
|
+ // ===================== RULE (ALL SETTINGS LIVE HERE) =====================
|
|
|
+ public sealed class L023PmLaborRule : LaborRuleBase
|
|
|
+ {
|
|
|
+ public L023PmLaborRule() : base("L023", "Auto-added PM Labor")
|
|
|
+ {
|
|
|
+ ExcludedBranchCDs.Add("301");
|
|
|
+ ExcludedBranchCDs.Add("112");
|
|
|
+ ExcludedTemplateCDs.Add("ENVIRONMENTAL");
|
|
|
+ ExcludedTemplateCDs.Add("REST&M");
|
|
|
+ ExcludedBillRules.Add("PROGRESS");
|
|
|
+ ProjectDate = new DateTime(2025, 9, 5); // rule applies only to projects created on/after this date
|
|
|
+ }
|
|
|
+
|
|
|
+ // Leave null => use AR Sales Prices (no fixed rate)
|
|
|
+ public override decimal? FixedUnitRate
|
|
|
+ {
|
|
|
+ get { return null; }
|
|
|
+ }
|
|
|
+
|
|
|
+ public override decimal GetHours(decimal jobSize, DateTime? projectCreatedDate)
|
|
|
+ {
|
|
|
+ if (jobSize < 0m) return 0m;
|
|
|
+
|
|
|
+ // Decide matrix by date (unknown => new matrix)
|
|
|
+ var pivot = ProjectDate?.Date;
|
|
|
+ var created = projectCreatedDate?.Date;
|
|
|
+ bool useOldMatrix = pivot.HasValue && created.HasValue && created.Value < pivot.Value;
|
|
|
+
|
|
|
+ if (useOldMatrix)
|
|
|
+ {
|
|
|
+ // ---- OLD MATRIX ----
|
|
|
+ if (jobSize <= 615m) return 0.5m;
|
|
|
+ if (jobSize <= 1000m) return 1.0m;
|
|
|
+ if (jobSize <= 2500m) return 1.5m;
|
|
|
+ if (jobSize <= 5000m) return 3.0m;
|
|
|
+ if (jobSize <= 7500m) return 3.5m;
|
|
|
+ if (jobSize <= 10000m) return 5.0m;
|
|
|
+ if (jobSize <= 25000m) return 6.0m;
|
|
|
+ if (jobSize <= 50000m) return 7.0m;
|
|
|
+ return 10.5m;
|
|
|
+ }
|
|
|
+
|
|
|
+ // ---- NEW MATRIX ----
|
|
|
+ if (jobSize <= 616m) return 0.5m;
|
|
|
+ if (jobSize <= 1000m) return 1.0m;
|
|
|
+ if (jobSize <= 2500m) return 2.5m;
|
|
|
+ if (jobSize <= 5000m) return 4.5m;
|
|
|
+ if (jobSize <= 7500m) return 5.0m;
|
|
|
+ if (jobSize <= 10000m) return 7.0m;
|
|
|
+ if (jobSize <= 25000m) return 8.5m;
|
|
|
+ if (jobSize <= 50000m) return 9.5m;
|
|
|
+ return 15.0m;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|