openstamanager/modules/interventi/ajax_tecnici.php

296 lines
12 KiB
PHP

<?php
include_once __DIR__.'/../../core.php';
include_once $docroot.'/modules/interventi/modutil.php';
switch (get('op')) {
// OPERAZIONI PER AGGIUNTA NUOVA SESSIONE DI LAVORO
case 'add_sessione':
$idtecnico = get('idtecnico');
// Verifico se l'intervento è collegato ad un contratto
$rs = $dbo->fetchArray('SELECT idcontratto FROM co_righe_contratti WHERE idintervento='.prepare($id_record));
$idcontratto = $rs[0]['idcontratto'];
$ore = 1;
$inizio = date('Y-m-d H:\0\0');
$fine = date_modify(date_create(date('Y-m-d H:\0\0')), '+'.$ore.' hours')->format('Y-m-d H:\0\0');
add_tecnico($id_record, $idtecnico, $inizio, $fine, $idcontratto);
break;
// RIMOZIONE SESSIONE DI LAVORO
case 'del_sessione':
$dbo->query('DELETE FROM in_interventi_tecnici WHERE id='.prepare(get('id')));
break;
}
$show_costi = true;
// Limitazione delle azioni dei tecnici
if ($user['gruppo'] == 'Tecnici') {
$show_costi = !empty($user['idanagrafica']) && get_var('Mostra i prezzi al tecnico');
}
// RECUPERO IL TIPO DI INTERVENTO
$rss = $dbo->fetchArray('SELECT idtipointervento FROM in_interventi WHERE id='.prepare($id_record));
$idtipointervento = $rs[0]['idtipointervento'];
$query = 'SELECT * FROM an_anagrafiche JOIN in_interventi_tecnici ON in_interventi_tecnici.idtecnico = an_anagrafiche.idanagrafica WHERE deleted=0 AND idintervento='.prepare($id_record)." AND idanagrafica IN (SELECT idanagrafica FROM an_tipianagrafiche_anagrafiche WHERE idtipoanagrafica = (SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione = 'Tecnico')) ORDER BY ragione_sociale ASC, in_interventi_tecnici.orario_inizio ASC, in_interventi_tecnici.id ASC";
$rs2 = $dbo->fetchArray($query);
$prev_tecnico = '';
if (!empty($rs2)) {
foreach ($rs2 as $key => $r) {
$idtecnico = $r['idanagrafica'];
// Intestazione tecnico
if ($prev_tecnico != $r['ragione_sociale']) {
$prev_tecnico = $r['ragione_sociale'];
echo '
<div class="table-responsive">
<table class="table table-striped table-hover table-condensed">
<tr>
<th><i class="fa fa-user"></i> '.$r['ragione_sociale'].'</th>
<th>'.tr('Orario inizio').'</th>
<th>'.tr('Orario fine').'</th>
<th>'.tr('Ore').'</th>
<th>'.tr('Km').'</th>
<th>'.tr('Sconto ore').'</th>
<th>'.tr('Sconto km').'</th>
<th></th>
</tr>';
}
$id = $r['id'];
// Lettura costi unitari salvati al momento dell'intervento
$sconto_unitario = $r['sconto_unitario'];
$tipo_sconto = $r['tipo_sconto'];
$scontokm_unitario = $r['scontokm_unitario'];
$tipo_scontokm = $r['tipo_scontokm'];
$sconto = $r['sconto'];
$scontokm = $r['scontokm'];
$costo_ore_unitario = $r['prezzo_ore_unitario'];
$costo_km_unitario = $r['prezzo_km_unitario'];
$costo_dirittochiamata = $r['prezzo_dirittochiamata'];
$costo_ore_unitario_tecnico = $r['prezzo_ore_unitario_tecnico'];
$costo_km_unitario_tecnico = $r['prezzo_km_unitario_tecnico'];
$costo_dirittochiamata_tecnico = $r['prezzo_dirittochiamata_tecnico'];
$costo_km_consuntivo_tecnico = $r['prezzo_km_consuntivo_tecnico'];
$costo_ore_consuntivo_tecnico = $r['prezzo_ore_consuntivo_tecnico'];
$costo_km_consuntivo = $r['prezzo_km_consuntivo'];
$costo_ore_consuntivo = $r['prezzo_ore_consuntivo'];
$orario_inizio = $r['orario_inizio'];
$orario_fine = $r['orario_fine'];
$km = $r['km'];
$ore = $r['ore'];
// Costi unitari
echo '
<input type="hidden" name="idtecnico['.$id.']" value="'.$idtecnico.'" />
<input type="hidden" name="id_[]" value="'.$id.'" />
<input type="hidden" name="prezzo_km_unitario['.$id.']" value="'.$costo_km_unitario.'" />
<input type="hidden" name="prezzo_dirittochiamata['.$id.']" value="'.$costo_dirittochiamata.'" />
<input type="hidden" name="prezzo_ore_unitario_tecnico['.$id.']" value="'.$costo_ore_unitario_tecnico.'" />
<input type="hidden" name="prezzo_km_unitario_tecnico['.$id.']" value="'.$costo_km_unitario_tecnico.'" />
<input type="hidden" name="prezzo_dirittochiamata_tecnico['.$id.']" value="'.$costo_dirittochiamata_tecnico.'" />';
echo '
<tr>
<td class="tecn_'.$r['idtecnico'].'" style="min-width:200px;" >';
if ($rs[0]['stato'] != 'Fatturato') {
// Elenco tipologie di interventi
echo '
{[ "type": "select", "name": "idtipointerventot['.$id.']", "value": "'.$r['idtipointervento'].'", "values": "query=SELECT idtipointervento AS id, descrizione, IFNULL((SELECT costo_ore FROM in_tariffe WHERE idtipointervento=in_tipiintervento.idtipointervento AND idtecnico='.prepare($r['idtecnico']).'), 0) AS costo_orario FROM in_tipiintervento ORDER BY descrizione", "class": "", "extra": "" ]}';
}
echo '
</td>';
// Orario di inizio
echo '
<td>';
if ($rs[0]['stato'] == 'Fatturato') {
echo '
<span>'.$orario_inizio.'</span>
<input type="hidden" name="orario_inizio['.$id.']" value="'.$orario_inizio.'">';
} else {
echo '
{[ "type": "timestamp", "name": "orario_inizio['.$id.']", "id": "inizio_'.$id.'", "value": "'.$orario_inizio.'", "class": "orari min-width" ]}';
}
echo '
</td>';
// Orario di fine
echo '
<td>';
if ($rs[0]['stato'] == 'Fatturato') {
echo '
<span>'.$orario_fine.'</span>
<input type="hidden" name="orario_fine['.$id.']" value="'.$orario_fine.'">';
} else {
echo '
{[ "type": "timestamp", "name": "orario_fine['.$id.']", "id": "fine_'.$id.'", "value": "'.$orario_fine.'", "class": "orari min-width", "min-date": "'.$orario_inizio.'" ]}';
}
echo '
</td>';
// ORE
echo '
<td style="border-right:1px solid #aaa;">
{[ "type": "number", "name": "ore['.$id.']", "value": "'.$ore.'", "disabled": 1, "class": "small-width" ]}
<div class="extra hide">
<table class="table table-condensed table-bordered">
<tr><th class="text-danger">'.tr('Costo').':</th><td align="right">'.Translator::numberToLocale($costo_ore_consuntivo_tecnico)."<small class='help-block'>".Translator::numberToLocale($costo_ore_unitario_tecnico).'x'.Translator::numberToLocale($ore).'<br>+'.Translator::numberToLocale($costo_dirittochiamata_tecnico).'</small></td></tr>
<tr><th>'.tr('Addebito').':</th><td align="right">'.Translator::numberToLocale($costo_ore_consuntivo).'<small class="help-block">'.Translator::numberToLocale($costo_ore_unitario).'x'.Translator::numberToLocale($ore).'<br>+'.Translator::numberToLocale($costo_dirittochiamata).'</small></td></tr>
<tr><th>'.tr('Scontato').':</th><td align="right">'.Translator::numberToLocale($costo_ore_consuntivo - $sconto).'</td></tr>
</table>
</div>
</td>';
// KM
echo '
<td style="border-right:1px solid #aaa;">
{[ "type": "number", "name": "km['.$id.']", "value": "'.$km.'", "class": "small-width" ]}
<div class="extra hide">
<table class="table table-condensed table-bordered">
<tr>
<th class="text-danger">'.tr('Costo').':</th>
<td align="right">
'.Translator::numberToLocale($costo_km_consuntivo_tecnico).'
<small class="help-block">
'.Translator::numberToLocale($costo_km_unitario_tecnico).'x'.Translator::numberToLocale($km).'
</small><br>
</td>
</tr>
<tr>
<th>'.tr('Addebito').':</th>
<td align="right">
'.Translator::numberToLocale($costo_km_consuntivo).'
<small class="help-block">
'.Translator::numberToLocale($costo_km_unitario).'x'.Translator::numberToLocale($km).'
</small><br>
</td>
</tr>
<tr>
<th>'.tr('Scontato').':</th>
<td align="right">'.Translator::numberToLocale($costo_km_consuntivo - $scontokm).'</td>
</tr>
</table>
</div>
</td>';
// Sconto ore
echo '
<td style="border-right:1px solid #aaa;">';
if ($user['idanagrafica'] == 0 || $show_costi) {
echo '
{[ "type": "number", "name": "sconto['.$id.']", "value": "'.$sconto_unitario.'", "icon-after": "choice|untprc|'.$tipo_sconto.'", "class": "small-width" ]}';
} else {
echo '
<input type="hidden" name="sconto['.$id.']" value="'.Translator::numberToLocale($sconto_unitario).'" />
<input type="hidden" name="tipo_sconto['.$id.']" value="'.Translator::numberToLocale($tipo_sconto).'" />';
}
echo '
</td>';
// Sconto km
echo '
<td style="border-right:1px solid #aaa;">';
if ($user['idanagrafica'] == 0 || $show_costi) {
echo '
{[ "type": "number", "name": "scontokm['.$id.']", "value": "'.$scontokm_unitario.'", "icon-after": "choice|untprc|'.$tipo_scontokm.'", "class": "small-width" ]}';
} else {
echo '
<input type="hidden" name="scontokm['.$id.']" value="'.Translator::numberToLocale($scontokm_unitario).'" />
<input type="hidden" name="tipo_scontokm['.$id.']" value="'.Translator::numberToLocale($tipo_scontokm).'" />';
}
echo '
<input type="hidden" name="prezzo_ore_consuntivo['.$id.']" value="'.Translator::numberToLocale($costo_ore_consuntivo).'" />
<input type="hidden" name="prezzo_km_consuntivo['.$id.']" value="'.Translator::numberToLocale($costo_km_consuntivo).'" />
<input type="hidden" name="prezzo_ore_consuntivotecnico['.$id.']" value="'.Translator::numberToLocale($costo_ore_consuntivo_tecnico).'" />
<input type="hidden" name="prezzo_km_consuntivotecnico['.$id.']" value="'.Translator::numberToLocale($costo_km_consuntivo_tecnico).'" />
</td>';
// Pulsante aggiunta nuova sessione
echo '
<td>
<a class="btn btn-danger" id="delbtn_'.$id.'" onclick="elimina_sessione(\''.$id.'\', \''.$id_record.'\', \''.$idzona.'\');" title="Elimina riga" class="only_rw"><i class="fa fa-trash"></i></a>
</td>
</tr>';
// Intestazione tecnico
if (!isset($rs2[$key + 1]['ragione_sociale']) || $r['ragione_sociale'] != $rs2[$key + 1]['ragione_sociale']) {
echo '
</table>
</div>';
}
}
} else {
echo
'<p>'.tr('Nessun tecnico presente').'.</p>';
}
echo '
<!-- AGGIUNTA TECNICO -->
<div class="row">
<div class="col-md-offset-6 col-md-3">
{[ "type": "select", "label": "'.tr('Aggiungi tecnico').'", "name": "nuovotecnico", "ajax-source": "tecnici" ]}
</div>
<div class="col-md-3">
<br>
<button type="button" class="btn btn-primary btn-block" onclick="if($(\'#nuovotecnico\').val()){ add_tecnici( \''.$id_record.'\', $(\'#nuovotecnico\').val()); }else{ alert(\'Seleziona un tecnico!\'); }">
<i class="fa fa-plus"></i> '.tr('Aggiungi tecnico').'
</button>
</div>
</div>';
?>
<script src="<?php echo $rootdir ?>/lib/init.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.orari').on("dp.change", function(){
idriga = $(this).attr('id').split('_')[1];
start = $('#inizio_' + idriga).val();
end = $('#fine_' + idriga).val();
calcola_ore(idriga, start, end);
});
$(".orari[id^=inizio]").on("dp.change", function (e) {
var fine = $(this).closest("tr").find(".orari[id^=fine]").data("DateTimePicker");
fine.minDate(e.date);
if(fine.date() < e.date){
date = moment(e.date).add(1, 'h');
fine.date(date);
}
});
});
</script>