Fix Fattura Elettronica

This commit is contained in:
Thomas Zilio 2019-07-16 11:33:19 +02:00
parent cc0fa01e75
commit 197f7390ef
5 changed files with 29 additions and 19 deletions

View File

@ -28,7 +28,7 @@ foreach ($righe as $row) {
// Valori assoluti // Valori assoluti
$riga['qta'] = abs($riga['qta']); $riga['qta'] = abs($riga['qta']);
$riga['prezzo_unitario_acquisto'] = abs($riga['prezzo_unitario_acquisto']); $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_unitario'] = abs($riga['sconto_unitario']);
$riga['sconto'] = abs($riga['sconto']); $riga['sconto'] = abs($riga['sconto']);
$riga['iva'] = abs($riga['iva']); $riga['iva'] = abs($riga['iva']);
@ -136,7 +136,7 @@ foreach ($righe as $row) {
} }
// Aggiunta dei riferimenti ai documenti // 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'])); $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_', [ $text = tr('Rif. fattura _NUM_ del _DATE_', [
@ -254,7 +254,7 @@ foreach ($righe as $row) {
echo " echo "
<div class='input-group-btn'>"; <div class='input-group-btn'>";
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 " echo "
<a class='btn btn-primary btn-xs'data-toggle='tooltip' title='Aggiorna SN...' onclick=\"launch_modal( 'Aggiorna SN', '".$structure->fileurl('add_serial.php').'?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$riga['id'].'&idarticolo='.$riga['idarticolo']."', 1 );\"><i class='fa fa-barcode' aria-hidden='true'></i></a>"; <a class='btn btn-primary btn-xs'data-toggle='tooltip' title='Aggiorna SN...' onclick=\"launch_modal( 'Aggiorna SN', '".$structure->fileurl('add_serial.php').'?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$riga['id'].'&idarticolo='.$riga['idarticolo']."', 1 );\"><i class='fa fa-barcode' aria-hidden='true'></i></a>";
} }

View File

@ -326,8 +326,8 @@ class Fattura extends Document
$direzione = $this->tipo->dir; $direzione = $this->tipo->dir;
foreach ($rate as $rata) { foreach ($rate as $rata) {
$importo = $direzione == 'uscita' ? -$rata['importo'] : $rata['importo'];
$scadenza = $rata['scadenza']; $scadenza = $rata['scadenza'];
$importo = $direzione == 'uscita' ? -$rata['importo'] : $rata['importo'];
self::registraScadenza($this, $importo, $scadenza, $is_pagato); self::registraScadenza($this, $importo, $scadenza, $is_pagato);
} }
@ -443,7 +443,7 @@ class Fattura extends Document
* *
* @return bool * @return bool
*/ */
public function isNotaDiAccredito() public function isNota()
{ {
return $this->tipo->reversed == 1; return $this->tipo->reversed == 1;
} }

View File

@ -992,11 +992,9 @@ class FatturaElettronica
$aliquota = $riga->aliquota ?: $iva_descrizioni; $aliquota = $riga->aliquota ?: $iva_descrizioni;
$percentuale = floatval($aliquota->percentuale); $percentuale = floatval($aliquota->percentuale);
if ($documento->isNotaDiAccredito()) { $prezzo_totale = $documento->isNota() ? -$riga->imponibile_scontato : $riga->imponibile_scontato;
$dettaglio['PrezzoTotale'] = -$riga->imponibile_scontato ?: 0; $dettaglio['PrezzoTotale'] = $prezzo_totale;
} else {
$dettaglio['PrezzoTotale'] = $riga->imponibile_scontato ?: 0;
}
$dettaglio['AliquotaIVA'] = $percentuale; $dettaglio['AliquotaIVA'] = $percentuale;
if (!empty($riga['idritenutaacconto']) && empty($riga['is_descrizione'])) { if (!empty($riga['idritenutaacconto']) && empty($riga['is_descrizione'])) {
@ -1036,16 +1034,18 @@ class FatturaElettronica
return $item->aliquota->percentuale; return $item->aliquota->percentuale;
}); });
foreach ($riepiloghi_percentuale as $riepilogo) { foreach ($riepiloghi_percentuale as $riepilogo) {
//(imponibile-sconto) + rivalsa inps $totale = round($riepilogo->sum('imponibile_scontato') + $riepilogo->sum('rivalsa_inps'), 2);
$totale = round(($riepilogo->sum('imponibile') - $riepilogo->sum('sconto')) + $riepilogo->sum('rivalsa_inps'), 2);
$imposta = round($riepilogo->sum('iva') + $riepilogo->sum('iva_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; $dati = $riepilogo->first()->aliquota;
$iva = [ $iva = [
'AliquotaIVA' => $dati['percentuale'], 'AliquotaIVA' => $dati['percentuale'],
'ImponibileImporto' => abs($totale), 'ImponibileImporto' => $totale,
'Imposta' => abs($imposta), 'Imposta' => $imposta,
'EsigibilitaIVA' => $dati['esigibilita'], 'EsigibilitaIVA' => $dati['esigibilita'],
]; ];
@ -1073,17 +1073,19 @@ class FatturaElettronica
return $item->aliquota->codice_natura_fe; return $item->aliquota->codice_natura_fe;
}); });
foreach ($riepiloghi_natura as $riepilogo) { foreach ($riepiloghi_natura as $riepilogo) {
//(imponibile-sconto) + rivalsa inps $totale = round($riepilogo->sum('imponibile_scontato') + $riepilogo->sum('rivalsa_inps'), 2);
$totale = round(($riepilogo->sum('imponibile') - $riepilogo->sum('sconto')) + $riepilogo->sum('rivalsa_inps'), 2);
$imposta = round($riepilogo->sum('iva') + $riepilogo->sum('iva_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; $dati = $riepilogo->first()->aliquota;
$iva = [ $iva = [
'AliquotaIVA' => 0, 'AliquotaIVA' => 0,
'Natura' => $dati->codice_natura_fe, 'Natura' => $dati->codice_natura_fe,
'ImponibileImporto' => abs($totale), 'ImponibileImporto' => $totale,
'Imposta' => abs($imposta), 'Imposta' => $imposta,
'EsigibilitaIVA' => $dati->esigibilita, 'EsigibilitaIVA' => $dati->esigibilita,
'RiferimentoNormativo' => $dati->descrizione, 'RiferimentoNormativo' => $dati->descrizione,
]; ];

View File

@ -115,6 +115,10 @@ class FatturaOrdinaria extends FatturaElettronica
$qta = $riga['Quantita'] ?: 1; $qta = $riga['Quantita'] ?: 1;
$qta = $riga['PrezzoUnitario'] < 0 ? -$qta : $qta; $qta = $riga['PrezzoUnitario'] < 0 ? -$qta : $qta;
if ($fattura->isNota()) {
$qta = -$qta;
}
// Prezzo e quantità // Prezzo e quantità
$obj->prezzo_unitario_vendita = $prezzo; $obj->prezzo_unitario_vendita = $prezzo;
$obj->qta = $qta; $obj->qta = $qta;
@ -172,7 +176,7 @@ class FatturaOrdinaria extends FatturaElettronica
$dati_generali = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento']; $dati_generali = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento'];
$totale_documento = $dati_generali['ImportoTotaleDocumento']; $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)) { if (!empty($diff)) {
// Rimozione dell'IVA calcolata automaticamente dal gestionale // Rimozione dell'IVA calcolata automaticamente dal gestionale
$iva_arrotondamento = database()->fetchOne('SELECT * FROM co_iva WHERE id='.prepare($iva[0])); $iva_arrotondamento = database()->fetchOne('SELECT * FROM co_iva WHERE id='.prepare($iva[0]));

View File

@ -111,6 +111,10 @@ class FatturaSemplificata extends FatturaElettronica
$qta = 1; $qta = 1;
$qta = $riga['Importo'] < 0 ? -$qta : $qta; $qta = $riga['Importo'] < 0 ? -$qta : $qta;
if ($fattura->isNota()) {
$qta = -$qta;
}
// Prezzo e quantità // Prezzo e quantità
$obj->prezzo_unitario_vendita = $prezzo; $obj->prezzo_unitario_vendita = $prezzo;
$obj->qta = $qta; $obj->qta = $qta;