Correzioni per gestione totale a zero di Fattura

This commit is contained in:
Dasc3er 2020-11-13 16:12:29 +01:00
parent 74f2179b8f
commit 36afe8dc0e
5 changed files with 46 additions and 34 deletions

View File

@ -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([

View File

@ -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 '
<a class="btn btn-primary '.(!empty($modulo_prima_nota) && empty($registrazione_insoluto) ? '' : 'disabled').'" data-href="'.base_path().'/add.php?id_module='.$modulo_prima_nota['id'].'&id_documenti='.$id_record.'&single=1&is_insoluto=1" data-title="'.tr('Registra insoluto').'">
<a class="btn btn-primary '.(!empty($modulo_prima_nota) && !empty($registrazione_insoluto) ? '' : 'disabled').'" data-href="'.base_path().'/add.php?id_module='.$modulo_prima_nota['id'].'&id_documenti='.$id_record.'&single=1&is_insoluto=1" data-title="'.tr('Registra insoluto').'">
<i class="fa fa-ban fa-inverse"></i> '.tr('Registra insoluto').'
</a>';
// 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 '
<a class="btn btn-primary '.(!empty($modulo_prima_nota) && empty($registrazione_contabile) ? '' : 'disabled').'" data-href="'.base_path().'/add.php?id_module='.$modulo_prima_nota['id'].'&id_documenti='.$id_record.'&single=1" data-title="'.tr('Registra contabile').'">
<a class="btn btn-primary '.(!empty($modulo_prima_nota) && !empty($registrazione_contabile) ? '' : 'disabled').'" data-href="'.base_path().'/add.php?id_module='.$modulo_prima_nota['id'].'&id_documenti='.$id_record.'&single=1" data-title="'.tr('Registra contabile').'">
<i class="fa fa-euro"></i> '.tr('Registra contabile').'
</a>';

View File

@ -296,7 +296,7 @@ elseif ($record['stato'] == 'Bozza') {
<div class="clearfix"></div>';
foreach ($scadenze as $scadenza) {
$pagamento_iniziato = !empty(floatval($scadenza->pagato));
$pagamento_iniziato = !empty(floatval($scadenza->pagato)) || $scadenza->da_pagare == 0;
echo '
<p>'.dateFormat($scadenza['scadenza']).': ';

View File

@ -157,19 +157,23 @@ echo '
<td class="text-right"><b>'.tr('Totale').'</b></td>
<td class="text-right" id="totale_utente">'.numberFormat($totale_da_pagare).'</td>
<td class="text-right"></td>
<td class="text-right"></td>
</tr>
</tfoot>';
</tfoot>
</table>';
?>
</table>
<div class='pull-right'>
<a onclick="launch_modal( 'Registra contabile pagamento', '<?php echo base_path(); ?>/add.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>&<?php echo !empty($record['iddocumento']) ? 'id_documenti='.$record['iddocumento'].'&single=1' : 'id_scadenze='.$id_record; ?>');" class="btn btn-sm btn-primary"><i class="fa fa-euro"></i> <?php echo tr('Registra contabile pagamento...'); ?></a>
if ($totale_da_pagare != 0) {
echo '
<div class="pull-right">
<a onclick="launch_modal(\''.tr('Registra contabile pagamento').'\', \''.base_path().'/add.php?id_module='.Modules::get('Prima nota')['id'].'&'.(!empty($record['iddocumento']) ? 'id_documenti='.$record['iddocumento'].'&single=1' : 'id_scadenze='.$id_record).'\');" class="btn btn-sm btn-primary">
<i class="fa fa-euro"></i> '.tr('Registra contabile pagamento...').'
</a>
</div>
<div class="clearfix"></div>
<br>
<br>';
}
?>
<div class="alert alert-error hide" id="totale"><?php echo tr('Il totale da pagare deve essere pari a _MONEY_', [
'_MONEY_' => '<b>'.moneyFormat($totale_da_pagare).'</b>',

View File

@ -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;