From dfa8d348558e0492e87da14e85743d4619b18e13 Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Sat, 20 Sep 2025 15:43:38 +0200 Subject: [PATCH] feat: add workday utility functions - Introduced utility functions for workday calculations in `workday-utils.ts`, including `getPreviousWorkday`, `getNextWorkday`, `isWorkday`, and `getDayName`. - Updated `DailyService` and `DailyPageClient` to utilize `getPreviousWorkday` for accurate date handling instead of simple date subtraction. --- lib/workday-utils.ts | 82 +++++++++++++++++++++++++++++++ services/daily.ts | 5 +- src/app/daily/DailyPageClient.tsx | 5 +- 3 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 lib/workday-utils.ts diff --git a/lib/workday-utils.ts b/lib/workday-utils.ts new file mode 100644 index 0000000..402745c --- /dev/null +++ b/lib/workday-utils.ts @@ -0,0 +1,82 @@ +/** + * Utilitaires pour la gestion des jours de travail + * Logique : Lundi-Vendredi sont les jours de travail + */ + +/** + * Calcule le jour de travail précédent selon la logique métier : + * - Lundi → Vendredi (au lieu de Dimanche) + * - Mardi-Vendredi → jour précédent + * - Samedi → Vendredi + * - Dimanche → Vendredi + */ +export function getPreviousWorkday(date: Date): Date { + const result = new Date(date); + result.setHours(0, 0, 0, 0); + + const dayOfWeek = result.getDay(); // 0 = Dimanche, 1 = Lundi, ..., 6 = Samedi + + switch (dayOfWeek) { + case 1: // Lundi → Vendredi précédent + result.setDate(result.getDate() - 3); + break; + case 0: // Dimanche → Vendredi précédent + result.setDate(result.getDate() - 2); + break; + case 6: // Samedi → Vendredi précédent + result.setDate(result.getDate() - 1); + break; + default: // Mardi-Vendredi → jour précédent + result.setDate(result.getDate() - 1); + break; + } + + return result; +} + +/** + * Calcule le jour de travail suivant selon la logique métier : + * - Vendredi → Lundi suivant + * - Samedi → Lundi suivant + * - Dimanche → Lundi suivant + * - Lundi-Jeudi → jour suivant + */ +export function getNextWorkday(date: Date): Date { + const result = new Date(date); + result.setHours(0, 0, 0, 0); + + const dayOfWeek = result.getDay(); // 0 = Dimanche, 1 = Lundi, ..., 6 = Samedi + + switch (dayOfWeek) { + case 5: // Vendredi → Lundi suivant + result.setDate(result.getDate() + 3); + break; + case 6: // Samedi → Lundi suivant + result.setDate(result.getDate() + 2); + break; + case 0: // Dimanche → Lundi suivant + result.setDate(result.getDate() + 1); + break; + default: // Lundi-Jeudi → jour suivant + result.setDate(result.getDate() + 1); + break; + } + + return result; +} + +/** + * Vérifie si une date est un jour de travail (Lundi-Vendredi) + */ +export function isWorkday(date: Date): boolean { + const dayOfWeek = date.getDay(); + return dayOfWeek >= 1 && dayOfWeek <= 5; // Lundi (1) à Vendredi (5) +} + +/** + * Retourne le nom du jour en français + */ +export function getDayName(date: Date): string { + const days = ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi']; + return days[date.getDay()]; +} diff --git a/services/daily.ts b/services/daily.ts index 472a279..f574829 100644 --- a/services/daily.ts +++ b/services/daily.ts @@ -1,6 +1,7 @@ import { prisma } from './database'; import { Prisma } from '@prisma/client'; import { DailyCheckbox, DailyView, CreateDailyCheckboxData, UpdateDailyCheckboxData, BusinessError, DailyCheckboxType, TaskStatus, TaskPriority, TaskSource } from '@/lib/types'; +import { getPreviousWorkday } from '@/lib/workday-utils'; /** * Service pour la gestion des checkboxes daily @@ -15,8 +16,8 @@ export class DailyService { const today = new Date(date); today.setHours(0, 0, 0, 0); - const yesterday = new Date(today); - yesterday.setDate(yesterday.getDate() - 1); + // Utiliser la logique de jour de travail précédent au lieu de jour-1 + const yesterday = getPreviousWorkday(today); // Récupérer les checkboxes des deux jours const [yesterdayCheckboxes, todayCheckboxes] = await Promise.all([ diff --git a/src/app/daily/DailyPageClient.tsx b/src/app/daily/DailyPageClient.tsx index e7ebc89..69d2709 100644 --- a/src/app/daily/DailyPageClient.tsx +++ b/src/app/daily/DailyPageClient.tsx @@ -10,6 +10,7 @@ import { DailyCalendar } from '@/components/daily/DailyCalendar'; import { DailySection } from '@/components/daily/DailySection'; import { dailyClient } from '@/clients/daily-client'; import { Header } from '@/components/ui/Header'; +import { getPreviousWorkday } from '@/lib/workday-utils'; interface DailyPageClientProps { initialDailyView?: DailyView; @@ -99,9 +100,7 @@ export function DailyPageClient({ }; const getYesterdayDate = () => { - const yesterday = new Date(currentDate); - yesterday.setDate(yesterday.getDate() - 1); - return yesterday; + return getPreviousWorkday(currentDate); }; const getTodayDate = () => {