This commit is contained in:
KONE SOREL 2026-01-12 13:48:35 +00:00
parent 6b639c2323
commit 68910f3853
5 changed files with 345 additions and 234 deletions

View File

@ -862,6 +862,20 @@ body.sidebar-collapsed .nav-bar {
padding: 1rem !important;
font-size: 9pt;
}
.chart-container {
height: 60vh;
}
.card-header {
flex-direction: column;
align-items: flex-start !important;
}
.btn-export {
margin-top: 0.5rem;
align-self: flex-end;
}
}
/* Écrans larges : mêmes insets pour nav-tabs et content-area */
@ -1431,4 +1445,20 @@ li i { margin-right:10px; color:#007bff; }
padding: 15px;
border-radius: 8px;
background-color: white;
}
}
/* Styles communs pour tous les graphiques */
.chart-container {
position: relative;
width: 100%;
min-height: 300px;
}
.legend-text {
vertical-align: middle;
}
.btn-export {
padding: 0.25rem 0.5rem;
font-size: 0.75rem;
}

View File

@ -202,9 +202,35 @@ class ControleurFichebeneficiaire extends Controleur
$limite_beneficiaire = $this->garantieadherent->getLimitesBeneficiaire($idBeneficiaire);
$limite_adherent = $this->garantieadherent->getLimitesAdherent($idAdherent);
$prestationsParMois = $this->beneficiaire->getPrestationsmensuelles($idBeneficiaire);
// Extraction directe des colonnes avec array_column
$tabConsoParMois = [
'mois' => array_column($prestationsParMois, 'mois'),
'consos' => array_column($prestationsParMois, 'consommationBeneficiaire')
];
$tabConsoParGaranties = [
'garanties' => array_column($garantieadherents, 'codeGarantie'),
'depenses' => array_column($garantieadherents, 'consommation'),
'plafonds' => array_column($garantieadherents, 'plafond')
];
// Encodage JSON
$dataConsoParMois = json_encode($tabConsoParMois, JSON_NUMERIC_CHECK);
$dataConsoParGaranties = json_encode($tabConsoParGaranties, JSON_NUMERIC_CHECK);
$this->genererVue(array('beneficiaire' => $beneficiaire, 'message' => $message, 'nouveau_fichier' => $nouveau_fichier,
'garantieadherents' => $garantieadherents, 'limite_beneficiaire' => $limite_beneficiaire, 'limite_adherent' => $limite_adherent));
$this->genererVue(array(
'beneficiaire' => $beneficiaire,
'message' => $message,
'nouveau_fichier' => $nouveau_fichier,
'garantieadherents' => $garantieadherents,
'limite_beneficiaire' => $limite_beneficiaire,
'limite_adherent' => $limite_adherent,
'dataConsoParMois' => $dataConsoParMois,
'dataConsoParGaranties' => $dataConsoParGaranties
));
}
public function supprimer() {

View File

@ -1644,5 +1644,18 @@ class Beneficiaire extends Modele {
return $resultat->fetch(PDO::FETCH_ASSOC);
}
public function getPrestationsmensuelles($idBeneficiaire){
if (isset($_SESSION['lang']) && $_SESSION['lang']=="en_US"){
$sql = 'call prestations_mensuelles_beneficiaire_eng(?)';
}else{
$sql = 'call prestations_mensuelles_beneficiaire(?)';
}
$resultat = $this->executerRequete($sql, array($idBeneficiaire));
return $resultat->fetchAll(PDO::FETCH_ASSOC);
}
}

View File

