Merge branch 'main' of git.ebene.ovh:ebene/radiantrh

This commit is contained in:
KANE LAZENI 2026-01-06 17:22:08 +00:00
commit cb0eaafb2e
21 changed files with 1618 additions and 890 deletions

View File

@ -87,133 +87,122 @@ class ControleurAjaximporterlisteassure extends Controleurrequete
public function importermodele()
{
$idAvenant = $this->requete->getParametreFormulaire("idAvenant");
$cheminFichier = $this->requete->getParametreFormulaire("cheminFichier");
$idAvenant = $this->requete->getParametreFormulaire("idAvenant");
$cheminFichier = $this->requete->getParametreFormulaire("cheminFichier");
$_SESSION['idAvenant_C'] = $idAvenant;
$this->beneficiaire->initIinsererLigneModeleAssure();
$dataXLS = array();
$fichier = "Temp/import/".$cheminFichier;
if (!file_exists($fichier))
{
$this->genererVueAjax(array('message_erreur_excel' => "Fichier introubable sur le serveur !", 'succes_impot_execl' => "0"));
// 1. Vérification du fichier
if (!file_exists($fichier)) {
$this->genererVueAjax(array(
'message_erreur_excel' => "Erreur : Fichier introuvable sur le serveur !",
'succes_impot_execl' => "0"
));
exit();
}
/*
$docXLS = new PHPExcel_Reader_Excel2007();
$Excel = $docXLS->load($fichier);
$Excel->setActiveSheetIndex(0);
$feuille=$Excel->getActiveSheet();
*/
$docXLS = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$Excel = $docXLS->load($fichier);
$feuille = $Excel->getSheet($Excel->getFirstSheetIndex());
$derniereLigne = $feuille->getHighestRow();
$derniereColonne = $feuille->getHighestColumn();
$tableauExcel = $feuille->toArray(null, true, true, true);
for ($i = 2; $i <= $derniereLigne; $i++)
{
$categorie = trim($tableauExcel[$i]['A']);
$numeroAdherent = trim($tableauExcel[$i]['B']);
$noFamille = trim($tableauExcel[$i]['C']);
if ($noFamille<=" ")
try {
$docXLS = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$Excel = $docXLS->load($fichier);
$feuille = $Excel->getSheet($Excel->getFirstSheetIndex());
$derniereLigne = $feuille->getHighestRow();
$tableauExcel = $feuille->toArray(null, true, true, true);
// 2. Boucle de validation et insertion
for ($i = 2; $i <= $derniereLigne; $i++)
{
$noFamille = "0";
$categorie = trim($tableauExcel[$i]['A']);
$numeroAdherent = trim($tableauExcel[$i]['B']);
$noFamille = trim($tableauExcel[$i]['C']);
if ($noFamille<=" ")
{
$noFamille = "0";
}
$nom = trim($tableauExcel[$i]['D']);
$prenoms = trim($tableauExcel[$i]['E']);
$codeLienParente = trim($tableauExcel[$i]['F']);
$codeNaturePiece = trim($tableauExcel[$i]['G']);
$numeroPiece = trim($tableauExcel[$i]['H']);
$sexe = trim($tableauExcel[$i]['I']);
$codeGroupeSanguin = trim($tableauExcel[$i]['J']);
$dateNaissance = trim($tableauExcel[$i]['K']);
$telephonePortable = trim($tableauExcel[$i]['L']);
$email = trim($tableauExcel[$i]['M']);
$nomComplet = $nom . " " . $prenoms;
// Validation Catégorie
if ( (trim($tableauExcel[$i]['A']) <= " ") && ($codeLienParente == "A")) {
$this->renvoyerErreurImport("Ligne $i : $nomComplet => Pas de catégorie !");
}
// Validation Lien de parenté
if (!in_array($codeLienParente, array("A", "C", "E", "O"))) {
$this->renvoyerErreurImport("Ligne $i : $nomComplet => Lien de parenté '$codeLienParente' invalide !");
}
// Validation Sexe
if (!in_array($sexe, array("M", "F"))) {
$this->renvoyerErreurImport("Ligne $i : $nomComplet => Genre '$sexe' invalide !");
}
// Insertion en base temporaire
$this->beneficiaire->insererLigneModeleAssure($idAvenant, $categorie, $numeroAdherent,
$noFamille, $nom, $prenoms, $codeLienParente, $codeNaturePiece, $numeroPiece, $sexe,
$codeGroupeSanguin, $dateNaissance, $telephonePortable, $email);
}
$nom = trim($tableauExcel[$i]['D']);
$prenoms = trim($tableauExcel[$i]['E']);
$codeLienParente = trim($tableauExcel[$i]['F']);
$this->beneficiaire->gererIncorporationSurFamExistante();
$codeNaturePiece = trim($tableauExcel[$i]['G']);
$numeroPiece = trim($tableauExcel[$i]['H']);
$sexe = trim($tableauExcel[$i]['I']);
$codeGroupeSanguin = trim($tableauExcel[$i]['J']);
$dateNaissance = trim($tableauExcel[$i]['K']);
$telephonePortable = trim($tableauExcel[$i]['L']);
$email = trim($tableauExcel[$i]['M']);
$nomComplet = $nom . " " . $prenoms;
if ( ($categorie<=" ") && ($codeLienParente=="A"))
{
$this->genererVueAjax(array('message_erreur_excel' => $nomComplet . " => Pas de catégorie!", 'succes_impot_execl' => "0"));
exit();
}
$liste_liens = array("A", "C", "E", "O");
if (!in_array($codeLienParente, $liste_liens))
{
$this->genererVueAjax(array('message_erreur_excel' => $nomComplet . " => Revoir lien de parenté!", 'succes_impot_execl' => "0"));
exit();
}
// 3. Vérifications métier post-import
$this->verifierContraintesMetier();
$liste_sexes = array("M", "F");
if (!in_array($sexe, $liste_sexes))
{
$this->genererVueAjax(array('message_erreur_excel' => $nomComplet . " => Revoir le sexe!", 'succes_impot_execl' => "0"));
exit();
}
// 4. SUCCÈS FINAL
$this->genererVueAjax(array(
'message_erreur_excel' => "Fichier analysé avec succès ! Préparation de l'incorporation...",
'succes_impot_execl' => "1"
));
// Penser à gérer les erreurs de date
$this->beneficiaire->insererLigneModeleAssure($idAvenant, $categorie, $numeroAdherent,
$noFamille, $nom, $prenoms, $codeLienParente, $codeNaturePiece, $numeroPiece, $sexe,
$codeGroupeSanguin, $dateNaissance, $telephonePortable, $email);
/*
echo "Ligne ". $i . " => OK";
echo "<BR>";
*/
} catch (Exception $e) {
$this->renvoyerErreurImport("Erreur lors de la lecture du fichier : " . $e->getMessage());
}
$this->beneficiaire->gererIncorporationSurFamExistante();
// Vérification de certaines erreurs :
// 1 => Si nouvelle famille sans Adhérent
$noFamilleSansAdherent = $this->beneficiaire->getadhimpfamillesansadherent();
if ($noFamilleSansAdherent>"0")
{
$this->genererVueAjax(array('message_erreur_excel' => "Famille " . $noFamilleSansAdherent . " => Adherent Principal manquant !", 'succes_impot_execl' => "0"));
exit();
}
// 2 => Si plus d'1 Adhérent dans une même famille
$noFamillePlusieursAdherent = $this->beneficiaire->getadhimpfamilleplusieursadherent();
if ($noFamillePlusieursAdherent>"0")
{
$this->genererVueAjax(array('message_erreur_excel' => "Famille " . $noFamillePlusieursAdherent . " => Plusieurs Adherents Principaux !", 'succes_impot_execl' => "0"));
exit();
}
// 3 => Incorporation sur une ancienne famille introuvable dans la police
$noFamilleExistantSansAdherent = $this->beneficiaire->getadhimpfamilleexistantsansadherent();
if ($noFamilleExistantSansAdherent>"0")
{
$this->genererVueAjax(array('message_erreur_excel' => "Famille " . $noFamilleExistantSansAdherent . " => Ancienne famille introuvable !", 'succes_impot_execl' => "0"));
exit();
}
$this->genererVueAjax(array('message_erreur_excel' => "Fichier temporaire extrait du serveur avec succes!", 'succes_impot_execl' => "1"));
exit();
}
/**
* Helper pour uniformiser les sorties d'erreur
*/
private function renvoyerErreurImport($message) {
$this->genererVueAjax(array(
'message_erreur_excel' => $message,
'succes_impot_execl' => "0"
));
exit();
}
/**
* Regroupe vos vérifications de cohérence famille
*/
private function verifierContraintesMetier() {
$err1 = $this->beneficiaire->getadhimpfamillesansadherent();
if ($err1 > "0") $this->renvoyerErreurImport("Famille $err1 => Adhérent Principal (A) manquant !");
$err2 = $this->beneficiaire->getadhimpfamilleplusieursadherent();
if ($err2 > "0") $this->renvoyerErreurImport("Famille $err2 => Plusieurs Adhérents Principaux détectés !");
$err3 = $this->beneficiaire->getadhimpfamilleexistantsansadherent();
if ($err3 > "0") $this->renvoyerErreurImport("Famille $err3 => Ancienne famille introuvable dans cette police !");
}
//
public function traiterlignesimportees()
{

View File

@ -199,6 +199,8 @@ function alert_ebene(p_msg, p_msg_eng) {
});
}
*/
/*
function alert_ebene(p_msg, p_msg_eng)
{
codeLangue = $("#codeLangue").val();
@ -212,6 +214,45 @@ function alert_ebene(p_msg, p_msg_eng)
alert(p_msg);
}
}
*/
function alert_ebene(msgFr, msgEn) {
const codeLangue = document.querySelector("#codeLangue")?.value || "fr_FR";
const message = (codeLangue === "en_US") ? msgEn : msgFr;
// Bloquant : l'utilisateur doit cliquer sur OK
window.alert(message);
}
/*
function alert_ebene(p_msg, p_msg_eng) {
const codeLangue = document.querySelector("#codeLangue")?.value || "fr_FR";
const message = (codeLangue === "en_US") ? p_msg_eng : p_msg;
return Swal.fire({
text: message,
icon: 'info',
confirmButtonText: (codeLangue === "en_US") ? 'OK' : 'D\'accord'
}).then(() => {
// Ici tu mets l'action suivante, elle ne s'exécute qu'après clic sur OK
console.log("Utilisateur a validé le message");
});
}
*/
/*
function alert_ebene(msgFr, msgEn) {
const codeLangue = document.querySelector("#codeLangue")?.value || "fr_FR";
const message = (codeLangue === "en_US") ? msgEn : msgFr;
return Swal.fire({
text: message,
icon: 'info',
confirmButtonText: (codeLangue === "en_US") ? 'OK' : 'D\'accord'
});
}
*/
/**
@ -1397,7 +1438,7 @@ function enregistrer_avenant()
alert_ebene(v_msg, v_msgEng);
return;
}
}
motifavenant=$("#motifavenant").val();
@ -1489,7 +1530,7 @@ function recapituler_retrait()
oTable.destroy();
setTimeout(function() {
appliquerDataTable();
appliquerDataTable('.tabliste');
}, 500);
},
error: function(data) {
@ -2552,6 +2593,8 @@ function init_importer_modele_assure() {
* ETAPE 3 (Action) : Liaison du fichier à l'avenant choisi
*/
function importer_modele_assure(idAvenant) {
debugger;
// On re-vérifie la présence du fichier par sécurité
var cheminFichier = $("#cheminFichier").val();
if (!cheminFichier || cheminFichier === "") {
@ -2574,23 +2617,28 @@ function importer_modele_assure(idAvenant) {
type: 'POST',
data: donnees,
success: function(data) {
// Le serveur doit retourner un flag de succès dans le HTML
// ex: <input type="hidden" id="succes_impot_execl" value="1">
$("#div_erreur_excel").html(data);
var isSuccess = $("#succes_impot_execl").val();
maj_etape_3_import_assures();
/*
if (isSuccess === "1") {
alert_ebene("Liaison réussie ! Passage au traitement...", "Link successful! Moving to processing...");
maj_etape_3_import_assures();
} else {
div_export.empty(); // On vide le spinner pour laisser voir l'erreur
alert_ebene("Le fichier contient des erreurs de format.", "The file contains formatting errors.");
}
*/
},
debugger;
// 1. On injecte d'abord le contenu dans le div
$("#div_erreur_excel").html(data);
// 2. On cherche l'input spécifiquement DANS le contenu qu'on vient de recevoir
// On utilise .find() si l'input est à l'intérieur d'un div,
// ou .filter() s'il est à la racine du HTML renvoyé.
var isSuccess = $(data).filter("#succes_impot_execl").val() || $(data).find("#succes_impot_execl").val();
console.log("Valeur détectée :", isSuccess); // Pour votre débogage
if (isSuccess === "1") {
alert_ebene("Opération terminée avec succès!", "Operation completed successfully!");
// On attend un tout petit peu que le DOM soit stable avant de passer à la suite
setTimeout(function(){
maj_etape_3_import_assures();
}, 500);
} else {
div_export.html(''); // On cache le spinner
// Le message d'erreur est déjà affiché par $("#div_erreur_excel").html(data)
}
},
error: function() {
alert_ebene("Erreur technique lors de l'importation.", "Technical error during import.");
}
@ -2897,21 +2945,23 @@ function ajouter_sans_college_adherent_importe_college()
v_msg="Attention! Confirmez-vous cette opération?";
v_msgEng="Warning! Do you confirm this operation?";
if(confirm_ebene(v_msg, v_msgEng))
{
$.ajax({
url: $("#racineWeb").val()+"Ajaximporterlisteassure/ajoutersanscollegeadherentaucollege/",
type: 'POST',
data: donnees,
success: function(data) {
},
error: function(data) {
},
complete: function() {
afficher_adherent_importee();
}
});
confirm_ebene(v_msg, v_msgEng).then(isConfirmed => {
if (isConfirmed) {
$.ajax({
url: $("#racineWeb").val()+"Ajaximporterlisteassure/ajoutersanscollegeadherentaucollege/",
type: 'POST',
data: donnees,
success: function(data) {
},
error: function(data) {
},
complete: function() {
afficher_adherent_importee();
}
});
}
});
}
@ -2933,21 +2983,22 @@ function retirer_tous_adherent_importe_college()
v_msg="Attention, cela va vider ce collège! Confirmez-vous?";
v_msgEng="Attention, this will empty this college! Do you confirm?";
if(confirm_ebene(v_msg, v_msgEng))
{
$.ajax({
url: $("#racineWeb").val()+"Ajaximporterlisteassure/retirertousadherentaucollege/",
type: 'POST',
data: donnees,
success: function(data) {
},
error: function(data) {
},
complete: function() {
afficher_adherent_importee();
}
});
confirm_ebene(v_msg, v_msgEng).then(isConfirmed => {
if (isConfirmed) {
$.ajax({
url: $("#racineWeb").val()+"Ajaximporterlisteassure/retirertousadherentaucollege/",
type: 'POST',
data: donnees,
success: function(data) {
},
error: function(data) {
},
complete: function() {
afficher_adherent_importee();
}
});
}
});
}
function incorporer_assures_inmportes()
@ -3206,8 +3257,17 @@ function afficher_beneficiare_prime_adherent()
donnees_retour = "";
donnees = 'debutPeriode='+debutPeriode+"&finPeriode="+finPeriode;
$("#div_detail_requete").html('<div style="padding-top:80px;"><img src="Bootstrap/images/loading.gif"/>&nbsp;&nbsp;<span style="font-size:15pt;">' + 'Veuillez patienter... / Please wait...' + '</span></div>');
$("#div_detail_requete").html(`
<div class="d-flex flex-column align-items-center justify-content-center" style="padding-top:80px;">
<div class="spinner-border text-primary" role="status" style="width:3rem; height:3rem;">
<span class="visually-hidden">Loading...</span>
</div>
<span class="mt-3 fs-5 fw-bold">
Veuillez patienter... / Please wait...
</span>
</div>
`);
$.ajax({
url: $("#racineWeb").val()+"Ajaxbeneficiaireprimeadherent/",
type : 'post',
@ -3230,7 +3290,16 @@ function rapport_sp_police()
function sinistres_a_prime_police()
{
$("#div_detail_sp").html('<div style="padding-top:80px;"><img src="Bootstrap/images/loading.gif"/>&nbsp;&nbsp;<span style="font-size:15pt;">' + 'Veuillez patienter... / Please wait...' + '</span></div>');
$("#div_detail_sp").html(`
<div class="d-flex flex-column align-items-center justify-content-center" style="padding-top:80px;">
<div class="spinner-border text-primary" role="status" style="width:3rem; height:3rem;">
<span class="visually-hidden">Loading...</span>
</div>
<span class="mt-3 fs-5 fw-bold">
Veuillez patienter... / Please wait...
</span>
</div>
`);
$.ajax({
url: $("#racineWeb").val()+"Ajaxsppolice/police/",
@ -3247,7 +3316,16 @@ function sinistres_a_prime_police()
function sinistres_a_prime_categorie()
{
$("#div_detail_sp").html('<div style="padding-top:80px;"><img src="Bootstrap/images/loading.gif"/>&nbsp;&nbsp;<span style="font-size:15pt;">' + 'Veuillez patienter... / Please wait...' + '</span></div>');
$("#div_detail_sp").html(`
<div class="d-flex flex-column align-items-center justify-content-center" style="padding-top:80px;">
<div class="spinner-border text-primary" role="status" style="width:3rem; height:3rem;">
<span class="visually-hidden">Loading...</span>
</div>
<span class="mt-3 fs-5 fw-bold">
Veuillez patienter... / Please wait...
</span>
</div>
`);
$.ajax({
url: $("#racineWeb").val()+"Ajaxsppolice/categorie/",
@ -3265,7 +3343,16 @@ function sinistres_a_prime_categorie()
function sinistres_a_prime_college()
{
$("#div_detail_sp").html('<div style="padding-top:80px;"><img src="Bootstrap/images/loading.gif"/>&nbsp;&nbsp;<span style="font-size:15pt;">' + 'Veuillez patienter... / Please wait...' + '</span></div>');
$("#div_detail_sp").html(`
<div class="d-flex flex-column align-items-center justify-content-center" style="padding-top:80px;">
<div class="spinner-border text-primary" role="status" style="width:3rem; height:3rem;">
<span class="visually-hidden">Loading...</span>
</div>
<span class="mt-3 fs-5 fw-bold">
Veuillez patienter... / Please wait...
</span>
</div>
`);
$.ajax({
url: $("#racineWeb").val()+"Ajaxsppolice/college/",
@ -3285,10 +3372,17 @@ function requetes_synthese_consommation_police()
{
v_url = $("#racineWeb").val()+"Ajaxsyntheseconsopolice/";
$("#div_detail_exp").html('');
$("#div_detail_sp").html(`
<div class="d-flex flex-column align-items-center justify-content-center" style="padding-top:80px;">
<div class="spinner-border text-primary" role="status" style="width:3rem; height:3rem;">
<span class="visually-hidden">Loading...</span>
</div>
<span class="mt-3 fs-5 fw-bold">
Veuillez patienter... / Please wait...
</span>
</div>
`);
$("#div_detail_sp").html('<div style="padding-top:80px;"><img src="Bootstrap/images/loading.gif"/>&nbsp;&nbsp;<span style="font-size:15pt;">' + 'Veuillez patienter... / Please wait...' + '</span></div>');
$.ajax({
url: v_url,
type : 'post',
@ -3311,7 +3405,16 @@ function requetes_synthese_consommation_police_export()
{
v_url = $("#racineWeb").val()+"Ajaxsyntheseconsopolice/exportxls/";
$("#div_detail_exp").html('<div style="padding-top:80px;"><img src="Bootstrap/images/loading.gif"/>&nbsp;&nbsp;<span style="font-size:15pt;">' + 'Veuillez patienter... / Please wait...' + '</span></div>');
$("#div_detail_exp").html(`
<div class="d-flex flex-column align-items-center justify-content-center" style="padding-top:80px;">
<div class="spinner-border text-primary" role="status" style="width:3rem; height:3rem;">
<span class="visually-hidden">Loading...</span>
</div>
<span class="mt-3 fs-5 fw-bold">
Veuillez patienter... / Please wait...
</span>
</div>
`);
$.ajax({
url: v_url,
@ -3337,8 +3440,17 @@ function lister_ged_police()
donnees = 'd1='+d1+'&d2='+d2+'&nomOrigine='+nomOrigine;
$("#div_ged").html('<div style="padding-top:80px;"><img src="Bootstrap/images/loading.gif"/>&nbsp;&nbsp;<span style="font-size:15pt;">' + 'Veuillez patienter... / Please wait...' + '</span></div>');
$("#div_ged").html(`
<div class="d-flex flex-column align-items-center justify-content-center" style="padding-top:80px;">
<div class="spinner-border text-primary" role="status" style="width:3rem; height:3rem;">
<span class="visually-hidden">Loading...</span>
</div>
<span class="mt-3 fs-5 fw-bold">
Veuillez patienter... / Please wait...
</span>
</div>
`);
$.ajax({
url: $("#racineWeb").val()+"Ajaxlistegedpolice/",
type : 'post',
@ -3377,7 +3489,17 @@ function imprimer_liste_assures_date()
donnees = 'dateAnalyse='+dateAnalyse;
var div_export = $('#div_export_assures');
div_export.html('<div style="padding-top:80px;"><img src="Bootstrap/images/loading.gif"/>&nbsp;&nbsp;<span style="font-size:15pt;">' + 'Veuillez patienter... / Please wait...' + '</span></div>');
div_export.html(`
<div class="d-flex flex-column align-items-center justify-content-center" style="padding-top:80px;">
<div class="spinner-border text-primary" role="status" style="width:3rem; height:3rem;">
<span class="visually-hidden">Loading...</span>
</div>
<span class="mt-3 fs-5 fw-bold">
Veuillez patienter... / Please wait...
</span>
</div>
`);
$.ajax({
url: $("#racineWeb").val()+"Ajaximprimerlisteassure/",
@ -3420,7 +3542,17 @@ function exporter_liste_assures_date()
donnees = 'dateAnalyse='+dateAnalyse;
var div_export = $('#div_exporter_liste_assures');
div_export.html('<div style="padding-top:80px;"><img src="Bootstrap/images/loading.gif"/>&nbsp;&nbsp;<span style="font-size:15pt;">' + 'Veuillez patienter... / Please wait...' + '</span></div>');
div_export.html(`
<div class="d-flex flex-column align-items-center justify-content-center" style="padding-top:80px;">
<div class="spinner-border text-primary" role="status" style="width:3rem; height:3rem;">
<span class="visually-hidden">Loading...</span>
</div>
<span class="mt-3 fs-5 fw-bold">
Veuillez patienter... / Please wait...
</span>
</div>
`);
$.ajax({
url: $("#racineWeb").val()+"Ajaxexporterlisteassure/",
@ -3464,7 +3596,16 @@ function liste_mouvemements_assures()
donnees += '&valide='+valide;
donnees += '&debut='+debut+'&fin='+fin;
$("#div_mvt").html('<div style="padding-top:80px;"><img src="Bootstrap/images/loading.gif"/>&nbsp;&nbsp;<span style="font-size:15pt;">' + 'Veuillez patienter... / Please wait...' + '</span></div>');
$("#div_mvt").html(`
<div class="d-flex flex-column align-items-center justify-content-center" style="padding-top:80px;">
<div class="spinner-border text-primary" role="status" style="width:3rem; height:3rem;">
<span class="visually-hidden">Loading...</span>
</div>
<span class="mt-3 fs-5 fw-bold">
Veuillez patienter... / Please wait...
</span>
</div>
`);
$.ajax({
url: $("#racineWeb").val()+"Ajaxmouvementassure/",
@ -3474,8 +3615,23 @@ function liste_mouvemements_assures()
},
success: function(data) {
$("#div_mvt").html(data);
appliquerDataTable('.tabliste');
},
complete: function() {
}
});
}
function retour_fiche_police()
{
idPolice=$("#idPolice_C" ).val();
if (idPolice>"")
{
window.location.assign($("#racineWeb" ).val()+"Fichepolice/");
}else{
window.location.assign($("#racineWeb" ).val()+"Accueil/");
}
}

View File

@ -10,8 +10,10 @@ class Mouvementassure extends Modele {
$sql = 'call sp_get_mouvementassures(?, ?, ?, ?, ?)';
// var_dump(array($codeSensMouvement, $valide, $debut, $fin));
// exit();
/*
var_dump(array($_SESSION['idPolice_C'], $codeSensMouvement, $valide, $debut, $fin));
exit();
*/
$resultat = $this->executerRequete($sql, array($_SESSION['idPolice_C'], $codeSensMouvement, $valide, $debut, $fin));

View File

@ -1,102 +1,133 @@
<div id="div_adherents_importes">
<div id="div_adherents_importes" class="animate__animated animate__fadeIn">
<div class="row g-4">
<div id="div_adherents_importes_1" class="col-lg-6">
<div class="card shadow-sm border-warning h-100">
<div class="card-header bg-warning text-dark py-3 d-flex justify-content-between align-items-center">
<h6 class="mb-0 fw-bold"><i class="fas fa-exclamation-triangle me-2"></i><?= _("Familles hors du collège") ?></h6>
<span class="badge bg-dark"><?= count($adherents) ?></span>
</div>
<div class="card-body p-2 bg-light">
<div class="row g-2 mb-3">
<div class="col-6">
<button type="button" class="btn btn-primary btn-sm w-100 fw-bold shadow-sm" onclick="ajouter_tous_adherent_importe_college();">
<?= _("Tout ajouter") ?> <i class="fas fa-angle-double-right ms-1"></i>
</button>
</div>
<div class="col-6">
<button type="button" class="btn btn-outline-warning btn-sm w-100 fw-bold shadow-sm text-dark bg-white" onclick="ajouter_sans_college_adherent_importe_college();">
<?= _("Lier les 'Sans Collège'") ?> <i class="fas fa-link ms-1"></i>
</button>
</div>
</div>
<div class="row">
<div id="div_adherents_importes_1" class="col-xs-6" >
<legend> <?= _("Familles hors du collège") ?> </legend>
<table class="table table-striped table-bordered table-hover table-condensed table-responsive" style="font-size:8pt;">
<thead>
<tr>
<th colspan="3" style='text-align:center'> <?= _("Catégoerie ou Collège") ?> </th>
<th colspan="2" style='text-align:center'> <?= _("No Famille") ?> </th>
<th colspan="2" style='text-align:center'> <?= _("Familles") ?> </th>
<th style='text-align:center'> => </th>
</tr>
<tr>
<th colspan="3"> <button type="button" style="font-size:10pt;" class="form-control btn btn-primary" onclick="javascript:ajouter_tous_adherent_importe_college();" > <?= _("Ajouter tous") . " ==>" ?> </button> </th>
<div class="table-responsive scroll-area">
<table class="table table-sm table-hover align-middle bg-white border mb-0" style="font-size: 0.78rem;">
<thead class="table-dark sticky-top">
<tr>
<th><?= _("Cat/Prod") ?></th>
<th class="text-center"><?= _("Fam/Adh") ?></th>
<th><?= _("Bénéficiaire") ?></th>
<th class="text-center">Action</th>
</tr>
</thead>
<tbody>
<?php foreach ($adherents as $adherent):
$idBenef = $adherent['idBeneficiairemodel'];
?>
<tr>
<td>
<div class="fw-bold"><?= $this->nettoyer($adherent['categorie']) ?></div>
<div class="small <?= ($adherent['idCollege'] <= 0) ? 'text-danger fw-bold' : 'text-muted' ?>">
<?= $this->nettoyer($adherent['codeProduit']) ?: 'N/A' ?>
</div>
</td>
<td class="text-center">
<span class="badge bg-light text-dark border fw-normal"><?= $this->nettoyer($adherent['noFamille']) ?></span>
<div class="x-small text-muted mt-1"><?= $this->nettoyer($adherent['numeroAdherent']) ?></div>
</td>
<td>
<div class="fw-bold text-uppercase"><?= $this->nettoyer($adherent['nom']) ?></div>
<div class="text-muted small"><?= $this->nettoyer($adherent['prenoms']) ?></div>
</td>
<td class="text-center">
<button class="btn btn-info btn-sm text-white px-2 py-0" onclick="ajouter_un_adherent_importe_college('<?=$idBenef?>');">
<i class="fas fa-chevron-right"></i>
</button>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<th colspan="2"> </th>
<div id="div_adherents_importes_2" class="col-lg-6">
<div class="card shadow-sm border-success h-100">
<div class="card-header bg-success text-white py-3 d-flex justify-content-between align-items-center">
<h6 class="mb-0 fw-bold"><i class="fas fa-check-circle me-2"></i><?= _("Membres affectés au collège") ?></h6>
<span class="badge bg-white text-success"><?= count($adherents_college) ?></span>
</div>
<th colspan="3"> <button type="button" style="font-size:10pt;" class="form-control btn btn-warning" onclick="javascript:ajouter_sans_college_adherent_importe_college();" > <?= _("Ajouter les sans collèges"). " ==>" ?> </button> </th>
</tr>
</thead>
<div class="card-body p-2 bg-light">
<div class="mb-3">
<button type="button" class="btn btn-danger btn-sm w-100 fw-bold shadow-sm" onclick="retirer_tous_adherent_importe_college();">
<i class="fas fa-angle-double-left me-1"></i> <?= _("Vider le collège sélectionné") ?>
</button>
</div>
<tbody>
<?php foreach ($adherents as $adherent):
$idBeneficiairemodel = $adherent['idBeneficiairemodel'];
$idCollege = $adherent['idCollege'];
?>
<div class="table-responsive scroll-area">
<table class="table table-sm table-hover align-middle bg-white border mb-0" style="font-size: 0.78rem;">
<thead class="table-secondary sticky-top">
<tr>
<th class="text-center">Retirer</th>
<th><?= _("Cat/Collège") ?></th>
<th class="text-center"><?= _("Fam/Adh") ?></th>
<th><?= _("Bénéficiaire") ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($adherents_college as $adh_c):
$idBenefC = $adh_c['idBeneficiairemodel'];
?>
<tr>
<td class="text-center">
<button class="btn btn-outline-danger btn-sm py-0 px-2" onclick="retirer_un_adherent_importe_college('<?=$idBenefC?>');">
<i class="fas fa-chevron-left"></i>
</button>
</td>
<td>
<div class="fw-bold"><?= $this->nettoyer($adh_c['categorie']) ?></div>
<div class="text-success small"><?= $this->nettoyer($adh_c['libelleCollege']) ?></div>
</td>
<td class="text-center">
<span class="badge bg-light text-dark border fw-normal"><?= $this->nettoyer($adh_c['noFamille']) ?></span>
</td>
<td>
<div class="fw-bold text-uppercase small"><?= $this->nettoyer($adh_c['nom']) ?> <?= $this->nettoyer($adh_c['prenoms']) ?></div>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<tr valign="top">
<td align='center'><?= $this->nettoyer($adherent['categorie']) ?></td>
<?php if ($idCollege>'0'): ?>
<td align='center'><?= $this->nettoyer($adherent['libelleCollege']) ?></td>
<td align='center'><?= $this->nettoyer($adherent['codeProduit']) ?></td>
<?php else : ?>
<td align='center' style="background-color: yellow;"><?= $this->nettoyer($adherent['libelleCollege']) ?></td>
<td align='center' style="background-color: yellow;"><?= $this->nettoyer($adherent['codeProduit']) ?></td>
<?php endif; ?>
<td align='center'><?= $this->nettoyer($adherent['numeroAdherent']) ?></td>
<td align='center'><?= $this->nettoyer($adherent['noFamille']) ?></td>
<td><?= $this->nettoyer($adherent['nom']) ?></td>
<td><?= $this->nettoyer($adherent['prenoms']) ?></td>
<td align='center'> <input type="button" value="=>" onClick="javascript:ajouter_un_adherent_importe_college('<?=$idBeneficiairemodel?>');" ></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<div id="div_adherents_importes_2" class="col-xs-6" >
<legend> <?= _("Familles du collège") ?> </legend>
<table class="table table-striped table-bordered table-hover table-condensed table-responsive" style="font-size:8pt;">
<thead>
<tr>
<th style='text-align:center'> <= </th>
<th colspan="3" style='text-align:center'> <?= _("Catégoerie ou Collège") ?> </th>
<th colspan="2" style='text-align:center'> <?= _("No Famille") ?> </th>
<th colspan="2" style='text-align:center'> <?= _("Familles") ?> </th>
</tr>
<tr>
<td colspan="8"> <button type="button" style="font-size:10pt;" class="form-control btn btn-danger" onclick="javascript:retirer_tous_adherent_importe_college();" > <?= "<== " . _("Retirer tous les membres de ce collège") ?> </button> </td>
</tr>
</thead>
<tbody>
<?php foreach ($adherents_college as $adherent_college):
$idBeneficiairemodel=$adherent_college['idBeneficiairemodel'];
$idCollege=$adherent_college['idCollege'];
?>
<tr valign="top">
<td align='center'> <input type="button" value="<=" onClick="javascript:retirer_un_adherent_importe_college('<?=$idBeneficiairemodel?>');" ></td>
<td align='center'><?= $this->nettoyer($adherent_college['categorie']) ?></td>
<td align='center'><?= $this->nettoyer($adherent_college['libelleCollege']) ?></td>
<td align='center'><?= $this->nettoyer($adherent_college['codeProduit']) ?></td>
<td align='center'><?= $this->nettoyer($adherent_college['numeroAdherent']) ?></td>
<td align='center'><?= $this->nettoyer($adherent_college['noFamille']) ?></td>
<td><?= $this->nettoyer($adherent_college['nom']) ?></td>
<td><?= $this->nettoyer($adherent_college['prenoms']) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<style>
.scroll-area {
height: 450px;
overflow-y: auto;
border-radius: 4px;
}
.sticky-top { z-index: 10; }
.x-small { font-size: 0.7rem; }
.table-sm td { padding: 8px 4px; }
</style>

View File

@ -1,4 +1,9 @@
<div id="div_erreur_excel" class="alert alert-danger" >
<H4> <?= $message_erreur_excel ?> </H4>
<input class="sr-only" type="text" id="succes_impot_execl" name="succes_impot_execl" value="<?= $succes_impot_execl ?>">
<div class="alert <?= ($succes_impot_execl == '1') ? 'alert-success' : 'alert-danger' ?> shadow-sm border-0 d-flex align-items-center">
<i class="fas <?= ($succes_impot_execl == '1') ? 'fa-check-circle' : 'fa-exclamation-triangle' ?> fa-2x me-3"></i>
<div>
<h6 class="alert-heading mb-1 fw-bold"><?= ($succes_impot_execl == '1') ? _("Analyse réussie") : _("Erreur d'analyse") ?></h6>
<span><?= $message_erreur_excel ?></span>
</div>
</div>
<input type="hidden" id="succes_impot_execl" value="<?= $succes_impot_execl ?>">

View File

@ -1,32 +1,66 @@
<legend> <?= _("Sélectionner un avenant pour importation OLD") ?> </legend>
<div class="mt-4 animate__animated animate__fadeIn">
<div class="alert alert-primary d-flex align-items-center mb-3 shadow-sm border-0">
<i class="fas fa-info-circle fa-lg me-3"></i>
<div>
<strong><?= _("Étape 3 :") ?></strong> <?= _("Veuillez sélectionner l'avenant auquel ces nouveaux assurés seront rattachés.") ?>
</div>
</div>
<table class="table table-striped table-bordered table-hover table-condensed table-responsive" style="font-size:10pt;">
<thead>
<tr>
<th style='text-align:center' > <?= _("Numéro") ?> </th>
<th style='text-align:center'> <?= _("Effet") ?> </th>
<th> <?= _("Libellé") ?> </th>
<th> <?= _("Commentaires") ?> </th>
<th> <?= _("Producteur") ?> </th>
<th style='text-align:center'> <?= _("Saisie") ?> </th>
<th style='text-align:center'> <?= _("Importer...") ?> </th>
</tr>
</thead>
<div class="table-responsive rounded shadow-sm border">
<table class="table table-hover align-middle mb-0" style="font-size: 0.9rem;">
<thead class="table-light text-muted">
<tr>
<th class="text-center py-3" width="10%"><?= _("N° Avenant") ?></th>
<th class="text-center" width="12%"><?= _("Date Effet") ?></th>
<th width="20%"><?= _("Mouvement") ?></th>
<th width="25%"><?= _("Motif / Commentaires") ?></th>
<th width="15%"><?= _("Auteur") ?></th>
<th class="text-center" width="18%"><?= _("Action") ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($avenants as $avenant):
$idAvenant = $avenant['idAvenant'];
?>
<tr class="transition-row">
<td class="text-center fw-bold text-primary">
<?= $this->nettoyer($avenant['numeroAvenant']) ?>
</td>
<td class="text-center">
<span class="badge bg-light text-dark border fw-bold px-2 py-1">
<?= dateLang($this->nettoyer($avenant['dateEffet'])) ?>
</span>
</td>
<td>
<div class="fw-bold"><?= $this->nettoyer($avenant['libelleAvenant']) ?></div>
<div class="text-muted x-small" style="font-size: 0.75rem;">
<i class="far fa-clock me-1"></i>Saisie le <?= dateheureLang($this->nettoyer($avenant['dateSysteme'])) ?>
</div>
</td>
<td>
<div class="text-muted small italic text-truncate" style="max-width: 250px;" title="<?= $this->nettoyer($avenant['motifavenant']) ?>">
<?= $this->nettoyer($avenant['motifavenant']) ?: '-' ?>
</div>
</td>
<td class="small">
<i class="fas fa-user-edit me-1 text-secondary"></i> <?= $this->nettoyer($avenant['utilisateur']) ?>
</td>
<td class="text-center">
<button type="button"
class="btn btn-info btn-sm px-3 shadow-sm text-white fw-bold w-100"
onclick="importer_modele_assure(<?= $idAvenant ?>);">
<i class="fas fa-file-import me-1"></i> <?= _("Lancer l'import") ?>
</button>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
<tbody>
<?php
foreach ($avenants as $avenant):
$idAvenant = $avenant['idAvenant'];
?>
<tr valign="top">
<td align='center'><?= $this->nettoyer($avenant['numeroAvenant']) ?></td>
<td align='center'><?= dateLang($this->nettoyer($avenant['dateEffet'])) ?></td>
<td><?= $this->nettoyer($avenant['libelleAvenant']) ?></td>
<td><?= $this->nettoyer($avenant['motifavenant']) ?></td>
<td><?= $this->nettoyer($avenant['utilisateur']) ?></td>
<td align='center'><?= dateheureLang($this->nettoyer($avenant['dateSysteme'])) ?></td>
<td> <button style='font-size:10pt;' type="button" class="form-control btn btn-info" onclick="javascript:importer_modele_assure(<?= $idAvenant ?>);"> <?= _("Importer...") ?> </button> </td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<style>
.transition-row { transition: all 0.2s ease; }
.transition-row:hover { background-color: rgba(13, 202, 240, 0.05) !important; }
.italic { font-style: italic; }
</style>

View File

@ -1,39 +1,42 @@
<div id="div_ged">
<?php if((isset($msgErreur)) && ($msgErreur>" ")) : ?>
<INPUT style='font-size:14pt; color:red; text-align:center;' class="form-control" type="text" value="<?= $msgErreur ?>" readonly >
<?php endif; ?>
<table class="table table-striped table-bordered table-hover table-condensed table-responsive" style="font-size:7pt;">
<thead>
<tr>
<th style='text-align:center'> Date </th>
<th style='text-align:center'> Src </th>
<th> <?= _("Souscripteur") ?> </th>
<th style='text-align:center'> <?= _("Police") ?> </th>
<th> <?= _("Prestataire") ?> </th>
<th> <?= _("Adhérent") ?> </th>
<th style='text-align:center' colspan="2"> <?= _("Bénéficiaire") ?> </th>
<th> Document </th>
<th style='text-align:center'> <?= _("Télécharger") ?> </th>
<div id="div_ged" class="table-responsive">
<table class="table table-hover align-middle mb-0" style="font-size:0.85rem;">
<thead class="bg-light text-muted">
<tr>
<th class="ps-3"><?= _("Date") ?></th>
<th><?= _("Source") ?></th>
<th><?= _("Police / Bénéficiaire") ?></th>
<th><?= _("Document") ?></th>
<th class="text-center pe-3"><?= _("Action") ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($geds as $ged):
$idGed=$this->nettoyer($ged['idGed']);
<?php foreach ($geds as $ged):
$cheminFichier = $this->nettoyer($ged['cheminFichier']);
?>
<tr valign="top">
<td align='center'><?= dateheureLang($this->nettoyer($ged['dateSysteme'])) ?></td>
<td align='center'><?= $this->nettoyer($ged['source']) ?></td>
<td><?= $this->nettoyer($ged['souscripteur']) ?></td>
<td align='center'><?= $this->nettoyer($ged['numeroPolice']) ?></td>
<td><?= $this->nettoyer($ged['prestataire']) ?></td>
<td><?= $this->nettoyer($ged['adherent']) ?></td>
<td align='center'><?= $this->nettoyer($ged['numeroBeneficiaire']) ?></td>
<td><?= $this->nettoyer($ged['beneficiaire']) ?></td>
<td><?= $this->nettoyer($ged['nomOrigine']) ?></td>
<td align="center">
<a style="font-size:8pt;" href="<?= $cheminFichier ?>" target="_blank" > <?= _("Télécharger") ?> </a>
<tr>
<td class="ps-3">
<div class="fw-bold"><?= dateheureLang($this->nettoyer($ged['dateSysteme'])) ?></div>
<div class="text-muted x-small"><?= $this->nettoyer($ged['souscripteur']) ?></div>
</td>
<td>
<span class="badge bg-secondary-subtle text-secondary"><?= $this->nettoyer($ged['source']) ?></span>
</td>
<td>
<div class="small"><i class="fas fa-file-contract me-1 opacity-50"></i> <?= $this->nettoyer($ged['numeroPolice']) ?></div>
<div class="fw-bold text-primary">
<?= $this->nettoyer($ged['numeroBeneficiaire']) ?> - <?= $this->nettoyer($ged['beneficiaire']) ?>
</div>
<div class="x-small text-muted italic"><?= $this->nettoyer($ged['adherent']) ?></div>
</td>
<td>
<div class="text-truncate" style="max-width: 200px;" title="<?= $this->nettoyer($ged['nomOrigine']) ?>">
<i class="far fa-file-pdf text-danger me-1"></i> <?= $this->nettoyer($ged['nomOrigine']) ?>
</div>
</td>
<td class="text-center pe-3">
<a href="<?= $cheminFichier ?>" target="_blank" class="btn btn-sm btn-outline-primary rounded-pill px-3">
<i class="fas fa-download me-1"></i> <?= _("Ouvrir") ?>
</a>
</td>
</tr>
<?php endforeach; ?>

View File

@ -1,43 +1,92 @@
<table class="table table-striped table-bordered table-condensed table-responsive" style="font-size:8pt;">
<thead>
<tr>
<th style='text-align:center'> <?= _("Date Effet") ?> </th>
<th style='text-align:center'> Mvt </th>
<th style='text-align:center'> <?= _("Uilisateur") ?> </th>
<th style='text-align:center'> <?= _("Adhérent") ?> </th>
<th style='text-align:center'> <?= _("Bénéficiaire") ?> </th>
<th style='text-align:center'> <?= _("Matricule") ?> </th>
<th style='text-align:center'> <?= _("Lien") ?> </th>
<th style='text-align:center'> <?= _("Saisie") ?> </th>
<th style='text-align:center'> <?= _("Validé") ?> </th>
<th style='text-align:center'> <?= _("Validation") ?> </th>
</tr>
</thead>
<tbody>
<?php foreach ($mouvementassures as $mvt):
$idMvt = $this->nettoyer($mvt['id']);
$valide = $this->nettoyer($mvt['valide']);
$libelleSensMouvement = est_anglophone() ? $mvt['libelleSensMouvementEng'] : $mvt['libelleSensMouvement'];
?>
<tr valign="top">
<td align='center'> <?= dateLang($this->nettoyer($mvt['dateEffet']), $_SESSION['lang']) ?> </td>
<td align='center'><?= $libelleSensMouvement ?></td>
<td align='center'><?= $this->nettoyer($mvt['codeUtilisateur']) ?></td>
<td><?= $this->nettoyer($mvt['adherent']) ?></td>
<td><?= $this->nettoyer($mvt['beneficiaire']) ?></td>
<td align='center'><?= $this->nettoyer($mvt['numeroBeneficiaire']) ?></td>
<td align='center'><?= $this->nettoyer($mvt['codeLienParente']) ?></td>
<td align='center'><?= dateheureLang($this->nettoyer($mvt['dateSysteme'])) ?></td>
<?php if ($valide=="1"): ?>
<td align='center'> <input type="checkbox" checked disabled></td>
<?php else: ?>
<td align='center'> <input type="checkbox" disabled></td>
<?php endif; ?>
<td align='center'><?= dateheureLang($this->nettoyer($mvt['dateValidation'])) ?></td>
<td align='center'><?= $this->nettoyer($mvt['userValidation']) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<div class="table-responsive shadow-sm rounded border animate__animated animate__fadeIn">
<table class="table table-hover align-middle mb-0 tabliste compact" style="font-size: 0.85rem;">
<thead class="table-light text-secondary">
<tr>
<th class="text-center border-0 py-3"><?= _("Date Effet") ?></th>
<th class="text-center border-0"><?= _("Mvt") ?></th>
<th class="border-0"><?= _("Bénéficiaire / Matricule") ?></th>
<th class="border-0"><?= _("Adhérent") ?></th>
<th class="text-center border-0"><?= _("Lien") ?></th>
<th class="text-center border-0"><?= _("Saisie / Par") ?></th>
<th class="text-center border-0"><?= _("Statut") ?></th>
<th class="text-center border-0"><?= _("Validation") ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($mouvementassures as $mvt):
$idMvt = $this->nettoyer($mvt['id']);
$valide = $this->nettoyer($mvt['valide']);
$sensMvt = $mvt['sensMouvement']; // On suppose que '0' = Entrée, '1' = Sortie
$libelleSensMouvement = est_anglophone() ? $mvt['libelleSensMouvementEng'] : $mvt['libelleSensMouvement'];
//var_dump($codeMvt, $libelleSensMouvement);
?>
<tr>
<td class="text-center fw-bold text-dark">
<?= dateLang($this->nettoyer($mvt['dateEffet']), $_SESSION['lang']) ?>
</td>
<td class="text-center">
<?php if ($sensMvt == '1'): // Entrée ?>
<span class="badge rounded-pill bg-success-subtle text-success border border-success-subtle px-3">
<i class="fas fa-sign-in-alt me-1"></i> <?= $libelleSensMouvement ?>
</span>
<?php else: // Sortie ?>
<span class="badge rounded-pill bg-danger-subtle text-danger border border-danger-subtle px-3">
<i class="fas fa-sign-out-alt me-1"></i> <?= $libelleSensMouvement ?>
</span>
<?php endif; ?>
</td>
<td>
<div class="fw-bold text-uppercase"><?= $this->nettoyer($mvt['beneficiaire']) ?></div>
<div class="text-muted x-small"><i class="fas fa-id-card me-1"></i><?= $this->nettoyer($mvt['numeroBeneficiaire']) ?></div>
</td>
<td class="small">
<i class="fas fa-user-tie text-secondary me-1"></i> <?= $this->nettoyer($mvt['adherent']) ?>
</td>
<td class="text-center">
<span class="badge bg-light text-secondary border"><?= $this->nettoyer($mvt['codeLienParente']) ?></span>
</td>
<td class="text-center">
<div class="small"><?= dateheureLang($this->nettoyer($mvt['dateSysteme'])) ?></div>
<div class="x-small text-muted fw-bold"><?= $this->nettoyer($mvt['codeUtilisateur']) ?></div>
</td>
<td class="text-center">
<?php if ($valide == "1"): ?>
<span class="text-success shadow-sm" title="<?= _('Validé') ?>">
<i class="fas fa-check-circle fa-lg"></i>
</span>
<?php else: ?>
<span class="text-warning opacity-50" title="<?= _('En attente') ?>">
<i class="fas fa-clock fa-lg"></i>
</span>
<?php endif; ?>
</td>
<td class="text-center small">
<?php if ($valide == "1"): ?>
<div class="fw-bold text-dark"><?= $this->nettoyer($mvt['userValidation']) ?></div>
<div class="x-small text-muted"><?= dateheureLang($this->nettoyer($mvt['dateValidation'])) ?></div>
<?php else: ?>
<span class="text-muted italic small"><?= _("En attente")?></span>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<style>
.x-small { font-size: 0.7rem; }
.italic { font-style: italic; }
.bg-success-subtle { background-color: #d1e7dd; }
.bg-danger-subtle { background-color: #f8d7da; }
</style>

View File

@ -1,31 +1,65 @@
<div id="div_detail_sp">
<div id="div_detail_sp" class="animate__animated animate__fadeIn">
<div class="d-flex align-items-center bg-primary text-light p-3 rounded-top shadow-sm">
<i class="fas fa-layer-group me-3"></i>
<h6 class="mb-0 fw-bold text-uppercase"><?= _("Analyse du Rapport S / P par Catégorie") ?></h6>
</div>
<input style='text-align:center; font-size:11pt; background-color:blue;color:white;' class="form-control" type="text" value="<?= _("RAPPORT S / P POLICE PAR CATEGORIE") ?>" disabled >
<div class="card border-0 shadow-sm rounded-0 rounded-bottom">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0 text-center" style="font-size: 0.9rem;">
<thead class="bg-light text-muted small fw-bold">
<tr>
<th class="py-3" width="10%"><?= _("Produit") ?></th>
<th width="18%"><?= _("Primes Totales") ?></th>
<th width="18%"><?= _("Primes Acquises") ?></th>
<th width="18%"><?= _("Consommations") ?></th>
<th width="18%"><?= _("S/P (Acquis)") ?></th>
<th width="18%"><?= _("S/P Global") ?></th>
</tr>
</thead>
<table class="table table-responsive table-condensed" style='font-size:10pt; text-align:center'>
<thead>
<tr>
<th width="10%" style='text-align:center'>Cat</th>
<th width="18%" style='text-align:center'> <?= _("Primes Totales") ?> </th>
<th width="18%" style='text-align:center'> <?= _("Primes Acquises") ?> </th>
<th width="18%" style='text-align:center'> <?= _("Consommations") ?> </th>
<th width="18%" style='text-align:center'> <?= _("Rapport S/P") ?> </th>
<th width="18%" style='text-align:center'> <?= _("S/P Global") ?> </th>
</tr>
</thead>
<tbody>
<?php foreach ($sppolices as $sppolice):
// Logique de couleur pour le ratio
$ratio = (float)str_replace(',', '.', $sppolice['rapportsp']);
$statusClass = ($ratio >= 100) ? 'text-danger fw-bold' : (($ratio >= 75) ? 'text-warning fw-bold' : 'text-success fw-bold');
$progressColor = ($ratio >= 100) ? 'bg-danger' : (($ratio >= 75) ? 'bg-warning' : 'bg-success');
?>
<tr>
<td>
<span class="badge bg-secondary-subtle text-dark border px-3 py-2"><?= $this->nettoyer($sppolice['codeProduit']) ?></span>
</td>
<tbody>
<?php foreach ($sppolices as $sppolice):
?>
<tr valign="top">
<td> <?= $this->nettoyer($sppolice['codeProduit']) ?> </td>
<td> <?= format_N($this->nettoyer($sppolice['primestat'])) ?> </td>
<td> <?= format_N($this->nettoyer($sppolice['prime_acquise'])) ?> </td>
<td> <?= format_N($this->nettoyer($sppolice['consommation'])) ?> </td>
<td> <?= $this->nettoyer($sppolice['rapportsp']) ?> </td>
<td> <?= $this->nettoyer($sppolice['rapportspgeneral']) ?> </td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<td class="text-muted"><?= format_N($this->nettoyer($sppolice['primestat'])) ?></td>
<td class="fw-semibold text-dark"><?= format_N($this->nettoyer($sppolice['prime_acquise'])) ?></td>
<td class="text-danger fw-semibold">
<?= format_N($this->nettoyer($sppolice['consommation'])) ?>
</td>
<td>
<div class="<?= $statusClass ?> mb-1 fs-6">
<?= $this->nettoyer($sppolice['rapportsp']) ?> %
</div>
<div class="progress mx-auto" style="height: 4px; width: 60px;">
<div class="progress-bar <?= $progressColor ?>" role="progressbar" style="width: <?= min($ratio, 100) ?>%"></div>
</div>
</td>
<td class="text-muted small">
<?= $this->nettoyer($sppolice['rapportspgeneral']) ?> %
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<style>
.bg-secondary-subtle { background-color: #f8f9fa; }
.table-hover tbody tr:hover { background-color: rgba(13, 110, 253, 0.02); }
.progress { background-color: #e9ecef; border-radius: 10px; }
</style>

View File

@ -1,32 +1,72 @@
<div id="div_detail_sp">
<div id="div_detail_sp" class="animate__animated animate__fadeIn">
<div class="d-flex align-items-center bg-indigo text-light p-3 rounded-top shadow-sm">
<i class="fas fa-users-cog me-3"></i>
<h6 class="mb-0 fw-bold text-uppercase"><?= _("Analyse S / P détaillée par Collège") ?></h6>
</div>
<input style='text-align:center; font-size:11pt; background-color:blue;color:white;' class="form-control" type="text" value="<?= _("RAPPORT S / P POLICE PAR COLEGGE") ?>" disabled >
<div class="card border-0 shadow-sm rounded-0 rounded-bottom">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0" style="font-size: 0.88rem;">
<thead class="bg-light text-muted small fw-bold text-center">
<tr>
<th class="py-3 text-start ps-3" colspan="2"><?= _("Identification du Collège") ?></th>
<th><?= _("Primes Totales") ?></th>
<th><?= _("Primes Acquises") ?></th>
<th><?= _("Consommations") ?></th>
<th width="15%"><?= _("Ratio S/P (Acquis)") ?></th>
<th width="12%"><?= _("S/P Global") ?></th>
</tr>
</thead>
<table class="table table-responsive table-condensed" style='font-size:10pt; text-align:center'>
<thead>
<tr>
<th colspan="2" width="20%" style='text-align:center'> <?= _("Collège") ?> </th>
<th width="16%" style='text-align:center'> <?= _("Primes Totales") ?> </th>
<th width="16%" style='text-align:center'> <?= _("Primes Acquises") ?> </th>
<th width="16%" style='text-align:center'> <?= _("Consommations") ?> </th>
<th width="16%" style='text-align:center'> <?= _("Rapport S/P") ?> </th>
<th width="16%" style='text-align:center'> <?= _("S/P Global") ?> </th>
</tr>
</thead>
<tbody>
<?php foreach ($sppolices as $sppolice):
$ratio = (float)str_replace(',', '.', $sppolice['rapportsp']);
// Logique d'alerte visuelle
$bgRatio = 'bg-success';
$textRatio = 'text-success';
if ($ratio >= 100) { $bgRatio = 'bg-danger'; $textRatio = 'text-danger'; }
elseif ($ratio >= 80) { $bgRatio = 'bg-warning'; $textRatio = 'text-warning'; }
?>
<tr class="text-center">
<td class="text-start ps-3" width="8%">
<span class="badge bg-indigo-subtle text-indigo border border-indigo-subtle"><?= $this->nettoyer($sppolice['codeProduit']) ?></span>
</td>
<td class="text-start fw-bold">
<?= $this->nettoyer($sppolice['libelleCollege']) ?>
</td>
<tbody>
<?php foreach ($sppolices as $sppolice):
?>
<tr valign="top">
<td> <?= $this->nettoyer($sppolice['codeProduit']) ?> </td>
<td> <?= $this->nettoyer($sppolice['libelleCollege']) ?> </td>
<td> <?= format_N($this->nettoyer($sppolice['primestat'])) ?> </td>
<td> <?= format_N($this->nettoyer($sppolice['prime_acquise'])) ?> </td>
<td> <?= format_N($this->nettoyer($sppolice['consommation'])) ?> </td>
<td> <?= $this->nettoyer($sppolice['rapportsp']) ?> </td>
<td> <?= $this->nettoyer($sppolice['rapportspgeneral']) ?> </td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<td class="text-muted small"><?= format_N($this->nettoyer($sppolice['primestat'])) ?></td>
<td class="fw-semibold text-dark"><?= format_N($this->nettoyer($sppolice['prime_acquise'])) ?></td>
<td class="text-danger fw-semibold"><?= format_N($this->nettoyer($sppolice['consommation'])) ?></td>
<td>
<div class="d-flex align-items-center justify-content-center">
<span class="me-2 <?= $textRatio ?> fw-bold"><?= $this->nettoyer($sppolice['rapportsp']) ?>%</span>
<div class="progress flex-grow-1 d-none d-lg-flex" style="height: 6px; max-width: 50px;">
<div class="progress-bar <?= $bgRatio ?>" role="progressbar" style="width: <?= min($ratio, 100) ?>%"></div>
</div>
</div>
</td>
<td class="text-muted italic small">
<?= $this->nettoyer($sppolice['rapportspgeneral']) ?>%
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<style>
.bg-indigo { background-color: #6610f2; }
.text-indigo { color: #6610f2; }
.bg-indigo-subtle { background-color: #e0d1ff; }
.border-indigo-subtle { border-color: #c2a6ff !important; }
.italic { font-style: italic; }
.table-hover tbody tr:hover { background-color: #f8f9ff; }
</style>

View File

@ -1,26 +1,79 @@
<div id="div_detail_sp">
<div id="div_detail_sp" class="animate__animated animate__fadeIn">
<div class="alert alert-dark border-0 shadow-sm d-flex justify-content-between align-items-center py-2 px-3 mb-4">
<h6 class="mb-0 fw-bold text-uppercase small text-dark">
<i class="fas fa-microscope me-2"></i><?= _("Analyse détaillée : Police Entière") ?>
</h6>
<span class="badge bg-white text-dark small"><?= date('d/m/Y H:i') ?></span>
</div>
<input style='text-align:center; font-size:11pt; background-color:blue;color:white;' class="form-control" type="text" value="<?= _("RAPPORT S / P POLICE ENTIERE") ?>" disabled >
<div class="row g-3 mb-4">
<div class="col-md-4">
<div class="card h-100 border-0 shadow-sm bg-white">
<div class="card-body text-center">
<div class="text-muted small fw-bold text-uppercase mb-2"><?= _("Primes Totales (Stat)") ?></div>
<h4 class="fw-bold mb-0 text-dark"><?= format_N($this->nettoyer($sppolice['primestat'])) ?></h4>
<div class="x-small text-muted mt-1 italic"><?= _("Volume global") ?></div>
</div>
</div>
</div>
<table class="table table-responsive table-condensed" style='font-size:10pt; text-align:center'>
<thead>
<tr>
<th width="20%" style='text-align:center'> <?= _("Primes Totales") ?> </th>
<th width="20%" style='text-align:center'> <?= _("Primes Acquises") ?> </th>
<th width="20%" style='text-align:center'> <?= _("Consommations") ?> </th>
<th width="20%" style='text-align:center'> <?= _("Rapport S/P") ?> </th>
<th width="20%" style='text-align:center'> <?= _("S/P Global") ?> </th>
</tr>
</thead>
<div class="col-md-4">
<div class="card h-100 border-0 shadow-sm bg-white border-bottom border-primary border-4">
<div class="card-body text-center">
<div class="text-primary small fw-bold text-uppercase mb-2"><?= _("Primes Acquises") ?></div>
<h4 class="fw-bold mb-0"><?= format_N($this->nettoyer($sppolice['prime_acquise'])) ?></h4>
<div class="x-small text-muted mt-1"><?= _("Quote-part au prorata") ?></div>
</div>
</div>
</div>
<tbody>
<tr>
<td> <?= format_N($this->nettoyer($sppolice['primestat'])) ?> </td>
<td> <?= format_N($this->nettoyer($sppolice['prime_acquise'])) ?> </td>
<td> <?= format_N($this->nettoyer($sppolice['consommation'])) ?> </td>
<td> <?= $this->nettoyer($sppolice['rapportsp']) ?> </td>
<td> <?= $this->nettoyer($sppolice['rapportspgeneral']) ?> </td>
</tr>
</tbody>
</table>
</div>
<div class="col-md-4">
<div class="card h-100 border-0 shadow-sm bg-white border-bottom border-danger border-4">
<div class="card-body text-center">
<div class="text-danger small fw-bold text-uppercase mb-2"><?= _("Consommations") ?></div>
<h4 class="fw-bold mb-0 text-danger"><?= format_N($this->nettoyer($sppolice['consommation'])) ?></h4>
<div class="x-small text-muted mt-1"><?= _("Sinistres payés + Provisions") ?></div>
</div>
</div>
</div>
</div>
<div class="row g-3">
<div class="col-md-6">
<?php
$sp_acquis = (float)str_replace(',', '.', $sppolice['rapportsp']);
$color_acquis = $sp_acquis > 80 ? 'danger' : ($sp_acquis > 60 ? 'warning' : 'success');
?>
<div class="card border-0 shadow-sm bg-<?= $color_acquis ?> text-dark">
<div class="card-body d-flex align-items-center">
<div class="flex-grow-1">
<h6 class="small fw-bold text-uppercase opacity-75"><?= _("Rapport S/P (Acquises)") ?></h6>
<h2 class="fw-bold mb-0"><?= $this->nettoyer($sppolice['rapportsp']) ?> %</h2>
</div>
<div class="fs-1 opacity-25">
<i class="fas fa-chart-pie"></i>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card border-0 shadow-sm bg-secondary text-dark">
<div class="card-body d-flex align-items-center">
<div class="flex-grow-1">
<h6 class="small fw-bold text-uppercase opacity-75"><?= _("S/P Global (Stat)") ?></h6>
<h2 class="fw-bold mb-0"><?= $this->nettoyer($sppolice['rapportspgeneral']) ?> %</h2>
</div>
<div class="fs-1 opacity-25">
<i class="fas fa-percentage"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<style>
.x-small { font-size: 0.75rem; }
.italic { font-style: italic; }
</style>

View File

@ -1,63 +1,142 @@
<div id="div_detail_sp">
<table class="table table-striped table-bordered table-hover table-condensed table-responsive" style="font-size:7pt;">
<thead>
<tr>
<th rowspan="2" colspan="2" style='text-align:center'> <?= _("Adhérent") ?> </th>
<?php
$this->titre = "INTER-SANTE - Synthèse Consommations";
// Initialisation des totaux pour le footer
$totStat = $totTtc = $totAll = 0;
$natures = ['OUT', 'INP', 'OPT', 'MON', 'DEN', 'FUN'];
$totPlafonds = array_fill_keys($natures, 0);
$totConsos = array_fill_keys($natures, 0);
?>
<th colspan="2" style='text-align:center'> <?= _("Primes") ?> </th>
<style>
/* --- STYLES ÉCRAN --- */
.nowrap { white-space: nowrap !important; }
.table-responsive-custom {
overflow: auto;
max-height: 70vh;
border: 1px solid #dee2e6;
background: white;
}
<th colspan="6" style='text-align:center'> <?= _("Plafonds") ?> </th>
/* Colonne Nom figée à gauche */
.sticky-col {
position: sticky;
left: 0;
z-index: 5;
background-color: #f8f9fa !important;
border-right: 2px solid #dee2e6 !important;
}
<th colspan="7" style='text-align:center'> <?= _("Consommations") ?> </th>
</tr>
/* En-tête figé en haut */
.sticky-header {
position: sticky;
top: 0;
z-index: 10;
}
<tr>
<th style='text-align:center'> Stat </th>
<th style='text-align:center'> <?= _("TTC") ?> </th>
<th style='text-align:center'> OUT </th>
<th style='text-align:center'> INP </th>
<th style='text-align:center'> OPT </th>
<th style='text-align:center'> MON </th>
<th style='text-align:center'> DEN </th>
<th style='text-align:center'> FUN </th>
<th style='text-align:center'> OUT </th>
<th style='text-align:center'> INP </th>
<th style='text-align:center'> OPT </th>
<th style='text-align:center'> MON </th>
<th style='text-align:center'> DEN </th>
<th style='text-align:center'> FUN </th>
<th style='text-align:center'> ALL </th>
</tr>
</thead>
<tbody>
<?php foreach ($conommations as $conommation): ?>
<tr valign="top">
<td><?= $this->nettoyer($conommation['nomAdherent']) ?></td>
<td align='center'><?= $this->nettoyer($conommation['numeroAdherent']) ?></td>
<td align='center'><?= format_N($this->nettoyer($conommation['primeStat'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($conommation['primeTtc'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($conommation['plafond_OUT'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($conommation['plafond_INP'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($conommation['plafond_OPT'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($conommation['plafond_MON'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($conommation['plafond_DEN'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($conommation['plafond_FUN'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($conommation['consommation_OUT'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($conommation['consommation_INP'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($conommation['consommation_OPT'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($conommation['consommation_MON'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($conommation['consommation_DEN'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($conommation['consommation_FUN'])) ?></td>
/* --- STYLES IMPRESSION PDF --- */
@media print {
@page { size: A4 landscape; margin: 10mm; }
body * { visibility: hidden; }
#section-to-print, #section-to-print * { visibility: visible; }
#section-to-print {
position: absolute;
left: 0; top: 0; width: 100%;
}
.no-print { display: none !important; }
.table-responsive-custom { overflow: visible !important; max-height: none !important; }
.sticky-col { position: static !important; background-color: white !important; }
table { font-size: 7pt !important; width: 100% !important; }
.nowrap { white-space: nowrap !important; }
body { -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; }
}
</style>
<td align='center'><?= format_N($this->nettoyer($conommation['consommation_ALL'])) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<div class="container-fluid py-3" id="main-container">
<div id="section-to-print">
<div class="d-none d-print-block mb-3 border-bottom pb-2">
<h3 class="text-uppercase"><?= _("Synthèse des Consommations Adhérents") ?></h3>
<p>Police: <b><?= $_SESSION['numeroPolice_C'] ?></b> | Date: <?= date('d/m/Y H:i') ?></p>
</div>
<div id="div_detail_sp" class="table-responsive-custom shadow-sm rounded">
<table class="table table-sm table-hover align-middle mb-0" style="font-size: 0.75rem;">
<thead class="text-white sticky-header">
<tr class="bg-dark text-center">
<th colspan="2" class="py-2 sticky-col bg-dark"><?= _("Bénéficiaire") ?></th>
<th colspan="2" class="bg-primary bg-opacity-75"><?= _("Primes") ?></th>
<th colspan="6" class="bg-info bg-opacity-50 text-dark"><?= _("Plafonds") ?></th>
<th colspan="7" class="bg-danger bg-opacity-75"><?= _("Consommations") ?></th>
</tr>
<tr class="bg-light text-dark small text-center border-bottom">
<th class="sticky-col bg-light"><?= _("Nom & Prénoms") ?></th>
<th class="border-end"> Adh</th>
<th>Stat</th>
<th class="border-end">TTC</th>
<?php foreach ($natures as $n): ?><th><?= $n ?></th><?php endforeach; ?>
<?php foreach ($natures as $n): ?><th class="border-start border-white"><?= $n ?></th><?php endforeach; ?>
<th class="bg-dark text-white fw-bold">TOTAL</th>
</tr>
</thead>
<tbody>
<?php foreach ($conommations as $conso):
// Cumul des totaux
$totStat += (float)$conso['primeStat'];
$totTtc += (float)$conso['primeTtc'];
$totAll += (float)$conso['consommation_ALL'];
?>
<tr class="text-center">
<td class="text-start ps-2 sticky-col fw-bold text-uppercase"><?= $this->nettoyer($conso['nomAdherent']) ?></td>
<td class="border-end text-muted small"><?= $this->nettoyer($conso['numeroAdherent']) ?></td>
<td class="nowrap"><?= format_N($conso['primeStat']) ?></td>
<td class="nowrap border-end fw-semibold"><?= format_N($conso['primeTtc']) ?></td>
<?php foreach ($natures as $n):
$totPlafonds[$n] += (float)$conso['plafond_'.$n];
?>
<td class="nowrap text-muted"><?= format_N($conso['plafond_'.$n]) ?></td>
<?php endforeach; ?>
<?php foreach ($natures as $n):
$totConsos[$n] += (float)$conso['consommation_'.$n];
?>
<td class="nowrap bg-danger bg-opacity-10 text-danger fw-medium border-start border-white">
<?= format_N($conso['consommation_'.$n]) ?>
</td>
<?php endforeach; ?>
<td class="nowrap bg-dark text-white fw-bold"><?= format_N($conso['consommation_ALL']) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
<tfoot class="bg-warning bg-opacity-10 fw-bold border-top border-dark text-center shadow-lg sticky-bottom">
<tr>
<td colspan="2" class="text-end pe-3 bg-dark text-white"><?= _("TOTAL GÉNÉRAL") ?> :</td>
<td class="nowrap bg-primary bg-opacity-25"><?= format_N($totStat) ?></td>
<td class="nowrap bg-primary bg-opacity-25 border-end border-dark"><?= format_N($totTtc) ?></td>
<?php foreach ($natures as $n): ?><td class="nowrap bg-info bg-opacity-25"><?= format_N($totPlafonds[$n]) ?></td><?php endforeach; ?>
<?php foreach ($natures as $n): ?><td class="nowrap bg-danger bg-opacity-25 text-danger border-start border-white"><?= format_N($totConsos[$n]) ?></td><?php endforeach; ?>
<td class="nowrap bg-dark text-warning fw-bolder fs-6 border-start border-white"><?= format_N($totAll) ?></td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
<script>
// Script pour s'assurer que le scroll est fluide et les colonnes figées bien alignées
document.addEventListener('DOMContentLoaded', function() {
const tableCont = document.querySelector('.table-responsive-custom');
if(tableCont) {
tableCont.addEventListener('scroll', function() {
// Optionnel : ajouter une ombre sur la colonne figée lors du scroll
});
}
});
</script>

View File

@ -1,89 +1,125 @@
<?php
$this->titre = "INTER-SANTE - GED Police";
<?php $this->titre = "INTER-SANTE - GED Police"; ?>
/*
var_dump
(
array(
"cheminGed" => $_SESSION['cheminGed'],
"lienRh" => $_SESSION['lienRh_C'],
"dossierGed" => $_SESSION['dossierGed'],
)
);
*/
?>
<div id="div_police" class="container-fluid py-4 animate__animated animate__fadeIn">
<h1 class="text-primary"><i class="fas fa-folder-open me-2"></i></i> <?= _("Gestion Électronique des Documents (GED)") ?></h1>
<legend> <?= _("GED Police => Limité à 50 documents => Filtrer sur période pour obtenir le résultat souhaité") ?> </legend>
<div class="card-header d-flex justify-content-between align-items-center py-1">
<h4 class="fw-bold text-secondary mb-0">
<?= _("Police") ?> :
<span class="text-primary"><?= $this->nettoyer($_SESSION['numeroPolice_C']) ?></span>
</h4>
<span class="badge bg-info-subtle text-dark border border-info-subtle px-3 py-2">
<i class="fas fa-info-circle me-1"></i> <?= _("Limité aux 50 derniers documents") ?>
</span>
</div>
<form enctype="multipart/form-data" action="Gedpolice" method="post">
<table class="table table-responsive table-condensed" style='font-size:10pt;'>
<tbody>
<tr>
<td width="7%" > <?= _("Période du") ?> </td>
<td width="15%" ><INPUT style='text-align:center; font-size:10pt;' class="form-control datepicker" TYPE="text" id="d1" NAME="d1" value="<?= dateLang($_SESSION['dUneSemaineAvant_C'], $_SESSION['lang']) ?>" required></td>
<?php if((isset($msgErreur)) && ($msgErreur > " ")) : ?>
<div class="alert alert-danger shadow-sm d-flex align-items-center" role="alert">
<i class="fas fa-exclamation-triangle me-2 fs-4"></i>
<div><?= $msgErreur ?></div>
</div>
<?php endif; ?>
<td width="7%" align="center" > <?= _("au") ?> </td>
<td width="15%" ><INPUT style='text-align:center; font-size:10pt;' class="form-control datepicker" TYPE="text" id="d2" NAME="d2" value="<?= dateCouranteLang($_SESSION['lang']) ?>" required></td>
<div class="row g-4 mt-1">
<div class="col-xl-4">
<div class="card shadow-sm border-0 h-100">
<div class="card-header bg-white py-3">
<h6 class="mb-0 fw-bold"><i class="fas fa-filter me-2"></i><?= _("Actions & Filtres") ?></h6>
</div>
<div class="card-body">
<div class="mb-4">
<label class="form-label small fw-bold text-muted text-uppercase"><?= _("Période de recherche") ?></label>
<div class="input-group mb-2">
<span class="input-group-text small"><?= _("Du") ?></span>
<input type="text" id="d1" name="d1" class="form-control datepicker text-center"
value="<?= dateLang($_SESSION['dUneSemaineAvant_C'], $_SESSION['lang']) ?>" required>
</div>
<div class="input-group mb-3">
<span class="input-group-text small"><?= _("Au") ?></span>
<input type="text" id="d2" name="d2" class="form-control datepicker text-center"
value="<?= dateCouranteLang($_SESSION['lang']) ?>" required>
</div>
<label class="form-label small fw-bold text-muted text-uppercase"><?= _("Nom du document") ?></label>
<input type="text" id="nomOrigine" name="nomOrigine" class="form-control mb-3" placeholder="Ex: Contrat...">
<button type="button" class="btn btn-primary w-100 fw-bold" onclick="lister_ged_police();">
<i class="fas fa-sync-alt me-2"></i><?= _("Actualiser la liste") ?>
</button>
</div>
<td align="center" width="4%" > Doc </td>
<td colspan="1"> <INPUT style='font-size:10pt;' class="form-control" type="text" id="nomOrigine" name="nomOrigine" > </td>
<hr class="text-muted opacity-25">
<td width="2%"> </td>
<td > <button style='font-size:10pt;' type="button" class="form-control btn btn-primary" onclick="javascript:lister_ged_police();"><?= _("Actualiser...") ?></button> </td>
</tr>
<tr>
<td> <?= _("Document") ?> </td>
<td colspan="5"> <input style="font-size: 15px; height: 40px" class="form-control btn btn-info" name="fichier_upload" type="file" id="fichier_upload" /> </td>
<form enctype="multipart/form-data" action="Gedpolice" method="post" class="mt-4">
<label class="form-label small fw-bold text-muted text-uppercase"><?= _("Nouveau document") ?></label>
<div class="mb-3">
<input class="form-control" name="fichier_upload" type="file" id="fichier_upload" required>
<div class="form-text x-small"><?= _("Sélectionnez un fichier pour l'ajouter à cette police.") ?></div>
</div>
<button type="submit" name="submit" class="btn btn-success w-100 fw-bold">
<i class="fas fa-cloud-upload-alt me-2"></i><?= _("Envoyer le fichier") ?>
</button>
</form>
</div>
</div>
</div>
<td> </td>
<td> <input style='font-size:10pt;' class="form-control btn btn-primary" type="submit" name="submit" value="<?= _("Envoyer") ?>" /> </td>
</tr>
</tbody>
</table>
</form>
<div class="col-xl-8">
<div class="card shadow-sm border-0 h-100">
<div id="div_ged" class="table-responsive">
<table class="table table-hover align-middle mb-0" style="font-size:0.85rem;">
<thead class="bg-light text-muted">
<tr>
<th class="ps-3"><?= _("Date") ?></th>
<th><?= _("Source") ?></th>
<th><?= _("Police / Bénéficiaire") ?></th>
<th><?= _("Document") ?></th>
<th class="text-center pe-3"><?= _("Action") ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($geds as $ged):
$cheminFichier = $this->nettoyer($ged['cheminFichier']);
?>
<tr>
<td class="ps-3">
<div class="fw-bold"><?= dateheureLang($this->nettoyer($ged['dateSysteme'])) ?></div>
<div class="text-muted x-small"><?= $this->nettoyer($ged['souscripteur']) ?></div>
</td>
<td>
<span class="badge bg-secondary-subtle text-secondary"><?= $this->nettoyer($ged['source']) ?></span>
</td>
<td>
<div class="small"><i class="fas fa-file-contract me-1 opacity-50"></i> <?= $this->nettoyer($ged['numeroPolice']) ?></div>
<div class="fw-bold text-primary">
<?= $this->nettoyer($ged['numeroBeneficiaire']) ?> - <?= $this->nettoyer($ged['beneficiaire']) ?>
</div>
<div class="x-small text-muted italic"><?= $this->nettoyer($ged['adherent']) ?></div>
</td>
<td>
<div class="text-truncate" style="max-width: 200px;" title="<?= $this->nettoyer($ged['nomOrigine']) ?>">
<i class="far fa-file-pdf text-danger me-1"></i> <?= $this->nettoyer($ged['nomOrigine']) ?>
</div>
</td>
<td class="text-center pe-3">
<a href="<?= $cheminFichier ?>" target="_blank" class="btn btn-sm btn-outline-primary rounded-pill px-3">
<i class="fas fa-download me-1"></i> <?= _("Ouvrir") ?>
</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div id="div_ged">
<?php if((isset($msgErreur)) && ($msgErreur>" ")) : ?>
<INPUT style='font-size:14pt; color:red; text-align:center;' class="form-control" type="text" value="<?= $msgErreur ?>" readonly >
<?php endif; ?>
<table class="table table-striped table-bordered table-hover table-condensed table-responsive" style="font-size:7pt;">
<thead>
<tr>
<th style='text-align:center'> Date </th>
<th style='text-align:center'> Src </th>
<th> <?= _("Souscripteur") ?> </th>
<th style='text-align:center'> <?= _("Police") ?> </th>
<th> <?= _("Prestataire") ?> </th>
<th> <?= _("Adhérent") ?> </th>
<th style='text-align:center' colspan="2"> <?= _("Bénéficiaire") ?> </th>
<th> Document </th>
<th style='text-align:center'> <?= _("Télécharger") ?> </th>
</thead>
<tbody>
<?php foreach ($geds as $ged):
$idGed=$this->nettoyer($ged['idGed']);
$cheminFichier = $this->nettoyer($ged['cheminFichier']);
?>
<tr valign="top">
<td align='center'><?= dateheureLang($this->nettoyer($ged['dateSysteme'])) ?></td>
<td align='center'><?= $this->nettoyer($ged['source']) ?></td>
<td><?= $this->nettoyer($ged['souscripteur']) ?></td>
<td align='center'><?= $this->nettoyer($ged['numeroPolice']) ?></td>
<td><?= $this->nettoyer($ged['prestataire']) ?></td>
<td><?= $this->nettoyer($ged['adherent']) ?></td>
<td align='center'><?= $this->nettoyer($ged['numeroBeneficiaire']) ?></td>
<td><?= $this->nettoyer($ged['beneficiaire']) ?></td>
<td><?= $this->nettoyer($ged['nomOrigine']) ?></td>
<td align="center">
<a style="font-size:8pt;" href="<?= $cheminFichier ?>" target="_blank" > <?= _("Télécharger") ?> </a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<style>
.x-small { font-size: 0.75rem; }
.italic { font-style: italic; }
.table-responsive { max-height: 700px; overflow-y: auto; }
.bg-warning-subtle { background-color: #fff3cd !important; }
</style>

View File

@ -1,5 +1,7 @@
<?php
$etatPolice = $this->nettoyer($police['etatPolice']);
$codeEtat = $this->nettoyer($police['codeEtatPolice']);
?>
<div id="div_liste_adherent" class="container-fluid py-1 animate__animated animate__fadeIn">
<input type="hidden" id="etape2" value="<?= $fichierimport['etape2'] ?>">
@ -20,9 +22,9 @@
</div>
<div class="col-md-2 text-center border-start">
<h6 class="text-muted small fw-bold mb-1 text-uppercase"><?= _("État") ?></h6>
<?php if($etatPolice == "EC"):?>
<?php if($codeEtat == "EC"):?>
<span class="badge bg-success px-3"><?= $etatPolice ?></span>
<?php elseif($etatPolice == "SU"):?>
<?php elseif($codeEtat == "SU"):?>
<span class="badge bg-warning px-3"><?= $etatPolice ?></span>
<?php else:?>
<span class="badge bg-danger px-3"><?= $etatPolice ?></span>

View File

@ -1,20 +1,51 @@
<?php $this->titre = "INTER-SANTE - Lier collèges"; ?>
<div id="div_liste_adherent" class="container-fluid py-4 animate__animated animate__fadeIn">
<h1 class="text-primary"><i class="fas fa-link me-2 me-2"></i></i> <?= _("Association des assurés aux collèges") ?></h1>
<legend> <?= _("Lier les assurés importés à un collège") ?> </legend>
<div class="card shadow-sm border-0 mb-4">
<div class="card-body bg-light-subtle">
<div class="row align-items-center">
<div class="col-md-3">
<label class="form-label small fw-bold text-muted text-uppercase"><?= _("Choisir le collège cible") ?></label>
</div>
<div class="col-md-6">
<div class="input-group">
<span class="input-group-text bg-white border-primary-subtle text-primary">
<i class="fas fa-university"></i>
</span>
<select class="form-select border-primary-subtle fw-bold"
id="idCollege"
name="idCollege"
required
autofocus
onchange="afficher_adherent_importee();">
<?php liste_options($college, ""); ?>
</select>
</div>
</div>
<div class="col-md-3">
<div id="statut_selection" class="small text-muted italic">
<i class="fas fa-info-circle me-1"></i> <?= _("Sélectionnez un collège pour voir les assurés correspondants.") ?>
</div>
</div>
</div>
</div>
</div>
<table class="table table-condensed table-responsive" style="font-size:10pt;" >
<tbody>
<tr>
<td width="15%" > <?= _("Collège") ?> </td>
<td>
<SELECT style="font-size:10pt;" class="form-control" id="idCollege" NAME="idCollege" required autofocus onChange="afficher_adherent_importee();" >
<?php liste_options($college,""); ?>
</SELECT>
</td>
</tr>
</tbody>
</table>
<div id="div_adherents_importes" class="min-vh-25">
<div class="text-center py-5 text-muted">
<i class="fas fa-arrow-up fa-2x mb-3 animate__animated animate__bounce animate__infinite"></i>
<p><?= _("En attente de sélection du collège...") ?></p>
</div>
</div>
</div>
<div id="div_adherents_importes">
</div>
<style>
.min-vh-25 { min-height: 250px; }
.italic { font-style: italic; }
/* Effet focus sur le select */
.form-select:focus {
border-color: #0d6efd;
box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.15);
}
</style>

View File

@ -1,118 +1,151 @@
<?php
$this->titre = "INTER-SANTE - Liste Assurés Importés";
?>
<?php $this->titre = "INTER-SANTE - " . _("Validation Importation"); ?>
<script type="text/javascript">
<div id="div_liste_adherent" class="container-fluid py-1 animate__animated animate__fadeIn">
<h1 class="text-primary"><i class="fas fa-user-check me-2"></i></i> <?= _("Importer les assurés") ?></h1>
</script>
<div class="row g-3 mb-4">
<div class="col-md-4">
<div class="card shadow-sm border-0 bg-primary text-dark">
<div class="card-body">
<h6 class="text-dark small fw-bold text-uppercase"><?= _("Volume Importé") ?></h6>
<div class="d-flex align-items-center">
<h2 class="mb-0 fw-bold"><?= $nb_ligne_ass ?></h2>
<span class="ms-2 small"><?= _("lignes totales") ?></span>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card shadow-sm border-0 <?= ($nb_adh > 0) ? 'bg-warning text-dark' : 'bg-success text-dark' ?>">
<div class="card-body">
<h6 class="small fw-bold text-uppercase"><?= _("Alertes Données") ?></h6>
<div class="d-flex align-items-center">
<h2 class="mb-0 fw-bold"><?= $nb_adh ?></h2>
<span class="ms-2 small"><?= _("sans collège / catégorie") ?></span>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card shadow-sm border-0 bg-dark text-dark">
<div class="card-body">
<h6 class="text-dark-50 small fw-bold text-uppercase"><?= _("Total TTC") ?></h6>
<div class="d-flex align-items-center">
<h2 class="mb-0 fw-bold"><?= format_N($dbeneficiaires_total['primeTtcTotal']) ?></h2>
<span class="ms-2 small text-dark-50">FCFA</span>
</div>
</div>
</div>
</div>
</div>
<input class="sr-only" type="text" id="nb_adh" name="nb_adh" value="<?= $nb_adh ?>">
<input class="sr-only" type="text" id="nb_ligne_ass" name="nb_ligne_ass" value="<?= $nb_ligne_ass ?>">
<div class="card shadow-sm border-0 mb-4">
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-sm mb-0 text-center fw-bold small">
<thead class="bg-light">
<tr>
<th class="py-2"><?= _("Total HT") ?></th>
<th class="py-2 text-primary"><?= (isset($_SESSION['composanteprime']['Taxes'])) ? $_SESSION['composanteprime']['Taxes'] : _("Taxes") ?></th>
<th class="py-2 text-info"><?= (isset($_SESSION['composanteprime']['Cartes'])) ? $_SESSION['composanteprime']['Cartes'] : _("Cartes") ?></th>
<th class="py-2 bg-dark text-white border-dark"><?= _("TOTAL TTC") ?></th>
</tr>
</thead>
<tbody>
<tr>
<td class="fs-5"><?= format_N($dbeneficiaires_total['primeHtTotal']) ?></td>
<td class="fs-5 text-primary"><?= format_N($dbeneficiaires_total['taxeTotal']) ?></td>
<td class="fs-5 text-info"><?= format_N($dbeneficiaires_total['fraisCarteTotal']) ?></td>
<td class="fs-5 bg-dark text-white border-dark"><?= format_N($dbeneficiaires_total['primeTtcTotal']) ?></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<legend> <?= _("Liste Assurés Importés") . " => " . _("Lignes Totales") . " => " . $nb_ligne_ass . " => " . _("Lignes sans collège") . " => " . $nb_adh ?> </legend>
<div id="div_liste_assure_importe" class="card shadow-sm border-0">
<div class="card-header bg-white py-3 d-flex justify-content-between align-items-center">
<h5 class="mb-0 fw-bold text-secondary"><i class="fas fa-users me-2"></i><?= _("Détail des bénéficiaires") ?></h5>
<div class="btn-group">
<button class="btn btn-sm btn-outline-secondary" onclick="exportExcel()">Excel</button>
<button class="btn btn-sm btn-outline-secondary" onclick="exportPdf()">PDF</button>
</div>
</div>
<div class="card-body p-0">
<?php if ($nb_ligne_ass > 0): ?>
<div class="table-responsive">
<table class="table table-hover align-middle mb-0" style="font-size: 0.82rem;">
<thead class="table-light">
<tr class="text-muted small">
<th class="ps-3"><?= _("Cat/Collège/Produit") ?></th>
<th class="text-center"><?= _("N° Fam/Adh") ?></th>
<th><?= _("Identité") ?></th>
<th class="text-center"><?= _("Lien/Sexe") ?></th>
<th class="text-center"><?= _("Dates") ?></th>
<th class="text-end"><?= _("Prime HT") ?></th>
<th class="text-end"><?= _("TTC") ?></th>
<th class="pe-3 text-center"><?= _("Action") ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($beneficiaires as $beneficiaire):
$hasError = ($beneficiaire['idCollege'] <= 0);
?>
<tr class="<?= $hasError ? 'table-warning' : '' ?>">
<td class="ps-3">
<div class="fw-bold"><?= $this->nettoyer($beneficiaire['categorie']) ?></div>
<div class="small <?= $hasError ? 'text-danger fw-bold' : 'text-muted' ?>">
<?= $this->nettoyer($beneficiaire['libelleCollege']) ?: _("Collège manquant") ?>
<span class="mx-1">|</span> <?= $this->nettoyer($beneficiaire['codeProduit']) ?>
</div>
</td>
<td class="text-center">
<div class="badge bg-light text-dark border small fw-normal"><?= $this->nettoyer($beneficiaire['noFamille']) ?></div>
<div class="x-small text-muted mt-1"><?= $this->nettoyer($beneficiaire['numeroAdherent']) ?></div>
</td>
<td>
<div class="fw-bold text-uppercase"><?= $this->nettoyer($beneficiaire['nom']) ?></div>
<div class="small text-muted"><?= $this->nettoyer($beneficiaire['prenoms']) ?></div>
</td>
<td class="text-center">
<span class="badge bg-info-subtle text-info border border-info-subtle mb-1"><?= $this->nettoyer($beneficiaire['codeLienParente']) ?></span>
<div class="fw-bold small"><?= $this->nettoyer($beneficiaire['sexe']) ?></div>
</td>
<td class="text-center">
<div class="small text-muted"><?= _("Né le") ?> <?= dateLang($this->nettoyer($beneficiaire['dateNaissance'])) ?></div>
<div class="small fw-bold text-primary"><?= _("Effet") ?> <?= dateLang($this->nettoyer($beneficiaire['dateEffet'])) ?></div>
</td>
<td class="text-end fw-bold"><?= format_N($this->nettoyer($beneficiaire['primeHt'])) ?></td>
<td class="text-end fw-bold text-dark"><?= format_N($this->nettoyer($beneficiaire['primeTtc'])) ?></td>
<td class="text-center pe-3">
<button class="btn btn-sm btn-link text-primary p-0"><i class="fas fa-edit"></i></button>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php else : ?>
<div class="text-center py-5">
<i class="fas fa-folder-open fa-3x text-muted mb-3"></i>
<h4 class="text-muted"><?= _("AUCUNE DONNÉE À AFFICHER") ?></h4>
</div>
<?php endif; ?>
</div>
</div>
</div>
<div id ="div_liste_assure_importe">
<input class="sr-only" type="text" id="nb_adh" value="<?= $nb_adh ?>">
<input class="sr-only" type="text" id="nb_ligne_ass" value="<?= $nb_ligne_ass ?>">
<input class="sr-only" type="text" id="primeTtcTotal" value="<?= $this->nettoyer($dbeneficiaires_total['primeTtcTotal']) ?>">
<?php if ($nb_ligne_ass>'0'): ?>
<input class="sr-only" type="text" id="primeTtcTotal" name="primeTtcTotal" value="<?= $this->nettoyer($dbeneficiaires_total['primeTtcTotal']) ?>">
<div id="div_export_a"></div>
<table class="table table-striped table-bordered table-hover table-condensed table-responsive" style="font-size:8pt;">
<thead>
<tr>
<td colspan="11" style='text-align:center'> <?= format_N($this->nettoyer($dbeneficiaires_total['nbLigne'])) ?> <?= _("Lignes au total") ?> </td>
<td align='center'><?= format_N($this->nettoyer($dbeneficiaires_total['primeHtTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($dbeneficiaires_total['taxeTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($dbeneficiaires_total['fraisCarteTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($dbeneficiaires_total['primeTtcTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($dbeneficiaires_total['primeNetteStatTotal'])) ?></td>
</tr>
<tr>
<th colspan="3" style='text-align:center'> <?= _("Catégoerie ou Collège") ?> </th>
<th colspan="2" style='text-align:center'> <?= _("No Famille") ?> </th>
<th> <?= _("Nom") ?> </th>
<th> <?= _("Prénoms") ?> </th>
<th style='text-align:center'> <?= _("Lien Parenté") ?> </th>
<th style='text-align:center'>Sex</th>
<th style='text-align:center'> <?= _("Naissance") ?> </th>
<th style='text-align:center'> <?= _("Effet") ?> </th>
<th style='text-align:center'> <?= _("Prime HT") ?> </th>
<th style='text-align:center'> <?= (isset($_SESSION['composanteprime']['Taxes'])) ? _($_SESSION['composanteprime']['Taxes']) : _("Taxes") ?> </th>
<th style='text-align:center'>
<?php
if(isset($_SESSION['composanteprime']['Cartes']))
{
echo _($_SESSION['composanteprime']['Cartes']);
}
else
{
echo _("Cartes");
}
?>
</th>
<th style='text-align:center'> <?= _("TTC") ?> </th>
<th style='text-align:center'>Stat</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="11" style='text-align:center'> <?= format_N($this->nettoyer($dbeneficiaires_total['nbLigne'])) ?> <?= _("Lignes au total") ?> </td>
<td align='center'><?= format_N($this->nettoyer($dbeneficiaires_total['primeHtTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($dbeneficiaires_total['taxeTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($dbeneficiaires_total['fraisCarteTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($dbeneficiaires_total['primeTtcTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($dbeneficiaires_total['primeNetteStatTotal'])) ?></td>
</tr>
</tfoot>
<tbody>
<?php foreach ($beneficiaires as $beneficiaire):
$idBeneficiairemodel=$beneficiaire['idBeneficiairemodel'];
$idCollege=$beneficiaire['idCollege'];
?>
<td align='center'><?= $this->nettoyer($beneficiaire['categorie']) ?></td>
<?php if ($idCollege>'0'): ?>
<td align='center'><?= $this->nettoyer($beneficiaire['libelleCollege']) ?></td>
<td align='center'><?= $this->nettoyer($beneficiaire['codeProduit']) ?></td>
<?php else : ?>
<td align='center' style="background-color: yellow;"><?= $this->nettoyer($beneficiaire['libelleCollege']) ?></td>
<td align='center' style="background-color: yellow;"><?= $this->nettoyer($beneficiaire['codeProduit']) ?></td>
<?php endif; ?>
<td align='center'><?= $this->nettoyer($beneficiaire['numeroAdherent']) ?></td>
<td align='center'><?= $this->nettoyer($beneficiaire['noFamille']) ?></td>
<td><?= $this->nettoyer($beneficiaire['nom']) ?></td>
<td><?= $this->nettoyer($beneficiaire['prenoms']) ?></td>
<td align='center'><?= $this->nettoyer($beneficiaire['codeLienParente']) ?></td>
<td align='center'><?= $this->nettoyer($beneficiaire['sexe']) ?></td>
<td align='center'><?= dateLang($this->nettoyer($beneficiaire['dateNaissance'])) ?></td>
<td align='center'><?= dateLang($this->nettoyer($beneficiaire['dateEffet'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($beneficiaire['primeHt'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($beneficiaire['taxe'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($beneficiaire['fraisCarte'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($beneficiaire['primeTtc'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($beneficiaire['primeNetteStat'])) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php else : ?>
<div class="alert alert-danger" style="height:30px; padding:5px;" >
<H4> <?= _("FICHIER IMPORTATION VIDE!") ?> </H4>
</div>
<?php endif; ?>
</div>
<div id ="div_export_a">
</div>
<style>
.x-small { font-size: 0.7rem; }
.table-warning { background-color: #fff3cd !important; }
.table-hover tbody tr:hover { background-color: rgba(0,0,0,.03) !important; }
</style>

View File

@ -1,35 +1,63 @@
<?php
$this->titre = "Intersanté - Mouvements sur les assurés";
?>
<?php $this->titre = "Intersanté - Mouvements sur les assurés"; ?>
<input class="form-control" style="text-align: center; font-size:10pt;" type="text" id="nbligne" name="nbligne" value="ENTREES SORTIE DES ASSURES" readonly>
<table class="table table-responsive table-condensed" style='font-size:10pt;'>
<tbody>
<tr>
<td width="10%"> Période du </td>
<td width="15%"> <INPUT style='text-align:center; font-size:10pt;' class="form-control datepicker" TYPE="text" id="debut" NAME="debut" value="<?= $_SESSION['dUneSemaineAvantFr_C'] ?>" required </td>
<div id="div_liste_adherent" class="container-fluid py-1 animate__animated animate__fadeIn">
<h1 class="text-primary"><i class="fas fa-exchange-alt me-2"></i></i> <?= _("Entrées & Sorties des Assurés") ?></h1>
<td width="5%" align="center"> au </td>
<td width="15%"> <INPUT style='text-align:center; font-size:10pt;' class="form-control datepicker" TYPE="text" id="fin" NAME="fin" value="<?= dateCouranteLang($_SESSION['lang']) ?>" required> </td>
<td width="5%" align="center"> Etat</td>
<td>
<SELECT class="form-control" id="codeSensMouvement" NAME="codeSensMouvement" style='font-size:10pt;'>
<?php liste_options_consultation($sensmouvement, ""); ?>
</SELECT>
</td>
<div class="card shadow-sm border-0 mb-4">
<div class="card-body bg-light">
<div class="row g-3 align-items-end">
<div class="col-md-5">
<label class="form-label small fw-bold text-uppercase"><?= _("Période de recherche") ?></label>
<div class="input-group">
<span class="input-group-text bg-white small"><?= _("Du") ?></span>
<input type="text" id="debut" name="debut"
class="form-control datepicker text-center fw-bold"
value="<?= $_SESSION['dUneSemaineAvantFr_C'] ?>" required>
<span class="input-group-text bg-white small"><?= _("au") ?></span>
<input type="text" id="fin" name="fin"
class="form-control datepicker text-center fw-bold"
value="<?= dateCouranteLang($_SESSION['lang']) ?>" required>
</div>
</div>
<td align="center"> <?= _("Validé?") ?> </td>
<td>
<SELECT style="font-size:10pt;" class="form-control" id="valide" NAME="valide" >
<?php liste_options_consultation($mvt_valide, ""); ?>
</SELECT>
</td>
<td> </td>
<td> <button style='font-size:10pt;' type="button" class="form-control btn btn-primary" onclick="javascript:liste_mouvemements_assures();">Actualiser...</button> </td>
</tr>
</tbody>
</table>
<div class="col-md-2">
<label class="form-label small fw-bold text-uppercase"><?= _("Sens / État") ?></label>
<select class="form-select fw-bold border-info-subtle" id="codeSensMouvement" name="codeSensMouvement">
<?php liste_options_consultation($sensmouvement, ""); ?>
</select>
</div>
<div id="div_mvt"> </div>
<div class="col-md-3">
<label class="form-label small fw-bold text-uppercase"><?= _("Statut Validation") ?></label>
<select class="form-select fw-bold" id="valide" name="valide">
<?php liste_options_consultation($mvt_valide, ""); ?>
</select>
</div>
<div class="col-md-2">
<div class="d-grid d-md-flex justify-content-md-end">
<button type="button" class="btn btn-primary px-4 shadow-sm fw-bold" onclick="liste_mouvemements_assures();">
<i class="fas fa-sync-alt me-2"></i>
</button>
</div>
</div>
</div>
</div>
</div>
<div id="div_mvt" class="min-vh-50 rounded bg-white p-2 shadow-sm border">
<div class="text-center py-5 text-muted">
<i class="fas fa-search fa-3x mb-3 opacity-25"></i>
<p class="fs-5"><?= _("Cliquez sur 'Actualiser' pour charger les mouvements") ?></p>
</div>
</div>
</div>
<style>
.min-vh-50 { min-height: 50vh; }
.datepicker { cursor: pointer !important; background-color: #fff !important; }
.form-select, .form-control { border-radius: 6px; }
.input-group-text { border-radius: 6px; color: #6c757d; }
</style>

View File

@ -1,58 +1,87 @@
<div id="div_liste_adherent" class="container-fluid animate__animated animate__fadeIn">
<h1 class="text-primary"><i class="fas fa-file-invoice-dollar me-2"></i></i> <?= _("Primes non facturées") ?></h1>
<legend> <?= _("PRIMES NON FACTUREES DE LA POLICE") . " : " . $this->nettoyer($_SESSION['numeroPolice_C'])?> </legend>
<div class="card-header d-flex justify-content-between align-items-center py-3">
<h4 class="fw-bold text-secondary mb-0">
<?= _("POLICE") ?> : <span class="badge bg-white text-primary ms-2"><?= $this->nettoyer($_SESSION['numeroPolice_C']) ?></span>
</h4>
</div>
<table class="table table-responsive table-condensed" style='font-size:10pt; text-align:center'>
<thead>
<tr>
<td style='text-align:center'> Total </td>
<td align='center'><?= format_N($this->nettoyer($ente_nonfacture['nbLignesTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($ente_nonfacture['primeHtTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($ente_nonfacture['taxeTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($ente_nonfacture['fraisCarteTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($ente_nonfacture['primeTtcTotal'])) ?></td>
</tr>
<div class="row g-3 mb-4">
<div class="col-md-3">
<div class="card shadow-sm border-0 bg-light">
<div class="card-body py-3">
<h6 class="text-muted small fw-bold text-uppercase mb-1"><?= _("Volume Total") ?></h6>
<h6 class="mb-0 fw-bold"><?= format_N($ente_nonfacture['nbLignesTotal']) ?> <span class="small fw-normal text-muted fs-6"><?= _("Lignes") ?></span></h6>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card shadow-sm border-0 bg-light">
<div class="card-body py-3">
<h6 class="text-muted small fw-bold text-uppercase mb-1"><?= _("Total HT") ?></h6>
<h6 class="mb-0 fw-bold text-dark"><?= format_N($ente_nonfacture['primeHtTotal']) ?></h6>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card shadow-sm border-0 bg-light border-start border-info border-4">
<div class="card-body py-3">
<h6 class="text-muted small fw-bold text-uppercase mb-1"><?= _("Taxes & Frais") ?></h6>
<h6 class="mb-0 fw-bold text-info"><?= format_N($ente_nonfacture['taxeTotal'] + $ente_nonfacture['fraisCarteTotal']) ?></h6>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card shadow-sm border-0 bg-dark text-dark">
<div class="card-body py-3">
<h6 class="text-dark-50 small fw-bold text-uppercase mb-1"><?= _("Total TTC") ?></h6>
<h6 class="mb-0 fw-bold"><?= format_N($ente_nonfacture['primeTtcTotal']) ?></h6>
</div>
</div>
</div>
</div>
<tr>
<th style='text-align:center'> <?= _("Date Effet") ?> </th>
<th style='text-align:center'> <?= _("Nb Lignes") ?> </th>
<th style='text-align:center'> <?= _("Prime HT") ?> </th>
<th style='text-align:center'> <?= (isset($_SESSION['composanteprime']['Taxes'])) ? _($_SESSION['composanteprime']['Taxes']) : _("Taxes") ?> </th>
<th style='text-align:center'>
<?php
if(isset($_SESSION['composanteprime']['Cartes']))
{
echo _($_SESSION['composanteprime']['Cartes']);
}
else
{
echo _("Cartes");
}
?>
</th>
<th style='text-align:center'> <?= _("Prime TTC") ?> </th>
</tr>
</thead>
<div class="card shadow-sm border-0 overflow-hidden">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="bg-secondary text-white">
<tr>
<th class="ps-3 py-3 fw-normal"><?= _("Date Effet") ?></th>
<th class="text-center fw-normal"><?= _("Nb Lignes") ?></th>
<th class="text-end fw-normal"><?= _("Prime HT") ?></th>
<th class="text-end fw-normal"><?= (isset($_SESSION['composanteprime']['Taxes'])) ? _($_SESSION['composanteprime']['Taxes']) : _("Taxes") ?></th>
<th class="text-end fw-normal">
<?= (isset($_SESSION['composanteprime']['Cartes'])) ? _($_SESSION['composanteprime']['Cartes']) : _("Cartes") ?>
</th>
<th class="pe-3 text-end fw-bold"><?= _("Prime TTC") ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($nonfactures as $nonfacture): ?>
<tr>
<td class="ps-3 fw-bold text-primary">
<i class="far fa-calendar-alt me-2 text-muted"></i>
<?= dateLang($this->nettoyer($nonfacture['dateEffet'])) ?>
</td>
<td class="text-center">
<span class="badge bg-light text-dark border"><?= format_N($nonfacture['nbLignes']) ?></span>
</td>
<td class="text-end fw-semibold"><?= format_N($nonfacture['primeHt']) ?></td>
<td class="text-end text-muted small"><?= format_N($nonfacture['taxe']) ?></td>
<td class="text-end text-muted small"><?= format_N($nonfacture['fraisCarte']) ?></td>
<td class="pe-3 text-end fw-bold text-dark fs-6"><?= format_N($nonfacture['primeTtc']) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<tfoot>
<tr>
<td style='text-align:center'> Total </td>
<td align='center'><?= format_N($this->nettoyer($ente_nonfacture['nbLignesTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($ente_nonfacture['primeHtTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($ente_nonfacture['taxeTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($ente_nonfacture['fraisCarteTotal'])) ?></td>
<td align='center'><?= format_N($this->nettoyer($ente_nonfacture['primeTtcTotal'])) ?></td>
</tr>
</tfoot>
<tbody>
<?php foreach ($nonfactures as $nonfacture):?>
<tr>
<td> <?= dateLang($this->nettoyer($nonfacture['dateEffet'])) ?> </td>
<td> <?= format_N($this->nettoyer($nonfacture['nbLignes'])) ?> </td>
<td> <?= format_N($this->nettoyer($nonfacture['primeHt'])) ?> </td>
<td> <?= format_N($this->nettoyer($nonfacture['taxe'])) ?> </td>
<td> <?= format_N($this->nettoyer($nonfacture['fraisCarte'])) ?> </td>
<td> <?= format_N($this->nettoyer($nonfacture['primeTtc'])) ?> </td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<style>
.bg-primary-subtle { background-color: #e7f1ff; }
.table thead th { font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.5px; }
.table tbody td { font-size: 0.9rem; border-bottom: 1px solid #f0f0f0; }
</style>

View File

@ -1,40 +1,100 @@
<?php $this->titre = "INTER-SANTE - Rapport S/P police"; ?>
<legend> <?= _("Rapport S / P de la police") . " : " . $this->nettoyer($_SESSION['numeroPolice_C'])?> </legend>
<div id="div_police" class="container-fluid py-4 animate__animated animate__fadeIn">
<h1 class="text-primary"><i class="fas fa-chart-line me-2"></i></i> <?= _("Rapport S / P") ?></h1>
<table class="table table-responsive table-condensed" style='font-size:10pt; text-align:center'>
<thead>
<tr>
<th width="20%" style='text-align:center'> <?= _("Date Effet") ?> </th>
<th width="20%" style='text-align:center'> <?= _("Date Echéance") ?> </th>
<th width="20%" style='text-align:center'> <?= _("Durée Acquise") ?> </th>
<th width="20%" style='text-align:center'> <?= _("Ratio Acquise") ?> </th>
<th width="20%" style='text-align:center'> <?= _("Durée Contrat") ?> </th>
</tr>
</thead>
<div class="card-header d-flex justify-content-between align-items-center py-1">
<h4 class="fw-bold text-secondary mb-0">
<?= _("Police") ?> :
<span class="text-primary"><?= $this->nettoyer($_SESSION['numeroPolice_C']) ?></span>
</h4>
<div class="badge bg-dark px-3 py-2 fs-6">
<?= _("Durée Contrat") ?> : <?= $this->nettoyer($sppoliceentete['dureePolice']) ?> <?= _("jours") ?>
</div>
</div>
<tbody>
<div class="row g-3 mb-4 text-center">
<div class="col-md-4">
<div class="card shadow-sm border-0 h-100">
<div class="card-body">
<h6 class="text-muted small fw-bold text-uppercase"><?= _("Période du Contrat") ?></h6>
<div class="d-flex justify-content-around align-items-center mt-2">
<div>
<div class="small text-muted"><?= _("Effet") ?></div>
<div class="fw-bold"><?= dateLang($this->nettoyer($sppoliceentete['dateEffet'])) ?></div>
</div>
<i class="fas fa-arrow-right text-light"></i>
<div>
<div class="small text-muted"><?= _("Échéance") ?></div>
<div class="fw-bold"><?= dateLang($this->nettoyer($sppoliceentete['dateEcheance'])) ?></div>
</div>
</div>
</div>
</div>
</div>
<tr>
<td> <?= dateLang($this->nettoyer($sppoliceentete['dateEffet'])) ?> </td>
<td> <?= dateLang($this->nettoyer($sppoliceentete['dateEcheance'])) ?> </td>
<td> <?= $this->nettoyer($sppoliceentete['duree_acquise']) ?> </td>
<td> <?= $this->nettoyer($sppoliceentete['ratio_acquise']) ?> </td>
<td> <?= $this->nettoyer($sppoliceentete['dureePolice']) ?> </td>
</tr>
</tbody>
</table>
<div class="col-md-4">
<div class="card shadow-sm border-0 h-100 border-start border-info border-4">
<div class="card-body">
<h6 class="text-muted small fw-bold text-uppercase"><?= _("Durée Acquise") ?></h6>
<h3 class="fw-bold mb-0 mt-2 text-info"><?= $this->nettoyer($sppoliceentete['duree_acquise']) ?></h3>
<span class="text-muted small"><?= _("jours écoulés") ?></span>
</div>
</div>
</div>
<table class="table table-responsive table-condensed" style='font-size:10pt;' >
<tbody>
<tr>
<td> <button type="button" style="font-size:10pt;" class="form-control btn btn-primary" onclick="javascript:sinistres_a_prime_police();" > <?= _("Police entière...") ?> </button> </td>
<td> <button type="button" style="font-size:10pt;" class="form-control btn btn-primary" onclick="javascript:sinistres_a_prime_categorie();" > <?= _("Par Catégorie...") ?> </button> </td>
<td> <button type="button" style="font-size:10pt;" class="form-control btn btn-primary" onclick="javascript:sinistres_a_prime_college();" > <?= _("Par Collège...") ?> </button> </td>
</tr>
</tbody>
</table>
<div class="col-md-4">
<?php
$ratio = (float)$this->nettoyer($sppoliceentete['ratio_acquise']);
$color = $ratio > 100 ? 'danger' : ($ratio > 70 ? 'warning' : 'success');
?>
<div class="card shadow-sm border-0 h-100 bg-<?= $color ?> text-dark">
<div class="card-body">
<h6 class="text-dark-50 small fw-bold text-uppercase"><?= _("Ratio de Temps Écoule (Prorata)") ?></h6>
<div class="d-flex align-items-center justify-content-center mt-2">
<h2 class="fw-bold mb-0 me-3"><?= number_format($ratio, 2) ?> %</h2>
<div class="progress w-10 bg-white bg-opacity-25" style="height: 10px;">
<div class="progress-bar bg-white" role="progressbar" style="width: <?= $ratio ?>%"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="div_detail_sp">
</div>
<div class="card shadow-sm border-0 mb-4">
<div class="card-body p-2 bg-light">
<div class="row g-2">
<div class="col-md-4">
<button type="button" class="btn btn-primary w-100 fw-bold shadow-sm py-2" onclick="sinistres_a_prime_police();">
<i class="fas fa-file-contract me-2"></i> <?= _("Vue Police entière") ?>
</button>
</div>
<div class="col-md-4">
<button type="button" class="btn btn-info w-100 fw-bold shadow-sm py-2" onclick="sinistres_a_prime_categorie();">
<i class="fas fa-layer-group me-2"></i> <?= _("Analyse par Catégorie") ?>
</button>
</div>
<div class="col-md-4">
<button type="button" class="btn btn-secondary w-100 fw-bold shadow-sm py-2" onclick="sinistres_a_prime_college();">
<i class="fas fa-users-cog me-2"></i> <?= _("Analyse par Collège") ?>
</button>
</div>
</div>
</div>
</div>
<div id="div_detail_sp" class="rounded min-vh-25 shadow-inner bg-white p-3 border">
<div class="text-center py-5 text-muted">
<i class="fas fa-chart-bar fa-3x mb-3 opacity-25"></i>
<p><?= _("Sélectionnez un niveau d'analyse pour afficher les détails du S/P") ?></p>
</div>
</div>
</div>
<style>
.shadow-inner { box-shadow: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06); }
.min-vh-25 { min-height: 250px; }
</style>

View File

@ -1,49 +1,83 @@
<?php
// $this->titre = "INTER-SANTE - SYNTHESE CONSOMMATIONS DE LA POLICE";
?>
<legend> <?= _("SYNTHESE CONSOMMATIONS DE LA POLICE") . " : " . $this->nettoyer($_SESSION['numeroPolice_C'])?> </legend>
<table class="table table-responsive table-condensed" style='font-size:10pt; text-align:center'>
<thead>
<tr>
<th width="20%" style='text-align:center'> <?= _("Date Effet") ?> </th>
<th width="20%" style='text-align:center'> <?= _("Date Echéance") ?> </th>
<th width="20%" style='text-align:center'> <?= _("Durée Acquise") ?> </th>
<th width="20%" style='text-align:center'> <?= _("Ratio Acquise") ?> </th>
<th width="20%" style='text-align:center'> <?= _("Durée Contrat") ?> </th>
</tr>
</thead>
<tbody>
<tr>
<td> <?= dateLang($this->nettoyer($sppoliceentete['dateEffet'])) ?> </td>
<td> <?= dateLang($this->nettoyer($sppoliceentete['dateEcheance'])) ?> </td>
<td> <?= $this->nettoyer($sppoliceentete['duree_acquise']) ?> </td>
<td> <?= $this->nettoyer($sppoliceentete['ratio_acquise']) ?> </td>
<td> <?= $this->nettoyer($sppoliceentete['dureePolice']) ?> </td>
</tr>
</tbody>
</table>
<table class="table table-responsive table-condensed" style='font-size:10pt;' >
<tbody>
<tr>
<td> <button style='font-size:10pt;' type="button" class="form-control btn btn-primary" onclick="javascript:requetes_synthese_consommation_police();"> <?= _("Afficher résultats")."..." ?> </button> </td>
<td width="10%" > </td>
<td> <button style='font-size:10pt;' type="button" class="form-control btn btn-primary" onclick="javascript:requetes_synthese_consommation_police_export();"> <?= _("Exporter vers Excel...") ?> </button> </td>
</tr>
</tbody>
</table>
<div id="div_detail_exp">
<div id="div_police" class="container-fluid py-4 animate__animated animate__fadeIn">
</div>
<h1 class="text-primary"><i class="fas fa-microscope me-2"></i><?= _('Synthèse des Consommations') ?></h1>
<div id="div_detail_sp">
</div>
<div class="card-header d-flex justify-content-between align-items-center py-3">
<h4 class="fw-bold text-secondary mb-0">
<?= _("POLICE") ?> : <span class="badge bg-white text-primary ms-2"><?= $this->nettoyer($_SESSION['numeroPolice_C']) ?></span>
</h4>
</div>
<div class="row g-3 mb-1 mt-1">
<div class="col-md-4">
<div class="card shadow-sm border-0 h-100">
<div class="card-body py-1 d-flex align-items-center justify-content-around">
<div class="text-center">
<div class="small text-muted text-uppercase fw-bold"><?= _("Effet") ?></div>
<div class="fw-bold text-dark"><?= dateLang($this->nettoyer($sppoliceentete['dateEffet'])) ?></div>
</div>
<i class="fas fa-long-arrow-alt-right text-dark fa-2x"></i>
<div class="text-center">
<div class="small text-muted text-uppercase fw-bold"><?= _("Échéance") ?></div>
<div class="fw-bold text-dark"><?= dateLang($this->nettoyer($sppoliceentete['dateEcheance'])) ?></div>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card shadow-sm border-0 h-100 text-center border-start border-info border-4">
<div class="card-body py-1">
<div class="small text-muted fw-bold"><?= _("DURÉE ACQUISE") ?></div>
<div class="h6 fw-bold mb-0 text-info"><?= $this->nettoyer($sppoliceentete['duree_acquise']) ?> j</div>
</div>
</div>
</div>
<div class="col-md-5">
<div class="card shadow-sm border-0 h-100">
<div class="card-body py-1">
<div class="d-flex justify-content-between align-items-center mb-1">
<span class="small text-muted fw-bold text-uppercase"><?= _("Progression du Contrat") ?></span>
<span class="fw-bold"><?= number_format($this->nettoyer($sppoliceentete['ratio_acquise']),2) ?> %</span>
</div>
<div class="progress shadow-sm" style="height: 12px;">
<div class="progress-bar bg-primary progress-bar-striped progress-bar-animated"
role="progressbar"
style="width: <?= $this->nettoyer($sppoliceentete['ratio_acquise']) ?>%"></div>
</div>
</div>
</div>
</div>
</div>
<div class="card shadow-sm border-0 mb-1 bg-light">
<div class="card-body py-3">
<div class="row align-items-center">
<div class="col-md-6">
<button type="button" class="btn btn-primary px-4 fw-bold shadow-sm" onclick="requetes_synthese_consommation_police();">
<i class="fas fa-search me-2"></i> <?= _("Afficher les résultats") ?>
</button>
</div>
<div class="col-md-6 text-md-end">
<button type="button" class="btn btn-success px-4 fw-bold shadow-sm" onclick="requetes_synthese_consommation_police_export();">
<i class="fas fa-file-excel me-2"></i> <?= _("Exporter vers Excel") ?>
</button>
</div>
</div>
</div>
</div>
<div id="div_detail_exp" class="mb-3"></div>
<div id="div_detail_sp" class="min-vh-50 bg-white rounded border border-dashed d-flex align-items-center justify-content-center text-muted">
<div class="text-center py-5">
<i class="fas fa-chart-area fa-3x mb-3 opacity-25"></i>
<p class="fs-5"><?= _("Cliquez sur 'Afficher résultats' pour générer la synthèse") ?></p>
</div>
</div>
</div>
<style>
.border-dashed { border: 2px dashed #dee2e6 !important; }
.bg-indigo { background-color: #6610f2; }
.min-vh-50 { min-height: 400px; }
</style>

View File

@ -638,7 +638,7 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<!-- Application Scripts -->
<script src="/Js/fonctions.js?ver=2026.01.05.28"></script>
<script src="/Js/fonctions.js?ver=2026.01.06.06"></script>
<script type="text/javascript">
raffraichier_gabarit();