mirror of
https://github.com/devcode-it/openstamanager.git
synced 2024-12-20 20:25:17 +01:00
1da2f8909f
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).
296 lines
12 KiB
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'].'">';
|
|
|
|
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>
|