From e6fb129c43d57afd1e0ff6a079f26c02c0169e98 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Fri, 15 Aug 2025 13:40:27 +0000 Subject: [PATCH 1/2] Improve task board display with consistent minimum widths for columns Adjust the client-side rendering of task columns to ensure a minimum width of 150px for all status categories, enhancing visual consistency and usability of the task board interface. Replit-Commit-Author: Agent Replit-Commit-Session-Id: d43bd811-9372-45a7-8ac9-4a954c0538e1 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/d43bd811-9372-45a7-8ac9-4a954c0538e1/0172YJt --- client/src/pages/Tasks.tsx | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/client/src/pages/Tasks.tsx b/client/src/pages/Tasks.tsx index 54fcc45..11cf0b4 100644 --- a/client/src/pages/Tasks.tsx +++ b/client/src/pages/Tasks.tsx @@ -557,7 +557,7 @@ export default function Tasks() {
{/* Colonne Backlog */} -
+

Backlog ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'backlog').length}) @@ -570,7 +570,7 @@ export default function Tasks() {

{/* Colonne À faire */} -
+

À faire ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'todo').length}) @@ -583,7 +583,7 @@ export default function Tasks() {

{/* Colonne En cours */} -
+

En cours ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'in_progress').length}) @@ -596,7 +596,7 @@ export default function Tasks() {

{/* Colonne Révision */} -
+

Révision ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'review').length}) @@ -609,7 +609,7 @@ export default function Tasks() {

{/* Colonne Test */} -
+

Test ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'testing').length}) @@ -622,7 +622,7 @@ export default function Tasks() {

{/* Colonne Bloqué */} -
+

Bloqué ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'blocked').length}) @@ -635,7 +635,7 @@ export default function Tasks() {

{/* Colonne Prêt Déploiement */} -
+

Prêt Déploiement ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'ready_to_deploy').length}) @@ -648,7 +648,7 @@ export default function Tasks() {

{/* Colonne Déployé */} -
+

Déployé ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'deployed').length}) @@ -661,7 +661,7 @@ export default function Tasks() {

{/* Colonne Terminé */} -
+

Terminé ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'done').length}) @@ -674,7 +674,7 @@ export default function Tasks() {

{/* Colonne Archivé */} -
+

Archivé ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'archived').length}) @@ -704,15 +704,15 @@ export default function Tasks() {

) : (
- {/* Tâches actives (non terminées/archivées) */} - {paginatedTasks.filter(task => !['done', 'archived'].includes(task.status)).length > 0 && ( + {/* Tâches À faire en premier */} + {paginatedTasks.filter(task => ['todo', 'backlog', 'in_progress', 'review', 'testing', 'blocked', 'ready_to_deploy', 'deployed'].includes(task.status)).length > 0 && (

- Tâches actives ({paginatedTasks.filter(task => !['done', 'archived'].includes(task.status)).length}) + Tâches à faire ({paginatedTasks.filter(task => ['todo', 'backlog', 'in_progress', 'review', 'testing', 'blocked', 'ready_to_deploy', 'deployed'].includes(task.status)).length})

{paginatedTasks - .filter(task => !['done', 'archived'].includes(task.status)) + .filter(task => ['todo', 'backlog', 'in_progress', 'review', 'testing', 'blocked', 'ready_to_deploy', 'deployed'].includes(task.status)) .map((task) => { const priorityConfig = getPriorityConfig(task.priority); const PriorityIcon = priorityConfig.icon; @@ -912,8 +912,6 @@ export default function Tasks() { )}
- -
From 93861c373f936d3124009c3b6d7c4bf10b6ba336 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Fri, 15 Aug 2025 13:53:09 +0000 Subject: [PATCH 2/2] Simplify task workflow to two columns Reduce Kanban board to 'To Do' and 'Done' columns, aligning with user preference for a simpler workflow. Replit-Commit-Author: Agent Replit-Commit-Session-Id: d43bd811-9372-45a7-8ac9-4a954c0538e1 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/d43bd811-9372-45a7-8ac9-4a954c0538e1/0172YJt --- client/src/pages/Tasks.tsx | 132 ++++--------------------------------- replit.md | 2 +- 2 files changed, 15 insertions(+), 119 deletions(-) diff --git a/client/src/pages/Tasks.tsx b/client/src/pages/Tasks.tsx index 11cf0b4..0b5fc66 100644 --- a/client/src/pages/Tasks.tsx +++ b/client/src/pages/Tasks.tsx @@ -553,134 +553,30 @@ export default function Tasks() { {/* Contenu selon la vue sélectionnée */} - {/* Vue Kanban avec 10 colonnes - Workflow complet */} + {/* Vue Kanban simple - 2 colonnes */}
-
- {/* Colonne Backlog */} -
-

- - Backlog ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'backlog').length}) -

-
- {filteredTasks.filter((task: TaskWithRelations) => task.status === 'backlog').map((task: TaskWithRelations) => { - return renderKanbanCard(task, canEditTasks); - })} -
-
- +
{/* Colonne À faire */} -
-

- - À faire ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'todo').length}) +
+

+ + À faire ({filteredTasks.filter((task: TaskWithRelations) => task.status !== 'done' && task.status !== 'archived').length})

-
- {filteredTasks.filter((task: TaskWithRelations) => task.status === 'todo').map((task: TaskWithRelations) => { - return renderKanbanCard(task, canEditTasks); - })} -
-
- - {/* Colonne En cours */} -
-

- - En cours ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'in_progress').length}) -

