Files
ferrovia-panel/docs/TRAVAUX_README.md
T
2026-08-25 01:23:13 +02:00

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 travaux
  • src/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 Supabase
    • getAllTravaux() : Récupère tous les travaux avec leurs substitutions
    • getTravauxById(id) : Récupère un travail spécifique
    • createTravaux(payload, substitutions) : Crée de nouveaux travaux
    • updateTravaux(id, payload, substitutions) : Met à jour des travaux
    • deleteTravaux(id) : Supprime des travaux (soft delete)
    • getHorairesSubstitution(searchQuery) : Récupère les horaires disponibles pour substitution
    • getTravauxActifs(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

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
  • 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_debut
  • heure_fin > heure_debut
  • titre est 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 :

  1. Ouvrir SQL Editor
  2. Copier le contenu de create_travaux_tables.sql
  3. Exécuter

Améliorations futures possibles

  1. Page de modification : Créer ModifierTravaux.js similaire à CreerTravaux.js
  2. Filtres avancés : Ajouter des filtres par date, statut, etc.
  3. Export : Permettre l'export des travaux en CSV/PDF
  4. Notifications : Système de notifications pour les travaux à venir
  5. Récurrence : Support des travaux récurrents
  6. Historique : Journal des modifications
  7. Permissions : Gestion des droits par utilisateur
  8. API publique : Endpoint pour les applications externes

Notes techniques

  • Les substitutions sont ordonnées (ordre dans travaux_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