fix: keep add-on hint when a week-only toggle leaves the schedule unmoved

Skip the add-on recalculation when neither the scheduled date nor the
target week changed, so toggling week-only on an unscheduled work order
no longer clears the create-time add-on hint.
This commit is contained in:
Alexandre Brandizzi 2026-10-01 17:04:28 -03:00
parent efe4f5f0b9
commit 7a14b883c3
2 changed files with 38 additions and 0 deletions

View file

@ -841,6 +841,10 @@ namespace SeaHaven.Services.Implementation
DateOnly? previousTargetWeek,
List<FieldChange> changes)
{
// An unmoved schedule keeps Add-On, including the create-time hint on unscheduled WOs (SH-412).
if (workOrder.ScheduledDate == previousScheduledDate && workOrder.TargetWeek == previousTargetWeek)
return;
var oldValue = workOrder.IsAddOn.ToString();
var newIsAddOn = WorkOrderAddonCutoff.RecalculateIsAddOnOnReschedule(
workOrder.IsAddOn,

View file

@ -2303,6 +2303,40 @@ public class WorkOrderBoardUpdateServiceTests
Assert.Empty(await context.WorkOrderAuditLogs.Where(a => a.FieldName == "IsAddOn").ToListAsync());
}
[Theory]
[InlineData("true")]
[InlineData("false")]
public async Task PatchField_ScheduleWeekOnlyToggle_Unscheduled_KeepsAddOnHint(string weekOnly)
{
var (context, service) = CreateSut(new FixedTimeProvider());
var wo = new WorkOrder
{
Id = 1,
LifecycleStatus = LifecycleStatus.Pending,
WorkOrderType = WorkOrderType.PM,
ScheduleWeekOnly = weekOnly != "true",
CreatedDate = new DateTime(2026, 6, 1, 0, 0, 0, DateTimeKind.Utc),
IsAddOn = true,
RowVersion = new byte[] { 1, 0, 0, 0, 0, 0, 0, 1 }
};
context.workOrders.Add(wo);
await context.SaveChangesAsync();
var result = await service.PatchFieldAsync(1, new WorkOrderBoardPatchRequestDto
{
Field = WorkOrderBoardFieldNames.ScheduleWeekOnly,
Value = weekOnly,
WorkOrderVersion = ToVersion(wo)
}, "actor-1");
Assert.True(result.IsAddOn);
var persisted = await context.workOrders.SingleAsync(w => w.Id == 1);
Assert.Null(persisted.ScheduledDate);
Assert.Null(persisted.TargetWeek);
Assert.True(persisted.IsAddOn);
Assert.Empty(await context.WorkOrderAuditLogs.Where(a => a.FieldName == "IsAddOn").ToListAsync());
}
[Theory]
[InlineData("2026-07-08", false, "2026-06-25", true)] // into the current week, past its cutoff
[InlineData("2026-06-24", true, "2026-07-01", false)] // into next week, before its cutoff