From 4df74a66f2f40ee68c251f4b3e463345fc50c0e3 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Wed, 13 Aug 2025 21:59:47 +0000 Subject: [PATCH] Fix order status and delivery linking errors in production Implement comprehensive PostgreSQL fixes to ensure correct order status updates and accurate display of order-delivery relationships, aligning production behavior with development environments. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 7c468936-2a88-4686-ac0a-84921a45222d Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/7c468936-2a88-4686-ac0a-84921a45222d/r577GWu --- replit.md | 16 +++++++++-- server/storage.ts | 68 +++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 80 insertions(+), 4 deletions(-) diff --git a/replit.md b/replit.md index b98ffc9..e076a25 100644 --- a/replit.md +++ b/replit.md @@ -19,12 +19,24 @@ La plateforme fournit une gestion robuste des flux de travail de livraison avec ## Recent Changes -### 2025-08-13 - Correction statut commande lors liaison avec livraison (PRODUCTION) -✅ **Problème production PostgreSQL résolu** : +### 2025-08-13 - CORRECTION COMPLÈTE PostgreSQL production - Statut et Relations +✅ **Problème production PostgreSQL entièrement résolu** : + +**1. Correction statut commande lors liaison :** - **Problème** : Commandes passaient à "delivered" au lieu de "planned" lors liaison avec livraison - **Cause** : Méthode createDelivery() dans DatabaseStorage (PostgreSQL) manquait logique status - **Solution** : Ajout logique complète dans createDelivery() production identique à développement - **Correction** : Commandes liées passent maintenant à "planned" (jaune) et non "delivered" + +**2. Correction affichage relations commandes-livraisons :** +- **Problème** : Liaisons n'apparaissaient pas car relations non récupérées en production +- **Cause** : getOrder() et getDelivery() PostgreSQL ne récupéraient pas les entités associées +- **Solution** : getOrder() récupère maintenant les livraisons liées + getDelivery() récupère commande liée +- **Résultat** : Calendrier affiche maintenant correctement les liaisons avec informations complètes + +**3. Cohérence développement-production :** +- **Avant** : MemStorage (dev) et DatabaseStorage (prod) comportements différents +- **Après** : Logique identique entre développement et production PostgreSQL - **Test** : Synchronisation automatique uniquement lors validation, pas création ### 2025-08-13 - Interface épurée + redirection automatique + réorganisation navigation diff --git a/server/storage.ts b/server/storage.ts index 0d05870..c7fbc64 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -416,7 +416,52 @@ export class DatabaseStorage implements IStorage { .leftJoin(users, eq(orders.createdBy, users.id)) .where(eq(orders.id, id)); - return order; + if (!order) return undefined; + + // Récupérer les livraisons associées à cette commande (PRODUCTION PostgreSQL) + const associatedDeliveries = await db + .select({ + id: deliveries.id, + orderId: deliveries.orderId, + supplierId: deliveries.supplierId, + groupId: deliveries.groupId, + scheduledDate: deliveries.scheduledDate, + deliveredDate: deliveries.deliveredDate, + status: deliveries.status, + quantity: deliveries.quantity, + unit: deliveries.unit, + blNumber: deliveries.blNumber, + blAmount: deliveries.blAmount, + invoiceReference: deliveries.invoiceReference, + invoiceAmount: deliveries.invoiceAmount, + reconciled: deliveries.reconciled, + validatedAt: deliveries.validatedAt, + notes: deliveries.notes, + createdBy: deliveries.createdBy, + createdAt: deliveries.createdAt, + updatedAt: deliveries.updatedAt, + supplier: suppliers, + group: groups, + creator: { + id: users.id, + firstName: users.firstName, + lastName: users.lastName, + username: users.username, + email: users.email + } + }) + .from(deliveries) + .leftJoin(suppliers, eq(deliveries.supplierId, suppliers.id)) + .leftJoin(groups, eq(deliveries.groupId, groups.id)) + .leftJoin(users, eq(deliveries.createdBy, users.id)) + .where(eq(deliveries.orderId, id)); + + console.log(`🔗 PRODUCTION: getOrder #${id} found ${associatedDeliveries.length} associated deliveries`); + + return { + ...order, + deliveries: associatedDeliveries + } as OrderWithRelations; } async createOrder(orderData: InsertOrder): Promise { @@ -587,7 +632,26 @@ export class DatabaseStorage implements IStorage { console.log('⚠️ Could not load creator info:', error); } - return { ...delivery, creator } as DeliveryWithRelations; + // Récupérer la commande associée si elle existe (PRODUCTION PostgreSQL) + let associatedOrder = undefined; + if (delivery.orderId) { + try { + console.log(`🔗 PRODUCTION: getDelivery #${id} retrieving associated order #${delivery.orderId}`); + const orderData = await this.getOrder(delivery.orderId); + if (orderData) { + associatedOrder = orderData; + console.log(`✅ PRODUCTION: getDelivery #${id} found associated order #${delivery.orderId} with status: ${orderData.status}`); + } + } catch (error) { + console.error(`❌ PRODUCTION: Failed to retrieve associated order #${delivery.orderId} for delivery #${id}:`, error); + } + } + + return { + ...delivery, + creator, + order: associatedOrder + } as DeliveryWithRelations; } async createDelivery(deliveryData: InsertDelivery): Promise {