diff --git a/attached_assets/{4603FD9C-DCE9-469E-A659-47D34156686F}_1755586486756.png b/attached_assets/{4603FD9C-DCE9-469E-A659-47D34156686F}_1755586486756.png new file mode 100644 index 0000000..15e719e Binary files /dev/null and b/attached_assets/{4603FD9C-DCE9-469E-A659-47D34156686F}_1755586486756.png differ diff --git a/client/src/components/tasks/TaskForm.tsx b/client/src/components/tasks/TaskForm.tsx index e0b09e9..8e69a1e 100644 --- a/client/src/components/tasks/TaskForm.tsx +++ b/client/src/components/tasks/TaskForm.tsx @@ -134,7 +134,12 @@ export default function TaskForm({ task, onClose }: TaskFormProps) { createdBy: user?.id, dueDate: data.dueDate || null }; - console.log('🚀 Creating task with data:', taskData); + console.log('🚀 Creating task with data:', { + ...taskData, + dueDate: taskData.dueDate, + dueDateType: typeof taskData.dueDate, + dueDateISO: taskData.dueDate?.toISOString?.() + }); return apiRequest("/api/tasks", "POST", taskData); }, onSuccess: () => { @@ -156,7 +161,16 @@ export default function TaskForm({ task, onClose }: TaskFormProps) { }); const updateMutation = useMutation({ - mutationFn: (data: any) => apiRequest(`/api/tasks/${task?.id}`, "PUT", data), + mutationFn: (data: any) => { + console.log('🔄 Updating task with data:', { + taskId: task?.id, + data, + dueDate: data.dueDate, + dueDateType: typeof data.dueDate, + dueDateISO: data.dueDate?.toISOString?.() + }); + return apiRequest(`/api/tasks/${task?.id}`, "PUT", data); + }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["/api/tasks"] }); toast({ @@ -176,6 +190,17 @@ export default function TaskForm({ task, onClose }: TaskFormProps) { }); const onSubmit = (data: TaskFormData) => { + // Debug: log des données de soumission + console.log('📝 TaskForm onSubmit:', { + isEdit: !!task, + taskId: task?.id, + formData: data, + dueDate: data.dueDate, + dueDateType: typeof data.dueDate, + dueDateISO: data.dueDate?.toISOString(), + localSelectedStoreId + }); + // Vérifier qu'un magasin est auto-sélectionné if (!localSelectedStoreId) { toast({ @@ -196,9 +221,11 @@ export default function TaskForm({ task, onClose }: TaskFormProps) { assignedTo: data.assignedTo, dueDate: data.dueDate || null, }; + console.log('🔄 Update task submitData:', submitData); updateMutation.mutate(submitData); } else { // Création d'une nouvelle tâche - le groupId sera ajouté dans createMutation + console.log('➕ Create task data:', data); createMutation.mutate(data); } }; diff --git a/server/routes.ts b/server/routes.ts index b4c6075..5db66c5 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -1390,6 +1390,14 @@ export async function registerRoutes(app: Express): Promise { createdBy: user.id, }; + console.log('📝 POST /api/tasks - Received data:', { + originalBody: req.body, + processedData: data, + dueDate: data.dueDate, + dueDateType: typeof data.dueDate, + dueDateValue: data.dueDate + }); + // Check if user has access to the group if (user.role !== 'admin') { const userGroupIds = user.userGroups.map(ug => ug.groupId); @@ -1399,6 +1407,12 @@ export async function registerRoutes(app: Express): Promise { } const task = await storage.createTask(data); + console.log('✅ Task created:', { + id: task.id, + title: task.title, + dueDate: task.dueDate, + dueDateType: typeof task.dueDate + }); res.json(task); } catch (error) { console.error("Error creating task:", error); @@ -1420,6 +1434,19 @@ export async function registerRoutes(app: Express): Promise { return res.status(404).json({ message: "Task not found" }); } + console.log('🔄 PUT /api/tasks/:id - Received data:', { + taskId: id, + originalTask: { + id: task.id, + title: task.title, + dueDate: task.dueDate, + dueDateType: typeof task.dueDate + }, + updateBody: req.body, + newDueDate: req.body.dueDate, + newDueDateType: typeof req.body.dueDate + }); + // Check permissions if (user.role !== 'admin') { const userGroupIds = user.userGroups.map(ug => ug.groupId); @@ -1429,6 +1456,12 @@ export async function registerRoutes(app: Express): Promise { } const updatedTask = await storage.updateTask(id, req.body); + console.log('✅ Task updated:', { + id: updatedTask.id, + title: updatedTask.title, + dueDate: updatedTask.dueDate, + dueDateType: typeof updatedTask.dueDate + }); res.json(updatedTask); } catch (error) { console.error("Error updating task:", error); diff --git a/server/storage.ts b/server/storage.ts index 800f06e..a8b9dcd 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -1622,16 +1622,47 @@ export class DatabaseStorage implements IStorage { } async createTask(taskData: InsertTask): Promise { + console.log('💾 DatabaseStorage.createTask - Input:', { + taskData, + dueDate: taskData.dueDate, + dueDateType: typeof taskData.dueDate, + dueDateISO: taskData.dueDate instanceof Date ? taskData.dueDate.toISOString() : taskData.dueDate + }); + const [task] = await db.insert(tasks).values(taskData).returning(); + + console.log('💾 DatabaseStorage.createTask - Result:', { + taskId: task.id, + title: task.title, + dueDate: task.dueDate, + dueDateType: typeof task.dueDate + }); + return task; } async updateTask(id: number, taskData: Partial): Promise { + console.log('💾 DatabaseStorage.updateTask - Input:', { + taskId: id, + taskData, + dueDate: taskData.dueDate, + dueDateType: typeof taskData.dueDate, + dueDateISO: taskData.dueDate instanceof Date ? taskData.dueDate.toISOString() : taskData.dueDate + }); + const [task] = await db .update(tasks) .set({ ...taskData, updatedAt: new Date() }) .where(eq(tasks.id, id)) .returning(); + + console.log('💾 DatabaseStorage.updateTask - Result:', { + taskId: task.id, + title: task.title, + dueDate: task.dueDate, + dueDateType: typeof task.dueDate + }); + return task; }