Compare commits

..

7 Commits

Author SHA1 Message Date
valentina 76c27c9cec Fix minore 2024-06-26 17:22:29 +02:00
valentina a52f568ab9 Fix minore 2024-06-26 16:18:18 +02:00
valentina 79edbf64f9 Fix plugin Ddt del cliente 2024-06-26 15:10:16 +02:00
valentina 906de7fe69 Fix minore 2024-06-26 12:08:30 +02:00
valentina 80e8f28360 Fix modulo Statistiche 2024-06-26 12:03:42 +02:00
valentina db2e53496c Aggiunta traduzione mesi su grafici in Statistiche 2024-06-26 11:14:57 +02:00
valentina b2eaccc8a1 Ottimizzazione query statistiche 2024-06-26 10:59:39 +02:00
7 changed files with 78 additions and 58 deletions

View File

@ -262,7 +262,7 @@ if ($righe_vuote) {
$query = 'SELECT `co_statidocumento`.*, `co_statidocumento`.`id` AS id, `colore` AS _bgcolor_, `co_statidocumento_lang`.`title` as descrizione FROM `co_statidocumento` LEFT JOIN `co_statidocumento_lang` ON (`co_statidocumento_lang`.`id_record` = `co_statidocumento`.`id` AND `co_statidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')'; $query = 'SELECT `co_statidocumento`.*, `co_statidocumento`.`id` AS id, `colore` AS _bgcolor_, `co_statidocumento_lang`.`title` as descrizione FROM `co_statidocumento` LEFT JOIN `co_statidocumento_lang` ON (`co_statidocumento_lang`.`id_record` = `co_statidocumento`.`id` AND `co_statidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')';
if (empty($record['is_fiscale'])) { if (empty($record['is_fiscale'])) {
$query .= " WHERE `co_statidocumento`.`id` = '.$id_stato_bozza.'"; $query .= " WHERE `co_statidocumento`.`id` = $id_stato_bozza";
$plugin = $dbo->fetchArray('SELECT `zz_plugins`.`id` FROM `zz_plugins` LEFT JOIN `zz_plugins_lang` ON (`zz_plugins`.`id` = `zz_plugins_lang`.`id_record` AND `zz_plugins_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).") WHERE `title`='Fatturazione Elettronica' AND `idmodule_to` = ".prepare($id_module)); $plugin = $dbo->fetchArray('SELECT `zz_plugins`.`id` FROM `zz_plugins` LEFT JOIN `zz_plugins_lang` ON (`zz_plugins`.`id` = `zz_plugins_lang`.`id_record` AND `zz_plugins_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).") WHERE `title`='Fatturazione Elettronica' AND `idmodule_to` = ".prepare($id_module));
echo '<script>$("#link-tab_'.$plugin[0]['id'].'").addClass("disabled");</script>'; echo '<script>$("#link-tab_'.$plugin[0]['id'].'").addClass("disabled");</script>';

View File

@ -148,7 +148,7 @@ echo '
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-4">
{[ "type": "textarea", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "class": "autosize", "value": "$descrizione$" ]} {[ "type": "textarea", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "class": "autosize", "value": "$descrizione$" ]}
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
@ -178,21 +178,8 @@ if ($user->gruppo != 'Clienti') {
</div>'; </div>';
} }
?> ?>
</div>
</div> </div>
<?php
// Nascondo le note interne ai clienti
if ($user->gruppo != 'Clienti') {
echo '
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "'.tr('Note interne').'", "name": "informazioniaggiuntive", "class": "autosize", "value": "$informazioniaggiuntive$", "extra": "rows=\'5\'" ]}
</div>
</div>';
}
?>
<!--div class="pull-right"> <!--div class="pull-right">
<button type="submit" class="btn btn-success"><i class="fa fa-check"></i> <?php echo tr('Salva modifiche'); ?></button> <button type="submit" class="btn btn-success"><i class="fa fa-check"></i> <?php echo tr('Salva modifiche'); ?></button>
</div--> </div-->

View File

