Fix task due date not saving correctly to a future date

Add console logging to client and server to debug and fix an issue where task due dates were not being saved correctly, defaulting to the current date instead of the selected future date.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: cc2d271b-82f0-4d6a-9302-a0b067ffb429
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/cc2d271b-82f0-4d6a-9302-a0b067ffb429/xi95nEa
This commit is contained in:
michaelschal committed 2025-08-19 06:57:42 +00:00
1 parent c8b76c8b2e
commit 87cc2a0f88
4 files changed
+93 -2

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 KiB

+29 -2
View File
@@ -134,7 +134,12 @@ export default function TaskForm({ task, onClose }: TaskFormProps) {
createdBy: user?.id, createdBy: user?.id,
dueDate: data.dueDate || null 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); return apiRequest("/api/tasks", "POST", taskData);
}, },
onSuccess: () => { onSuccess: () => {
@@ -156,7 +161,16 @@ export default function TaskForm({ task, onClose }: TaskFormProps) {
}); });
const updateMutation = useMutation({ 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: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["/api/tasks"] }); queryClient.invalidateQueries({ queryKey: ["/api/tasks"] });
toast({ toast({
@@ -176,6 +190,17 @@ export default function TaskForm({ task, onClose }: TaskFormProps) {
}); });
const onSubmit = (data: TaskFormData) => { 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é // Vérifier qu'un magasin est auto-sélectionné
if (!localSelectedStoreId) { if (!localSelectedStoreId) {
toast({ toast({
@@ -196,9 +221,11 @@ export default function TaskForm({ task, onClose }: TaskFormProps) {
assignedTo: data.assignedTo, assignedTo: data.assignedTo,
dueDate: data.dueDate || null, dueDate: data.dueDate || null,
}; };
console.log('🔄 Update task submitData:', submitData);
updateMutation.mutate(submitData); updateMutation.mutate(submitData);
} else { } else {
// Création d'une nouvelle tâche - le groupId sera ajouté dans createMutation // Création d'une nouvelle tâche - le groupId sera ajouté dans createMutation
console.log('➕ Create task data:', data);
createMutation.mutate(data); createMutation.mutate(data);
} }
}; };
+33
View File
@@ -1390,6 +1390,14 @@ export async function registerRoutes(app: Express): Promise<Server> {
createdBy: user.id, 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 // Check if user has access to the group
if (user.role !== 'admin') { if (user.role !== 'admin') {
const userGroupIds = user.userGroups.map(ug => ug.groupId); const userGroupIds = user.userGroups.map(ug => ug.groupId);
@@ -1399,6 +1407,12 @@ export async function registerRoutes(app: Express): Promise<Server> {
} }
const task = await storage.createTask(data); 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); res.json(task);
} catch (error) { } catch (error) {
console.error("Error creating task:", error); console.error("Error creating task:", error);
@@ -1420,6 +1434,19 @@ export async function registerRoutes(app: Express): Promise<Server> {
return res.status(404).json({ message: "Task not found" }); 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 // Check permissions
if (user.role !== 'admin') { if (user.role !== 'admin') {
const userGroupIds = user.userGroups.map(ug => ug.groupId); const userGroupIds = user.userGroups.map(ug => ug.groupId);
@@ -1429,6 +1456,12 @@ export async function registerRoutes(app: Express): Promise<Server> {
} }
const updatedTask = await storage.updateTask(id, req.body); 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); res.json(updatedTask);
} catch (error) { } catch (error) {
console.error("Error updating task:", error); console.error("Error updating task:", error);
+31
View File
@@ -1622,16 +1622,47 @@ export class DatabaseStorage implements IStorage {
} }
async createTask(taskData: InsertTask): Promise<Task> { async createTask(taskData: InsertTask): Promise<Task> {
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(); 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; return task;
} }
async updateTask(id: number, taskData: Partial<InsertTask>): Promise<Task> { async updateTask(id: number, taskData: Partial<InsertTask>): Promise<Task> {
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 const [task] = await db
.update(tasks) .update(tasks)
.set({ ...taskData, updatedAt: new Date() }) .set({ ...taskData, updatedAt: new Date() })
.where(eq(tasks.id, id)) .where(eq(tasks.id, id))
.returning(); .returning();
console.log('💾 DatabaseStorage.updateTask - Result:', {
taskId: task.id,
title: task.title,
dueDate: task.dueDate,
dueDateType: typeof task.dueDate
});
return task; return task;
} }