mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 07:13:12 +00:00
Merge pull request #103 from Sea-Haven-Industries/feat/sh-167-board-carry-over
feat(work-orders): include unresolved prior-week rows on GET board
This commit is contained in:
commit
a0183fa44c
2 changed files with 75 additions and 3 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
using Data.SeaHavenIndustries;
|
using Data.SeaHavenIndustries;
|
||||||
|
using Data.SeaHavenIndustries.Enums;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using SeaHaven.DataServices.Helpers;
|
using SeaHaven.DataServices.Helpers;
|
||||||
using SeaHaven.DataServices.Interfaces;
|
using SeaHaven.DataServices.Interfaces;
|
||||||
|
|
@ -32,6 +33,10 @@ namespace SeaHaven.DataServices.Implementation
|
||||||
(w.ScheduledDate != null
|
(w.ScheduledDate != null
|
||||||
&& w.ScheduledDate >= weekStartDate
|
&& w.ScheduledDate >= weekStartDate
|
||||||
&& w.ScheduledDate < weekEndExclusive)
|
&& w.ScheduledDate < weekEndExclusive)
|
||||||
|
|| (w.ScheduledDate != null
|
||||||
|
&& w.ScheduledDate < weekStartDate
|
||||||
|
&& w.LifecycleStatus != LifecycleStatus.Completed
|
||||||
|
&& w.LifecycleStatus != LifecycleStatus.Canceled)
|
||||||
|| (w.ScheduleWeekOnly == true && w.TargetWeek == query.WeekStart));
|
|| (w.ScheduleWeekOnly == true && w.TargetWeek == query.WeekStart));
|
||||||
|
|
||||||
var scheduledTotal = await scheduledBase.CountAsync(cancellationToken);
|
var scheduledTotal = await scheduledBase.CountAsync(cancellationToken);
|
||||||
|
|
@ -46,7 +51,8 @@ namespace SeaHaven.DataServices.Implementation
|
||||||
isUnscheduled: false,
|
isUnscheduled: false,
|
||||||
cancellationToken);
|
cancellationToken);
|
||||||
|
|
||||||
// Weekly board is scheduled-in-week only. Undated rows belong on GET /board/search.
|
// Weekly board is in-week scheduled rows plus unresolved prior-week carry-over.
|
||||||
|
// Undated rows belong on GET /board/search.
|
||||||
return new WorkOrderBoardQueryResult(
|
return new WorkOrderBoardQueryResult(
|
||||||
scheduledRows,
|
scheduledRows,
|
||||||
Array.Empty<WorkOrderBoardRawRow>(),
|
Array.Empty<WorkOrderBoardRawRow>(),
|
||||||
|
|
|
||||||
|
|
@ -117,11 +117,77 @@ public class WorkOrderBoardDataServiceTests
|
||||||
weekB, weekB.AddDays(4), null, false, null, false, null, null));
|
weekB, weekB.AddDays(4), null, false, null, false, null, null));
|
||||||
|
|
||||||
Assert.Equal(1, resultA.ScheduledRows[0].Id);
|
Assert.Equal(1, resultA.ScheduledRows[0].Id);
|
||||||
Assert.Equal(2, resultB.ScheduledRows[0].Id);
|
Assert.Equal(2, resultB.ScheduledRows.Count);
|
||||||
|
Assert.Contains(resultB.ScheduledRows, r => r.Id == 1);
|
||||||
|
Assert.Contains(resultB.ScheduledRows, r => r.Id == 2);
|
||||||
Assert.Empty(resultA.UnscheduledRows);
|
Assert.Empty(resultA.UnscheduledRows);
|
||||||
Assert.Empty(resultB.UnscheduledRows);
|
Assert.Empty(resultB.UnscheduledRows);
|
||||||
Assert.Equal(1, resultA.ScheduledTotalBeforeSearch);
|
Assert.Equal(1, resultA.ScheduledTotalBeforeSearch);
|
||||||
Assert.Equal(1, resultB.ScheduledTotalBeforeSearch);
|
Assert.Equal(2, resultB.ScheduledTotalBeforeSearch);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task GetBoardRows_IncludesPriorWeekUnresolvedAndKeepsScheduledDate()
|
||||||
|
{
|
||||||
|
await using var context = CreateContext();
|
||||||
|
var viewedWeek = new DateOnly(2026, 5, 18);
|
||||||
|
|
||||||
|
context.workOrders.AddRange(
|
||||||
|
new WorkOrder
|
||||||
|
{
|
||||||
|
Id = 1,
|
||||||
|
InternalWONumber = "10000000001",
|
||||||
|
ScheduledDate = new DateTime(2026, 5, 13),
|
||||||
|
LifecycleStatus = LifecycleStatus.Scheduled,
|
||||||
|
CarriedOver = 2,
|
||||||
|
OriginalDate = new DateOnly(2026, 5, 13),
|
||||||
|
OriginalWeek = new DateOnly(2026, 5, 11)
|
||||||
|
},
|
||||||
|
new WorkOrder
|
||||||
|
{
|
||||||
|
Id = 2,
|
||||||
|
InternalWONumber = "10000000002",
|
||||||
|
ScheduledDate = new DateTime(2026, 5, 13),
|
||||||
|
LifecycleStatus = LifecycleStatus.Completed
|
||||||
|
},
|
||||||
|
new WorkOrder
|
||||||
|
{
|
||||||
|
Id = 3,
|
||||||
|
InternalWONumber = "10000000003",
|
||||||
|
ScheduledDate = new DateTime(2026, 5, 13),
|
||||||
|
LifecycleStatus = LifecycleStatus.Canceled
|
||||||
|
},
|
||||||
|
new WorkOrder
|
||||||
|
{
|
||||||
|
Id = 4,
|
||||||
|
InternalWONumber = "10000000004",
|
||||||
|
ScheduledDate = new DateTime(2026, 5, 20),
|
||||||
|
LifecycleStatus = LifecycleStatus.Scheduled
|
||||||
|
});
|
||||||
|
|
||||||
|
await context.SaveChangesAsync();
|
||||||
|
|
||||||
|
var service = new WorkOrderBoardDataService(context);
|
||||||
|
var result = await service.GetBoardRowsAsync(new WorkOrderBoardQuery(
|
||||||
|
viewedWeek,
|
||||||
|
viewedWeek.AddDays(4),
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
null));
|
||||||
|
|
||||||
|
Assert.Equal(2, result.ScheduledRows.Count);
|
||||||
|
var carried = Assert.Single(result.ScheduledRows, r => r.Id == 1);
|
||||||
|
Assert.Equal(new DateTime(2026, 5, 13), carried.ScheduledDate);
|
||||||
|
Assert.Equal(2, carried.CarriedOver);
|
||||||
|
Assert.Equal(new DateOnly(2026, 5, 11), carried.OriginalWeek);
|
||||||
|
Assert.Equal(new DateOnly(2026, 5, 13), carried.OriginalDate);
|
||||||
|
Assert.Contains(result.ScheduledRows, r => r.Id == 4);
|
||||||
|
Assert.DoesNotContain(result.ScheduledRows, r => r.Id == 2);
|
||||||
|
Assert.DoesNotContain(result.ScheduledRows, r => r.Id == 3);
|
||||||
|
Assert.Equal(2, result.ScheduledTotalBeforeSearch);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue