From 19ffe5931ba2bce660324921d8a2ccf9e3f8ac22 Mon Sep 17 00:00:00 2001 From: marco370 <48531002-marco370@users.noreply.replit.com> Date: Fri, 17 Oct 2025 15:35:37 +0000 Subject: [PATCH] Filter sites by contract validity to accurately reflect coverage Refine site filtering in route registration to include only sites with valid contracts for the selected date, updating coverage calculations and total site counts accordingly. Replit-Commit-Author: Agent Replit-Commit-Session-Id: e5565357-90e1-419f-b9a8-6ee8394636df Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/6d543d2c-20b9-4ea6-93fe-70fe9b1d9f80/e5565357-90e1-419f-b9a8-6ee8394636df/FlO7tHX --- server/routes.ts | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/server/routes.ts b/server/routes.ts index 062576d..87e71f1 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -669,6 +669,27 @@ export async function registerRoutes(app: Express): Promise { .from(sites) .where(eq(sites.isActive, true)); + // Filtra siti con contratto valido per la data selezionata + const sitesWithValidContract = allSites.filter((site: any) => { + // Se il sito non ha date contrattuali, lo escludiamo + if (!site.contractStartDate || !site.contractEndDate) { + return false; + } + + // Normalizza date per confronto day-only + const selectedDate = new Date(dateStr); + selectedDate.setHours(0, 0, 0, 0); + + const contractStart = new Date(site.contractStartDate); + contractStart.setHours(0, 0, 0, 0); + + const contractEnd = new Date(site.contractEndDate); + contractEnd.setHours(23, 59, 59, 999); + + // Verifica che la data selezionata sia dentro il periodo contrattuale + return selectedDate >= contractStart && selectedDate <= contractEnd; + }); + // Ottieni turni del giorno con assegnazioni const dayShifts = await db .select({ @@ -686,8 +707,8 @@ export async function registerRoutes(app: Express): Promise { ) .groupBy(shifts.id); - // Calcola copertura per ogni sito - const sitesWithCoverage = allSites.map((site: any) => { + // Calcola copertura per ogni sito con contratto valido + const sitesWithCoverage = sitesWithValidContract.map((site: any) => { const siteShifts = dayShifts.filter((s: any) => s.shift.siteId === site.id); // Verifica copertura per ogni turno @@ -736,7 +757,7 @@ export async function registerRoutes(app: Express): Promise { res.json({ date: dateStr, uncoveredSites: sortedUncoveredSites, - totalSites: allSites.length, + totalSites: sitesWithValidContract.length, totalUncovered: uncoveredSites.length }); } catch (error) {