From 3b7c55b55bd83dfff0e5fb145d457ad00ff978af Mon Sep 17 00:00:00 2001 From: marco370 <48531002-marco370@users.noreply.replit.com> Date: Wed, 22 Oct 2025 09:12:20 +0000 Subject: [PATCH] Improve planning accuracy and real-time updates for guard shifts Fixes an issue where dates were incorrectly shifted due to timezone handling and ensures the guard assignment dialog updates in real-time after modifications. Additionally, refactors the calculation of needed guards to accurately reflect site service hours and minimum guard requirements. Replit-Commit-Author: Agent Replit-Commit-Session-Id: e5565357-90e1-419f-b9a8-6ee8394636df Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/6d543d2c-20b9-4ea6-93fe-70fe9b1d9f80/e5565357-90e1-419f-b9a8-6ee8394636df/TWQ52cO --- attached_assets/immagine_1761123543970.png | Bin 0 -> 64092 bytes client/src/pages/general-planning.tsx | 29 +++++++++-- server/routes.ts | 57 +++++++++++---------- 3 files changed, 54 insertions(+), 32 deletions(-) create mode 100644 attached_assets/immagine_1761123543970.png diff --git a/attached_assets/immagine_1761123543970.png b/attached_assets/immagine_1761123543970.png new file mode 100644 index 0000000000000000000000000000000000000000..fb5f3436974840fe89761b56370f0ebdfbfa3ec7 GIT binary patch literal 64092 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 z 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 literal 0 HcmV?d00001 diff --git a/client/src/pages/general-planning.tsx b/client/src/pages/general-planning.tsx index bf71929..a251823 100644 --- a/client/src/pages/general-planning.tsx +++ b/client/src/pages/general-planning.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; import { useQuery, useMutation } from "@tanstack/react-query"; import { format, startOfWeek, addWeeks } from "date-fns"; import { it } from "date-fns/locale"; @@ -161,14 +161,35 @@ export default function GeneralPlanning() { staleTime: 0, }); + // Effect per aggiornare selectedCell quando planningData cambia (per real-time update del dialog) + useEffect(() => { + if (selectedCell && planningData) { + // Trova la cella aggiornata nei nuovi dati + const day = planningData.days.find(d => d.date === selectedCell.date); + if (day) { + const updatedSite = day.sites.find(s => s.siteId === selectedCell.siteId); + if (updatedSite) { + setSelectedCell({ + siteId: selectedCell.siteId, + siteName: selectedCell.siteName, + date: selectedCell.date, + data: updatedSite, + }); + } + } + } + }, [planningData]); + // Mutation per eliminare assegnazione guardia const deleteAssignmentMutation = useMutation({ mutationFn: async (assignmentId: string) => { return apiRequest("DELETE", `/api/shift-assignments/${assignmentId}`, undefined); }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ["/api/general-planning"] }); - queryClient.invalidateQueries({ queryKey: ["/api/guards/availability"] }); + onSuccess: async () => { + // Invalida e refetch planning generale per aggiornare dialog + await queryClient.invalidateQueries({ queryKey: ["/api/general-planning"] }); + await queryClient.invalidateQueries({ queryKey: ["/api/guards/availability"] }); + await queryClient.refetchQueries({ queryKey: ["/api/general-planning"] }); toast({ title: "Guardia rimossa", diff --git a/server/routes.ts b/server/routes.ts index 6628d50..cb7c541 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -1026,32 +1026,33 @@ export async function registerRoutes(app: Express): Promise { const maxOreGuardia = 9; // Max ore per guardia const minGuardie = site.minGuards || 1; - // Somma ore totali dei turni del giorno + // Calcola ore servizio del sito (per calcolo corretto anche senza turni) + const serviceStart = site.serviceStartTime || "00:00"; + const serviceEnd = site.serviceEndTime || "23:59"; + const [startH, startM] = serviceStart.split(":").map(Number); + const [endH, endM] = serviceEnd.split(":").map(Number); + let serviceHours = (endH + endM/60) - (startH + startM/60); + if (serviceHours <= 0) serviceHours += 24; // Servizio notturno (es. 22:00-06:00) + + // Somma ore totali dei turni del giorno (se esistono) const totalShiftHours = dayShifts.reduce((sum: number, ds: any) => { const start = new Date(ds.shift.startTime); const end = new Date(ds.shift.endTime); return sum + differenceInHours(end, start); }, 0); + // Usa ore servizio o ore turni (se già creati) + const effectiveHours = totalShiftHours > 0 ? totalShiftHours : serviceHours; + // Guardie uniche assegnate (conta ogni guardia una volta anche se ha più turni) const uniqueGuardsAssigned = new Set(guardsWithHours.map((g: any) => g.guardId)).size; - // Calcolo guardie necessarie e mancanti - let totalGuardsNeeded: number; - let missingGuards: number; - - if (totalShiftHours > 0) { - // Se ci sono turni: calcola basandosi sulle ore - // Slot necessari per coprire le ore totali - const slotsNeeded = Math.ceil(totalShiftHours / maxOreGuardia); - // Guardie totali necessarie (slot × min guardie contemporanee) - totalGuardsNeeded = slotsNeeded * minGuardie; - missingGuards = Math.max(0, totalGuardsNeeded - uniqueGuardsAssigned); - } else { - // Se NON ci sono turni: serve almeno la copertura minima - totalGuardsNeeded = minGuardie; - missingGuards = minGuardie; // Tutte mancanti perché non ci sono turni - } + // Calcolo guardie necessarie basato su ore servizio + // Slot necessari per coprire le ore (ogni guardia max 9h) + const slotsNeeded = Math.ceil(effectiveHours / maxOreGuardia); + // Guardie totali necessarie (slot × min guardie contemporanee) + const totalGuardsNeeded = slotsNeeded * minGuardie; + const missingGuards = Math.max(0, totalGuardsNeeded - uniqueGuardsAssigned); return { siteId: site.id, @@ -1287,8 +1288,8 @@ export async function registerRoutes(app: Express): Promise { const actualMonth = baseDate.getMonth(); const actualDay = baseDate.getDate(); - // Build dates in UTC to avoid timezone shifts - const shiftDate = new Date(Date.UTC(actualYear, actualMonth, actualDay, 0, 0, 0, 0)); + // Build dates in LOCAL timezone to match user's selection + const shiftDate = new Date(actualYear, actualMonth, actualDay, 0, 0, 0, 0); // Check contract validity for this date if (site.contractStartDate && site.contractEndDate) { @@ -1301,13 +1302,13 @@ export async function registerRoutes(app: Express): Promise { } } - // Calculate planned start and end times in UTC - const plannedStart = new Date(Date.UTC(actualYear, actualMonth, actualDay, hours, minutes, 0, 0)); - const plannedEnd = new Date(Date.UTC(actualYear, actualMonth, actualDay, hours + durationHours, minutes, 0, 0)); + // Calculate planned start and end times in LOCAL timezone + const plannedStart = new Date(actualYear, actualMonth, actualDay, hours, minutes, 0, 0); + const plannedEnd = new Date(actualYear, actualMonth, actualDay, hours + durationHours, minutes, 0, 0); - // Find or create shift for this site/date (full day boundaries in UTC) - const dayStart = new Date(Date.UTC(actualYear, actualMonth, actualDay, 0, 0, 0, 0)); - const dayEnd = new Date(Date.UTC(actualYear, actualMonth, actualDay, 23, 59, 59, 999)); + // Find or create shift for this site/date (full day boundaries in LOCAL timezone) + const dayStart = new Date(actualYear, actualMonth, actualDay, 0, 0, 0, 0); + const dayEnd = new Date(actualYear, actualMonth, actualDay, 23, 59, 59, 999); let existingShifts = await tx .select() @@ -1331,12 +1332,12 @@ export async function registerRoutes(app: Express): Promise { const [startHour, startMin] = serviceStart.split(":").map(Number); const [endHour, endMin] = serviceEnd.split(":").map(Number); - const shiftStart = new Date(Date.UTC(actualYear, actualMonth, actualDay, startHour, startMin, 0, 0)); - let shiftEnd = new Date(Date.UTC(actualYear, actualMonth, actualDay, endHour, endMin, 0, 0)); + const shiftStart = new Date(actualYear, actualMonth, actualDay, startHour, startMin, 0, 0); + let shiftEnd = new Date(actualYear, actualMonth, actualDay, endHour, endMin, 0, 0); // If end time is before/equal to start time, shift extends to next day if (shiftEnd <= shiftStart) { - shiftEnd = new Date(Date.UTC(actualYear, actualMonth, actualDay + 1, endHour, endMin, 0, 0)); + shiftEnd = new Date(actualYear, actualMonth, actualDay + 1, endHour, endMin, 0, 0); } [shift] = await tx.insert(shifts).values({