Files
LogiFlow/deploy-auto-sync.js
T
michaelschal 7f6c27f9f0 Automate order delivery status updates when deliveries are confirmed
Implement automatic synchronization to update order status to "delivered" when associated deliveries are marked as "delivered" or validated.

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/KuIk8gU
2025-08-11 20:50:14 +00:00

141 lines
5.9 KiB
JavaScript

#!/usr/bin/env node
/**
* Script de déploiement pour la synchronisation automatique ordre-livraison
* À exécuter sur le serveur de production pour appliquer les modifications
*/
import fs from 'fs/promises';
import path from 'path';
console.log('🚀 Déploiement de la synchronisation automatique...');
const PRODUCTION_ROUTES_PATH = '/path/to/production/server/routes.ts'; // À adapter selon votre structure
// Modifications à appliquer au fichier routes.ts en production
const autoSyncModifications = {
// 1. Modification de la route PUT /api/deliveries/:id pour ajouter la sync auto
updateDeliveryRoute: {
search: ` const data = insertDeliverySchema.partial().parse(req.body);
const updatedDelivery = await storage.updateDelivery(id, data);
res.json(updatedDelivery);`,
replace: ` const data = insertDeliverySchema.partial().parse(req.body);
const updatedDelivery = await storage.updateDelivery(id, data);
// SYNCHRONISATION AUTOMATIQUE : Si livraison devient "delivered", marquer la commande associée comme "delivered"
if (data.status === 'delivered' && updatedDelivery.orderId) {
try {
console.log(\`🔄 Auto-sync: Delivery #\${id} marked as delivered, updating order #\${updatedDelivery.orderId}\`);
await storage.updateOrder(updatedDelivery.orderId, { status: 'delivered' });
console.log(\`✅ Auto-sync: Order #\${updatedDelivery.orderId} automatically marked as delivered\`);
} catch (error) {
console.error(\`❌ Auto-sync failed for order #\${updatedDelivery.orderId}:\`, error);
}
}
res.json(updatedDelivery);`
},
// 2. Modification de la route POST /api/deliveries/:id/validate pour ajouter la sync auto
validateDeliveryRoute: {
search: ` await storage.validateDelivery(id, blData);
res.json({ message: "Delivery validated successfully" });`,
replace: ` await storage.validateDelivery(id, blData);
// SYNCHRONISATION AUTOMATIQUE : Quand validation, marquer la commande associée comme "delivered"
if (delivery.orderId) {
try {
console.log(\`🔄 Auto-sync: Delivery #\${id} validated, updating order #\${delivery.orderId} to delivered\`);
await storage.updateOrder(delivery.orderId, { status: 'delivered' });
console.log(\`✅ Auto-sync: Order #\${delivery.orderId} automatically marked as delivered\`);
} catch (error) {
console.error(\`❌ Auto-sync failed for order #\${delivery.orderId}:\`, error);
}
}
res.json({ message: "Delivery validated successfully" });`
}
};
// Instructions de déploiement
console.log(`
📋 INSTRUCTIONS DE DÉPLOIEMENT PRODUCTION :
1. 🔍 Localisez le fichier server/routes.ts sur votre serveur de production
2. 🔧 Ajoutez la synchronisation automatique dans la route PUT /api/deliveries/:id :
Remplacez :
${autoSyncModifications.updateDeliveryRoute.search}
Par :
${autoSyncModifications.updateDeliveryRoute.replace}
3. 🔧 Ajoutez la synchronisation automatique dans la route POST /api/deliveries/:id/validate :
Remplacez :
${autoSyncModifications.validateDeliveryRoute.search}
Par :
${autoSyncModifications.validateDeliveryRoute.replace}
4. 🔄 Redémarrez votre serveur Node.js en production
5. ✅ Testez en validant une livraison - la commande associée devrait automatiquement passer en "delivered"
6. 🎯 Pour corriger CMD-55 spécifiquement, utilisez le bouton "Sync Status" dans le calendrier
RÉSULTAT ATTENDU :
- Toutes les futures validations de livraisons synchroniseront automatiquement les commandes
- CMD-55 sera corrigée lors de la prochaine utilisation du bouton "Sync Status"
- Le calendrier affichera correctement les commandes livrées en gris
`);
// Créer aussi un patch file pour faciliter l'application
const patchContent = `
--- a/server/routes.ts
+++ b/server/routes.ts
@@ -691,6 +691,15 @@
const data = insertDeliverySchema.partial().parse(req.body);
const updatedDelivery = await storage.updateDelivery(id, data);
+
+ // SYNCHRONISATION AUTOMATIQUE : Si livraison devient "delivered", marquer la commande associée comme "delivered"
+ if (data.status === 'delivered' && updatedDelivery.orderId) {
+ try {
+ console.log(\`🔄 Auto-sync: Delivery #\${id} marked as delivered, updating order #\${updatedDelivery.orderId}\`);
+ await storage.updateOrder(updatedDelivery.orderId, { status: 'delivered' });
+ console.log(\`✅ Auto-sync: Order #\${updatedDelivery.orderId} automatically marked as delivered\`);
+ } catch (error) {
+ console.error(\`❌ Auto-sync failed for order #\${updatedDelivery.orderId}:\`, error);
+ }
+ }
res.json(updatedDelivery);
} catch (error) {
@@ -830,6 +839,15 @@
}
await storage.validateDelivery(id, blData);
+
+ // SYNCHRONISATION AUTOMATIQUE : Quand validation, marquer la commande associée comme "delivered"
+ if (delivery.orderId) {
+ try {
+ console.log(\`🔄 Auto-sync: Delivery #\${id} validated, updating order #\${delivery.orderId} to delivered\`);
+ await storage.updateOrder(delivery.orderId, { status: 'delivered' });
+ console.log(\`✅ Auto-sync: Order #\${delivery.orderId} automatically marked as delivered\`);
+ } catch (error) {
+ console.error(\`❌ Auto-sync failed for order #\${delivery.orderId}:\`, error);
+ }
+ }
res.json({ message: "Delivery validated successfully" });
} catch (error) {
`;
console.log('💾 Sauvegarde du patch dans auto-sync.patch...');
await fs.writeFile('auto-sync.patch', patchContent);
console.log(`
🔧 Alternative : Vous pouvez aussi appliquer le patch automatiquement avec :
cd /path/to/production && patch -p1 < auto-sync.patch
✅ Script de déploiement créé avec succès !
`);