Aggiunta informazione user sessioni di lavoro tecnici

Aggiornamento chartjs
Migliorie minori
This commit is contained in:
Luca 2022-07-02 20:46:18 +02:00
parent 966d95c5b6
commit 009a36adb9
6 changed files with 73 additions and 41 deletions

View File

@ -38,7 +38,7 @@ body {
line-height: 1.5;
color: #212529;
text-align: left;
background-color: #fff;
/*background-color: #fff;*/
}
html {

View File

@ -111,7 +111,7 @@ function buttonLoading(button) {
$this.attr("class")
];
$this.html('<i class="fa fa-spinner fa-pulse fa-fw"></i> Attendere...');
$this.html('<i class="fa fa-spinner fa-pulse fa-fw"></i>');
$this.addClass("btn-warning");
$this.prop("disabled", true);

View File

@ -123,8 +123,8 @@ if (filter('action') == 'do_update') {
<h3 class="box-title">'.tr('Aggiornamento in corso!').'</h3>
</div>
<div class="box-body">
<p>'.tr("E' attualmente in corso la procedura di aggiornamento del software, e pertanto siete pregati di attendere fino alla sua conclusione").'.</p>
<p>'.tr("Nel caso il problema persista, rivolgersi all'amministratore o all'assistenza ufficiale").'.</p>
<p>'.tr("Il software si trova attualmente nella fase di aggiornamento, potrebbero volerci fino a 10 minuti, siete pregati di attendere sino alla sua conclusione").'.</p>
<p>'.tr("In caso di problemi rivolgersi all'amministratore di sistema o all'assistenza del gestionale").'.</p>
<a class="btn btn-info" href="'.base_path().'/index.php"><i class="fa fa-repeat"></i> '.tr('Riprova').'</a>
</div>
</div>';

View File

@ -18,6 +18,7 @@
*/
include_once __DIR__.'/../../core.php';
use Models\User;
$show_costi = true;
// Limitazione delle azioni dei tecnici
@ -29,9 +30,11 @@ if ($user['gruppo'] == 'Tecnici') {
$rss = $dbo->fetchArray('SELECT is_completato AS flag_completato FROM in_statiintervento WHERE idstatointervento = (SELECT idstatointervento FROM in_interventi WHERE id='.prepare($id_record).')');
$is_completato = $rss[0]['flag_completato'];
// Sessioni dell'intervento
$query = 'SELECT in_interventi_tecnici.*, an_anagrafiche.ragione_sociale, an_anagrafiche.deleted_at AS anagrafica_deleted_at, in_tipiintervento.descrizione AS descrizione_tipo, in_interventi_tecnici.tipo_scontokm AS tipo_sconto_km FROM in_interventi_tecnici
$query = 'SELECT in_interventi_tecnici.*, an_anagrafiche.ragione_sociale, an_anagrafiche.deleted_at AS anagrafica_deleted_at, in_tipiintervento.descrizione AS descrizione_tipo, in_interventi_tecnici.tipo_scontokm AS tipo_sconto_km, user.id AS id_user FROM in_interventi_tecnici
INNER JOIN an_anagrafiche ON in_interventi_tecnici.idtecnico = an_anagrafiche.idanagrafica
LEFT JOIN (SELECT zz_users.id, zz_users.idanagrafica, zz_groups.nome FROM zz_users INNER JOIN zz_groups ON zz_groups.id = zz_users.idgruppo ORDER BY CASE WHEN zz_groups.nome = "Tecnici" THEN -1 ELSE zz_groups.nome END) AS user ON user.idanagrafica = an_anagrafiche.idanagrafica
INNER JOIN in_tipiintervento ON in_interventi_tecnici.idtipointervento = in_tipiintervento.idtipointervento
WHERE in_interventi_tecnici.idintervento='.prepare($id_record).' ORDER BY ragione_sociale ASC, in_interventi_tecnici.orario_inizio ASC, in_interventi_tecnici.id ASC';
$sessioni = $dbo->fetchArray($query);
@ -46,8 +49,21 @@ if (!empty($sessioni)) {
echo '
<div class="table-responsive">
<table class="table table-striped table-hover table-condensed">
<tr>
<th><i class="fa fa-user"></i> '.$sessione['ragione_sociale'].' '.(($sessione['anagrafica_deleted_at']) ? '<small class="text-danger"><em>('.tr('Eliminato').')</em></small>' : '').'</th>
<tr><th>';
if ($sessione['id_user']) {
$user = User::find($sessione['id_user']);
echo '
<img class="attachment-img tip" src="'.$user->photo.'" title="'.$user->nome_completo.'">';
} else {
echo '
<i class="fa fa-user-circle-o attachment-img tip" title="'.$sessione['ragione_sociale'].'"></i>';
}
echo'
'.$sessione['ragione_sociale'].' '.(($sessione['anagrafica_deleted_at']) ? '<small class="text-danger"><em>('.tr('Eliminato').')</em></small>' : '').'</th>
<th width="15%">'.tr('Orario inizio').'</th>
<th width="15%">'.tr('Orario fine').'</th>
<th width="12%">'.tr('Ore').'</th>

View File

@ -22,7 +22,13 @@ include_once __DIR__.'/../../core.php';
use Modules\Statistiche\Stats;
echo '
<script src="'.base_path().'/assets/dist/js/chartjs/Chart.min.js"></script>';
<script src="'.base_path().'/assets/dist/js/chartjs/Chart.min.js"></script>
<script src="'.$structure->fileurl('js/functions.js').'"></script>
<script src="'.$structure->fileurl('js/calendar.js').'"></script>
<script src="'.$structure->fileurl('js/manager.js').'"></script>
<script src="'.$structure->fileurl('js/stat.js').'"></script>
<script src="'.$structure->fileurl('js/stats/line_chart.js').'"></script>';
$start = $_SESSION['period_start'];
$end = $_SESSION['period_end'];
@ -63,13 +69,6 @@ echo '
<canvas class="box-body collapse in" id="fatturato" height="100"></canvas>
</div>';
echo '
<script src="'.$structure->fileurl('js/functions.js').'"></script>
<script src="'.$structure->fileurl('js/calendar.js').'"></script>
<script src="'.$structure->fileurl('js/manager.js').'"></script>
<script src="'.$structure->fileurl('js/stat.js').'"></script>
<script src="'.$structure->fileurl('js/stats/line_chart.js').'"></script>';
// Script per il grafico del fatturato
echo '
<script>
@ -443,7 +442,7 @@ echo '
<script>
$(document).ready(function() {
new Chart(document.getElementById("sessioni").getContext("2d"), {
type: "horizontalBar",
type: "bar",
data: {
labels: months,
datasets: [
@ -452,6 +451,7 @@ $(document).ready(function() {
},
options: {
responsive: true,
indexAxis: "y",
legend: {
position: "bottom",
},
@ -502,12 +502,24 @@ $(document).ready(function() {
$dataset = '';
$clienti = $dbo->fetchArray('SELECT COUNT(*) AS result, GROUP_CONCAT(an_anagrafiche.ragione_sociale, "<br>") AS ragione_sociale, YEAR(an_anagrafiche.created_at) AS year, MONTH(an_anagrafiche.created_at) AS month FROM an_anagrafiche
$nuovi_clienti = $dbo->fetchArray('SELECT COUNT(*) AS result, GROUP_CONCAT(an_anagrafiche.ragione_sociale, "<br>") 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, "<br>") 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, "<br>") 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 co_documenti.data <= '.prepare($end).' 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');
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');
$clienti = Stats::monthly($clienti, $start, $end);
@ -515,18 +527,39 @@ $clienti = Stats::monthly($clienti, $start, $end);
$background = '#'.dechex(rand(256, 16777215));
$dataset .= '{
label: "'.tr("Nuovi clienti per mese").'",
label: "'.tr("Nuovi clienti").'",
backgroundColor: "'.$background.'",
data: [
'.implode(',', array_column($clienti, 'result')).'
'.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 '
<div class="box box-info">
<div class="box-header with-border">
<h3 class="box-title">'.tr('Nuovi clienti per mese').'</h3>
<h3 class="box-title">'.tr('Nuove anagrafiche').'</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
@ -534,14 +567,14 @@ echo '
</button>
</div>
</div>
<canvas class="box-body collapse in" id="n_nuovi_clienti" height="100"></canvas>
<canvas class="box-body collapse in" id="n_anagrafiche" height="100"></canvas>
</div>';
// Script per il grafico dei nuovi clienti per mese
echo '
<script>
$(document).ready(function() {
new Chart(document.getElementById("n_nuovi_clienti").getContext("2d"), {
new Chart(document.getElementById("n_anagrafiche").getContext("2d"), {
type: "line",
data: {
labels: months,
@ -551,22 +584,6 @@ $(document).ready(function() {
},
options: {
responsive: true,
tooltips: {
callbacks: {
label: function(tooltipItem, data) {
var dataset = data.datasets[tooltipItem.datasetIndex];
var label = dataset.labels ? dataset.labels[tooltipItem.index] : "";
if (label) {
label += ": ";
}
label += tooltipItem.yLabel;
return label;
}
}
},
elements: {
line: {
tension: 0
@ -602,7 +619,6 @@ $(document).ready(function() {
labelString: "'.tr('Numero').'"
},
ticks: {
// Include a dollar sign in the ticks
callback: function(value, index, values) {
return value;
}

View File

@ -10,7 +10,7 @@
"bootstrap-colorpicker": "2.5.1",
"bootstrap-daterangepicker": "^2.1.25",
"bootstrap-maxlength": "^1.10.1",
"chart.js": "^2.7.0",
"chart.js": "^3.8.0",
"ckeditor4": "ckeditor/ckeditor-releases#full/latest",
"components-jqueryui": "^1.12.1",
"datatables.net-bs": "^1.10.15",