Resolve VSN-1941 "Driver's planning integration"
Fonctionnalités implémentées et appels API associés
1. Chargement initial de la liste des trips
Appel API : GET /api/planning/drivers/{driverId}/trips?monthYear=YYYY-MM Fonctionnalité :
- Au chargement de l'écran Planning, récupération des trips du conducteur connecté
- Paramètres par défaut : mois en cours (monthYear=YYYY-MM)
- Filtres optionnels : status[], type[], vehicleId, startDate, endDate
- Mapping des DTOs backend (MobileTripDTO) vers l'interface frontend (Trip)
- Conservation du tripCircuitId pour l'enrichissement ultérieur
- Affichage des trips dans TripCard avec :
Couleur de bordure selon le statut (Prévu: violet, En cours: vert, Terminé: rouge) Nombre de passagers (confirmedPassengers/totalPassengers) avec icône users Informations du véhicule (plaque d'immatriculation) Type de trip (école, transport, maintenance, autre)
Fichiers modifiés : store/planningStore.ts, config/Api/planningService.ts, screens/innerApplication/planning/components/TripCard.tsx, screens/innerApplication/planning/agendaViewScreen.tsx
2. Affichage des trips en liste et agenda
Appel API : Aucun (utilise les données déjà chargées) Fonctionnalité :
- Vue liste : trips affichés sous forme de cartes (TripCard)
- Vue agenda : trips groupés par date avec sélecteur de semaine
- Filtrage côté client : recherche par texte, filtres par statut/type/véhicule
- Tri automatique par date et heure de début
- Pull-to-refresh pour recharger les trips
Fichiers modifiés : screens/innerApplication/planning/planningScreen.tsx, screens/innerApplication/planning/agendaViewScreen.tsx
3. Enrichissement des détails de trip avec Circuit Service
Appel API : GET /api/circuit/trip/{tripCircuitId} Fonctionnalité :
- Lors de l'ouverture des détails d'un trip, si tripCircuitId est disponible, appel au Circuit Service
- Extraction des données enrichies :
Distance réelle (distanceKm → circuitDistance) Noms des passagers depuis tripPoints.passengerDetailsTrip.fullName Points de passage pour la carte (circuitTripPoints avec adresses, coordonnées, heures) Calcul de calculatedStartDate et calculatedEndDate à partir du premier et dernier pickupTime des passagers
- Fusion des données Planning Service + Circuit Service dans selectedTrip
Fichiers modifiés : store/planningStore.ts, config/Api/circuitService.ts, shared/types/planning.ts
4. Affichage des détails de trip enrichis
Appel API : GET /api/planning/drivers/{driverId}/trips/{tripId} (appelé en premier) Fonctionnalité :
- Affichage des sections :
RouteSection : Départ, Arrivée, Distance parcourue (depuis Circuit Service) TimeSection : Heures de début/fin calculées si plusieurs passagers, avec note explicative ContactSection : Liste des passagers (expandable/collapsible) StopsSection : Points de passage avec adresses et heures (depuis circuitTripPoints) VehicleSection : Informations du véhicule assigné
- Bouton "Voir sur la carte" : passe les adresses circuitTripPoints à l'écran de géolocalisation
Fichiers modifiés : screens/innerApplication/planning/tripDetailsScreen.tsx, screens/innerApplication/planning/components/tripDetails/RouteSection.tsx, screens/innerApplication/planning/components/tripDetails/TimeSection.tsx, screens/innerApplication/planning/components/tripDetails/StopsSection.tsx
5. Section Contact expandable/collapsible
Appel API : Aucun (utilise les données déjà chargées) Fonctionnalité :
- Affichage initial de 2 passagers
- Bouton "Voir tous les passagers (X de plus)" si plus de 2
- Expansion pour afficher tous les passagers
- Réduction avec "Voir moins"
- Layout en 2 colonnes avec flexWrap
- Chaque contact est cliquable pour naviguer vers les détails du passager
Fichiers modifiés : screens/innerApplication/planning/components/tripDetails/ContactSection.tsx
6. Navigation vers détails passager
Appel API : Aucun (navigation uniquement) Fonctionnalité :
- Clic sur un nom/numéro de passager → navigation vers l'écran de détails
- Gestion de 3 cas :
Si ID disponible : navigation directe avec ID (/(tabs)/planning/passenger/[id]) Si seulement téléphone : navigation avec recherche par nom (/(tabs)/planning/passenger/search) Si seulement nom : navigation avec recherche par nom
Fichiers modifiés : screens/innerApplication/planning/tripDetailsScreen.tsx, app/(tabs)/planning/passenger/[id].tsx, app/(tabs)/planning/passenger/search.tsx
7. Écran de détails passager avec recherche optimisée
Appels API :
- GET /api/user/passenger/{id} (si ID disponible - 1 seul appel)
- GET /api/user/passenger/search?firstName=...&lastName=... (si recherche par nom - 1 seul appel, résultat utilisé directement) Fonctionnalité :
- Affichage des informations publiques du passager :
Informations personnelles (nom, date/lieu de naissance, classe) Coordonnées (téléphones mobiles/fixes, adresse) Informations de transport (établissement, code circuit, début transport, département) Représentant (nom, email) Observations
- Appel téléphonique : boutons cliquables pour chaque numéro avec confirmation avant appel (Linking.openURL('tel:...'))
- Optimisation : recherche par nom retourne directement un PassengerDTO complet, évitant un second appel getPassengerById
Fichiers modifiés : screens/innerApplication/planning/passengerDetailsScreen.tsx, config/Api/passengerService.ts, config/endpoints/authEndpoints.ts