diff --git a/attached_assets/{479D6EB1-2ED4-4D44-B81A-9E72A1DC4E51}_1757406654986.png b/attached_assets/{479D6EB1-2ED4-4D44-B81A-9E72A1DC4E51}_1757406654986.png new file mode 100644 index 0000000..c79a7b7 Binary files /dev/null and b/attached_assets/{479D6EB1-2ED4-4D44-B81A-9E72A1DC4E51}_1757406654986.png differ diff --git a/attached_assets/{4CD624D9-1097-4643-80B2-FE1B87169440}_1757407593708.png b/attached_assets/{4CD624D9-1097-4643-80B2-FE1B87169440}_1757407593708.png new file mode 100644 index 0000000..780b859 Binary files /dev/null and b/attached_assets/{4CD624D9-1097-4643-80B2-FE1B87169440}_1757407593708.png differ diff --git a/client/src/components/Layout.tsx b/client/src/components/Layout.tsx index c34387c..86771d1 100644 --- a/client/src/components/Layout.tsx +++ b/client/src/components/Layout.tsx @@ -98,7 +98,14 @@ export default function Layout({ children }: LayoutProps) { // IMPORTANT FIX: Pour les rôles directeur/manager, forcer la sélection d'un magasin spécifique // si aucun n'est sélectionné et qu'ils n'ont accès qu'à un seul magasin if ((user.role === 'directeur' || user.role === 'manager') && !selectedStoreId && stores.length === 1 && !needsUpdate) { - console.log('🏪 Auto-selecting single available store for directeur/manager:', stores[0].id); + console.log('🏪 Auto-selecting single available store for directeur/manager:', { + storeId: stores[0].id, + storeName: stores[0].name, + userRole: user.role, + userId: user.id, + previousSelectedStoreId: selectedStoreId, + timestamp: new Date().toISOString() + }); const singleStoreId = stores[0].id; setSelectedStoreId(singleStoreId); localStorage.setItem('selectedStoreId', singleStoreId.toString()); diff --git a/client/src/pages/Tasks.tsx b/client/src/pages/Tasks.tsx index 9188f1f..7b025eb 100644 --- a/client/src/pages/Tasks.tsx +++ b/client/src/pages/Tasks.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; import { useQuery, useQueryClient } from "@tanstack/react-query"; import { useAuthUnified } from "@/hooks/useAuthUnified"; import { useStore } from "@/components/Layout"; @@ -92,7 +92,7 @@ function TaskFormInline({ task, onClose, selectedStoreId, user }: any) { method, taskData, selectedStoreId, - finalGroupId: taskData.groupId + finalGroupId: (taskData as any).groupId }); const response = await fetch(url, { @@ -317,6 +317,32 @@ export default function Tasks() { const { toast } = useToast(); const queryClient = useQueryClient(); + // Debug enablement condition for tasks query + const isQueryEnabled = !!user && (user.role === 'admin' || (user.role === 'directeur' || user.role === 'manager' ? !!selectedStoreId : true)); + console.log('🔍 TASK QUERY ENABLEMENT DEBUG:', { + hasUser: !!user, + userRole: user?.role, + selectedStoreId, + isAdmin: user?.role === 'admin', + isDirecteurOrManager: user?.role === 'directeur' || user?.role === 'manager', + hasSelectedStore: !!selectedStoreId, + finalEnabled: isQueryEnabled, + storeInitialized, + timestamp: new Date().toISOString() + }); + + // Force refresh when selectedStoreId changes for directeur/manager + useEffect(() => { + if (user && (user.role === 'directeur' || user.role === 'manager') && selectedStoreId) { + console.log('🔄 FORCE REFRESH: selectedStoreId changed for directeur/manager:', { + userRole: user.role, + selectedStoreId, + timestamp: new Date().toISOString() + }); + queryClient.invalidateQueries({ queryKey: ["/api/tasks"] }); + } + }, [selectedStoreId, user, queryClient]); + // États locaux const [searchTerm, setSearchTerm] = useState(""); const [statusFilter, setStatusFilter] = useState("all"); @@ -348,7 +374,8 @@ export default function Tasks() { url: `/api/tasks?${params.toString()}`, willFilterByStore: !!selectedStoreId, enabled: !!user, - timestamp: new Date().toISOString() + timestamp: new Date().toISOString(), + userGroups: user?.userGroups?.map((ug: any) => ug.groupId) || 'NONE' }); const response = await fetch(`/api/tasks?${params.toString()}`, { @@ -386,7 +413,7 @@ export default function Tasks() { throw error; } }, - enabled: !!user, + enabled: !!user && (user.role === 'admin' || (user.role === 'directeur' || user.role === 'manager' ? !!selectedStoreId : true)), }); // Fetch users for task assignment - seulement pour admin/manager/directeur