feat(absences) : avancement module absences + suppression du portail client

Deux lots regroupés sur la branche feat/absence-management.

Suppression complète du portail client :
- retire ROLE_CLIENT (security.yaml) ; User::getRoles() ajoute toujours ROLE_USER
- supprime l'entité ClientTicket (+ repo, states, relations), User.client et
  User.allowedProjects, NotificationService, ProjectAllowedExtension, le bloc
  ROLE_CLIENT de MailAccessChecker
- front : pages /portal, layout portal, composants client-ticket/,
  AdminClientTicketTab, services/dto/i18n/docs associés
- fixtures : retire les users client-liot / client-acme
- migration Version20260522110000 (drop client_ticket, user_allowed_projects,
  colonnes liées ; task_document.task_id -> NOT NULL)
- tests : retire les cas obsolètes testant le blocage des clients sur le mail

Module gestion des absences (WIP) :
- entités / migrations (Version20260521160000, Version20260522090000)
- pages absences.vue / team-absences.vue, composants frontend/components/absence/
- services front, AccrueLeaveCommand, PublicHolidayController

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Matthieu
2026-05-22 11:31:31 +02:00
parent de98924fd3
commit 2a0b202d32
109 changed files with 3918 additions and 3656 deletions

View File

@@ -1,11 +1,10 @@
# Bienvenue dans Lesstime
Lesstime est un outil de **gestion de projets** qui combine 4 grandes capacités :
Lesstime est un outil de **gestion de projets** qui combine plusieurs grandes capacités :
- 🗂️ **Gestion de projets** avec kanban personnalisable (workflows)
-**Suivi de tâches** avec assignations, priorités, efforts, deadlines, tags
- ⏱️ **Time tracking** intégré, lié aux projets et aux tâches
- 🎫 **Portail client** pour que tes clients déposent leurs tickets
## Comprendre les rôles
@@ -13,7 +12,6 @@ Lesstime est un outil de **gestion de projets** qui combine 4 grandes capacités
|---|---|
| **Admin** | Tout : projets, utilisateurs, intégrations, workflows |
| **User** | Ses tâches, time tracking, projets auxquels il a accès |
| **Client** | Portal dédié — tickets sur ses projets uniquement |
## Vues principales
@@ -22,6 +20,5 @@ Lesstime est un outil de **gestion de projets** qui combine 4 grandes capacités
- **Projets** : un kanban par projet, statuts du workflow associé
- **Time tracking** : timer, time entries, vue mois
- **Admin** : gestion globale (visible uniquement par les admins)
- **Portal** : interface dédiée aux utilisateurs ROLE_CLIENT
> 💡 **Astuce** : utilise l'avatar en haut à droite pour accéder à ton profil et y générer un **token MCP** (cf. section *Token MCP & API*) pour piloter Lesstime depuis Claude / Cursor.

View File

@@ -51,10 +51,6 @@ Si le projet a un repo Gitea lié, tu peux :
- Convention de nommage : `<type>/<CODE>-<NUMBER>-<slug>` (ex: `feature/SIRH-12-add-login`)
- **Voir les PRs** liées (état CI inclus)
## Liaison ticket client
Si la tâche découle d'un ticket client, l'icône 👤 (`heroicons:user-circle`) bleue apparaît avec le numéro du ticket (ex: `CT-001`).
## Commentaires & notifications
- Ajouter un commentaire notifie les watchers (assigné, collaborateurs)

View File

@@ -1,43 +0,0 @@
# Portal client
> 🎫 Section dédiée aux utilisateurs avec le rôle **ROLE_CLIENT**.
## Accès
Les utilisateurs *client* sont **automatiquement redirigés vers `/portal`** après login. Ils ne voient pas les vues internes (projets, time tracking, admin).
## Ce que voit un client
- 📋 La liste de ses **projets autorisés** (définis par l'admin dans le user)
- 🎫 Sur chaque projet, la liste de ses **tickets** (ses créations uniquement)
- Le bouton **Nouveau ticket** sur chaque projet
## Soumettre un ticket
Depuis `/portal/projects/<id>/new-ticket` :
| Champ | Description |
|---|---|
| **Type** | `bug` / `improvement` / `other` |
| **Titre** | Court et descriptif |
| **Description** | Détails — markdown supporté |
| **URL** | Optionnel — page où le problème se manifeste |
Le ticket est automatiquement numéroté **par projet** (ex: `CT-001`).
## Statuts d'un ticket
| Statut | Visible côté client | Signification |
|---|---|---|
| `new` | Oui | Reçu, pas encore traité |
| `in_progress` | Oui | Une tâche interne y est liée |
| `done` | Oui | Résolu et clôturé |
| `rejected` | Oui | Non retenu (avec commentaire explicatif) |
Le `statusComment` est visible par le client quand fourni.
## Côté équipe interne
- Les tickets apparaissent dans **Admin → Tickets client**
- On peut **transformer un ticket en tâche** (la tâche garde une référence au ticket — icône 👤 bleue sur la card)
- Le client voit l'avancement passer en `in_progress` automatiquement quand une tâche est liée

View File

@@ -40,12 +40,9 @@ L'admin (`/admin`) est divisé en plusieurs onglets, chacun gérant une ressourc
## Onglet *Utilisateurs*
- Créer / éditer / désactiver
- Rôles : `ROLE_ADMIN`, `ROLE_USER`, `ROLE_CLIENT`
- **ROLE_CLIENT** : associer un *client* et une liste de *projets autorisés*
- Rôles : `ROLE_ADMIN`, `ROLE_USER`
- Reset password depuis l'admin
> 🔐 Un user *admin+client* (les deux rôles) **n'est pas bloqué** par le middleware portal — le check est sur `ROLE_CLIENT && !ROLE_ADMIN`.
## Onglet *Gitea*
- URL serveur + token API

View File

@@ -4,7 +4,7 @@ Lesstime intègre une **boîte mail partagée** (OVH, protocole IMAP) directemen
> 📥 La messagerie est accessible depuis l'entrée **Messagerie** de la barre latérale (icône enveloppe). Un **badge** y affiche le nombre de mails non lus, toutes boîtes confondues.
> 🛡️ Réservée aux rôles **ROLE_ADMIN** et **ROLE_USER**. Les utilisateurs *client* sont redirigés vers leur portail.
> 🛡️ Réservée aux rôles **ROLE_ADMIN** et **ROLE_USER**.
## L'interface