corrections bouton

This commit is contained in:
Jean-Philippe Staelen 2026-01-20 13:50:14 +01:00
parent 2236e7f773
commit f6ae2c7a59
4 changed files with 55 additions and 19 deletions

View File

@ -264,7 +264,7 @@ export function initializeEditButton(getCurrentEventData, getCurrentMode, setCur
// Mettre à jour l'affichage
const userCanEdit = window.crviPermissions && window.crviPermissions.can_edit;
const userCanDelete = window.crviPermissions && window.crviPermissions.can_delete;
updateModalDisplay('edit', userCanEdit, userCanDelete);
updateModalDisplay('edit', userCanEdit, userCanDelete, currentEventData);
// Remplir le formulaire avec les données actuelles
fillFormWithEvent(currentEventData);
@ -311,7 +311,7 @@ export function initializeCancelButton(getCurrentEventData, getCurrentMode, setC
const userCanEdit = window.crviPermissions && window.crviPermissions.can_edit;
const userCanDelete = window.crviPermissions && window.crviPermissions.can_delete;
updateModalDisplay('view', userCanEdit, userCanDelete);
updateModalDisplay('view', userCanEdit, userCanDelete, currentEventData);
// Réafficher les données en mode lecture
fillViewBlock(currentEventData);

View File

@ -222,44 +222,80 @@ export function fillViewBlock(event) {
* @param {string} mode - Mode actuel ('view', 'edit', 'create')
* @param {boolean} canEdit - Permission d'édition
* @param {boolean} canDelete - Permission de suppression
* @param {Object} eventData - Données de l'événement (optionnel)
*/
export function updateModalDisplay(mode, canEdit, canDelete) {
export function updateModalDisplay(mode, canEdit, canDelete, eventData = null) {
const viewBlock = document.getElementById('eventViewBlock');
const formBlock = document.getElementById('eventForm');
const statusButtons = document.getElementById('eventStatusButtons');
const viewFooter = document.getElementById('eventViewFooter');
const editFooter = document.getElementById('eventEditFooter');
const editBtn = document.getElementById('editEventBtn');
const deleteBtn = document.getElementById('deleteEvent');
const saveBtn = document.getElementById('saveEvent');
const cancelBtn = document.getElementById('cancelEditBtn');
const closeViewBtn = document.getElementById('closeViewBtn');
const markPresentBtn = document.getElementById('markPresentBtn');
const markAbsentBtn = document.getElementById('markAbsentBtn');
const cancelAppointmentBtn = document.getElementById('cancelAppointmentBtn');
const reportIncidentBtn = document.getElementById('reportIncidentBtn');
// Vérifier le statut et si l'événement est clôturé
const statut = eventData?.statut || eventData?.extendedProps?.statut || '';
const clotureFlag = eventData?.cloture_flag || eventData?.extendedProps?.cloture_flag;
const isEventCloture = clotureFlag === 1 || clotureFlag === '1' || clotureFlag === true;
const eventType = eventData?.type || eventData?.extendedProps?.type || '';
const isGroupe = eventType === 'groupe';
// Vérifier si les boutons de statut doivent être cachés
const shouldHideStatusButtons = statut === 'present' || statut === 'absence' || isEventCloture;
if (mode === 'view') {
if (viewBlock) viewBlock.style.display = 'block';
if (formBlock) formBlock.style.display = 'none';
if (viewFooter) viewFooter.style.display = 'block';
if (editFooter) editFooter.style.display = 'none';
if (editBtn) editBtn.style.display = canEdit ? 'inline-block' : 'none';
if (deleteBtn) deleteBtn.style.display = canDelete ? 'inline-block' : 'none';
if (deleteBtn) deleteBtn.style.display = 'none';
if (saveBtn) saveBtn.style.display = 'none';
if (cancelBtn) cancelBtn.style.display = 'none';
if (closeViewBtn) closeViewBtn.style.display = 'inline-block';
if (markPresentBtn) markPresentBtn.style.display = canEdit ? 'inline-block' : 'none';
if (markAbsentBtn) markAbsentBtn.style.display = canEdit ? 'inline-block' : 'none';
if (cancelAppointmentBtn) cancelAppointmentBtn.style.display = canEdit ? 'inline-block' : 'none';
if (reportIncidentBtn) reportIncidentBtn.style.display = 'inline-block';
// Cacher tous les boutons de statut en mode vue
if (statusButtons) statusButtons.style.display = 'none';
} else if (mode === 'edit' || mode === 'create') {
if (viewBlock) viewBlock.style.display = 'none';
if (formBlock) formBlock.style.display = 'block';
if (viewFooter) viewFooter.style.display = 'none';
if (editFooter) editFooter.style.display = 'block';
if (editBtn) editBtn.style.display = 'none';
if (deleteBtn) deleteBtn.style.display = 'none';
if (deleteBtn) deleteBtn.style.display = (mode === 'edit' && canDelete) ? 'inline-block' : 'none';
if (saveBtn) saveBtn.style.display = 'inline-block';
if (cancelBtn) cancelBtn.style.display = 'inline-block';
if (closeViewBtn) closeViewBtn.style.display = 'none';
if (markPresentBtn) markPresentBtn.style.display = 'none';
if (markAbsentBtn) markAbsentBtn.style.display = 'none';
if (cancelAppointmentBtn) cancelAppointmentBtn.style.display = 'none';
if (reportIncidentBtn) reportIncidentBtn.style.display = 'none';
// Afficher ou cacher les boutons de statut selon le statut de l'événement
if (statusButtons) {
if (mode === 'edit' && canEdit && !shouldHideStatusButtons) {
statusButtons.style.display = 'block';
// Gérer l'affichage des boutons individuels selon le type d'événement
const allButtons = statusButtons.querySelectorAll('button');
allButtons.forEach(btn => {
// Masquer "Absent" pour les événements de groupe
if (btn.id === 'markAbsentBtn') {
btn.style.display = isGroupe ? 'none' : 'inline-block';
}
// Le bouton "Détail incident(s)" garde son état (géré par checkAndDisplayIncidentsButton)
else if (btn.id === 'viewIncidentsBtn') {
// Ne rien faire, l'état est géré ailleurs
}
// Afficher tous les autres boutons
else {
btn.style.display = 'inline-block';
}
});
} else {
statusButtons.style.display = 'none';
}
}
}
}

View File

@ -301,7 +301,7 @@ export function openModal(mode, eventData = null) {
}
// Mettre à jour l'affichage
updateModalDisplay(currentMode, userCanEdit, userCanDelete);
updateModalDisplay(currentMode, userCanEdit, userCanDelete, currentEventData);
// Remplir les données selon le mode
if (mode === 'view') {

View File

@ -468,7 +468,7 @@ $crvi_is_front_context = ($crvi_agenda_context !== 'admin');
<div id="eventFormErrors" class="alert alert-danger d-none" role="alert"></div>
<!-- Boutons de changement de statut rapide (mode édition uniquement) -->
<div id="eventStatusButtons" style="display: none;">
<div id="eventStatusButtons">
<div class="btn-group" role="group">
<button type="button" class="btn btn-success btn-sm" id="markPresentBtn" title="Valider la présence">
<i class="fas fa-user-check me-1"></i>Valider présence