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; } } }