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(),
|
'permissions' => self::get_user_permissions(),
|
||||||
'couleurs_rdv' => self::get_couleurs_rdv_acf_data(),
|
'couleurs_rdv' => self::get_couleurs_rdv_acf_data(),
|
||||||
'couleurs_permanence' => self::get_couleurs_permanence_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);
|
wp_localize_script($script_handle, 'crviACFData', $acf_data);
|
||||||
@ -840,6 +841,45 @@ class CRVI_Plugin {
|
|||||||
return $intervenants_data;
|
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
|
* crvi+script loader
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -1673,8 +1673,20 @@ class CRVI_Event_Model extends Main_Model {
|
|||||||
'id' => (int) $event['id'],
|
'id' => (int) $event['id'],
|
||||||
'date_rdv' => $event['date_rdv'],
|
'date_rdv' => $event['date_rdv'],
|
||||||
'heure_rdv' => $event['heure_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
|
// Charger l'intervenant
|
||||||
if (!empty($event['id_intervenant'])) {
|
if (!empty($event['id_intervenant'])) {
|
||||||
$intervenant = CRVI_Intervenant_Model::load($event['id_intervenant'], ['id', 'nom', 'prenom']);
|
$intervenant = CRVI_Intervenant_Model::load($event['id_intervenant'], ['id', 'nom', 'prenom']);
|
||||||
|
|||||||
@ -515,6 +515,12 @@ function displayHistoriqueTimeline(historiqueData) {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="crvi-timeline__event__content">
|
<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">
|
<div class="mb-2">
|
||||||
<strong><i class="fas fa-user-md me-2"></i>Intervenant:</strong> ${intervenantNom}
|
<strong><i class="fas fa-user-md me-2"></i>Intervenant:</strong> ${intervenantNom}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -215,6 +215,25 @@ export function fillViewBlock(event) {
|
|||||||
if (eventId) {
|
if (eventId) {
|
||||||
checkAndDisplayIncidentsButton(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();
|
disponibilitesCache.clear();
|
||||||
lastPopulateCall = null;
|
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
|
// Modules refactorisés
|
||||||
import { clearDomCache, clearFormFields } from './agenda-modal-dom.js';
|
import { clearDomCache, clearFormFields } from './agenda-modal-dom.js';
|
||||||
import { initializeModalButtons } from './agenda-modal-buttons.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 { fillFormWithDate, fillFormWithEvent, resetForm, showFormErrors, clearFormErrors, handleEventFormSubmit } from './agenda-modal-forms.js';
|
||||||
import { fillViewBlock, updateModalDisplay, checkIfEventIsPast } from './agenda-modal-display.js';
|
import { fillViewBlock, updateModalDisplay, checkIfEventIsPast } from './agenda-modal-display.js';
|
||||||
|
|
||||||
@ -282,6 +282,7 @@ export function openModal(mode, eventData = null) {
|
|||||||
initializeSelect2();
|
initializeSelect2();
|
||||||
initializeTimeComfort();
|
initializeTimeComfort();
|
||||||
initializeLangueFilter();
|
initializeLangueFilter();
|
||||||
|
initializeBeneficiaireListeRougeAlert();
|
||||||
|
|
||||||
// Initialiser les boutons (une seule fois)
|
// Initialiser les boutons (une seule fois)
|
||||||
initializeModalButtons({
|
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>
|
<button type="button" class="btn-close" id="closeModalBtn" aria-label="Fermer"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<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 -->
|
<!-- Bloc lecture seule (vue) avec grille Bootstrap en 2 colonnes -->
|
||||||
<div id="eventViewBlock">
|
<div id="eventViewBlock">
|
||||||
<div class="event-grid">
|
<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
|
<i class="fas fa-exclamation-triangle text-danger me-1"></i>Ajouter bénéficiaire à la liste rouge
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</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>
|
</div>
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user