Supporto FE Rituenuta e Bollo

This commit is contained in:
Thomas Zilio 2018-09-26 16:28:02 +02:00
parent 2efd4b6300
commit 8556d8eca1
3 changed files with 68 additions and 11 deletions

View File

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

View File

@ -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'];
}

View File

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