. */ include_once __DIR__.'/../../core.php'; use Modules\Statistiche\Stats; echo ' '; $start = $_SESSION['period_start']; $end = $_SESSION['period_end']; echo '

'.tr('Periodi temporali').'

'; // Fatturato echo '

'.tr('Vendite e acquisti').'

'; // Script per il grafico del fatturato echo ' '; // Clienti top $clienti = $dbo->fetchArray('SELECT SUM(IF(reversed=1, -(co_righe_documenti.subtotale - co_righe_documenti.sconto), (co_righe_documenti.subtotale - co_righe_documenti.sconto))) AS totale, (SELECT COUNT(*) FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN zz_segments ON co_documenti.id_segment=zz_segments.id WHERE co_documenti.idanagrafica = an_anagrafiche.idanagrafica AND co_documenti.data BETWEEN '.prepare($start).' AND '.prepare($end)." AND co_tipidocumento.dir='entrata' AND zz_segments.autofatture=0) AS qta, an_anagrafiche.idanagrafica, an_anagrafiche.ragione_sociale FROM co_documenti INNER JOIN co_statidocumento ON co_statidocumento.id = co_documenti.idstatodocumento INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica=co_documenti.idanagrafica INNER JOIN zz_segments ON co_documenti.id_segment=zz_segments.id WHERE co_tipidocumento.dir='entrata' AND (co_statidocumento.descrizione = 'Pagato' OR co_statidocumento.descrizione = 'Parzialmente pagato' OR co_statidocumento.descrizione = 'Emessa') AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' AND zz_segments.autofatture=0 GROUP BY an_anagrafiche.idanagrafica ORDER BY totale DESC LIMIT 20'); $totale = $dbo->fetchArray("SELECT SUM(IF(reversed=1, -(co_righe_documenti.subtotale - co_righe_documenti.sconto), (co_righe_documenti.subtotale - co_righe_documenti.sconto))) AS totale FROM co_documenti INNER JOIN co_statidocumento ON co_statidocumento.id = co_documenti.idstatodocumento INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id INNER JOIN zz_segments ON co_documenti.id_segment=zz_segments.id WHERE (co_statidocumento.descrizione = 'Pagato' OR co_statidocumento.descrizione = 'Parzialmente pagato' OR co_statidocumento.descrizione = 'Emessa') AND co_tipidocumento.dir='entrata' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' AND zz_segments.autofatture=0'); echo '

'.tr('I 20 clienti TOP per il periodo').': '.Translator::dateToLocale($start).' - '.Translator::dateToLocale($end).'

'; if (!empty($clienti)) { echo ' '; foreach ($clienti as $cliente) { echo ' '; } echo '
'.tr('Ragione sociale').' '.tr('N. fatture').' '.tr('Totale').' '.tr('Percentuale').' 
'.Modules::link('Anagrafiche', $cliente['idanagrafica'], $cliente['ragione_sociale']).' '.intval($cliente['qta']).' '.moneyFormat($cliente['totale'], 2).' '.Translator::numberToLocale($cliente['totale'] * 100 / $totale[0]['totale'], 2).' %
'; } else { echo '

'.tr('Nessuna vendita').'...

'; } echo '
'; // Articoli più venduti $articoli = $dbo->fetchArray("SELECT SUM(IF(reversed=1, -co_righe_documenti.qta, co_righe_documenti.qta)) AS qta, SUM(IF(reversed=1, -(co_righe_documenti.subtotale - co_righe_documenti.sconto), (co_righe_documenti.subtotale - co_righe_documenti.sconto))) AS totale, mg_articoli.id, mg_articoli.codice, mg_articoli.descrizione, mg_articoli.um FROM co_documenti INNER JOIN co_statidocumento ON co_statidocumento.id = co_documenti.idstatodocumento INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id INNER JOIN mg_articoli ON mg_articoli.id=co_righe_documenti.idarticolo INNER JOIN zz_segments ON co_documenti.id_segment=zz_segments.id WHERE co_tipidocumento.dir='entrata' AND (co_statidocumento.descrizione = 'Pagato' OR co_statidocumento.descrizione = 'Parzialmente pagato' OR co_statidocumento.descrizione = 'Emessa') AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' AND zz_segments.autofatture=0 GROUP BY co_righe_documenti.idarticolo ORDER BY qta DESC LIMIT 20'); $totale = $dbo->fetchArray("SELECT SUM(IF(reversed=1, -co_righe_documenti.qta, co_righe_documenti.qta)) AS totale_qta, SUM(IF(reversed=1, -(co_righe_documenti.subtotale - co_righe_documenti.sconto), (co_righe_documenti.subtotale - co_righe_documenti.sconto))) AS totale FROM co_documenti INNER JOIN co_statidocumento ON co_statidocumento.id = co_documenti.idstatodocumento INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id INNER JOIN mg_articoli ON mg_articoli.id=co_righe_documenti.idarticolo INNER JOIN zz_segments ON co_documenti.id_segment=zz_segments.id WHERE co_tipidocumento.dir='entrata' AND (co_statidocumento.descrizione = 'Pagato' OR co_statidocumento.descrizione = 'Parzialmente pagato' OR co_statidocumento.descrizione = 'Emessa') AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' AND zz_segments.autofatture=0'); echo '

'.tr('I 20 articoli più venduti per il periodo').': '.Translator::dateToLocale($start).' - '.Translator::dateToLocale($end).'

'; if (!empty($articoli)) { echo ' '; foreach ($articoli as $articolo) { echo ' '; } echo '
'.tr('Articolo').' '.tr('N. articoli').' '.tr('Percentuale').' '.tr('Totale').'
'.Modules::link('Articoli', $articolo['id'], $articolo['codice'].' - '.$articolo['descrizione']).'
'.Translator::numberToLocale($articolo['qta'], 'qta').' '.$articolo['um'].' '.Translator::numberToLocale($articolo['qta'] * 100 / $totale[0]['totale_qta'], 2).' % '.moneyFormat($articolo['totale'], 2).'
'; echo "

".Modules::link('Articoli', null, tr('Vedi tutto...'), null, null, false, 'tab_'.Plugins::get('Statistiche vendita')['id'])."

"; } else { echo '

'.tr('Nessun articolo venduto').'...

'; } echo '
'; // Numero interventi per tipologia $tipi = $dbo->fetchArray('SELECT * FROM `in_tipiintervento`'); $dataset = ''; foreach ($tipi as $tipo) { $interventi = $dbo->fetchArray('SELECT COUNT(in_interventi.id) AS result, YEAR(sessioni.orario_fine) AS `year`, MONTH(sessioni.orario_fine) AS `month` FROM in_interventi LEFT JOIN( SELECT in_interventi_tecnici.idintervento, MAX(orario_fine) AS orario_fine FROM in_interventi_tecnici GROUP BY idintervento ) sessioni ON in_interventi.id = sessioni.idintervento WHERE in_interventi.idtipointervento = '.prepare($tipo['idtipointervento']).' AND IFNULL( sessioni.orario_fine, in_interventi.data_richiesta ) BETWEEN '.prepare($start).' AND '.prepare($end).' GROUP BY YEAR(sessioni.orario_fine), MONTH(sessioni.orario_fine) ORDER BY YEAR(sessioni.orario_fine) ASC, MONTH(sessioni.orario_fine) ASC'); $interventi = Stats::monthly($interventi, $start, $end); //Random color $background = '#'.dechex(rand(256, 16777215)); $dataset .= '{ label: "'.$tipo['descrizione'].'", backgroundColor: "'.$background.'", data: [ '.implode(',', array_column($interventi, 'result')).' ] },'; } echo '

'.tr('Numero interventi per tipologia').'

'; // Script per il grafico del numero interventi per tipologia echo ' '; // Ore interventi per tipologia $dataset = ''; foreach ($tipi as $tipo) { $interventi = $dbo->fetchArray('SELECT ROUND( SUM(in_interventi_tecnici.ore), 2 ) AS result, YEAR(in_interventi_tecnici.orario_fine) AS year, MONTH(in_interventi_tecnici.orario_fine) AS month FROM in_interventi INNER JOIN in_interventi_tecnici ON in_interventi.id=in_interventi_tecnici.idintervento WHERE in_interventi.idtipointervento = '.prepare($tipo['idtipointervento']).' AND in_interventi.data_richiesta BETWEEN '.prepare($start).' AND '.prepare($end).' GROUP BY YEAR(in_interventi_tecnici.orario_fine), MONTH(in_interventi_tecnici.orario_fine) ORDER BY YEAR(in_interventi_tecnici.orario_fine) ASC, MONTH(in_interventi_tecnici.orario_fine) ASC'); $interventi = Stats::monthly($interventi, $start, $end); //Random color $background = '#'.dechex(rand(256, 16777215)); $dataset .= '{ label: "'.$tipo['descrizione'].'", backgroundColor: "'.$background.'", data: [ '.implode(',', array_column($interventi, 'result')).' ] },'; } echo '

'.tr('Ore interventi per tipologia').'

'; // Script per il grafico delle ore interventi per tipologia echo ' '; // Interventi per tecnico $tecnici = $dbo->fetchArray("SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale, colore FROM an_anagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica LEFT OUTER JOIN in_interventi_tecnici ON in_interventi_tecnici.idtecnico = an_anagrafiche.idanagrafica INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE an_anagrafiche.deleted_at IS NULL AND an_tipianagrafiche.descrizione='Tecnico' GROUP BY an_anagrafiche.idanagrafica ORDER BY ragione_sociale ASC"); $dataset = ''; foreach ($tecnici as $tecnico) { $sessioni = $dbo->fetchArray('SELECT SUM(in_interventi_tecnici.ore) AS result, CONCAT(CAST(SUM(in_interventi_tecnici.ore) AS char(20)),\' ore\') AS ore_lavorate, YEAR(in_interventi_tecnici.orario_inizio) AS year, MONTH(in_interventi_tecnici.orario_inizio) AS month FROM in_interventi_tecnici INNER JOIN `in_interventi` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` LEFT JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`idstatointervento` WHERE in_interventi_tecnici.idtecnico = '.prepare($tecnico['id']).' AND in_interventi_tecnici.orario_inizio BETWEEN '.prepare($start).' AND '.prepare($end).' AND `in_statiintervento`.`is_completato` = 1 GROUP BY YEAR(in_interventi_tecnici.orario_inizio), MONTH(in_interventi_tecnici.orario_inizio) ORDER BY YEAR(in_interventi_tecnici.orario_inizio) ASC, MONTH(in_interventi_tecnici.orario_inizio) ASC'); $sessioni = Stats::monthly($sessioni, $start, $end); //Colore tecnico $background = strtoupper($tecnico['colore']); if (empty($background) || $background == '#FFFFFF') { //Random color $background = '#'.dechex(rand(256, 16777215)); } $dataset .= '{ label: "'.$tecnico['ragione_sociale'].'", backgroundColor: "'.$background.'", data: [ '.implode(',', array_column($sessioni, 'result')).' ], },'; } echo '

'.tr('Ore di lavoro per tecnico').'

'; // Script per il grafico ore interventi per tecnico echo ' '; $dataset = ''; $nuovi_clienti = $dbo->fetchArray('SELECT COUNT(*) AS result, GROUP_CONCAT(an_anagrafiche.ragione_sociale, "
") AS ragioni_sociali, YEAR(an_anagrafiche.created_at) AS year, MONTH(an_anagrafiche.created_at) AS month FROM an_anagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica WHERE an_tipianagrafiche.descrizione = "Cliente" AND deleted_at IS NULL AND an_anagrafiche.created_at BETWEEN '.prepare($start).' AND '.prepare($end).' GROUP BY YEAR(an_anagrafiche.created_at), MONTH(an_anagrafiche.created_at) ORDER BY YEAR(an_anagrafiche.created_at) ASC, MONTH(an_anagrafiche.created_at) ASC'); $nuovi_fornitori = $dbo->fetchArray('SELECT COUNT(*) AS result, GROUP_CONCAT(an_anagrafiche.ragione_sociale, "
") AS ragioni_sociali, YEAR(an_anagrafiche.created_at) AS year, MONTH(an_anagrafiche.created_at) AS month FROM an_anagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica WHERE an_tipianagrafiche.descrizione = "Fornitore" AND deleted_at IS NULL AND an_anagrafiche.created_at BETWEEN '.prepare($start).' AND '.prepare($end).' GROUP BY YEAR(an_anagrafiche.created_at), MONTH(an_anagrafiche.created_at) ORDER BY YEAR(an_anagrafiche.created_at) ASC, MONTH(an_anagrafiche.created_at) ASC'); //Nuovi clienti per i quali ho emesso almeno una fattura di vendita $clienti_acquisiti = $dbo->fetchArray('SELECT COUNT(*) AS result, GROUP_CONCAT(an_anagrafiche.ragione_sociale, "
") AS ragioni_sociali, YEAR(an_anagrafiche.created_at) AS year, MONTH(an_anagrafiche.created_at) AS month FROM an_anagrafiche INNER JOIN co_documenti ON an_anagrafiche.idanagrafica = co_documenti.idanagrafica INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN an_tipianagrafiche_anagrafiche ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica WHERE an_tipianagrafiche.descrizione = "Cliente" AND co_tipidocumento.dir = "entrata" AND an_anagrafiche.created_at BETWEEN '.prepare($start).' AND '.prepare($end).' GROUP BY YEAR(an_anagrafiche.created_at), MONTH(an_anagrafiche.created_at) ORDER BY YEAR(an_anagrafiche.created_at) ASC, MONTH(an_anagrafiche.created_at) ASC'); //Random color $background = '#'.dechex(rand(256, 16777215)); $dataset .= '{ label: "'.tr("Nuovi clienti").'", backgroundColor: "'.$background.'", data: [ '.implode(',', array_column($nuovi_clienti, 'result')).' ] },'; //Random color $background = '#'.dechex(rand(256, 16777215)); $dataset .= '{ label: "'.tr("Clienti acquisiti").'", backgroundColor: "'.$background.'", data: [ '.implode(',', array_column($clienti_acquisiti, 'result')).' ] },'; //Random color $background = '#'.dechex(rand(256, 16777215)); $dataset .= '{ label: "'.tr("Nuovi fornitori").'", backgroundColor: "'.$background.'", data: [ '.implode(',', array_column($nuovi_fornitori, 'result')).' ] },'; echo '

'.tr('Nuove anagrafiche').'

'; // Script per il grafico dei nuovi clienti per mese echo ' ';