Skip to content

Commit c46d762

Browse files
feat: gestione viaggi
1 parent c72c438 commit c46d762

33 files changed

Lines changed: 2340 additions & 106 deletions

modules/automezzi/actions.php

Lines changed: 183 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -44,78 +44,6 @@
4444
}
4545
break;
4646

47-
// Aggiunta tecnico
48-
case 'addtech':
49-
$idtecnico = post('idtecnico');
50-
$data_inizio = post('data_inizio');
51-
$data_fine = post('data_fine');
52-
53-
// Controllo sull'effettivo inserimento di una data di fine successiva a quella di inizio
54-
if (!empty($data_fine)) {
55-
if (new DateTime(post('data_fine')) >= new DateTime($data_inizio)) {
56-
$data_fine = post('data_fine');
57-
}
58-
}
59-
$data_fine ??= '0000-00-00';
60-
61-
// Inserisco il tecnico
62-
$dbo->insert('an_sedi_tecnici', [
63-
'idtecnico' => $idtecnico,
64-
'idsede' => $id_record,
65-
'data_inizio' => $data_inizio,
66-
'data_fine' => $data_fine,
67-
]);
68-
69-
flash()->info(tr('Collegato un nuovo tecnico!'));
70-
break;
71-
72-
// Salvataggio tecnici collegati
73-
case 'savetech':
74-
$errors = 0;
75-
76-
foreach (post('data_inizio') as $idautomezzotecnico => $data) {
77-
$idtecnico = post('idtecnico')[$idautomezzotecnico];
78-
$data_inizio = post('data_inizio')[$idautomezzotecnico];
79-
$data_fine = post('data_fine')[$idautomezzotecnico];
80-
81-
// Controllo sull'effettivo inserimento di una data di fine successiva a quella di inizio
82-
if (!empty($data_fine)) {
83-
if (new DateTime($data_fine) < new DateTime($data_inizio)) {
84-
$data_fine = null;
85-
}
86-
}
87-
$data_fine ??= '0000-00-00';
88-
89-
$dbo->update('an_sedi_tecnici', [
90-
'idtecnico' => $idtecnico,
91-
'idsede' => $id_record,
92-
'data_inizio' => $data_inizio,
93-
'data_fine' => $data_fine,
94-
], ['id' => $idautomezzotecnico]);
95-
96-
if (!$dbo->query($query)) {
97-
++$errors;
98-
}
99-
}
100-
101-
if ($errors == 0) {
102-
flash()->info(tr('Informazioni salvate correttamente!'));
103-
} else {
104-
flash()->error(tr('Errore durante il salvataggio del tecnico!'));
105-
}
106-
break;
107-
108-
// Eliminazione associazione con tecnico
109-
case 'deltech':
110-
$idautomezzotecnico = post('id');
111-
112-
$query = 'DELETE FROM an_sedi_tecnici WHERE id='.prepare($idautomezzotecnico);
113-
114-
if ($dbo->query($query)) {
115-
flash()->info(tr('Tecnico rimosso!'));
116-
}
117-
break;
118-
11947
// Aggiunta quantità nell'automezzo
12048
case 'addrow':
12149
$idarticolo = post('idarticolo');
@@ -182,6 +110,189 @@
182110

183111
break;
184112