@ -145,8 +145,8 @@ echo '
<div class="card card-primary"> <div class="card card-primary">
<div class="card-header"> <div class="card-header">
<h3 class="card-title"> <h3 class="card-title">
'.tr('Rate scadenza').' <h3 class="card-title">'.tr('Rate scadenza').'</h3>
<button type="button" class="btn btn-xs btn-info pull-right tip" id="add-scadenza" '.(empty($documento) ? 'disabled' : '').' title="'.tr('È possibile aggiungere scadenze solo se è presente il collegamento a un documento, in caso contrario è consigliato creare più scadenze con la stessa descrizione').'"> <button type="button" class="btn btn-xs btn-info float-right" id="add-scadenza" '.(empty($documento) ? 'disabled' : '').' title="'.tr('È possibile aggiungere scadenze solo se è presente il collegamento a un documento, in caso contrario è consigliato creare più scadenze con la stessa descrizione').'">
<i class="fa fa-plus"></i> '.tr('Aggiungi scadenza').' <i class="fa fa-plus"></i> '.tr('Aggiungi scadenza').'
</button> </button>
</h3> </h3>
@ -329,6 +329,7 @@ echo '
<script> <script>
$(document).on("click", "#add-scadenza", function() { $(document).on("click", "#add-scadenza", function() {
this.disabled = true;
var i = '.$i.'; var i = '.$i.';
cleanup_inputs(); cleanup_inputs();

View File

@ -29,43 +29,65 @@ $end = filter('end');
switch (filter('op')) { switch (filter('op')) {
case 'fatturato': case 'fatturato':
if (empty(Module::where('name', 'Vendita al banco')->first()->id)) { if (empty(Module::where('name', 'Vendita al banco')->first()->id)) {
$results = $dbo->fetchArray('SELECT ROUND(SUM(IF(`reversed`=1, -(`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`), (`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`))), 2) AS result, 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` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento`.`id` = `co_tipidocumento_lang`.`id_record` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->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_tipidocumento`.`dir`=\'entrata\' AND `co_tipidocumento`.`name`!=\'Bozza\' AND `co_documenti`.`data` BETWEEN '.prepare($start).' AND '.prepare($end).' AND `is_fiscale`=1 AND `zz_segments`.`autofatture`=0 GROUP BY YEAR(`co_documenti`.`data`), MONTH(`co_documenti`.`data`) ORDER BY YEAR(`co_documenti`.`data`) ASC, MONTH(`co_documenti`.`data`) ASC'); $results = $dbo->fetchArray('
SELECT
ROUND(SUM(IF(`reversed`=1, -(`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`), (`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`))), 2) AS result,
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`
LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento`.`id` = `co_tipidocumento_lang`.`id_record` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->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_tipidocumento`.`dir`=\'entrata\'
AND `co_tipidocumento`.`name`!=\'Bozza\'
AND `co_documenti`.`data` BETWEEN '.prepare($start).' AND '.prepare($end).'
AND `is_fiscale`=1
AND `zz_segments`.`autofatture`=0
GROUP BY
YEAR(`co_documenti`.`data`), MONTH(`co_documenti`.`data`)
ORDER BY
YEAR(`co_documenti`.`data`) ASC, MONTH(`co_documenti`.`data`) ASC
');
} else { } else {
$results = $dbo->fetchArray(' $results = $dbo->fetchArray('
SELECT SELECT
ROUND(SUM(IF(`reversed`=1, -(`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`), (`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`))), 2) AS result, ROUND(SUM(IF(`reversed`=1, -(`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`), (`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`))), 2) AS result,
YEAR(`co_documenti`.`data`) AS year, YEAR(`co_documenti`.`data`) AS year,
MONTH(`co_documenti`.`data`) AS month MONTH(`co_documenti`.`data`) AS month
FROM FROM
`co_documenti` `co_documenti`
INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento`=`co_tipidocumento`.`id` INNER JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento`=`co_tipidocumento`.`id`
LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento`.`id` = `co_tipidocumento_lang`.`id_record` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento`.`id` = `co_tipidocumento_lang`.`id_record` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`iddocumento`=`co_documenti`.`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` INNER JOIN `zz_segments` ON `co_documenti`.`id_segment`=`zz_segments`.`id`
WHERE WHERE
`co_tipidocumento`.`dir`=\'entrata\' `co_tipidocumento`.`dir`=\'entrata\'
AND `co_tipidocumento`.`name`!=\'Bozza\' AND `co_tipidocumento`.`name`!=\'Bozza\'
AND `co_documenti`.`data` BETWEEN '.prepare($start).' AND '.prepare($end).' AND `co_documenti`.`data` BETWEEN '.prepare($start).' AND '.prepare($end).'
AND `is_fiscale`=1 AND `is_fiscale`=1
AND `zz_segments`.`autofatture`=0 AND `zz_segments`.`autofatture`=0
GROUP BY GROUP BY
YEAR(`co_documenti`.`data`), MONTH(`co_documenti`.`data`) YEAR(`co_documenti`.`data`), MONTH(`co_documenti`.`data`)
UNION UNION
SELECT SELECT
ROUND(SUM(`vb_righe_venditabanco`.`subtotale` - `vb_righe_venditabanco`.`sconto`), 2) AS result, ROUND(SUM(`vb_righe_venditabanco`.`subtotale` - `vb_righe_venditabanco`.`sconto`), 2) AS result,
YEAR(`vb_venditabanco`.`data`) AS year, YEAR(`vb_venditabanco`.`data`) AS year,
MONTH(`vb_venditabanco`.`data`) AS month MONTH(`vb_venditabanco`.`data`) AS month
FROM FROM
`vb_venditabanco` `vb_venditabanco`
INNER JOIN `vb_righe_venditabanco` ON `vb_righe_venditabanco`.`idvendita`=`vb_venditabanco`.`id` INNER JOIN `vb_righe_venditabanco` ON `vb_righe_venditabanco`.`idvendita`=`vb_venditabanco`.`id`
GROUP BY GROUP BY
YEAR(`vb_venditabanco`.`data`), MONTH(`vb_venditabanco`.`data`)'); YEAR(`vb_venditabanco`.`data`), MONTH(`vb_venditabanco`.`data`)
');
} }
$results = Stats::monthly($results, $start, $end); $results = Stats::monthly($results, $start, $end);
echo json_encode([ echo json_encode([
'label' => tr('Fatturato').' - '.tr('Periodo _NUM_', [ 'label' => tr('Fatturato').' - '.tr('Periodo _NUM_', [
'_NUM_' => $calendar_id, '_NUM_' => $calendar_id,
@ -74,6 +96,7 @@ switch (filter('op')) {
]); ]);
break; break;
case 'acquisti': case 'acquisti':
$results = $dbo->fetchArray('SELECT ROUND(SUM(IF(`reversed`=1, -(`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`), (`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`))), 2) AS result, 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` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento`.`id` = `co_tipidocumento_lang`.`id_record` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->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_tipidocumento`.`dir`=\'uscita\' AND `co_tipidocumento_lang`.`title`!=\'Bozza\' AND `co_documenti`.`data` BETWEEN '.prepare($start).' AND '.prepare($end).' AND `is_fiscale`=1 AND `zz_segments`.`autofatture`=0 GROUP BY YEAR(`co_documenti`.`data`), MONTH(`co_documenti`.`data`) ORDER BY YEAR(`co_documenti`.`data`) ASC, MONTH(`co_documenti`.`data`) ASC'); $results = $dbo->fetchArray('SELECT ROUND(SUM(IF(`reversed`=1, -(`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`), (`co_righe_documenti`.`subtotale` - `co_righe_documenti`.`sconto`))), 2) AS result, 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` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento`.`id` = `co_tipidocumento_lang`.`id_record` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->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_tipidocumento`.`dir`=\'uscita\' AND `co_tipidocumento_lang`.`title`!=\'Bozza\' AND `co_documenti`.`data` BETWEEN '.prepare($start).' AND '.prepare($end).' AND `is_fiscale`=1 AND `zz_segments`.`autofatture`=0 GROUP BY YEAR(`co_documenti`.`data`), MONTH(`co_documenti`.`data`) ORDER BY YEAR(`co_documenti`.`data`) ASC, MONTH(`co_documenti`.`data`) ASC');

View File

@ -33,6 +33,8 @@ echo '
$start = $_SESSION['period_start']; $start = $_SESSION['period_start'];
$end = $_SESSION['period_end']; $end = $_SESSION['period_end'];
$translated_months = [ tr('Gennaio'), tr('Febbraio'), tr('Marzo'), tr('Aprile'), tr('Maggio'), tr('Giugno'), tr('Luglio'), tr('Agosto'), tr('Settembre'), tr('Ottobre'), tr('Novembre'), tr('Dicembre') ];
// Fatturato // Fatturato
echo ' echo '
<div class="card card-info"> <div class="card card-info">
@ -75,8 +77,6 @@ echo '
start = moment("'.$start.'"); start = moment("'.$start.'");
end = moment("'.$end.'"); end = moment("'.$end.'");
months = get_months(start, end);
var chart_options = { var chart_options = {
type: "line", type: "line",
data: { data: {
@ -414,10 +414,12 @@ echo '
echo ' echo '
<script> <script>
$(document).ready(function() { $(document).ready(function() {
var translatedMonths = ' . json_encode($translated_months) . ';
new Chart(document.getElementById("interventi_n_tipologia").getContext("2d"), { new Chart(document.getElementById("interventi_n_tipologia").getContext("2d"), {
type: "bar", type: "bar",
data: { data: {
labels: months, labels: translatedMonths,
datasets: [ datasets: [
'.$dataset.' '.$dataset.'
] ]
@ -468,10 +470,11 @@ echo '
echo ' echo '
<script> <script>
$(document).ready(function() { $(document).ready(function() {
var translatedMonths = ' . json_encode($translated_months) . ';
new Chart(document.getElementById("interventi_ore_tipologia").getContext("2d"), { new Chart(document.getElementById("interventi_ore_tipologia").getContext("2d"), {
type: "bar", type: "bar",
data: { data: {
labels: months, labels: translatedMonths,
datasets: [ datasets: [
'.$dataset.' '.$dataset.'
] ]
@ -558,10 +561,12 @@ echo '
echo ' echo '
<script> <script>
$(document).ready(function() { $(document).ready(function() {
var translatedMonths = ' . json_encode($translated_months) . ';
new Chart(document.getElementById("sessioni").getContext("2d"), { new Chart(document.getElementById("sessioni").getContext("2d"), {
type: "bar", type: "bar",
data: { data: {
labels: months, labels: translatedMonths,
datasets: [ datasets: [
'.($dataset ?: '{ label: "", backgroundColor: "transparent", data: [ 0,0,0,0,0,0,0,0,0,0,0,0 ] }').' '.($dataset ?: '{ label: "", backgroundColor: "transparent", data: [ 0,0,0,0,0,0,0,0,0,0,0,0 ] }').'
] ]
@ -724,10 +729,12 @@ echo '
echo ' echo '
<script> <script>
$(document).ready(function() { $(document).ready(function() {
var translatedMonths = ' . json_encode($translated_months) . ';
new Chart(document.getElementById("n_anagrafiche").getContext("2d"), { new Chart(document.getElementById("n_anagrafiche").getContext("2d"), {
type: "line", type: "line",
data: { data: {
labels: months, labels: translatedMonths,
datasets: [ datasets: [
'.$dataset.' '.$dataset.'
] ]

View File

@ -31,8 +31,7 @@ class LineChart extends Stat {
this.getData(start, end, function(response) { this.getData(start, end, function(response) {
var data = JSON.parse(response); var data = JSON.parse(response);
var label = data.label;
var label = data.badge;
var dataset = []; var dataset = [];
var labels = []; var labels = [];

View File

@ -69,3 +69,6 @@ INSERT INTO `zz_settings_lang` (`id`, `id_lang`, `id_record`, `title`, `help`, `
-- Ripristino impostazione per limitare la visualizzazione degli impianti a quelli gestiti dal tecnico -- Ripristino impostazione per limitare la visualizzazione degli impianti a quelli gestiti dal tecnico
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES (NULL, 'Limita la visualizzazione degli impianti a quelli gestiti dal tecnico', '0', 'boolean', '1', 'Applicazione', '9'); INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES (NULL, 'Limita la visualizzazione degli impianti a quelli gestiti dal tecnico', '0', 'boolean', '1', 'Applicazione', '9');
-- Fix plugin Ddt del cliente
UPDATE `zz_plugins` SET `options` = '{ \"main_query\": [ { \"type\": \"table\", \"fields\": \"Numero, Data, Descrizione, Qtà\", \"query\": \"SELECT `dt_ddt`.`id`, (CASE WHEN `dt_tipiddt`.`dir` = \'entrata\' THEN (SELECT `id` FROM `zz_modules` WHERE `name` = \'Ddt in uscita\') ELSE (SELECT `id` FROM `zz_modules` WHERE `name` = \'Ddt in entrata\') END) AS _link_module_, `dt_ddt`.`id` AS _link_record_, IF(`dt_ddt`.`numero_esterno` = \'\', `dt_ddt`.`numero`, `dt_ddt`.`numero_esterno`) AS Numero, DATE_FORMAT(`dt_ddt`.`data`, \'%d/%m/%Y\') AS Data, `dt_righe_ddt`.`descrizione` AS `Descrizione`, REPLACE(REPLACE(REPLACE(FORMAT(`dt_righe_ddt`.`qta`, 2), \',\', \'#\'), \'.\', \',\'), \'#\', \'.\') AS `Qtà` FROM `dt_ddt` LEFT JOIN `dt_righe_ddt` ON `dt_ddt`.`id`=`dt_righe_ddt`.`idddt` JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id` WHERE `dt_ddt`.`idanagrafica`=|id_parent| ORDER BY `dt_ddt`.`id` DESC\"} ]}' WHERE `zz_plugins`.`name` = 'Ddt del cliente';