Skip to content

Commit be9dbc2

Browse files
committed
fix: impostazione tecnici assegnati in add intervento
1 parent 504fede commit be9dbc2

1 file changed

Lines changed: 142 additions & 49 deletions

File tree

modules/interventi/actions.php

Lines changed: 142 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -322,12 +322,20 @@
322322
// Assegnazione dei tecnici all'intervento
323323
$tecnici_assegnati = post('tecnici_assegnati');
324324
if (!empty($tecnici_assegnati)) {
325+
// Converte in array se necessario e filtra i valori vuoti
326+
$tecnici_assegnati = is_array($tecnici_assegnati) ? $tecnici_assegnati : [$tecnici_assegnati];
327+
$tecnici_assegnati = array_filter($tecnici_assegnati, function($value) {
328+
return !empty($value) && is_numeric($value);
329+
});
325330
$tecnici_assegnati = array_unique($tecnici_assegnati);
326-
$dbo->sync('in_interventi_tecnici_assegnati', [
327-
'id_intervento' => $id_record,
328-
], [
329-
'id_tecnico' => $tecnici_assegnati,
330-
]);
331+
332+
if (!empty($tecnici_assegnati)) {
333+
$dbo->sync('in_interventi_tecnici_assegnati', [
334+
'id_intervento' => $id_record,
335+
], [
336+
'id_tecnico' => $tecnici_assegnati,
337+
]);
338+
}
331339
}
332340

333341
foreach ($tecnici_assegnati as $tecnico_assegnato) {
@@ -349,52 +357,126 @@
349357
}
350358