-
- {filteredTasks.filter((task: TaskWithRelations) => task.status === 'in_progress').map((task: TaskWithRelations) => { - return renderKanbanCard(task, canEditTasks); - })} -
-
- - {/* Colonne Révision */} -
-

- - Révision ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'review').length}) -

-
- {filteredTasks.filter((task: TaskWithRelations) => task.status === 'review').map((task: TaskWithRelations) => { - return renderKanbanCard(task, canEditTasks); - })} -
-
- - {/* Colonne Test */} -
-

- - Test ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'testing').length}) -

-
- {filteredTasks.filter((task: TaskWithRelations) => task.status === 'testing').map((task: TaskWithRelations) => { - return renderKanbanCard(task, canEditTasks); - })} -
-
- - {/* Colonne Bloqué */} -
-

- - Bloqué ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'blocked').length}) -

-
- {filteredTasks.filter((task: TaskWithRelations) => task.status === 'blocked').map((task: TaskWithRelations) => { - return renderKanbanCard(task, canEditTasks); - })} -
-
- - {/* Colonne Prêt Déploiement */} -
-

- - Prêt Déploiement ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'ready_to_deploy').length}) -

-
- {filteredTasks.filter((task: TaskWithRelations) => task.status === 'ready_to_deploy').map((task: TaskWithRelations) => { - return renderKanbanCard(task, canEditTasks); - })} -
-
- - {/* Colonne Déployé */} -
-

- - Déployé ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'deployed').length}) -

-
- {filteredTasks.filter((task: TaskWithRelations) => task.status === 'deployed').map((task: TaskWithRelations) => { +
+ {filteredTasks.filter((task: TaskWithRelations) => task.status !== 'done' && task.status !== 'archived').map((task: TaskWithRelations) => { return renderKanbanCard(task, canEditTasks); })}
{/* Colonne Terminé */} -
-

- - Terminé ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'done').length}) +
+

+ + Terminé ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'done' || task.status === 'archived').length})

-
- {filteredTasks.filter((task: TaskWithRelations) => task.status === 'done').map((task: TaskWithRelations) => { - return renderKanbanCard(task, canEditTasks, true); - })} -
-
- - {/* Colonne Archivé */} -
-

- - Archivé ({filteredTasks.filter((task: TaskWithRelations) => task.status === 'archived').length}) -

-
- {filteredTasks.filter((task: TaskWithRelations) => task.status === 'archived').map((task: TaskWithRelations) => { +
+ {filteredTasks.filter((task: TaskWithRelations) => task.status === 'done' || task.status === 'archived').map((task: TaskWithRelations) => { return renderKanbanCard(task, canEditTasks, true); })}
diff --git a/replit.md b/replit.md index 99301a2..db8a8ba 100644 --- a/replit.md +++ b/replit.md @@ -34,7 +34,7 @@ The platform is built with a clear separation of concerns, utilizing a modern fu - **Reconciliation:** Functionality for reconciling Bills of Lading (BL) and invoices with immediate UI updates. - **Invoice Verification Cache:** Robust caching system for invoice verification results with automatic expiration and conflict resolution. Enhanced with unique constraint handling and graceful error management for production stability (August 2025). Fixed production SSL certificate errors and fetch timeout loops with enhanced error handling, network timeout protection, and error result caching to prevent infinite retry loops (August 2025). - **UI Scrollbar Optimization:** Eliminated redundant vertical scrollbar on the right side of the screen while preserving necessary internal page scrolling. Implemented global CSS rules with `overflow: hidden` on html/body/root and Layout height management to prevent vertical overflow issues in production (August 2025). -- **Task Management:** Système complet de gestion des tâches avec workflow Kanban 7 colonnes - Backlog, À faire, En cours, Révision, Test, Terminé, Archivé. Fonctionnalités temporelles avancées avec tri intelligent par statut/priorité/date, dates d'échéance avec sélecteur calendrier, indicateurs visuels pour tâches en retard/urgentes, filtres par échéance et statut complets. Interface optimisée avec cartes compactes pour vue Kanban étendue et vue liste détaillée (Août 2025). +- **Task Management:** Système simple de gestion des tâches avec workflow Kanban 2 colonnes - À faire et Terminé. Préférence utilisateur pour un workflow simplifié. Fonctionnalités temporelles avancées avec tri intelligent par statut/priorité/date, dates d'échéance avec sélecteur calendrier, indicateurs visuels pour tâches en retard/urgentes, filtres par échéance et statut complets. Interface optimisée avec vue Kanban simple 2 colonnes et vue liste détaillée (Août 2025). - **User and Permission Management:** Granular access controls ensuring that users (e.g., employees) have appropriate permissions for tasks like creating customer orders. - **Reporting:** Statistical reporting, including monthly summaries of deliveries based on `deliveredDate`.