From 400931f701033739a3e8ae13411c1afc28e27680 Mon Sep 17 00:00:00 2001 From: LogiFlow <101972532+R0m1k3@users.noreply.github.com> Date: Tue, 4 Nov 2025 13:11:41 +0100 Subject: [PATCH 01/26] Update build script to exclude xlsx package Exclude 'xlsx' package from the build process. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7acdf08..5d04dff 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "license": "MIT", "scripts": { "dev": "NODE_ENV=development tsx server/index.ts", - "build": "vite build && esbuild server/index.ts --platform=node --packages=external --bundle --format=esm --outdir=dist", + "build": "vite build && esbuild server/index.ts --platform=node --packages=external --external:xlsx --bundle --format=esm --outdir=dist", "start": "NODE_ENV=production node dist/index.js", "check": "tsc", "db:push": "drizzle-kit push" From 8be81e82e1c414f370a73690546cc0393e96872d Mon Sep 17 00:00:00 2001 From: LogiFlow <101972532+R0m1k3@users.noreply.github.com> Date: Tue, 4 Nov 2025 13:18:54 +0100 Subject: [PATCH 02/26] Update build script to change package handling --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5d04dff..20d2869 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "license": "MIT", "scripts": { "dev": "NODE_ENV=development tsx server/index.ts", - "build": "vite build && esbuild server/index.ts --platform=node --packages=external --external:xlsx --bundle --format=esm --outdir=dist", + "build": "vite build && esbuild server/index.ts --platform=node --packages=bundle --bundle --format=esm --outdir=dist", "start": "NODE_ENV=production node dist/index.js", "check": "tsc", "db:push": "drizzle-kit push" From 3c20346a8326bac26c7143464866fffdfb454bc2 Mon Sep 17 00:00:00 2001 From: LogiFlow <101972532+R0m1k3@users.noreply.github.com> Date: Tue, 4 Nov 2025 13:22:22 +0100 Subject: [PATCH 03/26] Update build and start scripts in package.json --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 20d2869..6c29ab4 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "license": "MIT", "scripts": { "dev": "NODE_ENV=development tsx server/index.ts", - "build": "vite build && esbuild server/index.ts --platform=node --packages=bundle --bundle --format=esm --outdir=dist", - "start": "NODE_ENV=production node dist/index.js", + "build": "vite build && tsc --project tsconfig.server.json", + "start": "NODE_ENV=production node dist/server/index.js", "check": "tsc", "db:push": "drizzle-kit push" }, From 2d77fd2b863718002ea144234499e34299e6fa05 Mon Sep 17 00:00:00 2001 From: LogiFlow <101972532+R0m1k3@users.noreply.github.com> Date: Tue, 4 Nov 2025 17:43:23 +0100 Subject: [PATCH 04/26] Update build script to use esbuild --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 63d6aac..0b602f9 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "license": "MIT", "scripts": { "dev": "NODE_ENV=development tsx server/index.ts", - "build": "vite build && tsc --project tsconfig.server.json", + "build": "vite build && esbuild server/index.ts --platform=node --packages=bundle --bundle --format=esm --outdir=dist", "start": "NODE_ENV=production node dist/server/index.js", "check": "tsc", "db:push": "drizzle-kit push" From 359cbdcf162bd928875c32bce91f6fbb1aecefc5 Mon Sep 17 00:00:00 2001 From: LogiFlow <101972532+R0m1k3@users.noreply.github.com> Date: Tue, 4 Nov 2025 17:46:31 +0100 Subject: [PATCH 05/26] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0b602f9..63d6aac 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "license": "MIT", "scripts": { "dev": "NODE_ENV=development tsx server/index.ts", - "build": "vite build && esbuild server/index.ts --platform=node --packages=bundle --bundle --format=esm --outdir=dist", + "build": "vite build && tsc --project tsconfig.server.json", "start": "NODE_ENV=production node dist/server/index.js", "check": "tsc", "db:push": "drizzle-kit push" From 6b719fb111b876abdbbb94891c7430c3f3a6a16b Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Mon, 8 Dec 2025 09:12:45 +0100 Subject: [PATCH 06/26] feat: implement Sidebar component including navigation, user details, logout, and BAP document upload with webhook integration. --- client/src/components/Sidebar.tsx | 361 +++++++++++++++--------------- 1 file changed, 176 insertions(+), 185 deletions(-) diff --git a/client/src/components/Sidebar.tsx b/client/src/components/Sidebar.tsx index 502a2df..7d20889 100644 --- a/client/src/components/Sidebar.tsx +++ b/client/src/components/Sidebar.tsx @@ -11,15 +11,15 @@ import { Label } from "@/components/ui/label"; import { Input } from "@/components/ui/input"; import { useToast } from "@/hooks/use-toast"; import { apiRequest } from "@/lib/queryClient"; -import { - Store, - Calendar, - BarChart3, - Package, - Truck, - Building, - Users, - UserCog, +import { + Store, + Calendar, + BarChart3, + Package, + Truck, + Building, + Users, + UserCog, LogOut, FileText, Megaphone, @@ -106,7 +106,7 @@ export default function Sidebar() { const configResponse = await fetch('/api/webhook-bap-config', { credentials: 'include' }); - + if (configResponse.ok) { const config = await configResponse.json(); webhookUrl = config?.webhookUrl; @@ -150,9 +150,9 @@ export default function Sidebar() { if (!response.ok) { throw new Error(`Erreur ${response.status}: ${response.statusText}`); } - + handleCloseWaitingModal(); - + toast({ title: "Succès", description: "Fichier BAP envoyé avec succès", @@ -161,23 +161,23 @@ export default function Sidebar() { // Reset des données setSelectedFile(null); setSelectedRecipient(''); - + } catch (error: any) { handleCloseWaitingModal(); - + let errorMessage = "Impossible d'envoyer le fichier BAP"; if (error.name === 'AbortError') { errorMessage = "Le traitement a pris trop de temps (timeout de 60 secondes)"; } else if (error.message) { errorMessage = error.message; } - + toast({ title: "Erreur", description: errorMessage, variant: "destructive", }); - + // Réouvrir le modal de sélection en cas d'erreur setShowBapModal(true); } finally { @@ -193,7 +193,7 @@ export default function Sidebar() { const handleLogout = async () => { try { // Force logout via fetch to ensure session is destroyed - await fetch('/api/logout', { + await fetch('/api/logout', { method: 'POST', credentials: 'include' }); @@ -232,138 +232,138 @@ export default function Sidebar() { { title: "GESTION PRINCIPALE", items: [ - { - path: "/dashboard", - label: "Tableau de bord", - icon: BarChart3, - roles: ["admin", "directeur", "manager", "employee"] + { + path: "/dashboard", + label: "Tableau de bord", + icon: BarChart3, + roles: ["admin", "directeur", "manager", "employee"] }, - { - path: "/calendar", - label: "Calendrier", - icon: Calendar, - roles: ["admin", "directeur", "manager", "employee"] + { + path: "/calendar", + label: "Calendrier", + icon: Calendar, + roles: ["admin", "directeur", "manager", "employee"] }, ] }, { title: "LOGISTIQUE", items: [ - { - path: "/orders", - label: "Commandes", - icon: Package, - roles: ["admin", "directeur", "manager"] + { + path: "/orders", + label: "Commandes", + icon: Package, + roles: ["admin", "directeur", "manager"] }, - { - path: "/deliveries", - label: "Livraisons", - icon: Truck, - roles: ["admin", "directeur", "manager"] + { + path: "/deliveries", + label: "Livraisons", + icon: Truck, + roles: ["admin", "directeur", "manager"] }, - { - path: "/bl-reconciliation", - label: "Rapprochement", - icon: FileText, - roles: ["admin", "directeur"] + { + path: "/bl-reconciliation", + label: "Rapprochement", + icon: FileText, + roles: ["admin", "directeur"] }, - { - path: "/payment-schedule", - label: "Échéance", - icon: CreditCard, - roles: ["admin", "directeur"] + { + path: "/payment-schedule", + label: "Échéance", + icon: CreditCard, + roles: ["admin", "directeur"] }, - { - path: "/avoirs", - label: "Avoirs", - icon: Receipt, - roles: ["admin", "directeur", "manager"] + { + path: "/avoirs", + label: "Avoirs", + icon: Receipt, + roles: ["admin", "directeur", "manager"] }, ] }, { title: "ANALYSES", items: [ - { - path: "/analytics", - label: "Statistiques", - icon: BarChart3, - roles: ["admin", "directeur", "manager"] + { + path: "/analytics", + label: "Statistiques", + icon: BarChart3, + roles: ["admin", "directeur", "manager"] }, - { - path: "/sales-analysis", - label: "Analyse Vente", - icon: TrendingUp, - roles: ["admin", "directeur"] + { + path: "/sales-analysis", + label: "Analyse Vente", + icon: TrendingUp, + roles: ["admin", "directeur"] }, ] }, { title: "OPÉRATIONS", items: [ - { - path: "/publicities", - label: "Publicités", - icon: Megaphone, - roles: ["admin", "directeur", "manager", "employee"] + { + path: "/publicities", + label: "Publicités", + icon: Megaphone, + roles: ["admin", "directeur", "manager", "employee"] }, - { - path: "/customer-orders", - label: "Commandes Client", - icon: ShoppingCart, - roles: ["admin", "directeur", "manager", "employee"] + { + path: "/customer-orders", + label: "Commandes Client", + icon: ShoppingCart, + roles: ["admin", "directeur", "manager", "employee"] }, - { - path: "/dlc", - label: "Gestion DLC", - icon: Clock, - roles: ["admin", "directeur", "manager", "employee"] + { + path: "/dlc", + label: "Gestion DLC", + icon: Clock, + roles: ["admin", "directeur", "manager", "employee"] }, - { - path: "/tasks", - label: "Tâches", - icon: ListTodo, - roles: ["admin", "directeur", "manager", "employee"] + { + path: "/tasks", + label: "Tâches", + icon: ListTodo, + roles: ["admin", "directeur", "manager", "employee"] }, - { - path: "/sav", - label: "SAV", - icon: Wrench, - roles: ["admin", "directeur", "manager", "employee"] + { + path: "/sav", + label: "SAV", + icon: Wrench, + roles: ["admin", "directeur", "manager", "employee"] }, ] }, ]; const adminItems = [ - { - path: "/users", - label: "Utilisateurs", - icon: UserCog, - roles: ["admin"] + { + path: "/users", + label: "Utilisateurs", + icon: UserCog, + roles: ["admin"] }, - { - path: "/suppliers", - label: "Fournisseurs", - icon: Building, - roles: ["admin"] + { + path: "/suppliers", + label: "Fournisseurs", + icon: Building, + roles: ["admin"] }, - { - path: "/groups", - label: "Magasins", - icon: Users, - roles: ["admin"] + { + path: "/groups", + label: "Magasins", + icon: Users, + roles: ["admin"] }, - { - path: "/utilities", - label: "Utilitaires", - icon: Settings, - roles: ["admin"] + { + path: "/utilities", + label: "Utilitaires", + icon: Settings, + roles: ["admin"] }, - { - path: "#bap", - label: "BAP", - icon: FileUp, + { + path: "#bap", + label: "BAP", + icon: FileUp, roles: ["admin"], isButton: true }, @@ -383,27 +383,26 @@ export default function Sidebar() { // Classes responsives adaptées avec support tablette const getSidebarClasses = () => { if (isMobile) { - return `fixed inset-y-0 left-0 z-50 w-64 bg-white border-r border-gray-200 shadow-lg transform transition-transform duration-300 ease-in-out ${ - mobileMenuOpen ? 'translate-x-0' : '-translate-x-full' - }`; + return `fixed inset-y-0 left-0 z-50 w-64 bg-white border-r border-gray-200 shadow-lg transform transition-transform duration-300 ease-in-out ${mobileMenuOpen ? 'translate-x-0' : '-translate-x-full' + }`; } - + // Mode tablette : semi-collapsed par défaut ou collapsed si forcé if (isTablet) { return `${sidebarCollapsed ? 'sidebar-collapsed' : 'sidebar-tablet'} bg-white border-r border-gray-200 flex flex-col shadow-lg transition-all duration-300 ease-in-out`; } - + // Mode desktop standard return `${sidebarCollapsed ? 'sidebar-collapsed' : 'sidebar-expanded'} bg-white border-r border-gray-200 flex flex-col shadow-lg transition-all duration-300 ease-in-out`; }; - + const sidebarClasses = getSidebarClasses(); - + // Debug log pour vérifier l'état de la sidebar - console.log('🔧 Sidebar Debug:', { - isMobile, - sidebarCollapsed, - mobileMenuOpen, + console.log('🔧 Sidebar Debug:', { + isMobile, + sidebarCollapsed, + mobileMenuOpen, width: sidebarCollapsed ? 'collapsed (64px)' : 'expanded (256px)', classes: sidebarClasses }); @@ -578,7 +577,7 @@ export default function Sidebar() { {/* Navigation */} -