From 08698d6fe615724f4d30ea72973234483e887ac6 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Mon, 18 Aug 2025 07:58:01 +0000 Subject: [PATCH] Improve SAV ticket details display and refresh behavior Update the SAV ticket detail modal to use real-time data and adjust the layout for better usability, including fixing the status display bug. Replit-Commit-Author: Agent Replit-Commit-Session-Id: f9197b9b-a5b3-4469-a27d-930a9e9ee736 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/f9197b9b-a5b3-4469-a27d-930a9e9ee736/bqNYoDM --- client/src/pages/SavTickets.tsx | 145 +++++++++++++++++++------------- 1 file changed, 86 insertions(+), 59 deletions(-) diff --git a/client/src/pages/SavTickets.tsx b/client/src/pages/SavTickets.tsx index e631de6..c2bc28a 100644 --- a/client/src/pages/SavTickets.tsx +++ b/client/src/pages/SavTickets.tsx @@ -26,7 +26,8 @@ import { AlertTriangle, CheckCircle, Clock, - Ban + Ban, + Settings } from "lucide-react"; import { safeFormat } from "@/lib/dateUtils"; import type { SavTicketWithRelations, Supplier, Group, InsertSavTicket } from "@shared/schema"; @@ -112,6 +113,16 @@ export default function SavTickets() { staleTime: 1000 * 60 * 2, // 2 minutes }); + // Query pour récupérer les détails actuels du ticket sélectionné + const { data: currentTicketDetails } = useQuery({ + queryKey: [`/api/sav/tickets/${selectedTicket?.id}`], + enabled: !!selectedTicket?.id && showDetailModal, + staleTime: 0, // Toujours frais pour voir les changements en temps réel + }); + + // Utiliser les détails actuels ou fallback sur selectedTicket + const displayedTicket = currentTicketDetails || selectedTicket; + // Create ticket mutation const createTicketMutation = useMutation({ mutationFn: async (data: InsertSavTicket) => { @@ -902,18 +913,18 @@ export default function SavTickets() { {/* Detail Modal */} - {selectedTicket && ( + {displayedTicket && ( - Détails du ticket {selectedTicket.ticketNumber} + Détails du ticket {displayedTicket.ticketNumber} Informations complètes du ticket SAV et suivi -
+
{/* Colonne de gauche - Détails et Actions */} -
+
{/* Section Informations Produit */} @@ -925,21 +936,21 @@ export default function SavTickets() {
Code-barres: -

{selectedTicket.productGencode}

+

{displayedTicket.productGencode}

Référence: -

{selectedTicket.productReference || "Non renseignée"}

+

{displayedTicket.productReference || "Non renseignée"}

Désignation: -

{selectedTicket.productDesignation}

+

{displayedTicket.productDesignation}

{/* Section Informations Client */} - {(selectedTicket.clientName || selectedTicket.clientPhone) && ( + {(displayedTicket.clientName || displayedTicket.clientPhone) && ( @@ -950,11 +961,11 @@ export default function SavTickets() {
Nom: -

{selectedTicket.clientName || "Non renseigné"}

+

{displayedTicket.clientName || "Non renseigné"}

Téléphone: -

{selectedTicket.clientPhone || "Non renseigné"}

+

{displayedTicket.clientPhone || "Non renseigné"}

@@ -972,18 +983,18 @@ export default function SavTickets() {
Type: -

{selectedTicket.problemType}

+

{displayedTicket.problemType}

Priorité: - - {priorityConfig[selectedTicket.priority as keyof typeof priorityConfig]?.label} + + {priorityConfig[displayedTicket.priority as keyof typeof priorityConfig]?.label}
Description: -

{selectedTicket.problemDescription}

+

{displayedTicket.problemDescription}

@@ -999,40 +1010,52 @@ export default function SavTickets() {
Statut: - - {statusConfig[selectedTicket.status as keyof typeof statusConfig]?.label} + + {statusConfig[displayedTicket.status as keyof typeof statusConfig]?.label}
Fournisseur: -

{selectedTicket.supplier?.name}

+

{displayedTicket.supplier?.name}

Magasin: -

{selectedTicket.group?.name}

+

{displayedTicket.group?.name}

Créé le: -

{safeFormat(selectedTicket.createdAt, 'dd/MM/yyyy HH:mm')}

+

{safeFormat(displayedTicket.createdAt, 'dd/MM/yyyy HH:mm')}

{/* Actions rapides */} {canModify && ( -
-

Actions rapides

-
-
- - { + setTempPriority(value); + updateTicketMutation.mutate({ + ticketId: displayedTicket.id, + priority: value + }); + }}> + @@ -1044,30 +1067,34 @@ export default function SavTickets() {
-
- - +
+ + +
-
-
+ + )}
@@ -1076,9 +1103,9 @@ export default function SavTickets() {

Historique et commentaires

{/* Affichage de l'historique existant */} - {(ticketDetails as any)?.history && (ticketDetails as any).history.length > 0 ? ( + {(displayedTicket as any)?.history && (displayedTicket as any).history.length > 0 ? (
- {(ticketDetails as any).history.map((entry: any, index: number) => ( + {(displayedTicket as any).history.map((entry: any, index: number) => (
@@ -1125,7 +1152,7 @@ export default function SavTickets() { }); return; } - addCommentMutation.mutate({ ticketId: selectedTicket.id, comment: newComment.trim() }); + addCommentMutation.mutate({ ticketId: displayedTicket.id, comment: newComment.trim() }); }} disabled={addCommentMutation.isPending} >