From a48577c9b827a71594131b42ea7092a237c345c2 Mon Sep 17 00:00:00 2001 From: marco370 <48531002-marco370@users.noreply.replit.com> Date: Thu, 23 Oct 2025 10:25:43 +0000 Subject: [PATCH] Update site management to use service types instead of shift types Introduces the ability to select service types when creating or editing sites, replacing the previous shift type field. It fetches available active service types from the API and displays them in a dropdown. 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/AXEqh9q --- client/src/pages/sites.tsx | 60 ++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/client/src/pages/sites.tsx b/client/src/pages/sites.tsx index de7d018..16d0566 100644 --- a/client/src/pages/sites.tsx +++ b/client/src/pages/sites.tsx @@ -1,6 +1,6 @@ import { useState } from "react"; import { useQuery, useMutation } from "@tanstack/react-query"; -import { Site, InsertSite, Customer } from "@shared/schema"; +import { Site, InsertSite, Customer, ServiceType } from "@shared/schema"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; @@ -18,13 +18,6 @@ import { StatusBadge } from "@/components/status-badge"; import { Badge } from "@/components/ui/badge"; import { Skeleton } from "@/components/ui/skeleton"; -const shiftTypeLabels: Record = { - fixed_post: "Presidio Fisso", - patrol: "Pattugliamento", - night_inspection: "Ispettorato Notturno", - quick_response: "Pronto Intervento", -}; - const locationLabels: Record = { roccapiemonte: "Roccapiemonte", milano: "Milano", @@ -44,6 +37,10 @@ export default function Sites() { queryKey: ["/api/customers"], }); + const { data: serviceTypes } = useQuery({ + queryKey: ["/api/service-types"], + }); + const form = useForm({ resolver: zodResolver(insertSiteSchema), defaultValues: { @@ -51,7 +48,7 @@ export default function Sites() { address: "", customerId: undefined, location: "roccapiemonte", - shiftType: "fixed_post", + serviceTypeId: undefined, minGuards: 1, requiresArmed: false, requiresDriverLicense: false, @@ -71,7 +68,7 @@ export default function Sites() { address: "", customerId: undefined, location: "roccapiemonte", - shiftType: "fixed_post", + serviceTypeId: undefined, minGuards: 1, requiresArmed: false, requiresDriverLicense: false, @@ -145,7 +142,7 @@ export default function Sites() { address: site.address, customerId: site.customerId ?? undefined, location: site.location, - shiftType: site.shiftType, + serviceTypeId: site.serviceTypeId ?? undefined, minGuards: site.minGuards, requiresArmed: site.requiresArmed, requiresDriverLicense: site.requiresDriverLicense, @@ -345,21 +342,22 @@ export default function Sites() { ( - Tipologia Servizio + Tipologia Servizio (opzionale) @@ -631,21 +629,22 @@ export default function Sites() { ( - Tipologia Servizio + Tipologia Servizio (opzionale) @@ -824,9 +823,14 @@ export default function Sites() {
- - {shiftTypeLabels[site.shiftType]} - + {site.serviceTypeId && serviceTypes && (() => { + const serviceType = serviceTypes.find(st => st.id === site.serviceTypeId); + return serviceType ? ( + + {serviceType.label} + + ) : null; + })()} {(() => { const status = getContractStatus(site); const statusInfo = contractStatusLabels[status];