From 197f7390ef8ad1787aced9a167032a3c95e1dd8a Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Tue, 16 Jul 2019 11:33:19 +0200 Subject: [PATCH] Fix Fattura Elettronica --- modules/fatture/row-list.php | 6 ++--- modules/fatture/src/Fattura.php | 4 +-- plugins/exportFE/src/FatturaElettronica.php | 28 +++++++++++--------- plugins/importFE/src/FatturaOrdinaria.php | 6 ++++- plugins/importFE/src/FatturaSemplificata.php | 4 +++ 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php index 651048d2a..6460a8482 100644 --- a/modules/fatture/row-list.php +++ b/modules/fatture/row-list.php @@ -28,7 +28,7 @@ foreach ($righe as $row) { // Valori assoluti $riga['qta'] = abs($riga['qta']); $riga['prezzo_unitario_acquisto'] = abs($riga['prezzo_unitario_acquisto']); - $riga['imponibile_scontato'] = ($fattura->isNotaDiAccredito() ? -$row->imponibile_scontato : $row->imponibile_scontato); + $riga['imponibile_scontato'] = ($fattura->isNota() ? -$row->imponibile_scontato : $row->imponibile_scontato); $riga['sconto_unitario'] = abs($riga['sconto_unitario']); $riga['sconto'] = abs($riga['sconto']); $riga['iva'] = abs($riga['iva']); @@ -136,7 +136,7 @@ foreach ($righe as $row) { } // Aggiunta dei riferimenti ai documenti - if ($fattura->isNotaDiAccredito()) { + if ($fattura->isNota() && !empty($record['ref_documento'])) { $data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM co_documenti WHERE id = ".prepare($record['ref_documento'])); $text = tr('Rif. fattura _NUM_ del _DATE_', [ @@ -254,7 +254,7 @@ foreach ($righe as $row) { echo "
"; - if (!$fattura->isNotaDiAccredito() && $row->isArticolo() && $riga['abilita_serial'] && (empty($riga['idddt']) || empty($riga['idintervento']))) { + if (!$fattura->isNota() && $row->isArticolo() && $riga['abilita_serial'] && (empty($riga['idddt']) || empty($riga['idintervento']))) { echo " fileurl('add_serial.php').'?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$riga['id'].'&idarticolo='.$riga['idarticolo']."', 1 );\">"; } diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php index 4405fb006..12d8bb819 100644 --- a/modules/fatture/src/Fattura.php +++ b/modules/fatture/src/Fattura.php @@ -326,8 +326,8 @@ class Fattura extends Document $direzione = $this->tipo->dir; foreach ($rate as $rata) { - $importo = $direzione == 'uscita' ? -$rata['importo'] : $rata['importo']; $scadenza = $rata['scadenza']; + $importo = $direzione == 'uscita' ? -$rata['importo'] : $rata['importo']; self::registraScadenza($this, $importo, $scadenza, $is_pagato); } @@ -443,7 +443,7 @@ class Fattura extends Document * * @return bool */ - public function isNotaDiAccredito() + public function isNota() { return $this->tipo->reversed == 1; } diff --git a/plugins/exportFE/src/FatturaElettronica.php b/plugins/exportFE/src/FatturaElettronica.php index 268c32bd6..e9e0dbacf 100644 --- a/plugins/exportFE/src/FatturaElettronica.php +++ b/plugins/exportFE/src/FatturaElettronica.php @@ -992,11 +992,9 @@ class FatturaElettronica $aliquota = $riga->aliquota ?: $iva_descrizioni; $percentuale = floatval($aliquota->percentuale); - if ($documento->isNotaDiAccredito()) { - $dettaglio['PrezzoTotale'] = -$riga->imponibile_scontato ?: 0; - } else { - $dettaglio['PrezzoTotale'] = $riga->imponibile_scontato ?: 0; - } + $prezzo_totale = $documento->isNota() ? -$riga->imponibile_scontato : $riga->imponibile_scontato; + $dettaglio['PrezzoTotale'] = $prezzo_totale; + $dettaglio['AliquotaIVA'] = $percentuale; if (!empty($riga['idritenutaacconto']) && empty($riga['is_descrizione'])) { @@ -1036,16 +1034,18 @@ class FatturaElettronica return $item->aliquota->percentuale; }); foreach ($riepiloghi_percentuale as $riepilogo) { - //(imponibile-sconto) + rivalsa inps - $totale = round(($riepilogo->sum('imponibile') - $riepilogo->sum('sconto')) + $riepilogo->sum('rivalsa_inps'), 2); + $totale = round($riepilogo->sum('imponibile_scontato') + $riepilogo->sum('rivalsa_inps'), 2); $imposta = round($riepilogo->sum('iva') + $riepilogo->sum('iva_rivalsa_inps'), 2); + $totale = $documento->isNota() ? -$totale : $totale; + $imposta = $documento->isNota() ? -$imposta : $imposta; + $dati = $riepilogo->first()->aliquota; $iva = [ 'AliquotaIVA' => $dati['percentuale'], - 'ImponibileImporto' => abs($totale), - 'Imposta' => abs($imposta), + 'ImponibileImporto' => $totale, + 'Imposta' => $imposta, 'EsigibilitaIVA' => $dati['esigibilita'], ]; @@ -1073,17 +1073,19 @@ class FatturaElettronica return $item->aliquota->codice_natura_fe; }); foreach ($riepiloghi_natura as $riepilogo) { - //(imponibile-sconto) + rivalsa inps - $totale = round(($riepilogo->sum('imponibile') - $riepilogo->sum('sconto')) + $riepilogo->sum('rivalsa_inps'), 2); + $totale = round($riepilogo->sum('imponibile_scontato') + $riepilogo->sum('rivalsa_inps'), 2); $imposta = round($riepilogo->sum('iva') + $riepilogo->sum('iva_rivalsa_inps'), 2); + $totale = $documento->isNota() ? -$totale : $totale; + $imposta = $documento->isNota() ? -$imposta : $imposta; + $dati = $riepilogo->first()->aliquota; $iva = [ 'AliquotaIVA' => 0, 'Natura' => $dati->codice_natura_fe, - 'ImponibileImporto' => abs($totale), - 'Imposta' => abs($imposta), + 'ImponibileImporto' => $totale, + 'Imposta' => $imposta, 'EsigibilitaIVA' => $dati->esigibilita, 'RiferimentoNormativo' => $dati->descrizione, ]; diff --git a/plugins/importFE/src/FatturaOrdinaria.php b/plugins/importFE/src/FatturaOrdinaria.php index b5558dfe8..1ed4a3881 100644 --- a/plugins/importFE/src/FatturaOrdinaria.php +++ b/plugins/importFE/src/FatturaOrdinaria.php @@ -115,6 +115,10 @@ class FatturaOrdinaria extends FatturaElettronica $qta = $riga['Quantita'] ?: 1; $qta = $riga['PrezzoUnitario'] < 0 ? -$qta : $qta; + if ($fattura->isNota()) { + $qta = -$qta; + } + // Prezzo e quantità $obj->prezzo_unitario_vendita = $prezzo; $obj->qta = $qta; @@ -172,7 +176,7 @@ class FatturaOrdinaria extends FatturaElettronica $dati_generali = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento']; $totale_documento = $dati_generali['ImportoTotaleDocumento']; - $diff = $totale_documento ? floatval($totale_documento) - $fattura->totale : $totale_righe - $fattura->imponibile_scontato; + $diff = $totale_documento ? floatval($totale_documento) - abs($fattura->totale) : $totale_righe - abs($fattura->imponibile_scontato); if (!empty($diff)) { // Rimozione dell'IVA calcolata automaticamente dal gestionale $iva_arrotondamento = database()->fetchOne('SELECT * FROM co_iva WHERE id='.prepare($iva[0])); diff --git a/plugins/importFE/src/FatturaSemplificata.php b/plugins/importFE/src/FatturaSemplificata.php index ebf1fd51c..a3158acaf 100644 --- a/plugins/importFE/src/FatturaSemplificata.php +++ b/plugins/importFE/src/FatturaSemplificata.php @@ -111,6 +111,10 @@ class FatturaSemplificata extends FatturaElettronica $qta = 1; $qta = $riga['Importo'] < 0 ? -$qta : $qta; + if ($fattura->isNota()) { + $qta = -$qta; + } + // Prezzo e quantità $obj->prezzo_unitario_vendita = $prezzo; $obj->qta = $qta;