351359
if (!empty(post('ricorsiva_add'))) {
360+
// Validazione dei campi obbligatori per la ricorrenza
352361
$periodicita = post('periodicita');
353-
$data = post('data_inizio_ricorrenza');
362+
$data_inizio = post('data_inizio_ricorrenza');
363+
$metodo_ricorrenza = post('metodo_ricorrenza');
364+
$idstatoricorrenze = post('idstatoricorrenze');
365+
366+
// Controllo campi obbligatori
367+
if (empty($periodicita) || empty($data_inizio) || empty($metodo_ricorrenza) || empty($idstatoricorrenze)) {
368+
flash()->error(tr('Tutti i campi della ricorrenza sono obbligatori quando si crea un\'attività ricorrente.'));
369+
break;
370+
}
371+
372+
// Validazione periodicità
373+
if (!is_numeric($periodicita) || $periodicita <= 0) {
374+
flash()->error(tr('La periodicità deve essere un numero positivo.'));
375+
break;
376+
}
377+
378+
$data = $data_inizio;
354379
$interval = post('tipo_periodicita') != 'manual' ? post('tipo_periodicita') : 'days';
355-
$stato = Stato::find(post('idstatoricorrenze'));
356-
357-
// Estraggo le date delle ricorrenze
358-
if (post('metodo_ricorrenza') == 'data') {
359-
$data_fine = post('data_fine_ricorrenza');
360-
while (strtotime($data) <= strtotime($data_fine)) {
361-
$data = date('Y-m-d', strtotime('+'.$periodicita.' '.$interval.'', strtotime($data)));
362-
$w = date('w', strtotime($data));
363-
// Escludo sabato e domenica
364-
if ($w == '6') {
365-
$data = date('Y-m-d', strtotime('+2 day', strtotime($data)));
366-
} elseif ($w == '0') {
367-
$data = date('Y-m-d', strtotime('+1 day', strtotime($data)));
380+
$stato = Stato::find($idstatoricorrenze);
381+
382+
if (empty($stato)) {
383+
flash()->error(tr('Stato delle ricorrenze non valido.'));
384+
break;
385+
}
386+
387+
// Inizializzazione array date ricorrenze
388+
$date_ricorrenze = [];
389+
390+
try {
391+
// Estraggo le date delle ricorrenze
392+
if ($metodo_ricorrenza == 'data') {
393+
$data_fine = post('data_fine_ricorrenza');
394+
395+
if (empty($data_fine)) {
396+
flash()->error(tr('La data fine ricorrenza è obbligatoria quando si seleziona il metodo "Data fine".'));
397+
break;
368398
}
369-
if ($data <= $data_fine) {
399+
400+
if (strtotime($data_fine) <= strtotime($data_inizio)) {
401+
flash()->error(tr('La data fine ricorrenza deve essere successiva alla data inizio.'));
402+
break;
403+
}
404+
405+
while (strtotime($data) <= strtotime($data_fine)) {
406+
$data = date('Y-m-d', strtotime('+'.$periodicita.' '.$interval.'', strtotime($data)));
407+
$w = date('w', strtotime($data));
408+
// Escludo sabato e domenica
409+
if ($w == '6') {
410+
$data = date('Y-m-d', strtotime('+2 day', strtotime($data)));
411+
} elseif ($w == '0') {
412+
$data = date('Y-m-d', strtotime('+1 day', strtotime($data)));
413+
}
414+
if ($data <= $data_fine) {
415+
$date_ricorrenze[] = $data;
416+
}
417+
}
418+
} else {
419+
$numero_ricorrenze = post('numero_ricorrenze');
420+
421+
if (empty($numero_ricorrenze) || !is_numeric($numero_ricorrenze) || $numero_ricorrenze <= 0) {
422+
flash()->error(tr('Il numero di ricorrenze deve essere un numero positivo.'));
423+
break;
424+
}
425+
426+
if ($numero_ricorrenze > 100) {
427+
flash()->error(tr('Il numero massimo di ricorrenze consentite è 100.'));
428+
break;
429+
}
430+
431+
for ($i = 0; $i < $numero_ricorrenze; ++$i) {
432+
$data = date('Y-m-d', strtotime('+'.$periodicita.' '.$interval.'', strtotime($data)));
433+
$w = date('w', strtotime($data));
434+
// Escludo sabato e domenica
435+
if ($w == '6') {
436+
$data = date('Y-m-d', strtotime('+2 day', strtotime($data)));
437+
} elseif ($w == '0') {
438+
$data = date('Y-m-d', strtotime('+1 day', strtotime($data)));
439+
}
440+
370441
$date_ricorrenze[] = $data;
371442
}
372443
}
373-
} else {
374-
$ricorrenze = post('numero_ricorrenze');
375-
for ($i = 0; $i < $ricorrenze; ++$i) {
376-
$data = date('Y-m-d', strtotime('+'.$periodicita.' '.$interval.'', strtotime($data)));
377-
$w = date('w', strtotime($data));
378-
// Escludo sabato e domenica
379-
if ($w == '6') {
380-
$data = date('Y-m-d', strtotime('+2 day', strtotime($data)));
381-
} elseif ($w == '0') {
382-
$data = date('Y-m-d', strtotime('+1 day', strtotime($data)));
383-
}
384444

385-
$date_ricorrenze[] = $data;
445+
if (empty($date_ricorrenze)) {
446+
flash()->error(tr('Nessuna data di ricorrenza valida è stata generata. Verificare i parametri inseriti.'));
447+
break;
386448
}
449+
450+
} catch (Exception $e) {
451+
flash()->error(tr('Errore durante il calcolo delle date di ricorrenza: _ERROR_', ['_ERROR_' => $e->getMessage()]));
452+
break;
387453
}
388454

455+
// Creazione delle ricorrenze
456+
$ricorrenze_create = 0;
389457
foreach ($date_ricorrenze as $data_ricorrenza) {
390-
$intervento = Intervento::find($id_record);
391-
$new = $intervento->replicate();
392-
// Calcolo il nuovo codice
393-
$new->codice = Intervento::getNextCodice($data_ricorrenza, $new->id_segment);
394-
$new->data_richiesta = $data_ricorrenza;
395-
$new->idstatointervento = $stato->id;
396-
$new->save();
397-
$idintervento = $new->id;
458+
try {
459+
$intervento = Intervento::find($id_record);
460+
if (empty($intervento)) {
461+
flash()->error(tr('Intervento originale non trovato per la creazione delle ricorrenze.'));
462+
break;
463+
}
464+
465+
$new = $intervento->replicate();
466+
// Calcolo il nuovo codice
467+
$new->codice = Intervento::getNextCodice($data_ricorrenza, $new->id_segment);
468+
$new->data_richiesta = $data_ricorrenza;
469+
$new->idstatointervento = $stato->id;
470+
$new->save();
471+
$idintervento = $new->id;
472+
$ricorrenze_create++;
473+
} catch (Exception $e) {
474+
flash()->error(tr('Errore durante la creazione della ricorrenza per la data _DATE_: _ERROR_', [
475+
'_DATE_' => date('d/m/Y', strtotime($data_ricorrenza)),
476+
'_ERROR_' => $e->getMessage()
477+
]));
478+
continue;
479+
}
398480

399481
// Inserimento sessioni
400482
if (!empty(post('riporta_sessioni_add'))) {
@@ -425,18 +507,29 @@
425507

426508
// Assegnazione dei tecnici all'intervento
427509
$tecnici_assegnati = (array) post('tecnici_assegnati');
428-
$dbo->sync('in_interventi_tecnici_assegnati', [
429-
'id_intervento' => $new->id,
430-
], [
431-
'id_tecnico' => $tecnici_assegnati,
432-
]);
510+
// Filtra i valori vuoti per evitare errori di foreign key
511+
$tecnici_assegnati = array_filter($tecnici_assegnati, function($value) {
512+
return !empty($value) && is_numeric($value);
513+
});
514+
515+
if (!empty($tecnici_assegnati)) {
516+
$dbo->sync('in_interventi_tecnici_assegnati', [
517+
'id_intervento' => $new->id,
518+
], [
519+
'id_tecnico' => $tecnici_assegnati,
520+
]);
521+
}
433522

434-
++$n_ricorrenze;
523+
++$ricorrenze_create;
524+
}
525+
526+
// Messaggio di successo per le ricorrenze create
527+
if ($ricorrenze_create > 0) {
528+
flash()->info(tr('Sono state create _NUM_ ricorrenze dell\'attività.', ['_NUM_' => $ricorrenze_create]));
529+
} else {
530+
flash()->warning(tr('Nessuna ricorrenza è stata creata. Verificare i parametri inseriti.'));
435531
}
436532

437-
flash()->info(tr('Aggiunte _NUM_ nuove ricorrenze!', [
438-
'_NUM_' => $n_ricorrenze,
439-
]));
440533
}
441534

442535
if (post('ref') == 'dashboard') {

0 commit comments

Comments
 (0)