1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-02-23 14:57:46 +01:00

Miglioramento statistiche mensili

This commit is contained in:
Thomas Zilio 2019-07-05 17:26:58 +02:00
parent c651e7c81d
commit 3a6282d6f1
3 changed files with 47 additions and 35 deletions

View File

@ -16,6 +16,7 @@ return [
'modules/contratti' => 'Modules\Contratti',
'modules/interventi' => 'Modules\Interventi',
'modules/pagamenti' => 'Modules\Pagamenti',
'modules/statistiche' => 'Modules\Statistiche',
'plugins/exportFE' => 'Plugins\ExportFE',
'plugins/importFE' => 'Plugins\ImportFE',
'plugins/receiptFE' => 'Plugins\ReceiptFE',

View File

@ -2,6 +2,8 @@
include_once __DIR__.'/../../core.php';
use Modules\Statistiche\Stats;
echo '
<script src="'.$rootdir.'/assets/dist/js/chartjs/Chart.min.js"></script>';
@ -33,32 +35,11 @@ $(document).ready(function() {
});
</script>';
// Differenza delle date in mesi
$d1 = new DateTime($start);
$d2 = new DateTime($end);
$count = $d1->diff($d2)->m + ($d1->diff($d2)->y * 12) + 1;
$fatturato = $dbo->fetchArray("SELECT ROUND(SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto), 2) AS totale, YEAR(co_documenti.data) AS year, MONTH(co_documenti.data) AS month FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='entrata' AND co_tipidocumento.descrizione!='Bozza' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY YEAR(co_documenti.data), MONTH(co_documenti.data) ORDER BY YEAR(co_documenti.data) ASC, MONTH(co_documenti.data) ASC');
$acquisti = $dbo->fetchArray("SELECT ROUND(SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto), 2) AS totale, YEAR(co_documenti.data) AS year, MONTH(co_documenti.data) AS month FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='uscita' AND co_tipidocumento.descrizione!='Bozza' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY YEAR(co_documenti.data), MONTH(co_documenti.data) ORDER BY YEAR(co_documenti.data) ASC, MONTH(co_documenti.data) ASC');
$month = intval($d1->format('m')) - 1;
for ($i = 0; $i < $count; ++$i) {
$month = $month % 12;
if (!isset($fatturato[$i]) || intval($fatturato[$i]['month']) != $month + 1) {
array_splice($fatturato, $i, 0, [[
'totale' => 0,
]]);
}
if (!isset($acquisti[$i]) || intval($acquisti[$i]['month']) != $month + 1) {
array_splice($acquisti, $i, 0, [[
'totale' => 0,
]]);
}
++$month;
}
$fatturato = Stats::monthly($fatturato, $start, $end);
$acquisti = Stats::monthly($acquisti, $start, $end);
// Fatturato
echo '
@ -227,18 +208,7 @@ $dataset = '';
foreach ($tipi as $tipo) {
$interventi = $dbo->fetchArray('SELECT COUNT(*) AS totale, YEAR(in_interventi.data_richiesta) AS year, MONTH(in_interventi.data_richiesta) AS month FROM in_interventi WHERE in_interventi.idtipointervento = '.prepare($tipo['idtipointervento']).' AND in_interventi.data_richiesta BETWEEN '.prepare($start).' AND '.prepare($end).' GROUP BY YEAR(in_interventi.data_richiesta), MONTH(in_interventi.data_richiesta) ORDER BY YEAR(in_interventi.data_richiesta) ASC, MONTH(in_interventi.data_richiesta) ASC');
$month = intval($d1->format('m')) - 1;
for ($i = 0; $i < $count; ++$i) {
$month = $month % 12;
if (!isset($interventi[$i]) || intval($interventi[$i]['month']) != $month + 1) {
array_splice($interventi, $i, 0, [[
'totale' => 0,
]]);
}
++$month;
}
$interventi = Stats::monthly($interventi, $start, $end);
//Random color
$background = '#'.dechex(rand(256, 16777215));

View File

@ -0,0 +1,41 @@
<?php
namespace Modules\Statistiche;
use ArrayObject;
use DateTime;
class Stats
{
public static function monthly($original, $start, $end)
{
// Copia dei dati
$array = new ArrayObject($original);
$data = $array->getArrayCopy();
// Ordinamento
array_multisort(array_column($data, 'year'), SORT_ASC,
array_column($data, 'month'), SORT_ASC,
$data);
// Differenza delle date in mesi
$d1 = new DateTime($start);
$d2 = new DateTime($end);
$count = $d1->diff($d2)->m + ($d1->diff($d2)->y * 12) + 1;
$month = intval($d1->format('m')) - 1;
for ($i = 0; $i < $count; ++$i) {
$month = $month % 12;
if (!isset($data[$i]) || intval($data[$i]['month']) != $month + 1) {
array_splice($data, $i, 0, [[
'totale' => 0,
]]);
}
++$month;
}
return $data;
}
}