From d3fb51a941f7d5e0cba464cd51efee4305b785bd Mon Sep 17 00:00:00 2001 From: KONE SOREL Date: Thu, 9 Apr 2026 09:29:47 +0000 Subject: [PATCH] dert --- Js/fonctions.js | 188 +++++++++++++++++++++ Modele/Garantiesbaremepriseencharge.php | 11 ++ Vue/Ajaxinsererbaremeacte/index.php | 2 +- Vue/Baremepriseenchargelettrecle/index.php | 4 +- 4 files changed, 202 insertions(+), 3 deletions(-) diff --git a/Js/fonctions.js b/Js/fonctions.js index aa38d06d..14f20a68 100755 --- a/Js/fonctions.js +++ b/Js/fonctions.js @@ -92694,4 +92694,192 @@ function retour_bereme_initial() { detail_baremepriseencharge(idBaremePriseEnCharge); } +} + +/** + * Contrôle la validité chronologique de la date d'effet pour une Lettre Clé + */ +function validiteDateEffetBaremeLettreCle() { + // 1. Collecte des informations + const racineWeb = $("#racineWeb").val(); + const dateEffetSaisieStr = $("#dateEffetActe").val(); + const dateJourSystemeStr = $("#datejour_C").val(); // Format YYYY-MM-DD + + const donneesControle = { + idBaremePriseEnCharge: $("#idBaremePriseEnCharge").val(), + lettreCle: $("#lettreCle").val() + }; + + // Validation immédiate : Lettre clé obligatoire + if (!donneesControle.lettreCle || donneesControle.lettreCle.trim() === "") { + alert_ebene("Veuillez sélectionner une lettre clé !", "Please select a key letter !"); + return; + } + + // Validation immédiate : Date obligatoire + if (!dateEffetSaisieStr || dateEffetSaisieStr.trim() === "") { + alert_ebene("Veuillez entrer une date d'effet !", "Please enter an effective date !"); + $("#dateEffetActe").focus(); + return; + } + + // 2. Préparation des objets Date + const parts = dateEffetSaisieStr.split('/'); + const dateEffetSaisie = new Date(parts[2], parts[1] - 1, parts[0]); + const dateJourSysteme = new Date(dateJourSystemeStr); + + // 3. Appel AJAX de contrôle + $.ajax({ + url: racineWeb + "Ajaxbaremelettrecle/controle/", + type: 'post', + data: donneesControle, + success: function(data) { + // Injection du champ hidden maxDateEffetActeBareme retourné par le serveur + $('#div_maxdateeffetactebareme').html(data); + + const maxDateBaseStr = $("#maxDateEffetActeBareme").val(); + + // Calcul des timestamps en jours (pour une comparaison fiable) + const dte = Math.round(dateEffetSaisie.getTime() / (1000 * 3600 * 24)); + const dtj = Math.round(dateJourSysteme.getTime() / (1000 * 3600 * 24)); + + // 4. Logique de validation chronologique + if (dte < dtj && maxDateBaseStr) { + const maxDateBase = new Date(maxDateBaseStr); + const dtm = Math.round(maxDateBase.getTime() / (1000 * 3600 * 24)); + + if (dte < dtm) { + // Date invalide car antérieure à la dernière modification connue + alert_ebene( + "Date d'effet invalide ! Elle ne peut être antérieure à la dernière mise à jour de cette lettre clé.", + "Invalid effective date ! It cannot be earlier than the last update of this key letter." + ); + $("#dateEffetActe").val('').focus(); + return; + } + } + + // 5. Validation réussie : Passage à l'insertion + if (typeof inserer_bareme_lettre_cle === 'function') { + inserer_bareme_lettre_cle(); + } + }, + error: function() { + alert_ebene("Erreur lors de la vérification de la date.", "Error during date verification."); + } + }); +} + +/** + * Insère une nouvelle ligne de barème pour une lettre clé après confirmation + */ +function inserer_bareme_lettre_cle() { + // 1. Récupération des éléments d'environnement + const racineWeb = $("#racineWeb").val(); + const codeLangue = $("#codeLangue").val(); + const $conteneurDetail = $("#div_detail_bareme"); + + // 2. Collecte et nettoyage des données + const donnees = { + idBaremePriseEnCharge: $("#idBaremePriseEnCharge").val(), + lettreCle: $("#lettreCle").val(), + dateEffetActe: $("#dateEffetActe").val(), + forfaitPlafondActe: $("#forfaitPlafondActe").val().replace(/\s/g, ""), // Supprime tous les types d'espaces + ticketModerateurActe: $("#ticketModerateurActe").val() + }; + + // 3. Validations de saisie + if (!donnees.lettreCle || donnees.lettreCle.trim() === "") { + alert_ebene("Veuillez entrer une lettre clé !", "Please enter a key letter !"); + $("#lettreCle").focus(); + return; + } + + if (!donnees.dateEffetActe || donnees.dateEffetActe.trim() === "") { + alert_ebene("Veuillez entrer une date d'effet !", "Please enter an effective date !"); + $("#dateEffetActe").focus(); + return; + } + + // Validation du montant (doit être supérieur à 0) + if (parseFloat(donnees.forfaitPlafondActe) <= 0 || donnees.forfaitPlafondActe === "") { + alert_ebene("Veuillez entrer un montant valide !", "Please enter a valid amount !"); + $("#forfaitPlafondActe").focus(); + return; + } + + // 4. Processus de confirmation et envoi + confirm_ebene("Confirmez-vous cette opération ?", "Do you confirm this transaction ?") + .then((isConfirmed) => { + if (isConfirmed) { + // Affichage du loader (SaaS UX) + const loadingTxt = (codeLangue === "en_US") ? "Processing..." : "Traitement en cours..."; + $conteneurDetail.html(` +
+
+
${loadingTxt}
+
+ `); + + // Appel AJAX + $.ajax({ + url: racineWeb + "Ajaxbaremelettrecle/ajouter/", + type: 'post', + data: donnees, // Envoi sous forme d'objet (plus propre) + success: function(response) { + // Actualisation de l'historique (table de détail) + if (typeof actualiser_bareme_acte_lettre_cle === 'function') { + actualiser_bareme_acte_lettre_cle(); + } + }, + error: function() { + alert_ebene("Erreur lors de l'enregistrement.", "Error during saving."); + } + }); + } + }); +} + +/** + * Actualise l'historique des barèmes par lettres clés + */ +function actualiser_bareme_acte_lettre_cle() { + // 1. Initialisation des variables d'environnement + const racineWeb = $("#racineWeb").val(); + const codeLangue = $("#codeLangue").val(); + const $conteneur = $('#div_detail_bareme'); + + const donnees = { + idBaremePriseEnCharge: $("#idBaremePriseEnCharge").val() + }; + + // 2. Feedback visuel de mise à jour (SaaS UX) + // On affiche un spinner discret pour indiquer le rafraîchissement + const refreshMsg = (codeLangue === "en_US") ? "Updating history..." : "Mise à jour de l'historique..."; + + $conteneur.html(` +
+
+ ${refreshMsg} +
+ `); + + // 3. Appel AJAX + $.ajax({ + url: racineWeb + "Ajaxbaremelettrecle/", + type: 'post', + data: donnees, + success: function(data) { + // Injection du nouveau contenu avec une transition fluide + $conteneur.hide().html(data).fadeIn(200); + }, + error: function(xhr, status, error) { + $conteneur.html(` +
+ + ${(codeLangue === "en_US") ? "Error refreshing data." : "Erreur lors du rafraîchissement des données."} +
+ `); + } + }); } \ No newline at end of file diff --git a/Modele/Garantiesbaremepriseencharge.php b/Modele/Garantiesbaremepriseencharge.php index 39ce3c8d..8a05d89f 100755 --- a/Modele/Garantiesbaremepriseencharge.php +++ b/Modele/Garantiesbaremepriseencharge.php @@ -1750,4 +1750,15 @@ class Garantiesbaremepriseencharge extends Modele { return $resultat->fetchAll(PDO::FETCH_ASSOC); } + public function getMaxDateEffetBaremeInitialLette($idBaremePriseEnCharge, $lettreCle){ + + $sql="SELECT MAX(dateEffet) AS maxDateEffet FROM actesbaremeinitiallettrecle + WHERE idBaremePriseEnCharge = ? AND lettreCle = ? + AND supprime !='1' AND DATE(dateEffet) <= CURDATE();"; + + $resultat = $this->executerRequete($sql, array($idBaremePriseEnCharge, $lettreCle))->fetch(PDO::FETCH_ASSOC); + + return $resultat['maxDateEffet']; + } + } diff --git a/Vue/Ajaxinsererbaremeacte/index.php b/Vue/Ajaxinsererbaremeacte/index.php index c9a41066..15b5b1b6 100755 --- a/Vue/Ajaxinsererbaremeacte/index.php +++ b/Vue/Ajaxinsererbaremeacte/index.php @@ -55,7 +55,7 @@ - nettoyer($v['dateEffet']), $_SESSION['lang']); ?> + nettoydateer($v['dateEffet']), $_SESSION['lang']); ?> diff --git a/Vue/Baremepriseenchargelettrecle/index.php b/Vue/Baremepriseenchargelettrecle/index.php index c93f32bd..5a2d3a2c 100644 --- a/Vue/Baremepriseenchargelettrecle/index.php +++ b/Vue/Baremepriseenchargelettrecle/index.php @@ -2,11 +2,11 @@ $idBareme = $_SESSION['idBaremePriseEnCharge']; $libelleBareme = $_SESSION['libelleBareme']; - $adminSin = $_SESSION['adminSin']; + $adminProd = $_SESSION['adminProd']; ?> - +