. */ namespace Modules\Fatture\Gestori; use Modules\Fatture\Components; use Modules\Fatture\Fattura; /** * Classe dedicata alla gestione del Bollo per la Fattura, compreso il calcolo del relativo valore e la generazione dinamica della riga associata. * * @since 2.4.17 */ class Bollo { private $fattura; public function __construct(Fattura $fattura) { $this->fattura = $fattura; } /** * Metodo per calcolare automaticamente il bollo da applicare al documento. * * @return float */ public function getBollo() { if (isset($this->fattura->bollo)) { return $this->fattura->bollo; } $righe_bollo = $this->fattura->getRighe()->filter(fn ($item, $key) => $item->aliquota != null && in_array($item->aliquota->codice_natura_fe, ['N2.1', 'N2.2', 'N3.5', 'N3.6', 'N4'])); $importo_righe_bollo = $righe_bollo->sum('subtotale'); // Leggo la marca da bollo se c'è e se il netto a pagare supera la soglia $bollo = ($this->fattura->direzione == 'uscita') ? $this->fattura->bollo : setting('Importo marca da bollo'); $marca_da_bollo = 0; if (abs($bollo) > 0 && abs($importo_righe_bollo) > setting("Soglia minima per l'applicazione della marca da bollo")) { $marca_da_bollo = $bollo; } // Se l'importo è negativo può essere una nota di credito, quindi cambio segno alla marca da bollo $marca_da_bollo = abs($marca_da_bollo); return $marca_da_bollo; } /** * Metodo per aggiornare ed eventualmente aggiungere la marca da bollo al documento. */ public function manageRigaMarcaDaBollo() { $riga = $this->fattura->rigaBollo; $righe_bollo = $this->fattura->getRighe()->filter(fn ($item, $key) => $item->aliquota != null && in_array($item->aliquota->codice_natura_fe, ['N2.1', 'N2.2', 'N3.5', 'N3.6', 'N4']))->first(); $addebita_bollo = $this->fattura->addebita_bollo; $marca_da_bollo = $this->getBollo(); $cassa_pred = []; if (setting('Cassa previdenziale predefinita')) { $cassa_pred = database()->fetchOne('SELECT percentuale FROM co_rivalse WHERE id='.setting('Cassa previdenziale predefinita')); } // Verifico se la fattura ha righe con rivalsa applicata, esclusa la marca da bollo $rivalsa = ($this->fattura->rivalsainps > 0 && $this->fattura->rivalsainps != (setting('Importo marca da bollo') * $cassa_pred['percentuale'] / 100)) ? 1 : 0; // Rimozione riga bollo se nullo if (empty($addebita_bollo) || empty($marca_da_bollo)) { if (!empty($riga)) { $riga->delete(); } return null; } // Creazione riga bollo se non presente if (empty($riga)) { $riga = Components\Riga::build($this->fattura); } $riga->prezzo_unitario = $marca_da_bollo; $riga->qta = 1; $riga->descrizione = setting('Descrizione addebito bollo'); $riga->id_iva = $righe_bollo->idiva; $riga->idconto = setting('Conto predefinito per la marca da bollo'); // Applico la rivalsa alla marca da bollo se previsto if ((setting('Regime Fiscale') == 'RF19') && (!empty(setting('Cassa previdenziale predefinita')))) { $riga['id_rivalsa_inps'] = $rivalsa ? setting('Cassa previdenziale predefinita') : ''; } $riga->save(); return $riga->id; } }