diff --git a/modules/fatture/modutil.php b/modules/fatture/modutil.php index 5a9d9258e..e369f9ee4 100755 --- a/modules/fatture/modutil.php +++ b/modules/fatture/modutil.php @@ -20,6 +20,7 @@ use Modules\Fatture\Fattura; use Modules\Iva\Aliquota; use Util\Generator; +use Modules\Interventi\Intervento; /* * Funzione per generare un nuovo numero per la fattura. @@ -462,4 +463,90 @@ if (!function_exists('verifica_numero_fattura')) { return null; } + + function get_righe_composte(Fattura $documento) + { + global $dbo; + + $righe = []; + + // Righe documento + $righe_documento = $documento->getRighe()->where('idintervento','!=',NULL)->groupBy(function ($item, $key) { + return $item['prezzo_unitario'].'|'.$item['idiva'].'|'.$item['sconto_unitario']; + }); + + if (setting('Raggruppa attività per tipologia in fattura') && !$righe_documento->isEmpty() ){ + $articoli = []; + foreach ($righe_documento as $gruppo) { + $riga_base = []; + foreach($gruppo as $riga){ + $intervento = Intervento::find($riga->idintervento); + + if (!empty($intervento) ){ + if ($riga['is_descrizione']==1 ){ + if( empty($riga_base[$intervento->idtipointervento]['descrizione']) ){ + $riga_base[$intervento->idtipointervento]['descrizione'] = $riga; + }else{ + $riga_base[$intervento->idtipointervento]['descrizione']['descrizione'] .= "\n".$riga->descrizione; + $riga_base[$intervento->idtipointervento]['descrizione']['qta'] += $riga->qta; + } + } + + if( $riga['is_descrizione']==0 ){ + if( empty($riga_base[$intervento->idtipointervento]['riga']) && empty($riga->idarticolo) ){ + $riga_base[$intervento->idtipointervento]['riga'] = $riga; + }elseif( empty($riga->idarticolo) ){ + $riga_base[$intervento->idtipointervento]['riga']['descrizione'] .= "\n".$riga->descrizione; + $riga_base[$intervento->idtipointervento]['riga']['qta'] += $riga->qta; + }else{ + $riga_base[$intervento->idtipointervento]['articoli'][] = $riga; + } + } + }else{ + $articoli[] = $riga; + } + + } + + foreach($riga_base as $riga){ + if( !empty($riga['descrizione']) ){ + $righe[] = $riga['descrizione']; + } + + if( !empty($riga['riga']) ){ + $righe[] = $riga['riga']; + } + + if( !empty($riga['articoli']) ){ + foreach($riga['articoli'] as $articolo){ + $righe[] = $articolo; + } + } + } + + if( !empty($articoli) ){ + $righe = array_merge($righe,$articoli); + } + } + + //Estraggo le righe non collegate a interventi + $righe_esterne = $documento->getRighe()->where('idintervento','=',NULL); + foreach($righe_esterne as $riga){ + $righe[] = $riga; + } + + }else{ + $righe = $documento->getRighe(); + } + + for($index=0;$index'; // Righe documento -$righe = $documento->getRighe(); +if (setting('Raggruppa attività per tipologia in fattura')) { + $righe = get_righe_composte($documento); +} else { + $righe = $documento->getRighe(); +} + $num = 0; if (!setting('Visualizza riferimento su ogni riga in stampa')) { @@ -108,15 +113,15 @@ foreach ($righe as $riga) { '.nl2br($text); } } - $r['descrizione'] = preg_replace("/Rif\.(.*)/s", '', $r['descrizione']); + $r['descrizione'] = preg_replace("/Rif\.(.*)/s", ' ', $r['descrizione']); $autofill->count($r['descrizione']); } $source_type = get_class($riga); - if (!setting('Visualizza riferimento su ogni riga in stampa')) { + if (setting('Visualizza riferimento su ogni riga in stampa')) { echo $num.' - '.$r['descrizione']; + '.nl2br($r['descrizione']).'
'; } else { echo $num.' @@ -124,10 +129,8 @@ foreach ($righe as $riga) { } if ($riga->isArticolo()) { - echo '
'.$riga->codice.''; - } else { - echo '-'; - } + echo ''.$riga->codice.''; + }; if ($riga->isArticolo()) { // Seriali diff --git a/templates/fatture/footer.php b/templates/fatture/footer.php index d630fdcb8..6e97fc654 100755 --- a/templates/fatture/footer.php +++ b/templates/fatture/footer.php @@ -22,13 +22,30 @@ if (!empty($options['last-page-footer']) && !$is_last_page) { } // Calcoli -$imponibile = abs($documento->imponibile); -$sconto = $documento->sconto; -$totale_imponibile = abs($documento->totale_imponibile); -$totale_iva = abs($documento->iva); -$sconto_finale = abs($documento->getScontoFinale()); +//$imponibile = abs($documento->imponibile); +//$sconto = $documento->sconto; +//$totale_imponibile = abs($documento->totale_imponibile); +//$totale_iva = abs($documento->iva); +//$totale = abs($documento->totale) - $rivalsa; + +$totale_imponibile = 0; +foreach($v_totale as $key=>$v){ + $totale_imponibile += $v; +} + +$totale_iva = 0; +foreach($v_iva as $key=>$v){ + $totale_iva += $v; +} + +$sconto = 0; +foreach($righe as $riga){ + $sconto += floatval($riga->sconto); +} + $rivalsa = floatval($record['rivalsainps']); -$totale = abs($documento->totale) - $rivalsa; +$imponibile = $totale_imponibile + $sconto; +$totale = $totale_iva + $totale_imponibile; $show_sconto = $sconto > 0; diff --git a/update/2_5.sql b/update/2_5.sql index ec536de01..816406f48 100644 --- a/update/2_5.sql +++ b/update/2_5.sql @@ -2309,4 +2309,7 @@ INSERT INTO `zz_cache_lang` (`id`, `id_lang`, `id_record`, `name`) SELECT NULL, ALTER TABLE `zz_cache` DROP `name`; -ALTER TABLE `zz_cache_lang` ADD CONSTRAINT `zz_cache_lang_ibfk_1` FOREIGN KEY (`id_record`) REFERENCES `zz_cache`(`id`) ON DELETE CASCADE ON UPDATE RESTRICT; \ No newline at end of file +ALTER TABLE `zz_cache_lang` ADD CONSTRAINT `zz_cache_lang_ibfk_1` FOREIGN KEY (`id_record`) REFERENCES `zz_cache`(`id`) ON DELETE CASCADE ON UPDATE RESTRICT; + +INSERT INTO `zz_settings` (`nome`, `valore`, `tipo`, `editable`, `sezione`) VALUES ('Raggruppa attività per tipologia in fattura', '0', 'boolean', '1', 'Fatturazione'); +INSERT INTO `zz_settings_lang` (`id_record`, `id_lang`, `title`) VALUES ((SELECT `id` FROM `zz_settings` WHERE `nome` = 'Raggruppa attività per tipologia in fattura'), (SELECT `valore` FROM `zz_settings` WHERE `nome` = 'Lingua'), 'Raggruppa attività per tipologia in fattura'); \ No newline at end of file