import { useState, useEffect } from "react"; import { useQueryClient, useMutation, useQuery } from "@tanstack/react-query"; import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { useAuthUnified } from "@/hooks/useAuthUnified"; import { useToast } from "@/hooks/use-toast"; import { apiRequest } from "@/lib/queryClient"; import { isUnauthorizedError } from "@/lib/authUtils"; import { format } from "date-fns"; import { safeFormat } from "@/lib/dateUtils"; import type { Group, Supplier, DeliveryWithRelations, OrderWithRelations } from "@shared/schema"; interface EditDeliveryModalProps { isOpen: boolean; onClose: () => void; delivery: DeliveryWithRelations | null; } export default function EditDeliveryModal({ isOpen, onClose, delivery, }: EditDeliveryModalProps) { const { user } = useAuthUnified(); const { toast } = useToast(); const queryClient = useQueryClient(); const [formData, setFormData] = useState({ supplierId: "", groupId: "", orderId: "", scheduledDate: "", quantity: "", unit: "palettes", notes: "", }); const { data: suppliers = [] } = useQuery({ queryKey: ['/api/suppliers'], }); const { data: groups = [] } = useQuery({ queryKey: ['/api/groups'], }); const { data: allOrders = [] } = useQuery({ queryKey: ['/api/orders'], }); // Filtrer les commandes par fournisseur sélectionné et groupe - montrer toutes les commandes non livrées du même groupe const availableOrders = allOrders.filter(order => formData.supplierId && formData.groupId ? ( order.supplierId === parseInt(formData.supplierId) && order.groupId === parseInt(formData.groupId) && order.status !== 'delivered' ) : false ); // Initialiser le formulaire avec les données de la livraison useEffect(() => { if (delivery) { setFormData({ supplierId: delivery.supplierId.toString(), groupId: delivery.groupId.toString(), orderId: delivery.orderId ? delivery.orderId.toString() : "none", scheduledDate: safeFormat(delivery.scheduledDate, 'yyyy-MM-dd'), quantity: delivery.quantity.toString(), unit: delivery.unit, notes: delivery.notes || "", }); } }, [delivery]); const updateDeliveryMutation = useMutation({ mutationFn: async (data: any) => { await apiRequest(`/api/deliveries/${delivery?.id}`, "PUT", data); }, onSuccess: () => { toast({ title: "Succès", description: "Livraison modifiée avec succès", }); // Invalider tous les caches liés aux livraisons queryClient.invalidateQueries({ queryKey: ['/api/deliveries'] }); queryClient.invalidateQueries({ queryKey: ['/api/orders'] }); queryClient.invalidateQueries({ queryKey: ['/api/stats/monthly'] }); onClose(); }, onError: (error) => { if (isUnauthorizedError(error)) { toast({ title: "Non autorisé", description: "Vous êtes déconnecté. Reconnexion...", variant: "destructive", }); setTimeout(() => { window.location.href = "/api/login"; }, 500); return; } toast({ title: "Erreur", description: "Impossible de modifier la livraison", variant: "destructive", }); }, }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!formData.supplierId || !formData.groupId || !formData.scheduledDate || !formData.quantity) { toast({ title: "Erreur", description: "Veuillez remplir tous les champs obligatoires", variant: "destructive", }); return; } updateDeliveryMutation.mutate({ supplierId: parseInt(formData.supplierId), groupId: parseInt(formData.groupId), orderId: formData.orderId && formData.orderId !== "none" ? parseInt(formData.orderId) : null, scheduledDate: formData.scheduledDate, quantity: parseInt(formData.quantity), unit: formData.unit, notes: formData.notes || undefined, }); }; const handleChange = (field: string, value: string) => { setFormData(prev => ({ ...prev, [field]: value })); }; if (!delivery) return null; return ( Modifier la Livraison #{delivery.id}

Modifier les détails de cette livraison

{availableOrders.length > 0 && (
)}
handleChange('scheduledDate', e.target.value)} />
handleChange('quantity', e.target.value)} placeholder="Ex: 10" />