From be78e1497c77316f8f39c31484b061e4923478df Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Sat, 19 Jul 2025 16:48:28 +0000 Subject: [PATCH] Ensure sales are recorded to the correct store based on user selection Fixes sales creation logic to correctly send storeId and updates admin role check. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 4b008663-bd72-492b-b0b6-fa252367e730 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/0715008c-7244-40f4-befc-26c014852236/4b008663-bd72-492b-b0b6-fa252367e730/mXpFFH6 --- PRODUCTION_URGENT_FIX.md | 59 +++++++++++++--------- client/src/components/NewSaleForm.tsx | 2 +- client/src/components/NewSaleFormMulti.tsx | 2 +- 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/PRODUCTION_URGENT_FIX.md b/PRODUCTION_URGENT_FIX.md index b863a81..21a47c2 100644 --- a/PRODUCTION_URGENT_FIX.md +++ b/PRODUCTION_URGENT_FIX.md @@ -1,38 +1,47 @@ # CORRECTION URGENTE PRODUCTION - PROBLÈME SÉLECTEUR MAGASIN -## Problème identifié -- Ventes créées sur Houdemont (ID 2) mais affichées sur Frouard (ID 1) -- L'admin en production (ID 3, "gael") n'a pas accès aux bons magasins -- Sélecteur de magasin ne fonctionne pas correctement +## ✅ PROBLÈME IDENTIFIÉ ET RÉSOLU -## Solutions immédiates +### Problème principal +- Ventes créées sur le mauvais magasin malgré le sélecteur de magasin +- Frontend utilisait `user?.role === 'admin'` au lieu de `'administrator'` +- Le `storeId` n'était pas envoyé dans les requêtes de création de vente -### 1. Corriger l'utilisateur admin production +### ✅ CORRECTIONS APPLIQUÉES + +#### 1. Frontend corrigé +```javascript +// ✅ AVANT (incorrect) +...(user?.role === 'admin' && selectedStoreId && { storeId: selectedStoreId }) + +// ✅ APRÈS (correct) +...(user?.role === 'administrator' && selectedStoreId && { storeId: selectedStoreId }) +``` + +#### 2. Backend corrigé +```javascript +// ✅ Routes API corrigées pour utiliser 'administrator' au lieu de 'admin' +if (user.role !== 'administrator' && targetStoreId !== user.storeId) +if (user.role === 'administrator' && req.body.storeId) +``` + +### Solutions pour production + +#### 1. Corriger l'utilisateur admin production ```sql -- Mettre à jour l'utilisateur gael (ID 3) pour qu'il ait les bons droits UPDATE users SET role = 'administrator', store_id = NULL WHERE id = 3; ``` -### 2. Vérifier et corriger les permissions +#### 2. Redémarrer l'application ```bash -# Connexion à la base de production -docker exec regisflow-regisflow-1 psql -U regisflow -d regisflow +docker restart regisflow-regisflow-1 ``` -### 3. Commandes SQL directes -```sql --- 1. Vérifier l'utilisateur problématique -SELECT id, username, role, store_id FROM users WHERE id = 3; +#### 3. Test après correction +Les ventes devraient maintenant être créées sur le bon magasin sélectionné. --- 2. Corriger les droits admin -UPDATE users SET role = 'administrator', store_id = NULL WHERE id = 3 AND username = 'gael'; - --- 3. Vérifier tous les magasins -SELECT * FROM stores ORDER BY id; - --- 4. Vérifier les ventes par magasin -SELECT store_id, COUNT(*) as total FROM sales GROUP BY store_id; -``` - -## Résultats attendus -Après correction, l'admin devrait voir tous les magasins et pouvoir filtrer les ventes correctement. \ No newline at end of file +## ✅ 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 diff --git a/client/src/components/NewSaleForm.tsx b/client/src/components/NewSaleForm.tsx index ad8f941..4ddbd50 100644 --- a/client/src/components/NewSaleForm.tsx +++ b/client/src/components/NewSaleForm.tsx @@ -88,7 +88,7 @@ export default function NewSaleForm() { mutationFn: async (saleData: any) => { const dataToSend = { ...saleData, - ...(user?.role === 'admin' && selectedStoreId && { storeId: selectedStoreId }) + ...(user?.role === 'administrator' && selectedStoreId && { storeId: selectedStoreId }) }; const response = await apiRequest('/api/sales', { diff --git a/client/src/components/NewSaleFormMulti.tsx b/client/src/components/NewSaleFormMulti.tsx index 9b5a684..9a91151 100644 --- a/client/src/components/NewSaleFormMulti.tsx +++ b/client/src/components/NewSaleFormMulti.tsx @@ -71,7 +71,7 @@ export default function NewSaleFormMulti() { mutationFn: async (saleData: any) => { const dataToSend = { ...saleData, - ...(user?.role === 'admin' && selectedStoreId && { storeId: selectedStoreId }) + ...(user?.role === 'administrator' && selectedStoreId && { storeId: selectedStoreId }) }; const response = await apiRequest('/api/sales', {