diff --git a/PRODUCTION_URGENT_FIX.md b/PRODUCTION_URGENT_FIX.md index 21a47c2..7bcc6b0 100644 --- a/PRODUCTION_URGENT_FIX.md +++ b/PRODUCTION_URGENT_FIX.md @@ -44,4 +44,11 @@ Les ventes devraient maintenant être créées sur le bon magasin sélectionné. ## ✅ RÉSULTATS ATTENDUS - L'admin peut voir et sélectionner tous les magasins - Les ventes sont créées sur le magasin sélectionné -- L'historique affiche les ventes du bon magasin \ No newline at end of file +- L'historique affiche les ventes du bon magasin +- La suppression de ventes fonctionne correctement + +### ✅ CORRECTION SUPPLÉMENTAIRE - Suppression des ventes +Route DELETE corrigée pour utiliser 'administrator' au lieu de 'admin': +```javascript +app.delete('/api/sales/:id', requireRole(['administrator', 'manager']), ...) +``` \ No newline at end of file diff --git a/attached_assets/image_1752944914799.png b/attached_assets/image_1752944914799.png new file mode 100644 index 0000000..caa3a07 Binary files /dev/null and b/attached_assets/image_1752944914799.png differ diff --git a/fix-production-complete.sql b/fix-production-complete.sql new file mode 100644 index 0000000..f1906cd --- /dev/null +++ b/fix-production-complete.sql @@ -0,0 +1,45 @@ +-- CORRECTION COMPLÈTE PRODUCTION - Tous les problèmes identifiés +-- Exécuter ces commandes dans la base de données production + +-- 1. Corriger l'utilisateur admin (ID 3) - permissions complètes +UPDATE users +SET role = 'administrator', store_id = NULL +WHERE id = 3 AND username = 'gael'; + +-- 2. Vérifier que la correction a bien été appliquée +SELECT 'UTILISATEUR ADMIN CORRIGÉ:' as status, + id, username, role, store_id +FROM users +WHERE id = 3; + +-- 3. Vérifier tous les magasins disponibles +SELECT 'MAGASINS DISPONIBLES:' as info, + id, name, is_active +FROM stores +ORDER BY id; + +-- 4. Vérifier la répartition des ventes par magasin +SELECT 'RÉPARTITION DES VENTES:' as info, + store_id, + COUNT(*) as total_ventes, + MAX(timestamp) as derniere_vente +FROM sales +GROUP BY store_id +ORDER BY store_id; + +-- 5. Test de permissions (à exécuter après redémarrage de l'application) +-- curl -X POST http://votre-domaine:5000/api/auth/login \ +-- -H "Content-Type: application/json" \ +-- -d '{"username":"gael","password":"votre_mot_de_passe"}' +-- +-- curl http://votre-domaine:5000/api/stores -H "Cookie: session_cookie" +-- (Devrait retourner tous les magasins) +-- +-- curl http://votre-domaine:5000/api/sales?storeId=2 -H "Cookie: session_cookie" +-- (Devrait retourner les ventes du magasin Houdemont) + +-- RÉSULTATS ATTENDUS APRÈS APPLICATION : +-- ✅ Magasins : Admin voit Frouard ET Houdemont dans le sélecteur +-- ✅ Création : Ventes créées sur le magasin sélectionné (pas toujours Frouard) +-- ✅ Historique : Affichage des ventes du magasin sélectionné +-- ✅ Suppression : Les ventes peuvent être supprimées par l'admin \ No newline at end of file diff --git a/server/routes.ts b/server/routes.ts index 54547e9..4895815 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -340,7 +340,7 @@ export async function registerRoutes(app: Express): Promise { } }); - app.delete('/api/sales/:id', requireRole(['admin', 'manager']), async (req, res) => { + app.delete('/api/sales/:id', requireRole(['administrator', 'manager']), async (req, res) => { try { const saleId = parseInt(req.params.id); await storage.deleteSale(saleId);