Merge branch 'main' of git.ebene.ovh:ebene/radiantrh
This commit is contained in:
commit
d197ec4b0b
File diff suppressed because one or more lines are too long
|
|
@ -1,20 +0,0 @@
|
|||
<?php
|
||||
require_once 'Framework/Controleur.php';
|
||||
require_once 'Modele/Police.php';
|
||||
|
||||
class ControleurAjaxlisterpolicesclient extends Controleur {
|
||||
private $police;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->police = new Police();
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$vue = $this->requete->getParametreFormulaire("vue");
|
||||
$polices = $this->police->getPoliceRh();
|
||||
|
||||
$this->genererVueAjax(array('vue' => $vue, 'polices' => $polices));
|
||||
}
|
||||
}
|
||||
18
Controleur/ControleurAjaxsessionvue.php
Normal file
18
Controleur/ControleurAjaxsessionvue.php
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
require_once 'Framework/Controleur.php';
|
||||
require_once 'Modele/Police.php';
|
||||
|
||||
class ControleurAjaxsessionvue extends Controleur {
|
||||
private $police;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->police = new Police();
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$vue = $this->requete->getParametreFormulaire("vue");
|
||||
$_SESSION['vueActive'] = $vue;
|
||||
}
|
||||
}
|
||||
24
Controleur/ControleurChoisirpolice.php
Normal file
24
Controleur/ControleurChoisirpolice.php
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
require_once 'Framework/Controleur.php';
|
||||
require_once 'Modele/Menuvueutilisateur.php';
|
||||
require_once 'Modele/Police.php';
|
||||
|
||||
class ControleurChoisirpolice extends Controleur {
|
||||
private $police;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->menuvue = new Menuvueutilisateur();
|
||||
$this->menuvue->getMenuVue("Choisirpolice");
|
||||
|
||||
$this->police = new Police();
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$vue = $_SESSION["vueActive"];
|
||||
$polices = $this->police->getPoliceRh();
|
||||
|
||||
$this->genererVue(array('vue' => $vue, 'polices' => $polices));
|
||||
}
|
||||
}
|
||||
107
Js/fonctions.js
107
Js/fonctions.js
|
|
@ -118,9 +118,8 @@ async function showMessageDeconnexion()
|
|||
|
||||
await alert_ebene(msg, msgEng).then(() => {
|
||||
// Ce code ne s’exécute qu’après clic sur OK
|
||||
setInterval(() => {
|
||||
window.location.assign($("#racineWeb" ).val()+"Connexion/deconnecter/");
|
||||
}, 20000);
|
||||
window.location.assign($("#racineWeb" ).val()+"Connexion/deconnecter/");
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -3041,7 +3040,14 @@ function importer_modele_assure(idAvenant) {
|
|||
}
|
||||
|
||||
var div_export = $('#div_exporter_liste_assures');
|
||||
div_export.html('<div class="text-center py-5"><div class="spinner-border text-info" role="status"></div><p class="mt-2">Analyse du fichier et liaison à l\'avenant...</p></div>');
|
||||
|
||||
const codeLangue = $("#codeLangue").val();
|
||||
|
||||
if(codeLangue === "en_US") {
|
||||
div_export.html('<div class="text-center py-5"><div class="spinner-border text-info" role="status"></div><p class="mt-2">Analyze the file and attach it to the amendment.</p></div>');
|
||||
} else{
|
||||
div_export.html('<div class="text-center py-5"><div class="spinner-border text-info" role="status"></div><p class="mt-2">Analyse du fichier et liaison à l\'avenant...</p></div>');
|
||||
}
|
||||
|
||||
var donnees = {
|
||||
idAvenant: idAvenant,
|
||||
|
|
@ -4529,6 +4535,7 @@ function consulterfactureged_pop()
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
function lister_polices_client(id) {
|
||||
const vues = {
|
||||
1: "Rechercherassure",
|
||||
|
|
@ -4537,61 +4544,26 @@ function lister_polices_client(id) {
|
|||
};
|
||||
|
||||
vue = vues[id] || null; // null si id ne correspond à rien
|
||||
|
||||
if(vue != null){
|
||||
|
||||
donnees = 'vue='+vue;
|
||||
|
||||
$.ajax({
|
||||
url: $("#racineWeb").val()+"Ajaxsessionvue/",
|
||||
type : 'post',
|
||||
data: donnees,
|
||||
error: function(errorData) {
|
||||
},
|
||||
complete: function() {
|
||||
window.location.assign($("#racineWeb" ).val()+"Choisirpolice/");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const modalEl = document.getElementById('pop_police');
|
||||
|
||||
// On déplace le modal directement sous <body> s'il n'y est pas déjà.
|
||||
// Cela permet de passer outre les z-index des conteneurs parents (Sidebar, Header).
|
||||
if (modalEl.parentElement !== document.body) {
|
||||
document.body.appendChild(modalEl);
|
||||
}
|
||||
|
||||
const racine = $("#racineWeb").val() || "/";
|
||||
const divPolice = document.getElementById('div_police');
|
||||
|
||||
/* ===================================================
|
||||
* Préparation visuelle (Spinner)
|
||||
* =================================================== */
|
||||
showLoader("#div_police", { size: 3 });
|
||||
|
||||
|
||||
/* ===================================================
|
||||
* Initialisation de l'instance Bootstrap
|
||||
* =================================================== */
|
||||
const modal = bootstrap.Modal.getOrCreateInstance(modalEl, {
|
||||
backdrop: 'static',
|
||||
keyboard: false
|
||||
});
|
||||
|
||||
/* ===================================================
|
||||
* Gestion de l'événement d'affichage et AJAX
|
||||
* =================================================== */
|
||||
// On utilise 'shown.bs.modal' pour lancer l'AJAX une fois le modal visible
|
||||
$(modalEl).one('shown.bs.modal', function () {
|
||||
$.ajax({
|
||||
url: racine + "Ajaxlisterpolicesclient/",
|
||||
type: 'POST',
|
||||
data: { vue: vue },
|
||||
success: function (data) {
|
||||
divPolice.innerHTML = data;
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
divPolice.innerHTML = `
|
||||
<div class="alert alert-danger m-3 shadow-sm">
|
||||
<strong>Erreur :</strong> Impossible de générer la liste des polices.
|
||||
<small class="d-block text-muted mt-1">${error}</small>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/* ===================================================
|
||||
* 6. Affichage final
|
||||
* =================================================== */
|
||||
modal.show();
|
||||
}
|
||||
|
||||
|
||||
function ajax_contexter_police(){
|
||||
idPolice = $("#idPolice").val();
|
||||
|
||||
|
|
@ -4609,11 +4581,28 @@ function ajax_contexter_police(){
|
|||
|
||||
}
|
||||
|
||||
function ouvrir_vue(vue)
|
||||
{
|
||||
window.location.assign($("#racineWeb" ).val()+vue+"/");
|
||||
|
||||
function ouvrir_vue(vue) {
|
||||
idPolice = $("#idPolice").val();
|
||||
|
||||
if (idPolice<=" ")
|
||||
{
|
||||
v_msg="Veuillez sélectionner une police!";
|
||||
v_msgEng="Please select a policy!";
|
||||
|
||||
alert_ebene(v_msg, v_msgEng).then(() => {
|
||||
// Ce code ne s’exécute qu’après clic sur OK
|
||||
$("#idPolice").focus();
|
||||
|
||||
return;
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
window.location.assign($("#racineWeb").val() + vue + "/");
|
||||
}
|
||||
|
||||
|
||||
function afficher_users_client_id(idUtilisateur)
|
||||
{
|
||||
window.location.assign($("#racineWeb" ).val()+"Ficheuserrhclient/"+idUtilisateur+"/");
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ class Emission extends Modele {
|
|||
|
||||
public function getbeneficiaireprimeadherent($idAdherent, $debutPeriode, $finPeriode)
|
||||
{
|
||||
/*
|
||||
if (est_anglophone())
|
||||
{
|
||||
$sql = 'call sp_get_beneficiaire_prime_adherent_eng(?, ?, ?)';
|
||||
|
|
@ -31,6 +32,9 @@ class Emission extends Modele {
|
|||
{
|
||||
$sql = 'call sp_get_beneficiaire_prime_adherent(?, ?, ?)';
|
||||
}
|
||||
*/
|
||||
|
||||
$sql = 'call sp_get_beneficiaire_prime_adherent(?, ?, ?)';
|
||||
|
||||
$resultat = $this->executerRequete($sql, array($idAdherent, $debutPeriode, $finPeriode));
|
||||
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
<th colspan="4" class="text-center text-uppercase small py-3" style="letter-spacing: 1px;">
|
||||
<i class="fa-solid fa-sigma me-2"></i><?= _("Total Général") ?>
|
||||
</th>
|
||||
<th class="text-center h6 mb-0"><?= format_N($this->nettoyer($beneficiaires_total['primeNetteTotal'])) ?></th>
|
||||
<th class="text-center h6 mb-0"><?= format_N($this->nettoyer($beneficiaires_total['commissionTotal'])) ?></th>
|
||||
<th class="text-center h6 mb-0"><?= format_N($this->nettoyer($beneficiaires_total['commissionAutreTotal'])) ?></th>
|
||||
<th class="text-center h6 mb-0"><?= format_N($this->nettoyer($beneficiaires_total['accessoireTotal'])) ?></th>
|
||||
<th class="text-center h6 mb-0"><?= format_N($this->nettoyer($beneficiaires_total['taxeTotal'])) ?></th>
|
||||
<th class="text-center h6 mb-0"><?= format_N($this->nettoyer($beneficiaires_total['fraisCarteTotal'])) ?></th>
|
||||
<th class="text-center h5 mb-0 text-warning"><?= format_N($this->nettoyer($beneficiaires_total['primeTtcTotal'])) ?></th>
|
||||
<th class="text-center h6 mb-0"><?= is_array($beneficiaires_total) ? format_N($this->nettoyer($beneficiaires_total['primeNetteTotal'])) : '0'; ?></th>
|
||||
<th class="text-center h6 mb-0"><?= is_array($beneficiaires_total) ? format_N($this->nettoyer($beneficiaires_total['commissionTotal'])) : '0'; ?></th>
|
||||
<th class="text-center h6 mb-0"><?= is_array($beneficiaires_total) ? format_N($this->nettoyer($beneficiaires_total['commissionAutreTotal'])) : '0'; ?></th>
|
||||
<th class="text-center h6 mb-0"><?= is_array($beneficiaires_total) ? format_N($this->nettoyer($beneficiaires_total['accessoireTotal'])) : '0'; ?></th>
|
||||
<th class="text-center h6 mb-0"><?= is_array($beneficiaires_total) ? format_N($this->nettoyer($beneficiaires_total['taxeTotal'])) : '0'; ?></th>
|
||||
<th class="text-center h6 mb-0"><?= is_array($beneficiaires_total) ? format_N($this->nettoyer($beneficiaires_total['fraisCarteTotal'])) : '0'; ?></th>
|
||||
<th class="text-center h5 mb-0 text-warning"><?= is_array($beneficiaires_total) ? format_N($this->nettoyer($beneficiaires_total['primeTtcTotal'])) : '0'; ?></th>
|
||||
</tr>
|
||||
<tr class="bg-secondary bg-opacity-25 small text-uppercase">
|
||||
<th class="text-center border-0 fw-bold"><?= _("Effet") ?></th>
|
||||
|
|
@ -57,13 +57,13 @@
|
|||
<tfoot class="table-light">
|
||||
<tr class="fw-bold">
|
||||
<td colspan="4" class="text-end text-uppercase small pe-4"><?= _("Sous-Total") ?></td>
|
||||
<td class="text-center"><?= format_N($this->nettoyer($beneficiaires_total['primeNetteTotal'])) ?></td>
|
||||
<td class="text-center"><?= format_N($this->nettoyer($beneficiaires_total['commissionTotal'])) ?></td>
|
||||
<td class="text-center"><?= format_N($this->nettoyer($beneficiaires_total['commissionAutreTotal'])) ?></td>
|
||||
<td class="text-center"><?= format_N($this->nettoyer($beneficiaires_total['accessoireTotal'])) ?></td>
|
||||
<td class="text-center"><?= format_N($this->nettoyer($beneficiaires_total['taxeTotal'])) ?></td>
|
||||
<td class="text-center"><?= format_N($this->nettoyer($beneficiaires_total['fraisCarteTotal'])) ?></td>
|
||||
<td class="text-center text-primary"><?= format_N($this->nettoyer($beneficiaires_total['primeTtcTotal'])) ?></td>
|
||||
<td class="text-center"><?= is_array($beneficiaires_total) ? format_N($this->nettoyer($beneficiaires_total['primeNetteTotal'])) : '0'; ?></td>
|
||||
<td class="text-center"><?= is_array($beneficiaires_total) ? format_N($this->nettoyer($beneficiaires_total['commissionTotal'])) : '0'; ?></td>
|
||||
<td class="text-center"><?= is_array($beneficiaires_total) ? format_N($this->nettoyer($beneficiaires_total['commissionAutreTotal'])) : '0'; ?></td>
|
||||
<td class="text-center"><?= is_array($beneficiaires_total) ? format_N($this->nettoyer($beneficiaires_total['accessoireTotal'])) : '0'; ?></td>
|
||||
<td class="text-center"><?= is_array($beneficiaires_total) ? format_N($this->nettoyer($beneficiaires_total['taxeTotal'])) : '0'; ?></td>
|
||||
<td class="text-center"><?= is_array($beneficiaires_total) ? format_N($this->nettoyer($beneficiaires_total['fraisCarteTotal'])) : '0'; ?></td>
|
||||
<td class="text-center text-primary"><?= is_array($beneficiaires_total) ? format_N($this->nettoyer($beneficiaires_total['primeTtcTotal'])) : '0'; ?></td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
<div id="div_remplacement_adherent">
|
||||
<!-- -->
|
||||
<div class="card border-primary shadow-sm mb-4">
|
||||
<div class="card-body py-2 bg-light">
|
||||
<div class="row g-2 align-items-center">
|
||||
|
|
@ -62,22 +63,30 @@
|
|||
<div class="card-body p-4">
|
||||
<div class="row g-3 mb-4">
|
||||
<div class="col-md-6">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Nom") ?></label>
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Nom") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<input class="form-control text-uppercase border-success" type="text" id="nom" name="nom" required>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Prénoms") ?></label>
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Prénoms") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<input class="form-control border-success" type="text" id="prenoms" name="prenoms" required>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Nature Pièce") ?></label>
|
||||
<select class="form-select" id="codeNaturePiece" name="codeNaturePiece">
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Nature Pièce") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select" id="codeNaturePiece" name="codeNaturePiece" required>
|
||||
<?php liste_options($naturepiece,""); ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("N° Pièce") ?></label>
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("N° Pièce") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<input class="form-control" type="text" id="numeroPiece" name="numeroPiece" onblur="controler_piece_beneficiaire();"
|
||||
required autocomplete="off">
|
||||
</div>
|
||||
|
|
@ -87,13 +96,17 @@
|
|||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Genre") ?></label>
|
||||
<select class="form-select" id="sexe" name="sexe">
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Genre") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select" id="sexe" name="sexe" required>
|
||||
<?php liste_options($sexe,""); ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Date de Naissance") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Date de Naissance") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text bg-white text-muted"><i class="fas fa-calendar-alt"></i></span>
|
||||
<input type="text" class="form-control datepicker" id="dateNaissance" name="dateNaissance" required
|
||||
|
|
@ -141,8 +154,10 @@
|
|||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Téléphone Portable") ?></label>
|
||||
<input class="form-control" type="tel" id="telephonePortable" name="telephonePortable" value="<?= $_SESSION['indicatifTelephone'] ?>">
|
||||
<label class="form-label small fw-bold 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>
|
||||
<div class="col-md-4">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("E-mail") ?></label>
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@
|
|||
</tr>
|
||||
<tr class="bg-light text-dark small text-center border-bottom">
|
||||
<th class="sticky-col bg-light"><?= _("Nom & Prénoms") ?></th>
|
||||
<th class="border-end">N° Adh</th>
|
||||
<th class="border-end"><?= est_anglophone() ? "Memb No" : "N° Adh"; ?></th>
|
||||
<th>Stat</th>
|
||||
<th class="border-end">TTC</th>
|
||||
<?php foreach ($natures as $n): ?><th><?= $n ?></th><?php endforeach; ?>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
<div id="div_police" class="p-3 bg-white rounded shadow-sm border">
|
||||
<div id="div_police" class="container-fluid py-1 animate__animated animate__fadeIn">
|
||||
<h1 class="text-primary"><i class="bi bi-file-earmark-text me-2"></i><?= _('Sélectionner une police') ?></h1>
|
||||
|
||||
<div class="row g-3 align-items-end">
|
||||
<div class="col-md-7">
|
||||
<label for="idPolice" class="form-label extra-small fw-bold text-muted text-uppercase mb-2">
|
||||
|
|
@ -26,35 +26,47 @@
|
|||
<div class="card-body p-4">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Collège") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Collège") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select border-primary-subtle" id="idCollege" name="idCollege" required autofocus onChange="prorater_prime_adherent();">
|
||||
<?php liste_options($college,""); ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Avenant") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Avenant") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select" id="idAvenant" name="idAvenant" required onChange="changer_avenant_incorporation();">
|
||||
<?php liste_options($avenant,""); ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Nom de l'adhérent") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Nom de l'adhérent") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<input type="text" class="form-control text-uppercase fw-bold" id="nom" name="nom" required>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Prénoms") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Prénoms") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<input type="text" class="form-control" id="prenoms" name="prenoms" required>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Nature Pièce") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Nature Pièce") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select" id="codeNaturePiece" name="codeNaturePiece" required onChange="controler_piece_beneficiaire();">
|
||||
<?php liste_options($naturepiece,""); ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("N° de Pièce") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("N° de Pièce") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<input type="text" class="form-control" id="numeroPiece" name="numeroPiece" onblur="controler_piece_beneficiaire();" required autocomplete="off">
|
||||
</div>
|
||||
<div class="col-md-4 d-flex align-items-end">
|
||||
|
|
@ -62,13 +74,17 @@
|
|||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Genre") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Genre") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select" id="sexe" name="sexe" required>
|
||||
<?php liste_options($sexe,""); ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Date de Naissance") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Date de Naissance") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-text bg-white text-muted"><i class="fas fa-calendar-alt"></i></span>
|
||||
<input type="text" class="form-control datepicker" id="dateNaissance" name="dateNaissance" required
|
||||
|
|
@ -79,13 +95,17 @@
|
|||
<input type="text" id="agepersonne" name="agepersonne" class="form-control-plaintext text-danger fw-bold text-center border-bottom" value="Age : 0" disabled>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Groupe Sanguin") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Groupe Sanguin") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select" id="codeGroupeSanguin" name="codeGroupeSanguin" required>
|
||||
<?php liste_options($groupesanguin,""); ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Situation Familiale") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Situation Familiale") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select" id="codeSituationFamille" name="codeSituationFamille" required>
|
||||
<?php liste_options($situationfamille,""); ?>
|
||||
</select>
|
||||
|
|
@ -103,13 +123,17 @@
|
|||
<div class="card-body p-4">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Pays") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Pays") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select" id="codePays" name="codePays" required onChange="ajaxListerVille();">
|
||||
<?php liste_options($pays, $codePays); ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= (isset($_SESSION['affichagedynamique']['Province'])) ? _($_SESSION['affichagedynamique']['Province']) : _("Province") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= (isset($_SESSION['affichagedynamique']['Province'])) ? _($_SESSION['affichagedynamique']['Province']) : _("Province") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<div id="listeville">
|
||||
<select class="form-select" id="codeVille" name="codeVille" required onChange="ajaxListerLocalite();">
|
||||
<?php liste_options($ville, $codeVille); ?>
|
||||
|
|
@ -117,7 +141,9 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= (isset($_SESSION['affichagedynamique']['Commune'])) ? _($_SESSION['affichagedynamique']['Commune']) : _("Commune") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= (isset($_SESSION['affichagedynamique']['Commune'])) ? _($_SESSION['affichagedynamique']['Commune']) : _("Commune") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<div id="listelocalite">
|
||||
<select class="form-select" id="codeLocalite" name="codeLocalite" required>
|
||||
<?php liste_options($localite, $codeLocalite); ?>
|
||||
|
|
@ -138,7 +164,9 @@
|
|||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Téléphone Portable") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Téléphone Portable") ?><span class="required-star">*</span>
|
||||
</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">
|
||||
|
|
@ -161,7 +189,9 @@
|
|||
<div class="card-body p-4 d-flex flex-column justify-content-between">
|
||||
<div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Date d'Entrée") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Date d'Entrée") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<div id="div_date_avenant">
|
||||
<input type="text" class="form-control datepicker fw-bold text-uppercase" id="dateEntree" name="dateEntree"
|
||||
value="<?= dateLang($_SESSION['dateAvenant_C'], $_SESSION['lang']) ?>" required onChange="prorater_prime_adherent();">
|
||||
|
|
@ -169,7 +199,9 @@
|
|||
</div>
|
||||
<div class="row g-2 mb-4">
|
||||
<div class="col-7">
|
||||
<label class="form-label fw-bold small text-uppercase"><?= _("Prorata?") ?></label>
|
||||
<label class="form-label fw-bold small text-uppercase">
|
||||
<?= _("Prorata?") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select form-select-sm" id="prorata" name="prorata" required onChange="prorater_prime_adherent();">
|
||||
<?php liste_options($ouinonprorata,"1",true); ?>
|
||||
</select>
|
||||
|
|
|
|||
|
|
@ -27,21 +27,27 @@
|
|||
<h5 class="mb-3 text-secondary small text-uppercase fw-bold"><?= _("Paramètres d'inclusion") ?></h5>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Avenant") ?></label>
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Avenant") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select form-select-sm shadow-sm border-primary" id="idAvenant" name="idAvenant" required autofocus onChange="changer_avenant_incorporation_beneficiaire();">
|
||||
<?php liste_options($avenant,""); ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Date d'Entrée") ?></label>
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Date d'Entrée") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<div id="div_date_avenant">
|
||||
<input class="form-control form-control-sm datepicker" type="text" id="dateEntree" name="dateEntree" value="<?= dateLang($_SESSION['dateAvenant_C'], $_SESSION['lang']) ?>" required onChange="prorater_prime_beneficiaire();">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Option de Prorata") ?></label>
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Option de Prorata") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select form-select-sm" id="prorata" name="prorata" required onChange="prorater_prime_beneficiaire();">
|
||||
<?php liste_options($ouinonprorata,"1",true); ?>
|
||||
</select>
|
||||
|
|
@ -53,24 +59,32 @@
|
|||
|
||||
<div class="row g-2 mb-3">
|
||||
<div class="col-md-5">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Nom") ?></label>
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Nom") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<input class="form-control form-control-sm fw-bold shadow-sm" type="text" id="nomBeneficiaire" name="nomBeneficiaire" value="<?= $adherent['nom'] ?>" required style="text-transform: uppercase;">
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Prénoms") ?></label>
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Prénoms") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<input class="form-control form-control-sm shadow-sm" type="text" id="prenomsBeneficiaire" name="prenomsBeneficiaire" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-2 mb-3">
|
||||
<div class="col-md-6">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Lien Parenté") ?></label>
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Lien Parenté") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select form-select-sm" id="codeLienParente" name="codeLienParente" required onChange="filtrergenreconjoint();">
|
||||
<?php liste_options($lienparente,""); ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Genre") ?></label>
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Genre") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select form-select-sm" id="sexe" name="sexe" required>
|
||||
<?php liste_options($sexe,""); ?>
|
||||
</select>
|
||||
|
|
@ -79,7 +93,9 @@
|
|||
|
||||
<div class="row g-2 mb-3">
|
||||
<div class="col-md-6">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Date de Naissance") ?></label>
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Date de Naissance") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<input class="form-control form-control-sm datepicker" type="text" id="dateNaissance" name="dateNaissance" required onchange="controle_age($('#dateNaissance').datepicker('getDate'), $('#codeLienParente').val())">
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
|
|
@ -94,25 +110,33 @@
|
|||
<div class="card col-md-12">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-3">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Nature Pièce") ?></label>
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Nature Pièce") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select form-select-sm" id="codeNaturePiece" name="codeNaturePiece" required onChange="javascript:controler_piece_beneficiaire();">
|
||||
<?php liste_options($naturepiece,""); ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("N° Pièce") ?></label>
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("N° Pièce") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<input class="form-control form-control-sm" type="text" id="numeroPiece" name="numeroPiece" onblur="javascript:controler_piece_beneficiaire();" required autocomplete="off">
|
||||
<div id="div_controle_piece" class="mt-1 small"></div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Groupe Sanguin") ?></label>
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Groupe Sanguin") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<select class="form-select form-select-sm" id="codeGroupeSanguin" name="codeGroupeSanguin" required>
|
||||
<?php liste_options($groupesanguin,""); ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label small fw-bold text-uppercase"><?= _("Téléphone") ?></label>
|
||||
<input class="form-control form-control-sm" type="tel" id="telephonePortable" name="telephonePortable" autocomplete="off">
|
||||
<label class="form-label small fw-bold text-uppercase">
|
||||
<?= _("Portable") ?><span class="required-star">*</span>
|
||||
</label>
|
||||
<input class="form-control form-control-sm" type="tel" id="telephonePortable" name="telephonePortable" required autocomplete="off">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -68,10 +68,6 @@
|
|||
<div id="div_liste_assure_importe" class="card shadow-sm border-0">
|
||||
<div class="card-header bg-white py-3 d-flex justify-content-between align-items-center">
|
||||
<h5 class="mb-0 fw-bold text-secondary"><i class="fas fa-users me-2"></i><?= _("Détail des bénéficiaires") ?></h5>
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-sm btn-outline-secondary" onclick="exportExcel()">Excel</button>
|
||||
<button class="btn btn-sm btn-outline-secondary" onclick="exportPdf()">PDF</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body p-0">
|
||||
|
|
|
|||
140
Vue/gabarit.php
140
Vue/gabarit.php
|
|
@ -126,7 +126,7 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
<link rel="manifest" href="<?= $racineWeb ?>manifest.json">
|
||||
|
||||
<!-- 4. VOS STYLES PERSONNALISÉS (en dernier pour qu'ils dominent) -->
|
||||
<link href="<?= $racineWeb ?>Bootstrap_new/css/style_office.css?ver=2026.01.31.05" rel="stylesheet">
|
||||
<link href="<?= $racineWeb ?>Bootstrap_new/css/style_office.css?ver=2026.02.05.00" rel="stylesheet">
|
||||
<link href="<?= $racineWeb ?>Bootstrap_new/css/ux_enhancements.css?ver=2025.12.21.02" rel="stylesheet">
|
||||
|
||||
<!-- Charts -->
|
||||
|
|
@ -219,8 +219,6 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
$descriptionVue = est_anglophone() ? $infovue['DescriptionEng'] : $infovue['Description'];
|
||||
$titreRetour = est_anglophone() ? $infovue['titreRetourEng'] : $infovue['titreRetour'];
|
||||
$retourVue = $infovue['lienRetour'];
|
||||
|
||||
//var_dump(array("Descrip =" => $descriptionVue, "retour" => $retourVue));
|
||||
?>
|
||||
<body>
|
||||
<!-- Header -->
|
||||
|
|
@ -229,7 +227,7 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
<div class="logo-container">
|
||||
<a href="Accueil" class="app-logo">
|
||||
<img src="/Bootstrap_new/images/new/favicon.png" alt="INTER-SANTE" width="36" height="36">
|
||||
<span class="ms-2">INTER-SANTE</span>
|
||||
<span class="ms-2">INTER SANTE</span>
|
||||
</a>
|
||||
|
||||
<?php if($_SESSION['bdTests_C'] == "1"): ?>
|
||||
|
|
@ -238,7 +236,7 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
<span>MODE TEST</span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- -->
|
||||
<i class="bi bi-list toggle-sidebar-btn" onclick="toggleSidebar()" style="cursor: pointer;"></i>
|
||||
</div>
|
||||
|
||||
|
|
@ -479,11 +477,17 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
<i class="bi bi-file-earmark-text"></i>
|
||||
<span><?= _('Police') ?></span>
|
||||
</div>
|
||||
<div class="info-box">
|
||||
<div class="info-value">
|
||||
<?= $this->nettoyer($_SESSION['numeroPolice_C']) ?>
|
||||
<?php if($_SESSION['numeroPolice_C'] <= " "): ?>
|
||||
<div class="info-box">
|
||||
<div class="info-value">
|
||||
<?= $this->nettoyer($_SESSION['numeroPolice_C']) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<button class="action-btn" onclick="javascript:afficher_police_id();">
|
||||
<?= $this->nettoyer($_SESSION['numeroPolice_C']) ?>
|
||||
</button>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Adhérent principal -->
|
||||
|
|
@ -492,11 +496,17 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
<i class="bi bi-person-badge"></i>
|
||||
<span><?= _('Assuré principal') ?></span>
|
||||
</div>
|
||||
<div class="info-box">
|
||||
<div class="info-value">
|
||||
<?= $this->nettoyer($_SESSION['adherent_C']) ?>
|
||||
<?php if($_SESSION['adherent_C'] <= " "): ?>
|
||||
<div class="info-box">
|
||||
<div class="info-value">
|
||||
<?= $this->nettoyer($_SESSION['adherent_C']) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<button class="action-btn" onclick="javascript:afficher_adherent_id();">
|
||||
<?= $this->nettoyer($_SESSION['adherent_C']) ?>
|
||||
</button>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Patient -->
|
||||
|
|
@ -677,7 +687,7 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
|
||||
<!-- Application Scripts -->
|
||||
<script src="/Js/fonctions.js?ver=2026.02.03.02"></script>
|
||||
<script src="/Js/fonctions.js?ver=2026.02.17.07"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
raffraichier_gabarit();
|
||||
|
|
@ -723,45 +733,30 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
<script src="Bootstrap/vendor/echarts/echarts.min.js"></script>
|
||||
|
||||
<script>
|
||||
// CORRECTION URGENTE - FORCE LE BON MENU
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
|
||||
// Attendre que NavigationManager soit prêt
|
||||
|
||||
/* ================================
|
||||
1) Correction urgente - Forcer le bon menu
|
||||
================================= */
|
||||
setTimeout(function() {
|
||||
// 1. Vérifier l'état actuel
|
||||
const openMenus = document.querySelectorAll('.nav-submenu.show');
|
||||
|
||||
// 2. Si submenu1 est ouvert mais on est sur Accueil
|
||||
if (window.appConfig?.activeLink === 'Accueil') {
|
||||
const wrongMenu = document.getElementById('submenu1');
|
||||
const correctMenu = document.getElementById('submenu0');
|
||||
|
||||
|
||||
if (wrongMenu?.classList.contains('show')) {
|
||||
|
||||
// FORCER LA CORRECTION
|
||||
if (window.appUX?.navigation) {
|
||||
|
||||
// Fermer tous les menus
|
||||
window.appUX.navigation.closeAllMenus();
|
||||
|
||||
// Ouvrir submenu0
|
||||
setTimeout(() => {
|
||||
window.appUX.navigation.openMenuById('submenu0');
|
||||
|
||||
}, 200);
|
||||
}
|
||||
// Fallback manuel
|
||||
else {
|
||||
|
||||
// Fermer submenu1
|
||||
} else {
|
||||
wrongMenu.classList.remove('show');
|
||||
const wrongLink = document.querySelector('[href="#submenu1"]');
|
||||
if (wrongLink) {
|
||||
wrongLink.setAttribute('aria-expanded', 'false');
|
||||
wrongLink.classList.remove('active');
|
||||
}
|
||||
|
||||
// Ouvrir submenu0
|
||||
setTimeout(() => {
|
||||
if (correctMenu) {
|
||||
correctMenu.classList.add('show');
|
||||
|
|
@ -775,91 +770,88 @@ $photoAssureCrypte = $_SESSION['photoAssureCrypte'];
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Vérification finale
|
||||
setTimeout(() => {
|
||||
const finalState = document.querySelectorAll('.nav-submenu.show');
|
||||
if (finalState.length === 1 && finalState[0].id === 'submenu0') {
|
||||
// OK
|
||||
}
|
||||
}, 500);
|
||||
}, 1000); // Attendre 1s que tout soit initialisé
|
||||
});
|
||||
</script>
|
||||
}, 1000);
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
// 1) Déplacer immédiatement tous les modals existants sous <body>
|
||||
document.querySelectorAll('.modal').forEach(function (m) {
|
||||
/* ================================
|
||||
2) Gestion des modals Bootstrap
|
||||
================================= */
|
||||
document.querySelectorAll('.modal').forEach(function(m) {
|
||||
if (m.parentNode !== document.body) document.body.appendChild(m);
|
||||
});
|
||||
|
||||
// 2) Intercepter tous les clics sur triggers AVANT Bootstrap (phase capture)
|
||||
document.addEventListener('click', function (e) {
|
||||
document.addEventListener('click', function(e) {
|
||||
const trigger = e.target.closest('[data-bs-toggle="modal"][data-bs-target]');
|
||||
if (!trigger) return;
|
||||
const targetSelector = trigger.getAttribute('data-bs-target');
|
||||
const modal = document.querySelector(targetSelector);
|
||||
if (modal && modal.parentNode !== document.body) {
|
||||
document.body.appendChild(modal);
|
||||
document.body.appendChild(modal);
|
||||
}
|
||||
}, true);
|
||||
|
||||
// 3) Fallback: si un modal s'ouvre autrement, garantir le déplacement
|
||||
document.addEventListener('show.bs.modal', function (event) {
|
||||
document.addEventListener('show.bs.modal', function(event) {
|
||||
const modal = event.target;
|
||||
if (modal && modal.parentNode !== document.body) {
|
||||
document.body.appendChild(modal);
|
||||
document.body.appendChild(modal);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
// On initialise les menus SANS les forcer à s'ouvrir
|
||||
/* ================================
|
||||
3) Gestion des sous-menus (Collapse)
|
||||
================================= */
|
||||
document.querySelectorAll('[data-submenu-target]').forEach(link => {
|
||||
link.addEventListener('click', function (e) {
|
||||
link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
const targetId = this.getAttribute('data-submenu-target');
|
||||
const targetEl = document.getElementById(targetId);
|
||||
|
||||
|
||||
if (targetEl) {
|
||||
const instance = bootstrap.Collapse.getOrCreateInstance(targetEl, {
|
||||
parent: '.nav-section', // Ferme les autres quand on en ouvre un
|
||||
parent: '.nav-section',
|
||||
toggle: false
|
||||
});
|
||||
instance.toggle();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const btn = document.getElementById('userDropdownBtn');
|
||||
|
||||
if (btn) {
|
||||
// On crée l'instance Bootstrap une seule fois
|
||||
const dropdown = new bootstrap.Dropdown(btn);
|
||||
|
||||
btn.addEventListener('click', function (e) {
|
||||
// ÉTAPE CLÉ : On empêche les autres scripts du header de bloquer le clic
|
||||
/* ================================
|
||||
4) Dropdown utilisateur
|
||||
================================= */
|
||||
const btn = document.getElementById('userDropdownBtn');
|
||||
if (btn) {
|
||||
const dropdown = new bootstrap.Dropdown(btn);
|
||||
btn.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
// On force l'ouverture/fermeture
|
||||
e.stopPropagation();
|
||||
dropdown.toggle();
|
||||
});
|
||||
}
|
||||
|
||||
// Sécurité : Fermer le menu si on clique n'importe où ailleurs sur la page
|
||||
document.addEventListener('click', function (e) {
|
||||
document.addEventListener('click', function(e) {
|
||||
const btn = document.getElementById('userDropdownBtn');
|
||||
if (btn && !btn.contains(e.target)) {
|
||||
const instance = bootstrap.Dropdown.getInstance(btn);
|
||||
if (instance) instance.hide();
|
||||
}
|
||||
});
|
||||
|
||||
/* ================================
|
||||
5) Ajouter étoile rouge aux champs required
|
||||
================================= */
|
||||
document.querySelectorAll('input[required], select[required], textarea[required]').forEach(function(el) {
|
||||
let label = document.querySelector('label[for="'+el.id+'"]');
|
||||
if (label && !label.querySelector('.required-star')) {
|
||||
label.innerHTML += '<span class="required-star">*</span>';
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user