mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 03:43:11 +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.Enums;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using SeaHaven.DataServices.Helpers;
|
||||
using SeaHaven.DataServices.Interfaces;
|
||||
|
|
@ -32,6 +33,10 @@ namespace SeaHaven.DataServices.Implementation
|
|||
(w.ScheduledDate != null
|
||||
&& w.ScheduledDate >= weekStartDate
|
||||
&& w.ScheduledDate < weekEndExclusive)
|
||||
|| (w.ScheduledDate != null
|
||||
&& w.ScheduledDate < weekStartDate
|
||||
&& w.LifecycleStatus != LifecycleStatus.Completed
|
||||
&& w.LifecycleStatus != LifecycleStatus.Canceled)
|
||||
|| (w.ScheduleWeekOnly == true && w.TargetWeek == query.WeekStart));
|
||||
|
||||
var scheduledTotal = await scheduledBase.CountAsync(cancellationToken);
|
||||
|
|
@ -46,7 +51,8 @@ namespace SeaHaven.DataServices.Implementation
|
|||
isUnscheduled: false,
|
||||
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(
|
||||
scheduledRows,
|
||||
Array.Empty<WorkOrderBoardRawRow>(),
|
||||
|
|
|
|||
|
|
@ -117,11 +117,77 @@ public class WorkOrderBoardDataServiceTests
|
|||
weekB, weekB.AddDays(4), null, false, null, false, null, null));
|
||||
|
||||
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(resultB.UnscheduledRows);
|
||||
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]
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue