Aggiunta impostazione Raggruppa attività per tipologia in fattura
This commit is contained in:
parent
395aeae7b6
commit
d60890734e
|
@ -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<count($righe);$index++){
|
||||
if( empty($righe[$index]) ){
|
||||
unset($righe[$index]);
|
||||
}
|
||||
}
|
||||
|
||||
$righe = collect($righe);
|
||||
|
||||
return $righe;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -96,7 +96,7 @@ switch (post('op')) {
|
|||
$raggruppamento = post('raggruppamento');
|
||||
|
||||
$where = '';
|
||||
$query = 'SELECT *, IFNULL((SELECT MIN(`orario_inizio`) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`), `in_interventi`.`data_richiesta`) AS data, `in_statiintervento_lang`.`name` AS stato, `in_interventi`.`codice` AS codice_intervento FROM `in_interventi` INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento_lang`.`id_record`=`in_statiintervento`.`id` AND `in_statiintervento_lang`.`id_lang`='.prepare(\App::getLang()).') WHERE `in_statiintervento`.`is_fatturabile`=1 AND `in_interventi`.`id` NOT IN (SELECT `idintervento` FROM `co_righe_documenti` WHERE `idintervento` IS NOT NULL) AND `in_interventi`.`id` IN ('.implode(',', $id_records).')';
|
||||
$query = 'SELECT `in_interventi`.*, IFNULL((SELECT MIN(`orario_inizio`) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`), `in_interventi`.`data_richiesta`) AS data, `in_statiintervento_lang`.`name` AS stato, `in_interventi`.`codice` AS codice_intervento FROM `in_interventi` INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`id` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento_lang`.`id_record`=`in_statiintervento`.`id` AND `in_statiintervento_lang`.`id_lang`='.prepare(\App::getLang()).') WHERE `in_statiintervento`.`is_fatturabile`=1 AND `in_interventi`.`id` NOT IN (SELECT `idintervento` FROM `co_righe_documenti` WHERE `idintervento` IS NOT NULL) AND `in_interventi`.`id` IN ('.implode(',', $id_records).')';
|
||||
|
||||
// Se non è attiva la relativa impostazione considero solo interventi non collegati a contratti, ordini o preventivi (default)
|
||||
if (!setting('Permetti fatturazione delle attività collegate a contratti')) {
|
||||
|
|
|
@ -49,7 +49,12 @@ echo "
|
|||
<tbody>';
|
||||
|
||||
// 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.'
|
||||
</td>
|
||||
<td>'.$r['descrizione'];
|
||||
<td>'.nl2br($r['descrizione']).'<br>';
|
||||
} else {
|
||||
echo $num.'
|
||||
</td>
|
||||
|
@ -124,10 +129,8 @@ foreach ($righe as $riga) {
|
|||
}
|
||||
|
||||
if ($riga->isArticolo()) {
|
||||
echo '<br><small>'.$riga->codice.'</small>';
|
||||
} else {
|
||||
echo '-';
|
||||
}
|
||||
echo '<small>'.$riga->codice.'</small>';
|
||||
};
|
||||
|
||||
if ($riga->isArticolo()) {
|
||||
// Seriali
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
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');
|
Loading…
Reference in New Issue