diff --git a/modules/contratti/row-list.php b/modules/contratti/row-list.php index 0e85e1205..dd9670b74 100644 --- a/modules/contratti/row-list.php +++ b/modules/contratti/row-list.php @@ -64,7 +64,7 @@ if (!empty($rs)) { if (empty($r['is_descrizione'])) { echo ' '.Translator::numberToLocale($r['subtotale'] / $r['qta']).' €'; - + if ($r['sconto_unitario'] > 0) { echo '
'.tr('sconto _TOT_ _TYPE_', [ @@ -132,7 +132,7 @@ if (!empty($rs)) { '; - + // Calcoli $imponibile = sum(array_column($rs, 'subtotale')); $sconto = sum(array_column($rs, 'sconto')); diff --git a/modules/ddt/row-list.php b/modules/ddt/row-list.php index 7c6850a15..ff17f5f4a 100644 --- a/modules/ddt/row-list.php +++ b/modules/ddt/row-list.php @@ -2,6 +2,8 @@ include_once __DIR__.'/../../core.php'; +include_once DOCROOT.'/modules/fatture/modutil.php'; + echo ' @@ -64,23 +66,12 @@ if (!empty($rs)) { echo nl2br($r['descrizione']); } - // Aggiunta riferimento a ordine - if (!empty($r['idordine'])) { - $rso = $dbo->fetchArray('SELECT numero, numero_esterno, data, dir FROM or_ordini JOIN or_tipiordine ON or_tipiordine.id = or_ordini.idtipoordine WHERE or_ordini.id='.prepare($r['idordine'])); - $numero = !empty($rso[0]['numero_esterno']) ? $rso[0]['numero_esterno'] : $rso[0]['numero']; + // Aggiunta dei riferimenti ai documenti + $ref = doc_references($r, $dir, ['idddt']); - $ref = $rso[0]['dir'] == 'entrata' ? 'Ordini cliente' : 'Ordini fornitore'; - $ref_id = $r['idordine']; - - $descrizione = tr('Rif. ordine num. _NUM_ del _DATE_', [ - '_NUM_' => $numero, - '_DATE_' => Translator::dateToLocale($rso[0]['data']), - ]); - } - - if (!empty($descrizione)) { + if (!empty($ref)) { echo ' -
'.Modules::link($ref, $ref_id, $descrizione.' ', $descrizione); +
'.Modules::link($ref['module'], $ref['id'], $ref['description'], $ref['description']); } echo ' @@ -152,7 +143,7 @@ if (!empty($rs)) { // Possibilità di rimuovere una riga solo se il ddt non è evaso echo ' '; }
'; - if ($records[0]['flag_completato']==0 && empty($r['sconto_globale'])) { + if ($records[0]['flag_completato'] == 0 && empty($r['sconto_globale'])) { echo "
diff --git a/modules/fatture/modutil.php b/modules/fatture/modutil.php index 86cbb039f..09b781ae2 100644 --- a/modules/fatture/modutil.php +++ b/modules/fatture/modutil.php @@ -866,6 +866,15 @@ function controlla_seriali($field, $id_riga, $old_qta, $new_qta, $dir) return true; } +/** + * Individua i seriali non rimuovibili poichè utilizzati in documenti rilasciati. + * + * @param string $field + * @param int $id_riga + * @param string $dir + * + * @return array + */ function seriali_non_rimuovibili($field, $id_riga, $dir) { $dbo = Database::getConnection(); @@ -879,6 +888,13 @@ function seriali_non_rimuovibili($field, $id_riga, $dir) return $results; } +/** + * Calcola gli sconti in modo automatico. + * + * @param array $data + * + * @return float + */ function calcola_sconto($data) { if ($data['tipo'] == 'PRC') { @@ -903,3 +919,102 @@ function calcola_sconto($data) return $result; } + +/** + * Restistuisce le informazioni sull'eventuale riferimento ai documenti. + * + * @param array $data + * @param string $dir + * + * @return array + */ +function doc_references($info, $dir, $ignore = []) +{ + $dbo = Database::getConnection(); + + // Rimozione valori da non controllare + foreach ($ignore as $field) { + if (isset($info[$field])) { + unset($info[$field]); + } + } + + $module = null; + $id = null; + + // Ordine + if (!empty($info['idordine'])) { + $data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM or_ordini WHERE id=".prepare($info['idordine'])); + + $module = ($dir == 'entrata') ? 'Ordini cliente' : 'Ordini fornitore'; + $id = $info['idordine']; + + $document = tr('Ordine'); + } + + // DDT + elseif (!empty($info['idddt'])) { + $data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM dt_ddt WHERE id=".prepare($info['idddt'])); + + $module = ($dir == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto'; + $id = $info['idddt']; + + $document = tr('Ddt'); + } + + // Preventivo + elseif (!empty($info['idpreventivo'])) { + $data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_preventivi WHERE id='.prepare($info['idpreventivo'])); + + $module = 'Preventivi'; + $id = $info['idpreventivo']; + + $document = tr('Preventivo'); + } + + // Contratto + elseif (!empty($info['idcontratto'])) { + $data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_contratti WHERE id='.prepare($info['idcontratto'])); + + $module = 'Contratti'; + $id = $info['idcontratto']; + + $document = tr('Contratto'); + } + + // Intervento + elseif (!empty($info['idintervento'])) { + $data = $dbo->fetchArray('SELECT codice AS numero, IFNULL( (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), data_richiesta) AS data FROM in_interventi WHERE id='.prepare($info['idintervento'])); + + $module = 'Interventi'; + $id = $info['idintervento']; + + $document = tr('Intervento'); + } + + // Testo relativo + if (!empty($module) && !empty($id)) { + $document = Stringy\Stringy::create($document)->toLowerCase(); + + if (!empty($data)) { + $description = tr('Rif. _DOC_ num. _NUM_ del _DATE_', [ + '_DOC_' => $document, + '_NUM_' => $data[0]['numero'], + '_DATE_' => Translator::dateToLocale($data[0]['data']), + ]); + } else { + $description = tr('_DOC_ di riferimento _ID_ eliminato', [ + '_DOC_' => $document->upperCaseFirst(), + '_ID_' => $id, + ]); + } + + return [ + 'module' => $module, + 'id' => $id, + 'description' => $description, + ]; + } + + return []; +} diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php index c9e48f667..cff7c0a6c 100644 --- a/modules/fatture/row-list.php +++ b/modules/fatture/row-list.php @@ -2,6 +2,8 @@ include_once __DIR__.'/../../core.php'; +include_once DOCROOT.'/modules/fatture/modutil.php'; + /* Righe fattura */ @@ -90,74 +92,12 @@ if (!empty($rs)) { } } - $ref_modulo = null; - $ref_id = null; - // Aggiunta dei riferimenti ai documenti - // Ordine - if (!empty($r['idordine'])) { - $data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM or_ordini WHERE id=".prepare($r['idordine'])); - - $ref_modulo = ($dir == 'entrata') ? 'Ordini cliente' : 'Ordini fornitore'; - $ref_id = $r['idordine']; - - $documento = tr('Ordine'); - } - // DDT - elseif (!empty($r['idddt'])) { - $data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM dt_ddt WHERE id=".prepare($r['idddt'])); - - $ref_modulo = ($dir == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto'; - $ref_id = $r['idddt']; - - $documento = tr('Ddt'); - } - // Preventivo - elseif (!empty($r['idpreventivo'])) { - $data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_preventivi WHERE id='.prepare($r['idpreventivo'])); - - $ref_modulo = 'Preventivi'; - $ref_id = $r['idpreventivo']; - - $documento = tr('Preventivo'); - } - // Contratto - elseif (!empty($r['idcontratto'])) { - $data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_contratti WHERE id='.prepare($r['idcontratto'])); - - $ref_modulo = 'Contratti'; - $ref_id = $r['idcontratto']; - - $documento = tr('Contratto'); - } - // Intervento - elseif (!empty($r['idintervento'])) { - $data = $dbo->fetchArray('SELECT codice AS numero, IFNULL( (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), data_richiesta) AS data FROM in_interventi WHERE id='.prepare($r['idintervento'])); - - $ref_modulo = 'Interventi'; - $ref_id = $r['idintervento']; - - $documento = tr('Intervento'); - } - - if (!empty($ref_modulo) && !empty($ref_id)) { - $documento = Stringy\Stringy::create($documento)->toLowerCase(); - - if (!empty($data)) { - $descrizione = tr('Rif. _DOC_ num. _NUM_ del _DATE_', [ - '_DOC_' => $documento, - '_NUM_' => $data[0]['numero'], - '_DATE_' => Translator::dateToLocale($data[0]['data']), - ]); - } else { - $descrizione = tr('_DOC_ di riferimento _ID_ eliminato', [ - '_DOC_' => $documento->upperCaseFirst(), - '_ID_' => $ref_id, - ]); - } + $ref = doc_references($r, $dir, ['iddocumento']); + if (!empty($ref)) { echo ' -
'.Modules::link($ref_modulo, $ref_id, $descrizione, $descrizione); +
'.Modules::link($ref['module'], $ref['id'], $ref['description'], $ref['description']); } echo ' diff --git a/modules/ordini/row-list.php b/modules/ordini/row-list.php index 5e548577f..2a86e8c01 100644 --- a/modules/ordini/row-list.php +++ b/modules/ordini/row-list.php @@ -2,6 +2,8 @@ include_once __DIR__.'/../../core.php'; +include_once DOCROOT.'/modules/fatture/modutil.php'; + // Mostro le righe dell'ordine echo ' @@ -24,12 +26,6 @@ $rs = $dbo->fetchArray($q); if (!empty($rs)) { foreach ($rs as $r) { - - $extra = ''; - - $ref_modulo = null; - $ref_id = null; - $delete = !empty($r['idarticolo']) ? 'unlink_articolo' : 'unlink_riga'; $extra = ''; @@ -49,8 +45,7 @@ if (!empty($rs)) { echo ' - - + @@ -83,76 +85,11 @@ foreach ($righe as $r) { } // Aggiunta dei riferimenti ai documenti - $ref_modulo = null; - $ref_id = null; + $ref = doc_references($r, $records[0]['dir'], ['iddocumento']); - // Ordine - if (!empty($r['idordine'])) { - $data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM or_ordini WHERE id=".prepare($r['idordine'])); - - $ref_modulo = ($records[0]['dir'] == 'entrata') ? 'Ordini cliente' : 'Ordini fornitore'; - $ref_id = $r['idordine']; - - $documento = tr('Ordine'); - } - // DDT - elseif (!empty($r['idddt'])) { - $data = $dbo->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM dt_ddt WHERE id=".prepare($r['idddt'])); - - $ref_modulo = ($records[0]['dir'] == 'entrata') ? 'Ddt di vendita' : 'Ddt di acquisto'; - $ref_id = $r['idddt']; - - $documento = tr('Ddt'); - } - // Preventivo - elseif (!empty($r['idpreventivo'])) { - $data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_preventivi WHERE id='.prepare($r['idpreventivo'])); - - $ref_modulo = 'Preventivi'; - $ref_id = $r['idpreventivo']; - - $documento = tr('Preventivo'); - } - // Contratto - elseif (!empty($r['idcontratto'])) { - $data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_contratti WHERE id='.prepare($r['idcontratto'])); - - $ref_modulo = 'Contratti'; - $ref_id = $r['idcontratto']; - - $documento = tr('Contratto'); - } - // Intervento - elseif (!empty($r['idintervento'])) { - $data = $dbo->fetchArray('SELECT codice AS numero, data_richiesta AS data FROM in_interventi WHERE id='.prepare($r['idintervento'])); - - $ref_modulo = 'Interventi'; - $ref_id = $r['idintervento']; - - $documento = tr('Intervento'); - } - - if (!empty($ref_modulo) && !empty($ref_id)) { - $documento = Stringy\Stringy::create($documento)->toLowerCase(); - - if (!empty($data)) { - $descrizione = tr('Rif. _DOC_ num. _NUM_ del _DATE_', [ - '_DOC_' => $documento, - '_NUM_' => $data[0]['numero'], - '_DATE_' => Translator::dateToLocale($data[0]['data']), - ]); - } else { - $descrizione = tr('_DOC_ di riferimento _ID_ eliminato', [ - '_DOC_' => $documento->upperCaseFirst(), - '_ID_' => $ref_id, - ]); - } - } - - // Stampa dei riferimenti - if (!empty($descrizione)) { + if (!empty($ref)) { echo ' -
'.$descrizione.''; +
'.$ref['description'].''; if ($count <= 1) { $count += 0.4; } @@ -243,14 +180,13 @@ echo '
- '.Modules::link($ref_modulo, $ref_id, $r['descrizione']); + '; if (!empty($r['idarticolo'])) { echo ' @@ -63,54 +58,22 @@ if (!empty($rs)) { '_NUM_' => $mancanti, ]).''; } + if (!empty($serials)) { echo '
'.tr('SN').': '.implode(', ', $serials); } - } else { - if ($r['lotto'] != '') { - echo '
Lotto: '.$r['lotto']; - } - if ($r['serial'] != '') { - echo '
SN: '.$r['serial']; - } - if ($r['altro'] != '') { - echo '
'.$r['altro']; - } } + } else { + echo nl2br($r['descrizione']); } - - - // Aggiunta dei riferimenti ai documenti - // Preventivo - if (!empty($r['idpreventivo'])) { - $data = $dbo->fetchArray('SELECT numero, data_bozza AS data FROM co_preventivi WHERE id='.prepare($r['idpreventivo'])); - $ref_modulo = 'Preventivi'; - $ref_id = $r['idpreventivo']; - - $documento = tr('Preventivo'); - } - - - if (!empty($ref_modulo) && !empty($ref_id)) { - $documento = Stringy\Stringy::create($documento)->toLowerCase(); - - if (!empty($data)) { - $descrizione = tr('Rif. _DOC_ num. _NUM_ del _DATE_', [ - '_DOC_' => $documento, - '_NUM_' => $data[0]['numero'], - '_DATE_' => Translator::dateToLocale($data[0]['data']), - ]); - } else { - $descrizione = tr('_DOC_ di riferimento _ID_ eliminato', [ - '_DOC_' => $documento->upperCaseFirst(), - '_ID_' => $ref_id, - ]); - } + // Aggiunta dei riferimenti ai documenti + $ref = doc_references($r, $dir, ['idordine']); + if (!empty($ref)) { echo ' -
'.Modules::link($ref_modulo, $ref_id, $descrizione, $descrizione); +
'.Modules::link($ref['module'], $ref['id'], $ref['description'], $ref['description']); } echo ' @@ -183,7 +146,7 @@ if (!empty($rs)) { echo '
'; - if ( $records[0]['flag_completato'] == 0 && empty($r['sconto_globale']) ) { + if ($records[0]['flag_completato'] == 0 && empty($r['sconto_globale'])) { echo " @@ -237,8 +200,6 @@ $iva = sum(array_column($rs, 'iva')); $imponibile_scontato = sum($imponibile, -$sconto); - - $totale_iva = sum($iva, $records[0]['iva_rivalsainps']); $totale = sum([ diff --git a/modules/preventivi/row-list.php b/modules/preventivi/row-list.php index b4f875e60..23e955e56 100644 --- a/modules/preventivi/row-list.php +++ b/modules/preventivi/row-list.php @@ -29,6 +29,7 @@ if (!empty($rs)) { echo '
'; + if (!empty($r['idarticolo'])) { echo Modules::link('Articoli', $r['idarticolo'], $r['codice'].' - '.$r['descrizione']); } else { diff --git a/templates/ddt/body.php b/templates/ddt/body.php index 0b3dcde8c..9595e998d 100644 --- a/templates/ddt/body.php +++ b/templates/ddt/body.php @@ -2,6 +2,8 @@ include_once __DIR__.'/../../core.php'; +include_once DOCROOT.'/modules/fatture/modutil.php'; + $report_name = 'ddt_'.$numero.'.pdf'; $autofill = [ @@ -77,17 +79,12 @@ foreach ($rs_gen as $r) { } } - // Aggiunta riferimento a ordine - if (!empty($r['idordine'])) { - $rso = $dbo->fetchArray('SELECT numero, numero_esterno, data FROM or_ordini WHERE id='.prepare($r['idordine'])); - $numero = !empty($rso[0]['numero_esterno']) ? $rso[0]['numero_esterno'] : $rso[0]['numero']; + // Aggiunta dei riferimenti ai documenti + $ref = doc_references($r, $records[0]['dir'], ['idddt']); + if (!empty($ref)) { echo ' -
'.tr('Rif. ordine num. _NUM_ del _DATE_', [ - '_NUM_' => $numero, - '_DATE_' => Translator::dateToLocale($rso[0]['data']), - ]).''; - +
'.$ref['description'].''; if ($count <= 1) { $count += 0.4; } diff --git a/templates/fatture/body.php b/templates/fatture/body.php index 98a52419a..834709478 100644 --- a/templates/fatture/body.php +++ b/templates/fatture/body.php @@ -2,6 +2,8 @@ include_once __DIR__.'/../../core.php'; +include_once DOCROOT.'/modules/fatture/modutil.php'; + $report_name = 'fattura_'.$numero.'.pdf'; $autofill = [ @@ -31,7 +33,7 @@ echo "
".tr('IVA', [], ['upper' => true]).' (%)
'; - // Aggiungo diciture particolari per l'anagrafica cliente $dicitura = $dbo->fetchArray('SELECT diciturafissafattura FROM an_anagrafiche WHERE idanagrafica = '.prepare($id_cliente)); if (!empty($dicitura[0]['diciturafissafattura'])) { - $testo = $dicitura[0]['diciturafissafattura']; + $testo = $dicitura[0]['diciturafissafattura']; - echo " + echo "

".nl2br($testo).'

'; @@ -273,10 +209,10 @@ echo ' '; echo ' '; -if(abs($records[0]['bollo']) > 0){ +if (abs($records[0]['bollo']) > 0) { echo ' '; -if(abs($records[0]['bollo']) > 0){ +if (abs($records[0]['bollo']) > 0) { echo '
'; -}else{ +} else { echo ' '; } @@ -287,7 +223,7 @@ if(abs($records[0]['bollo']) > 0){ } echo ' '; } @@ -302,7 +238,7 @@ if (abs($records[0]['bollo']) > 0) {
'; } -if(abs($records[0]['bollo']) > 0){ +if (abs($records[0]['bollo']) > 0) { echo '