From 398f411773b12941667b9cdd953aba0c4c2eb6c5 Mon Sep 17 00:00:00 2001 From: Tolotsoa Date: Fri, 19 Sep 2025 15:36:34 +0300 Subject: [PATCH] fix correction fec DV --- gestion/lib/Controller/PageController.php | 61 +++++++---------------- gestion/lib/Db/Bdd.php | 53 ++++++++++++-------- 2 files changed, 51 insertions(+), 63 deletions(-) diff --git a/gestion/lib/Controller/PageController.php b/gestion/lib/Controller/PageController.php index aa0c9f4..6257d9a 100644 --- a/gestion/lib/Controller/PageController.php +++ b/gestion/lib/Controller/PageController.php @@ -2279,9 +2279,7 @@ class PageController extends Controller private function refreshFEC() { - $current_config = json_decode($this->myDb->getConfiguration($this->idNextcloud)); - $clean_folder = html_entity_decode($current_config[0]->path).'/'; try { @@ -2292,6 +2290,11 @@ class PageController extends Controller foreach ($factures as $key => $facture) { $factureIsSingle = $facture->facture_type == FactureTypeConstant::TYPE_SINGLE; + // Logique TVA : si tva = 0 alors 0%, si tva = 1 alors taux par défaut + $tva_rate = 0; // Par défaut + if (isset($facture->tva) && $facture->tva == 1) { + $tva_rate = isset($current_config[0]->tva_default) ? floatval($current_config[0]->tva_default) : 0; + } $facture_temp = array( 'num' => $facture->num, @@ -2301,41 +2304,27 @@ class PageController extends Controller 'date_facture' => $facture->date_paiement, 'defunt' => $facture->nom_defunt, 'montant_htc' => 0, - 'tva' => $current_config[0]->tva_default, + 'tva' => $tva_rate, // Utiliser le taux calculé 'montant_tva' => 0, 'montant_ttc' => 0, ); if($factureIsSingle) { - - - - - - - - - $produits = json_decode($this->getProduitsById($facture->id_devis)); foreach ($produits as $key => $produit) { - $htPrice = $produit->prix_unitaire; + $htPrice = isset($produit->prix_unitaire) ? floatval($produit->prix_unitaire) : 0; 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; + $htPrice = floatval($price); } } - $facture_temp['montant_htc'] += $htPrice * $produit->quantite; + $quantite = isset($produit->quantite) ? floatval($produit->quantite) : 0; + $facture_temp['montant_htc'] += $htPrice * $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 { - - - $devis = $this->myDb->getDevisByFkFactureId($facture->id); $factureGroupIsRelatedToAnyDevis = $devis != null; $mentionFilters = [ @@ -2343,7 +2332,6 @@ class PageController extends Controller DevisMentionConstant::FACTURED_FORMATTED ]; - $isFactureGroupForSingleClient = $facture->facture_client_id != null && $facture->facture_client_id != 0; if($isFactureGroupForSingleClient) { $facture_temp["client"] = $facture->facture_client_entreprise; @@ -2379,29 +2367,17 @@ class PageController extends Controller } foreach($devisList as $currentDevis) { - - - - - - - - $produits = json_decode($this->getProduitsById($currentDevis['id'])); foreach ($produits as $key => $produit) { - $htPrice = $produit->prix_unitaire; + $htPrice = isset($produit->prix_unitaire) ? floatval($produit->prix_unitaire) : 0; 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; + $htPrice = floatval($price); } } - $facture_temp['montant_htc'] += $htPrice * $produit->quantite; - - - - - + $quantite = isset($produit->quantite) ? floatval($produit->quantite) : 0; + $facture_temp['montant_htc'] += $htPrice * $quantite; }; } $facture_temp['montant_tva'] = ($facture_temp['montant_htc'] * $facture_temp['tva']) / 100; @@ -2410,6 +2386,7 @@ class PageController extends Controller array_push($data_factures, $facture_temp); }; + $data_temp = array(); foreach ($data_factures as $key => $facture) { $datesplit = explode('-', $facture['date_facture']); @@ -2423,7 +2400,7 @@ class PageController extends Controller } } } - // var_dump($data_temp); + //parcours annee foreach ($data_temp as $key_annee => $annee) { //parcours annee @@ -2435,8 +2412,8 @@ class PageController extends Controller foreach ($annee as $key_mois => $mois) { $fec_temp_txt = 'Code journal'.TAB1.utf8_decode('Date écriture').TAB1.'Code compte'.TAB1.utf8_decode('Intitulé compte').TAB1.utf8_decode('Pièce').TAB1.utf8_decode('Libellé écriture').TAB1.utf8_decode('Débit origine').TAB1.utf8_decode('Crédit origine').TAB1.utf8_decode('Débit euro').TAB1.utf8_decode('Crédit euro').TAB1.'Lettrage'.TAB1.'Lettrage n+1'.TAB1.'Lettrage partiel'.TAB1.'Monnaie'.TAB1.'ISO Monnaie'.TAB1.'taux change'.TAB1.'Section analytique 1'.TAB1.'Section analytique 2'.TAB1.'Section analytique 3'.PHP_EOL.PHP_EOL; - // $fec_temp = 'NUMERO'.';'.'CLIENT'.';'.'DEFUNT'.';'.'DATE'.';'.'MONTANTHTC'.';'.'TVA'.';'.'MONTANTTVA'.';'.'MONTANTTTC'."\n"; $fec_temp = 'Code journal'.';'.utf8_decode('Date écriture').';'.'Code compte'.';'.utf8_decode('Intitulé compte').';'.utf8_decode('Pièce').';'.utf8_decode('Libellé écriture').';'.utf8_decode('Débit origine').';'.utf8_decode('Crédit origine').';'.utf8_decode('Débit euro').';'.utf8_decode('Crédit euro').';'.'Lettrage'.';'.'Lettrage n+1'.';'.'Lettrage partiel'.';'.'Monnaie'.';'.'ISO Monnaie'.';'.'taux change'.';'.'Section analytique 1'.';'.'Section analytique 2'.';'.'Section analytique 3'."\n\n"; + foreach ($mois as $key => $facture) { $fec_temp_txt = $fec_temp_txt.'VT'.TAB1.$facture['date_facture'].TAB1.$facture['client'].TAB1.$facture['client'].TAB1.$facture['num'].TAB1.$facture['nom_client'].TAB1.$facture['montant_ttc'].TAB1.'0'.TAB1.$facture['montant_htc'].TAB1.'0'.TAB1.''.TAB1.'FAUX'.TAB1.'FAUX'.TAB1.'E'.TAB1.''.TAB1.'1'.TAB1.''.TAB1.''.TAB1.''.PHP_EOL.PHP_EOL; $fec_temp_txt = $fec_temp_txt.'VT'.TAB1.$facture['date_facture'].TAB1.'706000'.TAB1.'VENTES DE MARCHANDISES'.TAB1.$facture['num'].TAB1.$facture['client'].TAB1.'0'.TAB1.$facture['montant_htc'].TAB1.'0'.TAB1.$facture['montant_htc'].TAB1.''.TAB1.'FAUX'.TAB1.'FAUX'.TAB1.'E'.TAB1.''.TAB1.'1'.TAB1.''.TAB1.''.TAB1.''.PHP_EOL.PHP_EOL; @@ -2446,6 +2423,7 @@ class PageController extends Controller $fec_temp = $fec_temp.'VT'.';'.$facture['date_facture'].';706000;VENTES DE MARCHANDISES;'.$facture['num'].';'.$facture['client'].';0;'.$facture['montant_htc'].';0;'.$facture['montant_htc'].';'.''.';'.'FAUX'.';'.'FAUX'.';'.'E'.';'.''.';'.'1'.';'.''.';'.''.';'.''."\n\n"; $fec_temp = $fec_temp.'VT'.';'.$facture['date_facture'].';445710;;'.$facture['num'].';'.$facture['client'].';;'.$facture['montant_tva'].';;'.$facture['montant_tva'].";;;;;;;;;\n\n"; } + $ff = $_clean_folder.'FEC_'.$key_mois.'_'.$key_annee.'.csv'; $this->storage->newFile($ff); $file = $this->storage->get($ff); @@ -2455,19 +2433,16 @@ class PageController extends Controller $this->storage->newFile($ff_txt); $file_txt = $this->storage->get($ff_txt); $file_txt->putContent($fec_temp_txt); - // $file->putContent(implode(';', array('Jane Smith', 'janesmith@example.com', '555-5678')) . "\n"); } } } catch(\OCP\Files\NotFoundException $e) { } - } catch(\OCP\Files\NotPermittedException $e) { } } - private function signatureImageExists(string $signatureImageName) { diff --git a/gestion/lib/Db/Bdd.php b/gestion/lib/Db/Bdd.php index 2cf2c1c..3ce0b79 100644 --- a/gestion/lib/Db/Bdd.php +++ b/gestion/lib/Db/Bdd.php @@ -488,6 +488,15 @@ class Bdd client.adresse as adresse_cli,client.mail as mail_cli, client.telephone as telephone_cli,client.legal_one as legalone_cli, client.fk_client_group_id as fk_client_group_id, + + COALESCE( + client.is_tva, + CASE + WHEN facture.fk_client_group_facturation_id IS NOT NULL THEN client_group_tva.is_tva + ELSE facture_client.is_tva + END + ) as tva, + defunt.id as id_defunt, defunt.nom as nom_defunt, lieu.id as lid, @@ -502,6 +511,7 @@ class Bdd LEFT JOIN ".$this->tableprefix."facture_status as facture_status on facture.fk_facture_status_key = facture_status.facture_status_key LEFT JOIN ".$this->tableprefix."client as facture_client on facture.fk_client_id = facture_client.id LEFT JOIN ".$this->tableprefix."client_group_facturation as facture_client_group_facturation on facture.fk_client_group_facturation_id = facture_client_group_facturation.id + LEFT JOIN ".$this->tableprefix."client as client_group_tva on facture.fk_client_group_facturation_id = client_group_tva.fk_client_group_facturation_id ORDER BY facture.id DESC, facture.date_paiement DESC"; $result = $this->execSQL($sql, array()); return $result; @@ -5510,21 +5520,22 @@ COMMENTAIRES: ".$comment; return $devisList; } - public function getDevisIdsGroupByFactureId($factureId,$mentionFilters = []){ + public function getDevisIdsGroupByFactureId($factureId, $mentionFilters = []) + { $sql = "SELECT devis.id FROM ".$this->tableprefix."devis as devis WHERE devis.fk_facture_id = ? "; $conditions = [$factureId]; - if(!empty($mentionFilters)){ + if(!empty($mentionFilters)) { $mentionsFilterPlaceholders = implode(',', array_fill(0, count($mentionFilters), '?')); $sql .= " AND devis.mentions IN ($mentionsFilterPlaceholders)"; $conditions = array_merge($conditions, $mentionFilters); } - $sql.= ";"; - $devisList = $this->execSQLNoJsonReturn($sql,$conditions); + $sql .= ";"; + $devisList = $this->execSQLNoJsonReturn($sql, $conditions); $devisIds = []; - foreach($devisList as $devis){ + foreach($devisList as $devis) { $devisIds[] = $devis['id']; } return $devisIds; @@ -6093,7 +6104,7 @@ COMMENTAIRES: ".$comment; private function getProductsTotalPrices($products) { $configs = json_decode($this->getConfiguration(BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD)); - $currentConfig = $configs[0]; + $currentConfig = $configs[0]; $totalHt = 0; $totalTtc = 0; foreach ($products as $product) { @@ -6109,11 +6120,12 @@ COMMENTAIRES: ".$comment; ]; } - private function getDevisIdsListByFactureId($factureId){ + private function getDevisIdsListByFactureId($factureId) + { $factureData = $this->getFactureByFactureId(factureId: $factureId); $isFactureGroupOfDevis = $factureData["facture_type"] == FactureTypeConstant::TYPE_GROUP; $factureDevisIdsList = []; - if($isFactureGroupOfDevis){ + if($isFactureGroupOfDevis) { $isFactureForSingleClient = $factureData['fk_client_id'] != null && $factureData['fk_client_id'] != 0; $devisMentionFilters = [ DevisMentionConstant::FACTURED_FORMATTED, @@ -6122,24 +6134,25 @@ COMMENTAIRES: ".$comment; $devis = $this->getDevisByFkFactureId($factureId); $factureGroupIsRelatedToAnyDevis = $devis != null; if (!$factureGroupIsRelatedToAnyDevis) { - if($isFactureForSingleClient){ + if($isFactureForSingleClient) { $factureDevisIdsList = $this->getDevisIdsByClientIdAndMonthYear( $factureData['fk_client_id'], $factureData['month'], - $factureData['year'],$devisMentionFilters + $factureData['year'], + $devisMentionFilters ); - }else{ + } else { $factureDevisIdsList = $this->getDevisIdsByClientGroupFacturationIdAndMonthYear( $factureData['fk_client_group_facturation_id'], - $factureData['month'], - $factureData['year'],$devisMentionFilters - ); + $factureData['month'], + $factureData['year'], + $devisMentionFilters + ); } - }else{ - $factureDevisIdsList = $this->getDevisIdsGroupByFactureId($factureId, $devisMentionFilters ); + } else { + $factureDevisIdsList = $this->getDevisIdsGroupByFactureId($factureId, $devisMentionFilters); } - } - else{ + } else { $factureDevisIdsList = $factureData['id_devis'] ? [$factureData['id_devis']] : []; } return $factureDevisIdsList; @@ -6151,8 +6164,8 @@ COMMENTAIRES: ".$comment; $totalHt = 0; $totalTtc = 0; $tva = 0; - foreach($factureDevisIds as $devisId){ - $clientTvaStatus = $this->getClientTvaStatus($devisId,BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD); + foreach($factureDevisIds as $devisId) { + $clientTvaStatus = $this->getClientTvaStatus($devisId, BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD); $products = $this->getDevisProduits($devisId); $totalPrices = $this->getProductsTotalPrices($products); $totalHt += $totalPrices["total_ht"];