Je viens de remarquer que la requête SQL que vous avez proposé répond parfaitement bien. je faisais la même chose sauf que chez moi le montant total se trouvait dans la table paiement, et jobtenais le même résultat. jusque là nous sommes sur le même chemin, mais si je fais référence au tableau que j'ai proposé ci-haut, j'avais du mal à afficher le résultat de telle sorte que s'il y a une facture payée à moitié (par exemple: pour une facture de 50$, 25$ a été payé cash et reste 25$) et une autre facture dont le client n'a pas encore payé même 1$ (par exemple : 100$), normalement le solde doit devenir 125$ puisque le systeme doit calculer 25$ + 100$.
mais dans le code php, j'avais du mal à le faire, et après plusieurs reflexion, je suis arrivé à trouver une solution que je n'estime pas meilleure mais qui répond quand même à ma préoccupation.
voici le code php:
Cette 1ère requête me permet de récupérer toutes les factures qui n'ont pas encore été payées
$sql1 = "SELECT
facture.fac_code AS code,
facture.fac_mont AS montant_fact,
client.nom_complet AS Nom_complet,
article.nom AS nom_artile
FROM
facture
JOIN client ON facture.id_client = client.id_client
JOIN article ON facture.id_art = article.id_art
JOIN client ON facture.id_client = client.id_client
WHERE
facture.periode = :periode ";
Cette 2ème requête me permet de récupérer toutes les factures qui sont payées soit par acompte ou par paiement total de la facture
$sql2 = "SELECT
facture.fac_code AS numero,
facture.fac_mont AS montant_facture,
SUM(paiement.pai_mont_cash) AS montant_cash,
facture.fac_mont - SUM(paiement.pai_mont_cash) AS solde
FROM paiement
JOIN facture ON paiement.fac_code = facture.fac_code
JOIN client ON facture.id_client = client.id_client
JOIN article ON facture.id_art = article.id_art
WHERE
facture.fac_libelle = :libelle AND
client.id_client = :id
GROUP BY facture.fac_code";
Ensuite, l'idée est d'avoir une table html qui va afficher la liste des factures qui ne sont pas encore payées et puis on doit avoir un bouton de paiement sur chaque ligne qui va valider un paiement en cas de nécessité
voici le code :
<table class="table" >
<thead class="table-primary">
<tr>
<th scope="col" >Fact n°</th>
<th scope="col" >Client</th>
<th scope="col" >Article</th>
<th scope="col" >Montant</th>
</tr>
<tbody>
<?php
$params1 = [];
$params2 = [];
$periode = "2025";
$libelle = "Ouvert";
$id = 1;
$pdo = $this->connect();//connexion bdd
$stmt1 = $pdo->prepare($sql1);
$stmt2 = $pdo->prepare($sql2);
$params1['periode'] = $periode;
$params2['libelle'] = $libelle;
$params2['id'] = $id;
$stmt1->execute($params1);
$rows = $stmt1->fetchAll(PDO::FETCH_OBJ);
$stmt2->execute($params2);
$data = $stmt1->fetchAll(PDO::FETCH_OBJ);
if(!empty($rows)):
foreach($rows AS $row):
if(!empty($data)):
foreach($data AS $dt):
$numero = $dt->numero;
$montant_cash = $dt->montant_cash;
endforeach;
else:
$numero = 0;
$montant_cash = 0;
endif;
?>
<tr>
<td><?= $row->code ?></td>
<td><?= $row->Nom_complet ?></td>
<td><?= $row->nom_artile ?></td>
<td id="calcul_sommes">
<?php
if($row->code == $numero): echo $row->montant_fact - $montant_cash; else: echo $row->montant_fact; endif;
//avec cette condition, je peux obtenir le solde de chaque facture, et c'était mon premier souci
?>
</td>
</tr>
<?php
endforeach;
endif;
?>
</tbody>
</table>
Bien que ce petit script fonctionne comme je souhaitais, mais je sollicite une idée qui peut faire mieux que ça, néanmoins, mon souci
reste de trouver le total de tous les soldes de facture payées à moitié ou de facture non encore payées. Je sais qu'avec JS c'est possible de trouver la solution
mais je suis encore bloqué. Mon souhait est de faire la sommes d'une manière dynamique de tous les montant affichés dans laa colonne montant du tableau et c'est cette somme qui sera affichée comme la dette que doit encore le client. Je vous prie de me guider, je suis bloqué