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

This commit is contained in:
KANE LAZENI 2026-01-31 14:59:15 +00:00
commit 4d65994d57
21 changed files with 1580 additions and 107 deletions

View File

@ -0,0 +1,29 @@
:root {
--is-primary: #08C5D1;
--is-sidebar: #2c3e50;
--is-light-bg: #f8f9fa;
}
body { font-family: 'Inter', sans-serif; font-size: 0.88rem; color: #334155; }
/* Sidebar moderne */
.sidebar { width: 260px; background: var(--is-sidebar); transition: all 0.3s; z-index: 1000; border-right: 1px solid rgba(255,255,255,0.1); }
.sidebar .nav-link { color: rgba(255,255,255,0.7); font-weight: 500; border-radius: 8px; margin-bottom: 5px; }
.sidebar .nav-link:hover, .sidebar .nav-link.active-main { background: rgba(255,255,255,0.1); color: #fff; }
.sidebar .nav-link i { font-size: 1.1rem; margin-right: 12px; }
/* Header épuré */
.header { height: 60px; background: #fff; box-shadow: 0 1px 10px rgba(0,0,0,0.05); }
/* Utilitaires de cartes */
.card { border: none; border-radius: 12px; box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.04); }
/* Transition douce pour AJAX */
.transition { transition: all 0.3s ease; }
@media (min-width: 1200px) {
body.toggle-sidebar .sidebar { left: -260px; }
body.toggle-sidebar .main, body.toggle-sidebar #header { margin-left: 0; }
}
.cursor-pointer { cursor: pointer; }
.shadow-xs { box-shadow: 0 2px 4px rgba(0,0,0,0.02); }

View File

@ -405,6 +405,7 @@ require_once 'Modele/Societeusercentral.php';
$this->requete->getSession()->setAttribut("timezone_identifier", $utilisateur['timezone_identifier']);
date_default_timezone_set($_SESSION['timezone_identifier']);
//
// On va déclarer les variable de session context
$this->requete->getSession()->setAttribut("idClient_C", "");

View File

@ -3,7 +3,7 @@ require_once 'Framework/Controleur.php';
require_once 'Modele/Emission.php';
require_once 'Modele/Quittance.php';
require_once 'Modele/Menuvueutilisateur.php';
//
class ControleurEmission extends Controleur {
private $menuvue;

View File

@ -58,6 +58,7 @@ class ControleurFicheadherent extends Controleur {
$tarifActe = $this->tarif->getTarifActeByType($codeTypeTarifActe);
//
$prestationsParMois = $this->adherent->getPrestationsmensuelles($idAdherent);
$prestationsParliens = $this->adherent->getPrestationsLiensParente($idAdherent);

View File

@ -182,7 +182,7 @@ class ControleurFichebeneficiaire extends Controleur
{
$message = 'Veuillez sélectionner un fichier SVP !';
}
} //
}
$beneficiaire = $this->beneficiaire->getBeneficiaireId($id);
@ -195,7 +195,7 @@ class ControleurFichebeneficiaire extends Controleur
$codeTypeTarifActe = "TBEN";
$tarifActe = $this->tarif->getTarifActeByType($codeTypeTarifActe);
//
$prestationsParMois = $this->beneficiaire->getPrestationsmensuelles($idBeneficiaire);
$tabConsoParMois = [

View File

@ -27,7 +27,7 @@ class ControleurFicheusergc extends Controleur {
$user_actVisible = $this->oui_non->getListe();
$langue = $this->langue->getListe();
$user_AffectionVisible = $this->oui_non->getListe();
//
$user_gc = $this->gc->getunusergc($idUtilisateur);
$chemin = $this->menuvue->getChemin('Ficheusergc');

View File

@ -40730,7 +40730,7 @@ function enregistrer_new_repos_medical()
});
}
//
function charger_detail_stat_police_anomalies()
{
$('#div_export_b').html("");
@ -48852,81 +48852,74 @@ function appliquerDataTable(){
}
function dataTableSpeciale(){
const oTable = $('.tabspeciale');
var codeLangue = $("#codeLangue").val();
// Détruire l'instance existante si elle existe
if ($.fn.DataTable.isDataTable(oTable)) {
table.DataTable().destroy();
table.empty(); // Optionnel : vider le contenu si nécessaire
function dataTableSpeciale() {
const $table = $('.tabspeciale');
const codeLangue = $("#codeLangue").val() || "fr_FR";
// Détruire l'instance existante si elle existe
if ($.fn.DataTable.isDataTable($table)) {
$table.DataTable().clear().destroy();
$table.empty(); // Optionnel : vider le contenu si nécessaire
}
// Définition des traductions
const langOptions = {
en_US: {
lengthMenu: "Display _MENU_ records per page",
zeroRecords: "Nothing found - sorry",
info: "Showing page _PAGE_ of _PAGES_",
infoEmpty: "No records available",
search: "Search:",
paginate: {
next: "►",
previous: "◄",
first: "|◄",
last: "►|"
},
infoFiltered: "(filtered from _MAX_ total records)"
},
fr_FR: {
lengthMenu: "Affiche _MENU_ par page",
zeroRecords: "Désolé - Aucune donnée trouvée",
info: "_PAGE_ sur _PAGES_ pages",
infoEmpty: "Pas d'enregistrement",
search: "Recherche:",
paginate: {
next: "►",
previous: "◄",
first: "|◄",
last: "►|"
},
infoFiltered: "(filtré de _MAX_ total enregistrements)"
}
};
// Définition des lengthMenu selon la langue
const lengthMenuOptions = (codeLangue === "en_US") ? [50, 100, 150] : [20, 50, 100];
try {
$table.DataTable({
destroy: true,
responsive: true,
lengthMenu: lengthMenuOptions,
scrollX: true,
scrollY: "75vh",
pagingType: "full_numbers",
autoWidth: false,
searching: false, // équivalent moderne de bFilter:false
ordering: false,
lengthChange: false, // équivalent moderne de bLengthChange:false
orderMulti: true,
language: langOptions[codeLangue] || langOptions.fr_FR
});
// Ajuster les colonnes après init
$table.DataTable().columns.adjust().draw();
} catch (err) {
console.error("Erreur DataTable:", err);
return false;
}
try{
if(codeLangue=="en_US")
{
oTable.DataTable({
destroy: true,
responsive: true,
"lengthMenu": [ 50, 100, 150],
"scrollX": true,
"scrollY": "75vh",
"pagingType": "full_numbers",
"autoWidth": false,
"bFilter": false,
"ordering": false,
"bLengthChange": false,
"orderMulti": true,
"language": {
"lengthMenu":"Display _MENU_ records per page",
"zeroRecords": "Nothing found - sorry",
"info": "Showing page _PAGE_ of _PAGES_",
"infoEmpty": "No records available",
"search": "Search:",
"paginate": {
"next": "►",
"previous": "◄",
"first": "|◄",
"last": "►|"
},
"infoFiltered": "(filtered from _MAX_ total records)"
}
});
}else{
oTable.DataTable({
destroy: true,
responsive: true,
"lengthMenu": [ 50, 100, 150],
"scrollX": true,
"scrollY": "75vh",
"pagingType": "full_numbers",
"autoWidth": false,
"bFilter": false,
"ordering": false,
"bLengthChange": false,
"orderMulti": true,
"language": {
"lengthMenu":"Affiche _MENU_ par page",
"zeroRecords": "Désolé - Aucune donnée trouvée",
"info": "_PAGE_ sur _PAGES_ pages",
"infoEmpty": "Pas d'enregistrement",
"search": "Recherche:",
"paginate": {
"next": "►",
"previous": "◄",
"first": "|◄",
"last": "►|"
},
"infoFiltered": "(filtré de _MAX_ total enregistrements)"
}
});
}
//$('.tabspeciale').columns.adjust().draw();
}
catch(err){
return false;
}
}
function dataTableSpecialeMini(){
@ -91895,6 +91888,26 @@ function afficher_ordonnance_beneficiaire()
});
}
// Fonction globale pour tes notifications AJAX (Wahoo Effect)
function notification(type, message) {
const Toast = Swal.mixin({
toast: true,
position: 'top-end',
showConfirmButton: false,
timer: 3000,
timerProgressBar: true,
didOpen: (toast) => {
toast.addEventListener('mouseenter', Swal.stopTimer)
toast.addEventListener('mouseleave', Swal.resumeTimer)
}
});
Toast.fire({
icon: type, // 'success', 'error', 'warning', 'info'
title: message
});
}
function gerer_garant_defaut()
{
codeGcAssureurDefaut=$("#codeGcAssureurDefaut").val();

View File

@ -1204,6 +1204,7 @@ class Adherent extends Modele {
return $resultat->fetchAll(PDO::FETCH_ASSOC);
}
//
public function getPrestationsLiensParente($idAdherent){

View File

@ -41,6 +41,7 @@ class Emission extends Modele {
$this->executerRequete($sql, array($numeroEmission, $_SESSION['codeSociete']));
}
//
public function getEmissionId($idEmission)
{
$sql = 'CALL sp_get_emission_id(?);';

View File

@ -1010,6 +1010,7 @@ class Facture extends Modele {
return $resultat->fetchAll(PDO::FETCH_ASSOC);
}
//
public function getbordereauxrbcl($idPolice, $d1, $d2)
{
$sql = 'call sp_r_get_bordereaux_rbcl(?, ?, ?)';

View File

@ -1151,7 +1151,7 @@ class Gestionconfiee extends Modele {
{
$codeSociete = $_SESSION['codeSociete'];
$user = $_SESSION['login'];
$passAutoGen = "";
switch ($codeModeGenerationPass)

View File

@ -1942,6 +1942,7 @@ class Police extends Modele {
$sql = 'call sp_init_ajustement_prime(?, ?, ?, ?, ?, ?);';
$this->executerRequete($sql, array($codeSociete, $idPolice, $dateAvenant, $user, $motifAvenant, $idSaisie));
}
//
public function fn_primes_non_facturees_police($idPolice)
{
@ -1950,7 +1951,7 @@ class Police extends Modele {
$ligne = $resultat->fetch(PDO::FETCH_ASSOC);
return $ligne['nb_non_facturees'];
}
//
public function getNomGarant($codeGcAssureur)
{
$sql = 'SELECT fn_garant(?) as libelle;';

View File

@ -75,7 +75,6 @@
<button type="button" class="btn btn-default" data-bs-dismiss="modal"> <?= _("Fermer") ?> </button>
</div>
</div>
</div>
</div>

127
Vue/Recherche/index_new.php Executable file
View File

@ -0,0 +1,127 @@
<?php
// $this->titre = "INTER SANTE - "._("Rechercher assuré") ;
?>
<div class="card shadow-sm border-0 mb-4">
<div class="card-body p-4">
<h5 class="card-title mb-4 text-primary fw-bold">
<i class="bi bi-search me-2"></i><?= _("Critères de recherche de l'assuré") ?>
</h5>
<form id="frmrecherche" name="frmrecherche" method="post" action="Recherche/index/">
<div class="row g-3">
<div class="col-md-6">
<label class="form-label small fw-bold text-muted"><?= _("Numéro Bénéficiaire") ?></label>
<input class="form-control" type="text" id="numeroBeneficiaire" name="numeroBeneficiaire" autofocus autocomplete="off">
</div>
<div class="col-md-6">
<label class="form-label small fw-bold text-muted"><?= _("Numéro Famille") ?></label>
<input class="form-control" type="text" id="numeroAdherent" name="numeroAdherent" autocomplete="off">
</div>
<div class="col-md-6">
<label class="form-label small fw-bold text-muted"><?= _("Nom") ?></label>
<input class="form-control" type="text" id="nomBeneficiaire" name="nomBeneficiaire" autocomplete="off">
</div>
<div class="col-md-6">
<label class="form-label small fw-bold text-muted"><?= _("Prénoms") ?></label>
<input class="form-control" type="text" id="prenomsBeneficiaire" name="prenomsBeneficiaire" autocomplete="off">
</div>
<div class="col-md-6">
<label class="form-label small fw-bold text-muted"><?= _("Tel") ?></label>
<input class="form-control" type="text" id="telephonePortable" name="telephonePortable" autocomplete="off">
</div>
<div class="col-md-6">
<label class="form-label small fw-bold text-muted"><?= _("E-mail") ?></label>
<input class="form-control" type="text" id="email" name="email" autocomplete="off">
</div>
<div class="col-12">
<input id="lancerrecherche" name="lancerrecherche" class="visually-hidden" type="submit" value="<?= _("Rechercher") ?>">
<button type="submit" class="btn btn-primary px-4 shadow-sm float-end">
<i class="bi bi-search me-2"></i><?= _("Rechercher") ?>
</button>
</div>
</div>
</form>
</div>
</div>
<?php if (is_array($derniernumerobeneficiaires) && $derniernumerobeneficiaires['nouveau']>0): ?>
<div class="alert alert-danger shadow-sm d-flex align-items-center mb-4" role="alert">
<i class="bi bi-exclamation-triangle-fill fs-4 me-3"></i>
<div>
<?= _("Cette carte")." => <strong>".$derniernumerobeneficiaires['ancien'] . "</strong> "._("a été déclarée perdue et remplacée par") ." => <strong>".$derniernumerobeneficiaires['nouveau'] ."</strong>. ". _("Veuillez ne pas le communiquer sans autorisation.") ?>
</div>
</div>
<?php endif; ?>
<div class="card shadow-sm border-0">
<div class="card-header bg-white py-3 border-0">
<h5 class="mb-0 fw-bold text-muted"><?= _("Résultats de la recherche") ?></h5>
</div>
<div class="card-body p-0">
<?php if (is_array($beneficiaires) && count($beneficiaires) > 0): ?>
<div class="table-responsive">
<table id="table_resultats" class="table table-hover align-middle mb-0" style="font-size: 0.85rem;">
<thead class="table-light">
<tr class="text-muted small text-uppercase">
<th class="text-center border-0"><?= _("N° Bénéficiaire") ?></th>
<th class="text-center border-0"><?= _("N° Famille") ?></th>
<th class="border-0"><?= _("Nom") ?></th>
<th class="border-0"><?= _("Prénoms") ?></th>
<th class="text-center border-0"><?= _("Lien") ?></th>
<th class="text-center border-0"><?= _("Naissance") ?></th>
<th class="text-center border-0"><?= _("Genre") ?></th>
<th class="text-center border-0"><?= _("Tél") ?></th>
<th class="border-0"><?= _("Souscripteur") ?></th>
<th class="border-0"><?= _("Etat") ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($beneficiaires as $beneficiaire):
$idBeneficiaire = $this->nettoyer($beneficiaire['id']);
$numeroBeneficiaire = $this->nettoyer($beneficiaire['numeroBeneficiaire']);
?>
<tr style="cursor: pointer;"
onclick="selectionner_beneficiaire(<?= $idBeneficiaire ?>,'<?= $numeroBeneficiaire ?>');"
ondblclick="selectionner_beneficiaire(<?= $idBeneficiaire ?>,'<?= $numeroBeneficiaire ?>'); afficher_beneficiaire_id();">
<td class="text-center">
<button type="button" class="btn btn-sm btn-outline-primary fw-bold"
onclick="selectionner_beneficiaire(<?= $idBeneficiaire ?>,'<?= $numeroBeneficiaire ?>'); afficher_beneficiaire_id();">
<?= $numeroBeneficiaire ?>
</button>
</td>
<td class="text-center"><?= $this->nettoyer($beneficiaire['numeroAdherent']) ?></td>
<td class="fw-bold text-dark"><?= $this->nettoyer($beneficiaire['nomBeneficiaire']) ?></td>
<td><?= $this->nettoyer($beneficiaire['prenomsBeneficiaire']) ?></td>
<td class="text-center"><?= $this->nettoyer($beneficiaire['codeLienParente']) ?></td>
<td class="text-center small"><?= dateLang($this->nettoyer($beneficiaire['dateNaissance'])) ?></td>
<td class="text-center"><?= $this->nettoyer($beneficiaire['sexe']) ?></td>
<td class="text-center small"><?= $this->nettoyer($beneficiaire['telephonePortable']) ?></td>
<td class="small"><?= $this->nettoyer($beneficiaire['nomClient']) ?></td>
<td>
<?php
$etat = $this->nettoyer($beneficiaire['codeEtatBeneficiaire']);
$badgeClass = ($etat == 'ACTIF') ? 'bg-success' : 'bg-secondary';
?>
<span class="badge <?= $badgeClass ?>-light text-<?= str_replace('bg-','',$badgeClass) ?> rounded-pill">
<?= $etat ?>
</span>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php else: ?>
<div class="p-5 text-center text-muted">
<i class="bi bi-info-circle fs-2 d-block mb-3"></i>
<?= _("Aucun résultat à afficher. Veuillez lancer une recherche.") ?>
</div>
<?php endif; ?>
</div>
</div>

36
Vue/contexte.php Executable file
View File

@ -0,0 +1,36 @@
<aside id="barre_laterale_d" class="bg-white border-start d-none d-xl-block" style="width: 280px; position: sticky; top: 60px; height: calc(100vh - 60px); overflow-y: auto;">
<div class="p-4">
<h6 class="text-uppercase small fw-bold text-muted mb-4 text-center border-bottom pb-2"><?= _("CONTEXTE DE GESTION") ?></h6>
<div class="text-center mb-4">
<div class="photo-container mb-3">
<img src="data:image/png;base64,<?= $_SESSION['photoAssureCrypte'] ?>"
class="rounded-circle shadow border border-3 border-white transition hover-scale"
width="100" height="100" style="object-fit: cover;">
</div>
<h6 class="fw-bold mb-1"><?= _($_SESSION['nomSociete']) ?></h6>
<span class="badge bg-success-light text-success rounded-pill px-3"><?= _("Garant Actif") ?></span>
</div>
<div class="vstack gap-2">
<?php if ($_SESSION['numeroClient_C']): ?>
<div class="p-3 bg-light rounded-3 border-0">
<div class="text-muted small mb-1"><?= _("Numéro Client") ?></div>
<div class="fw-bold text-primary"><?= $_SESSION['numeroClient_C'] ?></div>
</div>
<?php endif; ?>
<?php if ($_SESSION['numeroPolice_C']): ?>
<div class="p-3 bg-light rounded-3 border-0">
<div class="text-muted small mb-1"><?= _("Police en cours") ?></div>
<div class="fw-bold"><?= $_SESSION['numeroPolice_C'] ?></div>
</div>
<?php endif; ?>
</div>
<div class="text-center mt-5 opacity-25 grayscale">
<img src="Bootstrap_new/images/new/favicon.png" width="30">
<p class="small mt-2 mb-0">© 2026 INTER SANTE</p>
</div>
</div>
</aside>

1041
Vue/gabarit copy 2.php Executable file

File diff suppressed because it is too large Load Diff

View File

@ -19,17 +19,11 @@
const MAX_COMPANY_NAME_LENGTH = 20;
/*
if (strlen($_SESSION['nomSociete']) <= MAX_COMPANY_NAME_LENGTH) {
$companyDisplayName = htmlspecialchars($_SESSION['nomSociete'], ENT_QUOTES);
} else {
$companyDisplayName = strtoupper($_SESSION['codeSociete']);
}
*/
$companyDisplayName = htmlspecialchars($_SESSION['nomSociete'], ENT_QUOTES);
$modeDev = $_SESSION['modeDev_C'];
$imgData = $_SESSION['photoAssureCrypte'];
//
?>
<!doctype html>
@ -434,7 +428,7 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css" integrity="sha512-Avb2QiuDEEvB4bZJYdft2mNjVShBftLdPG8FJ0V7irTLQ8Uo0qcPxh4Plq7G5tGm0rU+1SPhVotteLpBERwTkw==" crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
<body>
<?php
$style = "";
$test = "";
@ -480,8 +474,7 @@
<li class="nav-item">
<a title="<?= _("Gestionnaire d'assurance santé");?>" style="margin-left:10px; margin-right:10px;" class="nav-link nav-icon" href="javascript:infos_entite();">
<!-- <img src="<?= $_SESSION['lienLogo'] ?>" alt="Profile" style="width:100px;max-height: 60px;"> -->
<img src="<?= $_SESSION['lienLogo'] ?>" alt="Profile" style="max-height: 60px;">
<img src="<?= $_SESSION['lienLogo'] ?>" alt="Profile" style="width:100px;max-height: 60px;">
<span > <?=$companyDisplayName?> </span>
@ -636,8 +629,9 @@
/*
var_dump(
array(
"codeGcAssureurDefaut" => $_SESSION['codeGcAssureurDefaut'],
"codeGcAssureur_C" => $_SESSION['codeGcAssureur_C'],
"nomSociete" => $_SESSION['nomSociete'],
"kane" => "KANE LAZ",
"sorel" => "SOREL",
)
);
exit();
@ -819,22 +813,21 @@
<div class="modal fade" id="popmessagerie" role="dialog">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-bs-dismiss="modal"> <?= _("Fermer") ?> </button>
<h4 class="modal-title"> <?= _("Messages non lus") ?> </h4>
</div>
<div class="modal-header">
<button type="button" class="close" data-bs-dismiss="modal"> <?= _("Fermer") ?> </button>
<h4 class="modal-title"> <?= _("Messages non lus") ?> </h4>
</div>
<div class="modal-body">
<div id="div_messagerie">
</div>
<div class="modal-body">
<div id="div_messagerie">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-bs-dismiss="modal"> <?= _("Fermer") ?> </button>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-bs-dismiss="modal"> <?= _("Fermer") ?> </button>
</div>
</div>
</div>
@ -975,7 +968,7 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js" integrity="sha512-VEd+nq25CkR676O+pLBnDW09R7VQX9Mdiij052gVCp5yVH3jGtH70Ho/UUv4mJDsEdTvqRCFZg0NKGiojGnUCw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="Js/fonctions.js?ver=2026.01.31.00"></script>
<script src="Js/fonctions.js?ver=2025.12.20.12"></script>
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>

116
Vue/gabarit_new.php Executable file
View File

@ -0,0 +1,116 @@
<?php
require_once 'gabarit_queries.php';
$gabary = new Gabary();
$_SESSION['firstLevelMenu']='';
$current_url = $_SERVER['REQUEST_URI'];
$elements = explode("/", $current_url);
$activeLink = $elements[1];
$fullPath = $gabary->get_full_path($activeLink);
$fullPath = explode("\ ", $fullPath);
$activeLevel1 = $activeLink;
$activeLevel2 = sizeof($fullPath)>1?$fullPath[1]:'';
$activeLevel3 =sizeof($fullPath)>2?$fullPath[2]:'';
$activeLevel4 = sizeof($fullPath)>3?$fullPath[3]:'';
$activeLevel5 = sizeof($fullPath)>4?$fullPath[4]:'';
$_SESSION['firstLevelMenu']=$activeLink;
const MAX_COMPANY_NAME_LENGTH = 20;
$companyDisplayName = htmlspecialchars($_SESSION['nomSociete'], ENT_QUOTES);
$modeDev = $_SESSION['modeDev_C'];
$imgData = $_SESSION['photoAssureCrypte'];
//
?>
<!doctype html>
<html lang="fr">
<?php require_once 'head.php'; ?>
<body class="d-flex flex-column min-vh-100 bg-light">
<?php include 'header.php'; ?>
<div class="d-flex flex-grow-1" style="margin-top: 60px;">
<?php include 'sidebar.php'; ?>
<main id="main" class="main flex-grow-1 p-3 p-md-4 transition">
<nav aria-label="breadcrumb" class="mb-4 d-none d-md-block">
<ol class="breadcrumb shadow-sm bg-white p-2 px-3 rounded-pill">
<li class="breadcrumb-item small"><a href="#" class="text-decoration-none text-muted"><?= _("INTER SANTE") ?></a></li>
<li class="breadcrumb-item small text-primary fw-bold active"><?= strtoupper(_($activeLevel1)) ?></li>
</ol>
</nav>
<div class="container-fluid p-0">
<?= $contenu; ?>
</div>
</main>
<?php include 'contexte.php'; ?>
</div>
<div id="modals-container">
<div class="modal fade" id="popmessagerie" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content border-0 shadow-lg">
<div class="modal-header bg-light">
<h5 class="modal-title fw-bold text-primary"><i class="bi bi-envelope-paper me-2"></i><?= _("Messages non lus") ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body"><div id="div_messagerie"></div></div>
</div>
</div>
</div>
<div class="modal fade" id="pop_photo" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content border-0 shadow-lg text-center p-3">
<img src="data:image/png;base64,<?= $_SESSION['photoAssureCrypte'] ?>" class="img-fluid rounded shadow">
</div>
</div>
</div>
</div>
<script src="Bootstrap/js/jquery.min.js"></script>
<script src="Bootstrap/js/jquery-ui.js"></script>
<script src="Bootstrap/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="Bootstrap_new/datatables/datatable.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="Js/html2pdf.js"></script>
<script src="Bootstrap_new/js/select2.min.js"></script>
<script src="Bootstrap/js/timer.jquery.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<?php if (est_anglophone()) : ?>
<script src="Js/datepicker-eng.js"></script>
<?php else: ?>
<script src="Js/datepicker-fr.js"></script>
<?php endif; ?>
<script src="Js/fonctions.js?ver=2025.11.29.09"></script>
<script src="<?= $_SESSION['dossierSociete'].'/Js/societe.js' ?>"></script>
<script type="text/javascript">
$(document).ready(function() {
// Toggle Sidebar
$('.toggle-sidebar-btn').on('click', function() {
$('body').toggleClass('toggle-sidebar');
});
// Initialisation métier
raffraichier_gabarit();
$('#timer').timer({
duration: '60s',
callback: function() { raffraichier_messagerie(); },
repeat: true
});
});
</script>
<div id="div_ajaxgabarit" class="d-none"></div>
</body>
</html>

30
Vue/head.php Executable file
View File

@ -0,0 +1,30 @@
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<base href="<?= $racineWeb ?>" >
<!-- Favicons -->
<link rel="icon" href="Bootstrap_new/images/favicon.ico"/>
<title><?= $_SESSION['vue'] ?></title>
<!-- Google Fonts -->
<link href="https://fonts.gstatic.com" rel="preconnect">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
<!-- Vendor CSS Files -->
<link href="Bootstrap/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="Bootstrap/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
<link href="Bootstrap_new/css/select2.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css" rel="stylesheet">
<link rel="stylesheet" href="Bootstrap_new/datatables/datatable.min.css" crossorigin="anonymous">
<link href="Bootstrap_new/css/style_moderne.css?ver=2026.01.30.00" rel="stylesheet">
<!-- Libraries -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2.0.0"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-annotation@1.0.2"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
</head>

47
Vue/header.php Executable file
View File

@ -0,0 +1,47 @@
<?php
$styleHeader = "";
$labelTest = "";
if($_SESSION['bdTests_C'] == "1"){
$colorTests = $_SESSION['colorTests'];
$styleHeader = "border-bottom: 4px solid $colorTests;";
$labelTest = '<span class="badge bg-danger ms-2">'. _("MODE TEST") .'</span>';
}
$flag = (est_anglophone()) ? 'england.png' : 'france.png';
?>
<header id="header" class="header fixed-top d-flex align-items-center bg-white shadow-sm" style="<?= $styleHeader ?>">
<div class="d-flex align-items-center justify-content-between px-3" style="width: 260px;">
<a class="logo d-flex align-items-center text-decoration-none">
<img src="Bootstrap_new/images/new/favicon.png" alt="Logo" height="30">
<span class="fs-5 fw-bold ms-2 text-dark"><?= _("INTER SANTE") ?></span>
</a>
<i class="bi bi-list toggle-sidebar-btn fs-4 border-0 bg-transparent cursor-pointer" id="btn-toggle"></i>
</div>
<div class="ms-auto d-flex align-items-center pe-3">
<?= $labelTest ?>
<div class="dropdown mx-3">
<a href="#" class="nav-link dropdown-toggle d-flex align-items-center" data-bs-toggle="dropdown">
<img src="Bootstrap_new/images/<?= $flag ?>" width="20" class="me-2">
<span class="d-none d-md-block"><?= (est_anglophone()) ? _("English") : _("Français") ?></span>
</a>
<ul class="dropdown-menu dropdown-menu-end shadow border-0">
<li><a class="dropdown-item" href="javascript:change_langue();"><i class="bi bi-translate me-2"></i><?= _("Changer de langue") ?></a></li>
</ul>
</div>
<div class="dropdown">
<a href="#" class="nav-link d-flex align-items-center" data-bs-toggle="dropdown">
<div class="bg-primary text-white rounded-circle d-flex align-items-center justify-content-center fw-bold shadow-sm" style="width: 35px; height: 35px;">
<?= $_SESSION['userInitials_C'] ?>
</div>
</a>
<ul class="dropdown-menu dropdown-menu-end shadow border-0">
<li class="px-3 py-2 small fw-bold text-muted border-bottom"><?= $_SESSION['utilisateur_C'] ?></li>
<li><a class="dropdown-item mt-2" href="javascript:change_password();"><i class="bi bi-key me-2"></i><?= _("Mot de passe") ?></a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item text-danger" href="Deconnexion/"><i class="bi bi-box-arrow-right me-2"></i><?= _("Déconnexion") ?></a></li>
</ul>
</div>
</div>
</header>

36
Vue/sidebar.php Executable file
View File

@ -0,0 +1,36 @@
<aside id="sidebar" class="sidebar">
<div class="p-3">
<ul class="nav nav-pills flex-column" id="sidebar-nav">
<?php foreach ($menus as $key0 => $menuParent):
$menuChildren = $gabary->get_menus_by_parent_code($menuParent['vue']);
$hasChildren = count($menuChildren) > 0;
$isActive = (strtolower($menuParent['libeleMenu']) == strtolower($activeLevel1));
?>
<li class="nav-item mb-1">
<a class="nav-link d-flex align-items-center <?= $isActive ? 'active bg-primary text-white' : 'text-white-50' ?> <?= $hasChildren ? 'collapsed' : '' ?>"
<?= $hasChildren ? 'data-bs-toggle="collapse" data-bs-target="#menu'.$key0.'"' : 'href="'.$menuParent['lienMenu'].'"' ?>>
<i class="<?= $menuParent['icone'] ?> fs-5 me-3"></i>
<span class="flex-grow-1"><?= _($menuParent['libeleMenu']) ?></span>
<?php if($hasChildren): ?><i class="bi bi-chevron-down small opacity-50"></i><?php endif; ?>
</a>
<?php if($hasChildren): ?>
<div class="collapse ps-3 mt-1 <?= $isActive ? 'show' : '' ?>" id="menu<?= $key0 ?>" data-bs-parent="#sidebar-nav">
<ul class="nav flex-column border-start border-secondary border-opacity-25 ms-2">
<?php foreach ($menuChildren as $child):
$isSubActive = (explode('/',$child['lienMenu'])[0] == $_SESSION['firstLevelMenu']);
?>
<li class="nav-item">
<a href="<?= $child['lienMenu'] ?>" class="nav-link py-1 small <?= $isSubActive ? 'text-white fw-bold' : 'text-white-50' ?>">
<?= _($child['libeleMenu']) ?>
</a>
</li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
</div>
</aside>