From 62ea086d8cbe031614e76aa69f8d1bff6462ae8d Mon Sep 17 00:00:00 2001 From: Luca Date: Fri, 17 Dec 2021 10:32:43 +0100 Subject: [PATCH 1/5] Aggiunta riferimenti nuove tabelle - an_mansioni - em_mansioni_template --- update/tables.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/update/tables.php b/update/tables.php index c305d13de..9b5ab4159 100755 --- a/update/tables.php +++ b/update/tables.php @@ -4,6 +4,7 @@ return [ 'an_anagrafiche', 'an_anagrafiche_agenti', 'an_nazioni', + 'an_mansioni', 'an_referenti', 'an_relazioni', 'an_sedi', @@ -54,6 +55,7 @@ return [ 'em_accounts', 'em_templates', 'em_newsletters', + 'em_mansioni_template', 'em_lists', 'em_list_receiver', 'em_emails', From c6e0b98215d24ccb0d14e30755684fce7c3e1fb9 Mon Sep 17 00:00:00 2001 From: Luca Date: Fri, 17 Dec 2021 10:39:29 +0100 Subject: [PATCH 2/5] Update edit.php --- modules/interventi/edit.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/interventi/edit.php b/modules/interventi/edit.php index cc488eaf8..3acbe08eb 100755 --- a/modules/interventi/edit.php +++ b/modules/interventi/edit.php @@ -31,7 +31,7 @@ $numero_previsto = verifica_numero_intervento($intervento); if (!empty($numero_previsto) && intval((setting('Verifica numero intervento')))) { echo '
- '.tr("E' assente una attività di numero _NUM_ in data precedente o corrispondente a _DATE_: potrebbero esserci un errore di continuità con la numerazione corrente delle attività", [ + '.tr("E' assente una attività di numero _NUM_ in data precedente o corrispondente a _DATE_: potrebbero esserci alcuni errori di continuità con la numerazione delle attività", [ '_DATE_' => dateFormat($intervento->data_richiesta), '_NUM_' => '"'.$numero_previsto.'"', ]).'. From f33c62e07a3ac6a13261c592425d65e93bd21b95 Mon Sep 17 00:00:00 2001 From: MatteoPistorello Date: Fri, 17 Dec 2021 10:52:21 +0100 Subject: [PATCH 3/5] Gestione rimozione variante da combinazione --- modules/combinazioni_articoli/actions.php | 10 ++++++++++ modules/combinazioni_articoli/edit.php | 13 +++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/modules/combinazioni_articoli/actions.php b/modules/combinazioni_articoli/actions.php index b56fb7f61..3b9316b85 100644 --- a/modules/combinazioni_articoli/actions.php +++ b/modules/combinazioni_articoli/actions.php @@ -67,6 +67,16 @@ switch (filter('op')) { break; + case 'remove-variante': + $id_articolo = filter('id_articolo'); + + $database->delete('mg_articolo_attributo', ['id_articolo' => $id_articolo]); + $database->update('mg_articoli', ['id_combinazione' => null], ['id' => $id_articolo]); + + flash()->info(tr('Variante rimossa correttamente!')); + + break; + case 'genera-varianti': $combinazione->generaTutto(); diff --git a/modules/combinazioni_articoli/edit.php b/modules/combinazioni_articoli/edit.php index 190809cbd..d14688aef 100644 --- a/modules/combinazioni_articoli/edit.php +++ b/modules/combinazioni_articoli/edit.php @@ -67,7 +67,7 @@ echo ' '.tr('Foto').' '.tr('Variante').' '.tr('Articolo').' - '.tr('#').' + @@ -82,7 +82,10 @@ foreach ($articoli as $articolo) { '.Modules::link('Articoli', $articolo->id, $articolo->codice.' - '.$articolo->descrizione).' + '; @@ -109,6 +112,12 @@ function modificaVariante(id) { openModal("'.tr('Modifica variante').'", "'.$module->fileurl('edit-variante.php').'?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&id_articolo=" + id); } +function rimuoviVariante(id) { + if( confirm(\'Rimuovere la variante dalla combinazione?\') ){ + $.post( \''.base_path().'/modules/combinazioni_articoli/actions.php\', { op: \'remove-variante\', id_articolo: + id }, function(data){ location.href=\''.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$id_record.'\'; } ); + } +} + function generaVarianti(button) { // Redirect redirect(globals.rootdir + "/editor.php", { From 8b63e03de1ec9d907b1881264086abd77fda02d1 Mon Sep 17 00:00:00 2001 From: MatteoPistorello Date: Fri, 17 Dec 2021 13:36:12 +0100 Subject: [PATCH 4/5] Aggiunta tabella in articoli per visualizzare ultimi prezzi --- include/common/articolo.php | 6 +++-- modules/articoli/ajax/complete.php | 13 ++++----- modules/articoli/edit.php | 42 ++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 8 deletions(-) diff --git a/include/common/articolo.php b/include/common/articolo.php index d9db8bf1e..6fca5f6da 100755 --- a/include/common/articolo.php +++ b/include/common/articolo.php @@ -86,9 +86,10 @@ $disabled = empty($result['idarticolo']); echo '
- +
@@ -100,9 +101,10 @@ echo '
- +
diff --git a/modules/articoli/ajax/complete.php b/modules/articoli/ajax/complete.php index 266d6c205..2571e04cd 100755 --- a/modules/articoli/ajax/complete.php +++ b/modules/articoli/ajax/complete.php @@ -20,6 +20,7 @@ include_once __DIR__.'/../../../core.php'; $idarticolo = get('idarticolo'); +$limit = get('limit'); switch ($resource) { // Legge gli ultimi prezzi di vendita di un determinato cliente e un determinato articolo e li visualizza per suggerire il prezzo di vendita @@ -61,10 +62,10 @@ switch ($resource) { // Ultime 5 vendite totali $documenti = $dbo->fetchArray('SELECT iddocumento AS id, "Fattura" AS tipo, "Fatture di vendita" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM co_documenti WHERE id=iddocumento) AS n_documento, (SELECT numero_esterno FROM co_documenti WHERE id=iddocumento) AS n2_documento, (SELECT data FROM co_documenti WHERE id=iddocumento) AS data_documento FROM co_righe_documenti WHERE idarticolo='.prepare($idarticolo).' AND iddocumento IN(SELECT id FROM co_documenti WHERE idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir="entrata")) UNION - SELECT idddt AS id, "Ddt" AS tipo, "Ddt di vendita" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM dt_ddt WHERE id=idddt) AS n_documento, (SELECT numero_esterno FROM dt_ddt WHERE id=idddt) AS n2_documento, (SELECT data FROM dt_ddt WHERE id=idddt) AS data_documento FROM dt_righe_ddt WHERE idarticolo='.prepare($idarticolo).' AND idddt IN(SELECT id FROM dt_ddt WHERE idtipoddt IN(SELECT id FROM dt_tipiddt WHERE dir="entrata")) LIMIT 0,5'); + SELECT idddt AS id, "Ddt" AS tipo, "Ddt di vendita" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM dt_ddt WHERE id=idddt) AS n_documento, (SELECT numero_esterno FROM dt_ddt WHERE id=idddt) AS n2_documento, (SELECT data FROM dt_ddt WHERE id=idddt) AS data_documento FROM dt_righe_ddt WHERE idarticolo='.prepare($idarticolo).' AND idddt IN(SELECT id FROM dt_ddt WHERE idtipoddt IN(SELECT id FROM dt_tipiddt WHERE dir="entrata")) LIMIT 0,'.$limit.''); if (sizeof($documenti) > 0) { - echo "
\n"; + echo "
\n"; echo "\n"; echo "\n"; @@ -78,7 +79,7 @@ switch ($resource) { } echo "
DocumentoTotale
\n"; } else { - echo '
'.tr('Nessuna vendita trovata di questo articolo')."...
\n"; + echo ''.tr('Nessuna vendita trovata di questo articolo')."...
\n"; } break; @@ -89,10 +90,10 @@ switch ($resource) { // Ultimi 5 acquisti totali $documenti = $dbo->fetchArray('SELECT iddocumento AS id, "Fattura" AS tipo, "Fatture di acquisto" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM co_documenti WHERE id=iddocumento) AS n_documento, (SELECT numero_esterno FROM co_documenti WHERE id=iddocumento) AS n2_documento, (SELECT data FROM co_documenti WHERE id=iddocumento) AS data_documento FROM co_righe_documenti WHERE idarticolo='.prepare($idarticolo).' AND iddocumento IN(SELECT id FROM co_documenti WHERE idtipodocumento IN(SELECT id FROM co_tipidocumento WHERE dir="uscita")) UNION - SELECT idddt AS id, "Ddt" AS tipo, "Ddt di acquisto" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM dt_ddt WHERE id=idddt) AS n_documento, (SELECT numero_esterno FROM dt_ddt WHERE id=idddt) AS n2_documento, (SELECT data FROM dt_ddt WHERE id=idddt) AS data_documento FROM dt_righe_ddt WHERE idarticolo='.prepare($idarticolo).' AND idddt IN(SELECT id FROM dt_ddt WHERE idtipoddt IN(SELECT id FROM dt_tipiddt WHERE dir="uscita")) LIMIT 0,5'); + SELECT idddt AS id, "Ddt" AS tipo, "Ddt di acquisto" AS modulo, (subtotale-sconto)/qta AS costo_unitario, (SELECT numero FROM dt_ddt WHERE id=idddt) AS n_documento, (SELECT numero_esterno FROM dt_ddt WHERE id=idddt) AS n2_documento, (SELECT data FROM dt_ddt WHERE id=idddt) AS data_documento FROM dt_righe_ddt WHERE idarticolo='.prepare($idarticolo).' AND idddt IN(SELECT id FROM dt_ddt WHERE idtipoddt IN(SELECT id FROM dt_tipiddt WHERE dir="uscita")) LIMIT 0,'.$limit.''); if (sizeof($documenti) > 0) { - echo "
\n"; + echo "
\n"; echo "\n"; echo "\n"; @@ -106,7 +107,7 @@ switch ($resource) { } echo "
DocumentoTotale
\n"; } else { - echo '
'.tr('Nessun acquisto trovato di questo articolo')."...
\n"; + echo ''.tr('Nessun acquisto trovato di questo articolo')."...
\n"; } break; diff --git a/modules/articoli/edit.php b/modules/articoli/edit.php index 1c07f9fff..65b891084 100755 --- a/modules/articoli/edit.php +++ b/modules/articoli/edit.php @@ -261,6 +261,44 @@ echo ' + + +
+
+
+
+

+ +

+
+ +
+
+ +
+
+
+
+
+
+ +
+
+
+

+ +

+
+ +
+
+ +
+
+
+
+
+
@@ -379,5 +417,9 @@ $(document).ready(function(){ if(input('id_fornitore').get()){ input('prezzo_acquisto').disable(); } + + $("#prezziacquisto").load("/ajax_complete.php?module=Articoli&op=getprezziacquisto&idarticolo="+ + "&limit=20"); + + $("#prezzivendita").load("/ajax_complete.php?module=Articoli&op=getprezzivendita&idarticolo="+ + "&limit=20"); }); From 3c39570b8ba16ee79916f0e221873c22ac17f4eb Mon Sep 17 00:00:00 2001 From: MatteoPistorello Date: Mon, 20 Dec 2021 12:15:00 +0100 Subject: [PATCH 5/5] Integrazione nuove tabelle nel plugin consuntivo --- .../plugins/contratti.consuntivo.php | 200 ++++++++++++----- modules/ordini/plugins/ordini.consuntivo.php | 204 +++++++++++++----- .../plugins/preventivi.consuntivo.php | 204 +++++++++++++----- 3 files changed, 433 insertions(+), 175 deletions(-) diff --git a/modules/contratti/plugins/contratti.consuntivo.php b/modules/contratti/plugins/contratti.consuntivo.php index ef8a5b795..59552660b 100755 --- a/modules/contratti/plugins/contratti.consuntivo.php +++ b/modules/contratti/plugins/contratti.consuntivo.php @@ -29,11 +29,10 @@ if (!empty($interventi)) { - - - - - + + + + '; // Tabella con i dati @@ -63,10 +62,6 @@ if (!empty($interventi)) { '.moneyFormat($intervento->spesa).' - - @@ -75,7 +70,7 @@ if (!empty($interventi)) { // Riga con dettagli echo ' -
'.tr('Attività').''.tr('Ore').''.tr('Km').''.tr('Costo').''.tr('Addebito').''.tr('Tot. scontato').''.tr('Ore').''.tr('Km').''.tr('Costo').''.tr('Tot. scontato').'
- '.moneyFormat($intervento->imponibile).' - '.moneyFormat($intervento->totale_imponibile).'
'; + '; // Lettura sessioni di lavoro $sessioni = $intervento->sessioni; @@ -84,15 +79,15 @@ if (!empty($interventi)) { - - - - - - - - - + + + + + + + + + '; foreach ($sessioni as $sessione) { @@ -113,6 +108,23 @@ if (!empty($interventi)) { '; + + // Raggruppamento per tipologia descrizione + $tipologie[$sessione->tipo->descrizione]['ore'] += $sessione->ore; + $tipologie[$sessione->tipo->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; + $tipologie[$sessione->tipo->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio; + + // Raggruppamento per tecnico + $tecnici[$sessione->anagrafica->ragione_sociale]['ore'] += $sessione->ore; + $tecnici[$sessione->anagrafica->ragione_sociale]['km'] += $sessione->km; + $tecnici[$sessione->anagrafica->ragione_sociale]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; + $tecnici[$sessione->anagrafica->ragione_sociale]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio; + + // Raggruppamento per stato intervento + $stati_intervento[$intervento->stato->descrizione]['colore'] = $intervento->stato->colore; + $stati_intervento[$intervento->stato->descrizione]['ore'] += $sessione->ore; + $stati_intervento[$intervento->stato->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; + $stati_intervento[$intervento->stato->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio; } echo ' @@ -143,6 +155,10 @@ if (!empty($interventi)) { '; + + // Raggruppamento per categoria articolo + $materiali[$articolo->articolo->categoria->nome]['costo'] += $articolo->spesa; + $materiali[$articolo->articolo->categoria->nome]['ricavo'] += $articolo->imponibile - $articolo->sconto; } echo ' @@ -213,47 +229,11 @@ if (!empty($interventi)) { '.moneyFormat($totale_costo).''; - echo ' - '; - echo ' - '; - - $stati = $interventi->groupBy('idstatointervento'); - if (count($stati) > 0) { - // Totali per stato - echo ' - - - '; - - foreach ($stati as $interventi_collegati) { - $stato = $interventi_collegati->first()->stato; - $totale_stato = sum(array_column($interventi_collegati->toArray(), 'totale_imponibile')); - - echo ' - - - - - - - '; - } - } - - echo ' +
'.tr('Tecnico').''.tr('Tipo attività').''.tr('Ore').''.tr('Km').''.tr('Costo ore').''.tr('Costo km').''.tr('Diritto ch.').''.tr('Prezzo ore').''.tr('Prezzo km').''.tr('Diritto ch.').''.tr('Tipo attività').''.tr('Ore').''.tr('Km').''.tr('Costo ore').''.tr('Costo km').''.tr('Diritto ch.').''.tr('Prezzo ore').''.tr('Prezzo km').''.tr('Diritto ch.').'
'.moneyFormat($sessione->prezzo_viaggio).$sconto_km.' '.moneyFormat($sessione->prezzo_diritto_chiamata).'
'.moneyFormat($articolo->spesa).' '.moneyFormat($articolo->imponibile).$sconto.'
- '.moneyFormat($totale_addebito).' - '.moneyFormat($totale).'
-
'.tr('Totale interventi per stato', [], ['upper' => true]).' -
- '.$stato->descrizione.': - - '.moneyFormat($totale_stato).' -
'; } @@ -330,8 +310,114 @@ if (empty($totale_ore_contratto)) {

'.tr('Per monitorare il consumo ore, inserisci almeno una riga con unità di misura "ore"').'.

'; } + echo ' +
+
+ + + + + + + + '; + ksort($tipologie); + foreach ($tipologie as $key => $tipologia){ + $margine = $tipologia['ricavo'] - $tipologia['costo']; + $margine_prc = ($tipologia['ricavo'] && $tipologia['costo']) ? (int)((($tipologia['ricavo'] / $tipologia['costo']) - 1) * 100) : 100; + echo ' + + + + + + + '; + } + echo ' +
'.tr('Tipologia').''.tr('Ore').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').'
'.$key.''.Translator::numberToLocale($tipologia['ore']).''.Translator::numberToLocale($tipologia['costo']).' €'.Translator::numberToLocale($tipologia['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
+
-echo ' +
+ + + + + + + + + '; + ksort($tecnici); + foreach ($tecnici as $key => $tecnico){ + $margine = $tecnico['ricavo'] - $tecnico['costo']; + $margine_prc = ($tecnico['ricavo'] && $tecnico['costo']) ? (int)((($tecnico['ricavo'] / $tecnico['costo']) - 1) * 100) : 100; + echo ' + + + + + + + + '; + } + echo ' +
'.tr('Tecnici').''.tr('Ore').''.tr('km').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').'
'.$key.''.Translator::numberToLocale($tecnico['ore']).''.(int)$tecnico['km'].''.Translator::numberToLocale($tecnico['costo']).' €'.Translator::numberToLocale($tecnico['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
+
+
+ +
+
+ + + + + + + + '; + ksort($stati_intervento); + foreach ($stati_intervento as $key => $stato){ + $margine = $stato['ricavo'] - $stato['costo']; + $margine_prc = ($stato['ricavo'] && $stato['costo']) ? (int)((($stato['ricavo'] / $stato['costo']) - 1) * 100) : 100; + echo ' + + + + + + + '; + } + echo ' +
'.tr('Stato').''.tr('Ore').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').'
'.$key.'
'.Translator::numberToLocale($stato['ore']).''.Translator::numberToLocale($stato['costo']).' €'.Translator::numberToLocale($stato['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
+
+ +
+ + + + + + + '; + ksort($materiali); + foreach ($materiali as $key => $materiale){ + $margine = $materiale['ricavo'] - $materiale['costo']; + $margine_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100; + echo ' + + + + + + '; + } + echo ' +
'.tr('Materiale').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').'
'.$key.''.Translator::numberToLocale($materiale['costo']).' €'.Translator::numberToLocale($materiale['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
+
+
'; /* diff --git a/modules/ordini/plugins/ordini.consuntivo.php b/modules/ordini/plugins/ordini.consuntivo.php index ce8a259cf..c3bec70c6 100644 --- a/modules/ordini/plugins/ordini.consuntivo.php +++ b/modules/ordini/plugins/ordini.consuntivo.php @@ -21,8 +21,6 @@ include_once __DIR__.'/../../../core.php'; use Modules\Interventi\Intervento; -// CONSUNTIVO - // Tabella con riepilogo interventi $interventi = Intervento::where('id_ordine', $id_record)->get(); if (!empty($interventi)) { @@ -30,11 +28,10 @@ if (!empty($interventi)) { - - - - - + + + + '; // Tabella con i dati @@ -62,10 +59,6 @@ if (!empty($interventi)) { '.moneyFormat($intervento->spesa).' - - @@ -74,7 +67,7 @@ if (!empty($interventi)) { // Riga con dettagli echo ' -
'.tr('Attività').''.tr('Ore').''.tr('Km').''.tr('Costo').''.tr('Addebito').''.tr('Tot. scontato').''.tr('Ore').''.tr('Km').''.tr('Costo').''.tr('Tot. scontato').'
- '.moneyFormat($intervento->imponibile).' - '.moneyFormat($intervento->totale_imponibile).'
'; + '; // Lettura sessioni di lavoro $sessioni = $intervento->sessioni; @@ -83,15 +76,15 @@ if (!empty($interventi)) { - - - - - - - - - + + + + + + + + + '; foreach ($sessioni as $sessione) { @@ -112,6 +105,23 @@ if (!empty($interventi)) { '; + + // Raggruppamento per tipologia descrizione + $tipologie[$sessione->tipo->descrizione]['ore'] += $sessione->ore; + $tipologie[$sessione->tipo->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; + $tipologie[$sessione->tipo->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio; + + // Raggruppamento per tecnico + $tecnici[$sessione->anagrafica->ragione_sociale]['ore'] += $sessione->ore; + $tecnici[$sessione->anagrafica->ragione_sociale]['km'] += $sessione->km; + $tecnici[$sessione->anagrafica->ragione_sociale]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; + $tecnici[$sessione->anagrafica->ragione_sociale]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio; + + // Raggruppamento per stato intervento + $stati_intervento[$intervento->stato->descrizione]['colore'] = $intervento->stato->colore; + $stati_intervento[$intervento->stato->descrizione]['ore'] += $sessione->ore; + $stati_intervento[$intervento->stato->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; + $stati_intervento[$intervento->stato->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio; } echo ' @@ -142,6 +152,10 @@ if (!empty($interventi)) { '; + + // Raggruppamento per categoria articolo + $materiali[$articolo->articolo->categoria->nome]['costo'] += $articolo->spesa; + $materiali[$articolo->articolo->categoria->nome]['ricavo'] += $articolo->imponibile - $articolo->sconto; } echo ' @@ -184,11 +198,11 @@ if (!empty($interventi)) { } $array_interventi = $interventi->toArray(); - $totale_ore = sum(array_column($array_interventi, 'ore_totali')); $totale_km = sum(array_column($array_interventi, 'km_totali')); $totale_costo = sum(array_column($array_interventi, 'spesa')); $totale_addebito = sum(array_column($array_interventi, 'imponibile')); $totale = sum(array_column($array_interventi, 'totale_imponibile')); + $totale_ore = sum(array_column($array_interventi, 'ore_totali')); // Totali echo ' @@ -212,47 +226,11 @@ if (!empty($interventi)) { '.moneyFormat($totale_costo).''; - echo ' - '; - echo ' - '; - - $stati = $interventi->groupBy('idstatointervento'); - if (count($stati) > 0) { - // Totali per stato - echo ' - - - '; - - foreach ($stati as $interventi_collegati) { - $stato = $interventi_collegati->first()->stato; - $totale_stato = sum(array_column($interventi_collegati->toArray(), 'totale_imponibile')); - - echo ' - - - - - - - '; - } - } - - echo ' +
'.tr('Tecnico').''.tr('Tipo attività').''.tr('Ore').''.tr('Km').''.tr('Costo ore').''.tr('Costo km').''.tr('Diritto ch.').''.tr('Prezzo ore').''.tr('Prezzo km').''.tr('Diritto ch.').''.tr('Tipo attività').''.tr('Ore').''.tr('Km').''.tr('Costo ore').''.tr('Costo km').''.tr('Diritto ch.').''.tr('Prezzo ore').''.tr('Prezzo km').''.tr('Diritto ch.').'
'.moneyFormat($sessione->prezzo_viaggio).$sconto_km.' '.moneyFormat($sessione->prezzo_diritto_chiamata).'
'.moneyFormat($articolo->spesa).' '.moneyFormat($articolo->imponibile).$sconto.'
- '.moneyFormat($totale_addebito).' - '.moneyFormat($totale).'
-
'.tr('Totale interventi per stato', [], ['upper' => true]).' -
- '.$stato->descrizione.': - - '.moneyFormat($totale_stato).' -
'; } @@ -277,6 +255,114 @@ if ($diff > 0) { echo '

+ +
+
+ + + + + + + + '; + ksort($tipologie); + foreach ($tipologie as $key => $tipologia){ + $margine = $tipologia['ricavo'] - $tipologia['costo']; + $margine_prc = ($tipologia['ricavo'] && $tipologia['costo']) ? (int)((($tipologia['ricavo'] / $tipologia['costo']) - 1) * 100) : 100; + echo ' + + + + + + + '; + } + echo ' +
'.tr('Tipologia').''.tr('Ore').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').'
'.$key.''.Translator::numberToLocale($tipologia['ore']).''.Translator::numberToLocale($tipologia['costo']).' €'.Translator::numberToLocale($tipologia['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
+
+ +
+ + + + + + + + + '; + ksort($tecnici); + foreach ($tecnici as $key => $tecnico){ + $margine = $tecnico['ricavo'] - $tecnico['costo']; + $margine_prc = ($tecnico['ricavo'] && $tecnico['costo']) ? (int)((($tecnico['ricavo'] / $tecnico['costo']) - 1) * 100) : 100; + echo ' + + + + + + + + '; + } + echo ' +
'.tr('Tecnici').''.tr('Ore').''.tr('km').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').'
'.$key.''.Translator::numberToLocale($tecnico['ore']).''.(int)$tecnico['km'].''.Translator::numberToLocale($tecnico['costo']).' €'.Translator::numberToLocale($tecnico['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
+
+
+ +
+
+ + + + + + + + '; + ksort($stati_intervento); + foreach ($stati_intervento as $key => $stato){ + $margine = $stato['ricavo'] - $stato['costo']; + $margine_prc = ($stato['ricavo'] && $stato['costo']) ? (int)((($stato['ricavo'] / $stato['costo']) - 1) * 100) : 100; + echo ' + + + + + + + '; + } + echo ' +
'.tr('Stato').''.tr('Ore').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').'
'.$key.'
'.Translator::numberToLocale($stato['ore']).''.Translator::numberToLocale($stato['costo']).' €'.Translator::numberToLocale($stato['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
+
+ +
+ + + + + + + '; + ksort($materiali); + foreach ($materiali as $key => $materiale){ + $margine = $materiale['ricavo'] - $materiale['costo']; + $margine_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100; + echo ' + + + + + + '; + } + echo ' +
'.tr('Materiale').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').'
'.$key.''.Translator::numberToLocale($materiale['costo']).' €'.Translator::numberToLocale($materiale['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
+
+
'; /* diff --git a/modules/preventivi/plugins/preventivi.consuntivo.php b/modules/preventivi/plugins/preventivi.consuntivo.php index af70ab127..f980e390e 100755 --- a/modules/preventivi/plugins/preventivi.consuntivo.php +++ b/modules/preventivi/plugins/preventivi.consuntivo.php @@ -21,8 +21,6 @@ include_once __DIR__.'/../../../core.php'; use Modules\Interventi\Intervento; -// CONSUNTIVO - // Tabella con riepilogo interventi $interventi = Intervento::where('id_preventivo', $id_record)->get(); if (!empty($interventi)) { @@ -30,11 +28,10 @@ if (!empty($interventi)) { - - - - - + + + + '; // Tabella con i dati @@ -62,10 +59,6 @@ if (!empty($interventi)) { '.moneyFormat($intervento->spesa).' - - @@ -74,7 +67,7 @@ if (!empty($interventi)) { // Riga con dettagli echo ' -
'.tr('Attività').''.tr('Ore').''.tr('Km').''.tr('Costo').''.tr('Addebito').''.tr('Tot. scontato').''.tr('Ore').''.tr('Km').''.tr('Costo').''.tr('Tot. scontato').'
- '.moneyFormat($intervento->imponibile).' - '.moneyFormat($intervento->totale_imponibile).'
'; + '; // Lettura sessioni di lavoro $sessioni = $intervento->sessioni; @@ -83,15 +76,15 @@ if (!empty($interventi)) { - - - - - - - - - + + + + + + + + + '; foreach ($sessioni as $sessione) { @@ -112,6 +105,23 @@ if (!empty($interventi)) { '; + + // Raggruppamento per tipologia descrizione + $tipologie[$sessione->tipo->descrizione]['ore'] += $sessione->ore; + $tipologie[$sessione->tipo->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; + $tipologie[$sessione->tipo->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio; + + // Raggruppamento per tecnico + $tecnici[$sessione->anagrafica->ragione_sociale]['ore'] += $sessione->ore; + $tecnici[$sessione->anagrafica->ragione_sociale]['km'] += $sessione->km; + $tecnici[$sessione->anagrafica->ragione_sociale]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; + $tecnici[$sessione->anagrafica->ragione_sociale]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio; + + // Raggruppamento per stato intervento + $stati_intervento[$intervento->stato->descrizione]['colore'] = $intervento->stato->colore; + $stati_intervento[$intervento->stato->descrizione]['ore'] += $sessione->ore; + $stati_intervento[$intervento->stato->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; + $stati_intervento[$intervento->stato->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata - $sessione->sconto_totale_viaggio; } echo ' @@ -142,6 +152,10 @@ if (!empty($interventi)) { '; + + // Raggruppamento per categoria articolo + $materiali[$articolo->articolo->categoria->nome]['costo'] += $articolo->spesa; + $materiali[$articolo->articolo->categoria->nome]['ricavo'] += $articolo->imponibile - $articolo->sconto; } echo ' @@ -184,11 +198,11 @@ if (!empty($interventi)) { } $array_interventi = $interventi->toArray(); - $totale_ore = sum(array_column($array_interventi, 'ore_totali')); $totale_km = sum(array_column($array_interventi, 'km_totali')); $totale_costo = sum(array_column($array_interventi, 'spesa')); $totale_addebito = sum(array_column($array_interventi, 'imponibile')); $totale = sum(array_column($array_interventi, 'totale_imponibile')); + $totale_ore = sum(array_column($array_interventi, 'ore_totali')); // Totali echo ' @@ -212,47 +226,11 @@ if (!empty($interventi)) { '.moneyFormat($totale_costo).''; - echo ' - '; - echo ' - '; - - $stati = $interventi->groupBy('idstatointervento'); - if (count($stati) > 0) { - // Totali per stato - echo ' - - - '; - - foreach ($stati as $interventi_collegati) { - $stato = $interventi_collegati->first()->stato; - $totale_stato = sum(array_column($interventi_collegati->toArray(), 'totale_imponibile')); - - echo ' - - - - - - - '; - } - } - - echo ' +
'.tr('Tecnico').''.tr('Tipo attività').''.tr('Ore').''.tr('Km').''.tr('Costo ore').''.tr('Costo km').''.tr('Diritto ch.').''.tr('Prezzo ore').''.tr('Prezzo km').''.tr('Diritto ch.').''.tr('Tipo attività').''.tr('Ore').''.tr('Km').''.tr('Costo ore').''.tr('Costo km').''.tr('Diritto ch.').''.tr('Prezzo ore').''.tr('Prezzo km').''.tr('Diritto ch.').'
'.moneyFormat($sessione->prezzo_viaggio).$sconto_km.' '.moneyFormat($sessione->prezzo_diritto_chiamata).'
'.moneyFormat($articolo->spesa).' '.moneyFormat($articolo->imponibile).$sconto.'
- '.moneyFormat($totale_addebito).' - '.moneyFormat($totale).'
-
'.tr('Totale interventi per stato', [], ['upper' => true]).' -
- '.$stato->descrizione.': - - '.moneyFormat($totale_stato).' -
'; } @@ -277,6 +255,114 @@ if ($diff > 0) { echo '

+ +
+
+ + + + + + + + '; + ksort($tipologie); + foreach ($tipologie as $key => $tipologia){ + $margine = $tipologia['ricavo'] - $tipologia['costo']; + $margine_prc = ($tipologia['ricavo'] && $tipologia['costo']) ? (int)((($tipologia['ricavo'] / $tipologia['costo']) - 1) * 100) : 100; + echo ' + + + + + + + '; + } + echo ' +
'.tr('Tipologia').''.tr('Ore').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').'
'.$key.''.Translator::numberToLocale($tipologia['ore']).''.Translator::numberToLocale($tipologia['costo']).' €'.Translator::numberToLocale($tipologia['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
+
+ +
+ + + + + + + + + '; + ksort($tecnici); + foreach ($tecnici as $key => $tecnico){ + $margine = $tecnico['ricavo'] - $tecnico['costo']; + $margine_prc = ($tecnico['ricavo'] && $tecnico['costo']) ? (int)((($tecnico['ricavo'] / $tecnico['costo']) - 1) * 100) : 100; + echo ' + + + + + + + + '; + } + echo ' +
'.tr('Tecnici').''.tr('Ore').''.tr('km').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').'
'.$key.''.Translator::numberToLocale($tecnico['ore']).''.(int)$tecnico['km'].''.Translator::numberToLocale($tecnico['costo']).' €'.Translator::numberToLocale($tecnico['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
+
+
+ +
+
+ + + + + + + + '; + ksort($stati_intervento); + foreach ($stati_intervento as $key => $stato){ + $margine = $stato['ricavo'] - $stato['costo']; + $margine_prc = ($stato['ricavo'] && $stato['costo']) ? (int)((($stato['ricavo'] / $stato['costo']) - 1) * 100) : 100; + echo ' + + + + + + + '; + } + echo ' +
'.tr('Stato').''.tr('Ore').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').'
'.$key.'
'.Translator::numberToLocale($stato['ore']).''.Translator::numberToLocale($stato['costo']).' €'.Translator::numberToLocale($stato['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
+
+ +
+ + + + + + + '; + ksort($materiali); + foreach ($materiali as $key => $materiale){ + $margine = $materiale['ricavo'] - $materiale['costo']; + $margine_prc = ($materiale['ricavo'] && $materiale['costo']) ? (int)((($materiale['ricavo'] / $materiale['costo']) - 1) * 100) : 100; + echo ' + + + + + + '; + } + echo ' +
'.tr('Materiale').''.tr('Costo').''.tr('Ricavo').''.tr('Margine').'
'.$key.''.Translator::numberToLocale($materiale['costo']).' €'.Translator::numberToLocale($materiale['ricavo']).' €'.Translator::numberToLocale($margine).' € ('.$margine_prc.'%)
+
+
'; /*