diff --git a/Bootstrap_new/css/style_office.css b/Bootstrap_new/css/style_office.css index 352ae25..a9b5bfd 100644 --- a/Bootstrap_new/css/style_office.css +++ b/Bootstrap_new/css/style_office.css @@ -687,14 +687,6 @@ body { font-weight: 600; } -.modal-backdrop { - z-index: 9998 !important; -} - -.modal { - z-index: 9999 !important; -} - /* ============================================ RESPONSIVE DESIGN diff --git a/Js/fonctions.js b/Js/fonctions.js index 78832fd..632f9d4 100755 --- a/Js/fonctions.js +++ b/Js/fonctions.js @@ -570,59 +570,98 @@ function texte_cp() /** - * Prépare et affiche le modal d'impression de la quittance client + * Ouvre le modal d'impression de quittance et charge son contenu via AJAX + * de manière compatible Bootstrap 5 (sans casser le backdrop). + * + * @param {number|string} idQuittance - Identifiant de la quittance à imprimer */ function imprimer_quittance_client(idQuittance) { - debugger; - // 1. Validation de l'ID + + /* ================================ + * 1. Validation de l’identifiant + * ================================ */ if (!idQuittance || parseInt(idQuittance) <= 0) { const v_msg = "Rien à imprimer !"; const v_msgEng = "Nothing to print!"; - - // Utilisation de votre fonction personnalisée + + // Utilisation de l’alerte métier si disponible if (typeof alert_ebene === "function") { alert_ebene(v_msg, v_msgEng); } else { alert(v_msg); } - return; + return; // Arrêt immédiat } + /* ================================ + * 2. Initialisation des références + * ================================ */ const racine = $("#racineWeb").val() || "/"; - const $divExport = $('#div_export_quittance'); - const $btnTrigger = $("#btn_export_quittance"); - // 2. Préparation du loader dans le modal - $divExport.html(` + // Élément DOM du modal Bootstrap + const modalEl = document.getElementById('pop_export_quittance'); + + // Conteneur qui recevra le contenu AJAX + const divExport = document.getElementById('div_export_quittance'); + + /* =================================================== + * 3. Préparation du contenu AVANT ouverture du modal + * (évite les reflow destructeurs après show()) + * =================================================== */ + divExport.innerHTML = `
-
+
Chargement...
-

Génération du document client en cours...

+

+ Génération du document client en cours... +

- `); + `; - // 3. Ouverture du modal - $btnTrigger.click(); - - // 4. Appel AJAX - $.ajax({ - url: racine + "Ajaxexporterunequittanceclient/", - type: 'POST', - data: { idQuittance: idQuittance }, // Passage par objet (plus propre) - success: function(data) { - // On injecte le contenu avec un petit effet de transition - $divExport.hide().html(data).fadeIn(200); - }, - error: function(xhr, status, error) { - $divExport.html(` -
- - Erreur : Impossible de générer la quittance. - ${error} -
- `); - console.error("[Print] Erreur AJAX:", status, error); - } + /* =================================================== + * 4. Création ou récupération de l’instance Bootstrap + * (Bootstrap 5 = gestion impérative par instance) + * =================================================== */ + const modal = bootstrap.Modal.getOrCreateInstance(modalEl, { + backdrop: 'static', // Empêche la fermeture au clic extérieur + keyboard: false // Désactive la touche ESC }); -} \ No newline at end of file + + /* =================================================== + * 5. Chargement AJAX APRES affichage du modal + * (événement déclenché une seule fois) + * =================================================== */ + modalEl.addEventListener('shown.bs.modal', function () { + + $.ajax({ + url: racine + "Ajaxexporterunequittanceclient/", + type: 'POST', + data: { idQuittance: idQuittance }, + + // Succès : injection directe du HTML (sans animation JS) + success: function (data) { + divExport.innerHTML = data; + }, + + // Erreur : message utilisateur + log console + error: function (xhr, status, error) { + divExport.innerHTML = ` +
+ Erreur : + Impossible de générer la quittance. + ${error} +
+ `; + console.error("[Print] Erreur AJAX:", status, error); + } + }); + + }, { once: true }); // Sécurise contre les appels multiples + + /* ================================ + * 6. Ouverture propre du modal + * ================================ */ + modal.show(); +} diff --git a/Vue/Ajaxfichepolice/index.php b/Vue/Ajaxfichepolice/index.php index 547b869..78a003b 100644 --- a/Vue/Ajaxfichepolice/index.php +++ b/Vue/Ajaxfichepolice/index.php @@ -71,7 +71,7 @@ -