152 lines
4.9 KiB
Markdown
152 lines
4.9 KiB
Markdown
# Feature: Gestion des notes internes pour les salariés (Staff)
|
|
|
|
## 📝 Description
|
|
|
|
Cette fonctionnalité permet au staff de :
|
|
- **Ajouter des notes internes** pour chaque salarié
|
|
- **Modifier** les notes existantes
|
|
- **Visualiser** les notes dans une interface claire
|
|
|
|
Les notes sont stockées dans la colonne `notes` de la table `salaries` et sont **visibles uniquement par le staff**.
|
|
|
|
## 🔧 Fichiers modifiés
|
|
|
|
### 1. `/components/staff/SalariesGridSimple.tsx` (MODIFIÉ)
|
|
|
|
**Ajouts :**
|
|
- Ajout du champ `notes` dans le type `Salarie`
|
|
- États pour gérer l'édition :
|
|
- `isEditingNote` : booléen pour mode édition
|
|
- `noteValue` : valeur temporaire de la note en cours d'édition
|
|
- `savingNote` : indicateur de sauvegarde en cours
|
|
|
|
**Fonctions ajoutées :**
|
|
- `handleSaveNote()` : Sauvegarde la note via l'API
|
|
- `handleStartEditNote()` : Active le mode édition et charge la note actuelle
|
|
- `handleCancelEditNote()` : Annule l'édition en cours
|
|
|
|
**UI de la Card Note interne :**
|
|
|
|
**Mode Lecture (note existante) :**
|
|
- Affichage de la note dans un bloc jaune avec bordure
|
|
- Format `whitespace-pre-wrap` pour respecter les retours à la ligne
|
|
- Bouton "✏️ Modifier la note"
|
|
|
|
**Mode Lecture (pas de note) :**
|
|
- Message "Aucune note enregistrée pour ce salarié"
|
|
- Bouton "+ Ajouter une note"
|
|
|
|
**Mode Édition :**
|
|
- Textarea de 5 lignes avec placeholder
|
|
- Bouton "Enregistrer" avec loader pendant la sauvegarde
|
|
- Bouton "Annuler" pour quitter sans sauvegarder
|
|
- Désactivation des contrôles pendant la sauvegarde
|
|
|
|
### 2. `/app/api/staff/salaries/update/route.ts` (MODIFIÉ)
|
|
|
|
**Modifications :**
|
|
- Ajout de `'notes'` dans la liste `allowedFields`
|
|
- Permet maintenant de mettre à jour la colonne `notes` de la table `salaries`
|
|
|
|
### 3. `/app/(app)/staff/salaries/page.tsx` (MODIFIÉ)
|
|
|
|
**Modifications :**
|
|
- Ajout de `notes` dans le `.select()` de la requête Supabase initiale
|
|
- Permet de charger les notes existantes au chargement de la page
|
|
|
|
### 4. `/app/api/staff/salaries/search/route.ts` (MODIFIÉ)
|
|
|
|
**Modifications :**
|
|
- Ajout de `notes` dans le `.select()` de la requête de recherche
|
|
- Permet d'avoir les notes dans les résultats de recherche
|
|
|
|
## 🎨 Interface utilisateur
|
|
|
|
### Card "Note interne"
|
|
|
|
```
|
|
📝 Note interne
|
|
────────────────────────
|
|
|
|
[Mode vide]
|
|
Aucune note enregistrée pour ce salarié.
|
|
[+ Ajouter une note]
|
|
|
|
[Mode avec note]
|
|
┌──────────────────────────────┐
|
|
│ Note existante qui peut │
|
|
│ contenir plusieurs lignes │
|
|
│ avec retours à la ligne │
|
|
└──────────────────────────────┘
|
|
[✏️ Modifier la note]
|
|
|
|
[Mode édition]
|
|
┌──────────────────────────────┐
|
|
│ Textarea éditable │
|
|
│ │
|
|
│ │
|
|
│ │
|
|
└──────────────────────────────┘
|
|
[Enregistrer] [Annuler]
|
|
```
|
|
|
|
## 💾 Stockage
|
|
|
|
- **Table** : `salaries`
|
|
- **Colonne** : `notes` (TEXT, nullable)
|
|
- **Format** : Texte libre avec support des retours à la ligne
|
|
- **Visibilité** : Staff uniquement
|
|
|
|
## 🔒 Sécurité
|
|
|
|
- Seul le staff peut lire et modifier les notes
|
|
- Validation côté serveur via `staff_users.is_staff`
|
|
- Les notes ne sont jamais exposées aux salariés
|
|
|
|
## ⚡ Comportement
|
|
|
|
1. **Changement de salarié** : Réinitialise automatiquement le mode édition
|
|
2. **Sauvegarde** : Mise à jour optimiste + confirmation serveur
|
|
3. **Annulation** : Restaure la valeur d'origine sans sauvegarder
|
|
4. **Feedback visuel** : Loader pendant la sauvegarde, désactivation des boutons
|
|
|
|
## 🎯 Cas d'usage
|
|
|
|
- Notes RH confidentielles
|
|
- Historique des échanges
|
|
- Alertes ou rappels internes
|
|
- Informations administratives spécifiques
|
|
- Tout commentaire utile pour le suivi du salarié
|
|
|
|
## ✅ Tests recommandés
|
|
|
|
1. **Ajout d'une note sur un salarié sans note**
|
|
- Cliquer sur "+ Ajouter une note"
|
|
- Saisir du texte avec plusieurs lignes
|
|
- Valider et vérifier l'affichage
|
|
|
|
2. **Modification d'une note existante**
|
|
- Sélectionner un salarié avec une note
|
|
- Cliquer sur "✏️ Modifier la note"
|
|
- Modifier le texte
|
|
- Valider et vérifier la mise à jour
|
|
|
|
3. **Annulation**
|
|
- Commencer à éditer une note
|
|
- Cliquer sur "Annuler"
|
|
- Vérifier que les modifications ne sont pas sauvegardées
|
|
|
|
4. **Changement de salarié pendant l'édition**
|
|
- Éditer une note
|
|
- Sélectionner un autre salarié
|
|
- Vérifier que le mode édition se désactive
|
|
|
|
5. **Retours à la ligne**
|
|
- Ajouter une note avec plusieurs paragraphes
|
|
- Vérifier que les retours à la ligne sont préservés
|
|
|
|
6. **Sauvegarde d'une note vide**
|
|
- Éditer une note existante
|
|
- Vider le contenu
|
|
- Sauvegarder
|
|
- Vérifier qu'elle devient "Aucune note"
|