feat(work-orders): derive lifecycle on board create and schedule PATCH

This commit is contained in:
Arthur Bassi 2026-09-08 16:23:13 -03:00
parent ae9122243d
commit f3f9ac1b58
2 changed files with 8 additions and 14 deletions

View file

@ -175,6 +175,8 @@ namespace SeaHaven.Services.Implementation
if (request.ScheduledDate.HasValue) if (request.ScheduledDate.HasValue)
changes.AddRange(WorkOrderBoardFieldMutations.ApplyScheduledDate(workOrder, request.ScheduledDate.Value.Date)); changes.AddRange(WorkOrderBoardFieldMutations.ApplyScheduledDate(workOrder, request.ScheduledDate.Value.Date));
changes.AddRange(WorkOrderBoardFieldMutations.ApplyAutoScheduleSideEffects(workOrder));
Dispatch? dispatch = null; Dispatch? dispatch = null;
if (hasVendorDispatch) if (hasVendorDispatch)
{ {

View file

@ -637,6 +637,7 @@ namespace SeaHaven.Services.Implementation
var changes = new List<FieldChange> { change }; var changes = new List<FieldChange> { change };
if (change.HasChanged) if (change.HasChanged)
AppendIsAddOnRecalculation(workOrder, changes); AppendIsAddOnRecalculation(workOrder, changes);
changes.AddRange(ApplyAutoScheduleSideEffects(workOrder));
return changes; return changes;
} }
@ -785,21 +786,12 @@ namespace SeaHaven.Services.Implementation
} }
private static List<FieldChange> ApplyAutoScheduleSideEffects(WorkOrder workOrder) private static List<FieldChange> ApplyAutoScheduleSideEffects(WorkOrder workOrder)
{ => WorkOrderBoardFieldMutations.ApplyAutoScheduleSideEffects(workOrder)
var changes = new List<FieldChange>(); .Select(ToFieldChange)
if (!WorkOrderBoardMutationRules.ShouldAutoSchedule( .ToList();
workOrder.LifecycleStatus,
workOrder.ScheduledDate,
workOrder.AssignTo,
workOrder.ScheduleWeekOnly))
return changes;
var old = workOrder.LifecycleStatus?.ToString(); private static FieldChange ToFieldChange(WorkOrderBoardFieldMutations.BoardFieldChange change)
workOrder.LifecycleStatus = LifecycleStatus.Scheduled; => new(change.FieldName, change.OldValue, change.NewValue, change.Action, change.DispatchId, change.HasChanged);
workOrder.Status = WorkOrderDerivedFields.GetLifecycleStatusLabel(LifecycleStatus.Scheduled);
changes.Add(FieldChange.StatusChanged("LifecycleStatus", old, LifecycleStatus.Scheduled.ToString()));
return changes;
}
private static bool RowVersionsMatch(byte[]? current, byte[] expected) private static bool RowVersionsMatch(byte[]? current, byte[] expected)
=> current != null && current.AsSpan().SequenceEqual(expected); => current != null && current.AsSpan().SequenceEqual(expected);