6.5 KiB
6.5 KiB
Fonctionnalité de Gestion des Travaux
Vue d'ensemble
La gestion des travaux permet de créer, modifier et supprimer des travaux planifiés sur les lignes, avec la possibilité de définir des horaires de substitution pour informer les voyageurs des alternatives disponibles.
Structure des fichiers
Pages
src/pages/travaux/Travaux.js: Page principale listant tous les travauxsrc/pages/travaux/CreerTravaux.js: Page de création de travaux (multi-étapes)src/pages/travaux/Travaux.css: Styles pour les pages travaux
API
src/api/travaux.js: Fonctions pour interagir avec SupabasegetAllTravaux(): Récupère tous les travaux avec leurs substitutionsgetTravauxById(id): Récupère un travail spécifiquecreateTravaux(payload, substitutions): Crée de nouveaux travauxupdateTravaux(id, payload, substitutions): Met à jour des travauxdeleteTravaux(id): Supprime des travaux (soft delete)getHorairesSubstitution(searchQuery): Récupère les horaires disponibles pour substitutiongetTravauxActifs(dateDebut, dateFin): Récupère les travaux actifs pour une période
Base de données
migrations/create_travaux_tables.sql: Script de création des tables- Table
travaux: Informations principales des travaux - Table
travaux_substitutions: Liaison avec les horaires de substitution
- Table
Structure de la base de données
Table travaux
| Colonne | Type | Description |
|---|---|---|
| id | UUID | Identifiant unique |
| titre | TEXT | Titre des travaux (requis) |
| description | TEXT | Description détaillée |
| date_debut | DATE | Date de début (requis) |
| date_fin | DATE | Date de fin (requis) |
| jours_travaux | TEXT[] | Jours de la semaine concernés |
| heure_debut | TIME | Heure de début (requis) |
| heure_fin | TIME | Heure de fin (requis) |
| actif | BOOLEAN | Statut actif/inactif |
| created_at | TIMESTAMP | Date de création |
| updated_at | TIMESTAMP | Date de dernière modification |
Table travaux_substitutions
| Colonne | Type | Description |
|---|---|---|
| id | UUID | Identifiant unique |
| travaux_id | UUID | Référence vers les travaux |
| horaire_id | UUID | Référence vers l'horaire de substitution |
| ordre | INTEGER | Ordre d'affichage |
| created_at | TIMESTAMP | Date de création |
Processus de création (multi-étapes)
Étape 1 : Informations générales
- Titre : Nom descriptif des travaux (requis)
- Description : Description détaillée (optionnel)
- Dates : Date de début et fin (requises)
- Jours de travaux : Sélection des jours de la semaine concernés (requis)
- Horaires : Heure de début et fin des travaux (requis)
- Statut : Actif/Inactif (par défaut actif)
Étape 2 : Substitutions
- Activation : Case à cocher pour activer les substitutions
- Recherche : Barre de recherche pour trouver des horaires de substitution
- Filtre automatique sur les horaires ayant
substitution_disponible = true - Recherche par numéro de train, gare de départ/arrivée, ligne
- Filtre automatique sur les horaires ayant
- Sélection : Ajout/retrait d'horaires dans la liste des substitutions
- Affichage : Liste des horaires sélectionnés avec possibilité de les retirer
Étape 3 : Résumé
- Affichage de toutes les informations saisies
- Validation avant création
- Création en base de données
Fonctionnalités
Page principale
- Liste des travaux : Affichage en grille avec cartes
- Recherche : Filtrage par titre ou description
- Détails : Chaque carte affiche :
- Titre et description
- Période (dates)
- Jours concernés
- Horaires
- Nombre de substitutions
- Statut (Actif/Inactif)
- Actions :
- Créer de nouveaux travaux
- Modifier des travaux existants
- Supprimer des travaux
Validation
Contraintes base de données
date_fin >= date_debutheure_fin > heure_debuttitreest requis
Contraintes applicatives
- Au moins un jour de travaux doit être sélectionné
- Tous les champs requis doivent être remplis
- Les dates doivent être cohérentes
Intégration
Navigation
- Entrée "Travaux" ajoutée dans le NavPanel avec l'icône "construction"
- Accessible via
/travaux - Page de création accessible via
/travaux/creer
Routes
Ajoutées dans PanelRouter.js :
/travaux: Liste des travaux/travaux/creer: Création de travaux
Style
- Cohérent avec le reste de l'application
- Utilisation des composants WCS (Web Components Système)
- Animations et transitions fluides
- Responsive design
Exemples d'utilisation
Créer des travaux
import { createTravaux } from '../../api/travaux';
const payload = {
titre: 'Travaux ligne Paris-Lyon',
description: 'Rénovation des voies',
date_debut: '2026-03-01',
date_fin: '2026-03-31',
jours_travaux: ['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi'],
heure_debut: '09:00',
heure_fin: '17:00',
actif: true
};
const substitutions = ['uuid-horaire-1', 'uuid-horaire-2'];
const { data, error } = await createTravaux(payload, substitutions);
Récupérer les travaux actifs
import { getTravauxActifs } from '../../api/travaux';
const { data, error } = await getTravauxActifs('2026-03-01', '2026-03-31');
Rechercher des horaires de substitution
import { getHorairesSubstitution } from '../../api/travaux';
const { data, error } = await getHorairesSubstitution('TGV');
Migration
Pour créer les tables en base de données :
-- Exécuter le fichier migrations/create_travaux_tables.sql
psql -U postgres -d nom_base -f migrations/create_travaux_tables.sql
Ou via Supabase Dashboard :
- Ouvrir SQL Editor
- Copier le contenu de
create_travaux_tables.sql - Exécuter
Améliorations futures possibles
- Page de modification : Créer
ModifierTravaux.jssimilaire àCreerTravaux.js - Filtres avancés : Ajouter des filtres par date, statut, etc.
- Export : Permettre l'export des travaux en CSV/PDF
- Notifications : Système de notifications pour les travaux à venir
- Récurrence : Support des travaux récurrents
- Historique : Journal des modifications
- Permissions : Gestion des droits par utilisateur
- API publique : Endpoint pour les applications externes
Notes techniques
- Les substitutions sont ordonnées (
ordredanstravaux_substitutions) - Trigger automatique pour
updated_at - Index sur les dates et le statut actif pour optimiser les requêtes
- Contraintes d'intégrité référentielle avec CASCADE sur les substitutions