Ritenuta Acconto in import FE

This commit is contained in:
Thomas Zilio 2019-07-23 18:04:01 +02:00
parent 3b9b447020
commit b6c1a85aaf
6 changed files with 53 additions and 14 deletions

View File

@ -2,8 +2,8 @@
include_once __DIR__.'/../../core.php';
use Modules\Articoli\Articolo as ArticoloOriginale;
use Modules\Anagrafiche\Anagrafica;
use Modules\Articoli\Articolo as ArticoloOriginale;
use Modules\DDT\Components\Articolo;
use Modules\DDT\Components\Descrizione;
use Modules\DDT\Components\Riga;
@ -116,7 +116,6 @@ switch (post('op')) {
}
break;
case 'manage_articolo':
if (post('idriga') != null) {
$articolo = Articolo::find(post('idriga'));

View File

@ -15,7 +15,7 @@ $options = [
'op' => 'add_documento',
'type' => 'ddt',
'module' => $final_module,
'serials'=>true,
'serials' => true,
'button' => tr('Aggiungi'),
'dir' => $dir,
'create_document' => true,

View File

@ -39,5 +39,4 @@ if ($riga->isDescrizione()) {
$options['op'] = 'manage_sconto';
}
echo App::load($file.'.php', $result, $options);

View File

@ -2,8 +2,8 @@
include_once __DIR__.'/../../core.php';
use Modules\Articoli\Articolo as ArticoloOriginale;
use Modules\Anagrafiche\Anagrafica;
use Modules\Articoli\Articolo as ArticoloOriginale;
use Modules\Ordini\Components\Articolo;
use Modules\Ordini\Components\Descrizione;
use Modules\Ordini\Components\Riga;

View File

@ -318,21 +318,13 @@ class FatturaElettronica
$stato_documento = StatoFattura::where('descrizione', 'Emessa')->first();
$fattura->stato()->associate($stato_documento);
// Ritenuta d'Acconto
$ritenuta = $dati_generali['DatiRitenuta'];
if (!empty($ritenuta)) {
$percentuale = $ritenuta['AliquotaRitenuta'];
$importo = $ritenuta['ImportoRitenuta'];
// TODO: salvare in fattura
}
$causali = $dati_generali['Causale'];
if (!empty($causali)) {
$note = '';
foreach ($causali as $causale) {
$note .= $causale;
}
$fattura->note = $note;
}

View File

@ -87,6 +87,8 @@ class FatturaOrdinaria extends FatturaElettronica
public function saveRighe($articoli, $iva, $conto, $movimentazione = true)
{
$id_ritenuta_acconto = $this->getRitenutaAcconto();
$righe = $this->getRighe();
$fattura = $this->getFattura();
@ -108,6 +110,10 @@ class FatturaOrdinaria extends FatturaElettronica
$obj->id_iva = $iva[$key];
$obj->idconto = $conto[$key];
if (!empty($riga['Ritenuta'])) {
$obj->id_ritenuta_acconto = $id_ritenuta_acconto;
}
// 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['PrezzoUnitario'];
@ -193,4 +199,47 @@ class FatturaOrdinaria extends FatturaElettronica
$obj->save();
}
}
protected function getRitenutaAcconto()
{
$database = database();
$dati_generali = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento'];
// Ritenuta d'Acconto
$ritenuta = $dati_generali['DatiRitenuta'];
if (empty($ritenuta)) {
return null;
}
$percentuale = floatval($ritenuta['AliquotaRitenuta']);
$importo = floatval($ritenuta['ImportoRitenuta']);
$righe = $this->getRighe();
$totali = [];
foreach ($righe as $riga) {
if (!empty($riga['Ritenuta'])) {
$totali[] = $riga['PrezzoTotale'];
}
}
$totale = sum($totali);
$totale_previsto = $importo / $percentuale * 100;
$percentuale_importo = $totale_previsto / $totale * 100;
$ritenuta_acconto = $database->fetchOne('SELECT * FROM`co_ritenutaacconto` WHERE `percentuale` = '.prepare($percentuale).' AND `percentuale_imponibile` = '.prepare($percentuale_importo));
if (empty($ritenuta_acconto)) {
$descrizione = tr('Ritenuta _PRC_% sul _TOT_%', [
'_PRC_' => numberFormat($percentuale),
'_TOT_' => numberFormat($percentuale_importo),
]);
$database->query('INSERT INTO `co_ritenutaacconto` (`descrizione`, `percentuale`, `percentuale_imponibile`) VALUES ('.prepare($descrizione).', '.prepare($percentuale).', '.prepare($percentuale_importo).')');
}
$ritenuta_acconto = $database->fetchOne('SELECT * FROM`co_ritenutaacconto` WHERE `percentuale` = '.prepare($percentuale).' AND `percentuale_imponibile` = '.prepare($percentuale_importo));
$id_ritenuta_acconto = $ritenuta_acconto['id'];
return $id_ritenuta_acconto;
}
}