Aggiunta informazione user sessioni di lavoro tecnici
Aggiornamento chartjs Migliorie minori
This commit is contained in:
parent
966d95c5b6
commit
009a36adb9
|
@ -38,7 +38,7 @@ body {
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
color: #212529;
|
color: #212529;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
background-color: #fff;
|
/*background-color: #fff;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
html {
|
html {
|
||||||
|
|
|
@ -111,7 +111,7 @@ function buttonLoading(button) {
|
||||||
$this.attr("class")
|
$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.addClass("btn-warning");
|
||||||
$this.prop("disabled", true);
|
$this.prop("disabled", true);
|
||||||
|
|
||||||
|
|
|
@ -123,8 +123,8 @@ if (filter('action') == 'do_update') {
|
||||||
<h3 class="box-title">'.tr('Aggiornamento in corso!').'</h3>
|
<h3 class="box-title">'.tr('Aggiornamento in corso!').'</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="box-body">
|
<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("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("Nel caso il problema persista, rivolgersi all'amministratore o all'assistenza ufficiale").'.</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>
|
<a class="btn btn-info" href="'.base_path().'/index.php"><i class="fa fa-repeat"></i> '.tr('Riprova').'</a>
|
||||||
</div>
|
</div>
|
||||||
</div>';
|
</div>';
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
include_once __DIR__.'/../../core.php';
|
include_once __DIR__.'/../../core.php';
|
||||||
|
use Models\User;
|
||||||
|
|
||||||
$show_costi = true;
|
$show_costi = true;
|
||||||
// Limitazione delle azioni dei tecnici
|
// 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).')');
|
$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'];
|
$is_completato = $rss[0]['flag_completato'];
|
||||||
|
|
||||||
|
|
||||||
// Sessioni dell'intervento
|
// 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
|
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
|
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';
|
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);
|
$sessioni = $dbo->fetchArray($query);
|
||||||
|
@ -46,8 +49,21 @@ if (!empty($sessioni)) {
|
||||||
echo '
|
echo '
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-striped table-hover table-condensed">
|
<table class="table table-striped table-hover table-condensed">
|
||||||
<tr>
|
<tr><th>';
|
||||||
<th><i class="fa fa-user"></i> '.$sessione['ragione_sociale'].' '.(($sessione['anagrafica_deleted_at']) ? '<small class="text-danger"><em>('.tr('Eliminato').')</em></small>' : '').'</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 inizio').'</th>
|
||||||
<th width="15%">'.tr('Orario fine').'</th>
|
<th width="15%">'.tr('Orario fine').'</th>
|
||||||
<th width="12%">'.tr('Ore').'</th>
|
<th width="12%">'.tr('Ore').'</th>
|
||||||
|
|
|
@ -22,7 +22,13 @@ include_once __DIR__.'/../../core.php';
|
||||||
use Modules\Statistiche\Stats;
|
use Modules\Statistiche\Stats;
|
||||||
|
|
||||||
echo '
|
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'];
|
$start = $_SESSION['period_start'];
|
||||||
$end = $_SESSION['period_end'];
|
$end = $_SESSION['period_end'];
|
||||||
|
@ -63,13 +69,6 @@ echo '
|
||||||
<canvas class="box-body collapse in" id="fatturato" height="100"></canvas>
|
<canvas class="box-body collapse in" id="fatturato" height="100"></canvas>
|
||||||
</div>';
|
</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
|
// Script per il grafico del fatturato
|
||||||
echo '
|
echo '
|
||||||
<script>
|
<script>
|
||||||
|
@ -443,7 +442,7 @@ echo '
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
new Chart(document.getElementById("sessioni").getContext("2d"), {
|
new Chart(document.getElementById("sessioni").getContext("2d"), {
|
||||||
type: "horizontalBar",
|
type: "bar",
|
||||||
data: {
|
data: {
|
||||||
labels: months,
|
labels: months,
|
||||||
datasets: [
|
datasets: [
|
||||||
|
@ -452,6 +451,7 @@ $(document).ready(function() {
|
||||||
},
|
},
|
||||||
options: {
|
options: {
|
||||||
responsive: true,
|
responsive: true,
|
||||||
|
indexAxis: "y",
|
||||||
legend: {
|
legend: {
|
||||||
position: "bottom",
|
position: "bottom",
|
||||||
},
|
},
|
||||||
|
@ -502,12 +502,24 @@ $(document).ready(function() {
|
||||||
|
|
||||||
|
|
||||||
$dataset = '';
|
$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_documenti ON an_anagrafiche.idanagrafica = co_documenti.idanagrafica
|
||||||
INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id
|
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_anagrafiche ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica
|
||||||
INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica
|
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);
|
$clienti = Stats::monthly($clienti, $start, $end);
|
||||||
|
|
||||||
|
@ -515,18 +527,39 @@ $clienti = Stats::monthly($clienti, $start, $end);
|
||||||
$background = '#'.dechex(rand(256, 16777215));
|
$background = '#'.dechex(rand(256, 16777215));
|
||||||
|
|
||||||
$dataset .= '{
|
$dataset .= '{
|
||||||
label: "'.tr("Nuovi clienti per mese").'",
|
label: "'.tr("Nuovi clienti").'",
|
||||||
backgroundColor: "'.$background.'",
|
backgroundColor: "'.$background.'",
|
||||||
data: [
|
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 '
|
echo '
|
||||||
<div class="box box-info">
|
<div class="box box-info">
|
||||||
<div class="box-header with-border">
|
<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">
|
<div class="box-tools pull-right">
|
||||||
<button type="button" class="btn btn-box-tool" data-widget="collapse">
|
<button type="button" class="btn btn-box-tool" data-widget="collapse">
|
||||||
|
@ -534,14 +567,14 @@ echo '
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</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>';
|
</div>';
|
||||||
|
|
||||||
// Script per il grafico dei nuovi clienti per mese
|
// Script per il grafico dei nuovi clienti per mese
|
||||||
echo '
|
echo '
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
new Chart(document.getElementById("n_nuovi_clienti").getContext("2d"), {
|
new Chart(document.getElementById("n_anagrafiche").getContext("2d"), {
|
||||||
type: "line",
|
type: "line",
|
||||||
data: {
|
data: {
|
||||||
labels: months,
|
labels: months,
|
||||||
|
@ -551,22 +584,6 @@ $(document).ready(function() {
|
||||||
},
|
},
|
||||||
options: {
|
options: {
|
||||||
responsive: true,
|
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: {
|
elements: {
|
||||||
line: {
|
line: {
|
||||||
tension: 0
|
tension: 0
|
||||||
|
@ -602,7 +619,6 @@ $(document).ready(function() {
|
||||||
labelString: "'.tr('Numero').'"
|
labelString: "'.tr('Numero').'"
|
||||||
},
|
},
|
||||||
ticks: {
|
ticks: {
|
||||||
// Include a dollar sign in the ticks
|
|
||||||
callback: function(value, index, values) {
|
callback: function(value, index, values) {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
"bootstrap-colorpicker": "2.5.1",
|
"bootstrap-colorpicker": "2.5.1",
|
||||||
"bootstrap-daterangepicker": "^2.1.25",
|
"bootstrap-daterangepicker": "^2.1.25",
|
||||||
"bootstrap-maxlength": "^1.10.1",
|
"bootstrap-maxlength": "^1.10.1",
|
||||||
"chart.js": "^2.7.0",
|
"chart.js": "^3.8.0",
|
||||||
"ckeditor4": "ckeditor/ckeditor-releases#full/latest",
|
"ckeditor4": "ckeditor/ckeditor-releases#full/latest",
|
||||||
"components-jqueryui": "^1.12.1",
|
"components-jqueryui": "^1.12.1",
|
||||||
"datatables.net-bs": "^1.10.15",
|
"datatables.net-bs": "^1.10.15",
|
||||||
|
|
Loading…
Reference in New Issue