Aller au contenu

Import des centrales (CSV/XLSX)

Les administrateurs peuvent importer en masse des centrales photovoltaïques à partir de fichiers CSV ou XLSX. L’import utilise un processus AJAX en 3 phases avec traitement par lots pour gérer de grands jeux de données sans problème de délai d’expiration.

Admin Browser WordPress AJAX Database
│ │ │
├── Upload file ──────────────> │ │
│ AJAX: irisolaris_import_init │ │
│ ├── Validate file type │ │
│ ├── Move to temp dir │ │
│ ├── Count rows │ │
│ └── Store transient (1h) │ │
│<── {import_id, total_rows} ── │ │
│ │ │
├── Loop: AJAX import_process ──> │ │
│ ├── Read batch (200 rows) │ │
│ ├── For each row: │ │
│ │ ├── Validate required │ │
│ │ ├── Check upsert (Work ID) │ ── SELECT by work_id ─> │
│ │ ├── wp_insert/update_post │ ── INSERT/UPDATE ──────> │
│ │ ├── update_post_meta (17) │ ── INSERT/UPDATE ──────> │
│ │ └── wp_set_object_terms │ ── INSERT ─────────────> │
│ └── Update progress transient │ │
│<── {progress %, counts} ───── │ │
│ (repeats until complete) │ │
│ │ │
├── AJAX: import_finalize ──────> │ │
│ ├── Log to import_logs table │ ── INSERT ─────────────> │
│ ├── Delete temp file │ │
│ └── Delete transient │ │
│<── {final counts, errors} ─── │ │
  1. Valide le type du fichier téléversé (CSV, XLSX, XLS)
  2. Déplace le fichier dans un répertoire temporaire
  3. Ouvre le fichier avec PhpSpreadsheet et compte les lignes
  4. Stocke l’état de l’import dans un transient (TTL de 1 heure)
  5. Retourne l’import_id et le total_rows au client

Phase 2 : Traitement par lots (irisolaris_import_process)

Section intitulée « Phase 2 : Traitement par lots (irisolaris_import_process) »

Traite 200 lignes par requête :

  1. Lit le lot suivant depuis le tableur
  2. Pour chaque ligne :
    • Valide les champs obligatoires
    • Vérifie l’existence d’une centrale par work_id (logique d’upsert)
    • Crée ou met à jour l’article WordPress (wp_insert_post / wp_update_post)
    • Met à jour les 17 champs post meta
    • Affecte les termes de taxonomie (statut, région)
  3. Met à jour le transient de progression
  4. Retourne le pourcentage de progression et les compteurs en cours

Optimisations de performance durant l’import :

  • wp_suspend_cache_invalidation() — désactive l’invalidation du cache pendant le lot
  • wp_defer_term_counting() — diffère le comptage des termes de taxonomie
  • update_meta_cache() — pré-charge le cache meta en masse
  • update_object_term_cache() — pré-charge le cache des termes en masse

Phase 3 : Finalisation (irisolaris_import_finalize)

Section intitulée « Phase 3 : Finalisation (irisolaris_import_finalize) »
  1. Journalise les résultats de l’import dans la table irisolaris_import_logs
  2. Supprime le fichier temporaire
  3. Supprime le transient d’état de l’import
  4. Retourne les compteurs finaux de succès/erreurs et le détail des erreurs

Pour permettre la réimportation sûre de jeux de données mis à jour, l’import utilise le champ work_id comme clé unique :

  • Si une centrale avec le même _irisolaris_plant_work_id existe → mise à jour de l’article existant et de ses métadonnées
  • Si aucune correspondance → insertion d’un nouvel article

Cela permet des imports répétés du même jeu de données pour mettre à jour les enregistrements existants plutôt que de créer des doublons.

Chaque ligne du tableur est mappée aux 17 champs meta de centrale listés ci-dessous.

Clé metaDescription
_irisolaris_plant_nameNom de la centrale
_irisolaris_plant_latLatitude
_irisolaris_plant_lngLongitude
_irisolaris_plant_addressAdresse postale
_irisolaris_plant_cityVille
_irisolaris_plant_postcodeCode postal
_irisolaris_plant_regionRégion
_irisolaris_plant_powerPuissance de sortie (kW)
_irisolaris_plant_statusStatut de la centrale
_irisolaris_plant_activeIndicateur de visibilité (1/0)
_irisolaris_plant_work_idIdentifiant de travail unique (clé d’import)
_irisolaris_plant_project_nameNom du projet
_irisolaris_plant_spvSPV (Special Purpose Vehicle)
_irisolaris_plant_departmentDépartement
_irisolaris_plant_perimeterPérimètre (km)
_irisolaris_plant_tariffTarif
_irisolaris_plant_prmPRM (référence compteur)

La lecture de tous les tableurs est assurée par PhpSpreadsheet (v1.29.11), qui supporte les formats suivants :

FormatExtensionSupport
CSV.csvComplet
Excel (XLSX).xlsxComplet
Excel (XLS).xlsComplet
  • Les erreurs par ligne sont collectées et stockées (non bloquantes)
  • Le détail des erreurs est sérialisé et journalisé dans la table irisolaris_import_logs
  • L’interface d’import affiche une barre de progression avec les compteurs de succès/erreurs
  • Le rapport final inclut le total d’éléments, les succès, les erreurs et le détail des erreurs

Accès via : Centrales PV → Importer dans le menu d’administration WordPress.

Nécessite la capacité manage_options (administrateurs uniquement).

Actions supplémentaires d’administration :

  • Effacer l’historique d’import — vide la table irisolaris_import_logs
  • Vider le cache — supprime manuellement le cache transient GeoJSON