From eec83c2cc6143cc3fc3b5608a1a6a01a9d78075c Mon Sep 17 00:00:00 2001 From: Tiavina Date: Mon, 17 Mar 2025 16:13:36 +0300 Subject: [PATCH] fix FEC hytha --- gestion/lib/Controller/PageController.php | 71 +++++++++++++++++++---- gestion/lib/Db/Bdd.php | 51 +++++++++++++++- 2 files changed, 108 insertions(+), 14 deletions(-) diff --git a/gestion/lib/Controller/PageController.php b/gestion/lib/Controller/PageController.php index a9f011e..5f22398 100644 --- a/gestion/lib/Controller/PageController.php +++ b/gestion/lib/Controller/PageController.php @@ -1760,8 +1760,9 @@ class PageController extends Controller { try { try { $data_factures = array(); - $factures = json_decode($this->myDb->getFactures($this->idNextcloud)); + $factures = json_decode($this->myDb->getFacturesListWithDependencies()); foreach ($factures as $key => $facture) { + $factureIsSingle = $facture->facture_type == FactureTypeConstant::TYPE_SINGLE; $facture_temp = array( 'num' => $facture->num, 'client' => $facture->entreprise, @@ -1774,19 +1775,65 @@ class PageController extends Controller { 'montant_tva' => 0, 'montant_ttc' => 0, ); - $produits = json_decode($this->getProduitsById($facture->id_devis)); - foreach ($produits as $key => $produit) { - $htPrice = $produit->prix_unitaire; - if($facture->fk_client_group_id != null || $facture->fk_client_group_id != 0){ - $price = $this->myDb->getProductPriceByClientGroupId($facture->fk_client_group_id,$produit->id); - if($price != null){ - $htPrice = $price; + if($factureIsSingle){ + $produits = json_decode($this->getProduitsById($facture->id_devis)); + foreach ($produits as $key => $produit) { + $htPrice = $produit->prix_unitaire; + if($facture->fk_client_group_id != null || $facture->fk_client_group_id != 0){ + $price = $this->myDb->getProductPriceByClientGroupId($facture->fk_client_group_id,$produit->id); + if($price != null){ + $htPrice = $price; + } } + $facture_temp['montant_htc'] += $htPrice * $produit->quantite; + }; + $facture_temp['montant_tva'] = ($facture_temp['montant_htc'] * $facture_temp['tva'])/100; + $facture_temp['montant_ttc'] = $facture_temp['montant_tva'] + $facture_temp['montant_htc']; + } + else{ + $isFactureGroupForSingleClient = $facture->facture_client_id != null && $facture->facture_client_id != 0; + if($isFactureGroupForSingleClient){ + $facture_temp["client"] = $facture->facture_client_entreprise; + $facture_temp["nom_client"] = $facture->facture_client_name; + $devisList = $this->myDb->getDevisByClientIdAndMonthYear( + $facture->facture_client_id, + $facture->facture_month, + $facture->facture_year, + [ + DevisMentionConstant::FACTURED, + DevisMentionConstant::FACTURED_FORMATTED + ] + ); } - $facture_temp['montant_htc'] += $htPrice * $produit->quantite; - }; - $facture_temp['montant_tva'] = ($facture_temp['montant_htc'] * $facture_temp['tva'])/100; - $facture_temp['montant_ttc'] = $facture_temp['montant_tva'] + $facture_temp['montant_htc']; + else{ + $facture_temp["client"] = $facture->facture_group_name; + $facture_temp["nom_client"] = $facture->facture_group_name; + $devisList = $this->myDb->getDevisByClientGroupFacturationIdAndMonthYear( + $facture->facture_client_group_facturation_id, + $facture->facture_month, + $facture->facture_year, + [ + DevisMentionConstant::FACTURED, + DevisMentionConstant::FACTURED_FORMATTED + ] + ); + } + foreach($devisList as $currentDevis){ + $produits = json_decode($this->getProduitsById($currentDevis['id'])); + foreach ($produits as $key => $produit) { + $htPrice = $produit->prix_unitaire; + if($currentDevis["fk_client_group_id"] != null || $currentDevis["fk_client_group_id"] != 0){ + $price = $this->myDb->getProductPriceByClientGroupId($currentDevis["fk_client_group_id"],$produit->id); + if($price != null){ + $htPrice = $price; + } + } + $facture_temp['montant_htc'] += $htPrice * $produit->quantite; + }; + } + $facture_temp['montant_tva'] = ($facture_temp['montant_htc'] * $facture_temp['tva'])/100; + $facture_temp['montant_ttc'] = $facture_temp['montant_tva'] + $facture_temp['montant_htc']; + } array_push($data_factures, $facture_temp); }; diff --git a/gestion/lib/Db/Bdd.php b/gestion/lib/Db/Bdd.php index 609c3a4..5dce10e 100644 --- a/gestion/lib/Db/Bdd.php +++ b/gestion/lib/Db/Bdd.php @@ -365,13 +365,17 @@ class Bdd { facture.fk_client_group_facturation_id as facture_client_group_facturation_id, facture.date_paiement, facture.type_paiement, - facture.id_devis, + facture.id_devis, facture.version, facture.status_paiement, facture_client.nom as facture_client_name, + facture_client.entreprise as facture_client_entreprise, + facture_client.fk_client_group_id as facture_client_group_id, facture_client_group_facturation.group_facturation_name as facture_group_name, facture.document_generated_date as facture_document_generated_date, facture.document_sent_date as facture_document_sent_date, + facture.month as facture_month, + facture.year as facture_year, devis.num as dnum, devis.comment as dcomment, client.entreprise, @@ -4312,6 +4316,28 @@ COMMENTAIRES: ".$comment; return FactureTypeConstant::TYPE_SINGLE; } + public function getDevisByClientGroupFacturationIdAndMonthYear($clientGroupFacturationId,$month,$year,$mentionsFilters = []){ + $sql = "SELECT devis.id ,devis.id_client,client.fk_client_group_id + FROM ".$this->tableprefix."devis as devis + LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id + WHERE + client.fk_client_group_facturation_id = ? AND + YEAR(devis.date) = ? AND + MONTH(devis.date) = ? + "; + + $conditions = [$clientGroupFacturationId,$year,$month]; + if(!empty($mentionFilters)){ + $mentionsFilterPlaceholders = implode(',', array_fill(0, count($mentionFilters), '?')); + $sql .= " AND ". $this->tableprefix."devis.mentions IN ($mentionsFilterPlaceholders)"; + $conditions = array_merge($conditions, $mentionFilters); + } + $sql.= ";"; + $result = $this->execSQLNoJsonReturn($sql,$conditions); + + return $result; + } + public function getDevisIdsByClientGroupFacturationIdAndMonthYear($clientGroupFacturationId,$month,$year,$mentionFilters = []){ $sql = "SELECT devis.id FROM ".$this->tableprefix."devis as devis @@ -4338,8 +4364,29 @@ COMMENTAIRES: ".$comment; return $devisIds; } + public function getDevisByClientIdAndMonthYear($clientId,$month,$year,$mentionFilters = []){ + $sql = "SELECT devis.id,devis.id_client,client.fk_client_group_id + FROM ".$this->tableprefix."devis as devis + LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id + WHERE + client.id = ? AND + YEAR(devis.date) = ? AND + MONTH(devis.date) = ?"; + + $conditions = [$clientId,$year,$month]; + if(!empty($mentionFilters)){ + $mentionsFilterPlaceholders = implode(',', array_fill(0, count($mentionFilters), '?')); + $sql .= " AND devis.mentions IN ($mentionsFilterPlaceholders)"; + $conditions = array_merge($conditions, $mentionFilters); + } + $sql.= ";"; + $result = $this->execSQLNoJsonReturn($sql,$conditions); + + return $result; + } + public function getDevisIdsByClientIdAndMonthYear($clientId,$month,$year,$mentionFilters = []){ - $sql = "SELECT devis.id + $sql = "SELECT devis.id,devis.id_client,client.fk_client_group_id FROM ".$this->tableprefix."devis as devis LEFT JOIN ".$this->tableprefix."client as client on devis.id_client = client.id WHERE