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)
changes.AddRange(WorkOrderBoardFieldMutations.ApplyScheduledDate(workOrder, request.ScheduledDate.Value.Date));
changes.AddRange(WorkOrderBoardFieldMutations.ApplyAutoScheduleSideEffects(workOrder));
Dispatch? dispatch = null;
if (hasVendorDispatch)
{

View file

@ -637,6 +637,7 @@ namespace SeaHaven.Services.Implementation
var changes = new List<FieldChange> { change };
if (change.HasChanged)
AppendIsAddOnRecalculation(workOrder, changes);
changes.AddRange(ApplyAutoScheduleSideEffects(workOrder));
return changes;
}
@ -785,21 +786,12 @@ namespace SeaHaven.Services.Implementation
}
private static List<FieldChange> ApplyAutoScheduleSideEffects(WorkOrder workOrder)
{
var changes = new List<FieldChange>();
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);