Skip to content

Commit 90017ba

Browse files
committed
feat: Aggiunta tipi di attività utilizzabili per anagrafica
1 parent 36fecd8 commit 90017ba

6 files changed

Lines changed: 67 additions & 5 deletions

File tree

modules/anagrafiche/actions.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,15 @@
105105

106106
$anagrafica->save();
107107

108+
// Aggiorno i tipi attività utilizzabili
109+
$idtipiintervento = (array) post('idtipiintervento');
110+
$dbo->query('DELETE FROM an_anagrafiche_tipiintervento WHERE idanagrafica='.prepare($id_record));
111+
foreach ($idtipiintervento as $idtipointervento) {
112+
if (!empty($idtipointervento) && $idtipointervento != '-1') {
113+
$dbo->query('INSERT INTO an_anagrafiche_tipiintervento(idtipointervento, idanagrafica) VALUES('.prepare($idtipointervento).', '.prepare($id_record).')');
114+
}
115+
}
116+
108117
// Aggiorno gli agenti collegati
109118
$idagenti = array_filter((array) post('idagenti'), fn ($value) => $value !== '' && $value !== null);
110119
$dbo->sync('an_anagrafiche_agenti', ['idanagrafica' => $id_record], ['idagente' => $idagenti]);

modules/anagrafiche/edit.php

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -589,14 +589,31 @@ function risolviConto(tipo){
589589
</div>
590590
</div>
591591
<div class="row">
592-
<div class="col-md-6">
593-
{[ "type": "select", "label": "'.tr('Tipo attività predefinita').'", "name": "idtipointervento_default", "ajax-source": "tipiintervento", "value": "$idtipointervento_default$" ]}
592+
<div class="col-md-6">';
593+
$rs = $dbo->fetchArray("SELECT idtipointervento FROM an_anagrafiche_tipiintervento WHERE idanagrafica='".$id_record."'");
594+
$idtipiintervento = array('-1');
595+
for( $i=0; $i<sizeof($rs); $i++ ){
596+
array_push( $idtipiintervento, $rs[$i]['idtipointervento'] );
597+
}
598+
599+
// Prepara la query per il tipo attività predefinita filtrata
600+
$where_clause = '';
601+
$tipi_utilizzabili_filtro = array_filter($idtipiintervento, function($val) { return $val != '-1'; });
602+
if (!empty($tipi_utilizzabili_filtro)) {
603+
$where_clause = 'WHERE in_tipiintervento.id IN ('.implode(',', array_map('intval', $tipi_utilizzabili_filtro)).')';
604+
}
605+
606+
echo '
607+
{[ "type": "select", "multiple": "1", "label": "'.tr('Tipi attività utilizzabili').'", "id": "idtipiintervento", "name": "idtipiintervento[]", "values": "query=SELECT in_tipiintervento.id, title as descrizione FROM in_tipiintervento LEFT JOIN `in_tipiintervento_lang` ON (`in_tipiintervento`.`id` = `in_tipiintervento_lang`.`id_record` AND `in_tipiintervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') ORDER BY title ASC", "value": "'.implode( ",", $idtipiintervento ).'" ]}
594608
</div>
595609
<div class="col-md-6">
596-
{[ "type": "select", "label": "'.tr('Per conto di').'", "name": "idclientefinale", "value": "'.$id_cliente_finale.'", "ajax-source": "clienti" ]}
610+
{[ "type": "select", "label": "'.tr('Tipo attività predefinita').'", "name": "idtipointervento_default", "ajax-source": "tipiintervento", "select-options": '.json_encode(['idtipiintervento' => '']).', "value": "$idtipointervento_default$" ]}
597611
</div>
598612
</div>
599613
<div class="row">
614+
<div class="col-md-6">
615+
{[ "type": "select", "label": "'.tr('Per conto di').'", "name": "idclientefinale", "value": "'.$id_cliente_finale.'", "ajax-source": "clienti" ]}
616+
</div>
600617
<div class="col-md-6">
601618
{[ "type": "select", "label": "'.tr("Dichiarazione d'intento").'", "name": "id_dichiarazione_intento_default", "ajax-source": "dichiarazioni_intento", "select-options": {"idanagrafica": '.$id_record.', "data": "'.Carbon::now().'"},"value": "$id_dichiarazione_intento_default$" ]}
602619
</div>';
@@ -945,5 +962,9 @@ function risolviConto(tipo){
945962
});
946963

947964
$('#ragione_sociale, #cognome').trigger('keyup');
965+
966+
$('#idtipiintervento').change(function() {
967+
updateSelectOption("idtipiintervento", $('#idtipiintervento option:selected').map(function() { return $(this).val(); }).get());
968+
});
948969
});
949970
</script>

modules/contratti/src/Contratto.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ public function fixTipiSessioni()
109109
$presenti = database()->fetchArray('SELECT idtipointervento FROM co_contratti_tipiintervento WHERE idcontratto = '.prepare($this->id));
110110
$id_presenti = array_column($presenti, 'idtipointervento');
111111

