# Projets & Workflows ## Qu'est-ce qu'un projet ? Un projet regroupe un ensemble de **tâches**, **time entries** et éventuellement **tickets client**. Il est défini par : - Un **code court** (2-10 lettres majuscules, ex: `SIRH`, `CRM`) qui préfixe les numéros de tâches - Un **client** optionnel (ou interne si null) - Une **couleur** d'identification - Un **workflow** (obligatoire) qui définit ses colonnes kanban ## Qu'est-ce qu'un workflow ? Un **workflow** est un *jeu de statuts kanban* réutilisable. Au lieu d'avoir une liste globale de statuts comme dans la plupart des outils, chaque projet a son propre kanban adapté à sa façon de travailler. ### Exemple | Workflow | Statuts | |---|---| | **Standard** (par défaut) | À faire → En cours → Bloqué → En attente de validation → Terminé | | **DevKanban** | Backlog → Spec → In Dev → Review PR → QA → Done | | **Support** | Nouveau → Diagnostic → Résolu | Tu peux créer autant de workflows que tu veux depuis **Admin → Workflows**. ## Les 5 catégories canoniques Chaque statut, peu importe son workflow, appartient à **une catégorie canonique** parmi : | Catégorie | Description | |---|---| | `todo` | À faire — pas encore commencé | | `in_progress` | En cours — quelqu'un bosse dessus | | `blocked` | Bloqué — attente d'une dépendance | | `review` | En validation — relecture, PR, QA | | `done` | Terminé — close | > 🎯 **Pourquoi des catégories ?** Pour que la vue *Mes tâches* puisse regrouper des tâches venant de projets avec des workflows différents (ex: une tâche "In Dev" de DevKanban et "En cours" de Standard apparaissent dans la même colonne `in_progress`). ## Changer le workflow d'un projet 1. Ouvrir le projet → **Modifier le projet** (drawer) 2. Section **Workflow** → cliquer sur **Changer de workflow** 3. Sélectionner le workflow cible 4. **Mapper chaque statut source vers un statut cible** (le mapping est pré-rempli automatiquement par catégorie) 5. **Confirmer** — toutes les tâches migrent dans une seule transaction ### Règles du mapping - ✅ Chaque statut actuellement utilisé par une tâche **doit** être mappé (sinon erreur 422) - ✅ Un statut peut être mappé vers `null` → la tâche passe en backlog (sans statut) - ❌ Tu ne peux pas mapper vers un statut qui n'appartient pas au workflow cible ## Supprimer un workflow Tu peux supprimer un workflow uniquement s'il n'est **lié à aucun projet** (HTTP 409 sinon). Réassigne d'abord les projets vers un autre workflow. > ⚠️ Le workflow **Standard** ne peut pas être supprimé tant qu'il reste le défaut (un seul workflow peut avoir `isDefault=true` à la fois, garanti par un listener Doctrine).