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 */
@ -1432,3 +1446,19 @@ li i { margin-right:10px; color:#007bff; }
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

@ -203,8 +203,34 @@ class ControleurFichebeneficiaire extends Controleur
$limite_adherent = $this->garantieadherent->getLimitesAdherent($idAdherent);
$this->genererVue(array('beneficiaire' => $beneficiaire, 'message' => $message, 'nouveau_fichier' => $nouveau_fichier,
'garantieadherents' => $garantieadherents, 'limite_beneficiaire' => $limite_beneficiaire, 'limite_adherent' => $limite_adherent));
$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,
'dataConsoParMois' => $dataConsoParMois,
'dataConsoParGaranties' => $dataConsoParGaranties
));
}
public function supprimer() {

View File

@ -1645,4 +1645,17 @@ 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,7 +88,7 @@
</h5>
</div>
<form name="formfichebeneficiaire" id="formfichebeneficiaire" method="POST" class="container-fluid py-3">
<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">
@ -293,9 +293,9 @@
</table>
</div>
</div>
</form>
</form>
<div class="container-fluid mt-1">
<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">
@ -325,6 +325,48 @@
</form>
</div>
</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 -->