dert
This commit is contained in:
parent
ae852627e9
commit
d3fb51a941
188
Js/fonctions.js
188
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(`
|
||||
<div class="d-flex flex-column align-items-center justify-content-center p-5 text-primary">
|
||||
<div class="spinner-border" role="status" style="width: 4rem; height: 4rem;"></div>
|
||||
<h5 class="mt-3 fw-bold text-uppercase">${loadingTxt}</h5>
|
||||
</div>
|
||||
`);
|
||||
|
||||
// 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(`
|
||||
<div class="text-center py-4">
|
||||
<div class="spinner-border spinner-border-sm text-primary" role="status"></div>
|
||||
<span class="ms-2 small text-muted text-uppercase fw-bold">${refreshMsg}</span>
|
||||
</div>
|
||||
`);
|
||||
|
||||
// 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(`
|
||||
<div class="alert alert-warning border-0 small shadow-sm m-2">
|
||||
<i class="fas fa-exclamation-triangle me-2"></i>
|
||||
${(codeLangue === "en_US") ? "Error refreshing data." : "Erreur lors du rafraîchissement des données."}
|
||||
</div>
|
||||
`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -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'];
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@
|
|||
|
||||
<tr class="<?= ($supprime == '1') ? 'table-danger opacity-50' : ''; ?>">
|
||||
<td class="ps-3 fw-bold text-dark small border-end"><?= $libelle ?></td>
|
||||
<td class="text-center text-nowrap"><?= dateLang($this->nettoyer($v['dateEffet']), $_SESSION['lang']); ?></td>
|
||||
<td class="text-center text-nowrap"><?= Lang($this->nettoydateer($v['dateEffet']), $_SESSION['lang']); ?></td>
|
||||
|
||||
<td class="text-center fw-bold text-primary border-start"><?= $plafondFamille; ?></td>
|
||||
<td class="text-center text-muted small"><?= $periodicitePlafondFamille;?></td>
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@
|
|||
$idBareme = $_SESSION['idBaremePriseEnCharge'];
|
||||
$libelleBareme = $_SESSION['libelleBareme'];
|
||||
|
||||
$adminSin = $_SESSION['adminSin'];
|
||||
$adminProd = $_SESSION['adminProd'];
|
||||
?>
|
||||
|
||||
<input type="hidden" id="idBaremePriseEnCharge" name="idBaremePriseEnCharge" value="<?= $_SESSION['idBaremePriseEnCharge'] ?>">
|
||||
<input type="hidden" id="adminSin" name="adminSin" value="<?= $adminSin; ?>">
|
||||
<input type="hidden" id="adminProd" name="adminProd" value="<?= $adminProd; ?>">
|
||||
<input type="hidden" id="masquerActe" name="masquerActe" value="1">
|
||||
|
||||
<div id="div_entete_bareme" class="page-content animate__animated animate__fadeIn">
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user