From 9e4e687b3e6f1bbccb36b382bd2d3f54f35bf61e Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Mon, 15 Jul 2019 11:16:12 +0200 Subject: [PATCH] Aggiornamento stampe consuntivi --- include/common/sconto.php | 2 +- modules/contratti/plugins/addfattura.php | 60 -- .../contratti.fatturaordiniservizio.php | 377 ---------- .../contratti.ordiniservizio.interventi.php | 251 ------- .../plugins/contratti.ordiniservizio.php | 361 ---------- modules/interventi/modutil.php | 153 ----- .../interventi/src/Components/Sessione.php | 6 + modules/interventi/src/Intervento.php | 43 +- src/Prints.php | 4 + templates/contratti_cons/body.php | 643 ------------------ templates/contratti_cons/bottom.php | 69 ++ templates/contratti_cons/init.php | 12 +- templates/contratti_cons/piece.php | 3 + templates/contratti_cons/top.php | 66 ++ templates/interventi/body.php | 6 +- .../interventi_ordiniservizio/intervento.html | 12 - .../intervento_body.html | 48 -- .../pdfgen.interventi_ordiniservizio.php | 197 ------ templates/preventivi_cons/body.php | 561 --------------- templates/preventivi_cons/bottom.php | 49 ++ templates/preventivi_cons/init.php | 12 +- templates/preventivi_cons/piece.php | 3 + templates/preventivi_cons/top.php | 66 ++ templates/riepilogo_interventi/bottom.php | 6 +- templates/riepilogo_interventi/piece.php | 22 +- update/2_4_11.sql | 2 + 26 files changed, 341 insertions(+), 2693 deletions(-) delete mode 100644 modules/contratti/plugins/addfattura.php delete mode 100644 modules/contratti/plugins/contratti.fatturaordiniservizio.php delete mode 100644 modules/contratti/plugins/contratti.ordiniservizio.interventi.php delete mode 100644 modules/contratti/plugins/contratti.ordiniservizio.php delete mode 100644 templates/contratti_cons/body.php create mode 100644 templates/contratti_cons/bottom.php create mode 100644 templates/contratti_cons/piece.php create mode 100644 templates/contratti_cons/top.php delete mode 100644 templates/interventi_ordiniservizio/intervento.html delete mode 100644 templates/interventi_ordiniservizio/intervento_body.html delete mode 100644 templates/interventi_ordiniservizio/pdfgen.interventi_ordiniservizio.php delete mode 100644 templates/preventivi_cons/body.php create mode 100644 templates/preventivi_cons/bottom.php create mode 100644 templates/preventivi_cons/piece.php create mode 100644 templates/preventivi_cons/top.php diff --git a/include/common/sconto.php b/include/common/sconto.php index 82740d837..474c5128c 100644 --- a/include/common/sconto.php +++ b/include/common/sconto.php @@ -20,7 +20,7 @@ if ($options['action'] == 'add') { // Sconto unitario echo '
- {[ "type": "number", "label": "'.tr('Sconto/maggiorazione unitario').'", "name": "sconto_unitario", "value": "'.$result['sconto_unitario'].'", "icon-after": "'.currency().'", "help": "'.tr('Il valore positivo indica uno sconto: per applicare una maggiorazione inserire un valore negativo').'" ]} + {[ "type": "number", "label": "'.tr('Sconto/maggiorazione percentuale').'", "name": "sconto_percentuale", "icon-after": "%", "help": "'.tr('Il valore positivo indica uno sconto: per applicare una maggiorazione inserire un valore negativo').'. '.tr("L'importo dello sconto viene calcolato sul totale imponibile del documento al momento dell'aggiunta dello sconto").'." ]}
'; // Iva diff --git a/modules/contratti/plugins/addfattura.php b/modules/contratti/plugins/addfattura.php deleted file mode 100644 index 5a4891d3a..000000000 --- a/modules/contratti/plugins/addfattura.php +++ /dev/null @@ -1,60 +0,0 @@ -fetchArray('SELECT numero, (SELECT descrizione FROM an_zone WHERE id=(SELECT idzona FROM co_ordiniservizio_pianificazionefatture WHERE id='.prepare($idpianificazione).')) AS zona FROM co_contratti WHERE id='.prepare($idcontratto)); -$numero = $rs[0]['numero']; -$zona = $rs[0]['zona']; - -echo ' -
- '; - -// Data -echo ' -
-
- {[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1, "class": "text-center", "value": "-now-" ]} -
'; - -// Tipo di documento -echo ' -
- {[ "type": "select", "label": "'.tr('Tipo di fattura').'", "name": "idtipodocumento", "required": 1, "values": "query=SELECT * FROM co_tipidocumento WHERE dir=\'entrata\'" ]} -
'; - -// Sezionale -echo ' -
- {[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE id_module='.Modules::get('Fatture di vendita')['id'].' ORDER BY name", "value":"'.$_SESSION['module_'.Modules::get('Fatture di vendita')['id']]['id_segment'].'" ]} -
- -
'; - -// Note -echo ' -
-
- {[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "note", "value": "Rata '.$n_rata.' del contratto numero '.$numero.', zona '.$zona.'" ]} -
-
'; - -echo ' - -
-
- -
-
-
'; - -echo ' - '; diff --git a/modules/contratti/plugins/contratti.fatturaordiniservizio.php b/modules/contratti/plugins/contratti.fatturaordiniservizio.php deleted file mode 100644 index 4e8e0c385..000000000 --- a/modules/contratti/plugins/contratti.fatturaordiniservizio.php +++ /dev/null @@ -1,377 +0,0 @@ - $zone) { - foreach ($zone as $n => $idzona) { - $dbo->query('DELETE FROM co_ordiniservizio_pianificazionefatture WHERE idzona='.prepare($idzona).' AND iddocumento=0 AND idcontratto='.prepare($id_record)); - } - } - - // Ciclo fra le voci in arrivo dal form - foreach (post('zona') as $data_scadenza => $zone) { - // Ogni data può avere più zone da pianificare - foreach ($zone as $n => $idzona) { - // Aggiunta pianificazione solo se la zona è spuntata - if (in_array($idzona, post('idzona'))) { - // Creazione pianificazione - $dbo->query('INSERT INTO co_ordiniservizio_pianificazionefatture(idcontratto, data_scadenza, idzona, iddocumento) VALUES('.prepare($id_record).', '.prepare($data_scadenza).', '.prepare($idzona).', 0)'); - } - - $prev_data = $data_scadenza; - } - } - - flash()->info(tr('Pianificazione generata correttamente!')); -} - -// Eliminazione pianificazione specifica -elseif (get('op') == 'del_pianificazione') { - $idpianificazione = get('idpianificazione'); - - $n = $dbo->fetchNum('SELECT id FROM co_ordiniservizio_pianificazionefatture WHERE id='.prepare($idpianificazione)); - - if ($n == 1) { - // Eliminazione ordine di servizio - if ($dbo->query('DELETE FROM co_ordiniservizio_pianificazionefatture WHERE id='.prepare($idpianificazione))) { - flash()->info(tr('Pianificazione eliminata correttamente!')); - } - } -} - -// Creazione fattura pianificata -elseif (get('op') == 'addfattura') { - $idpianificazione = get('idpianificazione'); - $descrizione = post('note'); - $data = post('data'); - $idtipodocumento = post('idtipodocumento'); - $note = post('note'); - - // Lettura idanagrafica - $rs = $dbo->fetchArray('SELECT idanagrafica FROM co_contratti WHERE id='.prepare($id_record)); - $idanagrafica = $rs[0]['idanagrafica']; - - $dir = 'entrata'; - $idconto = setting('Conto predefinito fatture di vendita'); - $numero = get_new_numerofattura($data); - $id_segment = post('id_segment'); - $numero_esterno = get_new_numerosecondariofattura($data); - - // Tipo di pagamento + banca predefinite dall'anagrafica - $query = 'SELECT id, (SELECT idbanca_vendite FROM an_anagrafiche WHERE idanagrafica = '.prepare($idanagrafica).') AS idbanca FROM co_pagamenti WHERE id = (SELECT idpagamento_vendite AS pagamento FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica).')'; - $rs = $dbo->fetchArray($query); - $idpagamento = $rs[0]['id']; - $idbanca = $rs[0]['idbanca']; - - // Se la fattura è di vendita e non è stato associato un pagamento predefinito al cliente leggo il pagamento dalle impostazioni - if ($dir == 'entrata' && $idpagamento == '') { - $idpagamento = setting('Tipo di pagamento predefinito'); - } - - // Se non è impostata la banca dell'anagrafica, uso quella del pagamento. - if (empty($idbanca)) { - // Banca predefinita del pagamento - $query = 'SELECT id FROM co_banche WHERE id_pianodeiconti3 = (SELECT idconto_vendite FROM co_pagamenti WHERE id = '.prepare($idpagamento).')'; - $rs = $dbo->fetchArray($query); - $idbanca = $rs[0]['id']; - } - - $query = 'INSERT INTO co_documenti(numero, numero_esterno, idanagrafica, idtipodocumento, idpagamento, data, idstatodocumento, note, idsede, id_segment, idconto, idbanca) VALUES ('.prepare($numero).', '.prepare($numero_esterno).', '.prepare($idanagrafica).', '.prepare($idtipodocumento).', '.prepare($idpagamento).', '.prepare($data).", (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`='Bozza'), ".prepare($note).', (SELECT idsede_fatturazione FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica).'), '.prepare($id_segment).', '.prepare($idconto).', '.prepare($idbanca).' )'; - $dbo->query($query); - $iddocumento = $dbo->lastInsertedID(); - - // Imposto l'iddocumento anche sulla pianificazione, giusto per tener traccia della fattura generata - $dbo->query('UPDATE co_ordiniservizio_pianificazionefatture SET iddocumento='.prepare($iddocumento).' WHERE id='.prepare($idpianificazione)); - - // Leggo quante rate si vogliono pagare per dividerle per mese - $rs = $dbo->fetchArray('SELECT id FROM co_ordiniservizio_pianificazionefatture WHERE idcontratto='.prepare($id_record)); - - // L'importo deve essere diviso per il numero di mesi - $rs2 = $dbo->fetchArray('SELECT SUM(subtotale) AS totale FROM co_righe_contratti WHERE idcontratto='.prepare($id_record)); - $importo = $rs2[0]['totale'] / sizeof($rs); - - // Lettura iva del cliente o predefinita - $rs2 = $dbo->fetchArray('SELECT idiva_vendite AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica)); - $idiva = $rs2[0]['idiva']; - - if ($idiva != 0) { - $rs2 = $dbo->fetchArray('SELECT * FROM co_iva WHERE id='.prepare($idiva)); - } else { - $rs2 = $dbo->fetchArray('SELECT * FROM co_iva WHERE id='.prepare(setting('Iva predefinita'))); - } - - $desc_iva = $rs2[0]['descrizione']; - - $iva = $importo / 100 * $rs2[0]['percentuale']; - $iva_indetraibile = $importo / 100 * $rs2[0]['indetraibile']; - - // Inserimento riga in fattura - $dbo->query('INSERT INTO co_righe_documenti(iddocumento, idcontratto, descrizione, desc_iva, iva, iva_indetraibile, subtotale, um, qta, `order`) VALUES('.prepare($iddocumento).', '.prepare($id_record).', '.prepare($descrizione).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($importo).", '-', 1, (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento=".prepare($iddocumento).'))'); - - redirect($rootdir.'/editor.php?id_module='.Modules::get('Fatture di vendita')['id'].'&id_record='.$iddocumento.'&dir=entrata'); - exit(); -} - -echo ' -
-
-

'.tr('Pianificazione fatturazione').'

-
-
'; - -echo ' -

'.tr('Qui puoi programmare la fatturazione del contratto').'.

'; - -/* - Fatture pianificate -*/ -$rs = $dbo->fetchArray('SELECT *, (SELECT SUM(subtotale) FROM co_righe_contratti WHERE idcontratto='.prepare($id_record).') AS budget_contratto, (SELECT descrizione FROM an_zone WHERE id=idzona) AS zona FROM co_ordiniservizio_pianificazionefatture WHERE idcontratto='.prepare($id_record).' ORDER BY data_scadenza ASC'); - -if (empty($rs)) { - echo ' -

'.tr('Non sono ancora state pianificate fatture').'...

'; -} else { - $rs2 = $dbo->fetchArray('SELECT * FROM co_ordiniservizio_pianificazionefatture WHERE idcontratto='.prepare($id_record).' ORDER BY idzona'); - - for ($i = 0; $i < sizeof($rs2); ++$i) { - // Leggo quante rate sono pianificate per dividere l'importo delle sedi in modo corretto - ++$n_rate[$rs2[$i]['idzona']]; - - // Leggo il totale già fatturato per questa zona per toglierlo dalla divisione (totale/n_rate) - $rs3 = $dbo->fetchArray('SELECT SUM(subtotale-sconto) AS totale FROM co_righe_documenti WHERE iddocumento IN (SELECT iddocumento FROM co_ordiniservizio_pianificazionefatture WHERE iddocumento='.prepare($rs2[$i]['iddocumento']).')'); - $gia_fatturato[$rs2[$i]['idzona']] += $rs3[0]['totale']; - } - - echo ' - - - - - - - - - '; - - $prev_mese = ''; - $n_rata = 0; - - for ($i = 0; $i < sizeof($rs); ++$i) { - // Lettura numero di sedi in cui si sono pianificati ordini di servizio per la zona corrente - if (!empty($rs[$i]['idzona'])) { - $n_sedi_pianificate = $dbo->fetchNum('SELECT DISTINCT(idsede) FROM my_impianti WHERE id IN (SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare($id_record).') AND idsede IN(SELECT id FROM an_sedi WHERE idzona='.prepare($rs[$i]['idzona']).')'); - - // Verifico se ci sono impianti in questa zona legati alla sede legale - $n_sedi_pianificate += $dbo->fetchNum('SELECT DISTINCT(idsede) FROM my_impianti WHERE id IN (SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare($id_record).') AND idsede=(SELECT idsede FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM co_contratti WHERE id='.prepare($id_record).') AND idzona='.prepare($rs[$i]['idzona']).') AND idsede=0'); - } - // Fix nel caso non siano previste sedi pianificate (l'eventuale 0 portava a problemi nel calcolo dell'importo) - $n_sedi_pianificate = ($n_sedi_pianificate < 1) ? 1 : $n_sedi_pianificate; - // else{ - // $n_sedi_pianificate = $dbo->fetchNum("SELECT (idsede) FROM my_impianti WHERE id IN (SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto=\"".$id_record."\") AND idsede=0"); - // } - - echo ' - - '; - } - echo ' - '; - - // Sede - if ($rs[$i]['zona'] == '') { - $zona = 'Altro'; - } else { - $zona = $rs[$i]['zona']; - } - - if ($n_sedi_pianificate == 1) { - $n_sedi = tr('1 sede'); - } else { - $n_sedi = tr('_NUM_ sedi', [ - '_NUM_' => $n_sedi_pianificate, - ]); - } - - echo ' - '; - - /* - Importo - */ - // Se è stata emessa una fattura, bisogna utilizzare il totale della fattura da scalare al totale pianificato - if ($rs[$i]['iddocumento'] != 0) { - $rs2 = $dbo->fetchArray('SELECT SUM(subtotale-sconto) AS totale FROM co_righe_documenti WHERE iddocumento='.prepare($rs[$i]['iddocumento'])); - $importo = $rs2[0]['totale']; - } else { - // $importo = ($rs[$i]['budget_contratto'] * $n_sedi_pianificate / $n_rate[ $rs[$i]['idzona'] ]) - ($gia_fatturato[ $rs[$i]['idzona'] ] * $n_sedi_pianificate / sizeof($gia_fatturato[ $rs[$i]['idzona'] ]) ); - $importo = ($rs[$i]['budget_contratto'] * $n_sedi_pianificate / $n_rate[$rs[$i]['idzona']]); - } - - echo ' - '; - - // Documento collegato (fattura) - if ($rs[$i]['iddocumento'] != 0) { - $rsf = $dbo->fetchArray('SELECT numero, numero_esterno, data, (SELECT SUM(subtotale) FROM co_righe_documenti WHERE iddocumento=co_documenti.id) AS imponibile, (SELECT icona FROM co_statidocumento WHERE id=co_documenti.idstatodocumento) AS icona, (SELECT descrizione FROM co_statidocumento WHERE id=co_documenti.idstatodocumento) AS stato FROM co_documenti WHERE id='.prepare($rs[$i]['iddocumento'])); - - if ($rsf[0]['numero_esterno'] != '') { - $numero_doc = $rsf[0]['numero_esterno']; - } else { - $numero_doc = $rsf[0]['numero']; - } - - $documento = Modules::link('Fatture di vendita', $rs[$i]['iddocumento'], tr('Fattura num. _NUM_ del _DATE_', [ - '_NUM_' => $numero_doc, - '_DATE_' => Translator::dateToLocale($rsf[0]['data']), - ])); - - $stato = ' '.$rsf[0]['stato']; - } else { - $documento = ''; - $stato = ' '.tr('Non ancora fatturato'); - } - - // Link a fattura - echo ' - '; - - // Stato - echo ' - '; - - // Funzioni - echo ' - - '; - - $prev_mese = $rs[$i]['data_scadenza']; - } - echo ' -
'.tr('Scadenza').''.tr('Zona').''.tr('Importo').''.tr('Documento').''.tr('Stato').'
'; - // Data scadenza - if ($prev_mese != $rs[$i]['data_scadenza']) { - ++$n_rata; - echo ' - '.$mesi[intval(date('m', strtotime($rs[$i]['data_scadenza']))) - 1].' '.date('Y', strtotime($rs[$i]['data_scadenza'])).''.$zona.' ('.$n_sedi.') - '.moneyFormat($importo).'
- '.moneyFormat($rs[$i]['budget_contratto']).' x '.$n_sedi_pianificate.' sedi / '.$n_rate[$rs[$i]['idzona']].' rate'.$extra.' -
'.$documento.''.$stato.''; - if ($rs[$i]['iddocumento'] == 0) { - // Creazione fattura - echo " - '; - - // Eliminazione pianificazione - echo ' - - - '; - } - - echo ' -
'; -} -echo ' -

'; - -/* - Schema per pianificare la fatturazione per zona -*/ -$rs = $dbo->fetchArray('SELECT id, descrizione FROM an_zone WHERE ( id IN (SELECT idzona FROM an_sedi WHERE id IN (SELECT idsede FROM my_impianti WHERE id IN (SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare($id_record).'))) ) OR ( id=(SELECT idzona FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM co_contratti WHERE id='.prepare($id_record).") AND idzona=an_zone.id) ) UNION SELECT 0, 'Altro'"); - -if (sizeof($rs) == 0) { - echo ' -

'.tr('Non sono ancora stati pianificati ordini di servizio').'...

'; -} - -// Elenco voci di servizio con mesi in cui eseguirle -else { - // Calcolo mese iniziale e finale del contratto - $rs2 = $dbo->fetchArray('SELECT data_accettazione, data_conclusione, TIMESTAMPDIFF( MONTH, data_accettazione, data_conclusione ) AS mesi FROM co_contratti WHERE id='.prepare($id_record)); - $n_mesi = $rs2[0]['mesi'] + 1; - $mese_start = date('m', strtotime($rs2[0]['data_accettazione'])); - - echo " - -
'; - - echo " -
- "; - - // Indice zone fatturabili - echo ' -
-
- {[ "type": "select", "label": "'.tr('Zone per le quali pianificare la fatturazione').'", "name": "idzona[]", "values": "query=SELECT id, descrizione FROM an_zone WHERE (id IN (SELECT idzona FROM an_sedi WHERE id IN (SELECT idsede FROM my_impianti WHERE id IN (SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare($id_record).')))) OR ( id=(SELECT idzona FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM co_contratti WHERE id='.prepare($id_record).') AND idzona=an_zone.id) ) UNION SELECT 0, \'Altro\'", "multiple": 1, "extra": "onchange=\"$(this).find(\'option\').each( function(){ if( $(this).is(\':selected\') ){ $(\'#zona_\'+$(this).val()).removeClass(\'hide\'); }else{ $(\'#zona_\'+$(this).val()).addClass(\'hide\'); } });\"" ]} -
-
'; - - // Zone - for ($i = 0; $i < sizeof($rs); ++$i) { - echo ' -
- '.$rs[$i]['descrizione'].' -
-
'; - - for ($j = 0; $j < $n_mesi; ++$j) { - echo ' -
- -
'; - } - - echo ' -
-
'; - } - - echo " - -
-
"; - - // Pianificazione - echo " - '; - - echo ' -
'; -} - -echo ' -
-
'; diff --git a/modules/contratti/plugins/contratti.ordiniservizio.interventi.php b/modules/contratti/plugins/contratti.ordiniservizio.interventi.php deleted file mode 100644 index 884d08e11..000000000 --- a/modules/contratti/plugins/contratti.ordiniservizio.interventi.php +++ /dev/null @@ -1,251 +0,0 @@ - $eseguito) { - $presenza = post('presenza')[$idvoceservizio]; - $esito = post('esito')[$idvoceservizio]; - $priorita = post('priorita')[$idvoceservizio]; - - if (!$dbo->query('UPDATE co_ordiniservizio_vociservizio SET eseguito='.prepare($eseguito).', presenza='.prepare($presenza).', esito='.prepare($esito).', priorita='.prepare($priorita).', note='.prepare(post('note_ods')[$idvoceservizio]).' WHERE id='.prepare($idvoceservizio))) { - ++$n_errors; - } - } - } - - if ($n_errors == 0) { - flash()->info(tr('Voci di servizio salvate correttamente!')); - } else { - flash()->error(tr('Errore durante il salvataggio delle voci di servizio!')); - } - - // Aggiornamento 4 spunte - $dbo->query('UPDATE co_ordiniservizio SET copia_centrale='.prepare(post('copia_centrale')).', copia_cliente='.prepare(post('copia_cliente')).', copia_amministratore='.prepare(post('copia_amministratore')).'", funzionamento_in_sicurezza='.prepare(post('funzionamento_in_sicurezza')).' WHERE idintervento='.prepare($id_record)); -} - -/* - Visualizzazione voci di servizio collegate a questo intervento -*/ -// Info principali -$rs = $dbo->fetchArray('SELECT * FROM co_ordiniservizio WHERE idintervento='.prepare($idintervento)); -$check_copia_centrale = $rs[0]['copia_centrale']; -$check_copia_cliente = $rs[0]['copia_cliente']; -$check_copia_amministratore = $rs[0]['copia_amministratore']; -$check_funzionamento_in_sicurezza = $rs[0]['funzionamento_in_sicurezza']; - -if (sizeof($rs) == 0) { - echo ' -

'.tr('Nessun collegamento a ordini di servizio')."...

\n"; -} else { - echo ' -

'.tr('Ordine di servizio numero _NUM_ (termine massimo _DATE_)', [ - '_NUM_' => ''.$rs[0]['id'].'', - '_DATE_' => Translator::dateToLocale($rs[0]['data_scadenza']), -]).':

'; - - $rs = $dbo->fetchArray('SELECT * FROM co_ordiniservizio_vociservizio WHERE idordineservizio=(SELECT id FROM co_ordiniservizio WHERE idintervento='.prepare($idintervento).' LIMIT 0,1) ORDER BY categoria ASC'); - - echo ' -
-
-
- - - - - - - - - '; - - $prev_cat = ''; - - for ($i = 0; $i < sizeof($rs); ++$i) { - if ($prev_cat != $rs[$i]['categoria']) { - echo ' - - - '; - } - - echo ' - - '; - - // Presenza SI - if ($rs[$i]['presenza'] == '1') { - $attr_si = 'checked="true"'; - $attr_no = ''; - } - - // Presenza NO - elseif ($rs[$i]['presenza'] == '-1') { - $attr_si = ''; - $attr_no = 'checked="true"'; - } - - // Nessuna spunta - else { - $attr_si = ''; - $attr_no = ''; - } - - echo ' - '; - - // Eseguito SI - if ($rs[$i]['eseguito'] == '1') { - $attr_si = 'checked="true"'; - $attr_no = ''; - } - - // Eseguito NO - elseif ($rs[$i]['eseguito'] == '-1') { - $attr_si = ''; - $attr_no = 'checked="true"'; - } - - // Nessuna spunta - else { - $attr_si = ''; - $attr_no = ''; - } - - echo ' - '; - - // Esito SI - if ($rs[$i]['esito'] == '1') { - $attr_si = 'checked="true"'; - $attr_no = ''; - } - - // Esito NO - elseif ($rs[$i]['esito'] == '-1') { - $attr_si = ''; - $attr_no = 'checked="true"'; - } - - // Nessuna spunta - else { - $attr_si = ''; - $attr_no = ''; - } - - echo ' - '; - - // Priorità 1 - if ($rs[$i]['priorita'] == '1') { - $attr_1 = 'checked="true"'; - $attr_2 = ''; - $attr_3 = ''; - } - - // Priorità 2 - elseif ($rs[$i]['priorita'] == '2') { - $attr_1 = ''; - $attr_2 = 'checked="true"'; - $attr_3 = ''; - } - - // Priorità 3 - elseif ($rs[$i]['priorita'] == '3') { - $attr_1 = ''; - $attr_2 = ''; - $attr_3 = 'checked="true"'; - } - - // Nessuna priorità - else { - $attr_1 = ''; - $attr_2 = ''; - $attr_3 = ''; - } - - echo ' - '; - - echo ' - '; - - $prev_cat = $rs[$i]['categoria']; - } - - echo ' - -
'.tr('Voce di servizio').''.tr('Presenza').''.tr('Eseguito').''.tr('Esito').''.tr('Priorità').''.tr('Note').'
'.$rs[$i]['categoria'].'
'.$rs[$i]['voce'].' -
- '.tr('Sì').'
- '.tr('No').' -
-
-
- '.tr('Sì').'
- '.tr('No').' -
-
-
- '.tr('Pos.').'
- '.tr('Neg.').' -
-
-
- '.tr('A').'
- '.tr('M').' - '.tr('B').' -
-
- {[ "type": "text", "name": "note_ods['.$rs[$i]['id'].']", "value": "'.$rs[$i]['note'].'" ]} -
-
'; - - // Parte destra - echo ' -
'; - - echo ' - {[ "type": "checkbox", "label": "'.tr('Consegnata copia in centrale').'", "name": "copia_centrale", "value": "'.$check_copia_centrale.'" ]}'; - - echo ' - {[ "type": "checkbox", "label": "'.tr('Consegnata copia al cliente').'", "name": "copia_cliente", "value": "'.$check_copia_cliente.'" ]}'; - - echo ' - {[ "type": "checkbox", "label": "'.tr("Consegnata copia all'amministratore").'", "name": "copia_amministratore", "value": "'.$check_copia_amministratore.'" ]}'; - - if ($check_funzionamento_in_sicurezza == '1') { - $attr = 'checked="true"'; - } else { - $attr = ''; - } - echo ' - {[ "type": "checkbox", "label": "'.tr("L'impianto può funzionare in sicurezza").'", "name": "funzionamento_in_sicurezza", "value": "'.$check_funzionamento_in_sicurezza.'" ]}'; - - echo ' -
-
- -
- - - -
'; - - /* - Stampa intervento con voci di servizio - */ - echo ' -
- '.Prints::getLink('Ordine di servizio', $id_record, 'btn-primary', tr('Stampa ordine di servizio')).' -
'; -} diff --git a/modules/contratti/plugins/contratti.ordiniservizio.php b/modules/contratti/plugins/contratti.ordiniservizio.php deleted file mode 100644 index 1d063076d..000000000 --- a/modules/contratti/plugins/contratti.ordiniservizio.php +++ /dev/null @@ -1,361 +0,0 @@ - $ordiniservizio) { - $data_scadenza = date_create_from_format('Ym', $data_scadenza)->format(Intl\Formatter::getStandardFormats()['date']); - - // Ogni data può avere più voci di servizio da salvare - foreach ($ordiniservizio as $n => $idvoce) { - // Aggiunta ordine di servizio solo se la voce è spuntata - if (in_array($idvoce, post('idvoce'))) { - // Creazione ordine di servizio per data di scadenza - if ($prev_data != $data_scadenza) { - $dbo->query('INSERT INTO co_ordiniservizio(idcontratto, data_scadenza, idimpianto, stato) VALUES('.prepare($id_record).', '.prepare($data_scadenza).', '.prepare(post('matricola')).", 'aperto')"); - $idordineservizio = $dbo->lastInsertedID(); - } - - $dbo->query('INSERT INTO co_ordiniservizio_vociservizio(idordineservizio, voce, categoria, eseguito) VALUES('.prepare($idordineservizio).', (SELECT descrizione FROM in_vociservizio WHERE id='.prepare($idvoce).'), (SELECT categoria FROM in_vociservizio WHERE id='.prepare($idvoce).'), 0 )'); - } - - $prev_data = $data_scadenza; - } - } - - flash()->info(tr('Ordini di servizio generati correttamente!')); -} - -// Eliminazione pianificazione specifica -elseif (get('op') == 'del_ordineservizio') { - $idordineservizio = get('idordineservizio'); - - $n = $dbo->fetchNum('SELECT id FROM co_ordiniservizio WHERE id='.prepare($idordineservizio)." AND stato='aperto'"); - - if ($n == 1) { - // Eliminazione ordine di servizio - if ($dbo->query('DELETE FROM co_ordiniservizio WHERE id='.prepare($idordineservizio))) { - // Eliminazione voci di servizio collegate - $dbo->query('DELETE FROM co_ordiniservizio_vociservizio WHERE idordineservizio='.prepare($idordineservizio)); - - flash()->info(tr('Ordine di servizio eliminato correttamente!')); - } - } - - // Non si può eliminare l'ordine di servizio perché è chiuso - else { - flash()->info(tr('Ordine di servizio già chiuso, impossibile eliminarlo!')); - } -} - -echo ' -
-
-

'.tr('Pianificazione ordini di servizio').'

-
-
'; - -echo ' -

'.tr('Qui puoi programmare gli ordini di servizio del contratto').'.

'; - -/* - Ordini di servizio pianificati -*/ - -// (SELECT idsede FROM my_impianti WHERE idimpianto=co_ordiniservizio.idimpianto) - -$rs = $dbo->fetchArray("SELECT *, (SELECT CONCAT_WS(' ', nomesede, citta) FROM an_sedi WHERE id=(SELECT idsede FROM my_impianti WHERE idimpianto=co_ordiniservizio.idimpianto LIMIT 0,1)) AS sede, (SELECT CONCAT_WS(' - ', matricola, nome) FROM my_impianti WHERE id=co_ordiniservizio.idimpianto) AS impianto, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=co_ordiniservizio.idintervento) AS data_intervento FROM co_ordiniservizio WHERE idcontratto=".prepare($id_record).' ORDER BY data_scadenza ASC'); - -if (empty($rs)) { - echo ' -

'.tr('Non sono ancora stati pianificati ordini di servizio').'...

'; -} else { - echo ' - - - - - - - - - '; - - $prev_mese = ''; - - foreach ($rs as $r) { - echo ' - - '; - } else { - echo ' - '.$mesi[intval(date('m', strtotime($r['data_scadenza']))) - 1].' '.date('Y', strtotime($r['data_scadenza'])).''; - } - - // Sede - if ($r['sede'] == '') { - $sede = 'Sede legale'; - } else { - $sede = $r['sede']; - } - - echo ' - '; - - // Impianto - echo ' - '; - - // Voci di servizio - $rs2 = $dbo->fetchArray('SELECT * FROM co_ordiniservizio_vociservizio WHERE idordineservizio='.prepare($r['id']).' ORDER BY categoria ASC'); - - echo ' - '; - - // Stato - echo ' - '; - - // Funzioni - echo ' - - '; - - $prev_mese = $r['data_scadenza']; - } - echo ' -
'.tr('Entro').''.tr('Sede').''.tr('Impianto').''.tr('Voci di servizio').''.tr('Stato').'
'; - // Data scadenza - if ($prev_mese != $r['data_scadenza']) { - echo ' - '.$mesi[intval(date('m', strtotime($r['data_scadenza']))) - 1].' '.date('Y', strtotime($r['data_scadenza'])).' - '.$sede.' - '.Modules::link('MyImpianti', $r['idimpianto'], $r['impianto']).' - - '; - - // Popup voci di servizio - echo ' -
-
'; - - if (empty($rs2)) { - echo ' -

'.tr('Non sono state pianificate voci di servizio').'...

'; - } else { - echo ' - - - - - '; - - $prev_cat = ''; - - for ($v = 0; $v < sizeof($rs2); ++$v) { - if ($rs2[$v]['categoria'] != $prev_cat) { - echo ' - - - '; - } - - echo ' - - - - - '; - - $prev_cat = $rs2[$v]['categoria']; - } - - echo ' -
'.tr('Voci di servizio').''.tr('Eseguito').'
'.$rs2[$v]['categoria'].'
'.$rs2[$v]['voce'].''; - - // intervento non ancora eseguito - if (empty($r['idintervento'])) { - echo ' - - '.tr('non ancora eseguito').' - '; - } else { - $res = $dbo->fetchArray('SELECT codice FROM in_interventi WHERE id='.prepare($rsp[$i]['idintervento'])); - - echo ' - - - '.Modules::link('Interventi', $r['idintervento'], tr('Intervento num. _NUM_ del _DATE_', [ - '_NUM_' => $res['codice'], - '_DATE_' => Translator::dateToLocale($r[0]['data_intervento']), - ])).' - '; - } - echo ' -
'; - } - echo ' -
-
-
'; - if (empty($r['idintervento'])) { - echo ' - '.tr('aperto').''; - } else { - echo ' - '.tr('chiuso').'/span>'; - } - echo ' - '; - if (empty($r['idintervento'])) { - echo ' - - - '; - } - - echo ' -
'; -} - -echo ' -

'; - -/* - Schema per aggiungere ordini di servizio -*/ -$rs = $dbo->fetchArray('SELECT * FROM in_vociservizio ORDER BY categoria ASC'); - -if (empty($rs)) { - echo ' -

- '.tr('Non sono ancora state inserite voci di servizio').'. - '.tr('Inizia ora').'... -

'; -} - -// Elenco voci di servizio con mesi in cui eseguirle -else { - // Calcolo mese iniziale e finale del contratto - $rs2 = $dbo->fetchArray('SELECT data_accettazione, data_conclusione, TIMESTAMPDIFF(MONTH, data_accettazione, data_conclusione) AS mesi FROM co_contratti WHERE id='.prepare($id_record)); - - if (!empty($rs2[0]['data_accettazione']) && !empty($rs2[0]['data_conclusione'])) { - $n_mesi = $rs2[0]['mesi'] + 1; - $mese_start = date('m', strtotime($rs2[0]['data_accettazione'])); - - echo ' - - -
- '; - - // Selezione impianto - echo ' -
-
- {[ "type": "select", "label": "'.tr('Impianto').'", "name": "matricola", "values": "query=SELECT my_impianti.id, CONCAT(my_impianti.matricola, \" - \", my_impianti.nome) AS descrizione, an_sedi.optgroup FROM my_impianti INNER JOIN (SELECT id, CONCAT(an_sedi.nomesede, \"(\", an_sedi.citta, \")\") AS optgroup FROM an_sedi WHERE idanagrafica='.prepare($record['idanagrafica']).' UNION SELECT 0, \'Sede legale\') AS an_sedi ON my_impianti.idsede = an_sedi.id WHERE my_impianti.idanagrafica='.prepare($record['idanagrafica']).' AND my_impianti.id NOT IN(SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare($id_record).') ORDER BY idsede ASC, matricola ASC" ]} -
'; - - // Indice voci di servizio - echo ' -
- {[ "type": "select", "label": "'.tr('Voci di servizio da pianificare').'", "name": "idvoce[]", "values": "query=SELECT id, descrizione, categoria AS optgroup FROM in_vociservizio ORDER BY categoria ASC", "multiple": 1, "extra": "onchange=\"$(this).find(\'option\').each( function(){ if( $(this).is(\':selected\') ){ $(\'#voce_\'+$(this).val()).removeClass(\'hide\'); }else{ $(\'#voce_\'+$(this).val()).addClass(\'hide\'); } });\"" ]} -
-
'; - - // voci di servizio - foreach ($rs as $r) { - echo ' -
- '.$r['id'].' - '.$r['descrizione'].' -
'; - - for ($j = 0; $j < $n_mesi; ++$j) { - $id_mese = date('Ym', strtotime($rs2[0]['data_accettazione'].' +'.$j.' month')); - $nome_mese = $mesi[intval(date('m', strtotime($rs2[0]['data_accettazione'].' +'.$j.' month'))) - 1].' '.date('Y', strtotime($rs2[0]['data_accettazione'].' +'.$j.' month')); - echo ' - - -
'; - } - - echo ' -
'; - } - - echo ' -

'; - - echo ' - '; - - /* - Copia pianificazione da una già fatta per un impianto ad un'altra - */ - // Opzione di copia pianificazione solo se ci sono ancora impianti non pianificati - $query2 = 'SELECT * FROM my_impianti WHERE idanagrafica='.prepare($record['idanagrafica']).' AND id IN (SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare($id_record).')'; - $cont = $dbo->fetchNum($query2); - - if ($cont > 0) { - // Elenco impianti già pianificati - echo ' -
- -
-
- {[ "type": "select", "label": "'.tr('Copiare la pianificazione da un altro impianto').'", "name": "matricola_src", "values": "query=SELECT my_impianti.id, CONCAT(my_impianti.matricola, \" - \", my_impianti.nome) AS descrizione, an_sedi.optgroup FROM my_impianti INNER JOIN (SELECT id, CONCAT(an_sedi.nomesede, \"(\", an_sedi.citta, \")\") AS optgroup FROM an_sedi WHERE idanagrafica='.prepare($record['idanagrafica']).' UNION SELECT 0, \'Sede legale\') AS an_sedi ON my_impianti.idsede = an_sedi.id WHERE my_impianti.idanagrafica='.prepare($record['idanagrafica']).' AND my_impianti.id IN(SELECT idimpianto FROM co_ordiniservizio WHERE idcontratto='.prepare($id_record).') ORDER BY idsede ASC, matricola ASC" ]} -
-
'; - - echo ' -

'; - - echo ' - '; - } - - echo ' -
'; - } else { - echo ' -

'.tr('Le date di accettazione e conclusione del contratto non sono ancora state impostate').'

'; - } -} - -echo ' -
-
'; diff --git a/modules/interventi/modutil.php b/modules/interventi/modutil.php index 585286e15..f0bcaec42 100644 --- a/modules/interventi/modutil.php +++ b/modules/interventi/modutil.php @@ -160,159 +160,6 @@ function add_tecnico($idintervento, $idtecnico, $inizio, $fine, $idcontratto = n return true; } -function get_costi_intervento($id_intervento) -{ - $dbo = database(); - - $decimals = setting('Cifre decimali per importi'); - - $idiva = setting('Iva predefinita'); - $rs_iva = $dbo->fetchArray('SELECT descrizione, percentuale, indetraibile FROM co_iva WHERE id='.prepare($idiva)); - - $tecnici = $dbo->fetchArray('SELECT - - COALESCE(SUM( - ROUND(prezzo_ore_unitario_tecnico*ore, '.$decimals.') - ), 0) AS manodopera_costo, - COALESCE(SUM( - ROUND(prezzo_ore_unitario*ore, '.$decimals.') - ), 0) AS manodopera_addebito, - COALESCE(SUM( - ROUND(prezzo_ore_unitario*ore, '.$decimals.') - ROUND(sconto, '.$decimals.') - ), 0) AS manodopera_scontato, - - - COALESCE(SUM( - ROUND(prezzo_dirittochiamata_tecnico, '.$decimals.') - ), 0) AS dirittochiamata_costo, - COALESCE(SUM( - ROUND(prezzo_dirittochiamata, '.$decimals.') - ), 0) AS dirittochiamata_addebito, - COALESCE(SUM( - ROUND(prezzo_dirittochiamata, '.$decimals.') - ), 0) AS dirittochiamata_scontato, - - COALESCE(SUM( - ROUND(prezzo_km_consuntivo_tecnico, '.$decimals.') - ), 0) AS viaggio_costo, - COALESCE(SUM( - ROUND(prezzo_km_consuntivo, '.$decimals.') - ), 0) viaggio_addebito, - COALESCE(SUM( - ROUND(prezzo_km_consuntivo, '.$decimals.') - ROUND(scontokm, '.$decimals.') - ), 0) AS viaggio_scontato - - FROM in_interventi_tecnici WHERE idintervento='.prepare($id_intervento)); - - $articoli = $dbo->fetchArray('SELECT - COALESCE(SUM( - ROUND(prezzo_acquisto, '.$decimals.') * ROUND(qta, '.$decimals.') - ), 0) AS ricambi_costo, - COALESCE(SUM( - ROUND(prezzo_vendita, '.$decimals.') * ROUND(qta, '.$decimals.') - ), 0) AS ricambi_addebito, - COALESCE(SUM( - ROUND(prezzo_vendita, '.$decimals.') * ROUND(qta, '.$decimals.') - ROUND(sconto, '.$decimals.') - ), 0) AS ricambi_scontato, - ROUND( - (SELECT percentuale FROM co_iva WHERE co_iva.id=mg_articoli_interventi.idiva), '.$decimals.' - ) AS ricambi_iva - - FROM mg_articoli_interventi WHERE idintervento='.prepare($id_intervento)); - - $altro = $dbo->fetchArray('SELECT - COALESCE(SUM( - ROUND(prezzo_acquisto, '.$decimals.') * ROUND(qta, '.$decimals.') - ), 0) AS altro_costo, - COALESCE(SUM( - ROUND(prezzo_vendita, '.$decimals.') * ROUND(qta, '.$decimals.') - ), 0) AS altro_addebito, - COALESCE(SUM( - ROUND(prezzo_vendita, '.$decimals.') * ROUND(qta, '.$decimals.') - ROUND(sconto, '.$decimals.') - ), 0) AS altro_scontato, - ROUND( - (SELECT percentuale FROM co_iva WHERE co_iva.id=in_righe_interventi.idiva), '.$decimals.' - ) AS altro_iva - - FROM in_righe_interventi WHERE idintervento='.prepare($id_intervento)); - - $result = array_merge($tecnici[0], $articoli[0], $altro[0]); - - $result['totale_costo'] = sum([ - $result['manodopera_costo'], - $result['dirittochiamata_costo'], - $result['viaggio_costo'], - $result['ricambi_costo'], - $result['altro_costo'], - ]); - - $result['totale_addebito'] = sum([ - $result['manodopera_addebito'], - $result['dirittochiamata_addebito'], - $result['viaggio_addebito'], - $result['ricambi_addebito'], - $result['altro_addebito'], - ]); - - $result['totale_scontato'] = sum([ - $result['manodopera_scontato'], - $result['dirittochiamata_scontato'], - $result['viaggio_scontato'], - $result['ricambi_scontato'], - $result['altro_scontato'], - ]); - - $result['iva_costo'] = sum([ - $result['manodopera_costo'] * $rs_iva[0]['percentuale'] / 100, - $result['dirittochiamata_costo'] * $rs_iva[0]['percentuale'] / 100, - $result['viaggio_costo'] * $rs_iva[0]['percentuale'] / 100, - $result['ricambi_costo'] * $result['ricambi_iva'] / 100, - $result['altro_costo'] * $result['altro_iva'] / 100, - ]); - - $result['iva_addebito'] = sum([ - $result['manodopera_addebito'] * $rs_iva[0]['percentuale'] / 100, - $result['dirittochiamata_addebito'] * $rs_iva[0]['percentuale'] / 100, - $result['viaggio_addebito'] * $rs_iva[0]['percentuale'] / 100, - $result['ricambi_addebito'] * $result['ricambi_iva'] / 100, - $result['altro_addebito'] * $result['altro_iva'] / 100, - ]); - - $result['iva_totale'] = sum([ - $result['manodopera_scontato'] * $rs_iva[0]['percentuale'] / 100, - $result['dirittochiamata_scontato'] * $rs_iva[0]['percentuale'] / 100, - $result['viaggio_scontato'] * $rs_iva[0]['percentuale'] / 100, - $result['ricambi_scontato'] * $result['ricambi_iva'] / 100, - $result['altro_scontato'] * $result['altro_iva'] / 100, - ]); - - $result['totaleivato_costo'] = sum([ - $result['manodopera_costo'] + ($result['manodopera_costo'] * $rs_iva[0]['percentuale'] / 100), - $result['dirittochiamata_costo'] + ($result['dirittochiamata_costo'] * $rs_iva[0]['percentuale'] / 100), - $result['viaggio_costo'] + ($result['viaggio_costo'] * $rs_iva[0]['percentuale'] / 100), - $result['ricambi_costo'] + ($result['ricambi_costo'] * $result['ricambi_iva'] / 100), - $result['altro_costo'] + ($result['altro_costo'] * $result['altro_iva'] / 100), - ]); - - $result['totaleivato_addebito'] = sum([ - $result['manodopera_addebito'] + ($result['manodopera_addebito'] * $rs_iva[0]['percentuale'] / 100), - $result['dirittochiamata_addebito'] + ($result['dirittochiamata_addebito'] * $rs_iva[0]['percentuale'] / 100), - $result['viaggio_addebito'] + ($result['viaggio_addebito'] * $rs_iva[0]['percentuale'] / 100), - $result['ricambi_addebito'] + ($result['ricambi_addebito'] * $result['ricambi_iva'] / 100), - $result['altro_addebito'] + ($result['altro_addebito'] * $result['altro_iva'] / 100), - ]); - - $result['totale'] = sum([ - $result['manodopera_scontato'] + ($result['manodopera_scontato'] * $rs_iva[0]['percentuale'] / 100), - $result['dirittochiamata_scontato'] + ($result['dirittochiamata_scontato'] * $rs_iva[0]['percentuale'] / 100), - $result['viaggio_scontato'] + ($result['viaggio_scontato'] * $rs_iva[0]['percentuale'] / 100), - $result['ricambi_scontato'] + ($result['ricambi_scontato'] * $result['ricambi_iva'] / 100), - $result['altro_scontato'] + ($result['altro_scontato'] * $result['altro_iva'] / 100), - ]); - - return $result; -} - /** * Calcola le ore presenti tra due date. * diff --git a/modules/interventi/src/Components/Sessione.php b/modules/interventi/src/Components/Sessione.php index 5ec29f80e..bc6ac57e3 100644 --- a/modules/interventi/src/Components/Sessione.php +++ b/modules/interventi/src/Components/Sessione.php @@ -6,6 +6,7 @@ use Common\Model; use Modules\Anagrafiche\Anagrafica; use Modules\Interventi\Intervento; use Modules\Iva\Aliquota; +use Modules\TipiIntervento\Tipo as TipoSessione; /** * Notazione: i costi sono rivolti all'azienda, i prezzi al cliente. @@ -32,6 +33,11 @@ class Sessione extends Model return $this->belongsTo(Anagrafica::class, 'idtecnico'); } + public function tipo() + { + return $this->belongsTo(TipoSessione::class, 'idtipointervento'); + } + public function parent() { return $this->belongsTo(Intervento::class, $this->getParentID()); diff --git a/modules/interventi/src/Intervento.php b/modules/interventi/src/Intervento.php index 58ab37271..987bed10a 100644 --- a/modules/interventi/src/Intervento.php +++ b/modules/interventi/src/Intervento.php @@ -13,6 +13,8 @@ class Intervento extends Document { protected $table = 'in_interventi'; + protected $info = []; + /** * Crea un nuovo preventivo. * @@ -41,11 +43,46 @@ class Intervento extends Document public function getOreTotaliAttribute() { - $sessioni = $this->sessioni; + if (!isset($this->info['ore_totali'])) { + $sessioni = $this->sessioni; - $ore = $sessioni->sum('ore'); + $this->info['ore_totali'] = $sessioni->sum('ore'); + } - return $ore; + return $this->info['ore_totali']; + } + + public function getKmTotaliAttribute() + { + if (!isset($this->info['km_totali'])) { + $sessioni = $this->sessioni; + + $this->info['km_totali'] = $sessioni->sum('km'); + } + + return $this->info['km_totali']; + } + + public function getInizioAttribute() + { + if (!isset($this->info['inizio'])) { + $sessioni = $this->sessioni; + + $this->info['inizio'] = $sessioni->min('orario_inizio'); + } + + return $this->info['inizio']; + } + + public function getFineAttribute() + { + if (!isset($this->info['fine'])) { + $sessioni = $this->sessioni; + + $this->info['fine'] = $sessioni->max('orario_fine'); + } + + return $this->info['fine']; } /** diff --git a/src/Prints.php b/src/Prints.php index cf87f5d9e..7c6860ab1 100644 --- a/src/Prints.php +++ b/src/Prints.php @@ -490,6 +490,8 @@ class Prints include self::filepath($id_print, 'top.php'); $top = ob_get_clean(); + $top = str_replace(array_keys($replaces), array_values($replaces), $top); + $mpdf->WriteHTML($top); foreach ($records as $record) { @@ -504,6 +506,8 @@ class Prints include self::filepath($id_print, 'bottom.php'); $bottom = ob_get_clean(); + $bottom = str_replace(array_keys($replaces), array_values($replaces), $bottom); + $mpdf->WriteHTML($bottom); $report = ''; diff --git a/templates/contratti_cons/body.php b/templates/contratti_cons/body.php deleted file mode 100644 index 69d9b3bc8..000000000 --- a/templates/contratti_cons/body.php +++ /dev/null @@ -1,643 +0,0 @@ - -
-
-

'.tr('Consuntivo', [], ['upper' => true]).'

- '.tr('Contratto num. _NUM_ del _DATE_', [ - '_NUM_' => $records[0]['numero'], - '_DATE_' => Translator::dateToLocale($records[0]['data']), - ], ['upper' => true]).' -
-
- -
- - - - - - - - - - - - - - -
-

'.tr('Spett.le', [], ['upper' => true]).'

-

$c_ragionesociale$

-

$c_indirizzo$ $c_citta_full$

-
-

'.tr('Partita IVA', [], ['upper' => true]).'

-
- $c_piva$ -
-

'.tr('Codice fiscale', [], ['upper' => true]).'

-
- $c_codicefiscale$ -
-
-'; - -// Descrizione -if (!empty($records[0]['descrizione'])) { - echo ' -

'.nl2br($records[0]['descrizione']).'

-
'; -} - -$totale_ore_impiegate = 0; - -$sconto = []; -$imponibile = []; - -$interventi = $dbo->fetchArray('SELECT in_interventi.id, in_interventi.codice, - (SELECT GROUP_CONCAT(DISTINCT ragione_sociale) FROM in_interventi_tecnici JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = in_interventi_tecnici.idtecnico WHERE idintervento=in_interventi.id) AS tecnici, - (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS inizio, - (SELECT SUM(ore) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS ore, - (SELECT MIN(km) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS km - FROM co_promemoria - INNER JOIN in_interventi ON co_promemoria.idintervento=in_interventi.id - WHERE co_promemoria.idcontratto='.prepare($id_record).' -UNION - SELECT in_interventi.id, in_interventi.codice, - (SELECT GROUP_CONCAT(DISTINCT ragione_sociale) FROM in_interventi_tecnici JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = in_interventi_tecnici.idtecnico WHERE idintervento=in_interventi.id) AS tecnici, - (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS inizio, - (SELECT SUM(ore) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS ore, - (SELECT MIN(km) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS km - FROM in_interventi - WHERE id_contratto = '.prepare($id_record).' -ORDER BY id DESC'); - -if (!empty($interventi)) { - // Interventi - echo " - - - - - - - - - - - - '; - - $ore = []; - $km = []; - $sconto_int = []; - $imponibile_int = []; - - foreach ($interventi as $int) { - $int = array_merge($int, get_costi_intervento($int['id'])); - $int['sconto'] = ($int['manodopera_addebito'] - $int['manodopera_scontato']) + ($int['viaggio_addebito'] - $int['viaggio_scontato']); - $int['subtotale'] = $int['manodopera_scontato'] + $int['viaggio_scontato']; - - echo ' - - '; - - echo ' - - - '; - - if ($options['pricing']) { - echo ' - - - - '; - } else { - echo ' - - '; - } - - echo ' - '; - - // Calcolo il totale delle ore lavorate - $tecnici = $dbo->fetchArray('SELECT orario_inizio, orario_fine FROM in_interventi_tecnici WHERE idintervento='.prepare($int['id'])); - foreach ($tecnici as $tecnico) { - $totale_ore_impiegate += calcola_ore_intervento($tecnico['orario_inizio'], $tecnico['orario_fine']); - } - - $ore[] = $int['ore']; - $km[] = $int['km']; - - $sconto_int[] = $sconto; - $imponibile_int[] = $int['subtotale']; - } - - $ore = sum($ore); - $km = sum($km); - - $sconto_int = sum($sconto_int); - $imponibile_int = sum($imponibile_int); - $totale_int = $imponibile_int - $sconto_int; - - $sconto[] = $sconto_int; - $imponibile[] = $imponibile_int; - - echo ' - '; - - // Totale interventi - echo ' - - - - - - '; - - if ($options['pricing']) { - echo ' - - - - '; - } else { - echo ' - - '; - } - - echo ' - '; - - echo ' -
".tr('Attività', [], ['upper' => true])."".tr('Ore', [], ['upper' => true])."".tr('Km', [], ['upper' => true])."".tr('Sconto', [], ['upper' => true])."".tr('Imponibile', [], ['upper' => true]).'
- '.tr('Intervento num. _NUM_ del _DATE_', [ - '_NUM_' => $int['codice'], - '_DATE_' => Translator::dateToLocale($int['inizio']), - ]); - - if (!empty($int['tecnici'])) { - echo ' -
'.tr('Tecnici').': '.str_replace(',', ', ', $int['tecnici']).'.'; - } - - echo ' -
- '.Translator::numberToLocale($int['ore']).' - - '.Translator::numberToLocale($int['km']).' - - '.moneyFormat($int['sconto']).' - - '.moneyFormat($int['subtotale']).' - --
- '.tr('Totale', [], ['upper' => true]).': - - '.Translator::numberToLocale($ore).' - - '.Translator::numberToLocale($km).' - - '.moneyFormat($sconto_int).' - - '.moneyFormat($totale_int).' - --
'; - - $count = $dbo->fetchArray('SELECT COUNT(*) FROM `mg_articoli_interventi` WHERE idintervento IN ('.implode(',', array_column($interventi, 'id')).')'); - if (!empty($count)) { - echo ' - - - - - - - - - - - - - - - - - - '; - - $sconto_art = []; - $imponibile_art = []; - - // Articoli per intervento - foreach ($interventi as $int) { - $righe = $dbo->fetchArray("SELECT *, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice, (SELECT CONCAT_WS(serial, 'SN: ', ', ') FROM mg_prodotti WHERE mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo) AS serials FROM `mg_articoli_interventi` WHERE idintervento =".prepare($int['id']).' ORDER BY idarticolo ASC'); - - foreach ($righe as $r) { - echo ' - '; - - // Descrizione - echo ' - '; - - // Quantità - echo ' - '; - - if ($options['pricing']) { - // Prezzo unitario - echo " - '; - - // Netto - $netto = $r['prezzo_vendita'] * $r['qta']; - echo ' - '; - } else { - echo ' - - '; - } - - echo ' - - '; - - $sconto_art[] = $r['sconto']; - $imponibile_art[] = $r['prezzo_vendita'] * $r['qta']; - } - } - - echo ' - '; - - $sconto_art = sum($sconto_art); - $imponibile_art = sum($imponibile_art); - $totale_art = $imponibile_art - $sconto_art; - - $sconto[] = $sconto_art; - $imponibile[] = $imponibile_art; - - // Totale spesa articoli - if ($options['pricing']) { - echo ' - - - - - '; - } - - echo ' -
- '.tr('Materiale utilizzato', [], ['upper' => true]).' -
- '.tr('Descrizione').' - - '.tr('Q.tà').' - - '.tr('Prezzo').' - - '.tr('Importo').' -
- '.$r['descrizione']; - - // Codice - if (!empty($r['codice'])) { - echo ' -
'.tr('COD. _COD_', [ - '_COD_' => $r['codice'], - ]).''; - } - - echo ' -
'.tr('Intervento num. _NUM_ del _DATE_', [ - '_NUM_' => $int['codice'], - '_DATE_' => Translator::dateToLocale($int['inizio']), - ]).'.'; - - echo ' -
- '.Translator::numberToLocale($r['qta'], 'qta').' '.$r['um'].' - - ".moneyFormat($r['prezzo_vendita']); - - if ($r['sconto'] > 0) { - echo " -
- ".tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($r['sconto_unitario']), - '_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : currency()), - ]).''; - - if ($count <= 1) { - $count += 0.4; - } - } - - echo ' -
- '.moneyFormat($netto); - - if ($r['sconto'] > 0) { - echo " -
- ".tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($r['sconto']), - '_TYPE_' => currency(), - ]).''; - - if ($count <= 1) { - $count += 0.4; - } - } - - echo ' -
--
- '.tr('Totale materiale utilizzato', [], ['upper' => true]).': - - '.moneyFormat($totale_art).' -
'; - } - - // Altre spese per intervento - $count = $dbo->fetchArray('SELECT COUNT(*) FROM `in_righe_interventi` WHERE idintervento IN ('.implode(',', array_column($interventi, 'id')).')'); - if (!empty($count)) { - echo ' - - - - - - - - - - - - - - - - - - '; - - $sconto_spese = []; - $imponibile_spese = []; - - // Articoli per intervento - foreach ($interventi as $int) { - $righe = $dbo->fetchArray('SELECT * FROM `in_righe_interventi` WHERE idintervento ='.prepare($int['id']).' ORDER BY id ASC'); - - foreach ($righe as $r) { - echo ' - '; - - // Descrizione - echo ' - '; - - // Quantità - echo ' - '; - - if ($options['pricing']) { - // Prezzo unitario - echo " - '; - - // Netto - $netto = $r['prezzo_vendita'] * $r['qta']; - echo ' - '; - } else { - echo ' - - '; - } - - echo ' - '; - - $sconto_spese[] = $r['sconto']; - $imponibile_spese[] = $r['prezzo_vendita'] * $r['qta']; - } - } - - echo ' - '; - - $sconto_spese = sum($sconto_spese); - $imponibile_spese = sum($imponibile_spese); - $totale_spese = $imponibile_spese - $sconto_spese; - - $sconto[] = $sconto_spese; - $imponibile[] = $imponibile_spese; - - // Totale spese aggiuntive - echo ' - - - - - '; - - echo ' -
- '.tr('Spese aggiuntive', [], ['upper' => true]).' -
- '.tr('Descrizione').' - - '.tr('Q.tà').' - - '.tr('Prezzo').' - - '.tr('Importo').' -
- '.$r['descrizione']; - - echo ' -
'.tr('Intervento num. _NUM_ del _DATE_', [ - '_NUM_' => $int['codice'], - '_DATE_' => Translator::dateToLocale($int['inizio']), - ]).'.'; - - echo ' -
- '.Translator::numberToLocale($r['qta'], 'qta').' '.$r['um'].' - - ".moneyFormat($r['prezzo_vendita']); - - if ($r['sconto'] > 0) { - echo " -
- ".tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($r['sconto_unitario']), - '_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : currency()), - ]).''; - - if ($count <= 1) { - $count += 0.4; - } - } - - echo ' -
- '.moneyFormat($netto); - - if ($r['sconto'] > 0) { - echo " -
- ".tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($r['sconto']), - '_TYPE_' => currency(), - ]).''; - - if ($count <= 1) { - $count += 0.4; - } - } - - echo ' -
--
- '.tr('Totale spese aggiuntive', [], ['upper' => true]).': - - '.moneyFormat($totale_spese).' -
'; - } -} - -// TOTALE COSTI FINALI -$sconto = sum($sconto); -$imponibile = sum($imponibile); - -$totale = $imponibile - $sconto; - -$rs = $dbo->fetchArray('SELECT SUM(subtotale-sconto) as budget FROM `co_righe_contratti` WHERE idcontratto = '.prepare($id_record)); -$budget = $rs[0]['budget']; - -$rs = $dbo->fetchArray("SELECT SUM(qta) AS totale_ore FROM `co_righe_contratti` WHERE um='ore' AND idcontratto = ".prepare($id_record)); -$totale_ore = $rs[0]['totale_ore']; - -$rapporto = $budget - $totale; - -// Totale imponibile -echo ' -'; - -if ($options['pricing']) { - // Pulisco da informazioni irrilevanti (imponibile,iva) - $show = false; - - if ($show) { - echo ' - - - - - '; - - // Eventuale sconto incondizionato - if (!empty($sconto)) { - echo ' - - - - - '; - - // Totale imponibile - echo ' - - - - - '; - } - - // IVA - $rs = $dbo->fetchArray('SELECT * FROM co_iva WHERE co_iva.id = '.prepare(setting('Iva predefinita'))); - $percentuale_iva = $rs[0]['percentuale']; - $iva = $totale / 100 * $percentuale_iva; - - echo ' - - - - - '; - - //$totale = sum($totale, $iva); - } - - // TOTALE - echo ' - - - - '; - - // BUDGET - echo ' - - - - '; - - // RAPPORTO - echo ' - - - - '; -} - -// ORE RESIDUE -if (!empty($totale_ore)) { - echo ' - - - -'; -} - -echo' -'; diff --git a/templates/contratti_cons/bottom.php b/templates/contratti_cons/bottom.php new file mode 100644 index 000000000..97ea77233 --- /dev/null +++ b/templates/contratti_cons/bottom.php @@ -0,0 +1,69 @@ +fetchArray("SELECT SUM(qta) AS totale_ore FROM `co_righe_contratti` WHERE um='ore' AND idcontratto = ".prepare($id_record)); +$totale_ore = $rs[0]['totale_ore']; +$totale_ore_impiegate = $records->sum('ore_totali'); + +if ($pricing || !empty($totale_ore)) { + // Totale imponibile + echo ' +'; + if ($pricing) { + // TOTALE + echo ' + + + + '; + + // BUDGET + echo ' + + + + '; + + // RAPPORTO + echo ' + + + + '; + } + + // ORE RESIDUE + if (!empty($totale_ore)) { + echo ' + + + + '; + } + + echo ' +
+ '.tr('Totale consuntivo (no iva)', [], ['upper' => true]).': + + '.moneyFormat($somma_totale_imponibile).' +
+ '.tr('Budget (no IVA)', [], ['upper' => true]).': + + '.moneyFormat($budget).' +
+ '.tr('Rapporto budget/spesa (no IVA)', [], ['upper' => true]).': + + '.moneyFormat($rapporto).' +
+ '.tr('Ore residue', [], ['upper' => true]).': + + '.Translator::numberToLocale($totale_ore - $totale_ore_impiegate).'
+

'.tr('Ore erogate').': '.Translator::numberToLocale($totale_ore_impiegate).'

+

'.tr('Ore in contratto').': '.Translator::numberToLocale($totale_ore).'

+
'; +} diff --git a/templates/contratti_cons/init.php b/templates/contratti_cons/init.php index 90d0c0011..6b468cbf7 100644 --- a/templates/contratti_cons/init.php +++ b/templates/contratti_cons/init.php @@ -2,10 +2,12 @@ include_once __DIR__.'/../../core.php'; -$module_name = 'Contratti'; +use Modules\Contratti\Contratto; -// Lettura info fattura -$records = $dbo->fetchArray('SELECT *, data_bozza AS data FROM co_contratti WHERE id='.prepare($id_record)); +$documento = Contratto::find($id_record); +$records = $documento->interventi; -$id_cliente = $records[0]['idanagrafica']; -$id_sede = $records[0]['idsede']; +$id_cliente = $documento['idanagrafica']; +$id_sede = $documento['idsede']; + +$pricing = $options['pricing']; diff --git a/templates/contratti_cons/piece.php b/templates/contratti_cons/piece.php new file mode 100644 index 000000000..0036b57c1 --- /dev/null +++ b/templates/contratti_cons/piece.php @@ -0,0 +1,3 @@ + +
+
+

'.tr('Consuntivo', [], ['upper' => true]).'

+ '.tr('Contratto num. _NUM_ del _DATE_', [ + '_NUM_' => $documento['numero'], + '_DATE_' => Translator::dateToLocale($documento['data_bozza']), + ], ['upper' => true]).' +
+
+ +
+ + + + + + + + + + + + + + +
+

'.tr('Spett.le', [], ['upper' => true]).'

+

$c_ragionesociale$

+

$c_indirizzo$ $c_citta_full$

+
+

'.tr('Partita IVA', [], ['upper' => true]).'

+
+ $c_piva$ +
+

'.tr('Codice fiscale', [], ['upper' => true]).'

+
+ $c_codicefiscale$ +
+
+'; + +// Descrizione +if (!empty($documento['descrizione'])) { + echo ' +

'.nl2br($documento['descrizione']).'

+
'; +} + +echo ' + + + + + + + + + + + '; diff --git a/templates/interventi/body.php b/templates/interventi/body.php index 8fbf650cd..513f2a542 100644 --- a/templates/interventi/body.php +++ b/templates/interventi/body.php @@ -302,12 +302,10 @@ foreach ($sessioni as $i => $sessione) { } // Ore lavorate -$ore = $documento->ore_totali; - echo ' '; // Costo totale manodopera @@ -334,7 +332,7 @@ echo ' echo ' '; // Costo trasferta diff --git a/templates/interventi_ordiniservizio/intervento.html b/templates/interventi_ordiniservizio/intervento.html deleted file mode 100644 index 80093f0bd..000000000 --- a/templates/interventi_ordiniservizio/intervento.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - $body$ - diff --git a/templates/interventi_ordiniservizio/intervento_body.html b/templates/interventi_ordiniservizio/intervento_body.html deleted file mode 100644 index ab296f360..000000000 --- a/templates/interventi_ordiniservizio/intervento_body.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - -
'.tr('Documento', [], ['upper' => true]).''.tr('Imponibile', [], ['upper' => true]).''.tr('Sconto', [], ['upper' => true]).''.tr('Totale imponibile', [], ['upper' => true]).'
- '.tr('Ore lavorate').':
'.Translator::numberToLocale($ore, 2).' + '.tr('Ore lavorate').':
'.Translator::numberToLocale($documento->ore_totali, 2).'
- '.tr('Km percorsi').':
'.Translator::numberToLocale($sessioni->sum('km'), 2).' + '.tr('Km percorsi').':
'.Translator::numberToLocale($documento->km_totali, 2).'
- - - -
- CONTROLLO EFFETTUATO DA:
-
- $f_ragionesociale$ - $f_indirizzo$ - $f_citta_full$ - $f_piva$ - $f_codicefiscale$ - $f_capsoc$ - $f_telefono$ - $f_sitoweb$ - $f_email$ -
-
- - - - - - - - - -
- Firma Tecnico


-
- ___________________________________


-
- Firma Cliente


-
- ___________________________________


-
- Firma Amministratore - - ___________________________________ -
-
- diff --git a/templates/interventi_ordiniservizio/pdfgen.interventi_ordiniservizio.php b/templates/interventi_ordiniservizio/pdfgen.interventi_ordiniservizio.php deleted file mode 100644 index 500e2184f..000000000 --- a/templates/interventi_ordiniservizio/pdfgen.interventi_ordiniservizio.php +++ /dev/null @@ -1,197 +0,0 @@ -fetchArray($query); -$idcliente = $rs[0]['idanagrafica']; -$data_intervento = $rs[0]['data_intervento']; - -$copia_centrale = $rs[0]['copia_centrale']; -$copia_cliente = $rs[0]['copia_cliente']; -$copia_amministratore = $rs[0]['copia_amministratore']; -$funzionamento_in_sicurezza = $rs[0]['funzionamento_in_sicurezza']; - -// carica report html -$report = file_get_contents($docroot.'/templates/interventi_ordiniservizio/intervento.html'); -$body = file_get_contents($docroot.'/templates/interventi_ordiniservizio/intervento_body.html'); - -include_once $docroot.'/templates/pdfgen_variables.php'; - -/* - Dati intervento -*/ -$body .= "\n"; - -// Titolo -$body .= "\n"; - -// Titolo "ordine di servizio" e tecnico -$body .= "\n"; -$body .= '\n"; -$body .= '\n"; -$body .= "\n"; - -$body .= "
Programmazione della manutenzione periodica
ORDINE DI SERVIZIO Num. '.$rs[0]['id']."TECNICO: '.$rs[0]['tecnico']."
\n\n\n"; - -/* - Dati intestazione doppia -*/ -// Info contratto -$rs2 = $dbo->fetchArray('SELECT * FROM co_contratti WHERE id="'.$rs[0]['idcontratto'].'"'); -$body .= "\n"; - -// Informazioni a sinistra -$body .= "\n"; -$body .= "\n"; - -/* - Info cliente -*/ -$body .= "\n"; -$body .= "
\n"; -$body .= ' Contratto num. '.$rs2[0]['numero'].":
\n"; -$body .= ' durata dal '.Translator::dateToLocale($rs2[0]['data_accettazione']).' al '.Translator::dateToLocale($rs2[0]['data_conclusione'])."
\n"; -$body .= ' Tipologia: '.$rs2[0]['nome']."

\n"; - -// Info impianto -$rs3 = $dbo->fetchArray('SELECT * FROM my_impianti WHERE id="'.$rs[0]['id'].'"'); -$body .= " Impianto:
\n"; -$body .= ' Matricola: '.$rs3[0]['matricola']."
\n"; -$body .= ' Tipologia: '.$rs3[0]['nome']."
\n"; -$body .= ' Data di installazione: '.Translator::dateToLocale($rs3[0]['data'])."
\n"; -$body .= ' Ubicazione: '.$rs3[0]['ubicazione']."
\n"; -$body .= ' Scala: '.$rs3[0]['scala']."
\n"; -$body .= ' Piano: '.$rs3[0]['piano']."

\n"; - -$body .= " Lavori da eseguire nel periodo:
\n"; -$body .= ' dal 01/'.date('m/Y', strtotime($rs[0]['data_scadenza'])).' al '.date('t/m/Y', strtotime($rs[0]['data_scadenza']))."

\n"; -$body .= "
\n"; - -// Sede impianto -$ripeti = true; -$rs2 = $dbo->fetchArray('SELECT * FROM an_sedi WHERE id=(SELECT idsede FROM my_impianti WHERE id="'.$rs[0]['id'].'")'); - -if ($rs2[0]['indirizzo'] != '') { - $body .= " Indirizzo impianto:
\n"; - $body .= ' '.$rs2[0]['nomesede']."
\n"; - $body .= ' '.$rs2[0]['indirizzo']."
\n"; - $body .= ' '.$rs2[0]['cap'].' '.$rs2[0]['citta'].' '.$rs2[0]['provincia']."

\n"; - $ripeti = false; -} - -$rs2 = $dbo->fetchArray('SELECT * FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id="'.$idintervento.'")'); - -if ($ripeti) { - $body .= " Indirizzo impianto:
\n"; - $body .= ' '.$rs2[0]['indirizzo']."
\n"; - $body .= ' '.$rs2[0]['cap'].' '.$rs2[0]['citta'].' '.$rs2[0]['provincia']."
\n"; - $body .= ' Telefono: '.$rs2[0]['telefono']."
\n"; - $body .= ' Email: '.$rs2[0]['email']."

\n"; - - $body .= " Cliente:
\n"; - $body .= ' '.$rs2[0]['indirizzo']."
\n"; - $body .= ' '.$rs2[0]['cap'].' '.$rs2[0]['citta'].' '.$rs2[0]['provincia']."
\n"; - $body .= ' Telefono: '.$rs2[0]['telefono']."
\n"; - $body .= ' Email: '.$rs2[0]['email']."
\n"; -} else { - $body .= " Cliente
\n"; - $body .= ' '.$rs2[0]['ragione_sociale']."
\n"; - $body .= ' '.$rs2[0]['indirizzo']."
\n"; - $body .= ' '.$rs2[0]['cap'].' '.$rs2[0]['citta'].' '.$rs2[0]['provincia']."
\n"; - $body .= ' Telefono: '.$rs2[0]['telefono']."
\n"; - $body .= ' Email: '.$rs2[0]['email']."
\n"; -} - -$body .= "

\n\n\n"; - -/* - Elenco voci di servizio -*/ -$rs = $dbo->fetchArray('SELECT * FROM co_ordiniservizio_vociservizio WHERE idordineservizio=(SELECT id FROM co_ordiniservizio WHERE idintervento="'.$idintervento.'" LIMIT 0,1) ORDER BY categoria ASC'); - -$body .= "\n"; -$body .= "\n"; -$body .= "\n"; -$body .= "\n"; -$body .= "\n"; -$body .= "\n"; - -$prev_cat = ''; - -for ($i = 0; $i < sizeof($rs); ++$i) { - if ($rs[$i]['eseguito'] == '1') { - $eseguito_si = "x"; - $eseguito_no = ''; - } elseif ($rs[$i]['eseguito'] == '-1') { - $eseguito_si = ''; - $eseguito_no = "x"; - } else { - $eseguito_si = ''; - $eseguito_no = ''; - } - - if ($prev_cat != $rs[$i]['categoria']) { - $body .= "\n"; - } - - $body .= "\n"; - $body .= "\n"; - $body .= "\n"; - $body .= "\n"; - - $prev_cat = $rs[$i]['categoria']; -} - -$body .= "
VERIFICHEESEGUITONON ESEGUITONOTE
".$rs[$i]['categoria']."
".$rs[$i]['voce']."  ".$eseguito_si."  ".$eseguito_no."  ".$rs[$i]['note']." 

\n\n\n"; - -/* - Spunte e note -*/ -$body .= "\n"; - -// Copia centrale -if ($copia_centrale == '1') { - $copia_centrale = 'Sì'; -} else { - $copia_centrale = 'NO'; -} -$body .= "\n"; - -// Copia cliente -if ($copia_cliente == '1') { - $copia_cliente = 'Sì'; -} else { - $copia_cliente = 'NO'; -} -$body .= "\n"; - -// Copia amministratore -if ($copia_amministratore == '1') { - $copia_amministratore = 'Sì'; -} else { - $copia_amministratore = 'NO'; -} -$body .= "\n"; - -// Funzionamento in sicurezza -if ($funzionamento_in_sicurezza == '1') { - $funzionamento_in_sicurezza = 'Sì'; -} else { - $funzionamento_in_sicurezza = 'NO'; -} -$body .= "\n"; - -$body .= "
\n"; -$body .= " Consegnata copia in centrale: $copia_centrale"; -$body .= "\n"; -$body .= " al cliente: $copia_cliente"; -$body .= "\n"; -$body .= " all'amministratore: $copia_amministratore"; -$body .= "
\n"; -$body .= '
In data '.Translator::dateToLocale($data_intervento)." l'impianto può funzionare in sicurezza: $funzionamento_in_sicurezza"; -$body .= "
\n\n\n"; diff --git a/templates/preventivi_cons/body.php b/templates/preventivi_cons/body.php deleted file mode 100644 index 7c96a08fe..000000000 --- a/templates/preventivi_cons/body.php +++ /dev/null @@ -1,561 +0,0 @@ - -
-
-

'.tr('Consuntivo', [], ['upper' => true]).'

- '.tr('Preventivo num. _NUM_ del _DATE_', [ - '_NUM_' => $records[0]['numero'], - '_DATE_' => Translator::dateToLocale($records[0]['data']), - ], ['upper' => true]).' -
-
- -
- - - - - - - - - - - - - - -
-

'.tr('Spett.le', [], ['upper' => true]).'

-

$c_ragionesociale$

-

$c_indirizzo$ $c_citta_full$

-
-

'.tr('Partita IVA', [], ['upper' => true]).'

-
- $c_piva$ -
-

'.tr('Codice fiscale', [], ['upper' => true]).'

-
- $c_codicefiscale$ -
-
-'; - -// Descrizione -if (!empty($records[0]['descrizione'])) { - echo ' -

'.nl2br($records[0]['descrizione']).'

-
'; -} - -$sconto = []; -$imponibile = []; - -$interventi = $dbo->fetchArray('SELECT *, in_interventi.id, in_interventi.codice, (SELECT GROUP_CONCAT(DISTINCT ragione_sociale) FROM in_interventi_tecnici JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = in_interventi_tecnici.idtecnico WHERE idintervento=in_interventi.id) AS tecnici, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS inizio, (SELECT SUM(ore) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS ore, (SELECT SUM(km) FROM in_interventi_tecnici WHERE idintervento=in_interventi.id) AS km FROM in_interventi WHERE in_interventi.id_preventivo='.prepare($id_record).' ORDER BY inizio DESC'); - -if (!empty($interventi)) { - // Interventi - echo " - - - - - - - - - - - - '; - - $ore = []; - $km = []; - $sconto_int = []; - $imponibile_int = []; - - foreach ($interventi as $int) { - $int = array_merge($int, get_costi_intervento($int['id'])); - $int['sconto'] = ($int['manodopera_addebito'] - $int['manodopera_scontato']) + ($int['viaggio_addebito'] - $int['viaggio_scontato']); - $int['subtotale'] = $int['manodopera_scontato'] + $int['viaggio_scontato']; - $sconto[] = $int['sconto_globale']; - - echo ' - - '; - - echo ' - - - - - - - - '; - - $ore[] = $int['ore']; - $km[] = $int['km']; - - $sconto_int[] = $sconto; - $imponibile_int[] = $int['subtotale']; - } - - $ore = sum($ore); - $km = sum($km); - - $sconto_int = sum($sconto_int); - $imponibile_int = sum($imponibile_int); - $totale_int = $imponibile_int - $sconto_int; - - $sconto[] = $sconto_int; - $imponibile[] = $imponibile_int; - - echo ' - '; - - // Totale interventi - echo ' - - - - - - - - - - - '; - - echo ' -
".tr('Attività', [], ['upper' => true])."".tr('Ore', [], ['upper' => true])."".tr('Km', [], ['upper' => true])."".tr('Sconto', [], ['upper' => true])."".tr('Imponibile', [], ['upper' => true]).'
- '.tr('Intervento num. _NUM_ del _DATE_', [ - '_NUM_' => $int['codice'], - '_DATE_' => Translator::dateToLocale($int['inizio']), - ]); - - if (!empty($int['tecnici'])) { - echo ' -
'.tr('Tecnici').': '.str_replace(',', ', ', $int['tecnici']).'.'; - } - - echo ' -
- '.Translator::numberToLocale($int['ore']).' - - '.Translator::numberToLocale($int['km']).' - - '.moneyFormat($int['sconto']).' - - '.moneyFormat($int['subtotale']).' -
- '.tr('Totale', [], ['upper' => true]).': - - '.Translator::numberToLocale($ore).' - - '.Translator::numberToLocale($km).' - - '.moneyFormat($sconto_int).' - - '.moneyFormat($totale_int).' -
'; - - $count = $dbo->fetchArray('SELECT COUNT(*) FROM `mg_articoli_interventi` WHERE idintervento IN ('.implode(',', array_column($interventi, 'id')).')'); - if (!empty($count)) { - echo ' - - - - - - - - - - - - - - - - - - '; - - $sconto_art = []; - $imponibile_art = []; - - // Articoli per intervento - foreach ($interventi as $int) { - $righe = $dbo->fetchArray("SELECT *, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice, (SELECT CONCAT_WS(serial, 'SN: ', ', ') FROM mg_prodotti WHERE mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo AND mg_prodotti.id_riga_intervento = mg_articoli_interventi.idintervento) AS serials FROM `mg_articoli_interventi` WHERE idintervento =".prepare($int['id']).' ORDER BY idarticolo ASC'); - - foreach ($righe as $r) { - echo ' - '; - - // Descrizione - echo ' - '; - - // Quantità - echo ' - '; - - // Prezzo unitario - echo " - '; - - // Netto - $netto = $r['prezzo_vendita'] * $r['qta']; - echo ' - - '; - - $sconto_art[] = $r['sconto']; - $imponibile_art[] = $r['prezzo_vendita'] * $r['qta']; - } - } - - echo ' - '; - - $sconto_art = sum($sconto_art); - $imponibile_art = sum($imponibile_art); - $totale_art = $imponibile_art - $sconto_art; - - $sconto[] = $sconto_art; - $imponibile[] = $imponibile_art; - - // Totale spesa articoli - echo ' - - - - - '; - - echo ' -
- '.tr('Materiale utilizzato', [], ['upper' => true]).' -
- '.tr('Descrizione').' - - '.tr('Q.tà').' - - '.tr('Prezzo').' - - '.tr('Importo').' -
- '.$r['descrizione']; - - // Codice - if (!empty($r['codice'])) { - echo ' -
'.tr('COD. _COD_', [ - '_COD_' => $r['codice'], - ]).''; - } - - echo ' -
'.tr('Intervento num. _NUM_ del _DATE_', [ - '_NUM_' => $int['codice'], - '_DATE_' => Translator::dateToLocale($int['inizio']), - ]).'.'; - - echo ' -
- '.Translator::numberToLocale($r['qta'], 'qta').' '.$r['um'].' - - ".moneyFormat($r['prezzo_vendita']); - - if ($r['sconto'] > 0) { - echo " -
- ".tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($r['sconto_unitario']), - '_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : currency()), - ]).''; - - if ($count <= 1) { - $count += 0.4; - } - } - - echo ' -
- '.moneyFormat($netto); - - if ($r['sconto'] > 0) { - echo " -
- ".tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($r['sconto']), - '_TYPE_' => currency(), - ]).''; - - if ($count <= 1) { - $count += 0.4; - } - } - - echo ' -
- '.tr('Totale materiale utilizzato', [], ['upper' => true]).': - - '.moneyFormat($totale_art).' -
'; - } - - // Altre spese per intervento - $count = $dbo->fetchArray('SELECT COUNT(*) FROM `in_righe_interventi` WHERE idintervento IN ('.implode(',', array_column($interventi, 'id')).')'); - if (!empty($count)) { - echo ' - - - - - - - - - - - - - - - - - - '; - - $sconto_spese = []; - $imponibile_spese = []; - - // Articoli per intervento - foreach ($interventi as $int) { - $righe = $dbo->fetchArray('SELECT * FROM `in_righe_interventi` WHERE idintervento ='.prepare($int['id']).' ORDER BY id ASC'); - - foreach ($righe as $r) { - echo ' - '; - - // Descrizione - echo ' - '; - - // Quantità - echo ' - '; - - // Prezzo unitario - echo " - '; - - // Netto - $netto = $r['prezzo_vendita'] * $r['qta']; - echo ' - - '; - - $sconto_spese[] = $r['sconto']; - $imponibile_spese[] = $r['prezzo_vendita'] * $r['qta']; - } - } - - echo ' - '; - - $sconto_spese = sum($sconto_spese); - $imponibile_spese = sum($imponibile_spese); - $totale_spese = $imponibile_spese - $sconto_spese; - - $sconto[] = $sconto_spese; - $imponibile[] = $imponibile_spese; - - // Totale spese aggiuntive - echo ' - - - - - '; - - echo ' -
- '.tr('Spese aggiuntive', [], ['upper' => true]).' -
- '.tr('Descrizione').' - - '.tr('Q.tà').' - - '.tr('Prezzo').' - - '.tr('Importo').' -
- '.$r['descrizione']; - - echo ' -
'.tr('Intervento num. _NUM_ del _DATE_', [ - '_NUM_' => $int['codice'], - '_DATE_' => Translator::dateToLocale($int['inizio']), - ]).'.'; - - echo ' -
- '.Translator::numberToLocale($r['qta'], 'qta').' '.$r['um'].' - - ".moneyFormat($r['prezzo_vendita']); - - if ($r['sconto'] > 0) { - echo " -
- ".tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($r['sconto_unitario']), - '_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : currency()), - ]).''; - - if ($count <= 1) { - $count += 0.4; - } - } - - echo ' -
- '.moneyFormat($netto); - - if ($r['sconto'] > 0) { - echo " -
- ".tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($r['sconto']), - '_TYPE_' => currency(), - ]).''; - - if ($count <= 1) { - $count += 0.4; - } - } - - echo ' -
- '.tr('Totale spese aggiuntive', [], ['upper' => true]).': - - '.moneyFormat($totale_spese).' -
'; - } -} - -// TOTALE COSTI FINALI -$sconto = sum($sconto); -$imponibile = sum($imponibile); - -$totale = $imponibile - $sconto; - -//$rs = $dbo->fetchArray('SELECT SUM(subtotale) as budget FROM `co_righe_preventivi` WHERE idpreventivo = '.prepare($id_record)); -//$budget = $rs[0]['budget']; -$budget = get_imponibile_preventivo($id_record); - -//pulisco da informazioni irrilevanti (imponibile,iva) -$show = false; - -$rapporto = floatval($budget) - floatval($totale); - -// Totale imponibile -echo ' -'; - -if ($show) { - echo ' - - - - '; - - // Eventuale sconto incondizionato - if (!empty($sconto)) { - echo ' - - - - - '; - - // Totale imponibile - echo ' - - - - - '; - } - - // IVA - $rs = $dbo->fetchArray('SELECT * FROM co_iva WHERE co_iva.id = '.prepare(setting('Iva predefinita'))); - $percentuale_iva = $rs[0]['percentuale']; - $iva = $totale / 100 * $percentuale_iva; - - echo ' - - - - - '; - - //$totale = sum($totale, $iva); -} - -// TOTALE -echo ' - - - - '; - -// BUDGET -echo ' - - - - '; - -// RAPPORTO -echo ' - - - - '; - -echo' -
- '.tr('Imponibile', [], ['upper' => true]).': - - '.moneyFormat($imponibile).' -
- '.tr('Sconto', [], ['upper' => true]).': - - -'.moneyFormat($sconto).' -
- '.tr('Totale imponibile', [], ['upper' => true]).': - - '.moneyFormat($totale).' -
- '.tr('Iva (_PRC_%)', [ - '_PRC_' => Translator::numberToLocale($percentuale_iva, 0), - ], ['upper' => true]).': - - '.moneyFormat($iva).' -
- '.tr('Totale consuntivo (no iva)', [], ['upper' => true]).': - - '.moneyFormat($totale).' -
- '.tr('Budget (no IVA)', [], ['upper' => true]).': - - '.moneyFormat($budget).' -
- '.tr('Rapporto budget/spesa (no IVA)', [], ['upper' => true]).': - - '.moneyFormat($rapporto).' -
'; diff --git a/templates/preventivi_cons/bottom.php b/templates/preventivi_cons/bottom.php new file mode 100644 index 000000000..a0ee97b4c --- /dev/null +++ b/templates/preventivi_cons/bottom.php @@ -0,0 +1,49 @@ +'; + + // TOTALE + echo ' + + + '.tr('Totale consuntivo (no iva)', [], ['upper' => true]).': + + + '.moneyFormat($somma_totale_imponibile).' + + '; + + // BUDGET + echo ' + + + '.tr('Budget (no IVA)', [], ['upper' => true]).': + + + '.moneyFormat($budget).' + + '; + + // RAPPORTO + echo ' + + + '.tr('Rapporto budget/spesa (no IVA)', [], ['upper' => true]).': + + + '.moneyFormat($rapporto).' + + '; + + echo ' +'; +} diff --git a/templates/preventivi_cons/init.php b/templates/preventivi_cons/init.php index de2488afe..4dd0d4d2f 100644 --- a/templates/preventivi_cons/init.php +++ b/templates/preventivi_cons/init.php @@ -2,10 +2,12 @@ include_once __DIR__.'/../../core.php'; -$module_name = 'Preventivi'; +use Modules\Preventivi\Preventivo; -// Lettura info fattura -$records = $dbo->fetchArray('SELECT *, data_bozza AS data FROM co_preventivi WHERE id='.prepare($id_record)); +$documento = Preventivo::find($id_record); +$records = $documento->interventi; -$id_cliente = $records[0]['idanagrafica']; -$id_sede = $records[0]['idsede']; +$id_cliente = $documento['idanagrafica']; +$id_sede = $documento['idsede']; + +$pricing = $options['pricing']; diff --git a/templates/preventivi_cons/piece.php b/templates/preventivi_cons/piece.php new file mode 100644 index 000000000..0036b57c1 --- /dev/null +++ b/templates/preventivi_cons/piece.php @@ -0,0 +1,3 @@ + +
+
+

'.tr('Consuntivo', [], ['upper' => true]).'

+ '.tr('Preventivo num. _NUM_ del _DATE_', [ + '_NUM_' => $documento['numero'], + '_DATE_' => Translator::dateToLocale($documento['data_bozza']), + ], ['upper' => true]).' +
+
+ +
+ + + + + + + + + + + + + + +
+

'.tr('Spett.le', [], ['upper' => true]).'

+

$c_ragionesociale$

+

$c_indirizzo$ $c_citta_full$

+
+

'.tr('Partita IVA', [], ['upper' => true]).'

+
+ $c_piva$ +
+

'.tr('Codice fiscale', [], ['upper' => true]).'

+
+ $c_codicefiscale$ +
+
+'; + +// Descrizione +if (!empty($documento['descrizione'])) { + echo ' +

'.nl2br($documento['descrizione']).'

+
'; +} + +echo ' + + + + + + + + + + + '; diff --git a/templates/riepilogo_interventi/bottom.php b/templates/riepilogo_interventi/bottom.php index 55d1d5cf3..6f87d8e34 100644 --- a/templates/riepilogo_interventi/bottom.php +++ b/templates/riepilogo_interventi/bottom.php @@ -12,9 +12,9 @@ echo ' - - - + + +
'.tr('Documento', [], ['upper' => true]).''.tr('Imponibile', [], ['upper' => true]).''.tr('Sconto', [], ['upper' => true]).''.tr('Totale imponibile', [], ['upper' => true]).'
'.tr('Totale', [], ['upper' => true]).': '.moneyFormat($somma_imponibile, 2).''.moneyFormat($somma_sconto, 2).''.moneyFormat($somma_totale_imponibile, 2).''.($pricing ? moneyFormat($somma_imponibile, 2) : '-').''.($pricing ? moneyFormat($somma_sconto, 2) : '-').''.($pricing ? moneyFormat($somma_totale_imponibile, 2) : '-').'
'; diff --git a/templates/riepilogo_interventi/piece.php b/templates/riepilogo_interventi/piece.php index 081eadb9e..15f936a0e 100644 --- a/templates/riepilogo_interventi/piece.php +++ b/templates/riepilogo_interventi/piece.php @@ -4,6 +4,7 @@ include_once __DIR__.'/../../core.php'; use Modules\Interventi\Intervento; +print_r($record['id']); $intervento = Intervento::find($record['id']); $imponibile = $intervento->imponibile; @@ -14,19 +15,22 @@ $somma_imponibile[] = $imponibile; $somma_sconto[] = $sconto; $somma_totale_imponibile[] = $totale_imponibile; +$pricing = isset($pricing) ? $pricing : true; + // Informazioni intervento echo '

'.tr('Intervento _NUM_ del _DATE_', [ - '_NUM_' => $intervento['codice'], - '_DATE_' => dateFormat($record['Data inizio']), + '_NUM_' => $intervento->codice, + '_DATE_' => dateFormat($intervento->inizio), ]).'

- '.tr('Cliente').': '.$intervento->anagrafica->ragione_sociale.' +

'.tr('Cliente').': '.$intervento->anagrafica->ragione_sociale.'

+

'.tr('Stato').': '.$intervento->stato->descrizione.'

- '.moneyFormat($imponibile, 2).' - '.moneyFormat($sconto, 2).' - '.moneyFormat($totale_imponibile, 2).' + '.($pricing ? moneyFormat($imponibile, 2) : '-').' + '.($pricing ? moneyFormat($sconto, 2) : '-').' + '.($pricing ? moneyFormat($totale_imponibile, 2) : '-').' '; // Sessioni @@ -45,7 +49,7 @@ if (!empty($sessioni)) { echo ' - '.$sessione->anagrafica->ragione_sociale.' + '.$sessione->anagrafica->ragione_sociale.' ('.$sessione->tipo->descrizione.') '.dateFormat($sessione->orario_inizio).' '.timeFormat($sessione->orario_inizio).' '.timeFormat($sessione->orario_fine).' @@ -71,8 +75,8 @@ if (!$righe->isEmpty()) { '.$riga->descrizione.' '.$riga->qta.' '.$riga->um.' - '.moneyFormat($riga->prezzo_unitario_vendita).' - '.moneyFormat($riga->totale_imponibile).' + '.($pricing ? moneyFormat($riga->prezzo_unitario_vendita) : '-').' + '.($pricing ? moneyFormat($riga->totale_imponibile) : '-').' '; } } diff --git a/update/2_4_11.sql b/update/2_4_11.sql index 21b154f81..33f222c32 100644 --- a/update/2_4_11.sql +++ b/update/2_4_11.sql @@ -1 +1,3 @@ UPDATE `zz_prints` SET `filename` = 'Preventivo num. {numero} del {data}' WHERE `name` = 'Preventivo (senza totali)'; + +DELETE FROM `zz_plugins` WHERE `name` = 'Pianificazione ordini di servizio';