Files
LogiFlow/URGENT-CMD-55-FIX.md
T
michaelschal 95823a90c3 Improve visibility and debugging for order validation functionality
Add temporary debug logs and visible indicators to the CalendarGrid component to diagnose why the order validation button is not appearing for admins, and also include a direct SQL fix for CMD-55 status.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: a8a78c07-e900-425c-a577-5b4c5894379d
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/a8a78c07-e900-425c-a577-5b4c5894379d/3ec1Xks
2025-08-11 21:05:47 +00:00

5.8 KiB

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 :

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 :
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' && (
    <Button
      size="sm"
      variant="ghost"
      className="h-5 w-5 p-0 hover:bg-white/20 opacity-0 group-hover/order:opacity-100 transition-opacity mr-1"
      onClick={(e) => handleValidateOrder(order.id, e)}
      title="Valider la commande"
    >
      <CheckCircle className="w-3 h-3 text-green-200" />
    </Button>
  )}
  1. client/src/pages/Calendar.tsx - Modifier l'appel à CalendarGrid :
<CalendarGrid
  currentDate={currentDate}
  orders={orders}
  deliveries={deliveries}
  onDateClick={handleDateClick}
  onItemClick={handleItemClick}
  user={user}
  onOrderValidated={() => {
    queryClient.invalidateQueries({ queryKey: ['/api/orders'] });
    queryClient.invalidateQueries({ queryKey: ['/api/deliveries'] });
  }}
/>

Commandes de Déploiement :

# 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 :

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

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.