mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 04:53:11 +00:00
feat(work-orders): run schedule status side-effects on board field mutations
This commit is contained in:
parent
e12b3ea54b
commit
ae9122243d
2 changed files with 31 additions and 15 deletions
|
|
@ -62,21 +62,7 @@ namespace SeaHaven.Services.Helpers
|
|||
}
|
||||
|
||||
public static List<BoardFieldChange> ApplyAutoScheduleSideEffects(WorkOrder workOrder)
|
||||
{
|
||||
var changes = new List<BoardFieldChange>();
|
||||
if (!WorkOrderBoardMutationRules.ShouldAutoSchedule(
|
||||
workOrder.LifecycleStatus,
|
||||
workOrder.ScheduledDate,
|
||||
workOrder.AssignTo,
|
||||
workOrder.ScheduleWeekOnly))
|
||||
return changes;
|
||||
|
||||
var old = workOrder.LifecycleStatus?.ToString();
|
||||
workOrder.LifecycleStatus = LifecycleStatus.Scheduled;
|
||||
workOrder.Status = WorkOrderDerivedFields.GetLifecycleStatusLabel(LifecycleStatus.Scheduled);
|
||||
changes.Add(BoardFieldChange.StatusChanged("LifecycleStatus", old, LifecycleStatus.Scheduled.ToString()));
|
||||
return changes;
|
||||
}
|
||||
=> WorkOrderDerivedFields.ApplyLifecycleFromSchedule(workOrder);
|
||||
|
||||
public static BoardFieldChange ApplyApptTime(WorkOrder workOrder, Dispatch dispatch, string? value)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using Data.SeaHavenIndustries;
|
||||
using Data.SeaHavenIndustries.Enums;
|
||||
using SeaHaven.Services.Helpers;
|
||||
|
||||
namespace SeaHavenIndustries.Tests;
|
||||
|
|
@ -50,4 +51,33 @@ public class WorkOrderBoardFieldMutationsTests
|
|||
Assert.Equal(new DateTime(2026, 6, 25, 9, 0, 0), workOrder.ScheduledStart);
|
||||
Assert.Equal(new DateTime(2026, 6, 25, 11, 0, 0), workOrder.ScheduledEnd);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ApplyScheduledDate_IncompleteWithoutAssignee_PromotesToScheduled()
|
||||
{
|
||||
var workOrder = new WorkOrder { LifecycleStatus = LifecycleStatus.Incomplete };
|
||||
|
||||
var changes = WorkOrderBoardFieldMutations.ApplyScheduledDate(
|
||||
workOrder,
|
||||
new DateTime(2026, 6, 25));
|
||||
|
||||
Assert.Equal(LifecycleStatus.Scheduled, workOrder.LifecycleStatus);
|
||||
Assert.Contains(changes, c => c.Action == AuditActionType.StatusChanged);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ApplyScheduledDate_ClearsScheduled_DemotesToPending()
|
||||
{
|
||||
var workOrder = new WorkOrder
|
||||
{
|
||||
LifecycleStatus = LifecycleStatus.Scheduled,
|
||||
ScheduledDate = new DateTime(2026, 6, 25)
|
||||
};
|
||||
|
||||
var changes = WorkOrderBoardFieldMutations.ApplyScheduledDate(workOrder, parsed: null);
|
||||
|
||||
Assert.Equal(LifecycleStatus.Pending, workOrder.LifecycleStatus);
|
||||
Assert.Contains(changes, c => c.Action == AuditActionType.StatusChanged
|
||||
&& c.NewValue == LifecycleStatus.Pending.ToString());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue