Skip to content

Commit 185bda0

Browse files
committed
feat: gestione tipi di intervento abilitati nei contratti e aggiunta righe per tipi di intervento abilitati
1 parent 9a600ee commit 185bda0

8 files changed

Lines changed: 230 additions & 17 deletions

File tree

include/common/riga.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ function aggiorna_guadagno() {
269269
</div>
270270
271271
<div class="col-md-4">
272-
{[ "type": "select", "label": "'.tr('Tipo intervento').'", "name": "id_tipointervento", "value": "'.$result['id_tipointervento'].'", "ajax-source": "tipiintervento", "placeholder": "'.tr('Seleziona un tipo di intervento...').'" ]}
272+
{[ "type": "select", "label": "'.tr('Tipo intervento').'", "name": "id_tipointervento", "value": "'.$result['id_tipointervento'].'", "ajax-source": "tipiintervento_abilitati", "placeholder": "'.tr('Seleziona un tipo di intervento...').'", "select-options": '.(!empty($options['select-options']['tipiintervento']) ? json_encode($options['select-options']['tipiintervento']) : '[]').' ]}
273273
</div>';
274274

275275
if (isset($result['type']) && isset($result['id'])) {

modules/contratti/actions.php

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,33 @@
590590

591591
break;
592592

593+
case 'toggle_tipo_attivita':
594+
// Recupera lo stato attuale
595+
$current = $dbo->fetchOne('SELECT `abilitato` FROM `co_contratti_tipiintervento` WHERE `idcontratto` = '.prepare($id_record).' AND `idtipointervento` = '.prepare(post('idtipointervento')));
596+
597+
if ($current) {
598+
// Inverti lo stato
599+
$nuovo_stato = $current['abilitato'] == 1 ? 0 : 1;
600+
$dbo->update('co_contratti_tipiintervento', [
601+
'abilitato' => $nuovo_stato,
602+
], [
603+
'idcontratto' => $id_record,
604+
'idtipointervento' => post('idtipointervento'),
605+
]);
606+
607+
echo json_encode([
608+
'status' => 'success',
609+
'abilitato' => $nuovo_stato == 1,
610+
]);
611+
} else {
612+
echo json_encode([
613+
'status' => 'error',
614+
'message' => tr('Tipo di attività non trovato'),
615+
]);
616+
}
617+
618+
break;
619+
593620
case 'import':
594621
$rs = $dbo->fetchArray('SELECT * FROM co_contratti_tipiintervento WHERE idcontratto = '.prepare(post('idcontratto')).' AND idtipointervento='.prepare(post('idtipointervento')));
595622

@@ -602,7 +629,7 @@
602629
.' `costo_ore_tecnico`=(SELECT `costo_orario_tecnico` FROM `in_tipiintervento` WHERE `id`='.prepare(post('idtipointervento')).'), '
603630
.' `costo_km_tecnico`=(SELECT `costo_km_tecnico` FROM `in_tipiintervento` WHERE `id`='.prepare(post('idtipointervento')).'), '
604631
.' `costo_dirittochiamata_tecnico`=(SELECT `costo_diritto_chiamata_tecnico` FROM `in_tipiintervento` WHERE `id`='.prepare(post('idtipointervento')).') '
605-
.' WHERE `idcontratto`='.prepare(post('idcontratto')).' AND `id`='.prepare(post('idtipointervento')));
632+
.' WHERE `idcontratto`='.prepare(post('idcontratto')).' AND `idtipointervento`='.prepare(post('idtipointervento')));
606633

