fix correction fec DV

This commit is contained in:
Tolotsoa 2025-09-19 15:36:34 +03:00
parent bd62810b7b
commit 398f411773
2 changed files with 51 additions and 63 deletions

View File

@ -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)
{

View File

@ -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;
@ -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['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"];