diff --git a/app/controllers/Plugin.php b/app/controllers/Plugin.php
index 5a22af6..700d137 100644
--- a/app/controllers/Plugin.php
+++ b/app/controllers/Plugin.php
@@ -467,7 +467,8 @@ class CRVI_Plugin {
'permissions' => self::get_user_permissions(),
'couleurs_rdv' => self::get_couleurs_rdv_acf_data(),
'couleurs_permanence' => self::get_couleurs_permanence_acf_data(),
- 'indisponibilites_intervenants' => self::get_intervenants_disponibilites()
+ 'indisponibilites_intervenants' => self::get_intervenants_disponibilites(),
+ 'beneficiaires' => self::get_beneficiaires_acf_data()
];
wp_localize_script($script_handle, 'crviACFData', $acf_data);
@@ -840,6 +841,45 @@ class CRVI_Plugin {
return $intervenants_data;
}
+ /**
+ * Récupère les données des bénéficiaires (notamment leur statut liste rouge)
+ */
+ private static function get_beneficiaires_acf_data() {
+ $transient_key = 'crvi_beneficiaires_liste_rouge';
+ $beneficiaires_data = get_transient($transient_key);
+
+ if (false === $beneficiaires_data) {
+ $beneficiaires_data = [];
+
+ // Vérifier que ACF est actif
+ if (!function_exists('get_field')) {
+ return $beneficiaires_data;
+ }
+
+ // Récupérer tous les bénéficiaires
+ $beneficiaires = get_posts([
+ 'post_type' => 'beneficiaire',
+ 'numberposts' => -1,
+ 'post_status' => 'publish'
+ ]);
+
+ foreach ($beneficiaires as $beneficiaire) {
+ // Récupérer le champ ACF personne_en_liste_rouge
+ $personne_en_liste_rouge = get_field('field_69495826ac495', $beneficiaire->ID);
+
+ $beneficiaires_data[$beneficiaire->ID] = [
+ 'id' => $beneficiaire->ID,
+ 'personne_en_liste_rouge' => (bool) $personne_en_liste_rouge
+ ];
+ }
+
+ // Mettre en cache pour 3 heures
+ set_transient($transient_key, $beneficiaires_data, 3 * HOUR_IN_SECONDS);
+ }
+
+ return $beneficiaires_data;
+ }
+
/**
* crvi+script loader
*/
diff --git a/app/models/Event_Model.php b/app/models/Event_Model.php
index e974f4d..2713116 100644
--- a/app/models/Event_Model.php
+++ b/app/models/Event_Model.php
@@ -1673,8 +1673,20 @@ class CRVI_Event_Model extends Main_Model {
'id' => (int) $event['id'],
'date_rdv' => $event['date_rdv'],
'heure_rdv' => $event['heure_rdv'],
+ 'type' => $event['type'] ?? '',
+ 'statut' => $event['statut'] ?? '',
+ 'commentaire' => $event['commentaire'] ?? '',
];
+ // Charger le bénéficiaire et son statut liste rouge
+ if (!empty($event['id_beneficiaire'])) {
+ $personne_en_liste_rouge = false;
+ if (function_exists('get_field')) {
+ $personne_en_liste_rouge = get_field('field_69495826ac495', $event['id_beneficiaire']);
+ }
+ $enriched_event['personne_en_liste_rouge'] = (bool) $personne_en_liste_rouge;
+ }
+
// Charger l'intervenant
if (!empty($event['id_intervenant'])) {
$intervenant = CRVI_Intervenant_Model::load($event['id_intervenant'], ['id', 'nom', 'prenom']);
diff --git a/assets/js/modules/agenda-modal-buttons.js b/assets/js/modules/agenda-modal-buttons.js
index 1b7baec..0d24d31 100644
--- a/assets/js/modules/agenda-modal-buttons.js
+++ b/assets/js/modules/agenda-modal-buttons.js
@@ -515,6 +515,12 @@ function displayHistoriqueTimeline(historiqueData) {
+ ${rdv.personne_en_liste_rouge ? `
+
+
+ Personne en liste rouge
+
+ ` : ''}
Intervenant: ${intervenantNom}
diff --git a/assets/js/modules/agenda-modal-display.js b/assets/js/modules/agenda-modal-display.js
index 018eb10..fb73fbd 100644
--- a/assets/js/modules/agenda-modal-display.js
+++ b/assets/js/modules/agenda-modal-display.js
@@ -215,6 +215,25 @@ export function fillViewBlock(event) {
if (eventId) {
checkAndDisplayIncidentsButton(eventId);
}
+
+ // Afficher l'alerte de statut si présent ou absent
+ const statut = event?.statut || event?.extendedProps?.statut || '';
+ const statutAlert = document.getElementById('statutAlert');
+ const statutAlertText = document.getElementById('statutAlertText');
+
+ if (statutAlert && statutAlertText) {
+ if (statut === 'absent' || statut === 'absence') {
+ statutAlert.className = 'alert alert-danger mb-3';
+ statutAlertText.textContent = 'La personne a été marquée comme absente à ce rendez-vous.';
+ statutAlert.style.display = 'block';
+ } else if (statut === 'present') {
+ statutAlert.className = 'alert alert-success mb-3';
+ statutAlertText.textContent = 'La personne a été présente à ce rendez-vous.';
+ statutAlert.style.display = 'block';
+ } else {
+ statutAlert.style.display = 'none';
+ }
+ }
}
/**
diff --git a/assets/js/modules/agenda-modal-select.js b/assets/js/modules/agenda-modal-select.js
index 72f75dc..57615e2 100644
--- a/assets/js/modules/agenda-modal-select.js
+++ b/assets/js/modules/agenda-modal-select.js
@@ -535,3 +535,42 @@ export function clearDisponibilitesCache() {
disponibilitesCache.clear();
lastPopulateCall = null;
}
+
+/**
+ * Initialise le listener pour afficher l'alerte "Personne en liste rouge"
+ */
+export function initializeBeneficiaireListeRougeAlert() {
+ const beneficiaireSelect = document.getElementById('id_beneficiaire');
+ const alertElement = document.getElementById('beneficiaire-liste-rouge-alert');
+
+ if (!beneficiaireSelect || !alertElement) {
+ return;
+ }
+
+ // Fonction pour vérifier et afficher l'alerte
+ const checkListeRouge = () => {
+ const selectedBeneficiaireId = beneficiaireSelect.value;
+
+ // Vérifier si le bénéficiaire est en liste rouge via crviACFData
+ if (selectedBeneficiaireId && window.crviACFData && window.crviACFData.beneficiaires) {
+ const beneficiaireData = window.crviACFData.beneficiaires[selectedBeneficiaireId];
+
+ if (beneficiaireData && beneficiaireData.personne_en_liste_rouge) {
+ alertElement.style.display = 'block';
+ } else {
+ alertElement.style.display = 'none';
+ }
+ } else {
+ alertElement.style.display = 'none';
+ }
+ };
+
+ // Écouter les changements du select
+ beneficiaireSelect.addEventListener('change', checkListeRouge);
+
+ // Écouter aussi les événements Select2 si présent
+ if (window.jQuery) {
+ jQuery(beneficiaireSelect).on('select2:select', checkListeRouge);
+ jQuery(beneficiaireSelect).on('select2:clear', checkListeRouge);
+ }
+}
diff --git a/assets/js/modules/agenda-modal.js b/assets/js/modules/agenda-modal.js
index 195f39d..842381a 100644
--- a/assets/js/modules/agenda-modal.js
+++ b/assets/js/modules/agenda-modal.js
@@ -8,7 +8,7 @@ import { initializeEntityCreators } from './agenda-entity-creator.js';
// Modules refactorisés
import { clearDomCache, clearFormFields } from './agenda-modal-dom.js';
import { initializeModalButtons } from './agenda-modal-buttons.js';
-import { initializeSelect2, populateSelects, filterTraducteursByLangue, getIsUpdatingSelects, clearDisponibilitesCache } from './agenda-modal-select.js';
+import { initializeSelect2, populateSelects, filterTraducteursByLangue, getIsUpdatingSelects, clearDisponibilitesCache, initializeBeneficiaireListeRougeAlert } from './agenda-modal-select.js';
import { fillFormWithDate, fillFormWithEvent, resetForm, showFormErrors, clearFormErrors, handleEventFormSubmit } from './agenda-modal-forms.js';
import { fillViewBlock, updateModalDisplay, checkIfEventIsPast } from './agenda-modal-display.js';
@@ -282,6 +282,7 @@ export function openModal(mode, eventData = null) {
initializeSelect2();
initializeTimeComfort();
initializeLangueFilter();
+ initializeBeneficiaireListeRougeAlert();
// Initialiser les boutons (une seule fois)
initializeModalButtons({
diff --git a/templates/modules/modals/event-modal.php b/templates/modules/modals/event-modal.php
index eaa0c31..4ffa6e1 100644
--- a/templates/modules/modals/event-modal.php
+++ b/templates/modules/modals/event-modal.php
@@ -15,6 +15,12 @@ $crvi_is_front_context = ($crvi_agenda_context !== 'admin');
+
+
+
+
+
+
@@ -298,6 +304,11 @@ $crvi_is_front_context = ($crvi_agenda_context !== 'admin');
Ajouter bénéficiaire à la liste rouge
+
+
+
+ Personne en liste rouge
+