1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2024-12-20 20:25:17 +01:00
openstamanager/modules/interventi/ajax_tecnici.php
Thomas Zilio 1da2f8909f Miglioramenti nella gestione dell'IVA
Aggiunta possibilità di specificare IVA di vendita e di acquisto predefinita per le anagrafiche.
Aggiunto nuovo modulo per le Stampe contabili.
Modifica nella gestione dei diritti di chiamata, ora applicati solo sulla prima sessione di lavoro della giornata (se questa viene eliminata, il diritto chiamata viene rimosso di conseguenza anche con altre sessioni presenti).
2017-09-14 16:20:11 +02:00

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'].'">';
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 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="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>