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(` +