Skip to content

Refonte de l'éditeur ATO (Air Tasking Order) #422

@mitch10593

Description

@mitch10593

Contexte

L'ATO actuel est fonctionnel mais l'UX est très limitée : formulaire Symfony classique avec soumission serveur à chaque ajout de flight/slot, pas de drag-and-drop, champ mission en texte libre, pas de base départ/retour.

Objectif

Enrichir les données du modèle Flight et remplacer l'interface par un éditeur JS interactif avec drag-and-drop des joueurs.

Approche retenue

  • Enrichir les entités existantes (Flight/Slot) — pas de JSON
  • Interface drag-and-drop avec SortableJS depuis CDN
  • Types de mission prédéfinis (constantes int, pattern identique à Choice::TASKS)
  • Sauvegarde AJAX sans rechargement de page

Changements prévus

Backend

  1. Entité Flight : ajouter constantes MISSION_* (CAP, CAS, SEAD, Escort, Transport, Recon, CSAR, Tanker, AWACS, FAC), changer mission de string à integer, ajouter departureBase et returnBase (string, nullable)
  2. Migration BDD : ALTER TABLE flight pour les nouvelles colonnes + conversion des valeurs texte existantes vers integer
  3. Formulaire CalendarFlightType : mission passe de TextType à ChoiceType, ajout des champs departureBase/returnBase
  4. Nouveau contrôleur API (Api/AtoController) :
    • GET /calendar/api/ato/{event}/data — charge l'ATO + joueurs disponibles (votants oui/peut-être) + liste appareils + types de missions
    • POST /calendar/api/ato/{event}/save — sauvegarde complète de l'ATO en JSON avec protection CSRF
  5. Simplification de CalendarController::editAto() — plus de formulaire Symfony, uniquement rendu du template

Frontend

  1. Nouveau fichier JS (public/js/ato-editor.js) : éditeur state-driven en vanilla JS
    • Pool de joueurs draggables (votants oui/peut-être)
    • Drag-and-drop via SortableJS (clone depuis pool vers slots)
    • Ajout/suppression dynamique de flights
    • Support des joueurs invités (non inscrits)
    • Sauvegarde AJAX
  2. Refonte template edit-ato.html.twig : remplacement du formulaire Symfony par l'éditeur JS
  3. Amélioration affichage lecture (view.html.twig) : cartes Bootstrap avec badges mission/appareil, bases départ/retour, indicateurs visuels slots remplis/vides
  4. Ajout SortableJS dans base.html.twig (conditionnel libSortable)
  5. Styles CSS dans custom.css sous namespace .ato-editor

Tests

  1. Tests unitaires FlightTest.php (constantes, getMissionAsString)
  2. Tests fonctionnels AtoControllerTest.php (routes API)

Fichiers à créer (5)

  • migrations/VersionXXXX.php
  • src/Controller/Api/AtoController.php
  • public/js/ato-editor.js
  • tests/Unit/Entity/Calendar/FlightTest.php
  • tests/Functional/Controller/Api/AtoControllerTest.php

Fichiers à modifier (7)

  • src/Entity/Calendar/Flight.php
  • src/Form/CalendarFlightType.php
  • src/Controller/CalendarController.php
  • templates/calendar/edit-ato.html.twig
  • templates/calendar/view.html.twig
  • templates/website/base.html.twig
  • public/css/custom.css

Vérification

  • Lancer la migration
  • Vérifier la conversion des missions existantes
  • Tester le drag-and-drop sur /calendar/edit/{event}/ato
  • Ajouter/supprimer des flights, assigner des joueurs, sauvegarder
  • Vérifier l'affichage amélioré sur la page de vue
  • Lancer les tests

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions