diff --git a/src/domain/work-orders/utils/advanced-filter-predicates.ts b/src/domain/work-orders/utils/advanced-filter-predicates.ts index 75a6a40f..9fa0b3b4 100644 --- a/src/domain/work-orders/utils/advanced-filter-predicates.ts +++ b/src/domain/work-orders/utils/advanced-filter-predicates.ts @@ -16,10 +16,9 @@ const matchesDateRange: AdvancedFilterPredicate = (row, filters) => { const range = dateRangeFor(filters); if (!range) return true; const [from, to] = range; - if (row.scheduledOn) { - return row.scheduledOn >= from && row.scheduledOn <= to; - } - // Week-only rows match when their target week overlaps the range (SH-391). + if (row.scheduledOn && row.scheduledOn >= from && row.scheduledOn <= to) return true; + // Week-only rows also match when their target week overlaps the range, the + // same rule as the board search (SH-391). return ( row.scheduleWeekOnly && Boolean(row.targetWeek) && diff --git a/src/test/domain/work-orders/utils/table-filter-utils.test.ts b/src/test/domain/work-orders/utils/table-filter-utils.test.ts index 022d36fe..8471849b 100644 --- a/src/test/domain/work-orders/utils/table-filter-utils.test.ts +++ b/src/test/domain/work-orders/utils/table-filter-utils.test.ts @@ -454,6 +454,42 @@ describe("matchesAdvancedFilters", () => { expect(matchesAdvancedFilters(weekOnly, filters)).toBe(true); expect(matchesAdvancedFilters(undatedAssigned, filters)).toBe(true); }); + + it("matches a range the same way the board search does (SH-391)", () => { + const filters = { + ...EMPTY_ADVANCED_FILTERS, + dateRange: "custom" as const, + customFrom: "2026-09-23", + customTo: "2026-09-25", + }; + + // Week-only: a target week overlapping the range matches, whatever date the + // row still carries. + const weekOnlyStaleDate = makeRow({ + scheduledOn: "2026-10-02", + targetWeek: "2026-09-21", + scheduleWeekOnly: true, + }); + const weekOnlyPreviousWeek = makeRow({ + scheduledOn: "", + targetWeek: "2026-09-14", + scheduleWeekOnly: true, + }); + const weekOnlyOutside = makeRow({ + scheduledOn: "", + targetWeek: "2026-09-28", + scheduleWeekOnly: true, + }); + const datedOutsideWithWeek = makeRow({ scheduledOn: "2026-10-02", targetWeek: "2026-09-21" }); + const undated = makeRow({ scheduledOn: "", targetWeek: "" }); + + expect(matchesAdvancedFilters(weekOnlyStaleDate, filters)).toBe(true); + expect(matchesAdvancedFilters(weekOnlyPreviousWeek, filters)).toBe(false); + expect(matchesAdvancedFilters(weekOnlyOutside, filters)).toBe(false); + expect(matchesAdvancedFilters(datedOutsideWithWeek, filters)).toBe(false); + expect(matchesAdvancedFilters(undated, filters)).toBe(false); + expect(matchesAdvancedFilters(undated, { ...filters, dateRange: null })).toBe(true); + }); }); describe("computeIsPastDue", () => {