ajout message alert + liste rouge

This commit is contained in:
theShlavuk 2026-01-20 21:17:45 +01:00
parent cdbb2f344f
commit fa36f16291
7 changed files with 130 additions and 2 deletions

View File

@ -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
*/

View File

@ -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']);

View File

@ -515,6 +515,12 @@ function displayHistoriqueTimeline(historiqueData) {
</div>
<div class="crvi-timeline__event__content">
${rdv.personne_en_liste_rouge ? `
<div class="alert alert-danger mb-2" style="font-size: 90%; padding: 8px;">
<i class="fas fa-exclamation-triangle me-2"></i>
<strong>Personne en liste rouge</strong>
</div>
` : ''}
<div class="mb-2">
<strong><i class="fas fa-user-md me-2"></i>Intervenant:</strong> ${intervenantNom}
</div>

View File

@ -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';
}
}
}
/**

View File

@ -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);
}
}

View File

@ -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({

View File

@ -15,6 +15,12 @@ $crvi_is_front_context = ($crvi_agenda_context !== 'admin');
<button type="button" class="btn-close" id="closeModalBtn" aria-label="Fermer"></button>
</div>
<div class="modal-body">
<!-- Alerte de statut (absent/présent) -->
<div class="alert alert-warning mb-3" id="statutAlert" style="display: none;">
<i class="fas fa-info-circle me-2"></i>
<span id="statutAlertText"></span>
</div>
<!-- Bloc lecture seule (vue) avec grille Bootstrap en 2 colonnes -->
<div id="eventViewBlock">
<div class="event-grid">
@ -298,6 +304,11 @@ $crvi_is_front_context = ($crvi_agenda_context !== 'admin');
<i class="fas fa-exclamation-triangle text-danger me-1"></i>Ajouter bénéficiaire à la liste rouge
</label>
</div>
<!-- Alerte liste rouge (s'affiche si le bénéficiaire est en liste rouge) -->
<div class="alert alert-danger mt-2 mb-0" id="beneficiaire-liste-rouge-alert" style="font-size: 90%; display: none;">
<i class="fas fa-exclamation-triangle me-2"></i>
Personne en liste rouge
</div>
</div>
</div>
<div class="col-md-6">