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;
|
||||
color: #212529;
|
||||
text-align: left;
|
||||
background-color: #fff;
|
||||
/*background-color: #fff;*/
|
||||
}
|
||||
|
||||
html {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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>';
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue