Créneaux de nuit rattachés à leur journée de festival
Un créneau saisi « 00:00–01:00 » sur la carte du samedi était enregistré le samedi à 00:00 (nuit de vendredi à samedi), donc affiché la veille dans la grille des besoins. Une heure de début avant le début de journée (premier créneau type) désigne désormais la nuit qui suit : dimanche 00:00, à la suite de la soirée du samedi. Même « journée de festival » partout (validation/engine.py:day_boundary, festival_day ; miroir front lib/planning.ts:festivalDay) : écran Postes & créneaux, feuilles de poste (une seule page pour une soirée qui passe minuit) et chaînage du solveur (00h–01h enchaîne 23h–00h). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
c60bc11795
commit
a6e7b6e7fb
@@ -312,6 +312,30 @@ function festivalDayOf(iso: string, boundaryMinutes: number): string {
|
||||
return clock < boundaryMinutes ? addDays(date, -1) : date;
|
||||
}
|
||||
|
||||
/** Jour de festival d'un datetime naïf (`dayBoundary` = `HH:MM`, voir
|
||||
* `dayBoundaryFromDayParts`) : avant cette heure, c'est encore la nuit de la
|
||||
* veille. Même règle que `app/validation/engine.py:festival_day`. */
|
||||
export function festivalDay(iso: string, dayBoundary = '00:00'): string {
|
||||
return festivalDayOf(iso, minutesOfDay(dayBoundary));
|
||||
}
|
||||
|
||||
/**
|
||||
* Datetimes d'un créneau saisi `start`–`end` (`HH:MM`) sur la journée de
|
||||
* festival `day` : une heure de début avant `dayBoundary` désigne la nuit
|
||||
* qui suit (00:00 le samedi ⇒ dimanche 00:00, après 23:00 le samedi), pas
|
||||
* le petit matin du même jour calendaire ; une fin `<=` début passe minuit.
|
||||
*/
|
||||
export function shiftDatesForFestivalDay(
|
||||
day: string,
|
||||
start: string,
|
||||
end: string,
|
||||
dayBoundary = '00:00',
|
||||
): { starts_at: string; ends_at: string } {
|
||||
const startDay = minutesOfDay(start) < minutesOfDay(dayBoundary) ? addDays(day, 1) : day;
|
||||
const endDay = end <= start ? addDays(startDay, 1) : startDay;
|
||||
return { starts_at: `${startDay}T${start}:00`, ends_at: `${endDay}T${end}:00` };
|
||||
}
|
||||
|
||||
/**
|
||||
* Construit, pour chaque jour de festival couvert par `shifts`, l'axe des
|
||||
* tranches de 30 min à afficher — bornée à la plage réellement utilisée ce
|
||||
|
||||
Reference in New Issue
Block a user