113+
// Aggiunta viaggio
114+
case 'addviaggio':
115+
$idtecnico = post('idtecnico');
116+
$data_inizio = post('data_inizio');
117+
$data_fine = post('data_fine') ?: null;
118+
$km_inizio = post('km_inizio');
119+
$km_fine = post('km_fine');
120+
$destinazione = post('destinazione');
121+
$motivazione = post('motivazione');
122+
123+
// Inserisco il viaggio
124+
$dbo->insert('an_automezzi_viaggi', [
125+
'idsede' => $id_record,
126+
'idtecnico' => $idtecnico,
127+
'data_inizio' => $data_inizio,
128+
'data_fine' => $data_fine,
129+
'km_inizio' => $km_inizio,
130+
'km_fine' => $km_fine,
131+
'destinazione' => $destinazione,
132+
'motivazione' => $motivazione,
133+
]);
134+
135+
flash()->info(tr('Viaggio aggiunto al registro!'));
136+
break;
137+
138+
// Modifica viaggio
139+
case 'editviaggio':
140+
$idviaggio = post('idviaggio');
141+
$idtecnico = post('idtecnico');
142+
$data_inizio = post('data_inizio');
143+
$data_fine = post('data_fine') ?: null;
144+
$km_inizio = post('km_inizio');
145+
$km_fine = post('km_fine');
146+
$destinazione = post('destinazione');
147+
$motivazione = post('motivazione');
148+
149+
// Aggiorno il viaggio
150+
$dbo->update('an_automezzi_viaggi', [
151+
'idtecnico' => $idtecnico,
152+
'data_inizio' => $data_inizio,
153+
'data_fine' => $data_fine,
154+
'km_inizio' => $km_inizio,
155+
'km_fine' => $km_fine,
156+
'destinazione' => $destinazione,
157+
'motivazione' => $motivazione,
158+
], ['id' => $idviaggio]);
159+
160+
flash()->info(tr('Viaggio aggiornato!'));
161+
break;
162+
163+
// Eliminazione viaggio
164+
case 'delviaggio':
165+
$idviaggio = post('id');
166+
167+
$query = 'DELETE FROM an_automezzi_viaggi WHERE id='.prepare($idviaggio);
168+
169+
if ($dbo->query($query)) {
170+
flash()->info(tr('Viaggio rimosso dal registro!'));
171+
}
172+
break;
173+
174+
// Aggiunta rifornimento
175+
case 'addrifornimento':
176+
$idviaggio = post('idviaggio');
177+
$data = post('data');
178+
$luogo = post('luogo');
179+
$id_carburante = post('id_carburante');
180+
$quantita = post('quantita');
181+
$costo = post('costo');
182+
$id_gestore = post('id_gestore');
183+
$codice_carta = post('codice_carta');
184+
$km = post('km');
185+
186+
// Inserisco il rifornimento
187+
$dbo->insert('an_automezzi_rifornimenti', [
188+
'idviaggio' => $idviaggio,
189+
'data' => $data,
190+
'luogo' => $luogo,
191+
'id_carburante' => $id_carburante,
192+
'quantita' => $quantita,
193+
'costo' => $costo,
194+
'id_gestore' => $id_gestore,
195+
'codice_carta' => $codice_carta,
196+
'km' => $km,
197+
]);
198+
199+
flash()->info(tr('Rifornimento aggiunto!'));
200+
break;
201+
202+
// Modifica rifornimento
203+
case 'editrifornimento':
204+
$idrifornimento = post('idrifornimento');
205+
$data = post('data');
206+
$luogo = post('luogo');
207+
$id_carburante = post('id_carburante');
208+
$quantita = post('quantita');
209+
$costo = post('costo');
210+
$id_gestore = post('id_gestore');
211+
$codice_carta = post('codice_carta');
212+
$km = post('km');
213+
214+
// Aggiorno il rifornimento
215+
$dbo->update('an_automezzi_rifornimenti', [
216+
'data' => $data,
217+
'luogo' => $luogo,
218+
'id_carburante' => $id_carburante,
219+
'quantita' => $quantita,
220+
'costo' => $costo,
221+
'id_gestore' => $id_gestore,
222+
'codice_carta' => $codice_carta,
223+
'km' => $km,
224+
], ['id' => $idrifornimento]);
225+
226+
flash()->info(tr('Rifornimento aggiornato!'));
227+
break;
228+
229+
// Eliminazione rifornimento
230+
case 'delrifornimento':
231+
$idrifornimento = post('id');
232+
233+
$query = 'DELETE FROM an_automezzi_rifornimenti WHERE id='.prepare($idrifornimento);
234+
235+
if ($dbo->query($query)) {
236+
flash()->info(tr('Rifornimento rimosso!'));
237+
}
238+
break;
239+
240+
// Firma viaggio
241+
case 'firma_viaggio':
242+
$idviaggio = post('idviaggio');
243+
$firma_base64 = post('firma_base64');
244+
245+
if (empty($firma_base64)) {
246+
flash()->error(tr('Firma mancante!'));
247+
break;
248+
}
249+
250+
if (is_writable(Uploads::getDirectory($id_module))) {
251+
if (post('firma_base64') != '') {
252+
// Salvataggio firma
253+
$data = explode(',', post('firma_base64'));
254+
$img = getImageManager()->read(base64_decode($data[1]));
255+
$img->resize(680, 202, function ($constraint) {
256+
$constraint->aspectRatio();
257+
});
258+
259+
if (setting('Sistema di firma') == 'Tavoletta Wacom') {
260+
$img->brightness((float) setting('Luminosità firma Wacom'));
261+
$img->contrast((float) setting('Contrasto firma Wacom'));
262+
}
263+
$encoded_image = $img->toJpeg();
264+
$file_content = $encoded_image->toString();
265+
266+
// Upload del file in zz_files
267+
$upload = Uploads::upload($file_content, [
268+
'name' => 'firma.jpg',
269+
'category' => 'Firme',
270+
'id_module' => $id_module,
271+
'id_record' => $id_record,
272+
'key' => 'signature_viaggio:'.$idviaggio,
273+
]);
274+
275+
if (empty($upload)) {
276+
flash()->error(tr('Errore durante il caricamento della firma!'));
277+
} else {
278+
flash()->info(tr('Firma salvata correttamente.'));
279+
280+
$dbo->update('an_automezzi_viaggi', [
281+
'firma_data' => date('Y-m-d H:i:s'),
282+
'firma_nome' => post('firma_nome'),
283+
], ['id' => $idviaggio]);
284+
}
285+
} else {
286+
flash()->error(tr('Errore durante il salvataggio della firma.').'<br>'.tr('La firma risulta vuota.'));
287+
}
288+
} else {
289+
flash()->error(tr("Non è stato possibile creare la cartella _DIRECTORY_ per salvare l'immagine della firma.", [
290+
'_DIRECTORY_' => '<b>'.Uploads::getDirectory($id_module).'</b>',
291+
]));
292+
}
293+
294+
break;
295+
185296
case 'delete':
186297
$dbo->query('DELETE FROM `an_sedi` WHERE `id`='.prepare($id_record));
187298