112+
// Recupera i tipi di intervento abilitati per l'anagrafica del contratto
113+
$tipi_abilitati_anagrafica = database()->fetchArray('SELECT idtipointervento FROM an_anagrafiche_tipiintervento WHERE idanagrafica='.prepare($this->idanagrafica));
114+
$id_tipi_abilitati = array_column($tipi_abilitati_anagrafica, 'idtipointervento');
115+
112116
// Aggiunta associazioni costi unitari al contratto per i tipi non presenti
113117
$tipi = TipoSessione::whereNull('deleted_at')
114118
->whereNotIn('id', $id_presenti)
@@ -121,6 +125,9 @@ public function fixTipiSessioni()
121125
// Costruisci l'array di inserimento in un'unica operazione
122126
$database = database();
123127
foreach ($tipi as $tipo) {
128+
// Verifica se il tipo di intervento è abilitato per l'anagrafica
129+
$is_abilitato = in_array($tipo->id, $id_tipi_abilitati) ? 1 : 0;
130+
124131
$database->insert('co_contratti_tipiintervento', [
125132
'idcontratto' => $this->id,
126133
'idtipointervento' => $tipo->id,
@@ -130,7 +137,7 @@ public function fixTipiSessioni()
130137
'costo_ore_tecnico' => $tipo->costo_orario_tecnico,
131138
'costo_km_tecnico' => $tipo->costo_km_tecnico,
132139
'costo_dirittochiamata_tecnico' => $tipo->costo_diritto_chiamata_tecnico,
133-
'is_abilitato' => 1,
140+
'is_abilitato' => $is_abilitato,
134141
]);
135142
}
136143
}

modules/interventi/ajax/select.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,15 @@
7171
$search_fields[] = '`title` LIKE '.prepare('%'.$search.'%');
7272
}
7373

74+
if (!empty($superselect['idtipiintervento'])) {
75+
$where[] = '`in_tipiintervento`.`id` IN ('.implode(',', $superselect['idtipiintervento']).')';
76+
} else if (!empty($superselect['idanagrafica'])) {
77+
$rs = $dbo->fetchArray("SELECT idtipointervento FROM an_anagrafiche_tipiintervento WHERE idanagrafica=".prepare($superselect['idanagrafica']));
78+
if (sizeof($rs) > 0) {
79+
$filter[] = '`in_tipiintervento`.`id` IN(SELECT idtipointervento FROM an_anagrafiche_tipiintervento WHERE idanagrafica='.prepare($superselect['idanagrafica']).')';
80+
}
81+
}
82+
7483
$data = AJAX::selectResults($query, $where, $filter, $search_fields, $limit, $custom);
7584
$rs = $data['results'];
7685

@@ -217,6 +226,13 @@
217226
$search_fields[] = '`title` LIKE '.prepare('%'.$search.'%');
218227
}
219228

229+
if (!empty($superselect['idanagrafica'])) {
230+
$rs = $dbo->fetchArray("SELECT idtipointervento FROM an_anagrafiche_tipiintervento WHERE idanagrafica=".prepare($superselect['idanagrafica']));
231+
if (sizeof($rs) > 0) {
232+
$filter[] = '`in_tipiintervento`.`id` IN(SELECT idtipointervento FROM an_anagrafiche_tipiintervento WHERE idanagrafica='.prepare($superselect['idanagrafica']).')';
233+
}
234+
}
235+
220236
$data = AJAX::selectResults($query, $where, $filter, $search_fields, $limit, $custom);
221237
$rs = $data['results'];
222238

update/2_11.sql

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,12 @@ INSERT INTO `zz_api_resources` (`version`, `type`, `resource`, `class`, `enabled
5858
('app-v1', 'retrieve', 'automezzo', 'API\\App\\v1\\Automezzi', 1),
5959
('app-v1', 'retrieve', 'articoli-automezzo', 'API\\App\\v1\\ArticoliAutomezzo', 1),
6060
('app-v1', 'retrieve', 'articoli-automezzo-cleanup', 'API\\App\\v1\\ArticoliAutomezzo', 1),
61-
('app-v1', 'retrieve', 'articolo-automezzo', 'API\\App\\v1\\ArticoliAutomezzo', 1);
61+
('app-v1', 'retrieve', 'articolo-automezzo', 'API\\App\\v1\\ArticoliAutomezzo', 1);
62+
63+
CREATE TABLE `an_anagrafiche_tipiintervento` (
64+
`idanagrafica` int NOT NULL,
65+
`idtipointervento` varchar(25) NOT NULL
66+
);
67+
68+
ALTER TABLE `an_anagrafiche_tipiintervento`
69+
ADD PRIMARY KEY (`idanagrafica`,`idtipointervento`);

update/tables.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
return [
44
'an_anagrafiche',
55
'an_anagrafiche_agenti',
6+
'an_anagrafiche_tipiintervento',
67
'an_assicurazione_crediti',
78
'an_automezzi_danni',
89
'an_automezzi_gestori',

0 commit comments

Comments
 (0)