Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
5f5d49dbda
|
@ -167,8 +167,9 @@ class Fattura extends Document
|
||||||
if (empty($id_banca_azienda)) {
|
if (empty($id_banca_azienda)) {
|
||||||
$id_banca_azienda = $azienda->{'idbanca_'.$conto};
|
$id_banca_azienda = $azienda->{'idbanca_'.$conto};
|
||||||
}
|
}
|
||||||
$model->id_banca_azienda = $id_banca_azienda;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$model->id_banca_azienda = $id_banca_azienda;
|
||||||
|
|
||||||
// Gestione dello Split Payment sulla base dell'anagrafica Controparte
|
// Gestione dello Split Payment sulla base dell'anagrafica Controparte
|
||||||
$split_payment = $anagrafica->split_payment;
|
$split_payment = $anagrafica->split_payment;
|
||||||
|
|
|
@ -331,3 +331,110 @@ $(document).ready(function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>';
|
</script>';
|
||||||
|
|
||||||
|
|
||||||
|
// Interventi per tecnico
|
||||||
|
$tecnici = $dbo->fetchArray("SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale, colore 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
|
||||||
|
LEFT OUTER JOIN in_interventi_tecnici ON in_interventi_tecnici.idtecnico = an_anagrafiche.idanagrafica
|
||||||
|
INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id
|
||||||
|
WHERE an_anagrafiche.deleted_at IS NULL AND an_tipianagrafiche.descrizione='Tecnico'
|
||||||
|
GROUP BY an_anagrafiche.idanagrafica
|
||||||
|
ORDER BY ragione_sociale ASC");
|
||||||
|
|
||||||
|
$dataset = '';
|
||||||
|
foreach ($tecnici as $tecnico) {
|
||||||
|
|
||||||
|
$sessioni = $dbo->fetchArray('SELECT SUM(in_interventi_tecnici.ore) AS result, CONCAT(CAST(SUM(in_interventi_tecnici.ore) AS char(20)),\' ore\') AS ore_lavorate, YEAR(in_interventi_tecnici.orario_inizio) AS year, MONTH(in_interventi_tecnici.orario_inizio) AS month FROM in_interventi_tecnici INNER JOIN `in_interventi` ON `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id` LEFT JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`idstatointervento` WHERE in_interventi_tecnici.idtecnico = '.prepare($tecnico['id']).' AND in_interventi_tecnici.orario_inizio BETWEEN '.prepare($start).' AND '.prepare($end).' AND `in_statiintervento`.`is_completato` = 1 GROUP BY YEAR(in_interventi_tecnici.orario_inizio), MONTH(in_interventi_tecnici.orario_inizio) ORDER BY YEAR(in_interventi_tecnici.orario_inizio) ASC, MONTH(in_interventi_tecnici.orario_inizio) ASC');
|
||||||
|
|
||||||
|
$sessioni = Stats::monthly($sessioni, $start, $end);
|
||||||
|
|
||||||
|
//Colore tecnico
|
||||||
|
$background = $tecnico['colore'];
|
||||||
|
if (empty( $background ) || $background == '#FFFFFF' ){
|
||||||
|
//Random color
|
||||||
|
$background = '#'.dechex(rand(256, 16777215));
|
||||||
|
}
|
||||||
|
|
||||||
|
$dataset .= '{
|
||||||
|
label: "'.$tecnico['ragione_sociale'].'",
|
||||||
|
backgroundColor: "'.$background.'",
|
||||||
|
data: [
|
||||||
|
'.implode(',', array_column($sessioni, 'result')).'
|
||||||
|
],
|
||||||
|
|
||||||
|
},';
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<div class="box box-info">
|
||||||
|
<div class="box-header with-border">
|
||||||
|
<h3 class="box-title">'.tr('Ore di lavoro per tecnico').'</h3>
|
||||||
|
|
||||||
|
<div class="box-tools pull-right">
|
||||||
|
<button type="button" class="btn btn-box-tool" data-widget="collapse">
|
||||||
|
<i class="fa fa-minus"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<canvas class="box-body collapse in" id="sessioni" height="100"></canvas>
|
||||||
|
</div>';
|
||||||
|
|
||||||
|
// Script per il grafico ore interventi per tecnico
|
||||||
|
echo '
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
new Chart(document.getElementById("sessioni").getContext("2d"), {
|
||||||
|
type: "horizontalBar",
|
||||||
|
data: {
|
||||||
|
labels: months,
|
||||||
|
datasets: [
|
||||||
|
'.$dataset.'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
responsive: true,
|
||||||
|
legend: {
|
||||||
|
position: "bottom",
|
||||||
|
},
|
||||||
|
scales: {
|
||||||
|
xAxes: [{
|
||||||
|
ticks: {
|
||||||
|
// Include a dollar sign in the ticks
|
||||||
|
callback: function(value, index, values) {
|
||||||
|
var text = "";
|
||||||
|
if (value<=1){
|
||||||
|
text = " ora";
|
||||||
|
}else{
|
||||||
|
text = " ore";
|
||||||
|
}
|
||||||
|
return value + text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
|
||||||
|
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.xLabel+" ore (attività completate)";
|
||||||
|
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>';
|
Loading…
Reference in New Issue