From 8556d8eca1fcfaf0239865d09d72502468b37853 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Wed, 26 Sep 2018 16:28:02 +0200 Subject: [PATCH] Supporto FE Rituenuta e Bollo --- modules/interventi/modutil.php | 8 ++-- plugins/exportPA/src/FatturaElettronica.php | 47 ++++++++++++++++++++- plugins/importPA/src/FatturaElettronica.php | 24 ++++++++--- 3 files changed, 68 insertions(+), 11 deletions(-) diff --git a/modules/interventi/modutil.php b/modules/interventi/modutil.php index baa66e1d0..5277e0307 100644 --- a/modules/interventi/modutil.php +++ b/modules/interventi/modutil.php @@ -352,13 +352,13 @@ function calcola_ore_intervento($orario_inizio, $orario_fine) return $ore; } -function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizione, $id_iva, $id_conto, $id_rivalsa_inps = null, $id_ritenuta_acconto = null,$calcolo_ritenuta_acconto = null) +function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizione, $id_iva, $id_conto, $id_rivalsa_inps = false, $id_ritenuta_acconto = false, $calcolo_ritenuta_acconto = false) { $dbo = database(); - $id_rivalsa_inps = $id_rivalsa_inps ?: setting('Percentuale rivalsa INPS'); - $id_ritenuta_acconto = $id_ritenuta_acconto ?: setting("Percentuale ritenuta d'acconto"); - $calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto ?: setting("Metodologia calcolo ritenuta d'acconto predefinito"); + $id_rivalsa_inps = $id_rivalsa_inps !== false ? $id_rivalsa_inps : setting('Percentuale rivalsa INPS'); + $id_ritenuta_acconto = $id_ritenuta_acconto !== false ? $id_ritenuta_acconto : setting("Percentuale ritenuta d'acconto"); + $calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto !== false ? $calcolo_ritenuta_acconto : setting("Metodologia calcolo ritenuta d'acconto predefinito"); // Leggo l'anagrafica del cliente $rs = $dbo->fetchArray('SELECT idanagrafica, codice, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento='.prepare($id_intervento).') AS data FROM `in_interventi` WHERE id='.prepare($id_intervento)); diff --git a/plugins/exportPA/src/FatturaElettronica.php b/plugins/exportPA/src/FatturaElettronica.php index 0e106d14b..fd06e3ba1 100644 --- a/plugins/exportPA/src/FatturaElettronica.php +++ b/plugins/exportPA/src/FatturaElettronica.php @@ -89,6 +89,16 @@ class FatturaElettronica return database()->fetchOne('SELECT *, (SELECT `iso2` FROM `an_nazioni` WHERE `an_nazioni`.`id` = `an_anagrafiche`.`id_nazione`) AS nazione FROM `an_anagrafiche` WHERE `idanagrafica` = '.prepare($id)); } + /** + * Restituisce le righe del documento. + * + * @return array + */ + public function getRighe() + { + return database()->fetchArray('SELECT * FROM `co_righe_documenti` WHERE `sconto_globale` = 0 AND `iddocumento` = '.prepare($this->getDocumento()['id'])); + } + /** * Restituisce le informazioni relative al documento. * @@ -297,6 +307,7 @@ class FatturaElettronica protected static function getDatiGeneraliDocumento($fattura) { $documento = $fattura->getDocumento(); + $azienda = static::getAzienda(); $result = [ 'TipoDocumento' => $documento['tipo_documento'], @@ -307,6 +318,36 @@ class FatturaElettronica // TODO: vari ]; + // Ritenuta d'Acconto + $righe = $fattura->getRighe(); + $id_ritenuta = null; + $totale = 0; + foreach ($righe as $riga) { + if (!empty($riga['idritenutaacconto'])) { + $id_ritenuta = $riga['idritenutaacconto']; + $totale += $riga['ritenutaacconto']; + } + } + + if (!empty($id_ritenuta)) { + $percentuale = database()->fetchOne('SELECT percentuale FROM co_ritenutaacconto WHERE id = '.prepare($id_ritenuta)); + + $result['DatiRitenuta'] = [ + 'TipoRitenuta' => ($azienda['tipo'] == 'Privato') ? 'RT01' : 'RT02', + 'ImportoRitenuta' => $totale, + 'AliquotaRitenuta' => $percentuale, + 'CausalePagamento' => setting("Causale ritenuta d'acconto"), + ]; + } + + // Bollo + if (!empty($documento['bollo'])) { + $result['DatiBollo'] = [ + 'BolloVirtuale' => 'SI', + 'ImportoBollo' => $documento['bollo'], + ]; + } + // Sconto globale $documento['sconto_globale'] = floatval($documento['sconto_globale']); if (!empty($documento['sconto_globale'])) { @@ -386,7 +427,7 @@ class FatturaElettronica $result = []; // Righe del documento - $righe_documento = $database->fetchArray('SELECT * FROM `co_righe_documenti` WHERE `sconto_globale` = 0 AND `iddocumento` = '.prepare($documento['id'])); + $righe_documento = $fattura->getRighe(); foreach ($righe_documento as $numero => $riga) { $prezzo_unitario = $riga['subtotale'] / $riga['qta']; $prezzo_totale = $riga['subtotale'] - $riga['sconto']; @@ -420,6 +461,10 @@ class FatturaElettronica $dettaglio['PrezzoTotale'] = $prezzo_totale; $dettaglio['AliquotaIVA'] = $percentuale; + if (!empty($riga['idritenutaacconto'])) { + $dettaglio['Ritenuta'] = 'SI'; + } + if (empty($percentuale)) { $dettaglio['Natura'] = $iva['codice_natura_fe']; } diff --git a/plugins/importPA/src/FatturaElettronica.php b/plugins/importPA/src/FatturaElettronica.php index ae71c531a..9ecddf726 100644 --- a/plugins/importPA/src/FatturaElettronica.php +++ b/plugins/importPA/src/FatturaElettronica.php @@ -167,11 +167,10 @@ class FatturaElettronica } $obj->descrizione = $riga['Descrizione']; - $obj->setSubtotale($riga['PrezzoUnitario'], $riga['Quantita']); - /* + $obj->id_iva = $iva[$key]; + $obj->costo_unitario = $riga['PrezzoUnitario']; $obj->qta = $riga['Quantita']; - $obj->prezzo = $riga['PrezzoUnitario']; - */ + if (!empty($riga['UnitaMisura'])) { $obj->um = $riga['UnitaMisura']; } @@ -187,8 +186,6 @@ class FatturaElettronica $obj->tipo_sconto = $tipo; } - $obj->id_iva = $iva[$key]; - $obj->save(); } } @@ -269,6 +266,21 @@ class FatturaElettronica $fattura->tipo_sconto_globale = $tipo; } + // Ritenuta d'Acconto + $ritenuta = $dati_generali['DatiRitenuta']; + if (!empty($ritenuta)) { + $percentuale = $ritenuta['AliquotaRitenuta']; + $importo = $ritenuta['ImportoRitenuta']; + + // TODO: salvare in fattura + } + + // Bollo + $bollo = $dati_generali['DatiBollo']; + if (!empty($bollo)) { + $fattura->bollo = $bollo['ImportoBollo']; + } + $fattura->save(); return $fattura->id;