From 36afe8dc0e79940066136d467b29282499ca9c63 Mon Sep 17 00:00:00 2001 From: Dasc3er Date: Fri, 13 Nov 2020 16:12:29 +0100 Subject: [PATCH] Correzioni per gestione totale a zero di Fattura --- modules/fatture/actions.php | 37 +++++++++++--------- modules/fatture/buttons.php | 18 +++++++--- modules/fatture/edit.php | 2 +- modules/scadenzario/edit.php | 20 ++++++----- plugins/importFE/src/FatturaSemplificata.php | 3 -- 5 files changed, 46 insertions(+), 34 deletions(-) diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 59c6febfc..c52d29c82 100755 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -210,34 +210,37 @@ switch (post('op')) { // Ricalcolo scadenze case 'controlla_totali': + $totale_documento = null; + try { $xml = XML::read($fattura->getXML()); // Totale basato sul campo ImportoTotaleDocumento $dati_generali = $xml['FatturaElettronicaBody']['DatiGenerali']['DatiGeneraliDocumento']; - $totale_documento_indicato = abs(floatval($dati_generali['ImportoTotaleDocumento'])); + if (isset($dati_generali['ImportoTotaleDocumento'])) { + $totale_documento_indicato = abs(floatval($dati_generali['ImportoTotaleDocumento'])); - // Calcolo del totale basato sui DatiRiepilogo - if (empty($totale_documento) && empty($dati_generali['ScontoMaggiorazione'])) { - $totale_documento = 0; + // Calcolo del totale basato sui DatiRiepilogo + if (empty($totale_documento) && empty($dati_generali['ScontoMaggiorazione'])) { + $totale_documento = 0; - $riepiloghi = $xml['FatturaElettronicaBody']['DatiBeniServizi']['DatiRiepilogo']; - if (!empty($riepiloghi) && !isset($riepiloghi[0])) { - $riepiloghi = [$riepiloghi]; + $riepiloghi = $xml['FatturaElettronicaBody']['DatiBeniServizi']['DatiRiepilogo']; + if (!empty($riepiloghi) && !isset($riepiloghi[0])) { + $riepiloghi = [$riepiloghi]; + } + + foreach ($riepiloghi as $riepilogo) { + $totale_documento = sum([$totale_documento, $riepilogo['ImponibileImporto'], $riepilogo['Imposta']]); + } + + $totale_documento = abs($totale_documento); + } else { + $totale_documento = $totale_documento_indicato; } - foreach ($riepiloghi as $riepilogo) { - $totale_documento = sum([$totale_documento, $riepilogo['ImponibileImporto'], $riepilogo['Imposta']]); - } - - $totale_documento = abs($totale_documento); - } else { - $totale_documento = $totale_documento_indicato; + $totale_documento = $fattura->isNota() ? -$totale_documento : $totale_documento; } - - $totale_documento = $fattura->isNota() ? -$totale_documento : $totale_documento; } catch (Exception $e) { - $totale_documento = null; } echo json_encode([ diff --git a/modules/fatture/buttons.php b/modules/fatture/buttons.php index cce1b0132..a306551b9 100755 --- a/modules/fatture/buttons.php +++ b/modules/fatture/buttons.php @@ -64,30 +64,38 @@ if (empty($record['is_fiscale'])) { } $modulo_prima_nota = Modules::get('Prima nota'); +$totale_scadenze = $dbo->fetchOne('SELECT SUM(da_pagare - pagato) AS differenza, SUM(da_pagare) AS da_pagare FROM co_scadenziario WHERE iddocumento = '.prepare($id_record)); if (!empty($record['is_fiscale'])) { // Aggiunta insoluto - $registrazione_insoluto = 1; + $registrazione_insoluto = 0; if (!empty($record['riba']) && $dir == 'entrata' && in_array($record['stato'], ['Emessa', 'Parzialmente pagato', 'Pagato'])) { + $registrazione_insoluto = 1; + } + + if (floatval($totale_scadenze['da_pagare']) == 0) { $registrazione_insoluto = 0; } echo ' - + '.tr('Registra insoluto').' '; // Aggiunta prima nota solo se non c'è già, se non si è in bozza o se il pagamento non è completo $prima_nota_presente = $dbo->fetchNum('SELECT id FROM co_movimenti WHERE iddocumento = '.prepare($id_record).' AND primanota = 1'); - $totale_scadenze = $dbo->fetchOne('SELECT SUM(da_pagare - pagato) AS differenza, SUM(da_pagare) AS da_pagare FROM co_scadenziario WHERE iddocumento = '.prepare($id_record)); $differenza = isset($totale_scadenze) ? $totale_scadenze['differenza'] : 0; - $registrazione_contabile = 1; + $registrazione_contabile = 0; if ($differenza != 0 || (!$prima_nota_presente && $record['stato'] == 'Emessa')) { + $registrazione_contabile = 1; + } + + if (floatval($totale_scadenze['da_pagare']) == 0) { $registrazione_contabile = 0; } echo ' - + '.tr('Registra contabile').' '; diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index 47b4d3c76..0a4a61dee 100755 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -296,7 +296,7 @@ elseif ($record['stato'] == 'Bozza') {
'; foreach ($scadenze as $scadenza) { - $pagamento_iniziato = !empty(floatval($scadenza->pagato)); + $pagamento_iniziato = !empty(floatval($scadenza->pagato)) || $scadenza->da_pagare == 0; echo '

'.dateFormat($scadenza['scadenza']).': '; diff --git a/modules/scadenzario/edit.php b/modules/scadenzario/edit.php index cbd602504..efc8719ea 100755 --- a/modules/scadenzario/edit.php +++ b/modules/scadenzario/edit.php @@ -157,19 +157,23 @@ echo ' '.tr('Totale').' '.numberFormat($totale_da_pagare).' + - '; + + '; -?> - - - -

- +if ($totale_da_pagare != 0) { + echo ' +
-
+
'; +} +?>
''.moneyFormat($totale_da_pagare).'', diff --git a/plugins/importFE/src/FatturaSemplificata.php b/plugins/importFE/src/FatturaSemplificata.php index 721bf6e15..eff3d8058 100755 --- a/plugins/importFE/src/FatturaSemplificata.php +++ b/plugins/importFE/src/FatturaSemplificata.php @@ -112,8 +112,6 @@ class FatturaSemplificata extends FatturaElettronica $prezzo = $importo / (1 + $imposta_percentuale); } - $riga['Importo'] = $prezzo; - if (!empty($articolo)) { $obj = Articolo::build($fattura, $articolo); @@ -128,7 +126,6 @@ class FatturaSemplificata extends FatturaElettronica // Nel caso il prezzo sia negativo viene gestito attraverso l'inversione della quantità (come per le note di credito) // TODO: per migliorare la visualizzazione, sarebbe da lasciare negativo il prezzo e invertire gli sconti. - $prezzo = $riga['Importo']; $prezzo = $prezzo < 0 ? -$prezzo : $prezzo; $qta = 1; $qta = $riga['Importo'] < 0 ? -$qta : $qta;