This commit is contained in:
KANE LAZENI 2026-03-04 01:30:41 +00:00
commit 38c6727080
16 changed files with 1972 additions and 3019 deletions

View File

@ -18,7 +18,7 @@ color:white
}
.active-submenu{
color:black !important;
width:250px;
width:150px;
font-weight: 700;
/* background:#857a7a */
/* text-decoration: underline; */
@ -33,9 +33,9 @@ color:white
}
.sidebar-nav .nav-content a:hover{
color:grey !important
color:#cac2a4 !important;
/* background:grey !important */
font-weight: bold !important;
}
.nav-item:hover .bi, .nav-item:hover .bx, .nav-item:hover .collapsed{
@ -109,10 +109,6 @@ visibility:hidden
margin-right:2px;
}
.active-main{
color: red;
}
/* style la barre de navigation horizontale */
div.scrollmenu {
@ -209,7 +205,7 @@ padding:5px
}
.sidebar-nav .nav-link{
width:180px
width:190px
}
#main{

View File

@ -1,6 +1,7 @@
/* =============================
INTER SANTÉ THEME MODERN
SaaS Premium UI v2025
INTER SANTÉ THEME NEUTRAL PRO
SaaS Minimal UI v2025
Palette : Charcoal · Gris · Blanc
============================= */
/* === FONTS === */
@ -8,36 +9,36 @@
/* === CSS VARIABLES === */
:root {
/* Brand Colors */
--color-primary: #1a6b4a;
--color-primary-light: #25a06e;
--color-primary-dark: #114532;
--color-primary-ghost: rgba(26, 107, 74, 0.08);
/* Brand Colors — Charcoal / Gris neutre (zéro vert) */
--color-primary: #212E53; /*#2e3440;*/ /* charcoal foncé */
--color-primary-light: #4c566a; /* slate moyen */
--color-primary-dark: #1a1d24; /* quasi-noir */
--color-primary-ghost: rgba(46, 52, 64, 0.07);
/* Accent / Status */
--color-accent: #0abf7c;
--color-urgent: #e63946;
--color-warning: #f4a261;
--color-success: #2ec4b6;
--color-info: #3a86ff;
--color-neutral: #6c757d;
/* Accent / Status — conservés pour lisibilité fonctionnelle */
--color-accent: #5e6e82; /* gris-bleu neutre */
--color-urgent: #c0392b;
--color-warning: #e67e22;
--color-success: #27ae60;
--color-info: #2980b9;
--color-neutral: #7f8c8d;
/* Backgrounds */
--bg-base: #f4f6f9;
--bg-base: #f2f3f5;
--bg-surface: #ffffff;
--bg-surface-2: #f8fafc;
--bg-sidebar: #ffffff;
--bg-surface-2: #f8f9fa;
--bg-sidebar: #7A90A4;/*#1e2228;*/ /* charcoal très sombre */
--bg-header: #ffffff;
/* Text */
--text-primary: #1a2332;
--text-secondary: #6b7280;
--text-muted: #9ca3af;
/* Text — contraste maximal */
--text-primary: #1a1d24;
--text-secondary: #4c566a;
--text-muted: #7b8a99;
--text-inverse: #ffffff;
/* Borders */
--border-light: #e8ecf0;
--border-medium: #d1d5db;
--border-light: #e3e6ea;
--border-medium: #c8cdd4;
/* Spacing & Radius */
--radius-sm: 6px;
@ -46,13 +47,13 @@
--radius-xl: 24px;
--radius-full: 9999px;
/* Shadows */
--shadow-xs: 0 1px 3px rgba(0,0,0,.05), 0 1px 2px rgba(0,0,0,.04);
--shadow-sm: 0 2px 8px rgba(0,0,0,.07), 0 1px 3px rgba(0,0,0,.05);
--shadow-md: 0 4px 16px rgba(0,0,0,.08), 0 2px 6px rgba(0,0,0,.05);
--shadow-lg: 0 8px 32px rgba(0,0,0,.10), 0 4px 12px rgba(0,0,0,.06);
--shadow-xl: 0 16px 48px rgba(0,0,0,.12), 0 8px 24px rgba(0,0,0,.07);
--shadow-primary: 0 4px 20px rgba(26,107,74,.25);
/* Shadows — neutres, sans teinte colorée */
--shadow-xs: 0 1px 3px rgba(0,0,0,.06), 0 1px 2px rgba(0,0,0,.04);
--shadow-sm: 0 2px 8px rgba(0,0,0,.08), 0 1px 3px rgba(0,0,0,.05);
--shadow-md: 0 4px 16px rgba(0,0,0,.10), 0 2px 6px rgba(0,0,0,.06);
--shadow-lg: 0 8px 32px rgba(0,0,0,.12), 0 4px 12px rgba(0,0,0,.07);
--shadow-xl: 0 16px 48px rgba(0,0,0,.14), 0 8px 24px rgba(0,0,0,.08);
--shadow-primary: 0 4px 20px rgba(30,34,40,.20);
/* Transitions */
--transition-fast: 0.15s ease;
@ -60,7 +61,7 @@
--transition-slow: 0.4s cubic-bezier(.4,0,.2,1);
/* Layout */
--sidebar-width: 240px;
--sidebar-width: 200px;
--sidebar-collapsed: 68px;
--header-height: 64px;
--context-width: 320px;
@ -104,7 +105,7 @@ h1, h2, h3, h4, h5, h6,
}
#header.mode-test {
background: linear-gradient(90deg, #7b2d00, #c0392b);
background: linear-gradient(90deg, #5d0000, #c0392b);
}
#header .logo {
@ -155,8 +156,9 @@ h1, h2, h3, h4, h5, h6,
transition: color var(--transition-fast);
}
.breadcrumb-item a:hover { color: var(--color-primary); }
.breadcrumb-item.active { color: var(--color-primary); font-weight: 600; }
.breadcrumb-item.active { color: var(--color-primary); }
.breadcrumb-item + .breadcrumb-item::before { color: var(--border-medium); }
#descriptionVue{color:#212E53 !important; font-weight: bold;}
/* Header Nav Icons */
#header .header-nav .nav-link {
@ -273,15 +275,16 @@ h1, h2, h3, h4, h5, h6,
overflow-x: hidden;
transition: width var(--transition-slow);
z-index: 900;
padding: 12px 8px;
padding: 8px 4px;
}
/* Liseré supérieur discret — gris clair */
#sidebar::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 2px;
background: linear-gradient(90deg, var(--color-accent), var(--color-primary-light));
background: linear-gradient(90deg, #4c566a, #7b8a99);
}
/* Sidebar Nav */
@ -333,8 +336,9 @@ h1, h2, h3, h4, h5, h6,
white-space: nowrap;
}
/* Active item : blanc brillant */
.sidebar-nav > .nav-item > .nav-link span.active-main {
color: var(--color-accent);
color: var(--text-primary);
font-weight: 700;
}
@ -345,7 +349,6 @@ h1, h2, h3, h4, h5, h6,
flex-shrink: 0;
}
/* Rotates chevron when open */
.sidebar-nav > .nav-item > .nav-link[aria-expanded="true"] .bi-chevron-down {
transform: rotate(180deg);
opacity: 1;
@ -356,7 +359,7 @@ h1, h2, h3, h4, h5, h6,
list-style: none;
padding: 4px 0 4px 32px;
margin: 0;
background: rgba(0,0,0,0.15);
background: rgba(0,0,0,0.18);
border-radius: var(--radius-sm);
margin-bottom: 2px;
}
@ -378,19 +381,20 @@ h1, h2, h3, h4, h5, h6,
.sidebar-nav .nav-content li a:hover {
color: white;
background: rgba(255,255,255,0.07);
border-left-color: var(--color-accent);
border-left-color: rgba(255,255,255,0.5);
padding-left: 14px;
}
/* Sous-menu actif : fond blanc translucide + bordure blanche */
.sidebar-nav .nav-content li a.active-submenu {
color: var(--color-accent);
background: rgba(10,191,124,0.12);
border-left-color: var(--color-accent);
color: #ffffff;
background: rgba(255,255,255,0.12);
border-left-color: #ffffff;
font-weight: 600;
padding-left: 14px;
padding-left: 10px;
width: 100% !important;
}
/* Active indicator dot */
.sidebar-nav .nav-content li a.active-submenu::after {
content: '';
position: absolute;
@ -400,7 +404,7 @@ h1, h2, h3, h4, h5, h6,
width: 5px;
height: 5px;
border-radius: 50%;
background: var(--color-accent);
background: rgba(255,255,255,0.8);
}
/* Separator label */
@ -410,11 +414,39 @@ h1, h2, h3, h4, h5, h6,
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
color: rgba(255,255,255,0.3);
color: rgba(255,255,255,0.28);
padding: 12px 10px 4px;
margin-top: 4px;
}
.sidebar-footer {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
padding: 15px;
border-top: 1px solid var(--border-light);
background: var(--bg-sidebar); /* Garde la couleur de ta sidebar */
}
.version-info {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 0.7rem;
color: rgba(255, 255, 255, 0.4); /* Très discret sur fond sombre */
font-family: 'DM Sans', sans-serif;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.version-tag {
background: rgba(255, 255, 255, 0.1);
padding: 2px 6px;
border-radius: 4px;
font-weight: 700;
}
/* ==============================
MAIN CONTENT
============================== */
@ -441,7 +473,7 @@ h1, h2, h3, h4, h5, h6,
background: var(--bg-surface);
border-radius: var(--radius-md);
box-shadow: var(--shadow-xs);
margin: 0 16px 16px;
margin: 0 1px 16px;
scrollbar-width: none;
}
.scrollmenu::-webkit-scrollbar { display: none; }
@ -462,7 +494,7 @@ h1, h2, h3, h4, h5, h6,
.scrollmenu a:hover {
background: var(--color-primary-ghost);
color: var(--color-primary);
border-color: rgba(26,107,74,0.2);
border-color: rgba(46,52,64,0.15);
}
.scrollmenu a.active {
@ -473,7 +505,7 @@ h1, h2, h3, h4, h5, h6,
/* Page content wrapper */
.page-content {
padding: 0 16px;
padding: 26px 0px;
}
/* Fixed header within main */
@ -482,17 +514,15 @@ h1, h2, h3, h4, h5, h6,
top: var(--header-height);
z-index: 500;
background: var(--bg-base);
padding-bottom: 4px;
}
/* Section */
.section { padding: 0; }
/* ==============================
CONTEXT DRAWER (Barre Latérale D)
============================== */
/* Trigger button */
/* Trigger button — gris charcoal */
.btn-info-context {
position: fixed;
right: 0;
@ -560,7 +590,7 @@ h1, h2, h3, h4, h5, h6,
margin-bottom: 16px;
border-radius: 0;
}
.btn-cacher-contexte:hover { background: var(--color-primary); }
.btn-cacher-contexte:hover { background: var(--color-primary-light); }
/* Context Cards */
.context-card {
@ -584,7 +614,8 @@ h1, h2, h3, h4, h5, h6,
align-items: center;
gap: 6px;
}
.context-card-label i { color: var(--color-primary); }
/* Icône label — gris moyen */
.context-card-label i { color: var(--color-primary-light); }
.context-card-label a {
color: var(--color-primary);
@ -619,7 +650,7 @@ h1, h2, h3, h4, h5, h6,
border-color: var(--color-primary-light);
color: var(--color-primary);
}
.context-btn i { color: var(--color-primary); flex-shrink: 0; }
.context-btn i { color: var(--color-primary-light); flex-shrink: 0; }
.context-btn.btn-primary-context {
background: var(--color-primary);
@ -672,7 +703,7 @@ h1, h2, h3, h4, h5, h6,
gap: 6px;
margin-bottom: 8px;
}
.recent-policies-title i { color: var(--color-primary); }
.recent-policies-title i { color: var(--color-primary-light); }
.policy-item {
padding: 7px 10px;
@ -692,7 +723,7 @@ h1, h2, h3, h4, h5, h6,
.policy-item:hover {
background: var(--color-primary-ghost);
color: var(--color-primary);
border-color: rgba(26,107,74,0.2);
border-color: rgba(46,52,64,0.18);
padding-left: 14px;
}
@ -737,7 +768,7 @@ h1, h2, h3, h4, h5, h6,
/* Devis mode banner */
.mode-devis-banner {
background: linear-gradient(135deg, #7209b7, #f72585);
background: linear-gradient(135deg, #3a3a4a, #55556a);
color: white;
text-align: center;
font-family: 'Syne', sans-serif;
@ -772,6 +803,7 @@ h1, h2, h3, h4, h5, h6,
--bs-table-striped-color: var(--text-primary) !important;
}
/* En-tête : charcoal sombre */
.table thead tr {
background: var(--color-primary) !important;
color: white !important;
@ -813,8 +845,9 @@ h1, h2, h3, h4, h5, h6,
background: var(--color-primary-ghost) !important;
font-style: normal !important;
}
/* Bordure gauche gris moyen au survol */
.table tbody tr:hover td:first-child {
border-left: 3px solid var(--color-accent);
border-left: 3px solid var(--color-primary-light);
}
/* Status Badges */
@ -836,11 +869,11 @@ h1, h2, h3, h4, h5, h6,
border-radius: 50%;
background: currentColor;
}
.badge-valide { background: rgba(46,196,182,0.12); color: var(--color-success); }
.badge-urgent { background: rgba(230,57,70,0.12); color: var(--color-urgent); }
.badge-attente { background: rgba(244,162,97,0.12); color: var(--color-warning); }
.badge-info { background: rgba(58,134,255,0.12); color: var(--color-info); }
.badge-inactive { background: rgba(108,117,125,0.12); color: var(--color-neutral); }
.badge-valide { background: rgba(39,174,96,0.10); color: #1e8449; }
.badge-urgent { background: rgba(192,57,43,0.10); color: var(--color-urgent); }
.badge-attente { background: rgba(230,126,34,0.10); color: #b9720a; }
.badge-info { background: rgba(41,128,185,0.10); color: #1a6898; }
.badge-inactive { background: rgba(127,140,141,0.10); color: var(--color-neutral); }
/* ==============================
CARDS
@ -879,14 +912,15 @@ h1, h2, h3, h4, h5, h6,
gap: 6px;
}
/* Bouton primaire : charcoal */
.btn-primary {
background: var(--color-primary) !important;
color: white !important;
box-shadow: 0 2px 8px rgba(26,107,74,0.3);
box-shadow: 0 2px 8px rgba(30,34,40,.22);
}
.btn-primary:hover {
background: var(--color-primary-light) !important;
box-shadow: 0 4px 16px rgba(26,107,74,0.4);
box-shadow: 0 4px 16px rgba(30,34,40,.30);
transform: translateY(-1px);
}
@ -895,7 +929,7 @@ h1, h2, h3, h4, h5, h6,
color: white !important;
}
.btn-info:hover {
background: #2563eb !important;
background: #1f6fa0 !important;
transform: translateY(-1px);
}
@ -930,13 +964,13 @@ h1, h2, h3, h4, h5, h6,
}
.form-control:focus, .form-select:focus {
border-color: var(--color-primary-light);
box-shadow: 0 0 0 3px rgba(26,107,74,0.1);
box-shadow: 0 0 0 3px rgba(46,52,64,0.10);
outline: none;
}
td input[readonly], td select[readonly],
td input[disabled], td select[disabled] {
background: #f1f5f9 !important;
background: #f1f4f6 !important;
font-weight: 600;
color: var(--text-secondary);
}
@ -967,6 +1001,7 @@ fieldset legend, form legend {
overflow: hidden;
}
/* Header modal : charcoal */
.modal-header {
background: var(--color-primary) !important;
color: white !important;
@ -981,16 +1016,16 @@ fieldset legend, form legend {
}
.modal-header .close, .modal-header .btn-close {
background: rgba(255,255,255,0.2) !important;
background: rgba(255,255,255,0.18) !important;
color: white !important;
border: 1px solid rgba(255,255,255,0.3) !important;
border: 1px solid rgba(255,255,255,0.28) !important;
border-radius: var(--radius-sm);
opacity: 1;
transition: background var(--transition-fast);
font-size: 0.75rem;
padding: 4px 10px;
}
.modal-header .close:hover { background: rgba(255,255,255,0.35) !important; }
.modal-header .close:hover { background: rgba(255,255,255,0.32) !important; }
.modal-body { padding: 20px; }
@ -1000,7 +1035,7 @@ fieldset legend, form legend {
gap: 8px;
}
/* Side Panel Modal (optional modern variant) */
/* Side Panel Modal */
.modal.side-panel .modal-dialog {
position: fixed;
top: 0; right: 0;
@ -1034,6 +1069,7 @@ fieldset legend, form legend {
color: var(--color-primary);
background: var(--color-primary-ghost);
}
/* Onglet actif : charcoal */
.nav-tabs .nav-item.show .nav-link,
.nav-tabs .nav-link.active {
background: var(--color-primary) !important;
@ -1052,13 +1088,13 @@ fieldset legend, form legend {
font-size: 0.82rem;
border-left: 4px solid;
}
.alert-success { border-color: var(--color-success); background: rgba(46,196,182,0.1); }
.alert-danger { border-color: var(--color-urgent); background: rgba(230,57,70,0.1); }
.alert-warning { border-color: var(--color-warning); background: rgba(244,162,97,0.1); }
.alert-info { border-color: var(--color-info); background: rgba(58,134,255,0.1); }
.alert-success { border-color: var(--color-success); background: rgba(39,174,96,0.08); }
.alert-danger { border-color: var(--color-urgent); background: rgba(192,57,43,0.08); }
.alert-warning { border-color: var(--color-warning); background: rgba(230,126,34,0.08); }
.alert-info { border-color: var(--color-info); background: rgba(41,128,185,0.08); }
/* ==============================
FOOTER (inside context bar)
FOOTER
============================== */
footer { background: transparent !important; color: var(--text-muted) !important; font-size: 0.7rem; }
@ -1081,7 +1117,7 @@ footer { background: transparent !important; color: var(--text-muted) !important
/* Skeleton Loader */
.skeleton {
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
background: linear-gradient(90deg, #ebebeb 25%, #dcdcdc 50%, #ebebeb 75%);
background-size: 200% 100%;
animation: skeleton-loading 1.5s infinite;
border-radius: var(--radius-sm);
@ -1111,18 +1147,18 @@ footer { background: transparent !important; color: var(--text-muted) !important
/* Pulse animation for notifications */
@keyframes pulse-badge {
0%, 100% { box-shadow: 0 0 0 0 rgba(230,57,70,0.4); }
50% { box-shadow: 0 0 0 5px rgba(230,57,70,0); }
0%, 100% { box-shadow: 0 0 0 0 rgba(192,57,43,0.4); }
50% { box-shadow: 0 0 0 5px rgba(192,57,43,0); }
}
.badge-number { animation: pulse-badge 2s infinite; }
.badge-number { animation: pulse-badge 2s infinite; color:#fff;}
/* Mode Test Banner */
.mode-test-active #header {
background: linear-gradient(90deg, #7b2d00, #c0392b) !important;
background: linear-gradient(90deg, #5d0000, #c0392b) !important;
}
.mode-test-banner {
background: repeating-linear-gradient(
45deg, #ffd700, #ffd700 10px, #000 10px, #000 20px
45deg, #cccccc, #cccccc 10px, #333333 10px, #333333 20px
);
color: white;
text-align: center;
@ -1134,7 +1170,7 @@ footer { background: transparent !important; color: var(--text-muted) !important
/* Filter option */
.filter-option-inner-inner {
background-color: #f1f5f9 !important;
background-color: #f1f4f6 !important;
}
/* h6 links in context */
@ -1142,7 +1178,7 @@ h6 a {
text-decoration: none;
color: var(--color-primary);
font-weight: 600;
border-bottom: 1px dashed var(--color-primary);
border-bottom: 1px dashed var(--color-primary-light);
transition: all var(--transition-fast);
}
h6 a:hover {
@ -1162,7 +1198,7 @@ h6 a:hover {
padding: 8px;
}
/* .sr-only (keep accessible but hidden visually) */
/* .sr-only */
.sr-only {
position: absolute;
width: 1px; height: 1px;
@ -1173,6 +1209,10 @@ h6 a:hover {
border-width: 0;
}
/* ==============================
SCROLLBAR hover gris neutre */
::-webkit-scrollbar-thumb:hover { background: var(--color-primary-light); }
/* ==============================
RESPONSIVE
============================== */
@ -1180,5 +1220,205 @@ h6 a:hover {
#sidebar { width: var(--sidebar-width); }
#barre_laterale_d { width: 100% !important; }
.scrollmenu { margin: 0 8px 8px; }
.page-content { padding: 0 8px; }
.page-content { padding: 18px 0px; }
}
/* --- COMPOSANTS GLOBAUX --- */
.required::after { content: " *"; color: var(--color-urgent); font-weight: bold; }
.bg-warning-ghost { background: rgba(243, 156, 18, 0.12); }
.bg-primary-ghost { background: rgba(33, 46, 83, 0.05); }
/* ============================================================
BOOTSTRAP-SELECT : CORRECTIF FINAL SANS LARGEUR FORCÉE
============================================================ */
/* 1. DISPARITION TOTALE DU SELECT NATIF
On utilise opacity et position pour le rendre invisible sans casser
le fonctionnement du plugin, tout en évitant le doublon visuel. */
select.selectpicker,
select[class*="selectpicker"],
.bootstrap-select > select.bs-select-hidden {
display: none !important;
visibility: hidden !important;
opacity: 0 !important;
position: absolute !important;
z-index: -1 !important;
}
/* 2. STYLE DU BOUTON (L'interface visible)
On retire le "width: 100%" pour laisser le bouton s'adapter à son contenu
ou à sa colonne parente naturelle. */
.btn-form-select {
background-color: #ffffff !important;
border: 1px solid #e2e8f0 !important;
color: var(--color-primary) !important;
font-size: 0.82rem !important;
padding: 0.5rem 0.75rem !important;
border-radius: var(--radius-sm) !important;
display: inline-flex !important; /* Permet au bouton de ne pas prendre toute la largeur */
align-items: center;
justify-content: space-between;
min-width: 200px; /* Optionnel : définit une largeur minimale raisonnable */
}
/* 3. NETTOYAGE DE L'ÉLÉMENT INTERNE (Ce que vous avez vu à l'image)
On s'assure qu'il n'y a pas de background ou de bordure parasite */
.bootstrap-select .filter-option {
display: flex;
align-items: center;
}
.filter-option-inner-inner {
background-color: transparent !important;
padding: 0 !important;
color: inherit !important;
}
/* 4. LE MENU DÉROULANT
On le laisse s'adapter à la largeur du bouton parent */
.bootstrap-select .dropdown-menu {
border: 1px solid #e2e8f0;
box-shadow: var(--shadow-lg);
border-radius: var(--radius-md);
font-size: 0.82rem;
}
/* 5. ZONE DE RECHERCHE */
.bootstrap-select .bs-searchbox .form-control {
border: 1px solid #ced4da !important;
font-size: 0.8rem !important;
background-color: #fff !important;
}
/* --- Style spécifique aux onglets de paramètres --- */
/* On cible les ID des conteneurs pour isoler le style */
#Generaux, #Production, #Medical, #Prestation {
animation: fadeIn 0.4s ease-in-out;
}
/* On cible les lignes de paramètres spécifiquement dans ces ID */
#Generaux .table td,
#Production .table td,
#Medical .table td,
#Prestation .table td {
padding: 1.1rem 1rem;
border-top: 1px solid #f1f4f6;
vertical-align: middle;
}
/* --- THÈME NEUTRAL PRO : HAUT CONTRASTE --- */
.text-dark { color: #1a1d24 !important; }
.bg-success-ghost { background-color: rgba(39, 174, 96, 0.12); color: #27ae60; }
.bg-danger-ghost { background-color: rgba(192, 57, 43, 0.12); color: #c0392b; }
.bg-primary-ghost { background-color: rgba(33, 46, 83, 0.08); color: #212e53; }
/* Navigation Pills Modernes */
.nav-pills .nav-link { color: #64748b; padding: 10px 20px; transition: 0.3s; border: none; background: none; }
.nav-pills .nav-link.active { background-color: #212e53 !important; color: white !important; box-shadow: var(--shadow-md); }
/* Tableaux et Cards */
.table td { padding: 1.2rem 1rem !important; border-top: 1px solid #f1f4f6 !important; font-size:0.95rem !important;}
.table-hover tbody tr:hover { background-color: #f8fafc; cursor: pointer; }
.bg-light-info { background-color: rgba(33, 46, 83, 0.02); }
.bg-light-success { background-color: rgba(39, 174, 96, 0.02); }
.fs-5 { font-size: 1.15rem !important; }
.searchable-row:hover { background-color: #f8fafc !important; }
/* ============================================================
DESIGN SYSTEM - PAGE PARAMÈTRES (NEUTRAL PRO)
============================================================ */
/* Conteneurs de sections (Onglets) */
.tab-custom-content {
animation: fadeIn 0.4s ease-in-out;
}
/* Style des Cartes (Sections) */
.tab-custom-content .card {
border-radius: var(--radius-md);
overflow: hidden;
margin-bottom: 1.5rem;
}
/* En-têtes de tableaux/sections */
.tab-custom-content .card-header {
padding: 0.75rem 1.25rem;
}
.tab-custom-content .card-header h6 {
margin-bottom: 0;
font-size: 0.85rem;
letter-spacing: 0.05em;
}
/* Tableaux de paramètres */
.tab-custom-content .table td {
padding: 1.1rem 1rem;
border-top: 1px solid #f1f4f6;
vertical-align: middle;
}
/* Libellés de paramètres (Haut Contraste) */
.tab-custom-content .text-dark {
color: #1a1d24 !important; /* Noir profond */
font-weight: 700 !important; /* Gras pour la lisibilité */
font-size: 0.95rem;
}
/* Valeurs (Colonne de droite) */
.tab-custom-content .valeur-display {
text-align: center;
border-left: 1px solid #f1f4f6;
background-color: rgba(248, 250, 252, 0.5);
font-weight: 700;
}
/* BADGES "GHOST" (Sémantique des couleurs) */
.badge-ghost {
padding: 0.5rem 0.8rem;
border-radius: 50px;
font-weight: 700;
font-size: 0.75rem;
}
/* Animation */
@keyframes fadeIn {
from { opacity: 0; transform: translateY(5px); }
to { opacity: 1; transform: translateY(0); }
}
/* Optionnel : Réduire légèrement l'entête lors du scroll (via JS si besoin) */
#titre-page {
color: var(--color-primary);
letter-spacing: -0.5px;
font-family: 'DM Sans', sans-serif; /* Ou votre police SaaS */
}
/* ENTÊTE FIXE "STICKY" */
.header-section {
position: -webkit-sticky; /* Pour Safari */
position: sticky;
top: 0;
z-index: 1050; /* Doit être supérieur aux cartes et tableaux */
background-color: rgba(244, 247, 250, 0.8); /* Couleur de fond de votre page avec transparence */
backdrop-filter: blur(10px); /* Effet de flou moderne */
padding-top: 15px;
padding-bottom: 15px;
margin-bottom: 0.5rem !important;
transition: all 0.3s ease;
}
/* On s'assure que la carte à l'intérieur de la section fixe garde son ombre */
.header-section > div {
box-shadow: 0 4px 4px rgba(0, 0, 0, 0.08) !important;
}
/* Ajustement des icônes pour plus de finesse */
.icon-shape {
flex-shrink: 0;
}

View File

@ -263,7 +263,7 @@ controlerPlafondBeneficiaire : <?= $_SESSION['controlerPlafondBeneficiaire'] ?>
<script src="Js/datepicker-fr.js"></script>
<?php endif; ?>
<script src="Js/fonctions.js?ver=2021.10.25.08"></script>
<script src="Js/fonctions.js?ver=2021.10.25.09"></script>
<script src="<?= $_SESSION['dossierSociete'].'/Js/societe.js' ?>"></script>

View File

@ -46023,20 +46023,7 @@ $(function(){
// Initialiser Select2
$('.js-example-basic-single').select2();
// Initialiser Bootstrap Select avec vérification
if (typeof $.fn.selectpicker !== 'undefined') {
$('.selectpicker').selectpicker();
} else {
console.warn("Bootstrap Select n'est pas disponible. Assurez-vous que bootstrap-select.min.js est chargé.");
// Fallback: transformer les select en select2
$('.selectpicker').each(function() {
if (!$(this).hasClass('select2-hidden-accessible')) {
$(this).select2({
theme: 'bootstrap-5'
});
}
});
}
initSelectPicker();
// Rafraîchir les notifications toutes les 2 secondes
setInterval(raffraichier_gabarit, 2000);
@ -46174,6 +46161,24 @@ $(function(){
document.getElementById('Production').style.display="none";
document.getElementById('Medical').style.display="none";
document.getElementById('Prestation').style.display="none";
// SYSTÈME DE RECHERCHE DYNAMIQUE
$("#globalSearch").on("keyup", function() {
var value = $(this).val().toLowerCase();
$(".searchable-row").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
});
// Gestion visuelle des boutons nav-link
const navButtons = document.querySelectorAll('.nav-pills .nav-link');
navButtons.forEach(btn => {
btn.addEventListener('click', function() {
navButtons.forEach(b => b.classList.remove('active'));
this.classList.add('active');
});
});
}else if($('#nomForm').val()=="listebareme"){
codeGcAssureur = $("#codeGcAssureur").val();
codeProduit = $("#codeProduit").val();
@ -74780,8 +74785,7 @@ function liste_villes()
},
success: function(data) {
$("#div_ville").html(data);
$("#ville" ).selectpicker();
ui_refresh_select("#ville");
}
});
}
@ -84315,16 +84319,6 @@ function alertvip(codeReponse, medical, idDemandederogation)
}
function retour_modifierparametre()
{
codeProfil = $('#codeProfil_C').val();
if(codeProfil=="SUPADM"){
window.location.assign($("#racineWeb" ).val()+"Listecentregestion/");
}else{
window.location.assign($("#racineWeb" ).val()+"Parametresgeneraux/");
}
}
function listeenteteententeprealables() {
codePrestataire = $("#codePrestataire").val();
@ -91564,4 +91558,37 @@ function init_revoquer_htagcarte(idHtagcarte) {
$("#idHtagcarte").val(idHtagcarte);
$("#div_revoquer_carte").modal({backdrop: 'static', keyboard: false, show: true });
$("#div_revoquer_carte").modal("show");
}
/**
* Initialisation globale au chargement
*/
function initSelectPicker() {
// Appel direct de la fonction générique sur la classe
ui_refresh_select('.selectpicker');
}
/**
* Rafraîchit un SelectPicker de manière propre
*/
function ui_refresh_select(selector) {
let $el = $(selector);
if ($el.length === 0) return;
// Détection de la langue pour les textes
let codeLangue = $("#codeLangue").val();
let placeholder = (codeLangue === "en_US") ? 'Search...' : 'Rechercher...';
let noneText = (codeLangue === "en_US") ? 'Nothing selected' : 'Rien de sélectionné';
if (typeof $.fn.selectpicker !== 'undefined') {
// La séquence 'destroy' puis initialisation est cruciale contre le doublon
$el.selectpicker('destroy').selectpicker({
style: 'btn-form-select',
liveSearch: true,
liveSearchPlaceholder: placeholder,
noneSelectedText: noneText,
width: 'auto', // Laisse le plugin décider de la largeur selon le contenu
container: false // Garde le menu dans son parent direct
});
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,335 +1,221 @@
<?php $this->titre = "INTER SANTE - Modifier Paramètres Généraux de la Production"; ?>
<?php //$this->titre = "INTER SANTE - " . _("Modifier Paramètres Production"); ?>
<script type="text/javascript">
<div class="page-content">
<input class="sr-only" type="text" id="idSocieteuser" name="idSocieteuser" value="<?= $this->nettoyer($societeuser['idSocieteuser']) ?>">
<div class="header-section">
<div class="d-flex flex-column flex-md-row align-items-md-center justify-content-between bg-white p-3 border-start border-warning border-4" style="border-radius: var(--radius-md);">
<div class="d-flex align-items-center">
<div class="icon-shape bg-warning-ghost text-warning rounded-circle me-3" style="width: 45px; height: 45px; display: flex; align-items: center; justify-content: center;">
<i class="fas fa-edit fs-5"></i>
</div>
<div>
<h4 id="titre-page" class="mb-0 fw-bold text-uppercase"><?= _("Modifier Règles Métier") ?></h4>
<p class="text-muted small mb-0"><?= _("Production & Comptabilité") ?></p>
</div>
</div>
<div class="position-relative mx-md-3 mt-3 mt-md-0" style="min-width: 250px; flex-grow: 1; max-width: 400px;">
<i class="fas fa-search position-absolute top-50 start-0 translate-middle-y ms-3 text-muted"></i>
<input type="text" id="globalSearch" class="form-control ps-5 border-2 rounded-pill shadow-none" placeholder="<?= _('Filtrer les paramètres...') ?>">
</div>
<div class="d-flex gap-2 mt-3 mt-md-0">
<button class="btn btn-outline-secondary btn-sm px-3 fw-bold" onclick="javascript:afficher_autres_parametresgeneraux();">
<i class="fas fa-undo me-2"></i><?= _("Annuler") ?>
</button>
<button class="btn btn-primary btn-sm px-3 fw-bold shadow-sm" id="btn_enreg" onclick="javascript:enregistrer_modif_parametres_prod();">
<i class="fas fa-save me-2"></i><?= _("Enregistrer") ?>
</button>
</div>
</div>
</div>
<form id="formModifProd">
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-primary py-3 d-flex align-items-center justify-content-between">
<h6 class="mb-0 text-white fw-bold text-uppercase"><i class="fas fa-industry me-2"></i><?= _("Paramètres de Production") ?></h6>
<span class="badge bg-white text-primary rounded-pill"><?= _("13 Paramètres") ?></span>
</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-hover align-middle mb-0">
<thead class="bg-light">
<tr>
<th width="5%" class="text-center border-0 small text-muted">#</th>
<th class="border-0 small text-muted"><?= _("Désignation du paramètre") ?></th>
<th width="18%" class="text-center border-0 small text-muted"><?= _("Ancienne Valeur") ?></th>
<th width="22%" class="text-center border-0 small text-muted"><?= _("Nouvelle Valeur") ?></th>
</tr>
</thead>
<tbody>
<tr class="searchable-row">
<td class="text-center"><span class="badge-ghost bg-primary-ghost">01</span></td>
<td class="text-muted fw-bold"><?= _("Quote-part du centre de gestion par prime encaissée.") ?></td>
<td class="text-center bg-light text-muted fw-bold"><?= $this->nettoyer($societeuser['tauxHonoraires']) ?> %</td>
<td>
<div class="input-group input-group-sm">
<input class="form-control text-center fw-bold border-warning" id="tauxHonoraires" name="tauxHonoraires" type="text" value="<?= $this->nettoyer($societeuser['tauxHonoraires']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['tauxHonoraires']) ?>);">
<span class="input-group-text bg-white border-warning">%</span>
</div>
</td>
</tr>
<tr class="searchable-row">
<td class="text-center"><span class="badge-ghost bg-primary-ghost">02</span></td>
<td class="text-muted fw-bold small"><?= _("Seuil maximum du ratio S/P (spMax) appliqué au taux d'ajustement.") ?></td>
<td class="text-center bg-light text-muted fw-bold"><?= $this->nettoyer($societeuser['spMax']) ?> %</td>
<td>
<div class="input-group input-group-sm">
<input class="form-control text-center fw-bold border-warning" id="spMax" name="spMax" type="text" value="<?= $this->nettoyer($societeuser['spMax']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['spMax']) ?>);">
<span class="input-group-text bg-white border-warning">%</span>
</div>
</td>
</tr>
<?php
$cartes = [
['03', _("Frais d'émission de carte pour un nouvel assuré."), 'fraisCarteAN'],
['04', _("Frais de carte au renouvellement."), 'fraisCarteREN'],
['05', _("Frais de duplicata de carte (perte ou dommage)."), 'fraisCarteImp']
];
foreach($cartes as $c): ?>
<tr class="searchable-row">
<td class="text-center"><span class="badge-ghost bg-primary-ghost"><?= $c[0] ?></span></td>
<td class="text-muted fw-bold"><?= $c[1] ?></td>
<td class="text-center bg-light text-muted fw-bold"><?= format_N($this->nettoyer($societeuser[$c[2]])) ?> <?= $_SESSION['devise_C'] ?></td>
<td>
<div class="input-group input-group-sm">
<input class="form-control text-center fw-bold border-warning" id="<?= $c[2] ?>" name="<?= $c[2] ?>" type="text" value="<?= $this->nettoyer($societeuser[$c[2]]) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser[$c[2]]) ?>);">
<span class="input-group-text bg-white border-warning"><?= $_SESSION['devise_C'] ?></span>
</div>
</td>
</tr>
<?php endforeach; ?>
<tr class="searchable-row">
<td class="text-center"><span class="badge-ghost bg-primary-ghost">06</span></td>
<td class="text-muted fw-bold small"><?= _("Ratio S/P marquant une famille en surconsommation.") ?></td>
<td class="text-center bg-light text-muted fw-bold"><?= $this->nettoyer($societeuser['spAlertAdherent']) ?> %</td>
<td>
<div class="input-group input-group-sm">
<input class="form-control text-center fw-bold border-warning" id="spAlertAdherent" name="spAlertAdherent" type="text" value="<?= $this->nettoyer($societeuser['spAlertAdherent']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['spAlertAdherent']) ?>);">
<span class="input-group-text bg-white border-warning">%</span>
</div>
</td>
</tr>
<tr class="searchable-row">
<td class="text-center"><span class="badge-ghost bg-primary-ghost">07</span></td>
<td class="text-muted fw-bold small"><?= _("Taux appliqué à la prime non acquise lors d'un retrait.") ?></td>
<td class="text-center bg-light text-muted fw-bold"><?= $this->nettoyer($societeuser['tauxRistourne']) ?> %</td>
<td>
<div class="input-group input-group-sm">
<input class="form-control text-center fw-bold border-warning" id="tauxRistourne" name="tauxRistourne" type="text" value="<?= $this->nettoyer($societeuser['tauxRistourne']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['tauxRistourne']) ?>);">
<span class="input-group-text bg-white border-warning">%</span>
</div>
</td>
</tr>
<tr class="searchable-row">
<td class="text-center"><span class="badge-ghost bg-primary-ghost">08</span></td>
<td class="text-muted fw-bold small"><?= _("Seuil S/P annulant la ristourne au retrait de l'assuré.") ?></td>
<td class="text-center bg-light text-muted fw-bold"><?= $this->nettoyer($societeuser['seuilRistourne']) ?> %</td>
<td>
<div class="input-group input-group-sm">
<input class="form-control text-center fw-bold border-warning" id="seuilRistourne" name="seuilRistourne" type="text" value="<?= $this->nettoyer($societeuser['seuilRistourne']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['seuilRistourne']) ?>);">
<span class="input-group-text bg-white border-warning">%</span>
</div>
</td>
</tr>
<?php
$selects = [
['09', _("Archiver automatiquement les primes à l'incorporation."), 'archivageAutomatiquePrime', $archiveautoouinon],
['10', _("Notifier l'assuré de son numéro de carte."), 'notificationSmsNumeroAssure', $notificationSmsNumeroAssureouinon],
['11', _("Notifier l'assuré principal des numéros de carte de sa famille."), 'notificationGroupeNumeroAssure', $notificationGroupeNumeroAssureouinon],
['12', _("Activer la facturation par produit pour garant."), 'parametresFacturationGarantProduit', $parametresFacturationGarantProduitouinon],
['13', _("Autoriser l'upload de photo sur le portail assuré."), 'assureAjoutPhoto', $assureAjoutPhotoOuinon]
];
foreach($selects as $s): ?>
<tr class="searchable-row">
<td class="text-center"><span class="badge-ghost bg-primary-ghost"><?= $s[0] ?></span></td>
<td class="text-muted fw-bold"><?= $s[1] ?></td>
<td class="text-center bg-light text-muted fw-bold"><?= ($societeuser[$s[2]] == "1") ? _("Oui") : _("Non") ?></td>
<td>
<select class="form-select form-select-sm fw-bold border-warning" id="<?= $s[2] ?>" name="<?= $s[2] ?>">
<?php liste_options($s[3], $this->nettoyer($societeuser[$s[2]]), true); ?>
</select>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<div class="card border-0 shadow-sm mb-5">
<div class="card-header bg-success py-3 d-flex align-items-center justify-content-between">
<h6 class="mb-0 text-white fw-bold text-uppercase"><i class="fas fa-calculator me-2"></i><?= _("Paramètres Comptables") ?></h6>
<span class="badge bg-white text-success rounded-pill"><?= _("02 Paramètres") ?></span>
</div>
<div class="card-body p-0">
<table class="table table-hover align-middle mb-0">
<tbody>
<tr class="searchable-row">
<td width="5%" class="text-center"><span class="badge-ghost bg-success-ghost">01</span></td>
<td class="text-muted fw-bold"><?= _("Tolérance d'écart à l'encaissement des primes garants.") ?></td>
<td width="18%" class="text-center bg-light text-muted fw-bold"><?= format_N($this->nettoyer($societeuser['EcartEncaissementTolerable'])) ?> <?= $_SESSION['devise_C'] ?></td>
<td width="22%">
<div class="input-group input-group-sm">
<input class="form-control text-center fw-bold border-warning" id="ecartEncaissementTolerable" name="ecartEncaissementTolerable" type="text" value="<?= $this->nettoyer($societeuser['EcartEncaissementTolerable']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['EcartEncaissementTolerable']) ?>);">
<span class="input-group-text bg-white border-warning"><?= $_SESSION['devise_C'] ?></span>
</div>
</td>
</tr>
<tr class="searchable-row">
<td class="text-center"><span class="badge-ghost bg-success-ghost">02</span></td>
<td class="text-muted fw-bold"><?= _("Activer le lettrage automatique des primes garants.") ?></td>
<td class="text-center bg-light text-muted fw-bold"><?= ($societeuser['lettrageAutoGarant'] == "1") ? _("Oui") : _("Non") ?></td>
<td>
<select class="form-select form-select-sm fw-bold border-warning" id="lettrageAutoGarant" name="lettrageAutoGarant">
<?php liste_options($lettrageAutoGarantouinon, $this->nettoyer($societeuser['lettrageAutoGarant']), true); ?>
</select>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</form>
</div>
<script>
// RECHERCHE RAPIDE EN JAVASCRIPT PUR (SANS JQUERY)
document.addEventListener("DOMContentLoaded", function() {
const searchInput = document.getElementById('globalSearch');
if (searchInput) {
searchInput.addEventListener('keyup', function() {
const filter = this.value.toLowerCase();
const rows = document.querySelectorAll('.searchable-row');
rows.forEach(row => {
const text = row.textContent.toLowerCase();
// Si le texte correspond, on affiche la ligne, sinon on la cache
row.style.display = text.includes(filter) ? "" : "none";
});
});
}
});
</script>
<input class="sr-only" type="text" id="idSocieteuser" name="idSocieteuser" value="<?= $this->nettoyer($societeuser['idSocieteuser']) ?>" >
<legend > <?= _("MODIFIER PARAMETRES SYSTEME DE PRODUCTION ET DE COMPTABILITE") ?> </legend>
<table class="table table-striped table-bordered table-hover table-condensed table-responsive" style='font-size:11pt;'>
<thead>
<tr>
<th colspan="2" style="text-align: center; font-weight: bold; background-color:#696969; color:#fff;" height="25"><?= _("Paramètres") ?></th>
<th width="14%" style="text-align: center; font-weight: bold; background-color:#696969; color:#fff;" height="25"> <?= _("Ancienne Valeur") ?> </th>
<th width="14%" style="text-align: center; font-weight: bold; background-color:#696969; color:#fff;" height="25"> <?= _("Nouvelle Valeur") ?> </th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr style="background-color: #ffefd5;">
<td height="30" colspan="4" style='font-weight: bold; text-align: center; font-size:11pt;'> <?= _("PRODUCTION") ?> </td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-primary">01 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("Taux des honoraires ou des commissions du gestionnaire sur chaque prime.") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;"> <?=$this->nettoyer($societeuser['tauxHonoraires']) . " % "?> </td>
<td> <INPUT style='font-size:10pt; text-align:center;' class="form-control" id="tauxHonoraires" NAME="tauxHonoraires" TYPE="text" value="<?= $this->nettoyer($societeuser['tauxHonoraires']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['tauxHonoraires']) ?>);"></td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-primary">02 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("Rapport Sinistres/Primes au-delà duquel les lignes s'affichent en rouge dans les états statistiques. Il est utilisé pour le calcul du taux d'ajustement lors du renouvellement => Nouvelle Prime = ((Ancienne Prime * S/P) / spMax ). Ce qui veut dire que la S/P ne devrait pas dépasser ce rapport spMax") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;"> <?=$this->nettoyer($societeuser['spMax']) . " % "?> </td>
<td> <INPUT style='font-size:10pt; text-align:center;' class="form-control" id="spMax" NAME="spMax" TYPE="text" value="<?= $this->nettoyer($societeuser['spMax']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['spMax']) ?>);"></td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-primary">03 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("Le coût d'une nouvelle carte (assuré entrant)") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;"> <?=format_N($this->nettoyer($societeuser['fraisCarteAN'])) . " " . $_SESSION['devise_C']?> </td>
<td> <INPUT style='font-size:10pt; text-align:center;' class="form-control" id="fraisCarteAN" NAME="fraisCarteAN" TYPE="text" value="<?= $this->nettoyer($societeuser['fraisCarteAN']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['fraisCarteAN']) ?>);" ></td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-primary">04 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("Le coût d'une carte pour un renouvellement (assuré déjà dans le portefeuille)") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;"> <?=format_N($this->nettoyer($societeuser['fraisCarteREN'])) . " " . $_SESSION['devise_C']?> </td>
<td> <INPUT style='font-size:10pt; text-align:center;' class="form-control" id="fraisCarteREN" NAME="fraisCarteREN" TYPE="text" value="<?= $this->nettoyer($societeuser['fraisCarteREN']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['fraisCarteREN']) ?>);" ></td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-primary">05 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("Le coût pour ré-imprimer une carte existante (perdue, abîmée, etc.)") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;"> <?=format_N($this->nettoyer($societeuser['fraisCarteImp'])) . " " . $_SESSION['devise_C']?> </td>
<td> <INPUT style='font-size:10pt; text-align:center;' class="form-control" id="fraisCarteImp" NAME="fraisCarteImp" TYPE="text" value="<?= $this->nettoyer($societeuser['fraisCarteImp']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['fraisCarteImp']) ?>);" ></td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-primary">06 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("Rapport Sinistres/Primes au délà duquel une famille est marquée comme à consommation trop élevée") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;"> <?=$this->nettoyer($societeuser['spAlertAdherent']) . " % "?> </td>
<td> <INPUT style='font-size:10pt; text-align:center;' class="form-control" id="spAlertAdherent" NAME="spAlertAdherent" TYPE="text" value="<?= $this->nettoyer($societeuser['spAlertAdherent']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['spAlertAdherent']) ?>);" ></td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-primary">07 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("Taux à appliquer à la prime non acquise en cas de retrait d'un assuré afin d'avoir la prime à ristourner. Exemple, pour une prime non acquise de 100 000, on retournera 75 000 si tauxRistourne = 75%") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;"> <?=$this->nettoyer($societeuser['tauxRistourne']) . " % "?> </td>
<td> <INPUT style='font-size:10pt; text-align:center;' class="form-control" id="tauxRistourne" NAME="tauxRistourne" TYPE="text" value="<?= $this->nettoyer($societeuser['tauxRistourne']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['tauxRistourne']) ?>);" ></td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-primary">08 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("Rapport Sinistres/Primes au dela duquel, il n'y aura plus de ristourne en cas de retrait d'un assuré. Exemple si le seuil est de 65% et que le S/P de la police est de 55%, on aura une retourne en cas de retrait. Par contre, dès que le S/P de la police atteindra 65%, tous les futurs retraits se feront sans ristourne") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;"> <?=$this->nettoyer($societeuser['seuilRistourne']) . " % " ?> </td>
<td> <INPUT style='font-size:10pt; text-align:center;' class="form-control" id="seuilRistourne" NAME="seuilRistourne" TYPE="text" value="<?= $this->nettoyer($societeuser['seuilRistourne']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['seuilRistourne']) ?>);" ></td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-primary">09 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("Permettre l'archivage automatique des primes?") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;">
<?php if ($societeuser['archivageAutomatiquePrime']=="1"): ?>
<?= _("Oui") ?>
<?php else: ?>
<?= _("Non") ?>
<?php endif; ?>
</td>
<td>
<select class="form-select" id="archivageAutomatiquePrime" NAME="archivageAutomatiquePrime" style='font-size:10pt; text-align:center;' >
<?php liste_options($archiveautoouinon, $this->nettoyer($societeuser['archivageAutomatiquePrime']), true); ?>
</SELECT>
</td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-primary">10 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("Le bénéficiaire reçoit-il son numéro d'assuré par SMS, WhatsApp et/ou Mail ?") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;">
<?php if ($societeuser['notificationSmsNumeroAssure']=="1"): ?>
<?= _("Oui") ?>
<?php else: ?>
<?= _("Non") ?>
<?php endif; ?>
</td>
<td>
<select class="form-select" id="notificationSmsNumeroAssure" NAME="notificationSmsNumeroAssure" style='font-size:10pt; text-align:center;' >
<?php liste_options($notificationSmsNumeroAssureouinon, $this->nettoyer($societeuser['notificationSmsNumeroAssure']), true); ?>
</SELECT>
</td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-primary">11 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("L'assuré principal reçoit en groupe, les numéros d'assurés de tous les membres de sa famille, par SMS, WhatsApp et/ou E-Mail ?") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;">
<?php if ($societeuser['notificationGroupeNumeroAssure']=="1"): ?>
<?= _("Oui") ?>
<?php else: ?>
<?= _("Non") ?>
<?php endif; ?>
</td>
<td>
<select class="form-select" id="notificationGroupeNumeroAssure" NAME="notificationGroupeNumeroAssure" style='font-size:10pt; text-align:center;' >
<?php liste_options($notificationGroupeNumeroAssureouinon, $this->nettoyer($societeuser['notificationGroupeNumeroAssure']), true); ?>
</SELECT>
</td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-primary">12 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("Activer le paramétrage de la facturation d'un garant par produit ?") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;">
<?php if ($societeuser['parametresFacturationGarantProduit']=="1"): ?>
<?= _("Oui") ?>
<?php else: ?>
<?= _("Non") ?>
<?php endif; ?>
</td>
<td>
<select class="form-select" id="parametresFacturationGarantProduit" NAME="parametresFacturationGarantProduit" style='font-size:10pt; text-align:center;' >
<?php liste_options($parametresFacturationGarantProduitouinon, $this->nettoyer($societeuser['parametresFacturationGarantProduit']), true); ?>
</SELECT>
</td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-primary">13 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("Permettre aux adhérents d'ajouter les photos de leurs familles au niveau du portail assuré ?") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;">
<?php if ($societeuser['assureAjoutPhoto']=="1"): ?>
<?= _("Oui") ?>
<?php else: ?>
<?= _("Non") ?>
<?php endif; ?>
</td>
<td>
<select class="form-select" id="assureAjoutPhoto" NAME="assureAjoutPhoto" style='font-size:10pt; text-align:center;' >
<?php liste_options($assureAjoutPhotoOuinon, $this->nettoyer($societeuser['assureAjoutPhoto']), true); ?>
</SELECT>
</td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr style="background-color: #ffefd5;">
<td height="30" colspan="4" style='font-weight: bold; text-align: center; font-size:11pt;'> <?= _("COMPTABILITE") ?> </td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-success">01 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("La valeur de l'écart toléré lorsqu'un encaissement de prime ou de facture garant est fait") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;"> <?=format_N($this->nettoyer($societeuser['EcartEncaissementTolerable'])) . " " . $_SESSION['devise_C']?> </td>
<td> <INPUT style='font-size:10pt; text-align:center;' class="form-control" id="ecartEncaissementTolerable" NAME="ecartEncaissementTolerable" TYPE="text" value="<?= $this->nettoyer($societeuser['EcartEncaissementTolerable']) ?>" onBlur="javascript:controle_numerique_new(this.id, <?= $this->nettoyer($societeuser['EcartEncaissementTolerable']) ?>);" ></td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr height="50">
<td style='text-align:center;' width="5%" class=" text-success">02 <i class='bx bxs-right-arrow'></td>
<td class=" text-dark">
<?= _("Le lettrage des encaissements garants se fait-il automatiquement ?") ?>
</td>
<td style="text-align: center; background-color:#dcdcdc;">
<?php if ($societeuser['lettrageAutoGarant']=="1"): ?>
<?= _("Oui") ?>
<?php else: ?>
<?= _("Non") ?>
<?php endif; ?>
</td>
<td>
<select class="form-select" id="lettrageAutoGarant" NAME="lettrageAutoGarant" style='font-size:10pt; text-align:center;' >
<?php liste_options($lettrageAutoGarantouinon, $this->nettoyer($societeuser['lettrageAutoGarant']), true); ?>
</SELECT>
</td>
</tr>
<tr>
<td colspan="4" height="5"></td>
</tr>
<tr>
<td colspan="2"> <input id="btn_enreg" name="btn_enreg" class = "form-control btn btn-primary" type="button" value="<?= _("Enregistrer") ?>" onClick="javascript:enregistrer_modif_parametres_prod();" style='font-size:10pt;' > </td>
<td colspan="2"> <input class = "form-control btn btn-warning" type="button" value="<?= _("Annuler") ?>" onClick="javascript:afficher_autres_parametresgeneraux();" style='font-size:10pt;' > </td>
</tr>
</tbody>
</table>
<style>
/* Style spécifique Mode Édition */
#globalSearch:focus { border-color: #f39c12; box-shadow: 0 0 0 0.2rem rgba(243, 156, 18, 0.15); }
.form-control:focus, .form-select:focus { border-color: #f39c12 !important; box-shadow: 0 0 0 0.2rem rgba(243, 156, 18, 0.1) !important; }
.table td { border-bottom: 1px solid #f1f4f6 !important; padding-top: 0.8rem; padding-bottom: 0.8rem; }
</style>

File diff suppressed because it is too large Load Diff

View File

@ -1,188 +1,197 @@
<?php
$this->titre = "INTER SANTE - Paramètres Généraux";
$codeLangueSociete = $this->nettoyer($societeuser['codeLangueSociete']);
//$this->titre = "INTER SANTE - Paramètres Généraux";
$codeLangueSociete = $this->nettoyer($societeuser['codeLangueSociete']);
?>
<script type="text/javascript">
<div class="page-content">
<input class="sr-only" type="text" id="idSocieteuser" name="idSocieteuser" value="<?= $this->nettoyer($societeuser['idSocieteuser']) ?>">
</script>
<div class="header-section mb-3 sticky-top" style="z-index: 1020; top: 0px;">
<div class="d-flex align-items-center justify-content-between bg-white p-3 shadow-sm border-start border-warning border-4" style="border-radius: var(--radius-md);">
<div class="d-flex align-items-center">
<div class="icon-shape bg-warning-ghost text-warning rounded-circle me-3" style="width: 48px; height: 48px; display: flex; align-items: center; justify-content: center;">
<i class="fas fa-edit fs-4"></i>
</div>
<div>
<h4 id="titre-page" class="mb-0 fw-bold text-uppercase"><?= _("Modifer Configuration Globale") ?></h4>
<div class="d-flex align-items-center text-secondary small">
<span class="badge bg-warning text-white me-2 fw-bold text-uppercase" style="font-size: 0.6rem;"><?= _("Mode Édition") ?></span>
<?= _("Ajustez les paramètres opérationnels du centre de gestion") ?>
</div>
</div>
</div>
<div class="d-flex gap-2">
<button class="btn btn-outline-secondary btn-sm px-3 fw-bold border-2" onclick="afficher_parametresgeneraux();">
<i class="fas fa-times me-2"></i><?= _("Annuler") ?>
</button>
<button class="btn btn-primary btn-sm px-4 fw-bold shadow-sm" id="btn_enreg" onclick="enregistrer_modif_parametresgeneraux();">
<i class="fas fa-save me-2"></i><?= _("Enregistrer") ?>
</button>
</div>
</div>
</div>
<form id="formParametres" class="mt-2">
<div class="row g-4">
<div class="col-xl-7">
<div class="card border-0 shadow-sm h-100">
<div class="card-header bg-white py-3 border-bottom border-light">
<h6 class="mb-0 fw-bold text-primary"><i class="fas fa-fingerprint me-2"></i><?= _("Identité Institutionnelle") ?></h6>
</div>
<div class="card-body">
<div class="row g-3">
<div class="col-md-3">
<label class="form-label small fw-bold text-dark"><?= _("Code Interne") ?></label>
<input class="form-control bg-light border-0 fw-bold text-primary" type="text" value="<?=$this->nettoyer($societeuser['codeSociete'])?>" readonly>
</div>
<div class="col-md-4">
<label class="form-label small fw-bold text-dark required"><?= _("Type de Structure") ?></label>
<select class="selectpicker w-100" data-live-search="true" id="codeTypeSociete" name="codeTypeSociete" required>
<?php liste_options($typeSociete, $this->nettoyer($societeuser['typeSociete'])); ?>
</select>
</div>
<div class="col-md-5">
<label class="form-label small fw-bold text-dark required"><?= _("Nom Complet") ?></label>
<input class="form-control fw-bold text-dark" type="text" id="nomCentreGestion" name="nomCentreGestion" value="<?=$this->nettoyer($societeuser['nomSociete'])?>" required>
</div>
<div class="col-md-6">
<label class="form-label small fw-bold text-dark"><?= _("Sigle / Label") ?></label>
<input class="form-control" type="text" id="sigleSociete" name="sigleSociete" value="<?=$this->nettoyer($societeuser['sigleSociete'])?>">
</div>
<div class="col-md-6">
<label class="form-label small fw-bold text-dark"><?= _("Directeur / Responsable") ?></label>
<div class="input-group">
<span class="input-group-text bg-light text-muted border-end-0"><i class="fas fa-user-tie"></i></span>
<input class="form-control border-start-0" type="text" id="nomResponsable" name="nomResponsable" value="<?=$this->nettoyer($societeuser['nomResponsable'])?>">
</div>
</div>
</div>
<input class="sr-only" type="text" id="idSocieteuser" name="idSocieteuser" value="<?= $this->nettoyer($societeuser['idSocieteuser']) ?>" >
<div class="mt-4 p-3 rounded-3 bg-primary-ghost border border-white">
<h6 class="small fw-bold text-primary text-uppercase mb-3" style="letter-spacing: 0.5px;"><?= _("Localisation du Siège") ?></h6>
<div class="row g-3">
<div class="col-md-6">
<label class="form-label small fw-bold text-dark required"><?= _("Pays") ?></label>
<select onchange="liste_villes();" class="selectpicker w-100" data-live-search="true" id="codePays" name="codePays" required>
<?php liste_options($pays, $this->nettoyer($societeuser['codePays'])); ?>
</select>
</div>
<div class="col-md-6">
<label class="form-label small fw-bold text-dark required"><?= _("Ville") ?></label>
<div id="div_ville">
<select class="selectpicker w-100" data-live-search="true" id="ville" name="ville" required>
<?php liste_options($villes, $this->nettoyer($societeuser['ville'])); ?>
</select>
</div>
</div>
<div class="col-md-12">
<label class="form-label small fw-bold text-dark"><?= _("Adresse Géographique") ?></label>
<input class="form-control" type="text" id="adresseGeoSociete" name="adresseGeoSociete" value="<?=$this->nettoyer($societeuser['adresseGeoSociete'])?>">
</div>
</div>
</div>
</div>
</div>
</div>
<legend > <?= _("Modifier Paramètres Système du Centre de Gestion") ?> </legend>
<div class="col-xl-5">
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white py-3 border-bottom border-light">
<h6 class="mb-0 fw-bold text-primary"><i class="fas fa-address-book me-2"></i><?= _("Canaux de Contact") ?></h6>
</div>
<div class="card-body">
<div class="row g-3">
<div class="col-md-6">
<label class="form-label small fw-bold text-dark"><?= _("Tél. Fixe") ?></label>
<input class="form-control" type="text" id="telephoneSociete" name="telephoneSociete" value="<?=$this->nettoyer($societeuser['telephoneSociete'])?>">
</div>
<div class="col-md-6">
<label class="form-label small fw-bold text-dark"><?= _("Tél. Mobile") ?></label>
<input class="form-control fw-bold" type="text" id="portable" name="portable" value="<?=$this->nettoyer($societeuser['portable'])?>">
</div>
<div class="col-12">
<label class="form-label small fw-bold text-dark required"><?= _("E-mail Officiel") ?></label>
<div class="input-group">
<span class="input-group-text bg-light border-end-0 text-muted"><i class="fas fa-envelope"></i></span>
<input class="form-control border-start-0" type="email" id="emailSociete" name="emailSociete" value="<?=$this->nettoyer($societeuser['emailSociete'])?>" required>
</div>
</div>
</div>
</div>
</div>
<table class="table table-responsive table-condensed" style='font-size:9pt;'>
<tbody>
<tr>
<td width="13%" class="required">Code</td>
<td width="10%"><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="codeSociete" NAME="codeSociete" value="<?=$this->nettoyer($societeuser['codeSociete'])?>" readonly></td>
<td width="12%" align="center" class="required"> <?= _("Type") ?> </td>
<td >
<select class="form-control selectpicker" data-live-search="true" id="codeTypeSociete" NAME="codeTypeSociete" required AUTOCOMPLETE="OFF">
<?php liste_options($typeSociete, $this->nettoyer($societeuser['typeSociete'])); ?>
</SELECT>
</td>
<td width="14%" align="center" class="required"> <?= _("Nom") ?> </td>
<td colspan="3"><INPUT style='font-size:9pt; text-transform: uppercase;' class="form-control" TYPE="text" id="nomCentreGestion" NAME="nomCentreGestion" value="<?=$this->nettoyer($societeuser['nomSociete'])?>" required AUTOCOMPLETE="OFF" ></td>
</tr>
<tr>
<td width="10%" ><?= _("Adresse Géographique") ?></td>
<td colspan="3"><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="adresseGeoSociete" NAME="adresseGeoSociete" value="<?=$this->nettoyer($societeuser['adresseGeoSociete'])?>"></td>
<div class="card border-0 shadow-sm" style="background: #fcfdfe;">
<div class="card-body">
<div class="row g-3">
<div class="col-md-6">
<label class="form-label small fw-bold text-dark"><?= _("Langue Système") ?></label>
<select class="form-select border-2" id="codeLangueUser" name="codeLangueUser">
<?php liste_options($langue, $codeLangueSociete, true); ?>
</select>
</div>
<div class="col-md-6">
<label class="form-label small fw-bold text-dark"><?= _("Journalisation") ?></label>
<select class="form-select border-2" id="activerLogVisitePages" name="activerLogVisitePages">
<?php liste_options($visitePage, $this->nettoyer($societeuser['activerLogVisitePages']), true); ?>
</select>
</div>
</div>
</div>
</div>
</div>
<td width="10%" align="center"> <?= _("Adresse Postale") ?> </td>
<td colspan="3"><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="adressePostSociete" NAME="adressePostSociete" value="<?=$this->nettoyer($societeuser['adressePostSociete'])?>"></td>
</tr>
<div class="col-12 mb-5">
<div class="card border-0 shadow-sm">
<div class="card-header bg-white py-3 border-bottom border-light">
<h6 class="mb-0 fw-bold text-primary"><i class="fas fa-microchip me-2"></i><?= _("Configuration des Passerelles (Notifications)") ?></h6>
</div>
<div class="card-body p-4">
<div class="row g-3 mb-4 p-3 border rounded-3" style="border-style: dashed !important; border-color: #f39c12 !important; background-color: rgba(243, 156, 18, 0.02);">
<div class="col-md-2">
<label class="form-label small fw-bold text-warning text-uppercase" style="font-size: 0.65rem;"><?= _("Seuil Alerte Conso") ?></label>
<div class="input-group input-group-sm">
<input class="form-control fw-bold border-warning" type="number" id="alertLimiteConsommation" name="alertLimiteConsommation" value="<?=$this->nettoyer($societeuser['alertLimiteConsommation'])?>">
<span class="input-group-text bg-warning text-white border-warning">%</span>
</div>
</div>
<div class="col-md-10">
<label class="form-label small fw-bold text-dark"><?= _("Email de Notification (Alerte Consommation)") ?></label>
<input class="form-control border-warning" type="email" id="emailAlertLimiteConsommation" name="emailAlertLimiteConsommation" value="<?=$this->nettoyer($societeuser['emailAlertLimiteConsommation'])?>">
</div>
</div>
<tr>
<td class="required"> <?= _("Pays") ?> </td>
<td colspan="3">
<SELECT onChange="liste_villes();" class="form-control selectpicker" data-live-search="true" id="codePays" NAME="codePays" required AUTOCOMPLETE="OFF">
<?php liste_options($pays, $this->nettoyer($societeuser['codePays'])); ?>
</SELECT>
</td>
<td align="center" class="required"> <?= _("Ville") ?> </td>
<td colspan="3">
<div id="div_ville">
<select class="form-control selectpicker" data-live-search="true" id="ville" NAME="ville" required AUTOCOMPLETE="OFF">
<?php liste_options($villes, $this->nettoyer($societeuser['ville'])); ?>
</SELECT>
</div>
</td>
</tr>
<tr>
<td > <?= _("Téléphone Fixe") ?> </td>
<td colspan="3"><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="telephoneSociete" NAME="telephoneSociete" value="<?=$this->nettoyer($societeuser['telephoneSociete'])?>" ></td>
<td align="center"> Fax </td>
<td colspan="3"><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="faxSociete" NAME="faxSociete" value="<?=$this->nettoyer($societeuser['faxSociete'])?>" ></td>
</tr>
<tr>
<td> <?= _("Téléphone Mobile") ?> </td>
<td colspan="3"><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="portable" NAME="portable" value="<?=$this->nettoyer($societeuser['portable'])?>" ></td>
<td class="required" align="center"> <?= _("E-mail Centre Gestion") ?> </td>
<td colspan="3"><INPUT style='font-size:9pt;' class="form-control" TYPE="email" id="emailSociete" NAME="emailSociete" value="<?=$this->nettoyer($societeuser['emailSociete'])?>" required AUTOCOMPLETE="OFF"></td>
</tr>
<tr>
<td > <?= _("Responsable") ?> </td>
<td colspan="3"><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="nomResponsable" NAME="nomResponsable" value="<?=$this->nettoyer($societeuser['nomResponsable'])?>" ></td>
<td align="center"> <?= _("Sigle") ?> </td>
<td colspan="3"><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="sigleSociete" NAME="sigleSociete" value="<?=$this->nettoyer($societeuser['sigleSociete'])?>" ></td>
</tr>
<tr>
<td> <?= _("E-mail Médécin Conseil") ?> </td>
<td colspan="7" ><INPUT style='font-size:9pt;' class="form-control" TYPE="email" id="emailMedecinConseil" NAME="emailMedecinConseil" value="<?=$this->nettoyer($societeuser['emailMedecinConseil'])?>" ></td>
</tr>
<tr>
<td> <?= _("E-mail Bons") ?> </td>
<td colspan="7" ><INPUT style='font-size:9pt;' class="form-control" TYPE="email" id="emailGestionBon" NAME="emailGestionBon" value="<?=$this->nettoyer($societeuser['emailGestionBon'])?>" ></td>
</tr>
<tr>
<td> <?= _("E-mail Comptabilité") ?> </td>
<td colspan="7" ><INPUT style='font-size:9pt;' class="form-control" TYPE="email" id="emailCcomptabilite" NAME="emailCcomptabilite" value="<?=$this->nettoyer($societeuser['emailCcomptabilite'])?>" ></td>
</tr>
<tr>
<td> <?= _("E-mail Dérogation") ?> </td>
<td colspan="7" ><INPUT style='font-size:9pt;' class="form-control" TYPE="email" id="emailDerogation" NAME="emailDerogation" value="<?=$this->nettoyer($societeuser['emailDerogation'])?>" ></td>
</tr>
<tr>
<td> <?= _("E-mail Accord") ?> </td>
<td colspan="7" ><INPUT style='font-size:9pt;' class="form-control" TYPE="email" id="emailAccordPrealable" NAME="emailAccordPrealable" value="<?=$this->nettoyer($societeuser['emailAccordPrealable'])?>" ></td>
</tr>
<tr>
<td> <?= _("E-mail Fraude") ?> </td>
<td colspan="7" ><INPUT style='font-size:9pt;' class="form-control" TYPE="email" id="emailFraudeFinger" NAME="emailFraudeFinger" value="<?=$this->nettoyer($societeuser['emailFraudeFinger'])?>" ></td>
</tr>
<tr>
<td> <?= _("E-mail RD") ?> </td>
<td colspan="7" ><INPUT style='font-size:9pt;' class="form-control" TYPE="email" id="emailRd" NAME="emailRd" value="<?=$this->nettoyer($societeuser['emailRd'])?>" ></td>
</tr>
<tr>
<td > <?= _("Code Préfixe Police") ?> </td>
<td colspan="3"><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="codePrefixePolice" NAME="codePrefixePolice" value="<?=$this->nettoyer($societeuser['codePrefixePolice'])?>"></td>
<td align="center"> <?= _("SMS RD") ?> </td>
<td colspan="3" ><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="smsRd" NAME="smsRd" value="<?=$this->nettoyer($societeuser['smsRd'])?>" ></td>
</tr>
<tr>
<td> <?= _("SMS Médécin Conseil") ?> </td>
<td colspan="3" ><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="smsMedecinConseil" NAME="smsMedecinConseil" value="<?=$this->nettoyer($societeuser['smsMedecinConseil'])?>" ></td>
<td align="center"> <?= _("SMS Bons") ?> </td>
<td colspan="3" ><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="smsGestionBon" NAME="smsGestionBon" value="<?=$this->nettoyer($societeuser['smsGestionBon'])?>" ></td>
</tr>
<tr>
<td> <?= _("SMS Dérogation") ?> </td>
<td colspan="3" ><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="smsDerogation" NAME="smsDerogation" value="<?=$this->nettoyer($societeuser['smsDerogation'])?>" ></td>
<td align="center"> <?= _("SMS Accord") ?> </td>
<td colspan="3" ><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="smsAccordPrealable" NAME="smsAccordPrealable" value="<?=$this->nettoyer($societeuser['smsAccordPrealable'])?>" ></td>
</tr>
<tr>
<td> <?= _("Activer Logs Visite Page?") ?> </td>
<td>
<SELECT style="font-size:9pt;" class="form-select" id="activerLogVisitePages" NAME="activerLogVisitePages" >
<?php liste_options($visitePage, $this->nettoyer($societeuser['activerLogVisitePages']), true); ?>
</SELECT>
</td>
<td align="center"> <?= _("Taux Alerte Limite Conso (%)") ?> </td>
<td>
<INPUT style='font-size:9pt;' class="form-control" TYPE="number" id="alertLimiteConsommation" NAME="alertLimiteConsommation" value="<?=$this->nettoyer($societeuser['alertLimiteConsommation'])?>" >
</td>
<td align="center"> <?= _("E-mail Alerte Limite Conso") ?> </td>
<td colspan="3"><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="emailAlertLimiteConsommation" NAME="emailAlertLimiteConsommation" value="<?=$this->nettoyer($societeuser['emailAlertLimiteConsommation'])?>"></td>
</tr>
<tr>
<td> <?= _("Langue") ?> </td>
<td>
<SELECT style="font-size:9pt;" class="form-select" id="codeLangueUser" NAME="codeLangueUser" >
<?php liste_options($langue, $codeLangueSociete, true); ?>
</SELECT>
</td>
<td align="center"> <?= _("Indicatif Téléphone") ?> </td>
<td><INPUT class="form-control" style='font-size:9pt;' TYPE="text" id="indicatifTelephone" NAME="indicatifTelephone" value="<?=$this->nettoyer($societeuser['indicatifTelephone'])?>" readonly></td>
<td align="center"> <?= _("Taux Alerte S/P (%)") ?> </td>
<td><INPUT style='font-size:9pt;' class="form-control" TYPE="number" id="spMax" NAME="spMax" value="<?=$this->nettoyer($societeuser['spMax'])?>" readonly></td>
<td align="center"> <?= _("Carte AFN") ?> </td>
<td><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="fraisCarteAN" NAME="fraisCarteAN" value="<?=format_N($this->nettoyer($societeuser['fraisCarteAN']))?>" readonly></td>
</tr>
<tr>
<td> </td>
<td colspan="3"> <input id="btn_enreg" name="btn_enreg" class = "form-control btn btn-primary" type="button" value="<?= _("Enregistrer") ?>" onClick="javascript:enregistrer_modif_parametresgeneraux();" style='font-size:9pt;' > </td>
<td> </td>
<td colspan="3"> <input class = "form-control btn btn-warning" type="button" value="<?= _("Annuler") ?>" onClick="javascript:afficher_parametresgeneraux();" style='font-size:9pt;' > </td>
</tr>
</tbody>
</table>
<div class="row g-3">
<?php
$emails = [
['id' => 'emailMedecinConseil', 'label' => 'Médécin Conseil', 'icon' => 'fa-user-md', 'sms' => 'smsMedecinConseil'],
['id' => 'emailGestionBon', 'label' => 'Gestion des Bons', 'icon' => 'fa-ticket-alt', 'sms' => 'smsGestionBon'],
['id' => 'emailCcomptabilite', 'label' => 'Comptabilité', 'icon' => 'fa-calculator', 'sms' => null],
['id' => 'emailDerogation', 'label' => 'Dérogation', 'icon' => 'fa-exclamation-circle', 'sms' => 'smsDerogation'],
['id' => 'emailAccordPrealable', 'label' => 'Accord Préalable', 'icon' => 'fa-check-double', 'sms' => 'smsAccordPrealable'],
['id' => 'emailFraudeFinger', 'label' => 'Fraude & Biométrie', 'icon' => 'fa-fingerprint', 'sms' => null],
['id' => 'emailRd', 'label' => 'Remboursement (RD)', 'icon' => 'fa-hand-holding-usd', 'sms' => 'smsRd'],
];
foreach($emails as $e): ?>
<div class="col-md-6 col-lg-4 col-xl-3">
<div class="p-3 border rounded-3 bg-white h-100 shadow-xs hover-shadow-sm transition-all">
<label class="form-label small fw-bold text-primary mb-2">
<i class="fas <?= $e['icon'] ?> me-2 opacity-50"></i><?= _($e['label']) ?>
</label>
<input class="form-control form-control-sm mb-2" type="email" id="<?= $e['id'] ?>" name="<?= $e['id'] ?>" value="<?=$this->nettoyer($societeuser[$e['id']])?>" placeholder="Email...">
<?php if($e['sms']): ?>
<div class="input-group input-group-sm">
<span class="input-group-text bg-light text-muted fw-bold" style="font-size: 0.6rem;">SMS</span>
<input class="form-control" type="text" id="<?= $e['sms'] ?>" name="<?= $e['sms'] ?>" value="<?=$this->nettoyer($societeuser[$e['sms']])?>">
</div>
<?php endif; ?>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
</div>
</form>
</div>

View File

@ -1,152 +1,256 @@
<?php $this->titre = "INTER SANTE - Paramètres Généraux"; ?>
<script type="text/javascript">
<div class="page-content">
<input class="sr-only" type="text" id="idSocieteuser" name="idSocieteuser" value="<?= $this->nettoyer($societeuser['idSocieteuser']) ?>">
</script>
<div class="header-section mb-4">
<div class="d-flex align-items-center justify-content-between bg-white p-3 shadow-sm border-start border-primary border-4" style="border-radius: var(--radius-md);">
<div class="d-flex align-items-center">
<div class="icon-shape bg-primary-ghost text-primary rounded-circle me-3" style="width: 48px; height: 48px; display: flex; align-items: center; justify-content: center;">
<i class="fas fa-sliders-h fs-4"></i>
</div>
<div>
<h4 id="titre-page" class="mb-0 fw-bold text-uppercase"><?= _("Configuration Globale") ?></h4>
<p class="text-muted small mb-0"><?= _("Profil institutionnel et passerelles de communication du centre") ?></p>
</div>
</div>
<div class="text-end d-none d-md-block">
<span class="badge bg-light text-dark border px-3 py-2 fw-bold" style="border-radius: var(--radius-sm);">
<i class="fas fa-globe me-2 text-primary"></i><?= $this->nettoyer($_SESSION['libelleLang']) ?>
</span>
</div>
</div>
</div>
<input class="sr-only" type="text" id="idSocieteuser" name="idSocieteuser" value="<?= $this->nettoyer($societeuser['idSocieteuser']) ?>" >
<div class="row g-4">
<div class="col-xl-7">
<div class="card border-0 shadow-sm h-100" style="border-radius: var(--radius-md);">
<div class="card-header bg-transparent border-0 pt-4 px-4">
<h6 class="fw-bold mb-0 text-uppercase small text-dark" style="letter-spacing: 1px;">
<i class="fas fa-id-badge me-2 text-primary"></i><?= _("Profil Institutionnel") ?>
</h6>
</div>
<div class="card-body p-4">
<div class="row g-3">
<div class="col-md-3">
<label class="form-label small text-dark fw-bold"><?= _("Code") ?></label>
<div class="p-2 bg-light border rounded text-center fw-bold text-primary"><?= $this->nettoyer($societeuser['codeSociete']) ?></div>
</div>
<div class="col-md-6">
<label class="form-label small text-dark fw-bold"><?= _("Dénomination") ?></label>
<input class="form-control border-0 bg-light" type="text" value="<?=$this->nettoyer($societeuser['nomSociete'])?>" readonly>
</div>
<div class="col-md-3">
<label class="form-label small text-dark fw-bold"><?= _("Sigle") ?></label>
<input class="form-control border-0 bg-light" type="text" value="<?=$this->nettoyer($societeuser['sigleSociete'])?>" readonly>
</div>
<legend > <?= _("Paramètres système du centre de gestion") ?> </legend>
<div class="col-12 mt-4">
<div class="row g-3 p-3 rounded" style="background-color: #f8f9fa;">
<div class="col-md-6">
<label class="form-label small text-dark"><i class="fas fa-map-marker-alt me-1"></i> <?= _("Siège Social") ?></label>
<textarea class="form-control form-control-sm border-0 bg-white" rows="2" readonly><?=$this->nettoyer($societeuser['adresseGeoSociete'])?></textarea>
</div>
<div class="col-md-6">
<label class="form-label small text-dark"><i class="fas fa-box me-1"></i> <?= _("Boite Postale") ?></label>
<textarea class="form-control form-control-sm border-0 bg-white" rows="2" readonly><?=$this->nettoyer($societeuser['adressePostSociete'])?></textarea>
</div>
<div class="col-md-6">
<label class="form-label small text-dark"><?= _("Ville") ?></label>
<input class="form-control form-control-sm border-0 bg-white" type="text" value="<?=$this->nettoyer($societeuser['ville'])?>" readonly>
</div>
<div class="col-md-6">
<label class="form-label small text-dark"><?= _("Pays") ?></label>
<input class="form-control form-control-sm border-0 bg-white fw-bold" type="text" value="<?=$societeuser['pays']?>" readonly>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<table class="table table-responsive table-condensed" style='font-size:9pt;'>
<tbody>
<tr>
<td width="10%" >Code</td>
<td width="10%"><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="codeSociete" NAME="codeSociete" value="<?=$this->nettoyer($societeuser['codeSociete'])?>" readonly></td>
<div class="col-xl-5">
<div class="card border-0 shadow-sm h-100" style="border-radius: var(--radius-md);">
<div class="card-header bg-transparent border-0 pt-4 px-4 text-center">
<div class="avatar-md mx-auto mb-3">
<div class="rounded-circle bg-primary-ghost text-primary d-flex align-items-center justify-content-center mx-auto" style="width: 60px; height: 60px;">
<i class="fas fa-user-tie fs-3"></i>
</div>
</div>
<h6 class="fw-bold mb-1"><?= $this->nettoyer($societeuser['nomResponsable']) ?></h6>
<p class="text-dark small"><?= _("Responsable du Centre") ?></p>
</div>
<div class="card-body px-4 pt-0">
<ul class="list-group list-group-flush border-top border-light">
<li class="list-group-item d-flex justify-content-between align-items-center px-0 py-3 bg-transparent">
<span class="small text-dark"><i class="fas fa-phone-alt me-2 text-primary opacity-50"></i><?= _("Standard Fixe") ?></span>
<span class="fw-medium"><?= $this->nettoyer($societeuser['telephoneSociete']) ?></span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center px-0 py-3 bg-transparent">
<span class="small text-dark"><i class="fas fa-mobile-alt me-2 text-primary opacity-50"></i><?= _("Ligne Directe") ?></span>
<span class="fw-medium"><?= $this->nettoyer($societeuser['portable']) ?></span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center px-0 py-3 bg-transparent">
<span class="small text-dark"><i class="fas fa-envelope me-2 text-primary opacity-50"></i><?= _("Email Officiel") ?></span>
<span class="fw-medium"><?= $this->nettoyer($societeuser['emailSociete']) ?></span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center px-0 py-3 bg-transparent border-bottom-0">
<span class="small text-dark"><i class="fas fa-fax me-2 text-primary opacity-50"></i><?= _("Fax") ?></span>
<span class="fw-medium"><?= $this->nettoyer($societeuser['faxSociete']) ?></span>
</li>
</ul>
</div>
</div>
</div>
<td width="12%" align="center"> <?= _("Nom") ?> </td>
<td><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="nomSociete" NAME="nomSociete" value="<?=$this->nettoyer($societeuser['nomSociete'])?>" readonly></td>
<td width="12%" align="center" ><?= _("Adresse Géo") ?></td>
<td><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="adresseGeoSociete" NAME="adresseGeoSociete" value="<?=$this->nettoyer($societeuser['adresseGeoSociete'])?>" readonly></td>
<div class="col-12">
<div class="card border-0 shadow-sm" style="border-radius: var(--radius-md);">
<div class="card-header bg-white py-3 px-4 border-bottom border-light d-flex align-items-center">
<i class="fas fa-envelope-open-text me-3 text-primary fs-5"></i>
<div>
<h6 class="mb-0 fw-bold"><?= _("Points de Contact par Service") ?></h6>
<p class="mb-0 text-dark small"><?= _("Configuration des passerelles emails pour la gestion automatisée") ?></p>
</div>
</div>
<div class="card-body p-4">
<div class="row g-4">
<?php
$services = [
['l' => 'Médecin Conseil', 'v' => 'emailMedecinConseil', 'i' => 'fa-user-md', 'sms' => 'smsMedecinConseil'],
['l' => 'Gestion des Bons', 'v' => 'emailGestionBon', 'i' => 'fa-ticket-alt', 'sms' => 'smsGestionBon'],
['l' => 'Comptabilité', 'v' => 'emailCcomptabilite', 'i' => 'fa-calculator', 'sms' => null],
['l' => 'Dérogation', 'v' => 'emailDerogation', 'i' => 'fa-exclamation-circle', 'sms' => 'smsDerogation'],
['l' => 'Accord Préalable', 'v' => 'emailAccordPrealable', 'i' => 'fa-check-double', 'sms' => 'smsAccordPrealable'],
['l' => 'Lutte Fraude', 'v' => 'emailFraudeFinger', 'i' => 'fa-fingerprint', 'sms' => null],
['l' => 'Remboursements', 'v' => 'emailRd', 'i' => 'fa-hand-holding-usd', 'sms' => 'smsRd'],
];
<td width="10%" align="center"> <?= _("Adresse Postale") ?> </td>
<td><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="adressePostSociete" NAME="adressePostSociete" value="<?=$this->nettoyer($societeuser['adressePostSociete'])?>" readonly></td>
</tr>
foreach($services as $s): ?>
<div class="col-md-6 col-lg-4 col-xl-3">
<div class="p-3 border rounded shadow-xs h-100 transition-base hover-shadow-sm">
<div class="d-flex align-items-center mb-2">
<i class="fas <?= $s['i'] ?> text-primary opacity-50 me-2"></i>
<span class="small fw-bold text-dark"><?= _($s['l']) ?></span>
</div>
<div class="mb-2">
<label class="text-dark" style="font-size: 0.65rem; text-uppercase; font-weight: 700;"><?= _("Email Service") ?></label>
<div class="small text-truncate text-primary"><?= $this->nettoyer($societeuser[$s['v']]) ?></div>
</div>
<?php if($s['sms']): ?>
<div>
<label class="text-dark" style="font-size: 0.65rem; text-uppercase; font-weight: 700;"><?= _("SMS Alertes") ?></label>
<div class="small text-dark fw-medium"><?= $this->nettoyer($societeuser[$s['sms']]) ?></div>
</div>
<?php endif; ?>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
<tr>
<td> <?= _("Ville") ?> </td>
<td>
<select class="form-select" id="ville" NAME="ville" disabled>
<?php liste_options($villes, $this->nettoyer($societeuser['ville'])); ?>
</SELECT>
</td>
<div class="col-12 mb-5">
<div class="card border-0 shadow-sm" style="border-radius: var(--radius-md); background: linear-gradient(to right, #ffffff, #fdfdfd);">
<div class="card-body p-4">
<div class="row g-4 align-items-center">
<div class="col-md-4 border-end border-light">
<div class="d-flex align-items-center">
<div class="icon-shape bg-warning-ghost text-warning rounded-circle me-3" style="width: 40px; height: 40px; display: flex; align-items: center; justify-content: center;">
<i class="fas fa-chart-line"></i>
</div>
<div class="flex-grow-1">
<label class="form-label small text-dark mb-0"><?= _("Alerte Consommation") ?></label>
<div class="d-flex align-items-center mt-1">
<span class="h4 mb-0 fw-bold text-dark"><?= $this->nettoyer($societeuser['alertLimiteConsommation']) ?></span>
<span class="ms-1 text-dark fw-bold">%</span>
<div class="ms-3 small text-dark text-truncate" style="max-width: 150px;" title="<?= $this->nettoyer($societeuser['emailAlertLimiteConsommation']) ?>">
<i class="fas fa-paper-plane me-1"></i><?= $this->nettoyer($societeuser['emailAlertLimiteConsommation']) ?>
</div>
</div>
</div>
</div>
</div>
<td align="center"> <?= _("Téléphone") ?> </td>
<td><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="telephoneSociete" NAME="telephoneSociete" value="<?=$this->nettoyer($societeuser['telephoneSociete'])?>" readonly></td>
<td align="center"> Fax </td>
<td><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="faxSociete" NAME="faxSociete" value="<?=$this->nettoyer($societeuser['faxSociete'])?>" readonly></td>
<div class="col-md-3 border-end border-light">
<div class="d-flex align-items-center">
<div class="icon-shape bg-danger-ghost text-danger rounded-circle me-3" style="width: 40px; height: 40px; display: flex; align-items: center; justify-content: center;">
<i class="fas fa-shield-alt"></i>
</div>
<div>
<label class="form-label small text-dark mb-0"><?= _("Taux Alerte S/P Max") ?></label>
<div class="h4 mb-0 fw-bold text-danger"><?= $this->nettoyer($societeuser['spMax']) ?> <small class="fs-6">%</small></div>
</div>
</div>
</div>
<td align="center"> E-mail </td>
<td><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="emailSociete" NAME="emailSociete" value="<?=$this->nettoyer($societeuser['emailSociete'])?>" readonly></td>
</tr>
<tr>
<td> <?= _("Tél Portable") ?> </td>
<td><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="portable" NAME="portable" value="<?=$this->nettoyer($societeuser['portable'])?>" readonly></td>
<div class="col-md-3 border-end border-light">
<div class="d-flex align-items-center">
<div class="icon-shape bg-success-ghost text-success rounded-circle me-3" style="width: 40px; height: 40px; display: flex; align-items: center; justify-content: center;">
<i class="fas fa-credit-card"></i>
</div>
<div>
<label class="form-label small text-dark mb-0"><?= _("Tarif Carte AFN") ?></label>
<div class="h4 mb-0 fw-bold text-dark"><?= format_N($this->nettoyer($societeuser['fraisCarteAN'])) ?> <small class="fs-6 fw-normal text-dark">FCFA</small></div>
</div>
</div>
</div>
<td align="center"> <?= _("Responsable") ?> </td>
<td><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="nomResponsable" NAME="nomResponsable" value="<?=$this->nettoyer($societeuser['nomResponsable'])?>" readonly></td>
<div class="col-md-2">
<label class="form-label small text-dark mb-1"><?= _("Logs Visites") ?></label>
<?php
$logStatus = $this->nettoyer($societeuser['activerLogVisitePages']);
$badgeClass = ($logStatus == 'OUI' || $logStatus == '1') ? 'bg-success' : 'bg-secondary';
?>
<div class="badge <?= $badgeClass ?> d-block py-2 rounded-pill">
<i class="fas fa-history me-1"></i> <?= $logStatus ?>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<td align="center"> <?= _("Pays") ?> </td>
<td><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="pays" NAME="pays" value="<?=$societeuser['pays']?>" readonly></td>
<style>
/* --- Optimisations spécifiques Thème Modern --- */
.page-content {
font-family: 'DM Sans', sans-serif;
color: var(--text-secondary);
}
<td align="center"> <?= _("Sigle") ?> </td>
<td><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="sigleSociete" NAME="sigleSociete" value="<?=$this->nettoyer($societeuser['sigleSociete'])?>" readonly></td>
</tr>
<tr>
<td> <?= _("E-mail Médecin Conseil") ?> </td>
<td colspan="7" ><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="emailMedecinConseil" NAME="emailMedecinConseil" value="<?=$this->nettoyer($societeuser['emailMedecinConseil'])?>" readonly></td>
</tr>
<tr>
<td> <?= _("E-mail Bons") ?> </td>
<td colspan="7" ><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="emailGestionBon" NAME="emailGestionBon" value="<?=$this->nettoyer($societeuser['emailGestionBon'])?>" readonly></td>
</tr>
.card {
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
<tr>
<td> <?= _("E-mail Comptabilité") ?> </td>
<td colspan="7" ><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="emailCcomptabilite" NAME="emailCcomptabilite" value="<?=$this->nettoyer($societeuser['emailCcomptabilite'])?>" readonly></td>
</tr>
<tr>
<td> <?= _("E-mail Dérogation") ?> </td>
<td colspan="7" ><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="emailDerogation" NAME="emailDerogation" value="<?=$this->nettoyer($societeuser['emailDerogation'])?>" readonly></td>
</tr>
.hover-shadow-sm:hover {
box-shadow: 0 10px 20px rgba(0,0,0,0.05) !important;
border-color: var(--color-primary-light) !important;
}
<tr>
<td> <?= _("E-mail Accord") ?> </td>
<td colspan="7" ><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="emailAccordPrealable" NAME="emailAccordPrealable" value="<?=$this->nettoyer($societeuser['emailAccordPrealable'])?>" readonly></td>
</tr>
<tr>
<td> <?= _("E-mail Fraude") ?> </td>
<td colspan="7" ><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="emailFraudeFinger" NAME="emailFraudeFinger" value="<?=$this->nettoyer($societeuser['emailFraudeFinger'])?>" readonly></td>
</tr>
<tr>
<td> <?= _("E-mail RD") ?> </td>
<td colspan="7" ><INPUT style='font-size:9pt;' class="form-control" TYPE="email" id="emailRd" NAME="emailRd" value="<?=$this->nettoyer($societeuser['emailRd'])?>" readonly></td>
</tr>
<tr>
<td > <?= _("Code Préfixe Police") ?> </td>
<td colspan="3"><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="codePrefixePolice" NAME="codePrefixePolice" value="<?=$this->nettoyer($societeuser['codePrefixePolice'])?>" readonly></td>
<td align="center"> <?= _("SMS RD") ?> </td>
<td colspan="3" ><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="smsRd" NAME="smsRd" value="<?=$this->nettoyer($societeuser['smsRd'])?>" readonly></td>
</tr>
.input-group-text {
background-color: #f8f9fa;
border-color: #e9ecef;
}
<tr>
<td> <?= _("SMS Méd Cons") ?> </td>
<td colspan="3" ><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="smsMedecinConseil" NAME="smsMedecinConseil" value="<?=$this->nettoyer($societeuser['smsMedecinConseil'])?>" readonly></td>
.form-control[readonly] {
cursor: default;
font-weight: 500;
}
<td align="center"> <?= _("SMS Bons") ?> </td>
<td colspan="3" ><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="smsGestionBon" NAME="smsGestionBon" value="<?=$this->nettoyer($societeuser['smsGestionBon'])?>" readonly></td>
</tr>
.bg-primary-ghost { background: rgba(33, 46, 83, 0.08); }
.bg-warning-ghost { background: rgba(243, 156, 18, 0.08); }
.bg-danger-ghost { background: rgba(192, 57, 43, 0.08); }
.bg-success-ghost { background: rgba(39, 174, 96, 0.08); }
<tr>
<td> <?= _("SMS Dérogation") ?> </td>
<td colspan="3" > <INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="smsDerogation" NAME="smsDerogation" value="<?=$this->nettoyer($societeuser['smsDerogation'])?>" readonly></td>
.icon-shape {
flex-shrink: 0;
}
<td align="center"> <?= _("SMS Accord") ?> </td>
<td colspan="3" > <INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="smsAccordPrealable" NAME="smsAccordPrealable" value="<?=$this->nettoyer($societeuser['smsAccordPrealable'])?>" readonly></td>
</tr>
<tr>
<td> <?= _("Activer Logs Visite Page ?") ?> </td>
<td>
<SELECT style="font-size:9pt;" class="form-select" id="activerLogVisitePages" NAME="activerLogVisitePages" disabled >
<?php liste_options($visitePage, $this->nettoyer($societeuser['activerLogVisitePages']), true); ?>
</SELECT>
</td>
<td align="center"> <?= _("Taux Alerte Limite Conso (%)") ?> </td>
<td>
<INPUT style='font-size:9pt;' class="form-control" TYPE="number" id="alertLimiteConsommation" NAME="alertLimiteConsommation" value="<?=$this->nettoyer($societeuser['alertLimiteConsommation'])?>" disabled>
</td>
<td align="center"> <?= _("E-mail Alerte Limite Conso") ?> </td>
<td colspan="3"><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="emailAlertLimiteConsommation" NAME="emailAlertLimiteConsommation" value="<?=$this->nettoyer($societeuser['emailAlertLimiteConsommation'])?>" disabled></td>
</tr>
<tr>
<td> <?= _("Langue") ?> </td>
<td> <INPUT style='font-size:9pt;' class="form-control" TYPE="text" value="<?=$this->nettoyer($_SESSION['libelleLang'])?>" readonly></td>
<td align="center"> <?= _("Indicatif Téléphone") ?> </td>
<td><INPUT class="form-control" style='font-size:9pt;' TYPE="text" id="indicatifTelephone" NAME="indicatifTelephone" value="<?=$this->nettoyer($societeuser['indicatifTelephone'])?>" readonly></td>
<td align="center"> <?= _("Taux Alerte S/P (%)") ?> </td>
<td><INPUT style='font-size:9pt;' class="form-control" TYPE="number" id="spMax" NAME="spMax" value="<?=$this->nettoyer($societeuser['spMax'])?>" readonly></td>
<td align="center"> <?= _("Carte AFN") ?> </td>
<td><INPUT style='font-size:9pt;' class="form-control" TYPE="text" id="fraisCarteAN" NAME="fraisCarteAN" value="<?=format_N($this->nettoyer($societeuser['fraisCarteAN']))?>" readonly></td>
</tr>
</tbody>
</table>
/* Scroll intelligent pour la page riche */
body {
scroll-behavior: smooth;
}
</style>

View File

@ -1,125 +1,162 @@
<form id="frmrecherche" method="post" action="Recherche/index/">
<div class="card shadow-sm mb-4">
<div class="card-header bg-white py-3">
<h5 class="card-title mb-0">
<i class="fas fa-search me-2" style="color: var(--primary-color);"></i>
<?= _("Critères de recherche de l'assuré") ?>
</h5>
</div>
<div class="card-body">
<div class="row g-3">
<div class="col-md-3">
<label class="form-label"><?= _("Numéro Bénéficiaire") ?></label>
<input type="text" class="form-control" id="numeroBeneficiaire" name="numeroBeneficiaire" autofocus>
</div>
<div class="col-md-3">
<label class="form-label"><?= _("Numéro Famille") ?></label>
<input type="text" class="form-control" id="numeroAdherent" name="numeroAdherent">
</div>
<div class="col-md-3">
<label class="form-label"><?= _("Nom") ?></label>
<input type="text" class="form-control" id="nomBeneficiaire" name="nomBeneficiaire">
</div>
<div class="col-md-3">
<label class="form-label"><?= _("Prénoms") ?></label>
<input type="text" class="form-control" id="prenomsBeneficiaire" name="prenomsBeneficiaire">
</div>
<div class="col-md-3">
<label class="form-label"><?= _("Tél.") ?></label>
<input type="text" class="form-control" id="telephonePortable" name="telephonePortable">
</div>
<div class="col-md-3">
<label class="form-label">E-mail</label>
<input type="email" class="form-control" id="email" name="email">
</div>
<div class="col-md-12 text-end">
<button type="submit" class="btn btn-primary px-5">
<i class="fas fa-search me-2"></i><?= _("Rechercher") ?>
</button>
<?php
// $this->titre = "INTER SANTE - "._("Rechercher assuré") ;
?>
<div class="page-content">
<form id="frmrecherche" name="frmrecherche" method="post" action="Recherche/index/">
<div class="header-section mb-4">
<div class="d-flex align-items-center justify-content-between bg-white p-3 shadow-sm border-start border-primary border-4" style="border-radius: var(--radius-md);">
<div class="d-flex align-items-center">
<div class="icon-shape bg-primary-ghost text-primary rounded-circle me-3" style="width: 45px; height: 45px; display: flex; align-items: center; justify-content: center;">
<i class="fas fa-search fs-5"></i>
</div>
<div>
<h4 id="titre-page" class="mb-0 fw-bold text-uppercase"><?= _("Recherche Assurés") ?></h4>
<p class="text-secondary small mb-0"><?= _("Retrouvez un bénéficiaire par son numéro, son nom ou ses coordonnées") ?></p>
</div>
</div>
</div>
</div>
</div>
<?php
// CORRECTION : Vérifier que $derniernumerobeneficiaires est un tableau ET qu'il contient 'nouveau'
if (isset($derniernumerobeneficiaires) && is_array($derniernumerobeneficiaires) && isset($derniernumerobeneficiaires['nouveau']) && $derniernumerobeneficiaires['nouveau'] > 0):
?>
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<i class="fas fa-exclamation-triangle me-2"></i>
<?= _("Cette carte") ?> => <?= $derniernumerobeneficiaires['ancien'] ?? '' ?>
<?= _("a été déclarée perdue et remplacée par") ?> => <?= $derniernumerobeneficiaires['nouveau'] ?? '' ?>.
<?= _("Veuillez ne pas le communiquer sans autorisation.") ?>
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
<div class="card shadow-sm border-0 mb-4" style="border-radius: var(--radius-md); background: #ffffff;">
<div class="card-body">
<div class="row g-3">
<div class="col-md-6 col-lg-3">
<label class="form-label small fw-bold text-dark mb-1"><?= _("Numéro Bénéficiaire") ?></label>
<div class="input-group input-group-merge">
<span class="input-group-text bg-light border-end-0 text-muted"><i class="fas fa-id-card small"></i></span>
<input class="form-control border-start-0 ps-0" type="text" id="numeroBeneficiaire" name="numeroBeneficiaire" autofocus autocomplete="off" placeholder="Ex: 100234...">
</div>
</div>
<div class="col-md-6 col-lg-3">
<label class="form-label small fw-bold text-dark mb-1"><?= _("Numéro Famille") ?></label>
<div class="input-group input-group-merge">
<span class="input-group-text bg-light border-end-0 text-muted"><i class="fas fa-users small"></i></span>
<input class="form-control border-start-0 ps-0" type="text" id="numeroAdherent" name="numeroAdherent" autocomplete="off">
</div>
</div>
<div class="col-md-6 col-lg-3">
<label class="form-label small fw-bold text-dark mb-1"><?= _("Nom") ?></label>
<input class="form-control" type="text" id="nomBeneficiaire" name="nomBeneficiaire" placeholder="Ex: DOE" style="text-transform: uppercase;">
</div>
<div class="col-md-6 col-lg-3">
<label class="form-label small fw-bold text-dark mb-1"><?= _("Prénoms") ?></label>
<input class="form-control" type="text" id="prenomsBeneficiaire" name="prenomsBeneficiaire">
</div>
<div class="col-md-6 col-lg-3">
<label class="form-label small fw-bold text-dark mb-1"><?= _("Téléphone") ?></label>
<div class="input-group">
<span class="input-group-text bg-light border-end-0 text-muted"><i class="fas fa-phone-alt small"></i></span>
<input class="form-control border-start-0 ps-0" type="tel" id="telephonePortable" name="telephonePortable">
</div>
</div>
<div class="col-md-6 col-lg-3">
<label class="form-label small fw-bold text-dark mb-1">E-mail</label>
<div class="input-group">
<span class="input-group-text bg-light border-end-0 text-muted"><i class="fas fa-at small"></i></span>
<input class="form-control border-start-0 ps-0" type="email" id="email" name="email">
</div>
</div>
<div class="col-md-12 col-lg-6 d-flex align-items-end">
<button type="submit" id="lancerrecherche" name="lancerrecherche" class="btn btn-primary w-100 fw-bold py-2 shadow-sm transition-all" style="background-color: var(--color-primary); border: none;">
<i class="fas fa-filter me-2"></i> <?= _("Lancer la recherche") ?>
</button>
</div>
</div>
</div>
</div>
<?php endif; ?>
<div class="d-flex justify-content-between align-items-center mb-3">
<h5 class="mb-0"><?= _("Résultats de la recherche") ?></h5>
<?php if (isset($beneficiaires) && is_array($beneficiaires) && count($beneficiaires) > 0): ?>
<span class="badge bg-primary"><?= count($beneficiaires) ?> <?= _("résultat(s)") ?></span>
<?php if (isset($derniernumerobeneficiaires) && is_array($derniernumerobeneficiaires) && $derniernumerobeneficiaires['nouveau']>0): ?>
<div class="alert alert-custom-urgent d-flex align-items-center mb-4 p-3 shadow-sm" role="alert">
<div class="icon-circle bg-danger text-white me-3">
<i class="fas fa-exclamation-triangle"></i>
</div>
<div>
<h6 class="alert-heading fw-bold mb-1 text-danger"><?= _("Carte déclarée perdue") ?></h6>
<span class="text-dark">L'ancien numéro <strong><?= $derniernumerobeneficiaires['ancien'] ?></strong> a été remplacé par <strong><?= $derniernumerobeneficiaires['nouveau'] ?></strong>.</span>
</div>
</div>
<?php endif; ?>
</div>
<?php if (isset($beneficiaires) && is_array($beneficiaires) && count($beneficiaires) > 0): ?>
<div class="table-responsive">
<table class="table table-hover align-middle datatable">
<thead>
<tr>
<th><?= _("Numéro Bénéficiaire") ?></th>
<th><?= _("Numéro Famille") ?></th>
<th><?= _("Nom") ?></th>
<th><?= _("Prénoms") ?></th>
<th><?= _("Lien") ?></th>
<th><?= _("Naissance") ?></th>
<th><?= _("Genre") ?></th>
<th><?= _("Tél") ?></th>
<th><?= _("Souscripteur") ?></th>
<th><?= _("Etat") ?></th>
<th></th>
</tr>
</thead>
<tbody>
<?php foreach ($beneficiaires as $beneficiaire):
$idBeneficiaire = $this->nettoyer($beneficiaire['id'] ?? '');
$numeroBeneficiaire = $this->nettoyer($beneficiaire['numeroBeneficiaire'] ?? '');
?>
<tr onclick="selectionner_beneficiaire(<?= $idBeneficiaire ?>,'<?= $numeroBeneficiaire ?>');afficher_beneficiaire_id();" style="cursor: pointer;">
<td><span class="badge bg-light text-dark"><?= $numeroBeneficiaire ?></span></td>
<td><?= $this->nettoyer($beneficiaire['numeroAdherent'] ?? '') ?></td>
<td><strong><?= $this->nettoyer($beneficiaire['nomBeneficiaire'] ?? '') ?></strong></td>
<td><?= $this->nettoyer($beneficiaire['prenomsBeneficiaire'] ?? '') ?></td>
<td><?= $this->nettoyer($beneficiaire['codeLienParente'] ?? '') ?></td>
<td><?= isset($beneficiaire['dateNaissance']) ? dateLang($this->nettoyer($beneficiaire['dateNaissance'])) : '' ?></td>
<td><?= $this->nettoyer($beneficiaire['sexe'] ?? '') ?></td>
<td><?= $this->nettoyer($beneficiaire['telephonePortable'] ?? '') ?></td>
<td><?= $this->nettoyer($beneficiaire['nomClient'] ?? '') ?></td>
<td>
<?php
$etat = $this->nettoyer($beneficiaire['codeEtatBeneficiaire'] ?? '');
$badgeClass = match($etat) {
'ACT' => 'bg-success',
'SUS' => 'bg-warning',
'RAD' => 'bg-danger',
default => 'bg-secondary'
};
<div class="card shadow-sm border-0 overflow-hidden" style="border-radius: var(--radius-md);">
<div class="card-header bg-white py-3 d-flex justify-content-between align-items-center border-bottom">
<h6 class="mb-0 fw-bold text-dark">
<i class="fas fa-th-list me-2 text-primary"></i><?= _("Liste des assurés trouvés") ?>
</h6>
<?php if (isset($beneficiaires) && is_array($beneficiaires)): ?>
<span class="badge bg-primary-ghost text-primary border-0 rounded-pill"><?= count($beneficiaires) ?> <?= _("résultats") ?></span>
<?php endif; ?>
</div>
<div class="card-body p-0">
<div class="table-responsive">
<?php if (isset($beneficiaires) && is_array($beneficiaires) && count($beneficiaires) > 0): ?>
<table class="table table-hover align-middle mb-0 custom-table">
<thead class="bg-light-gray text-muted small text-uppercase">
<tr>
<th class="ps-4 border-0 text-center"><?= _("Matricule") ?></th>
<th class="border-0"><?= _("Identité") ?></th>
<th class="border-0 text-center"><?= _("Parenté") ?></th>
<th class="border-0 text-center"><?= _("Date Naissance") ?></th>
<th class="border-0 text-center"><?= _("Sexe") ?></th>
<th class="border-0"><?= _("Souscripteur / Entreprise") ?></th>
<th class="border-0 text-center pe-4"><?= _("Statut") ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($beneficiaires as $beneficiaire):
$idBeneficiaire = $this->nettoyer($beneficiaire['id']);
$numeroBeneficiaire = $this->nettoyer($beneficiaire['numeroBeneficiaire']);
$etatCode = $this->nettoyer($beneficiaire['codeEtatBeneficiaire']);
$statusBadge = ($etatCode == 'ACTIF') ? 'badge-success-ghost' : 'badge-secondary-ghost';
?>
<span class="badge <?= $badgeClass ?>"><?= $etat ?></span>
</td>
<td>
<button class="btn btn-sm btn-outline-primary" onclick="event.stopPropagation();afficher_beneficiaire(<?= $idBeneficiaire ?>)">
<i class="fas fa-eye"></i>
</button>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<tr class="beneficiaire-row"
onclick="selectionner_beneficiaire(<?= $idBeneficiaire ?>,'<?= $numeroBeneficiaire ?>');"
ondblclick="selectionner_beneficiaire(<?= $idBeneficiaire ?>,'<?= $numeroBeneficiaire ?>');afficher_beneficiaire_id();">
<td class="text-center ps-4">
<span class="fw-bold text-primary"><?= $numeroBeneficiaire ?></span>
</td>
<td>
<div class="d-flex align-items-center">
<div class="avatar-sm bg-light text-primary rounded-circle me-2 d-flex align-items-center justify-content-center fw-bold" style="width: 32px; height: 32px; font-size: 0.7rem;">
<?= substr($beneficiaire['nomBeneficiaire'], 0, 1) ?>
</div>
<div>
<div class="fw-bold text-dark mb-0"><?= $this->nettoyer($beneficiaire['nomBeneficiaire']) ?></div>
<div class="small text-muted"><?= $this->nettoyer($beneficiaire['prenomsBeneficiaire']) ?></div>
</div>
</div>
</td>
<td class="text-center small"><?= $this->nettoyer($beneficiaire['codeLienParente']) ?></td>
<td class="text-center small"><?= dateLang($this->nettoyer($beneficiaire['dateNaissance'])) ?></td>
<td class="text-center small"><?= ($this->nettoyer($beneficiaire['sexe']) == 'M') ? 'Masc.' : 'Fém.' ?></td>
<td class="small text-truncate" style="max-width: 200px;"><?= $this->nettoyer($beneficiaire['nomClient']) ?></td>
<td class="text-center pe-4">
<span class="badge <?= $statusBadge ?> rounded-pill"><?= $etatCode ?></span>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php else: ?>
<div class="text-center py-5">
<div class="mb-3">
<i class="fas fa-user-slash fa-3x text-light-gray"></i>
</div>
<h5 class="text-muted"><?= _("Aucun résultat") ?></h5>
<p class="small text-muted px-4"><?= _("Assurezvous que vos critères de recherche sont corrects avant de lancer la recherche.") ?></p>
</div>
<?php endif; ?>
</div>
</div>
</div>
<?php else: ?>
<div class="text-center py-5 text-muted">
<i class="fas fa-search fa-3x mb-3"></i>
<p><?= _("Aucun résultat trouvé") ?></p>
</div>
<?php endif; ?>
</form>
</form>
</div>

View File

@ -1,117 +0,0 @@
<?php
// $this->titre = "INTER SANTE - "._("Rechercher assuré") ;
?>
<form id="frmrecherche" name="frmrecherche" method="post" action="Recherche/index/">
<fieldset>
<legend> <?= _("Critères de recherche de l'assuré") ?> </legend>
<table class="table table-condensed table-responsive" style='font-size:8pt;'>
<tbody>
<tr>
<td width="10%" > <?= _("Numéro Bénéficiaire") ?> </td>
<td width="40%" ><INPUT class="form-control" TYPE="text" id="numeroBeneficiaire" name="numeroBeneficiaire" autofocus AUTOCOMPLETE="OFF"></td>
<td align="center" width="10%"> <?= _("Numéro Famille") ?> </td>
<td align="center"><INPUT class="form-control" TYPE="text" id="numeroAdherent" name="numeroAdherent" AUTOCOMPLETE="OFF"></td>
</tr>
<tr>
<td> <?= _("Nom") ?> </td>
<td><INPUT class="form-control" TYPE="text" id="nomBeneficiaire" name="nomBeneficiaire" AUTOCOMPLETE="OFF"></td>
<td align="center"> <?= _("Prénoms") ?> </td>
<td><INPUT class="form-control" TYPE="text" id="prenomsBeneficiaire" name="prenomsBeneficiaire" AUTOCOMPLETE="OFF"></td>
</tr>
<tr>
<td>Tel</td>
<td><INPUT class="form-control" TYPE="text" id="telephonePortable" NAME="telephonePortable" AUTOCOMPLETE="OFF"></td>
<td align="center">E-mail</td>
<td><INPUT class="form-control" TYPE="text" id="email" NAME="email" AUTOCOMPLETE="OFF"></td>
</tr>
<tr>
<td><input id="lancerrecherche" name="lancerrecherche" class="sr-only" type="submit" value="<?= _("Rechercher") ?>" ></td>
</tr>
</tbody>
</table>
</fieldset>
<?php if (is_array($derniernumerobeneficiaires) && $derniernumerobeneficiaires['nouveau']>0): ?>
<div class="alert alert-danger" style="height:30px; padding:5px; text-align:center; margin-bottom:5px;" >
<H4> <?= _("Cette carte")." => ".$derniernumerobeneficiaires['ancien'] . " "._("a été déclarée perdue et remplacée par") ." => ".$derniernumerobeneficiaires['nouveau'] .". ". _("Veuillez ne pas le communiquer sans autorisation.") ?> </H4>
</div>
<?php endif; ?>
<?php
/*
$keys = [
'session.gc_maxlifetime',
'session.cookie_lifetime',
'session.cookie_secure',
'session.cookie_httponly',
'session.cookie_samesite',
'session.gc_probability',
'session.gc_divisor',
];
foreach ($keys as $k) {
echo $k . ' = ' . ini_get($k) . "<br>";
}
*/
?>
<h4> <?= _("Résultats de la recherche") ?> </h4>
<?php if (is_array($beneficiaires) && count($beneficiaires) > 0): ?>
<table class="table table-striped table-bordered table-hover table-condensed table-responsive" style='font-size:8pt;'>
<thead>
<tr>
<th width="8%" style="text-align: center"> <?= _("Numéro Bénéficiaire") ?> </th>
<th width="8%" style="text-align: center"> <?= _("Numéro Famille") ?> </th>
<th width="20%" > <?= _("Nom") ?> </th>
<th width="20%" > <?= _("Prénoms") ?> </th>
<th style="text-align: center"> <?= _("Lien parenté") ?> </th>
<th style="text-align: center"> <?= _("Naissance") ?> </th>
<th style="text-align: center"><?= _("Genre") ?></th>
<th style="text-align: center"> <?= _("Tél") ?> </th>
<th width="20%" > <?= _("Souscripteur") ?> </th>
<th> <?= _("Etat") ?> </th>
</tr>
</thead>
<tbody>
<?php foreach ($beneficiaires as $beneficiaire):
$idBeneficiaire=$this->nettoyer($beneficiaire['id']);
$numeroBeneficiaire=$this->nettoyer($beneficiaire['numeroBeneficiaire']);
?>
<tr onclick="javascript:selectionner_beneficiaire(<?= $idBeneficiaire ?>,'<?= $numeroBeneficiaire ?>');"
ondblclick="javascript:selectionner_beneficiaire(<?= $idBeneficiaire ?>,'<?= $numeroBeneficiaire ?>');afficher_beneficiaire_id();" valign="top">
<td align="center"> <input type="button" value="<?= $numeroBeneficiaire ?>" onClick="javascript:selectionner_beneficiaire(<?= $idBeneficiaire ?>,'<?= $numeroBeneficiaire ?>');afficher_beneficiaire_id();"> </td>
<td align="center"> <?= $this->nettoyer($beneficiaire['numeroAdherent']) ?></td>
<td><?= $this->nettoyer($beneficiaire['nomBeneficiaire']) ?></td>
<td><?= $this->nettoyer($beneficiaire['prenomsBeneficiaire']) ?></td>
<td align="center"><?= $this->nettoyer($beneficiaire['codeLienParente']) ?></td>
<td align="center"><?= dateLang($this->nettoyer($beneficiaire['dateNaissance'])) ?></td>
<td align="center"><?= $this->nettoyer($beneficiaire['sexe']) ?></td>
<td align="center"><?= $this->nettoyer($beneficiaire['telephonePortable']) ?></td>
<td><?= $this->nettoyer($beneficiaire['nomClient']) ?></td>
<td align="center"><?= $this->nettoyer($beneficiaire['codeEtatBeneficiaire']) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</form>

View File

@ -74,10 +74,6 @@ $descriptionVue = $_SESSION['descriptionVue'];
<!-- FontAwesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css" crossorigin="anonymous" referrerpolicy="no-referrer">
<!-- App CSS (Bootstrap original conservé pour rétrocompatibilité) -->
<link href="Bootstrap/css/style.css?ver=2024.03.14.05" rel="stylesheet">
<link href="Bootstrap_new/css/style.css?ver=2025.09.10.00" rel="stylesheet">
<!-- DataTables custom CSS -->
<link rel="stylesheet" href="Bootstrap_new/datatables/datatable.min.css" crossorigin="anonymous">
@ -85,7 +81,7 @@ $descriptionVue = $_SESSION['descriptionVue'];
<link href="Bootstrap_new/css/theme-modern.css?ver=<?= APP_VERSION ?>" rel="stylesheet">
<!-- Custom overrides -->
<link href="Bootstrap_new/css/custom.css?ver=2025.08.22.06" rel="stylesheet">
<link href="Bootstrap_new/css/custom.css?ver=<?= APP_VERSION ?>" rel="stylesheet">
<title><?= htmlspecialchars($_SESSION['descriptionVue'] ?? '', ENT_QUOTES) ?></title>
@ -105,7 +101,7 @@ $descriptionVue = $_SESSION['descriptionVue'];
</script>
</head>
<body class="<?= $_SESSION['bdTests_C'] == '1' ? 'mode-test-active' : '' ?>">
<body class="<?= ($_SESSION['bdTests_C'] == '1') ? 'mode-test-active' : '' ?> theme-outlook">
<?php include 'includes/header.php'; ?>
<?php include 'includes/sidebar.php'; ?>

View File

@ -1,63 +0,0 @@
<?php
// Versioning automatique pour le cache navigateur
$version = date('YmdHi');
// $racineWeb est défini dans gabarit.php, on le garde
// Exemple: $racineWeb = '/newdesignstationnaire/';
?>
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- On garde la balise base avec $racineWeb -->
<base href="<?= $racineWeb ?>">
<!-- Favicon - chemin relatif à la base -->
<link rel="icon" href="Bootstrap_new/images/favicon.ico"/>
<!-- Google Fonts : Inter -->
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<link href="https://fonts.gstatic.com" rel="preconnect">
<!-- 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/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
<link href="Bootstrap_new/css/select2.min.css" rel="stylesheet">
<link href="Bootstrap_new/select/css/bootstrap-select.min.css" rel="stylesheet">
<link href="Bootstrap_new/datatables/datatable.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/sweetalert2@11.14.1/dist/sweetalert2.min.css" rel="stylesheet">
<!-- Font Awesome 6 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css">
<!-- Thème principal -->
<link href="Bootstrap_new/css/theme-modern.css?ver=<?= $version ?>" rel="stylesheet">
<title><?= $_SESSION['descriptionVue'] ?? 'INTER SANTE' ?></title>
<!-- Chart.js -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2.0.0"></script>
<style>
/* Style de secours minimal en attendant le chargement du CSS */
body {
font-family: 'Inter', sans-serif;
margin: 0;
background: #f4f6f9;
}
.sidebar {
width: 260px;
background: #1a2b3c;
color: white;
position: fixed;
height: 100vh;
left: 0;
top: 0;
}
.main {
margin-left: 260px;
padding: 20px;
}
</style>

View File

@ -33,15 +33,15 @@ if ($_SESSION['bdTests_C'] == '1') {
<nav aria-label="breadcrumb" class="flex-grow-1 d-none d-md-block">
<ol class="breadcrumb mb-0">
<?php if (!empty($_SESSION['retourVue'])): ?>
<li class="breadcrumb-item">
<a href="<?= $_SESSION['retourVue'] ?>" class="d-flex align-items-center gap-1">
<li class="breadcrumb-item me-2">
<a href="<?= $_SESSION['retourVue'] ?>" class="d-flex align-items-center gap-1 text-uppercase">
<i class="fas fa-arrow-left" style="font-size:0.65rem;"></i>
<?= htmlspecialchars($_SESSION['titreRetour'], ENT_QUOTES) ?>
</a>
</li>
<?php endif; ?>
<li class="breadcrumb-item active">
<?= htmlspecialchars($_SESSION['descriptionVue'] ?? '', ENT_QUOTES) ?>
<li class="breadcrumb-item">
<span id="descriptionVue" class="active text-uppercase"><?= htmlspecialchars($_SESSION['descriptionVue'] ?? '', ENT_QUOTES) ?></span>
</li>
</ol>
</nav>

View File

@ -1,36 +0,0 @@
<?php
// $contenu vient du contrôleur, on le garde
if (!isset($contenu)) $contenu = '';
?>
<!-- Inputs cachés essentiels -->
<input type="hidden" id="vue" value="<?= $_SESSION['vue'] ?? '' ?>">
<input type="hidden" id="racineWeb" value="<?= $racineWeb ?>">
<input type="hidden" id="dureeSession" value="<?= $_SESSION['dureeSession'] ?? '' ?>">
<input type="hidden" id="codeLangue" value="<?= $_SESSION['lang'] ?? 'fr_FR' ?>">
<!-- Navigation secondaire -->
<?php if (!empty($menusvue)): ?>
<div class="scrollmenu">
<?php foreach ($menusvue as $menu): ?>
<a href="<?= $menu['lienMenu'] ?>"
class="<?= (explode('/', $menu['lienMenu'])[0] == $activeLink) ? 'active' : '' ?>">
<?= _($menu['libeleMenu']) ?>
</a>
<?php endforeach; ?>
</div>
<?php endif; ?>
<!-- ================================================= -->
<!-- CONTENU PRINCIPAL - NE PAS MODIFIER -->
<!-- ================================================= -->
<div class="page-content">
<!-- Div pour AJAX -->
<div id="div_test_gabarit" class="d-none"></div>
<!-- LE CONTENU DYNAMIQUE DES PAGES -->
<?= $contenu ?>
<!-- Div pour entité -->
<div id="div_entite" class="d-none"></div>
</div>

View File

@ -72,20 +72,12 @@
<?php endforeach; ?>
</ul>
<div class="sidebar-footer">
<div class="version-info">
<span class="copyright text-light fw-bold">INTER SANTÉ &copy;</span>
<span class="version-tag text-light fw-bold">v2026</span>
</div>
</div>
</aside>
<!-- End Sidebar -->
<style>
/* Sidebar — styles inline spécifiques au composant */
#sidebar { background: var(--bg-sidebar, #0f2d20); }
/* Active parent: highlight subtle */
#sidebar .nav-link.parent-active {
background: rgba(255,255,255,0.08);
color: white;
}
#sidebar .nav-link.parent-active > i:first-child {
color: var(--color-accent, #0abf7c);
}
</style>