From 3c8254cb8636c5be9995620af859b3f2b9a22631 Mon Sep 17 00:00:00 2001 From: theShlavuk Date: Tue, 20 Jan 2026 21:28:59 +0100 Subject: [PATCH] changements departements --- app/controllers/Event_Controller.php | 16 ++------------ app/models/Departement_Model.php | 21 ++++++++++++++++--- assets/js/modules/agenda-filters.js | 12 ++++++++--- .../js/modules/agenda-intervenant-calendar.js | 17 +++++++++++++++ templates/admin/agenda-page.php | 12 +++++++++++ templates/front/intervenant-agenda.php | 12 +++++++++++ templates/frontend/intervenant-agenda.php | 12 +++++++++++ 7 files changed, 82 insertions(+), 20 deletions(-) diff --git a/app/controllers/Event_Controller.php b/app/controllers/Event_Controller.php index 3b6bc1c..8c25ff3 100644 --- a/app/controllers/Event_Controller.php +++ b/app/controllers/Event_Controller.php @@ -460,20 +460,8 @@ class CRVI_Event_Controller { } } - // Récupérer tous les départements disponibles depuis les CPT - $departements_posts = get_posts([ - 'post_type' => 'departement', - 'numberposts' => -1, - 'post_status' => 'publish', - ]); - - $departements = []; - foreach ($departements_posts as $post) { - $departements[] = [ - 'id' => $post->ID, - 'nom' => $post->post_title, - ]; - } + // Récupérer tous les départements actifs + $departements = CRVI_Departement_Model::all(true, true); // Récupérer tous les types d'intervention disponibles depuis les CPT $types_intervention_posts = get_posts([ diff --git a/app/models/Departement_Model.php b/app/models/Departement_Model.php index 3dab9ff..21cd5c3 100644 --- a/app/models/Departement_Model.php +++ b/app/models/Departement_Model.php @@ -14,6 +14,7 @@ class CRVI_Departement_Model extends Main_Model public static $acf_schema = [ 'nom' => 'text', 'type_dinterventions' => 'repeater', + 'actif' => 'true_false', ]; /** @@ -37,8 +38,11 @@ class CRVI_Departement_Model extends Main_Model $data['id'] = $post->ID; } elseif ($field === 'nom') { $data['nom'] = $post->post_title; - } elseif (property_exists(self::class, $field)) { - $data[$field] = get_field($field, $post->ID); + } elseif ($field === 'actif') { + // Charger le champ ACF 'actif' + $data['actif'] = function_exists('get_field') ? get_field('actif', $post->ID) : true; + } elseif (isset(self::$acf_schema[$field])) { + $data[$field] = function_exists('get_field') ? get_field($field, $post->ID) : null; } } return new self($data); @@ -50,8 +54,10 @@ class CRVI_Departement_Model extends Main_Model /** * Retourne la liste de tous les départements (CPT) + * @param bool $simple_list Si true, retourne uniquement id et nom + * @param bool $only_active Si true (défaut), ne retourne que les départements actifs */ - public static function all($simple_list = false) + public static function all($simple_list = false, $only_active = true) { $posts = get_posts([ 'post_type' => 'departement', @@ -59,6 +65,15 @@ class CRVI_Departement_Model extends Main_Model 'post_status' => 'publish', ]); + // Filtrer par statut actif si demandé + if ($only_active && function_exists('get_field')) { + $posts = array_filter($posts, function($post) { + $actif = get_field('actif', $post->ID); + // Si le champ n'existe pas encore, considérer le département comme actif par défaut + return ($actif === null || $actif === true || $actif === 1 || $actif === '1'); + }); + } + if ($simple_list) { $posts = array_map(function($post) { return [ diff --git a/assets/js/modules/agenda-filters.js b/assets/js/modules/agenda-filters.js index 7296801..8728c78 100644 --- a/assets/js/modules/agenda-filters.js +++ b/assets/js/modules/agenda-filters.js @@ -149,10 +149,16 @@ function collectFilters() { filters.intervenant = personne; } + // Département + const departement = document.getElementById('departement'); + if (departement && departement.value && departement.value.trim() !== '') { + filters.departement = departement.value; + } + // Type d'intervention - const typeIntervention = document.getElementById('type_intervention').value; - if (typeIntervention && typeIntervention.trim() !== '') { - filters.type_intervention = typeIntervention; + const typeIntervention = document.getElementById('type_intervention'); + if (typeIntervention && typeIntervention.value && typeIntervention.value.trim() !== '') { + filters.type_intervention = typeIntervention.value; } // Bénéficiaire diff --git a/assets/js/modules/agenda-intervenant-calendar.js b/assets/js/modules/agenda-intervenant-calendar.js index ea03caa..77d7779 100644 --- a/assets/js/modules/agenda-intervenant-calendar.js +++ b/assets/js/modules/agenda-intervenant-calendar.js @@ -590,6 +590,9 @@ function collectIntervenantFilters() { const typeRdv = document.getElementById('type_rdv')?.value; if (typeRdv) filters.type_rdv = typeRdv; + const departement = document.getElementById('departement')?.value; + if (departement) filters.departement = parseInt(departement); + const typeIntervention = document.getElementById('type_intervention')?.value; if (typeIntervention) filters.type_intervention = parseInt(typeIntervention); @@ -617,6 +620,9 @@ function collectColleaguesFilters() { const typeRdv = document.getElementById('type_rdv-colleagues')?.value; if (typeRdv) filters.type_rdv = typeRdv; + const departement = document.getElementById('departement-colleagues')?.value; + if (departement) filters.departement = parseInt(departement); + const typeIntervention = document.getElementById('type_intervention-colleagues')?.value; if (typeIntervention) filters.type_intervention = parseInt(typeIntervention); @@ -758,6 +764,17 @@ async function loadFilterOptions(mode = 'intervenant') { }); } + // Départements + const departementSelect = document.getElementById(`departement${prefix}`); + if (departementSelect && disponibilites.departements) { + disponibilites.departements.forEach(dept => { + const option = document.createElement('option'); + option.value = dept.id; + option.textContent = dept.nom; + departementSelect.appendChild(option); + }); + } + // Types d'intervention const typeInterventionSelect = document.getElementById(`type_intervention${prefix}`); if (typeInterventionSelect && disponibilites.types_intervention) { diff --git a/templates/admin/agenda-page.php b/templates/admin/agenda-page.php index 78ea7a0..78a7c28 100644 --- a/templates/admin/agenda-page.php +++ b/templates/admin/agenda-page.php @@ -39,6 +39,18 @@
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+