Merge branch 'main' of git.ebene.ovh:ebene/radiantrh
This commit is contained in:
commit
e4b316a394
100
Bootstrap_new/css/help-center.css
Normal file
100
Bootstrap_new/css/help-center.css
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
/* Style isolé pour le centre d'aide - Position GAUCHE */
|
||||
#helpButton {
|
||||
position: fixed;
|
||||
bottom: 25px;
|
||||
left: 25px; /* Changé de right à left pour libérer le bouton de session */
|
||||
width: 55px;
|
||||
height: 55px;
|
||||
background: #004a99;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 50%;
|
||||
font-size: 26px;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
z-index: 9999;
|
||||
box-shadow: 0 5px 15px rgba(0,0,0,0.3);
|
||||
transition: 0.2s;
|
||||
}
|
||||
|
||||
#helpButton:hover {
|
||||
transform: scale(1.1);
|
||||
background: #003366; /* Un bleu un peu plus foncé au survol */
|
||||
}
|
||||
|
||||
/* Le reste du modal reste inchangé mais bien isolé */
|
||||
#helpModal.help-modal-container {
|
||||
display: none;
|
||||
position: fixed;
|
||||
z-index: 10000;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(0,0,0,0.6);
|
||||
backdrop-filter: blur(3px);
|
||||
}
|
||||
|
||||
#helpModal .help-modal-content {
|
||||
background: #fff;
|
||||
margin: 12% auto;
|
||||
padding: 30px;
|
||||
border-radius: 15px;
|
||||
width: 450px;
|
||||
position: relative;
|
||||
box-shadow: 0 15px 40px rgba(0,0,0,0.5);
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
#helpModal .help-close-button {
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
right: 20px;
|
||||
font-size: 30px;
|
||||
cursor: pointer;
|
||||
color: #888;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
#helpModal .help-grid {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
margin-top: 25px;
|
||||
}
|
||||
|
||||
#helpModal .help-card {
|
||||
flex: 1;
|
||||
text-decoration: none;
|
||||
color: #333;
|
||||
padding: 20px;
|
||||
border: 2px solid #f0f0f0;
|
||||
border-radius: 10px;
|
||||
text-align: center;
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
#helpModal .help-card:hover {
|
||||
border-color: #004a99;
|
||||
background: #f9fcff;
|
||||
}
|
||||
|
||||
#helpModal .help-icon {
|
||||
font-size: 35px;
|
||||
display: block;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#helpModal .help-title {
|
||||
color: #004a99;
|
||||
margin: 0 0 10px 0;
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
#helpModal .help-modal-footer {
|
||||
margin-top: 25px;
|
||||
padding-top: 15px;
|
||||
border-top: 1px solid #eee;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
}
|
||||
|
|
@ -47,6 +47,7 @@ class ControleurAjaxremplaceradherent extends Controleur
|
|||
$this->adherent->initremplacementadherent($idPolice, $idAdherent, $dateSortie , $dateRemplacement, $user,
|
||||
$motifavenant, $fraisCarte);
|
||||
|
||||
|
||||
$remplacementadherent_temp = $this->adherent->getremplacementadherent_temp();
|
||||
|
||||
$spadherent = $this->adherent->getRapportSpAdherent($idAdherent, $dateSortie);
|
||||
|
|
@ -61,6 +62,7 @@ class ControleurAjaxremplaceradherent extends Controleur
|
|||
'adherentremplacanttemp' => $adherentremplacanttemp, 'naturepiece' => $this->naturepiece, 'sexe' => $this->sexe,
|
||||
'pays' => $this->pays, 'situationfamille' => $this->situationfamille, 'groupesanguin' => $this->groupesanguin,
|
||||
'remplacementadherent_temp' => $remplacementadherent_temp, 'garantieadherents' => $garantieadherents));
|
||||
|
||||
}
|
||||
|
||||
public function enregistrerremplacementadherent()
|
||||
|
|
@ -77,7 +79,7 @@ class ControleurAjaxremplaceradherent extends Controleur
|
|||
$adresseGeo = $this->requete->getParametreFormulaire("adresseGeo");
|
||||
$adressePostale = $this->requete->getParametreFormulaire("adressePostale");
|
||||
$codePays = $this->requete->getParametre("codePays");
|
||||
$telephonFixe = $this->requete->getParametreFormulaire("telephonFixe");
|
||||
$telephonFixe = ""; //$this->requete->getParametreFormulaire("telephonFixe");
|
||||
$telephonePortable = $this->requete->getParametreFormulaire("telephonePortable");
|
||||
$email = $this->requete->getParametreFormulaire("email");
|
||||
$fraisCarte = $this->requete->getParametreFormulaire("fraisCarte","numerique");
|
||||
|
|
|
|||
114
Js/fonctions.js
114
Js/fonctions.js
|
|
@ -1568,6 +1568,7 @@ function creer_avenant()
|
|||
window.location.assign($("#racineWeb" ).val()+"Creeravenant/");
|
||||
}
|
||||
|
||||
/*
|
||||
function enregistrer_avenant()
|
||||
{
|
||||
codeTypeAvenant=$("#codeTypeAvenant").val();
|
||||
|
|
@ -1593,13 +1594,6 @@ function enregistrer_avenant()
|
|||
dt_effet = Math.round(Date.parse(d_effet)/(1000*3600*24));
|
||||
dt_fin = Math.round(Date.parse(d_fin)/(1000*3600*24));
|
||||
dt_avenant = Math.round(Date.parse(d_avenant)/(1000*3600*24));
|
||||
|
||||
/*
|
||||
alert("dt_effet => "+dt_effet);
|
||||
alert("dt_fin => "+dt_fin);
|
||||
alert("dt_avenant => "+dt_avenant);
|
||||
return;
|
||||
*/
|
||||
|
||||
if (dt_avenant>dt_fin || dt_avenant<dt_effet)
|
||||
{
|
||||
|
|
@ -1653,7 +1647,94 @@ function enregistrer_avenant()
|
|||
});
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
function enregistrer_avenant() {
|
||||
let codeTypeAvenant = $("#codeTypeAvenant").val();
|
||||
|
||||
// 1. Vérification si le type d'avenant est sélectionné
|
||||
if (!codeTypeAvenant || codeTypeAvenant.trim() === "") {
|
||||
let v_msg = "Veuillez sélectionner le type d'avenant !";
|
||||
let v_msgEng = "Please select the type of amendment!";
|
||||
alert_ebene(v_msg, v_msgEng);
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. Préparation des dates pour comparaison
|
||||
var d_effet = new Date($("#dateEffetSql").val());
|
||||
var d_fin = new Date($("#dateFinSql").val());
|
||||
var d_avenant = $("#dateAvenant").datepicker("getDate");
|
||||
var d_aujourdhui = new Date();
|
||||
|
||||
// On retire les heures pour comparer uniquement les jours
|
||||
d_aujourdhui.setHours(0, 0, 0, 0);
|
||||
if (d_avenant) d_avenant.setHours(0, 0, 0, 0);
|
||||
|
||||
// Conversion en timestamps (jours)
|
||||
dt_effet = Math.round(d_effet.getTime() / (1000 * 3600 * 24));
|
||||
dt_fin = Math.round(d_fin.getTime() / (1000 * 3600 * 24));
|
||||
dt_avenant = Math.round(d_avenant.getTime() / (1000 * 3600 * 24));
|
||||
dt_aujourdhui = Math.round(d_aujourdhui.getTime() / (1000 * 3600 * 24));
|
||||
|
||||
// --- NOUVELLE RÈGLE : Restriction Incorporation/Retrait ---
|
||||
// Remplacez 'INC' et 'RET' par vos codes réels issus de la DB
|
||||
var codesRestrictifs = ['INC', 'RET', 'INCORPORATION', 'RETRAIT'];
|
||||
|
||||
if (codesRestrictifs.includes(codeTypeAvenant.toUpperCase())) {
|
||||
if (dt_avenant < dt_aujourdhui) {
|
||||
let v_msg = "Pour une incorporation ou un retrait, la date ne peut pas être antérieure à aujourd'hui.";
|
||||
let v_msgEng = "For additions or removals, the date cannot be earlier than today.";
|
||||
alert_ebene(v_msg, v_msgEng);
|
||||
return; // Bloque l'exécution
|
||||
}
|
||||
}
|
||||
// ---------------------------------------------------------
|
||||
|
||||
// 3. Vérification des bornes du contrat (déjà existant)
|
||||
if (dt_avenant > dt_fin || dt_avenant < dt_effet) {
|
||||
let v_msg = "Veuillez revoir la date ! Elle doit être comprise dans la période de validité du contrat.";
|
||||
let v_msgEng = "Please review the date! It must be within the contract validity period.";
|
||||
alert_ebene(v_msg, v_msgEng);
|
||||
return;
|
||||
}
|
||||
|
||||
// 4. Vérification du Motif
|
||||
motifavenant=$("#motifavenant").val();
|
||||
|
||||
if ($("#motifavenant").val()<" ")
|
||||
{
|
||||
v_msg="Veuillez fournir le motif!";
|
||||
v_msgEng="Please provide the reason";
|
||||
|
||||
alert_ebene(v_msg, v_msgEng);
|
||||
return;
|
||||
}
|
||||
|
||||
// 5. Confirmation de l'avenant
|
||||
|
||||
v_msg="Confirmez-vous cet avenant?";
|
||||
v_msgEng="Do you confirm this amendment to the contract?";
|
||||
|
||||
confirm_ebene(v_msg, v_msgEng).then(isConfirmed => {
|
||||
if (isConfirmed) {
|
||||
var div_attente = $('#div_attente');
|
||||
|
||||
div_attente.html(`
|
||||
<div class="d-flex flex-column align-items-center justify-content-center" style="padding-top:80px;">
|
||||
<div class="spinner-border text-primary" role="status" style="width:3rem; height:3rem;">
|
||||
<span class="visually-hidden">Loading...</span>
|
||||
</div>
|
||||
<span class="mt-3 fs-5 fw-bold">
|
||||
Veuillez patienter... / Please wait...
|
||||
</span>
|
||||
</div>
|
||||
`);
|
||||
|
||||
document.getElementById("formAvenant").submit();
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function pop_afficher_selection_retrait() {
|
||||
const div_selection_assure = $('#div_selection_assure');
|
||||
|
|
@ -1805,6 +1886,7 @@ function liste_avenant()
|
|||
window.location.assign($("#racineWeb" ).val()+"Listeavenant/");
|
||||
}
|
||||
|
||||
/*
|
||||
function controle_date_avenant() {
|
||||
let codeTypeAvenant = $("#codeTypeAvenant").val();
|
||||
$("#div_periodidite").html("");
|
||||
|
|
@ -1812,6 +1894,20 @@ function controle_date_avenant() {
|
|||
//$("#dateAvenant").prop("readonly", true);
|
||||
//$("#motifavenant").prop("readonly", true);
|
||||
}
|
||||
*/
|
||||
|
||||
function controle_date_avenant() {
|
||||
let codeTypeAvenant = $("#codeTypeAvenant").val();
|
||||
let codesRestrictifs = ['INC', 'RET', 'INCORPORATION', 'RETRAIT'];
|
||||
|
||||
if (codesRestrictifs.includes(codeTypeAvenant.toUpperCase())) {
|
||||
// Restreindre le calendrier à partir d'aujourd'hui
|
||||
$("#dateAvenant").datepicker("option", "minDate", 0);
|
||||
} else {
|
||||
// Autoriser les dates passées (selon les bornes du contrat)
|
||||
$("#dateAvenant").datepicker("option", "minDate", null);
|
||||
}
|
||||
}
|
||||
|
||||
function init_import_assures()
|
||||
{
|
||||
|
|
@ -6446,7 +6542,7 @@ function init_remplacement_adherent()
|
|||
dt11=Math.round(Date.parse(td11)/(1000*3600*24));
|
||||
dt2=Math.round(Date.parse(td2)/(1000*3600*24));
|
||||
|
||||
if (td11<=td1)
|
||||
if (td11<td1)
|
||||
{
|
||||
v_msg="Attention! Veuillez revoir vos dates!";
|
||||
v_msgEng="Warning! Please review your dates!";
|
||||
|
|
@ -6716,6 +6812,7 @@ function enregistrer_remplacement_adherent()
|
|||
},
|
||||
complete: function()
|
||||
{
|
||||
|
||||
v_msg="Opération effectuée avec succès!";
|
||||
v_msgEng="Operation successfully completed";
|
||||
|
||||
|
|
@ -6723,6 +6820,7 @@ function enregistrer_remplacement_adherent()
|
|||
// Ce code ne s’exécute qu’après clic sur OK
|
||||
consulter_remplacement_adherent();
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -541,6 +541,11 @@ class Adherent extends Modele {
|
|||
$motifavenant, $fraisCarte)
|
||||
{
|
||||
$sql = 'call sp_init_remplacement_adherent(?, ?, ?, ?, ?, ?, ?)';
|
||||
|
||||
/*var_dump(array($idPolice, $idAdherent, $dateSortie , $dateRemplacement, $user, $motifavenant, $fraisCarte));
|
||||
|
||||
die();*/
|
||||
|
||||
$this->executerRequete($sql, array($idPolice, $idAdherent, $dateSortie , $dateRemplacement, $user, $motifavenant, $fraisCarte));
|
||||
}
|
||||
|
||||
|
|
@ -592,6 +597,13 @@ class Adherent extends Modele {
|
|||
|
||||
$sql = 'call sp_enregistrer_remplacement_adherent(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
|
||||
|
||||
/*
|
||||
var_dump(array($idPolice, $idAdherent, $user, $nom, $prenoms, $codeNaturePiece, $numeroPiece,
|
||||
$sexe, $dateNaissance, $codeGroupeSanguin, $codeSituationFamille, $nombreEnfants, $adresseGeo, $adressePostale,
|
||||
$codePays, $telephonFixe, $telephonePortable, $email, $fraisCarte));
|
||||
die();
|
||||
*/
|
||||
|
||||
$this->executerRequete($sql, array($idPolice, $idAdherent, $user, $nom, $prenoms, $codeNaturePiece, $numeroPiece,
|
||||
$sexe, $dateNaissance, $codeGroupeSanguin, $codeSituationFamille, $nombreEnfants, $adresseGeo, $adressePostale,
|
||||
$codePays, $telephonFixe, $telephonePortable, $email, $fraisCarte));
|
||||
|
|
|
|||
|
|
@ -15,6 +15,34 @@
|
|||
<label class="small text-muted d-block"><?= _("Motif renseigné") ?></label>
|
||||
<div class="text-truncate italic">" <?= $this->nettoyer($remplacementadherent_temp['motif']) ?> "</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<label class="small text-muted d-block"><?= _("Durée Initiale") ?></label>
|
||||
<div class="fw-bold text-secondary">
|
||||
<?= number_format($remplacementadherent_temp['dureInitiale'], 0, ',', ' ') ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<label class="small text-muted d-block"><?= _("Prime Nette") ?></label>
|
||||
<div class="fw-bold text-secondary">
|
||||
<?= number_format($remplacementadherent_temp['primeDuSortant'], 0, ',', ' ') ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<label class="small text-muted d-block"><?= _("Durée non acquise") ?></label>
|
||||
<div class="fw-bold text-danger">
|
||||
<?= number_format($remplacementadherent_temp['dureeNonAcquise'], 0, ',', ' ') ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<label class="small text-muted d-block"><?= _("Prime non acquise") ?></label>
|
||||
<div class="fw-bold text-danger">
|
||||
<?= number_format($remplacementadherent_temp['primeNonAcquise'], 0, ',', ' ') ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -154,11 +182,27 @@
|
|||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Téléphone Portable") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<input class="form-control" type="tel" id="telephonePortable" name="telephonePortable" value="<?= $_SESSION['indicatifTelephone'] ?>" required>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text bg-white text-muted"><i class="fas fa-mobile-alt"></i></span>
|
||||
<input type="tel"
|
||||
class="form-control"
|
||||
id="telephonePortable"
|
||||
name="telephonePortable"
|
||||
placeholder="Ex: 250700000001"
|
||||
required
|
||||
pattern="^250[0-9]{9,}$"
|
||||
title="<?= est_anglophone() ? "The number must start with 250 and contain at least 12 digits." : "Le numéro doit commencer par 250 et comporter au moins 12 chiffres.";?>"
|
||||
oninput="this.setCustomValidity('')"
|
||||
oninvalid="this.setCustomValidity('<?= est_anglophone() ? 'The number must mandatorily start with 250 and contain at least 12 digits in total.' : 'Le numéro doit obligatoirement commencer par 250 et contenir au moins 12 chiffres au total.';?>')">
|
||||
</div>
|
||||
<div class="form-text text-muted small">
|
||||
<i class="fas fa-info-circle"></i> <?= est_anglophone() ? 'Required format: 250XXXXXXXXX (min. 12 digits)' : 'Format requis : 250XXXXXXXXX (min. 12 chiffres)'; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("E-mail") ?></label>
|
||||
<input class="form-control" type="email" id="email" name="email" placeholder="exemple@mail.com">
|
||||
|
|
@ -181,4 +225,16 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById('telephonePortable').addEventListener('input', function (e) {
|
||||
const pattern = /^250[0-9]{9,}$/;
|
||||
if (pattern.test(this.value)) {
|
||||
this.classList.remove('is-invalid');
|
||||
this.classList.add('is-valid');
|
||||
} else {
|
||||
this.classList.remove('is-valid');
|
||||
this.classList.add('is-invalid');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
|
@ -169,9 +169,22 @@
|
|||
</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text bg-white text-muted"><i class="fas fa-mobile-alt"></i></span>
|
||||
<input type="tel" class="form-control" id="telephonePortable" name="telephonePortable" required minlength="12">
|
||||
<input type="tel"
|
||||
class="form-control"
|
||||
id="telephonePortable"
|
||||
name="telephonePortable"
|
||||
placeholder="Ex: 250700000001"
|
||||
required
|
||||
pattern="^250[0-9]{9,}$"
|
||||
title="<?= est_anglophone() ? "The number must start with 250 and contain at least 12 digits." : "Le numéro doit commencer par 250 et comporter au moins 12 chiffres.";?>"
|
||||
oninput="this.setCustomValidity('')"
|
||||
oninvalid="this.setCustomValidity('<?= est_anglophone() ? 'The number must mandatorily start with 250 and contain at least 12 digits in total.' : 'Le numéro doit obligatoirement commencer par 250 et contenir au moins 12 chiffres au total.';?>')">
|
||||
</div>
|
||||
<div class="form-text text-muted small">
|
||||
<i class="fas fa-info-circle"></i> <?= est_anglophone() ? 'Required format: 250XXXXXXXXX (min. 12 digits)' : 'Format requis : 250XXXXXXXXX (min. 12 chiffres)'; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Téléphone Fixe") ?></label>
|
||||
<input type="tel" class="form-control" id="telephonFixe" name="telephonFixe">
|
||||
|
|
@ -236,4 +249,16 @@
|
|||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById('telephonePortable').addEventListener('input', function (e) {
|
||||
const pattern = /^250[0-9]{9,}$/;
|
||||
if (pattern.test(this.value)) {
|
||||
this.classList.remove('is-invalid');
|
||||
this.classList.add('is-valid');
|
||||
} else {
|
||||
this.classList.remove('is-valid');
|
||||
this.classList.add('is-invalid');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
|
@ -94,7 +94,7 @@
|
|||
|
||||
<div class="col-12">
|
||||
<label for="motifavenant" class="form-label fw-bold text-uppercase"><?= _("Motif / Commentaires") ?></label>
|
||||
<textarea class="form-control shadow-sm" id="motifavenant" name="motifavenant" rows="2" placeholder="<?= _("Précisez l'objet de cet avenant...") ?>"></textarea>
|
||||
<textarea class="form-control shadow-sm" id="motifavenant" name="motifavenant" rows="2" placeholder="<?= _("Précisez l'objet de cet avenant...") ?>" required></textarea>
|
||||
</div>
|
||||
|
||||
<div class="col-12 mt-4">
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@
|
|||
<?= dateLang($this->nettoyer($adherent['dateFinPolice']), $_SESSION['lang']) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-2 text-center">
|
||||
<label class="form-label small text-uppercase mb-0 fw-bold"><?= _("Consommation") ?></label>
|
||||
<div class="p-2 border rounded bg-white small text-danger fw-bold">
|
||||
|
|
@ -92,7 +93,7 @@
|
|||
</div>
|
||||
|
||||
<div class="col-md-8">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Motif de l'avenant (Observation)") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Motif de l'avenant (Observation)") ?> <span class="text-danger">*</span></label>
|
||||
<textarea class="form-control" id="motifavenant" name="motifavenant" rows="1" placeholder="<?= _("Ex: Remplacement suite à démission...") ?>"></textarea>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
124
Vue/gabarit.php
124
Vue/gabarit.php
|
|
@ -127,8 +127,9 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
|
||||
<!-- 4. VOS STYLES PERSONNALISÉS (en dernier pour qu'ils dominent) -->
|
||||
<link href="<?= $racineWeb ?>Bootstrap_new/css/style_office.css?ver=2026.02.05.00" rel="stylesheet">
|
||||
<link href="<?= $racineWeb ?>Bootstrap_new/css/help-center.css?ver=2026.02.18.01" rel="stylesheet">
|
||||
<link href="<?= $racineWeb ?>Bootstrap_new/css/ux_enhancements.css?ver=2025.12.21.02" rel="stylesheet">
|
||||
|
||||
|
||||
<!-- Charts -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2.0.0"></script>
|
||||
|
|
@ -237,26 +238,24 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
</div>
|
||||
<?php endif; ?>
|
||||
<!-- -->
|
||||
<i class="bi bi-list toggle-sidebar-btn" onclick="toggleSidebar()" style="cursor: pointer;"></i>
|
||||
<i class="bi bi-list toggle-sidebar-btn me-2" onclick="toggleSidebar()" style="cursor: pointer;"></i>
|
||||
</div>
|
||||
|
||||
|
||||
<nav aria-label="breadcrumb" class="mt-4">
|
||||
<ol class="breadcrumb shadow-sm bg-white p-2 px-3">
|
||||
<li class="breadcrumb-item small"><a href="<?= $retourVue;?>" class="text-decoration-none text-muted text-uppercase"><?= $titreRetour ?></a></li>
|
||||
<li class="breadcrumb-item small">
|
||||
<a href="<?= $retourVue;?>" class="text-decoration-none text-muted text-uppercase">
|
||||
<i class="fas fa-arrow-left text-muted"></i>
|
||||
<?= $titreRetour ?>
|
||||
</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item small text-primary fw-bold active text-uppercase"><?= $descriptionVue ?></li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<div class="header-controls">
|
||||
<!-- Notifications
|
||||
<button class="header-btn notification-btn" onclick="appNotifications().showMessagesModal()"
|
||||
aria-label="Notifications" title="<?= _('Voir les notifications') ?>">
|
||||
<i class="bi bi-bell"></i>
|
||||
<span class="notification-badge" id="notificationCount" aria-live="polite">0</span>
|
||||
</button>
|
||||
-->
|
||||
|
||||
|
||||
<!-- Logo Assureur -->
|
||||
<div id="lienlogo">
|
||||
<img src="<?= $_SESSION['lienLogo'] ?>" alt="Logo Assureur">
|
||||
|
|
@ -620,28 +619,54 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<!--<button class="d-none" id="btn_police" data-bs-toggle="modal" data-bs-target="#pop_police"></button>-->
|
||||
<!-- Polices Modal -->
|
||||
<div class="modal fade" id="pop_police" role="dialog">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-bs-dismiss="modal"> <?= _("Fermer") ?> </button>
|
||||
<h4 class="modal-title"> <?= _("Sélectionner une police") ?> </h4>
|
||||
</div>
|
||||
<!-- Help Modal -->
|
||||
<button id="helpButton" title="<?php echo est_anglophone() ? 'Help' : 'Aide'; ?>">?</button>
|
||||
|
||||
<div class="modal-body">
|
||||
<div id="div_police">
|
||||
|
||||
</div>
|
||||
<div id="helpModal" class="help-modal-container">
|
||||
<div class="help-modal-content">
|
||||
<span class="help-close-button">×</span>
|
||||
|
||||
<?php if (est_anglophone()): ?>
|
||||
<div id="helpContentEN" class="help-lang-section">
|
||||
<h2 class="help-title">Help Center</h2>
|
||||
<p class="help-subtitle">How to use your documentation?</p>
|
||||
<div class="help-grid">
|
||||
<a href="<?= $racineWeb ?>Docs/Docs/Quick-Start-EN.pdf" target="_blank" class="help-card">
|
||||
<span class="help-icon">🚀</span>
|
||||
<strong class="help-card-title">Quick Start Guide</strong>
|
||||
<small class="help-card-info">Essentials in 15 pages</small>
|
||||
</a>
|
||||
<a href="<?= $racineWeb ?>Docs/Docs/User-Manual-EN.pdf" target="_blank" class="help-card">
|
||||
<span class="help-icon">📖</span>
|
||||
<strong class="help-card-title">Full User Manual</strong>
|
||||
<small class="help-card-info">Technical details (61 pages)</small>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-bs-dismiss="modal"> <?= _("Fermer") ?> </button>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<div id="helpContentFR" class="help-lang-section">
|
||||
<h2 class="help-title">Centre d'Aide</h2>
|
||||
<p class="help-subtitle">Comment utiliser votre documentation ?</p>
|
||||
<div class="help-grid">
|
||||
<a href="<?= $racineWeb ?>Docs/Docs/Guide-Demarrage-FR.pdf" target="_blank" class="help-card">
|
||||
<span class="help-icon">🚀</span>
|
||||
<strong class="help-card-title">Guide de démarrage</strong>
|
||||
<small class="help-card-info">L'essentiel en 15 pages</small>
|
||||
</a>
|
||||
<a href="<?= $racineWeb ?>Docs/Docs/Manuel-Utilisateur-FR.pdf" target="_blank" class="help-card">
|
||||
<span class="help-icon">📖</span>
|
||||
<strong class="help-card-title">Manuel Complet</strong>
|
||||
<small class="help-card-info">Détails techniques (63 pages)</small>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="help-modal-footer">
|
||||
<p><?php echo est_anglophone() ? 'Contact Support' : 'Contact Support'; ?>: info@ebene.info</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="div_ajaxgabarit">
|
||||
</div>
|
||||
|
|
@ -824,10 +849,10 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
/* ================================
|
||||
4) Dropdown utilisateur
|
||||
================================= */
|
||||
const btn = document.getElementById('userDropdownBtn');
|
||||
if (btn) {
|
||||
const dropdown = new bootstrap.Dropdown(btn);
|
||||
btn.addEventListener('click', function(e) {
|
||||
const btnDropdown = document.getElementById('userDropdownBtn');
|
||||
if (btnDropdown) {
|
||||
const dropdown = new bootstrap.Dropdown(btnDropdown);
|
||||
btnDropdown.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
dropdown.toggle();
|
||||
|
|
@ -835,9 +860,9 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
}
|
||||
|
||||
document.addEventListener('click', function(e) {
|
||||
const btn = document.getElementById('userDropdownBtn');
|
||||
if (btn && !btn.contains(e.target)) {
|
||||
const instance = bootstrap.Dropdown.getInstance(btn);
|
||||
const btnDropdown = document.getElementById('userDropdownBtn');
|
||||
if (btnDropdown && !btnDropdown.contains(e.target)) {
|
||||
const instance = bootstrap.Dropdown.getInstance(btnDropdown);
|
||||
if (instance) instance.hide();
|
||||
}
|
||||
});
|
||||
|
|
@ -852,6 +877,31 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
}
|
||||
});
|
||||
|
||||
/* ================================
|
||||
6) Gestion du Centre d'Aide (Spécifique)
|
||||
================================= */
|
||||
const helpModal = document.getElementById("helpModal");
|
||||
const helpBtn = document.getElementById("helpButton");
|
||||
const helpClose = document.querySelector(".help-close-button");
|
||||
|
||||
if (helpBtn && helpModal) {
|
||||
helpBtn.addEventListener('click', function() {
|
||||
helpModal.style.display = "block";
|
||||
});
|
||||
|
||||
if (helpClose) {
|
||||
helpClose.addEventListener('click', function() {
|
||||
helpModal.style.display = "none";
|
||||
});
|
||||
}
|
||||
|
||||
window.addEventListener('click', function(event) {
|
||||
if (event.target == helpModal) {
|
||||
helpModal.style.display = "none";
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user