From f3f9ac1b58cbe7ee2f26eb1dff155ac2612d319c Mon Sep 17 00:00:00 2001 From: Arthur Bassi Date: Tue, 8 Sep 2026 16:23:13 -0300 Subject: [PATCH] feat(work-orders): derive lifecycle on board create and schedule PATCH --- .../WorkOrderBoardCreateService.cs | 2 ++ .../WorkOrderBoardUpdateService.cs | 20 ++++++------------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/SeaHaven.Services/Implementation/WorkOrderBoardCreateService.cs b/SeaHaven.Services/Implementation/WorkOrderBoardCreateService.cs index 03e4062..0305e1e 100644 --- a/SeaHaven.Services/Implementation/WorkOrderBoardCreateService.cs +++ b/SeaHaven.Services/Implementation/WorkOrderBoardCreateService.cs @@ -175,6 +175,8 @@ namespace SeaHaven.Services.Implementation if (request.ScheduledDate.HasValue) changes.AddRange(WorkOrderBoardFieldMutations.ApplyScheduledDate(workOrder, request.ScheduledDate.Value.Date)); + changes.AddRange(WorkOrderBoardFieldMutations.ApplyAutoScheduleSideEffects(workOrder)); + Dispatch? dispatch = null; if (hasVendorDispatch) { diff --git a/SeaHaven.Services/Implementation/WorkOrderBoardUpdateService.cs b/SeaHaven.Services/Implementation/WorkOrderBoardUpdateService.cs index 631b2c0..b94762d 100644 --- a/SeaHaven.Services/Implementation/WorkOrderBoardUpdateService.cs +++ b/SeaHaven.Services/Implementation/WorkOrderBoardUpdateService.cs @@ -637,6 +637,7 @@ namespace SeaHaven.Services.Implementation var changes = new List { change }; if (change.HasChanged) AppendIsAddOnRecalculation(workOrder, changes); + changes.AddRange(ApplyAutoScheduleSideEffects(workOrder)); return changes; } @@ -785,21 +786,12 @@ namespace SeaHaven.Services.Implementation } private static List ApplyAutoScheduleSideEffects(WorkOrder workOrder) - { - var changes = new List(); - if (!WorkOrderBoardMutationRules.ShouldAutoSchedule( - workOrder.LifecycleStatus, - workOrder.ScheduledDate, - workOrder.AssignTo, - workOrder.ScheduleWeekOnly)) - return changes; + => WorkOrderBoardFieldMutations.ApplyAutoScheduleSideEffects(workOrder) + .Select(ToFieldChange) + .ToList(); - var old = workOrder.LifecycleStatus?.ToString(); - workOrder.LifecycleStatus = LifecycleStatus.Scheduled; - workOrder.Status = WorkOrderDerivedFields.GetLifecycleStatusLabel(LifecycleStatus.Scheduled); - changes.Add(FieldChange.StatusChanged("LifecycleStatus", old, LifecycleStatus.Scheduled.ToString())); - return changes; - } + private static FieldChange ToFieldChange(WorkOrderBoardFieldMutations.BoardFieldChange change) + => new(change.FieldName, change.OldValue, change.NewValue, change.Action, change.DispatchId, change.HasChanged); private static bool RowVersionsMatch(byte[]? current, byte[] expected) => current != null && current.AsSpan().SequenceEqual(expected);