Complete family planning application with: - React frontend with TypeScript - Node.js/Express backend with TypeScript - Python ingestion service for document processing - Planning ingestion service with LLM integration - Shared UI components and type definitions - OAuth integration for calendar synchronization - Comprehensive documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
229 lines
8.3 KiB
Markdown
229 lines
8.3 KiB
Markdown
# Pages de Profils Détaillées - Parents et Grands-parents
|
|
|
|
## Résumé des changements
|
|
|
|
Les pages de profil pour **Parents** et **Grands-parents** ont été créées avec la même structure et ergonomie que la page des **Enfants**, conformément à la demande.
|
|
|
|
## ✅ Pages créées
|
|
|
|
### 1. ParentDetailScreen.js
|
|
**Chemin**: `frontend/src/screens/ParentDetailScreen.js`
|
|
|
|
**Route**: `/profiles/parent/:parentId`
|
|
|
|
**Fonctionnalités**:
|
|
- ✅ Bouton **Planning** → Navigation vers la page planning du parent
|
|
- ✅ Bouton **Importer** → Dialogue d'import de fichier (PDF/image avec OCR)
|
|
- ✅ Bouton **Modifier** → Panneau d'édition en overlay (même page)
|
|
- ✅ Bouton **Supprimer** → Suppression du profil avec confirmation
|
|
- ✅ Section **Congés** avec sélecteur de dates (date picker)
|
|
- Titre du congé
|
|
- Date de début
|
|
- Date de fin
|
|
- Liste des congés enregistrés
|
|
- Suppression individuelle des congés
|
|
- ✅ Section **Notes personnelles** éditables
|
|
|
|
**Différences avec la page Enfant**:
|
|
- ❌ Pas de bouton "Connexion Pronote"
|
|
- ❌ Pas de section "Congés scolaires"
|
|
- ❌ Pas de données Pronote (notes, devoirs, absences, retards)
|
|
- ✅ À la place : Section "Congés" personnalisables
|
|
|
|
### 2. GrandparentDetailScreen.js
|
|
**Chemin**: `frontend/src/screens/GrandparentDetailScreen.js`
|
|
|
|
**Route**: `/profiles/grandparent/:grandparentId`
|
|
|
|
**Fonctionnalités**: Identiques à ParentDetailScreen
|
|
|
|
## ✅ Modifications effectuées
|
|
|
|
### 1. ParentsScreen.js (Page liste des profils)
|
|
**Modifications** (lignes 390 et 398):
|
|
- Suppression de tous les boutons sauf "Voir profil" pour les parents
|
|
- Suppression de tous les boutons sauf "Voir profil" pour les grands-parents
|
|
|
|
**AVANT**:
|
|
```javascript
|
|
_jsx(ProfileActionBar, {
|
|
onViewProfile: () => navigate(`/profiles/parent/${parent.id}`),
|
|
onView: () => handleViewAdultPlanning(parent.id, "parent"),
|
|
onOpenPlanningCenter: () => openIntegration(parent.id, parent.fullName, "parent"),
|
|
onEdit: () => setEditing({ type: "parent", id: parent.id }),
|
|
onDelete: () => handleDeleteAdult(parent.id, "parent"),
|
|
importing: !!importing[parent.id],
|
|
connectionsCount: getConnections(parent.id).length
|
|
})
|
|
```
|
|
|
|
**APRÈS**:
|
|
```javascript
|
|
_jsx(ProfileActionBar, {
|
|
onViewProfile: () => navigate(`/profiles/parent/${parent.id}`)
|
|
})
|
|
```
|
|
|
|
### 2. App.js (Routes)
|
|
**Ajout** (lignes 13-14, 16):
|
|
```javascript
|
|
import { ParentDetailScreen } from "./screens/ParentDetailScreen";
|
|
import { GrandparentDetailScreen } from "./screens/GrandparentDetailScreen";
|
|
|
|
// Dans les routes:
|
|
_jsx(Route, { path: "/profiles/parent/:parentId", element: _jsx(ParentDetailScreen, {}) }),
|
|
_jsx(Route, { path: "/profiles/grandparent/:grandparentId", element: _jsx(GrandparentDetailScreen, {}) }),
|
|
```
|
|
|
|
## 🎨 Design et Ergonomie
|
|
|
|
### Structure identique à ChildDetailScreen
|
|
- Header avec avatar circulaire, nom, email, et rôle (Parent/Grand-parent)
|
|
- Boutons d'action dans le header (Planning, Importer, Modifier, Supprimer)
|
|
- Grille de cartes pour les sections (Congés, Notes personnelles)
|
|
- Style glassmorphism avec dégradés et effets de transparence
|
|
|
|
### Section Congés (remplace Congés scolaires)
|
|
```
|
|
┌─────────────────────────────────────┐
|
|
│ 🏖️ Congés │
|
|
├─────────────────────────────────────┤
|
|
│ Titre du congé │
|
|
│ [Ex: Vacances d'été ] │
|
|
│ │
|
|
│ Date de début Date de fin │
|
|
│ [2024-07-01] [2024-07-15] │
|
|
│ [Ajouter] │
|
|
│ │
|
|
│ ┌─────────────────────────────────┐ │
|
|
│ │ Vacances d'été │ │
|
|
│ │ Du 1 juillet 2024 au 15 juillet│ │
|
|
│ │ [Supprimer] │ │
|
|
│ └─────────────────────────────────┘ │
|
|
└─────────────────────────────────────┘
|
|
```
|
|
|
|
## 🔧 APIs utilisées
|
|
|
|
### Lecture des profils
|
|
- `listParents()` → Charge la liste des parents
|
|
- `listGrandParents()` → Charge la liste des grands-parents
|
|
|
|
### Modification des profils
|
|
- `updateParent(parentId, payload)` → Met à jour un parent
|
|
- `updateGrandParent(grandparentId, payload)` → Met à jour un grand-parent
|
|
|
|
### Suppression des profils
|
|
- `deleteParent(parentId)` → Supprime un parent
|
|
- `deleteGrandParent(grandparentId)` → Supprime un grand-parent
|
|
|
|
### Import de planning
|
|
- `uploadPlanning(profileId, file)` → Import de fichier PDF/image avec OCR
|
|
|
|
### Gestion des congés
|
|
Les congés sont stockés dans le champ `vacations` du profil:
|
|
```javascript
|
|
{
|
|
vacations: [
|
|
{
|
|
id: "unique-id",
|
|
title: "Vacances d'été",
|
|
startDate: "2024-07-01",
|
|
endDate: "2024-07-15"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## 📝 Composants réutilisés
|
|
|
|
- `ParentProfilePanel` → Panneau d'édition (déjà existant)
|
|
- `PlanningIntegrationDialog` → Dialogue d'import (déjà existant)
|
|
- `ProfileActionBar` → Barre d'actions simplifiée (déjà existant)
|
|
|
|
## 🚀 Navigation
|
|
|
|
### Depuis la page liste (/profiles)
|
|
1. Section **Parents**
|
|
- Affiche tous les parents
|
|
- Bouton "Voir profil" → `/profiles/parent/:parentId`
|
|
|
|
2. Section **Grands-parents**
|
|
- Affiche tous les grands-parents
|
|
- Bouton "Voir profil" → `/profiles/grandparent/:grandparentId`
|
|
|
|
### Depuis les pages détail
|
|
1. Bouton **Planning** → `/profiles/parent/:parentId/planning` ou `/profiles/grandparent/:grandparentId/planning`
|
|
2. Bouton **Importer** → Ouvre dialogue d'import
|
|
3. Bouton **Modifier** → Ouvre panneau d'édition en overlay
|
|
4. Bouton **Supprimer** → Confirmation puis retour à `/profiles`
|
|
5. Bouton **← Retour** → Retour à `/profiles`
|
|
|
|
## ✨ Points clés de l'implémentation
|
|
|
|
### 1. Ergonomie cohérente
|
|
Toutes les pages de profil (enfant, parent, grand-parent) partagent:
|
|
- Même structure de header
|
|
- Mêmes boutons d'action
|
|
- Même style visuel
|
|
- Même comportement (overlay pour édition, dialogue pour import)
|
|
|
|
### 2. Séparation des responsabilités
|
|
- **Page liste** (`ParentsScreen`) → Affiche uniquement "Voir profil"
|
|
- **Pages détail** → Toutes les actions (Planning, Importer, Modifier, Supprimer)
|
|
|
|
### 3. Adaptations spécifiques
|
|
- **Enfants** → Pronote + Congés scolaires
|
|
- **Parents/Grands-parents** → Congés personnalisables avec date picker
|
|
|
|
## 🧪 Test de l'implémentation
|
|
|
|
### Étapes de test:
|
|
1. Lancer l'application
|
|
2. Naviguer vers `/profiles`
|
|
3. Vérifier que seul le bouton "Voir profil" apparaît sur les cartes parents/grands-parents
|
|
4. Cliquer sur "Voir profil" d'un parent
|
|
5. Vérifier la présence des 4 boutons: Planning, Importer, Modifier, Supprimer
|
|
6. Tester le bouton **Importer** → Dialogue d'import s'ouvre
|
|
7. Tester le bouton **Modifier** → Panneau d'édition s'ouvre en overlay
|
|
8. Tester la section **Congés** → Ajouter un congé avec dates
|
|
9. Vérifier que le congé apparaît dans la liste
|
|
10. Supprimer un congé
|
|
11. Tester les **Notes personnelles** → Éditer et sauvegarder
|
|
|
|
## 📋 Fichiers modifiés/créés
|
|
|
|
### Créés
|
|
- ✅ `frontend/src/screens/ParentDetailScreen.js` (624 lignes)
|
|
- ✅ `frontend/src/screens/GrandparentDetailScreen.js` (624 lignes)
|
|
|
|
### Modifiés
|
|
- ✅ `frontend/src/screens/ParentsScreen.js` (lignes 390, 398)
|
|
- ✅ `frontend/src/App.js` (lignes 13-14, 16)
|
|
|
|
### Inchangés (réutilisés)
|
|
- `frontend/src/components/ParentProfilePanel.tsx`
|
|
- `frontend/src/components/PlanningIntegrationDialog.tsx`
|
|
- `frontend/src/components/ProfileActionBar.tsx`
|
|
- `frontend/src/services/api-client.js`
|
|
|
|
---
|
|
|
|
## 🎯 Résultat final
|
|
|
|
Les pages de profil pour Parents et Grands-parents ont été créées avec **exactement la même structure et ergonomie** que la page Enfant, avec les adaptations suivantes:
|
|
|
|
| Fonctionnalité | Enfant | Parent/Grand-parent |
|
|
|----------------|--------|---------------------|
|
|
| Bouton Planning | ✅ | ✅ |
|
|
| Bouton Importer | ✅ | ✅ |
|
|
| Bouton Modifier | ✅ | ✅ |
|
|
| Bouton Supprimer | ✅ | ✅ |
|
|
| Connexion Pronote | ✅ | ❌ |
|
|
| Données Pronote | ✅ | ❌ |
|
|
| Congés scolaires | ✅ | ❌ |
|
|
| Congés personnalisables | ❌ | ✅ |
|
|
| Notes personnelles | ✅ | ✅ |
|
|
|
|
✅ **Toutes les fonctionnalités demandées ont été implémentées avec succès !**
|