# URGENT - Correction CMD-55 et Déploiement Bouton Validation ## Problèmes Identifiés en Production ### 1. Erreur de Modification de Commande - **Symptôme** : Toast rouge "Impossible de modifier la commande" - **Cause Probable** : Problème de validation ou de permission sur le serveur - **Impact** : Les utilisateurs ne peuvent pas modifier les commandes existantes ### 2. Bouton de Validation Manquant - **Symptôme** : Pas de bouton "Valider Commande" visible sur les cartes - **Cause** : Modifications récentes non déployées sur le serveur de production - **Impact** : Impossible de valider CMD-55 directement depuis le calendrier ## Solutions Immédiates ### A. Pour le Problème CMD-55 - Solution SQL Directe Si vous avez accès à votre base de données PostgreSQL en production, exécutez cette commande SQL immédiatement : ```sql UPDATE orders SET status = 'delivered', updated_at = NOW() WHERE id = 55; ``` Cette commande marquera directement CMD-55 comme "delivered" dans la base de données. ### B. Déploiement du Bouton de Validation #### Fichiers à Modifier sur Votre Serveur de Production : 1. **`client/src/components/CalendarGrid.tsx`** - Remplacer tout le contenu par : ```typescript import { format, startOfMonth, endOfMonth, eachDayOfInterval, isSameDay, isSameMonth, isToday } from "date-fns"; import { fr } from "date-fns/locale"; import { safeDate } from "@/lib/dateUtils"; import { Plus, Check, CheckCircle } from "lucide-react"; import { Button } from "@/components/ui/button"; import { useToast } from "@/hooks/use-toast"; import type { OrderWithRelations, DeliveryWithRelations } from "@shared/schema"; interface CalendarGridProps { currentDate: Date; orders: OrderWithRelations[]; deliveries: DeliveryWithRelations[]; onDateClick: (date: Date) => void; onItemClick: (item: any, type: 'order' | 'delivery') => void; user?: { role: string } | null; onOrderValidated?: () => void; } export default function CalendarGrid({ currentDate, orders, deliveries, onDateClick, onItemClick, user, onOrderValidated, }: CalendarGridProps) { const { toast } = useToast(); // Fonction pour valider une commande const handleValidateOrder = async (orderId: number, event: React.MouseEvent) => { event.stopPropagation(); try { const response = await fetch(`/api/orders/${orderId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ status: 'delivered' }) }); if (!response.ok) { throw new Error(`Erreur ${response.status}: ${await response.text()}`); } toast({ title: "Commande validée", description: `La commande CMD-${orderId} a été marquée comme livrée.`, }); // Rafraîchir les données if (onOrderValidated) { onOrderValidated(); } } catch (error) { console.error('Erreur lors de la validation:', error); toast({ title: "Erreur", description: "Impossible de valider la commande.", variant: "destructive" }); } }; // ... (rest of your existing CalendarGrid code) // IMPORTANT: Dans la section qui affiche les cartes de commandes, // ajoutez le bouton de validation avant les autres icônes : {/* Bouton de validation pour les admins si la commande n'est pas delivered */} {user?.role === 'admin' && order.status !== 'delivered' && ( )} ``` 2. **`client/src/pages/Calendar.tsx`** - Modifier l'appel à CalendarGrid : ```typescript { queryClient.invalidateQueries({ queryKey: ['/api/orders'] }); queryClient.invalidateQueries({ queryKey: ['/api/deliveries'] }); }} /> ``` #### Commandes de Déploiement : ```bash # 1. Sauvegarde cp -r client/src client/src.backup # 2. Appliquer les modifications aux fichiers mentionnés ci-dessus # 3. Reconstruction npm run build # 4. Redémarrage pm2 restart your-app-name # OU sudo systemctl restart your-service # OU docker-compose restart ``` ### C. Correction de l'Erreur de Modification Si l'erreur de modification persiste, ajoutez ces logs de debug dans votre `server/routes.ts` : ```javascript app.put('/api/orders/:id', isAuthenticated, async (req: any, res) => { try { console.log('🔧 [DEBUG] Order update request:', { orderId: req.params.id, body: req.body, userId: req.user?.id || req.user?.claims?.sub }); // ... rest of existing code } catch (error) { console.error("❌ [ERROR] Order update failed:", { error: error.message, stack: error.stack, orderId: req.params.id, body: req.body }); res.status(500).json({ message: "Failed to update order" }); } }); ``` ## Test après Déploiement 1. **Connectez-vous** avec un compte admin 2. **Recherchez CMD-55** dans le calendrier 3. **Passez la souris** sur la carte CMD-55 4. **Cliquez** sur l'icône de cercle avec coche qui apparaît 5. **Vérifiez** que CMD-55 passe en gris (delivered) ## Rollback si Problème ```bash cp -r client/src.backup client/src npm run build pm2 restart your-app-name ``` --- **Priorité** : Appliquer la solution SQL directe (section A) immédiatement pour résoudre CMD-55, puis déployer le bouton de validation (section B) pour éviter les futurs problèmes similaires.