ajout message alert + liste rouge
This commit is contained in:
parent
cdbb2f344f
commit
fa36f16291
@ -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
|
||||
*/
|
||||
|
||||
@ -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']);
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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({
|
||||
|
||||
@ -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">
|
||||
|
||||
Loading…
Reference in New Issue
Block a user