607634
if ($result) {
608635
flash()->info(tr('Informazioni tariffe salvate correttamente!'));

modules/contratti/ajax.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,32 @@
2626
$rs = $dbo->fetchArray('SELECT `costo_orario` FROM `in_tipiintervento` WHERE `id`='.prepare($idtipointervento));
2727
echo $rs[0]['costo_orario'];
2828
}
29+
30+
if (get('op') == 'get_costo_ore') {
31+
$idtipointervento = get('idtipointervento');
32+
$id_record = get('id_record');
33+
34+
// Recupera il costo ore dal contratto
35+
$rs = $dbo->fetchArray('SELECT `costo_ore` FROM `co_contratti_tipiintervento` WHERE `idcontratto`='.prepare($id_record).' AND `idtipointervento`='.prepare($idtipointervento));
36+
37+
if (!empty($rs)) {
38+
echo json_encode([
39+
'costo_ore' => $rs[0]['costo_ore'],
40+
]);
41+
} else {
42+
// Se non esiste nel contratto, recupera il costo orario standard
43+
$rs_standard = $dbo->fetchArray('SELECT `costo_orario` FROM `in_tipiintervento` WHERE `id`='.prepare($idtipointervento));
44+
echo json_encode([
45+
'costo_ore' => $rs_standard[0]['costo_orario'],
46+
]);
47+
}
48+
}
49+
50+
if (get('op') == 'tipiintervento_abilitati') {
51+
$id_record = filter('id_record');
52+
53+
// Recupera i tipi di attività abilitati per il contratto
54+
$rs = $dbo->fetchArray('SELECT `in_tipiintervento`.`id`, `in_tipiintervento_lang`.`title` FROM `co_contratti_tipiintervento` INNER JOIN `in_tipiintervento` ON `in_tipiintervento`.`id` = `co_contratti_tipiintervento`.`idtipointervento` LEFT JOIN `in_tipiintervento_lang` ON `in_tipiintervento_lang`.`id_record` = `in_tipiintervento`.`id` AND `in_tipiintervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).' WHERE `co_contratti_tipiintervento`.`idcontratto` = '.prepare($id_record).' AND `co_contratti_tipiintervento`.`abilitato` = 1 ORDER BY `in_tipiintervento_lang`.`title`');
55+
56+
echo json_encode($rs);
57+
}

modules/contratti/ajax/select.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,50 @@
141141
$custom['link'] = 'module:Categorie contratti';
142142
}
143143
break;
144+
145+
/*
146+
* Opzioni utilizzate:
147+
* - id_record
148+
*/
149+
case 'tipiintervento_abilitati':
150+
$id_record = $options['id_record'] ?? get('id_record') ?? $superselect['id_record'];
151+
152+
$query = 'SELECT
153+
`in_tipiintervento`.`id` AS id,
154+
`in_tipiintervento_lang`.`title` AS descrizione
155+
FROM
156+
`co_contratti_tipiintervento`
157+
INNER JOIN `in_tipiintervento` ON `in_tipiintervento`.`id` = `co_contratti_tipiintervento`.`idtipointervento`
158+
LEFT JOIN `in_tipiintervento_lang` ON `in_tipiintervento_lang`.`id_record` = `in_tipiintervento`.`id` AND `in_tipiintervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).'
159+
WHERE
160+
`co_contratti_tipiintervento`.`idcontratto` = '.prepare($id_record).'
161+
AND `co_contratti_tipiintervento`.`abilitato` = 1
162+
ORDER BY
163+
`in_tipiintervento_lang`.`title`';
164+
165+
$where = [];
166+
$custom = [];
167+
168+
if (!empty($search)) {
169+
$search_fields[] = '`in_tipiintervento_lang`.`title` LIKE '.prepare('%'.$search.'%');
170+
}
171+
172+
$data = AJAX::selectResults($query, $where, $filter, $search_fields, $limit, $custom);
173+
$rs = $data['results'];
174+
175+
$results = [];
176+
foreach ($rs as $r) {
177+
$results[] = [
178+
'id' => $r['id'],
179+
'text' => $r['descrizione'],
180+
'descrizione' => $r['descrizione'],
181+
];
182+
}
183+
184+
$results = [
185+
'results' => $results,
186+
'recordsFiltered' => $data['recordsFiltered'],
187+
];
188+
189+
break;
144190
}

0 commit comments

Comments
 (0)