@ -88,243 +88,285 @@
</h5>
</div>
<form name="formfichebeneficiaire" id="formfichebeneficiaire" method="POST" class="container-fluid py-3">
<div class="d-flex justify-content-between align-items-center mb-4 bg-light p-3 rounded shadow-sm border-start border-primary border-4">
<div class="card">
<h4 class="h4 mb-0 text-secondary">
<?= _("Bénéficiaire") ?> : <span class="fw-bold"><?= $beneficiaire['numeroBeneficiaire'] ?></span>
</h4>
<small class="text-muted"><?= _("Date Effet") ?> : <?= dateLang($this->nettoyer($beneficiaire['dateEffet'])) ?></small>
</div>
<div class="text-end">
<?php
$statusClass = "bg-danger"; $statusText = _("Inconnu");
if ($dateEffetCouvert == "0") { $statusText = _("Non renouvelé"); }
elseif ($estcouvert) {
if ($beneficiaire['codeEtatBeneficiaire'] == "V") { $statusClass = "bg-success"; $statusText = $etatbeneficiaire; }
else { $statusText = $etatbeneficiaire; }
} elseif ($estsorti) { $statusText = _("Retiré"); }
else { $statusText = _("Expiré"); }
?>
<span class="badge <?= $statusClass ?> fs-6 shadow-sm p-2 px-3">
<i class="fa-solid fa-circle-info me-1"></i> <?= $statusText ?>
</span>
</div>
</div>
<form name="formfichebeneficiaire" id="formfichebeneficiaire" method="POST" class="container-fluid py-3">
<div class="d-flex justify-content-between align-items-center mb-4 bg-light p-3 rounded shadow-sm border-start border-primary border-4">
<div class="card">
<h4 class="h4 mb-0 text-secondary">
<?= _("Bénéficiaire") ?> : <span class="fw-bold"><?= $beneficiaire['numeroBeneficiaire'] ?></span>
</h4>
<small class="text-muted"><?= _("Date Effet") ?> : <?= dateLang($this->nettoyer($beneficiaire['dateEffet'])) ?></small>
</div>
<div class="text-end">
<?php
$statusClass = "bg-danger"; $statusText = _("Inconnu");
if ($dateEffetCouvert == "0") { $statusText = _("Non renouvelé"); }
elseif ($estcouvert) {
if ($beneficiaire['codeEtatBeneficiaire'] == "V") { $statusClass = "bg-success"; $statusText = $etatbeneficiaire; }
else { $statusText = $etatbeneficiaire; }
} elseif ($estsorti) { $statusText = _("Retiré"); }
else { $statusText = _("Expiré"); }
?>
<span class="badge <?= $statusClass ?> fs-6 shadow-sm p-2 px-3">
<i class="fa-solid fa-circle-info me-1"></i> <?= $statusText ?>
</span>
</div>
</div>
<div class="row g-4">
<div class="col-lg-8">
<div class="card shadow-sm h-100">
<div class="card-header bg-white fw-bold"><i class="fa-solid fa-user me-2"></i><?= _("Informations Personnelles") ?></div>
<div class="card-body">
<div class="row g-3">
<div class="col-md-6">
<label class="form-label small text-uppercase fw-bold"><?= _("Nom & Prénoms") ?></label>
<input class="form-control bg-light fw-bold" type="text" value="<?= $beneficiaire['nomBeneficiaire'] . ' ' . $beneficiaire['prenomsBeneficiaire'] ?>" readonly>
</div>
<div class="col-md-3">
<label class="form-label small text-uppercase fw-bold"><?= _("Genre") ?></label>
<input class="form-control bg-light text-center" type="text" value="<?= $beneficiaire['sexe'] ?>" readonly>
</div>
<div class="col-md-3">
<label class="form-label small text-uppercase fw-bold"><?= _("Groupe Sanguin") ?></label>
<input class="form-control bg-light text-center fw-bold text-danger" type="text" value="<?= $beneficiaire['codeGroupeSanguin'] ?>" readonly>
</div>
<div class="row g-4">
<div class="col-lg-8">
<div class="card shadow-sm h-100">
<div class="card-header bg-white fw-bold"><i class="fa-solid fa-user me-2"></i><?= _("Informations Personnelles") ?></div>
<div class="card-body">
<div class="row g-3">
<div class="col-md-6">
<label class="form-label small text-uppercase fw-bold"><?= _("Nom & Prénoms") ?></label>
<input class="form-control bg-light fw-bold" type="text" value="<?= $beneficiaire['nomBeneficiaire'] . ' ' . $beneficiaire['prenomsBeneficiaire'] ?>" readonly>
</div>
<div class="col-md-3">
<label class="form-label small text-uppercase fw-bold"><?= _("Genre") ?></label>
<input class="form-control bg-light text-center" type="text" value="<?= $beneficiaire['sexe'] ?>" readonly>
</div>
<div class="col-md-3">
<label class="form-label small text-uppercase fw-bold"><?= _("Groupe Sanguin") ?></label>
<input class="form-control bg-light text-center fw-bold text-danger" type="text" value="<?= $beneficiaire['codeGroupeSanguin'] ?>" readonly>
</div>
<div class="col-md-4">
<label class="form-label small text-uppercase fw-bold"><?= _("Naissance & Âge") ?></label>
<input class="form-control bg-light" type="text" value="<?= dateLang($this->nettoyer($beneficiaire['dateNaissance'])).' ('.$beneficiaire['age'].' ans)' ?>" readonly>
</div>
<div class="col-md-4">
<label class="form-label small text-uppercase fw-bold"><?= _("Lien Parenté") ?></label>
<input class="form-control bg-light" type="text" value="<?= $lienparente ?>" readonly>
</div>
<div class="col-md-4">
<label class="form-label small text-uppercase fw-bold"><?= _("Téléphone") ?></label>
<input class="form-control bg-light" type="tel" value="<?= $beneficiaire['telephonePortable'] ?>" readonly>
</div>
<div class="col-md-4">
<label class="form-label small text-uppercase fw-bold"><?= _("Naissance & Âge") ?></label>
<input class="form-control bg-light" type="text" value="<?= dateLang($this->nettoyer($beneficiaire['dateNaissance'])).' ('.$beneficiaire['age'].' ans)' ?>" readonly>
</div>
<div class="col-md-4">
<label class="form-label small text-uppercase fw-bold"><?= _("Lien Parenté") ?></label>
<input class="form-control bg-light" type="text" value="<?= $lienparente ?>" readonly>
</div>
<div class="col-md-4">
<label class="form-label small text-uppercase fw-bold"><?= _("Téléphone") ?></label>
<input class="form-control bg-light" type="tel" value="<?= $beneficiaire['telephonePortable'] ?>" readonly>
</div>
<div class="col-md-6">
<label class="form-label small text-uppercase fw-bold"><?= _("Pièce d'identité") ?></label>
<div class="input-group">
<span class="input-group-text small"><?= $naturepiece ?></span>
<input class="form-control bg-light" type="text" value="<?= $beneficiaire['numeroPiece'] ?>" readonly>
</div>
</div>
<div class="col-md-6">
<label class="form-label small text-uppercase fw-bold"><?= _("Collège / Produit") ?></label>
<input class="form-control bg-light text-primary fw-bold" type="text" value="<?= $beneficiaire['libelleCollege'] ?>" readonly>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<label class="form-label small text-uppercase fw-bold"><?= _("Pièce d'identité") ?></label>
<div class="input-group">
<span class="input-group-text small"><?= $naturepiece ?></span>
<input class="form-control bg-light" type="text" value="<?= $beneficiaire['numeroPiece'] ?>" readonly>
</div>
</div>
<div class="col-md-6">
<label class="form-label small text-uppercase fw-bold"><?= _("Collège / Produit") ?></label>
<input class="form-control bg-light text-primary fw-bold" type="text" value="<?= $beneficiaire['libelleCollege'] ?>" readonly>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="card shadow-sm border-0 mb-3">
<div class="card-body text-center p-4">
<div class="position-relative d-inline-block mb-3">
<?php if($faceRegistered == "1"): ?>
<img src="<?=$photoAssureCrypte?>" class="img-thumbnail rounded-circle shadow" style="width: 150px; height: 150px; object-fit: cover;">
<button type="button" onClick="ebene_init_confirm_photo_face();" class="btn btn-sm btn-success position-absolute bottom-0 end-0 rounded-circle">
<i class="fa-solid fa-check"></i>
</button>
<?php else: ?>
<div class="rounded-circle bg-secondary d-flex align-items-center justify-content-center shadow" style="width: 150px; height: 150px;">
<i class="fa-solid fa-user-slash fa-4x text-white-50"></i>
</div>
<button type="button" onClick="ebene_init_photo_face();" class="btn btn-sm btn-primary position-absolute bottom-0 end-0 rounded-circle">
<i class="fa-solid fa-camera"></i>
</button>
<?php endif; ?>
</div>
<h5 class="mb-1 fw-bold"><?= $beneficiaire['numeroAdherent'] ?></h5>
<p class="text-muted small"><?= _("N° Famille") ?></p>
<div class="d-grid gap-2 mt-3">
<?php if($codeTypeContrat=="F"): ?>
<button type="button" class="btn btn-outline-info btn-sm" onClick="agent_commercial(<?= $idApporteur ?>);">
<i class="fa-solid fa-user-tie me-1"></i> <?= $libelleApporteur ?>
</button>
<?php endif; ?>
</div>
</div>
</div>
<?php if ($estsorti): ?>
<div class="alert alert-warning border-0 shadow-sm d-flex align-items-center">
<i class="fa-solid fa-door-open fa-2x me-3"></i>
<div>
<div class="fw-bold"><?= _("Sortie le") ?> : <?= dateLang($dateSortieBeneficiaire) ?></div>
<small><?= $motifsortie ?></small>
</div>
</div>
<?php endif; ?>
</div>
</div>
<div class="col-lg-4">
<div class="card shadow-sm border-0 mb-3">
<div class="card-body text-center p-4">
<div class="position-relative d-inline-block mb-3">
<?php if($faceRegistered == "1"): ?>
<img src="<?=$photoAssureCrypte?>" class="img-thumbnail rounded-circle shadow" style="width: 150px; height: 150px; object-fit: cover;">
<button type="button" onClick="ebene_init_confirm_photo_face();" class="btn btn-sm btn-success position-absolute bottom-0 end-0 rounded-circle">
<i class="fa-solid fa-check"></i>
</button>
<?php else: ?>
<div class="rounded-circle bg-secondary d-flex align-items-center justify-content-center shadow" style="width: 150px; height: 150px;">
<i class="fa-solid fa-user-slash fa-4x text-white-50"></i>
</div>
<button type="button" onClick="ebene_init_photo_face();" class="btn btn-sm btn-primary position-absolute bottom-0 end-0 rounded-circle">
<i class="fa-solid fa-camera"></i>
</button>
<?php endif; ?>
</div>
<h5 class="mb-1 fw-bold"><?= $beneficiaire['numeroAdherent'] ?></h5>
<p class="text-muted small"><?= _("N° Famille") ?></p>
<div class="d-grid gap-2 mt-3">
<?php if($codeTypeContrat=="F"): ?>
<button type="button" class="btn btn-outline-info btn-sm" onClick="agent_commercial(<?= $idApporteur ?>);">
<i class="fa-solid fa-user-tie me-1"></i> <?= $libelleApporteur ?>
</button>
<?php endif; ?>
</div>
</div>
</div>
<?php if ($estsorti): ?>
<div class="alert alert-warning border-0 shadow-sm d-flex align-items-center">
<i class="fa-solid fa-door-open fa-2x me-3"></i>
<div>
<div class="fw-bold"><?= _("Sortie le") ?> : <?= dateLang($dateSortieBeneficiaire) ?></div>
<small><?= $motifsortie ?></small>
</div>
</div>
<?php endif; ?>
</div>
</div>
<div class="row mt-4 g-3">
<?php if($controlerPlafondAdherent): ?>
<div class="col-md-6">
<div class="card border-0 shadow-sm">
<div class="card-header bg-primary text-white py-2 fw-bold small text-uppercase"><?= _("Plafond Famille") ?></div>
<div class="card-body p-0">
<div class="d-flex text-center border-bottom">
<div class="flex-fill p-2 border-end">
<small class="text-muted d-block"><?= _("Limite") ?></small>
<span class="fw-bold text-primary"><?= format_N($limite_adherent['plafondAdherent']) ?></span>
</div>
<div class="flex-fill p-2 border-end">
<small class="text-muted d-block"><?= _("Conso.") ?></small>
<span class="fw-bold text-danger"><?= format_N($limite_adherent['consommationAdherent']) ?></span>
</div>
<div class="flex-fill p-2 bg-light">
<small class="text-muted d-block"><?= _("Solde") ?></small>
<span class="fw-bold text-success"><?= format_N($limite_adherent['soldeAdherent']) ?></span>
</div>
</div>
</div>
</div>
</div>
<?php endif; ?>
<div class="row mt-4 g-3">
<?php if($controlerPlafondAdherent): ?>
<div class="col-md-6">
<div class="card border-0 shadow-sm">
<div class="card-header bg-primary text-white py-2 fw-bold small text-uppercase"><?= _("Plafond Famille") ?></div>
<div class="card-body p-0">
<div class="d-flex text-center border-bottom">
<div class="flex-fill p-2 border-end">
<small class="text-muted d-block"><?= _("Limite") ?></small>
<span class="fw-bold text-primary"><?= format_N($limite_adherent['plafondAdherent']) ?></span>
</div>
<div class="flex-fill p-2 border-end">
<small class="text-muted d-block"><?= _("Conso.") ?></small>
<span class="fw-bold text-danger"><?= format_N($limite_adherent['consommationAdherent']) ?></span>
</div>
<div class="flex-fill p-2 bg-light">
<small class="text-muted d-block"><?= _("Solde") ?></small>
<span class="fw-bold text-success"><?= format_N($limite_adherent['soldeAdherent']) ?></span>
</div>
</div>
</div>
</div>
</div>
<?php endif; ?>
<?php if($controlerPlafondBeneficiaire): ?>
<div class="col-md-6">
<div class="card border-0 shadow-sm">
<div class="card-header bg-dark text-white py-2 fw-bold small text-uppercase"><?= _("Plafond Individuel") ?></div>
<div class="card-body p-0">
<div class="d-flex text-center border-bottom">
<div class="flex-fill p-2 border-end">
<small class="text-muted d-block"><?= _("Limite") ?></small>
<span class="fw-bold text-primary"><?= format_N($limite_beneficiaire['plafondBeneficiaire']) ?></span>
</div>
<div class="flex-fill p-2 border-end">
<small class="text-muted d-block"><?= _("Conso.") ?></small>
<span class="fw-bold text-danger"><?= format_N($limite_beneficiaire['consommationBeneficiaire']) ?></span>
</div>
<div class="flex-fill p-2 bg-light">
<small class="text-muted d-block"><?= _("Solde") ?></small>
<span class="fw-bold text-success"><?= format_N($limite_beneficiaire['soldeBeneficiaire']) ?></span>
</div>
</div>
</div>
</div>
</div>
<?php endif; ?>
</div>
<?php if($controlerPlafondBeneficiaire): ?>
<div class="col-md-6">
<div class="card border-0 shadow-sm">
<div class="card-header bg-dark text-white py-2 fw-bold small text-uppercase"><?= _("Plafond Individuel") ?></div>
<div class="card-body p-0">
<div class="d-flex text-center border-bottom">
<div class="flex-fill p-2 border-end">
<small class="text-muted d-block"><?= _("Limite") ?></small>
<span class="fw-bold text-primary"><?= format_N($limite_beneficiaire['plafondBeneficiaire']) ?></span>
</div>
<div class="flex-fill p-2 border-end">
<small class="text-muted d-block"><?= _("Conso.") ?></small>
<span class="fw-bold text-danger"><?= format_N($limite_beneficiaire['consommationBeneficiaire']) ?></span>
</div>
<div class="flex-fill p-2 bg-light">
<small class="text-muted d-block"><?= _("Solde") ?></small>
<span class="fw-bold text-success"><?= format_N($limite_beneficiaire['soldeBeneficiaire']) ?></span>
</div>
</div>
</div>
</div>
</div>
<?php endif; ?>
</div>
<div class="card mt-1 shadow-sm">
<div class="card-header fw-bold d-flex justify-content-between">
<span><i class="fa-solid fa-shield-halved me-2"></i><?= _("Détail des Garanties") ?></span>
</div>
<div class="table-responsive">
<table class="table table-hover align-middle mb-0" style="font-size: 0.9rem;">
<thead class="table-light">
<tr>
<th class="text-center"><?= _("Exercice") ?></th>
<th><?= _("Garantie") ?></th>
<th class="text-end"><?= _("Limite Contrat") ?></th>
<th class="text-center">%</th>
<th class="text-end"><?= _("Limite Vigueur") ?></th>
<th class="text-end"><?= _("Conso.") ?></th>
<th class="text-end fw-bold"><?= _("Solde") ?></th>
<th class="text-center"><?= _("Par tête") ?></th>
<th><?= _("Parent") ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($garantieadherents as $garantieadherent): ?>
<tr>
<td class="text-center"><?= $this->nettoyer($garantieadherent['exercieReference'])?></td>
<td class="fw-bold"><?= $this->nettoyer($garantieadherent['garantie'])?></td>
<td class="text-end"><?= format_N($this->nettoyer($garantieadherent['plafondAnnuel'])) ?></td>
<td class="text-center text-muted"><?= $this->nettoyer($garantieadherent['tauxAvenant']) ?>%</td>
<td class="text-end"><?= format_N($this->nettoyer($garantieadherent['plafond'])) ?></td>
<td class="text-end text-danger"><?= format_N($this->nettoyer($garantieadherent['consommation'])) ?></td>
<td class="text-end fw-bold text-success"><?= format_N($this->nettoyer($garantieadherent['solde'])) ?></td>
<td class="text-center">
<input type="checkbox" class="form-check-input" <?= ($this->nettoyer($garantieadherent['champApplication'])=='1') ? 'checked' : '' ?> disabled>
</td>
<td class="small text-muted"><?= $this->nettoyer($garantieadherent['garantieparentaffichage'])?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</form>
<div class="card mt-1 shadow-sm">
<div class="card-header fw-bold d-flex justify-content-between">
<span><i class="fa-solid fa-shield-halved me-2"></i><?= _("Détail des Garanties") ?></span>
</div>
<div class="table-responsive">
<table class="table table-hover align-middle mb-0" style="font-size: 0.9rem;">
<thead class="table-light">
<tr>
<th class="text-center"><?= _("Exercice") ?></th>
<th><?= _("Garantie") ?></th>
<th class="text-end"><?= _("Limite Contrat") ?></th>
<th class="text-center">%</th>
<th class="text-end"><?= _("Limite Vigueur") ?></th>
<th class="text-end"><?= _("Conso.") ?></th>
<th class="text-end fw-bold"><?= _("Solde") ?></th>
<th class="text-center"><?= _("Par tête") ?></th>
<th><?= _("Parent") ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($garantieadherents as $garantieadherent): ?>
<tr>
<td class="text-center"><?= $this->nettoyer($garantieadherent['exercieReference'])?></td>
<td class="fw-bold"><?= $this->nettoyer($garantieadherent['garantie'])?></td>
<td class="text-end"><?= format_N($this->nettoyer($garantieadherent['plafondAnnuel'])) ?></td>
<td class="text-center text-muted"><?= $this->nettoyer($garantieadherent['tauxAvenant']) ?>%</td>
<td class="text-end"><?= format_N($this->nettoyer($garantieadherent['plafond'])) ?></td>
<td class="text-end text-danger"><?= format_N($this->nettoyer($garantieadherent['consommation'])) ?></td>
<td class="text-end fw-bold text-success"><?= format_N($this->nettoyer($garantieadherent['solde'])) ?></td>
<td class="text-center">
<input type="checkbox" class="form-check-input" <?= ($this->nettoyer($garantieadherent['champApplication'])=='1') ? 'checked' : '' ?> disabled>
</td>
<td class="small text-muted"><?= $this->nettoyer($garantieadherent['garantieparentaffichage'])?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</form>
<div class="container-fluid mt-1">
<div class="card border-0 shadow-sm">
<div class="card-body">
<form enctype="multipart/form-data" action="Fichebeneficiaire/<?= $_SESSION['idBeneficiaire_C'] ?>/" method="post" class="row align-items-center g-3">
<div class="col-md-5">
<label class="form-label fw-bold small text-uppercase">
<?= ($_SESSION['lienPhoto_C'] > " ") ? _("Remplacer la photo") : _("Nouvelle photo") ?>
</label>
<input type="hidden" name="MAX_FILE_SIZE" value="500000" /> <input class="form-control form-control-sm" name="fichier_image_a_uploader" type="file" id="fichier_image_a_uploader" />
</div>
<div class="col-md-3">
<button type="submit" name="submit" class="btn btn-primary btn-sm mt-4 w-100">
<i class="fa-solid fa-cloud-arrow-up me-1"></i> <?= _("Mettre à jour") ?>
</button>
</div>
<div class="col-md-4">
<?php if ($message > " "): ?>
<div class="alert <?= ($message == 'Chargement réussi !') ? 'alert-success' : 'alert-danger' ?> m-0 py-2 small">
<?= $message ?>
</div>
<?php else: ?>
<div class="text-muted small italic">
<i class="fa-solid fa-file-image me-1"></i>
<?= _("Fichier actuel") ?> : <?= $beneficiaire['lienPhoto'] ?>
</div>
<?php endif; ?>
</div>
</form>
</div>
</div>
</div>
<div class="container-fluid mt-1">
<div class="card border-0 shadow-sm">
<div class="card-body">
<form enctype="multipart/form-data" action="Fichebeneficiaire/<?= $_SESSION['idBeneficiaire_C'] ?>/" method="post" class="row align-items-center g-3">
<div class="col-md-5">
<label class="form-label fw-bold small text-uppercase">
<?= ($_SESSION['lienPhoto_C'] > " ") ? _("Remplacer la photo") : _("Nouvelle photo") ?>
</label>
<input type="hidden" name="MAX_FILE_SIZE" value="500000" /> <input class="form-control form-control-sm" name="fichier_image_a_uploader" type="file" id="fichier_image_a_uploader" />
</div>
<div class="col-md-3">
<button type="submit" name="submit" class="btn btn-primary btn-sm mt-4 w-100">
<i class="fa-solid fa-cloud-arrow-up me-1"></i> <?= _("Mettre à jour") ?>
</button>
</div>
<div class="col-md-4">
<?php if ($message > " "): ?>
<div class="alert <?= ($message == 'Chargement réussi !') ? 'alert-success' : 'alert-danger' ?> m-0 py-2 small">
<?= $message ?>
</div>
<?php else: ?>
<div class="text-muted small italic">
<i class="fa-solid fa-file-image me-1"></i>
<?= _("Fichier actuel") ?> : <?= $beneficiaire['lienPhoto'] ?>
</div>
<?php endif; ?>
</div>
</form>
</div>
</div>
</div>
<!-- Responsive Area Chart -->
<div class="row mt-4">
<div class="col-12 mb-4">
<div class="card shadow h-100">
<div class="card-header py-3 d-flex flex-column flex-md-row justify-content-between align-items-center">
<h6 class="m-0 font-weight-bold text-primary"><?= _("Dépenses mensuelles") ?></h6>
<div class="mt-2 mt-md-0">
<button type="button" id="exportTrendBtn" class="btn btn-sm btn-danger mr-2">
<i class="fas fa-download"></i> PDF
</button>
<small class="text-muted"><?= _("Évolution sur 12 mois") ?></small>
</div>
</div>
<div class="card-body">
<div class="chart-container" style="position: relative; height:300px; width:100%">
<canvas id="expenseTrendChart"></canvas>
</div>
</div>
</div>
</div>
</div>
<!-- Bar Chart Section -->
<div class="row mt-4">
<div class="col-12 mb-4">
<div class="card shadow h-100">
<div class="card-header py-3 d-flex justify-content-between align-items-center">
<h6 class="m-0 font-weight-bold text-primary"><?= _("Dépenses par garantie") ?></h6>
<button type="button" id="exportBarBtn" class="btn btn-sm btn-danger">
<i class="fas fa-download"></i> PDF
</button>
</div>
<div class="card-body">
<div class="chart-container" style="position: relative; height:400px; width:100%">
<canvas id="depensesChart"></canvas>
</div>
</div>
</div>
</div>
</div>
</div>
<?php include 'faceebene/ebenetraitementimage.php'; ?>

View File

@ -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.12.00" rel="stylesheet">
<link href="<?= $racineWeb ?>Bootstrap_new/css/style_office.css?ver=2026.01.12.01" rel="stylesheet">
<link href="<?= $racineWeb ?>Bootstrap_new/css/ux_enhancements.css?ver=2025.12.21.02" rel="stylesheet">
<!-- Charts -->