diff --git a/server/routes.ts b/server/routes.ts index acbc736..39d4889 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -803,6 +803,23 @@ export async function registerRoutes(app: Express): Promise { } const data = insertDeliverySchema.partial().parse(transformedData); + + // CRITICAL FIX: Si une commande est liée lors de la modification, vérifier qu'elle appartient au même magasin + if (data.orderId !== undefined) { + if (data.orderId !== null) { + const linkedOrder = await storage.getOrder(data.orderId); + if (!linkedOrder) { + return res.status(400).json({ message: "La commande liée n'existe pas" }); + } + if (linkedOrder.groupId !== delivery.groupId) { + return res.status(400).json({ + message: `Impossible de lier une livraison du magasin ${delivery.groupId} avec une commande du magasin ${linkedOrder.groupId}` + }); + } + console.log(`✅ Validation OK: Livraison #${id} et commande #${data.orderId} appartiennent au même magasin ${delivery.groupId}`); + } + } + const updatedDelivery = await storage.updateDelivery(id, data); console.log('✅ Delivery updated successfully:', { id, updatedDelivery }); @@ -875,6 +892,20 @@ export async function registerRoutes(app: Express): Promise { } } + // CRITICAL FIX: Si une commande est liée, vérifier qu'elle appartient au même magasin + if (data.orderId) { + const linkedOrder = await storage.getOrder(data.orderId); + if (!linkedOrder) { + return res.status(400).json({ message: "La commande liée n'existe pas" }); + } + if (linkedOrder.groupId !== data.groupId) { + return res.status(400).json({ + message: `Impossible de lier une livraison du magasin ${data.groupId} avec une commande du magasin ${linkedOrder.groupId}` + }); + } + console.log(`✅ Validation OK: Livraison et commande #${data.orderId} appartiennent au même magasin ${data.groupId}`); + } + const delivery = await storage.createDelivery(data); // Log de liaison avec commande diff --git a/server/storage.ts b/server/storage.ts index 1314d50..5247278 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -725,7 +725,13 @@ export class DatabaseStorage implements IStorage { .where(eq(orders.id, delivery.orderId)); if (orderData) { - associatedOrder = orderData; + // CRITICAL FIX: Vérifier que la commande appartient au même magasin que la livraison + if (orderData.groupId !== delivery.groupId) { + console.error(`❌ PRODUCTION: Delivery #${delivery.id} (store ${delivery.groupId}) linked to order #${delivery.orderId} (store ${orderData.groupId}) - STORE MISMATCH DETECTED!`); + // Ne pas inclure la commande si elle n'appartient pas au bon magasin + } else { + associatedOrder = orderData; + } } } catch (error) { console.error(`❌ PRODUCTION: Failed to retrieve associated order #${delivery.orderId} for delivery #${delivery.id}:`, error); @@ -835,7 +841,13 @@ export class DatabaseStorage implements IStorage { .where(eq(orders.id, delivery.orderId)); if (orderData) { - associatedOrder = orderData; + // CRITICAL FIX: Vérifier que la commande appartient au même magasin que la livraison + if (orderData.groupId !== delivery.groupId) { + console.error(`❌ PRODUCTION: Delivery #${delivery.id} (store ${delivery.groupId}) linked to order #${delivery.orderId} (store ${orderData.groupId}) - STORE MISMATCH DETECTED!`); + // Ne pas inclure la commande si elle n'appartient pas au bon magasin + } else { + associatedOrder = orderData; + } } } catch (error) { console.error(`❌ PRODUCTION: Failed to retrieve associated order #${delivery.orderId} for delivery #${delivery.id}:`, error); @@ -908,8 +920,14 @@ export class DatabaseStorage implements IStorage { 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}`); + // CRITICAL FIX: Vérifier que la commande appartient au même magasin que la livraison + if (orderData.groupId !== delivery.groupId) { + console.error(`❌ PRODUCTION: getDelivery #${id} (store ${delivery.groupId}) linked to order #${delivery.orderId} (store ${orderData.groupId}) - STORE MISMATCH DETECTED!`); + // Ne pas inclure la commande si elle n'appartient pas au bon magasin + } else { + 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);