|
322 | 322 | // Assegnazione dei tecnici all'intervento |
323 | 323 | $tecnici_assegnati = post('tecnici_assegnati'); |
324 | 324 | 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 | + }); |
325 | 330 | $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 | + } |
331 | 339 | } |
332 | 340 |
|
333 | 341 | foreach ($tecnici_assegnati as $tecnico_assegnato) { |
|
349 | 357 | } |
350 | 358 |
|
351 | 359 | if (!empty(post('ricorsiva_add'))) { |
| 360 | + // Validazione dei campi obbligatori per la ricorrenza |
352 | 361 | $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; |
354 | 379 | $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; |
368 | 398 | } |
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 | + |
370 | 441 | $date_ricorrenze[] = $data; |
371 | 442 | } |
372 | 443 | } |
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 | | - } |
384 | 444 |
|
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; |
386 | 448 | } |
| 449 | + |
| 450 | + } catch (Exception $e) { |
| 451 | + flash()->error(tr('Errore durante il calcolo delle date di ricorrenza: _ERROR_', ['_ERROR_' => $e->getMessage()])); |
| 452 | + break; |
387 | 453 | } |
388 | 454 |
|
| 455 | + // Creazione delle ricorrenze |
| 456 | + $ricorrenze_create = 0; |
389 | 457 | 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 | + } |
398 | 480 |
|
399 | 481 | // Inserimento sessioni |
400 | 482 | if (!empty(post('riporta_sessioni_add'))) { |
|
425 | 507 |
|
426 | 508 | // Assegnazione dei tecnici all'intervento |
427 | 509 | $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 | + } |
433 | 522 |
|
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.')); |
435 | 531 | } |
436 | 532 |
|
437 | | - flash()->info(tr('Aggiunte _NUM_ nuove ricorrenze!', [ |
438 | | - '_NUM_' => $n_ricorrenze, |
439 | | - ])); |
440 | 533 | } |
441 | 534 |
|
442 | 535 | if (post('ref') == 'dashboard') { |
|
0 commit comments