From 1c4aa803bdf685a591843d0d1c7b8ae9054147d8 Mon Sep 17 00:00:00 2001 From: Zachary Date: Fri, 22 Nov 2024 20:46:35 +0100 Subject: [PATCH] Improve consecutive group calculation to only exclude all weekend groups --- src/lib/holidayUtils.ts | 18 ++++++++++++------ src/routes/+page.svelte | 1 - 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/lib/holidayUtils.ts b/src/lib/holidayUtils.ts index 99a6296..35296c7 100644 --- a/src/lib/holidayUtils.ts +++ b/src/lib/holidayUtils.ts @@ -56,14 +56,14 @@ export function calculateConsecutiveDaysOff(holidays: { date: Date }[], optimize if (isWeekend(d, weekendDays) || isHoliday(d, holidays) || allDaysOff.has(dateKey(d))) { currentGroup.push(new Date(d)); } else if (currentGroup.length > 0) { - if (hasWeekendAndNonWeekendHoliday(currentGroup, weekendDays, holidays, optimizedDaysOff)) { + if (isValidConsecutiveGroup(currentGroup, weekendDays)) { consecutiveDaysOff.push(createPeriod(currentGroup, optimizedDaysOff)); } currentGroup = []; } } - if (currentGroup.length > 0 && hasWeekendAndNonWeekendHoliday(currentGroup, weekendDays, holidays, optimizedDaysOff)) { + if (currentGroup.length > 0 && isValidConsecutiveGroup(currentGroup, weekendDays)) { consecutiveDaysOff.push(createPeriod(currentGroup, optimizedDaysOff)); } @@ -162,10 +162,16 @@ function selectDaysOff(rankedGaps: any[], daysOff: number, allDaysOff: Set weekendDays.includes(d.getDay())) && - group.some(d => !weekendDays.includes(d.getDay()) && (isHoliday(d, holidays) || optimizedDaysOff.some(od => dateKey(od) === dateKey(d)))); +// Check if a group is valid (2+ days, not just weekends) +function isValidConsecutiveGroup(group: Date[], weekendDays: number[]): boolean { + // Must be at least 2 days + if (group.length < 2) return false; + + // Check if ALL days are weekends + const allDaysAreWeekends = group.every(d => weekendDays.includes(d.getDay())); + + // Valid if not all days are weekends + return !allDaysAreWeekends; } // Create a period object from a group of consecutive days diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index be864f2..5fa057c 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -253,7 +253,6 @@ $: visibleHolidaysCount = holidays.filter(h => !h.hidden).length; function toggleWeekendDay(dayNumber: number) { - console.log('Toggling weekend day:', dayNumber); if (weekendDays.includes(dayNumber)) { weekendDays = weekendDays.filter(d => d !== dayNumber); } else {