308 lines
13 KiB
PHP
308 lines
13 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";
|
|
$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']) {
|
|
echo '
|
|
<div class="table-responsive">
|
|
<table class="table table-striped table-hover table-condensed '.$class_tecnico.'">
|
|
<tr>
|
|
<th width="200"><i class="fa fa-user"></i> '.$r['ragione_sociale'].'</th>
|
|
<th width="300">'._('Orario').'</th>
|
|
<th width="190">'._('Ore').'</th>
|
|
<th width="190">'._('Km').'</th>
|
|
<th width="100">'._('Sconto ore').'</th>
|
|
<th width="100">'._('Sconto km').'</th>
|
|
<th width="40"></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 = '0000-00-00 00:00:00';
|
|
$orario_fine = '0000-00-00 00:00:00';
|
|
|
|
$pausa_inizio = '0000-00-00 00:00:00';
|
|
$pausa_fine = '0000-00-00 00:00:00';
|
|
|
|
if (!empty($r['orario_inizio'])) {
|
|
$orario_inizio = Translator::timestampToLocale($r['orario_inizio']);
|
|
}
|
|
|
|
if (!empty($r['orario_fine'])) {
|
|
$orario_fine = Translator::timestampToLocale($r['orario_fine']);
|
|
}
|
|
|
|
if (!empty($r['pausa_inizio'])) {
|
|
$pausa_inizio = Translator::timestampToLocale($r['pausa_inizio']);
|
|
}
|
|
|
|
if (!empty($r['pausa_fine'])) {
|
|
$pausa_fine = Translator::timestampToLocale($r['pausa_fine']);
|
|
}
|
|
|
|
$orario = $orario_inizio.' - '.$orario_fine;
|
|
$pausa = $pausa_inizio.' - '.$pausa_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 class="'.$class_tecnico.'">
|
|
<td class="tecn_'.$r['idtecnico'].'">';
|
|
|
|
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" ]}';
|
|
}
|
|
|
|
echo '
|
|
</td>';
|
|
|
|
// Orario
|
|
echo '
|
|
<td>';
|
|
if ($rs[0]['stato'] == 'Fatturato') {
|
|
echo '
|
|
<span>'.$ora_dal1.'</span>
|
|
<input type="hidden" id="orario_'.$id.'" name="orario['.$id.']" style="'.$display.'" value="'.$orario.'">';
|
|
} else {
|
|
echo '
|
|
<input class="form-control text-center datetimepicker" type="text" id="orario_'.$id.'" name="orario['.$id.']" value="'.$orario.'">';
|
|
}
|
|
echo '
|
|
</td>';
|
|
|
|
// ORE
|
|
echo '
|
|
<td style="border-right:1px solid #aaa;">
|
|
{[ "type": "number", "name": "ore['.$id.']", "value": "'.$ore.'", "disabled": 1 ]}
|
|
|
|
<div class="extra hide">
|
|
<table class="table table-condensed table-bordered">
|
|
<tr><th class="text-danger">'._('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>'._('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>'._('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.'" ]}
|
|
|
|
<div class="extra hide">
|
|
<table class="table table-condensed table-bordered">
|
|
<tr>
|
|
<th class="text-danger">'._('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>'._('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>'._('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.'" ]}';
|
|
} else {
|
|
echo '
|
|
<input type="hidden" name="sconto['.$id.']" value="'.Translator::numberToLocale($sconto_unitario).'" />
|
|
<input type="hidden" name="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.'" ]}';
|
|
} 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-o"></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>'._('Nessun tecnico presente').'.</p>';
|
|
}
|
|
|
|
echo '
|
|
<!-- AGGIUNTA TECNICO -->
|
|
<div class="row">
|
|
<div class="col-md-offset-6 col-md-3">
|
|
{[ "type": "select", "label": "'._('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> '._('Aggiungi tecnico').'
|
|
</button>
|
|
</div>
|
|
</div>';
|
|
|
|
?>
|
|
|
|
<script type="text/javascript" charset="utf-8">
|
|
$(document).ready( function(){
|
|
$('.datetimepicker').daterangepicker({
|
|
timePicker: true,
|
|
timePickerIncrement: 5,
|
|
locale: {
|
|
format: globals.timestampFormat,
|
|
customRangeLabel: globals.translations.custom,
|
|
applyLabel: globals.translations.apply,
|
|
cancelLabel: globals.translations.cancel,
|
|
fromLabel: globals.translations.from,
|
|
toLabel: globals.translations.to,
|
|
},
|
|
timePicker24Hour: true,
|
|
applyClass: 'btn btn-success btn-sm',
|
|
cancelClass: 'btn btn-danger btn-sm',
|
|
}
|
|
).on('change', function(){
|
|
id = $(this).attr('id').split('_');
|
|
idriga = id[1];
|
|
|
|
orario = $('#orario_'+idriga).val();
|
|
o = orario.split(' - ');
|
|
|
|
start = o[0];
|
|
end = o[1];
|
|
|
|
calcola_ore(idriga, start, end);
|
|
});
|
|
});
|
|
</script>
|
|
|
|
<script type="text/javascript" src="<?php echo $rootdir ?>/lib/init.js"></script>
|