Files
Laurent Chedanne daaa2f3e00 Specs and todo
2026-05-20 11:33:27 +02:00

4.4 KiB

Tâches d'amélioration — csv-to-timemanager.py

Validation des champs obligatoires

TODO : Améliorer la validation des champs CSV

Actuellement : le script n'effectue pas de validation stricte sur les champs obligatoires. Cela peut conduire à :

  • Créer des tâches avec un nom vide (si Titre manque).
  • Créer des entrées de temps avec start ou end incomplets (si dates/heures manquent).

À faire :

  1. Ajouter une validation au début de la boucle de traitement des lignes CSV pour vérifier que les champs suivants sont non-vides et valides :

    • Titre : non vide après nettoyage.
    • Date debut : non vide et correspond à un format date valide.
    • Heure debut : non vide et correspond à un format heure valide (ex: HH:MM ou HH:MM:SS).
    • Date fin : non vide et correspond à un format date valide.
    • Heure fin : non vide et correspond à un format heure valide.
  2. Condition d'import : une ligne est importée seulement si :

    • Description OU Categories sont renseignés (au moins un),
    • ET tous les champs listés ci-dessus sont valides.
  3. Pour les lignes invalides : enregistrer une ligne de log / warning avec la raison (ex: "Titre manquant", "Date debut invalide"), pour faciliter le débogage.

TEST : Vérifier qu'aucune tâche n'est créée avec champs manquants

Objectif : S'assurer que le code corrigé ne crée pas de tâches/entrées de temps incomplètes.

À faire :

  1. Créer un petit fichier CSV de test contenant des lignes avec champs manquants (ex: Titre vide, Date debut manquant, etc.).
  2. Exécuter le script avec ce fichier de test.
  3. Vérifier dans la base de données ou via l'interface TimeManager que aucune tâche ou entrée de temps incomplète n'a été créée.
  4. Documenter les résultats du test dans un fichier tests/csv_validation_test.md.

Alternative : Utiliser la validation existante dans TimeManager

Si l'API TimeManager rejette les entrées incomplètes, le script bénéficiera indirectement de cette validation. À vérifier auprès du serveur TimeManager (réponse HTTP 406 / erreur de validation de la requête).

Gestion des modifications utilisateur et réimport

TODO : Analyser le comportement en cas de modification manuelle + réimport

Problème : Que se passe-t-il si un utilisateur modifie une tâche ou une entrée de temps directement dans TimeManager, puis que le script réimporte le même CSV ?

Cas d'usage :

  1. Un CSV est importé, créant une tâche Nom original avec une entrée de temps.
  2. L'utilisateur renomme la tâche à Nom modifié dans TimeManager.
  3. Le CSV est réimporté avec la même ligne.

Comportement actuel :

  • Le script utilise la colonne Titre du CSV (ex: Nom original) pour chercher la tâche existante.
  • Si la tâche a été renommée (ex: Nom modifié), le script ne la trouvera pas (car sanitize("Nom original") != sanitize("Nom modifié")).
  • Le script créera une nouvelle tâche Nom original, créant ainsi un doublon.
  • L'ancienne tâche (Nom modifié) restera en place dans TimeManager.

Risques :

  • Création involontaire de doublons.
  • Incohérence entre le CSV et TimeManager.
  • Perte de données si les modifications de l'utilisateur n'ont pas été sauvegardées ailleurs.

À considérer :

  1. Faut-il implémenter une stratégie de fusionnement / synchronisation bidirectionnelle (ex: tracking des UUIDs) ?
  2. Faut-il documenter que le script n'est pas conçu pour gérer les modifications manuelles post-import ?
  3. Faut-il ajouter une option --allow-duplicates ou --force-sync au script pour expliciter ce comportement ?
  4. Analyser comment l'app TimeManager gère les commits et les conflits (voir lib/Db/StorageHelper.php).

Priorité : À discuter avec l'équipe pour clarifier le flux de travail prévu.

Références

  • Détail de la validation : voir docs/specs.md section "Gestion des données manquantes".
  • Code de validation des lignes : voir csv-to-timemanager.py ligne ~437.
  • Détection d'existence de tâches : voir csv-to-timemanager.py fonctions task_exist_by_name, project_exist_by_name, client_exist_by_name.
  • Stratégie de sync TimeManager : voir lib/Db/StorageHelper.php (analyse du système de commits et résolution de conflits).