modules/automezzi/ajax/select.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
/*
3+
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
4+
* Copyright (C) DevCode s.r.l.
5+
*
6+
* This program is free software: you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation, either version 3 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
18+
*/
19+
20+
include_once __DIR__.'/../../../core.php';
21+
22+
use Models\User;
23+
use Modules\Anagrafiche\Tipo;
24+
25+
switch ($resource) {
26+
case 'tecnici_automezzo':
27+
$tipologia = Tipo::where('name', 'Tecnico')->first()->id;
28+
29+
$query = "SELECT DISTINCT `an_anagrafiche`.`idanagrafica` AS id, CONCAT(`ragione_sociale`, IF(`citta` IS NULL OR `citta` = '', '', CONCAT(' (', `citta`, ')')), IF(`an_anagrafiche`.`deleted_at` IS NULL, '', ' (".tr('eliminata').")'),' - ', `an_anagrafiche`.`codice`) AS descrizione, `idtipointervento_default` FROM `an_anagrafiche` INNER JOIN (`an_tipianagrafiche_anagrafiche` INNER JOIN `an_tipianagrafiche` ON `an_tipianagrafiche_anagrafiche`.`idtipoanagrafica`=`an_tipianagrafiche`.`id` LEFT JOIN `an_tipianagrafiche_lang` ON (`an_tipianagrafiche`.`id` = `an_tipianagrafiche_lang`.`id_record` AND `an_tipianagrafiche_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id).')) ON `an_anagrafiche`.`idanagrafica`=`an_tipianagrafiche_anagrafiche`.`idanagrafica`
30+
LEFT JOIN `zz_users` ON `an_anagrafiche`.`idanagrafica` = `zz_users`.`idanagrafica`
31+
|where| ORDER BY `ragione_sociale`';
32+
33+
foreach ($elements as $element) {
34+
$filter[] = '`an_anagrafiche`.`idanagrafica`='.prepare($element);
35+
}
36+
37+
if (empty($filter)) {
38+
$where[] = '`an_anagrafiche`.`deleted_at` IS NULL';
39+
40+
// come tecnico posso aprire viaggi solo a mio nome
41+
$user = AuthOSM::user();
42+
if ($user['gruppo'] == 'Tecnici' && !empty($user['idanagrafica'])) {
43+
$where[] = '`an_anagrafiche`.`idanagrafica`='.$user['idanagrafica'];
44+
}
45+
46+
if (!empty($superselect['idautomezzo'])) {
47+
$where[] = '`zz_users`.`id` IN (SELECT `id_user` FROM `zz_user_sedi` WHERE `idsede`='.prepare($superselect['idautomezzo']).')';
48+
}
49+
}
50+
51+
if (!empty($search)) {
52+
$search_fields[] = '`ragione_sociale` LIKE '.prepare('%'.$search.'%');
53+
$search_fields[] = '`citta` LIKE '.prepare('%'.$search.'%');
54+
$search_fields[] = '`provincia` LIKE '.prepare('%'.$search.'%');
55+
$search_fields[] = '`an_anagrafiche`.`codice` LIKE '.prepare('%'.$search.'%');
56+
$search_fields[] = '`an_anagrafiche`.`piva` LIKE '.prepare('%'.$search.'%');
57+
$search_fields[] = '`an_anagrafiche`.`codice_fiscale` LIKE '.prepare('%'.$search.'%');
58+
}
59+
60+
break;
61+
}

0 commit comments

Comments
 (0)