diff --git a/src/components/ui-showcase/UIShowcaseClient.tsx b/src/components/ui-showcase/UIShowcaseClient.tsx
index a913303..8c32d0d 100644
--- a/src/components/ui-showcase/UIShowcaseClient.tsx
+++ b/src/components/ui-showcase/UIShowcaseClient.tsx
@@ -64,6 +64,7 @@ export function UIShowcaseClient() {
description: 'Migration vers les composants UI génériques',
impact: 'high',
completedAt: new Date(),
+ updatedAt: new Date(),
tags: ['refactoring', 'ui'],
todosCount: 8
},
@@ -73,6 +74,7 @@ export function UIShowcaseClient() {
description: 'Ajout de 10 nouveaux thèmes avec CSS variables',
impact: 'medium',
completedAt: new Date(Date.now() - 86400000),
+ updatedAt: new Date(Date.now() - 86400000),
tags: ['themes', 'css'],
todosCount: 3
}
diff --git a/src/components/ui/AchievementCard.tsx b/src/components/ui/AchievementCard.tsx
index 3218e4c..e068378 100644
--- a/src/components/ui/AchievementCard.tsx
+++ b/src/components/ui/AchievementCard.tsx
@@ -12,6 +12,7 @@ export interface AchievementData {
description?: string;
impact: 'low' | 'medium' | 'high';
completedAt: Date;
+ updatedAt: Date;
tags?: string[];
todosCount?: number;
}
@@ -46,9 +47,12 @@ export function AchievementCard({
-
- {format(achievement.completedAt, 'dd/MM', { locale: fr })}
-
+
+
Terminé: {format(achievement.completedAt, 'dd/MM', { locale: fr })}
+ {achievement.updatedAt && achievement.updatedAt.getTime() !== achievement.completedAt.getTime() && (
+
Mis à jour: {format(achievement.updatedAt, 'dd/MM', { locale: fr })}
+ )}
+
{/* Titre */}
diff --git a/src/services/analytics/manager-summary.ts b/src/services/analytics/manager-summary.ts
index c548121..ef03898 100644
--- a/src/services/analytics/manager-summary.ts
+++ b/src/services/analytics/manager-summary.ts
@@ -42,6 +42,7 @@ export interface KeyAccomplishment {
tags: string[];
impact: 'high' | 'medium' | 'low';
completedAt: Date;
+ updatedAt: Date;
relatedItems: string[]; // IDs des tâches/checkboxes liées
todosCount: number; // Nombre de todos associés
}
@@ -261,6 +262,7 @@ export class ManagerSummaryService {
tags: task.taskTags?.map(tt => tt.tag.name) || [],
impact,
completedAt: task.completedAt || task.updatedAt,
+ updatedAt: task.updatedAt,
relatedItems: [task.id],
todosCount: allRelatedTodos // Nombre total de todos associés à cette tâche
});
@@ -283,6 +285,7 @@ export class ManagerSummaryService {
tags: [], // Todos standalone n'ont pas de tags par défaut
impact,
completedAt: todo.date,
+ updatedAt: todo.date, // Pour les todos, updatedAt = completedAt
relatedItems: [todo.id],
todosCount: 1 // Un todo = 1 todo
});
diff --git a/src/services/task-management/tasks.ts b/src/services/task-management/tasks.ts
index 6397ab6..78be152 100644
--- a/src/services/task-management/tasks.ts
+++ b/src/services/task-management/tasks.ts
@@ -67,15 +67,18 @@ export class TasksService {
tags?: string[];
dueDate?: Date;
}): Promise {
+ const status = taskData.status || 'todo';
const task = await prisma.task.create({
data: {
title: taskData.title,
description: taskData.description,
- status: taskData.status || 'todo',
+ status: status,
priority: taskData.priority || 'medium',
dueDate: taskData.dueDate,
source: 'manual', // Source manuelle
- sourceId: `manual-${Date.now()}` // ID unique
+ sourceId: `manual-${Date.now()}`, // ID unique
+ // Si créée directement en done/archived, définir completedAt
+ completedAt: (status === 'done' || status === 'archived') ? getToday() : null
},
include: {
taskTags: {
@@ -135,12 +138,16 @@ export class TasksService {
updatedAt: getToday()
};
-
- if (updates.status === 'done' && !task.completedAt) {
+ // Logique pour completedAt : date de résolution définitive
+ if (updates.status === 'done') {
+ // Première fois qu'on marque comme done -> définir completedAt
+ updateData.completedAt = getToday();
+ } else if (updates.status === 'archived' && !task.completedAt) {
+ // Première fois qu'on archive -> définir completedAt (archiver = résoudre)
updateData.completedAt = getToday();
- } else if (updates.status && updates.status !== 'done' && task.completedAt) {
- updateData.completedAt = null;
}
+ // Si elle était déjà done/archived et qu'on change le statut,
+ // on garde la completedAt existante (ne jamais l'effacer)
await prisma.task.update({
where: { id: taskId },