From c6477255367108facd5228abae434a143e8f03da Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Mon, 29 Sep 2025 22:37:00 +0200 Subject: [PATCH] feat: enhance AchievementCard and ManagerSummaryService logic - Added logic to differentiate between regular achievements and todos in `AchievementCard`, changing background color accordingly. - Updated todos count display to only show for non-todo achievements, improving clarity. - Refactored `ManagerSummaryService` to remove outdated filters and allow unlimited display of accomplishments and challenges, enhancing data visibility. - Simplified priority handling by including 'urgent' as a high priority, ensuring better task categorization. --- src/components/ui/AchievementCard.tsx | 11 +++- src/services/analytics/manager-summary.ts | 78 ++--------------------- 2 files changed, 14 insertions(+), 75 deletions(-) diff --git a/src/components/ui/AchievementCard.tsx b/src/components/ui/AchievementCard.tsx index 065be58..6384105 100644 --- a/src/components/ui/AchievementCard.tsx +++ b/src/components/ui/AchievementCard.tsx @@ -34,9 +34,14 @@ export function AchievementCard({ maxTags = 2, className = '' }: AchievementCardProps) { + // Détecter si c'est un todo (ID commence par "todo-") + const isTodo = achievement.id.startsWith('todo-'); + return (
{/* Barre colorée gauche */}
@@ -81,8 +86,8 @@ export function AchievementCard({

)} - {/* Count de todos */} - {achievement.todosCount !== undefined && achievement.todosCount > 0 && ( + {/* Count de todos - seulement pour les tâches, pas pour les todos standalone */} + {!isTodo && achievement.todosCount !== undefined && achievement.todosCount > 0 && (
📋 {achievement.todosCount} todo{achievement.todosCount > 1 ? 's' : ''} diff --git a/src/services/analytics/manager-summary.ts b/src/services/analytics/manager-summary.ts index ef03898..3d8f950 100644 --- a/src/services/analytics/manager-summary.ts +++ b/src/services/analytics/manager-summary.ts @@ -132,22 +132,6 @@ export class ManagerSummaryService { gte: startDate, lte: endDate } - }, - // Tâches avec status 'done' et updatedAt dans la période - { - status: 'done', - updatedAt: { - gte: startDate, - lte: endDate - } - }, - // Tâches avec status 'archived' récemment (aussi des accomplissements) - { - status: 'archived', - updatedAt: { - gte: startDate, - lte: endDate - } } ] }, @@ -233,15 +217,12 @@ export class ManagerSummaryService { // Convertir priorité task en impact accomplissement let impact: 'high' | 'medium' | 'low'; - if (priority === 'high') { + if (priority === 'high' || priority === 'urgent') { impact = 'high'; } else if (priority === 'medium') { impact = 'medium'; } else { - // Pour les low priority, ne garder que si c'est vraiment significatif - if (!this.isSignificantTask(task.title)) { - continue; - } + // Pour les low priority, tout prendre impact = 'low'; } @@ -300,7 +281,7 @@ export class ManagerSummaryService { } return b.completedAt.getTime() - a.completedAt.getTime(); }) - .slice(0, 12); // Plus d'items maintenant qu'on filtre mieux + // Pas de limite - afficher tous les accomplissements } /** @@ -393,15 +374,12 @@ export class ManagerSummaryService { // Convertir priorité task en priorité challenge let priority: 'high' | 'medium' | 'low'; - if (taskPriority === 'high') { + if (taskPriority === 'high' || taskPriority === 'urgent') { priority = 'high'; } else if (taskPriority === 'medium') { priority = 'medium'; } else { - // Pour les low priority, ne garder que si c'est vraiment challengeant - if (!this.isChallengingTask(task.title)) { - return; - } + // Pour les low priority, tout prendre priority = 'low'; } @@ -463,7 +441,7 @@ export class ManagerSummaryService { const priorityOrder = { high: 3, medium: 2, low: 1 }; return priorityOrder[b.priority] - priorityOrder[a.priority]; }) - .slice(0, 10); // Plus d'items maintenant qu'on filtre mieux + // Pas de limite - afficher tous les challenges } /** @@ -501,50 +479,6 @@ export class ManagerSummaryService { return blockers; } - /** - * Détermine si une tâche est significative - */ - private static isSignificantTask(title: string): boolean { - const significantKeywords = [ - 'release', 'deploy', 'launch', 'milestone', - 'architecture', 'design', 'strategy', - 'integration', 'migration', 'optimization' - ]; - return significantKeywords.some(keyword => title.toLowerCase().includes(keyword)); - } - - /** - * Détermine si une checkbox est significative - */ - private static isSignificantCheckbox(text: string): boolean { - const content = text.toLowerCase(); - return content.length > 30 || // Checkboxes détaillées - content.includes('meeting') || - content.includes('review') || - content.includes('call') || - content.includes('presentation'); - } - - /** - * Détermine si une tâche représente un défi - */ - private static isChallengingTask(title: string): boolean { - const challengingKeywords = [ - 'complex', 'difficult', 'challenge', - 'architecture', 'performance', 'security', - 'integration', 'migration', 'optimization' - ]; - return challengingKeywords.some(keyword => title.toLowerCase().includes(keyword)); - } - - /** - * Analyse les patterns dans les checkboxes pour identifier des enjeux - */ - private static analyzeCheckboxPatterns(): UpcomingChallenge[] { - // Pour l'instant, retourner un array vide - // À implémenter selon les besoins spécifiques - return []; - } /** * Calcule les métriques résumées