diff --git a/src/components/ui/AchievementCard.tsx b/src/components/ui/AchievementCard.tsx
index 6396b0b..3218e4c 100644
--- a/src/components/ui/AchievementCard.tsx
+++ b/src/components/ui/AchievementCard.tsx
@@ -76,7 +76,7 @@ export function AchievementCard({
)}
{/* Count de todos */}
- {achievement.todosCount && achievement.todosCount > 0 && (
+ {achievement.todosCount !== undefined && achievement.todosCount > 0 && (
📋
{achievement.todosCount} todo{achievement.todosCount > 1 ? 's' : ''}
diff --git a/src/components/ui/ChallengeCard.tsx b/src/components/ui/ChallengeCard.tsx
index 36ac006..6b6b312 100644
--- a/src/components/ui/ChallengeCard.tsx
+++ b/src/components/ui/ChallengeCard.tsx
@@ -79,7 +79,7 @@ export function ChallengeCard({
)}
{/* Count de todos */}
- {challenge.todosCount && challenge.todosCount > 0 && (
+ {challenge.todosCount !== undefined && challenge.todosCount > 0 && (
📋
{challenge.todosCount} todo{challenge.todosCount > 1 ? 's' : ''}
diff --git a/src/services/analytics/manager-summary.ts b/src/services/analytics/manager-summary.ts
index c7dd154..0d72d3f 100644
--- a/src/services/analytics/manager-summary.ts
+++ b/src/services/analytics/manager-summary.ts
@@ -97,7 +97,7 @@ export class ManagerSummaryService {
]);
// Analyser et extraire les accomplissements clés
- const keyAccomplishments = this.extractKeyAccomplishments(tasks, checkboxes);
+ const keyAccomplishments = await this.extractKeyAccomplishments(tasks, checkboxes);
// Identifier les défis à venir
const upcomingChallenges = await this.identifyUpcomingChallenges();
@@ -221,11 +221,11 @@ export class ManagerSummaryService {
/**
* Extrait les accomplissements clés basés sur la priorité
*/
- private static extractKeyAccomplishments(tasks: TaskType[], checkboxes: CheckboxType[]): KeyAccomplishment[] {
+ private static async extractKeyAccomplishments(tasks: TaskType[], checkboxes: CheckboxType[]): Promise {
const accomplishments: KeyAccomplishment[] = [];
// Tâches: prendre toutes les high/medium priority, et quelques low si significatives
- tasks.forEach(task => {
+ for (const task of tasks) {
const priority = task.priority.toLowerCase();
// Convertir priorité task en impact accomplissement
@@ -237,13 +237,20 @@ export class ManagerSummaryService {
} else {
// Pour les low priority, ne garder que si c'est vraiment significatif
if (!this.isSignificantTask(task.title)) {
- return;
+ continue;
}
impact = 'low';
}
- // Compter les todos (checkboxes) associés à cette tâche
- const relatedTodos = checkboxes.filter(cb => cb.task?.id === task.id);
+ // Compter TOUS les todos associés à cette tâche (pas seulement ceux de la période)
+ // car l'accomplissement c'est la tâche complétée, pas seulement les todos de la période
+ const allRelatedTodos = await prisma.dailyCheckbox.count({
+ where: {
+ task: {
+ id: task.id
+ }
+ }
+ });
accomplishments.push({
id: `task-${task.id}`,
@@ -252,12 +259,13 @@ export class ManagerSummaryService {
tags: task.taskTags?.map(tt => tt.tag.name) || [],
impact,
completedAt: task.completedAt || getToday(),
- relatedItems: [task.id, ...relatedTodos.map(t => t.id)],
- todosCount: relatedTodos.length // Nombre réel de todos associés
+ relatedItems: [task.id],
+ todosCount: allRelatedTodos // Nombre total de todos associés à cette tâche
});
- });
+ }
// AJOUTER les todos standalone avec la nouvelle règle de priorité
+ // Exclure les todos déjà comptés dans les tâches complétées
const standaloneTodos = checkboxes.filter(checkbox =>
!checkbox.task // Todos non liés à une tâche
);
@@ -394,6 +402,9 @@ export class ManagerSummaryService {
const estimatedEffort = this.estimateEffort(task.title, task.description || undefined);
+ // Compter les todos associés à cette tâche
+ const relatedTodos = upcomingCheckboxes.filter(cb => cb.task?.id === task.id);
+
challenges.push({
id: `task-${task.id}`,
title: task.title,
@@ -402,8 +413,8 @@ export class ManagerSummaryService {
priority,
estimatedEffort,
blockers: this.identifyBlockers(task.title, task.description || undefined),
- relatedItems: [task.id],
- todosCount: 0 // TODO: compter les todos associés à cette tâche
+ relatedItems: [task.id, ...relatedTodos.map(t => t.id)],
+ todosCount: relatedTodos.length // Nombre réel de todos associés
});
});