1, 'name' => 'Segnaletica assente'), array('id' => 2, 'name' => 'Segnaletica verticale'), array('id' => 3, 'name' => 'Segnaletica orizzontale'), array('id' => 4, 'name' => 'Segnaletica verticale e orizzontale'), array('id' => 5, 'name' => 'Segnaletica temporanea di cantiere'), ); public $linee = array( array('id' => 4, 'name' => 'Assente'), array('id' => 1, 'name' => 'Continua'), array('id' => 2, 'name' => 'Tratteggiata'), array('id' => 3, 'name' => 'Tratteggiata in corrispondenza di'), array('id' => 5, 'name' => 'Singola'), array('id' => 6, 'name' => 'Doppia'), ); public $div_segnaletica_verticale_2 = false; public $div_segnaletica_verticale_3 = false; public $div_segnaletica_verticale_4 = false; public $div_segnaletica_orizzontale_2 = false; public $div_segnaletica_orizzontale_3 = false; public $div_segnaletica_orizzontale_4 = false; public $search, $dataId, $update = false, $add = false; public $name, $validated, $necessita_nulla_osta, $data_nulla_osta, $protocollo_num, $protocollo_ord, $protocollo_anno, $verificatosi_in_data, $verificatosi_in_data_ora, $verificatosi_in_data_minuti, $utg, $utg_data, $utg_protocollo, $ag, $ag_data, $ag_protocollo, $incidente_con_danni_a_cose, $incidente_con_feriti, $incidente_con_feriti_lesioni_lievi, $incidente_con_feriti_lesioni_gravi, $incidente_mortale, $localita_uno, $localita_due, $intersezione_con, $prossimita_civico, $prossimita_palo_luce, $prossimita_chilometro, $note_aggiuntive; public $grado_accertatore_1, $grado_accertatore_2, $grado_accertatore_3, $grado_accertatore_4, $grado_accertatore_5; public $rilievi_id; public $tipo_segnalazione; public $segnalazione_data, $segnalazione_ora, $segnalazione_minuti, $segnalazione_altro, $ausilio_altri_enti_motivo, $ausilio_altri_enti_ora_intervento, $ausilio_altri_enti_minuti_intervento, $ditta_intervenuta, $ripristino_ora_chiamata, $ripristino_minuti_chiamata, $ripristino_ora_arrivo, $ripristino_minuti_arrivo, $danni_cose_diverse_da_veicoli; public $sinistro_ora, $sinistro_minuti, $localizzazione_incidente, $localizzazione_incidente_altro, $condizioni_atmosferiche, $condizioni_atmosferiche_altro, $nomenclatura_strada, $nomenclatura_strada_numero, $nomenclatura_strada_altro, $pavimentazione, $pavimentazione_altro, $condizione_strada, $condizione_strada_altro, $fondo_stradale, $fondo_stradale_specifica, $visibilita, $visibilita_specifica, $particolarita_strada, $particolarita_strada_specifica, $tipo_strada, $tipo_strada_altro, $traffico; public $segnaletica, $segnaletica_verticale_1_via, $segnaletica_verticale_1_altro, $segnaletica_verticale_1_limite_velocita, $segnaletica_verticale_1_direzione, $segnaletica_verticale_1_pannello_integrativo, $segnaletica_verticale_2_via, $segnaletica_verticale_2_altro, $segnaletica_verticale_2_limite_velocita, $segnaletica_verticale_2_direzione, $segnaletica_verticale_2_pannello_integrativo, $segnaletica_verticale_3_via, $segnaletica_verticale_3_altro, $segnaletica_verticale_3_limite_velocita, $segnaletica_verticale_3_direzione, $segnaletica_verticale_3_pannello_integrativo, $segnaletica_verticale_4_via, $segnaletica_verticale_4_altro, $segnaletica_verticale_4_limite_velocita, $segnaletica_verticale_4_direzione, $segnaletica_verticale_4_pannello_integrativo, $segnaletica_orizzontale_1_via, $segnaletica_orizzontale_1_linea_margine, $segnaletica_orizzontale_1_linea_margine_specifica, $segnaletica_orizzontale_1_linea_mezzeria, $segnaletica_orizzontale_1_linea_mezzeria_specifica, $segnaletica_orizzontale_1_altro, $segnaletica_orizzontale_1_direzione, $segnaletica_orizzontale_2_via, $segnaletica_orizzontale_2_linea_margine, $segnaletica_orizzontale_2_linea_margine_specifica, $segnaletica_orizzontale_2_linea_mezzeria, $segnaletica_orizzontale_2_linea_mezzeria_specifica, $segnaletica_orizzontale_2_altro, $segnaletica_orizzontale_2_direzione, $segnaletica_orizzontale_3_via, $segnaletica_orizzontale_3_linea_margine, $segnaletica_orizzontale_3_linea_margine_specifica, $segnaletica_orizzontale_3_linea_mezzeria, $segnaletica_orizzontale_3_linea_mezzeria_specifica, $segnaletica_orizzontale_3_altro, $segnaletica_orizzontale_3_direzione, $segnaletica_orizzontale_4_via, $segnaletica_orizzontale_4_linea_margine, $segnaletica_orizzontale_4_linea_margine_specifica, $segnaletica_orizzontale_4_linea_mezzeria, $segnaletica_orizzontale_4_linea_mezzeria_specifica, $segnaletica_orizzontale_4_altro, $segnaletica_orizzontale_4_direzione; public $provinces = []; public $tipo_urto = []; public $rilievi = array(); public $tipi_danno = array(); public $parti_macchina = array(); public $entita_danni = array(); public $effetto_danni = array(); public $tipi_urto = array(); public $tipi_segnalazioni = array(); public $pervenute_da = array(); public $altri_enti = array(); public $materiali = array(); public $nomenclature = array(); public $condizioni_atmosferiche_array = array(); public $condizioni_luce_array = array(); public $pavimentazioni = array(); public $condizioni_strada = array(); public $fondi_stradali = array(); public $particolarita_strade = array(); public $tipi_strade = array(); public $grado_accertatore = array(); public $tipi_veicolo = array(); public $marche = array(); public $modelli = array(); public $polizze = array(); public $allegatiType = array(); public $currentConducente; public $currentPasseggero; public $currentTeste; public $currentProgressive; public $segnalazione_pervenuta_da; public $segnaletica_verticale_1; public $segnaletica_verticale_2; public $segnaletica_verticale_3; public $segnaletica_verticale_4; public $materiale_recuperato; public $condizioni_luce; public $ausilio_altri_enti; public $segnaletica_orizzontale_1; public $segnaletica_orizzontale_2; public $segnaletica_orizzontale_3; public $segnaletica_orizzontale_4; public $segnaletica_verticale; public $segnaletica_orizzontale; public $loadAnagrafica; public $currentInfortunato; public $cds_2; public $data_passeggero_0; public $data_infortunato_0; public $data_infortunato_ospedale_0; public $data_passeggero_1; public $data_infortunato_1; public $data_infortunato_ospedale_1; public $data_passeggero_2; public $data_infortunato_2; public $data_infortunato_ospedale_2; public $data_passeggero_3; public $data_infortunato_3; public $data_infortunato_ospedale_3; public $data_infortunato_extra_0; public $data_infortunato_extra_1; public $data_infortunato_extra_2; public $data_infortunato_extra_3; public $data_testi_oculari_0; public $data_testi_oculari_stato_0; public $data_testi_oculari_1; public $data_testi_oculari_stato_1; public $data_testi_oculari_2; public $data_testi_oculari_stato_2; public $data_testi_oculari_3; public $data_testi_oculari_stato_3; public $data_cinture_passeggeri_0; public $data_cinture_passeggeri_1; public $data_cinture_passeggeri_2; public $data_cinture_passeggeri_3; public $data_casco_conducente; public $data_casco_passeggero; public $data_casco_omologazione_conducente; public $data_casco_omologazione_passeggero; public $generalizzato; public $generalizzato_altrove; public $infortunato; public $infortunato_ospedale; public $cds; public $showModal = false; public $isAdmin; protected $rules = [ //'name' => 'required' ]; protected $messages = [ 'localita_uno.required' => 'Il campo località è obbligatorio ai fini della validazione del verbale', 'localita_due.required' => 'Il campo indirizzo è obbligatorio ai fini della validazione del verbale', 'verificatosi_in_data.required' => 'Il campo verificatosi in data è obbligatorio ai fini della validazione del verbale', 'verificatosi_in_data_ora.required' => 'Il campo verificatosi alle ore è obbligatorio ai fini della validazione del verbale', 'verificatosi_in_data_minuti.required' => 'Il campo verificatosi alle ore/minuti è obbligatorio ai fini della validazione del verbale', 'rilievi_id.required' => 'Il campo tipo di rilievo è obbligatorio per la validazione del verbale', 'segnalazione_data.required' => 'Il campo segnalazione data è obbligatorio ai fini della validazione del verbale', 'segnalazione_ora.required' => 'Il campo ora segnalazione è obbligatorio ai fini della validazione del verbale', 'segnalazione_minuti.required' => 'Il campo minuti segnalazione è obbligatorio ai fini della validazione del verbale', 'sinistro_ora.required' => 'Il campo ora sinistro è obbligatorio ai fini della validazione del verbale', 'sinistro_minuti.required' => 'Il campo minuti intervento è obbligatorio ai fini della validazione del verbale', 'localizzazione_incidente.required' => 'Il campo localizzazione incidente strada è obbligatorio ai fini della validazione del verbale', 'nomenclatura_strada.required' => 'Il campo nomenclatura strada è obbligatorio ai fini della validazione del verbale', 'condizioni_atmosferiche.required' => 'Il campo condizioni atmosferiche è obbligatorio ai fini della validazione del verbale', 'pavimentazione.required' => 'Il campo pavimentazione è obbligatorio ai fini della validazione del verbale', 'condizione_strada.required' => 'Il campo condizione strada è obbligatorio ai fini della validazione del verbale', 'fondo_stradale.required' => 'Il campo fondo stradale è obbligatorio ai fini della validazione del verbale', 'visibilita.required' => 'Il campo visibilita è obbligatorio ai fini della validazione del verbale', 'particolarita_strada.required' => 'Il campo particolarità strada è obbligatorio ai fini della validazione del verbale', ]; public function resetFields() { $this->name = ''; $this->validated = false; $this->necessita_nulla_osta = false; $this->data_nulla_osta = $this->dateToNull(); $this->protocollo_num = ''; $this->protocollo_ord = ''; $this->protocollo_anno = ''; $this->verificatosi_in_data = null; $this->verificatosi_in_data_ora = ''; $this->verificatosi_in_data_minuti = ''; $this->utg = false; $this->utg_data = null; $this->utg_protocollo = ''; $this->ag = false; $this->ag_data = null; $this->ag_protocollo = ''; $this->incidente_con_danni_a_cose = false; $this->incidente_con_feriti = false; $this->incidente_con_feriti_lesioni_lievi = false; $this->incidente_con_feriti_lesioni_gravi = false; $this->incidente_mortale = false; $this->localita_uno = ''; $this->localita_due = ''; $this->intersezione_con = ''; $this->prossimita_civico = ''; $this->prossimita_palo_luce = ''; $this->prossimita_chilometro = ''; $this->note_aggiuntive = ''; $this->accertatore_1 = ''; $this->grado_accertatore_1 = ''; $this->accertatore_2 = ''; $this->grado_accertatore_2 = ''; $this->accertatore_3 = ''; $this->grado_accertatore_3 = ''; $this->accertatore_4 = ''; $this->grado_accertatore_4 = ''; $this->accertatore_5 = ''; $this->grado_accertatore_5 = ''; $this->parti_coinvolte = []; $this->rilievi_id = null; $this->tipo_urto = []; $this->tipo_segnalazione = []; $this->segnalazione_pervenuta_da = []; $this->ausilio_altri_enti = []; $this->segnalazione_data = null; $this->segnalazione_ora = ''; $this->segnalazione_minuti = ''; $this->segnalazione_altro = ''; $this->ausilio_altri_enti_motivo = ''; $this->ausilio_altri_enti_ora_intervento = ''; $this->ausilio_altri_enti_minuti_intervento = ''; $this->ditta_intervenuta = ''; $this->ripristino_ora_chiamata = ''; $this->ripristino_minuti_chiamata = ''; $this->ripristino_ora_arrivo = ''; $this->ripristino_minuti_arrivo = ''; $this->materiale_recuperato = []; $this->danni_cose_diverse_da_veicoli = ''; $this->condizioni_luce = []; $this->tipo_strada = []; $this->sinistro_ora = ''; $this->sinistro_minuti = ''; $this->localizzazione_incidente = ''; $this->localizzazione_incidente_altro = ''; $this->condizioni_atmosferiche = ''; $this->condizioni_atmosferiche_altro = ''; $this->nomenclatura_strada = ''; $this->nomenclatura_strada_numero = ''; $this->nomenclatura_strada_altro = ''; $this->pavimentazione = ''; $this->pavimentazione_altro = ''; $this->condizione_strada = ''; $this->condizione_strada_altro = ''; $this->fondo_stradale = ''; $this->fondo_stradale_specifica = ''; $this->visibilita = ''; $this->visibilita_specifica = ''; $this->particolarita_strada = ''; $this->particolarita_strada_specifica = ''; $this->tipo_strada_altro = ''; $this->traffico = ''; $this->segnaletica_verticale_1 = []; $this->segnaletica_verticale_2 = []; $this->segnaletica_verticale_3 = []; $this->segnaletica_verticale_4 = []; $this->segnaletica_orizzontale_1 = []; $this->segnaletica_orizzontale_2 = []; $this->segnaletica_orizzontale_3 = []; $this->segnaletica_orizzontale_4 = []; $this->segnaletica = ''; $this->segnaletica_verticale_1_via = ''; $this->segnaletica_verticale_1_altro = ''; $this->segnaletica_verticale_1_limite_velocita = ''; $this->segnaletica_verticale_1_direzione = ''; $this->segnaletica_verticale_1_pannello_integrativo = ''; $this->segnaletica_verticale_2_via = ''; $this->segnaletica_verticale_2_altro = ''; $this->segnaletica_verticale_2_limite_velocita = ''; $this->segnaletica_verticale_2_direzione = ''; $this->segnaletica_verticale_2_pannello_integrativo = ''; $this->segnaletica_verticale_3_via = ''; $this->segnaletica_verticale_3_altro = ''; $this->segnaletica_verticale_3_limite_velocita = ''; $this->segnaletica_verticale_3_direzione = ''; $this->segnaletica_verticale_3_pannello_integrativo = ''; $this->segnaletica_verticale_4_via = ''; $this->segnaletica_verticale_4_altro = ''; $this->segnaletica_verticale_4_limite_velocita = ''; $this->segnaletica_verticale_4_direzione = ''; $this->segnaletica_verticale_4_pannello_integrativo = ''; $this->segnaletica_orizzontale_1_via = ''; $this->segnaletica_orizzontale_1_linea_margine = ''; $this->segnaletica_orizzontale_1_linea_margine_specifica = ''; $this->segnaletica_orizzontale_1_linea_mezzeria = ''; $this->segnaletica_orizzontale_1_linea_mezzeria_specifica = ''; $this->segnaletica_orizzontale_1_altro = ''; $this->segnaletica_orizzontale_1_direzione = ''; $this->segnaletica_orizzontale_2_via = ''; $this->segnaletica_orizzontale_2_linea_margine = ''; $this->segnaletica_orizzontale_2_linea_margine_specifica = ''; $this->segnaletica_orizzontale_2_linea_mezzeria = ''; $this->segnaletica_orizzontale_2_linea_mezzeria_specifica = ''; $this->segnaletica_orizzontale_2_altro; $this->segnaletica_orizzontale_2_direzione; $this->segnaletica_orizzontale_3_via = ''; $this->segnaletica_orizzontale_3_linea_margine = ''; $this->segnaletica_orizzontale_3_linea_margine_specifica = ''; $this->segnaletica_orizzontale_3_linea_mezzeria = ''; $this->segnaletica_orizzontale_3_linea_mezzeria_specifica = ''; $this->segnaletica_orizzontale_3_altro; $this->segnaletica_orizzontale_3_direzione; $this->segnaletica_orizzontale_4_via = ''; $this->segnaletica_orizzontale_4_linea_margine = ''; $this->segnaletica_orizzontale_4_linea_margine_specifica = ''; $this->segnaletica_orizzontale_4_linea_mezzeria = ''; $this->segnaletica_orizzontale_4_linea_mezzeria_specifica = ''; $this->segnaletica_orizzontale_4_altro; $this->segnaletica_orizzontale_4_direzione; $this->noteText = ''; $this->notes = []; $this->richiestaId = 0; $this->richiestaAnagrafica = null; $this->richiestaData = null; $this->richiestaConsegna = null; $this->richiestaText = ''; $this->richieste = []; $this->allegatoId = 0; $this->allegatoType = 0; $this->allegatoGallery = 0; $this->allegatoName = ''; $this->allegatoVisible = false; $this->allegatoFiles = ''; $this->allegatiFiles = []; $this->allegatiImmagini = []; $this->allegatiDocumenti = []; $this->data_testi_oculari_0 = 0; $this->data_testi_oculari_stato_0 = 0; $this->data_testi_oculari_1 = 0; $this->data_testi_oculari_stato_1 = 0; $this->data_testi_oculari_2 = 0; $this->data_testi_oculari_stato_2 = 0; $this->data_testi_oculari_3 = 0; $this->data_testi_oculari_stato_3 = 0; $this->div_segnaletica_verticale_2 = false; $this->div_segnaletica_verticale_3 = false; $this->div_segnaletica_verticale_4 = false; $this->div_segnaletica_orizzontale_2 = false; $this->div_segnaletica_orizzontale_3 = false; $this->div_segnaletica_orizzontale_4 = false; $this->emit('load-select'); } public function showSegnaleticaVerticale() { if (!$this->div_segnaletica_verticale_2) { $this->div_segnaletica_verticale_2 = true; } else { if (!$this->div_segnaletica_verticale_3) { $this->div_segnaletica_verticale_3 = true; } else { if (!$this->div_segnaletica_verticale_4) { $this->div_segnaletica_verticale_4 = true; } } } } public function showSegnaleticaOrizzontale() { if (!$this->div_segnaletica_orizzontale_2) { $this->div_segnaletica_orizzontale_2 = true; } else { if (!$this->div_segnaletica_orizzontale_3) { $this->div_segnaletica_orizzontale_3 = true; } else { if (!$this->div_segnaletica_orizzontale_4) { $this->div_segnaletica_orizzontale_4 = true; } } } } public function hydrate() { $this->emit('load-select'); $this->emit('load-check'); } public function updatingSearch() { $this->resetPage(); } public function mount() { $this->provinces = \App\Models\LocationProvince::orderBy('title')->get(); $this->rilievi = \App\Models\Rilievi::orderBy('name')->get(); $this->tipi_urto = \App\Models\TipoUrto::orderBy('name')->get(); $this->tipi_danno = \App\Models\TipoDanno::orderBy('name')->get(); $this->entita_danni = \App\Models\EntitaDanno::orderBy('name')->get(); $this->effetto_danni = \App\Models\EffettoDanno::orderBy('name')->get(); $this->parti_macchina = \App\Models\ParteMacchina::orderBy('name')->get(); $this->tipi_veicolo = \App\Models\TipoVeicolo::orderBy('name')->get(); $this->marche = \App\Models\MarcaVeicolo::orderBy('name')->get(); $this->modelli = \App\Models\ModelloVeicolo::orderBy('name')->get(); $this->tipi_segnalazioni = \App\Models\TipoSegnalazione::orderBy('name')->get(); $this->pervenute_da = \App\Models\SegnalazionePervenutaDa::orderBy('name')->get(); $this->altri_enti = \App\Models\AusilioAltriEnti::orderBy('name')->get(); $this->materiali = \App\Models\MaterialeRecuperato::orderBy('name')->get(); $this->nomenclature = \App\Models\NomenclaturaStrada::orderBy('name')->get(); $this->condizioni_atmosferiche_array = \App\Models\CondizioniAtmosferiche::orderBy('name')->get(); $this->condizioni_luce_array = \App\Models\CondizioniLuce::orderBy('name')->get(); $this->pavimentazioni = \App\Models\PavimentazioneStrada::orderBy('name')->get(); $this->condizioni_strada = \App\Models\CondizioneStrada::orderBy('name')->get(); $this->fondi_stradali = \App\Models\FondoStradale::orderBy('name')->get(); $this->particolarita_strade = \App\Models\ParticolaritaStrada::orderBy('name')->get(); $this->tipi_strade = \App\Models\TipoStrada::orderBy('name')->get(); $this->grado_accertatore = \App\Models\AccertatoreGrado::orderBy('name')->get(); $this->segnaletica_verticale = \App\Models\SegnalazioneVerticale::orderBy('name')->get(); $this->segnaletica_orizzontale = \App\Models\SegnalazioneOrizzontale::orderBy('name')->get(); $this->allegatiType = \App\Models\AllegatiGalleryType::orderBy('name')->get(); $this->data_polizze = 0; $this->isAdmin = session('is_admin', false); } public function render() { $rows = \App\Models\Report::query() ->leftJoin('fcf_reports_stradario', 'fcf_reports_reports.localita_due', '=', 'fcf_reports_stradario.id') ->where(function ($query) { $query->where('fcf_reports_reports.name', 'like', '%' . $this->search . '%') ->orWhere('fcf_reports_stradario.descrizione', 'like', '%' . $this->search . '%'); }) ->select('fcf_reports_reports.*') ->orderBy('protocollo_anno', 'DESC') ->orderBy('protocollo_num', 'DESC') ->paginate(10); return view('livewire.report', ['records' => $rows]); } public function openModal() { $this->resetFields(); $this->showModal = true; } public function closeModal() { $this->showModal = false; $this->resetFields(); $this->emit('modalClosed'); } public function add() { try { $this->protocollo_num = DB::table('fcf_reports_reports') ->where('protocollo_anno', date('Y')) ->max('protocollo_num') + 1; $this->protocollo_anno = date('Y'); $this->name = $this->protocollo_num . "/" . $this->protocollo_anno; $reportData = [ 'name' => $this->name, 'protocollo_num' => $this->protocollo_num, 'protocollo_anno' => $this->protocollo_anno, 'validated' => $this->validated, 'necessita_nulla_osta' => $this->necessita_nulla_osta, 'data_nulla_osta' => $this->data_nulla_osta, 'localita_uno' => $this->localita_uno, 'localita_due' => $this->localita_due, 'verificatosi_in_data' => $this->verificatosi_in_data, 'verificatosi_in_data_ora' => $this->verificatosi_in_data_ora, 'verificatosi_in_data_minuti' => $this->verificatosi_in_data_minuti, 'rilievi_id' => $this->rilievi_id, 'segnalazione_data' => $this->segnalazione_data, 'segnalazione_ora' => $this->segnalazione_ora, 'segnalazione_minuti' => $this->segnalazione_minuti, 'sinistro_ora' => $this->sinistro_ora, 'sinistro_minuti' => $this->sinistro_minuti, 'localizzazione_incidente' => $this->localizzazione_incidente, 'nomenclatura_strada' => $this->nomenclatura_strada, 'condizioni_atmosferiche' => $this->condizioni_atmosferiche, 'pavimentazione' => $this->pavimentazione, 'condizione_strada' => $this->condizione_strada, 'fondo_stradale' => $this->fondo_stradale, 'visibilita' => $this->visibilita, 'particolarita_strada' => $this->particolarita_strada, ]; Log::info('Creating report with data:', $reportData); $record = \App\Models\Report::create($reportData); session()->flash('success', 'Verbale creato'); $this->closeModal(); $this->edit($record->id); } catch (\Exception $ex) { session()->flash('error', 'Errore in fase di salvataggio. I dati sono da inserire obbligatoriamente.'); } } public function store() { $this->validate(); try { \App\Models\Report::create([ 'name' => $this->name ]); session()->flash('success', 'Verbale creato'); $this->resetFields(); $this->add = false; } catch (\Exception $ex) { session()->flash('error', 'Errore in fase di salvataggio'); } } public function invalidateVerbale() { try { \App\Models\Report::whereId($this->dataId)->update([ 'validated' => 0 ]); session()->flash('success', 'Record aggiornato'); $this->resetFields(); $this->update = false; } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function edit($idReport) { $this->resetFields(); try { $record = \App\Models\Report::findOrFail($idReport); if (!$record) { session()->flash('error', 'Record non trovato'); } else { $this->name = $record->name; $this->validated = $record->validated; $this->necessita_nulla_osta = $record->necessita_nulla_osta; $this->data_nulla_osta = $record->data_nulla_osta; $this->protocollo_num = $record->protocollo_num; $this->protocollo_ord = $record->protocollo_ord; $this->protocollo_anno = $record->protocollo_anno; $this->verificatosi_in_data = $record->verificatosi_in_data; $this->verificatosi_in_data_ora = $record->verificatosi_in_data_ora; $this->verificatosi_in_data_minuti = $record->verificatosi_in_data_minuti; $this->utg = $record->utg; $this->utg_data = $record->utg_data; $this->utg_protocollo = $record->utg_protocollo; $this->ag = $record->ag; $this->ag_data = $record->ag_data; $this->ag_protocollo = $record->ag_protocollo; $this->incidente_con_danni_a_cose = $record->incidente_con_danni_a_cose; $this->incidente_con_feriti = $record->incidente_con_feriti; $this->incidente_con_feriti_lesioni_lievi = $record->incidente_con_feriti_lesioni_lievi; $this->incidente_con_feriti_lesioni_gravi = $record->incidente_con_feriti_lesioni_gravi; $this->incidente_mortale = $record->incidente_mortale; $this->localita_uno = $record->localita_uno; $this->localita_due = $record->localita_due; $this->intersezione_con = $record->intersezione_con; $this->prossimita_civico = $record->prossimita_civico; $this->prossimita_palo_luce = $record->prossimita_palo_luce; $this->prossimita_chilometro = $record->prossimita_chilometro; $this->note_aggiuntive = $record->note_aggiuntive; $this->accertatore_1 = $record->accertatore_1; $this->grado_accertatore_1 = $record->grado_accertatore_1; $this->accertatore_2 = $record->accertatore_2; $this->grado_accertatore_2 = $record->grado_accertatore_2; $this->accertatore_3 = $record->accertatore_3; $this->grado_accertatore_3 = $record->grado_accertatore_3; $this->accertatore_4 = $record->accertatore_4; $this->grado_accertatore_4 = $record->grado_accertatore_4; $this->accertatore_5 = $record->accertatore_5; $this->grado_accertatore_5 = $record->grado_accertatore_5; $this->parti_coinvolte = ReportDataPartiCoinvolte::where('report_id', $idReport)->get(); $this->tipo_urto = \App\Models\ReportTipoUrto::where('report_id', $idReport)->pluck('tipo_urto_id'); $this->rilievi_id = $record->rilievi_id; $this->segnalazione_data = $record->segnalazione_data; $this->segnalazione_ora = $record->segnalazione_ora; $this->segnalazione_minuti = $record->segnalazione_minuti; $this->segnalazione_altro = $record->segnalazione_altro; $this->ausilio_altri_enti_motivo = $record->ausilio_altri_enti_motivo; $this->ausilio_altri_enti_ora_intervento = $record->ausilio_altri_enti_ora_intervento; $this->ausilio_altri_enti_minuti_intervento = $record->ausilio_altri_enti_minuti_intervento; $this->ditta_intervenuta = $record->ditta_intervenuta; $this->ripristino_ora_chiamata = $record->ripristino_ora_chiamata; $this->ripristino_minuti_chiamata = $record->ripristino_minuti_chiamata; $this->ripristino_ora_arrivo = $record->ripristino_ora_arrivo; $this->ripristino_minuti_arrivo = $record->ripristino_minuti_arrivo; $this->danni_cose_diverse_da_veicoli = $record->danni_cose_diverse_da_veicoli; $this->tipo_segnalazione = \App\Models\ReportTipoSegnalazione::where('report_id', $idReport)->pluck('tipo_segnalazione_id'); $this->segnalazione_pervenuta_da = \App\Models\ReportSegnalazionePervenutaDa::where('report_id', $idReport)->pluck('segnalazione_pervenuta_da_id'); $this->materiale_recuperato = \App\Models\ReportMaterialeRecuperato::where('report_id', $idReport)->pluck('materiale_recuperato_id'); $this->ausilio_altri_enti = \App\Models\ReportAusilioAltriEnti::where('report_id', $idReport)->pluck('ausilio_altri_enti_id'); $this->condizioni_luce = \App\Models\ReportCondizioniLuce::where('report_id', $idReport)->pluck('condizioni_luce_id'); $this->tipo_strada = \App\Models\ReportTipoStrada::where('report_id', $idReport)->pluck('tipo_strada_id'); $this->sinistro_ora = $record->sinistro_ora; $this->sinistro_minuti = $record->sinistro_minuti; $this->localizzazione_incidente = $record->localizzazione_incidente; $this->localizzazione_incidente_altro = $record->localizzazione_incidente_altro; $this->condizioni_atmosferiche = $record->condizioni_atmosferiche; $this->condizioni_atmosferiche_altro = $record->condizioni_atmosferiche_altro; $this->nomenclatura_strada = $record->nomenclatura_strada; $this->nomenclatura_strada_numero = $record->nomenclatura_strada_numero; $this->nomenclatura_strada_altro = $record->nomenclatura_strada_altro; $this->pavimentazione = $record->pavimentazione; $this->pavimentazione_altro = $record->pavimentazione_altro; $this->condizione_strada = $record->condizione_strada; $this->condizione_strada_altro = $record->condizione_strada_altro; $this->fondo_stradale = $record->fondo_stradale; $this->fondo_stradale_specifica = $record->fondo_stradale_specifica; $this->visibilita = $record->visibilita; $this->visibilita_specifica = $record->visibilita_specifica; $this->particolarita_strada = $record->particolarita_strada; $this->particolarita_strada_specifica = $record->particolarita_strada_specifica; $this->tipo_strada_altro = $record->tipo_strada_altro; $this->traffico = $record->traffico; $this->segnaletica_verticale_1 = \App\Models\ReportSegnaleticaVerticale1::where('report_id', $idReport)->pluck('segnaletica_verticale_id'); $this->segnaletica_verticale_2 = \App\Models\ReportSegnaleticaVerticale2::where('report_id', $idReport)->pluck('segnaletica_verticale_id'); $this->segnaletica_verticale_3 = \App\Models\ReportSegnaleticaVerticale3::where('report_id', $idReport)->pluck('segnaletica_verticale_id'); $this->segnaletica_verticale_4 = \App\Models\ReportSegnaleticaVerticale4::where('report_id', $idReport)->pluck('segnaletica_verticale_id'); $this->segnaletica_orizzontale_1 = \App\Models\ReportSegnaleticaOrizzontale1::where('report_id', $idReport)->pluck('segnaletica_orizzontale_id'); $this->segnaletica_orizzontale_2 = \App\Models\ReportSegnaleticaOrizzontale2::where('report_id', $idReport)->pluck('segnaletica_orizzontale_id'); $this->segnaletica_orizzontale_3 = \App\Models\ReportSegnaleticaOrizzontale3::where('report_id', $idReport)->pluck('segnaletica_orizzontale_id'); $this->segnaletica_orizzontale_4 = \App\Models\ReportSegnaleticaOrizzontale4::where('report_id', $idReport)->pluck('segnaletica_orizzontale_id'); $this->segnaletica = $record->segnaletica; $this->segnaletica_verticale_1_via = $record->segnaletica_verticale_1_via; $this->segnaletica_verticale_1_altro = $record->segnaletica_verticale_1_altro; $this->segnaletica_verticale_1_limite_velocita = $record->segnaletica_verticale_1_limite_velocita; $this->segnaletica_verticale_1_direzione = $record->segnaletica_verticale_1_direzione; $this->segnaletica_verticale_1_pannello_integrativo = $record->segnaletica_verticale_1_pannello_integrativo; $this->segnaletica_verticale_2_via = $record->segnaletica_verticale_2_via; $this->div_segnaletica_verticale_2 = $record->segnaletica_verticale_2_via != ""; $this->segnaletica_verticale_2_altro = $record->segnaletica_verticale_2_altro; $this->segnaletica_verticale_2_limite_velocita = $record->segnaletica_verticale_2_limite_velocita; $this->segnaletica_verticale_2_direzione = $record->segnaletica_verticale_2_direzione; $this->segnaletica_verticale_2_pannello_integrativo = $record->segnaletica_verticale_2_pannello_integrativo; $this->segnaletica_verticale_3_via = $record->segnaletica_verticale_3_via; $this->div_segnaletica_verticale_3 = $record->segnaletica_verticale_3_via != ""; $this->segnaletica_verticale_3_altro = $record->segnaletica_verticale_3_altro; $this->segnaletica_verticale_3_limite_velocita = $record->segnaletica_verticale_3_limite_velocita; $this->segnaletica_verticale_3_direzione = $record->segnaletica_verticale_3_direzione; $this->segnaletica_verticale_3_pannello_integrativo = $record->segnaletica_verticale_3_pannello_integrativo; $this->segnaletica_verticale_4_via = $record->segnaletica_verticale_4_via; $this->div_segnaletica_verticale_4 = $record->segnaletica_verticale_4_via != ""; $this->segnaletica_verticale_4_altro = $record->segnaletica_verticale_4_altro; $this->segnaletica_verticale_4_limite_velocita = $record->segnaletica_verticale_4_limite_velocita; $this->segnaletica_verticale_4_direzione = $record->segnaletica_verticale_4_direzione; $this->segnaletica_verticale_4_pannello_integrativo = $record->segnaletica_verticale_4_pannello_integrativo; $this->segnaletica_orizzontale_1_via = $record->segnaletica_orizzontale_1_via; $this->segnaletica_orizzontale_1_linea_margine = $record->segnaletica_orizzontale_1_linea_margine; $this->segnaletica_orizzontale_1_linea_margine_specifica = $record->segnaletica_orizzontale_1_linea_margine_specifica; $this->segnaletica_orizzontale_1_linea_mezzeria = $record->segnaletica_orizzontale_1_linea_mezzeria; $this->segnaletica_orizzontale_1_linea_mezzeria_specifica = $record->segnaletica_orizzontale_1_linea_mezzeria_specifica; $this->segnaletica_orizzontale_1_altro = $record->segnaletica_orizzontale_1_altro; $this->segnaletica_orizzontale_1_direzione = $record->segnaletica_orizzontale_1_direzione; $this->segnaletica_orizzontale_2_via = $record->segnaletica_orizzontale_2_via; $this->div_segnaletica_orizzontale_2 = $record->segnaletica_orizzontale_2_via != ""; $this->segnaletica_orizzontale_2_linea_margine = $record->segnaletica_orizzontale_2_linea_margine; $this->segnaletica_orizzontale_2_linea_margine_specifica = $record->segnaletica_orizzontale_2_linea_margine_specifica; $this->segnaletica_orizzontale_2_linea_mezzeria = $record->segnaletica_orizzontale_2_linea_mezzeria; $this->segnaletica_orizzontale_2_linea_mezzeria_specifica = $record->segnaletica_orizzontale_2_linea_mezzeria_specifica; $this->segnaletica_orizzontale_2_altro = $record->segnaletica_orizzontale_2_altro; $this->segnaletica_orizzontale_2_direzione = $record->segnaletica_orizzontale_2_direzione; $this->segnaletica_orizzontale_3_via = $record->segnaletica_orizzontale_3_via; $this->div_segnaletica_orizzontale_3 = $record->segnaletica_orizzontale_3_via != ""; $this->segnaletica_orizzontale_3_linea_margine = $record->segnaletica_orizzontale_3_linea_margine; $this->segnaletica_orizzontale_3_linea_margine_specifica = $record->segnaletica_orizzontale_3_linea_margine_specifica; $this->segnaletica_orizzontale_3_linea_mezzeria = $record->segnaletica_orizzontale_3_linea_mezzeria; $this->segnaletica_orizzontale_3_linea_mezzeria_specifica = $record->segnaletica_orizzontale_3_linea_mezzeria_specifica; $this->segnaletica_orizzontale_3_altro = $record->segnaletica_orizzontale_3_altro; $this->segnaletica_orizzontale_3_direzione = $record->segnaletica_orizzontale_3_direzione; $this->segnaletica_orizzontale_4_via = $record->segnaletica_orizzontale_4_via; $this->div_segnaletica_orizzontale_4 = $record->segnaletica_orizzontale_4_via != ""; $this->segnaletica_orizzontale_4_linea_margine = $record->segnaletica_orizzontale_4_linea_margine; $this->segnaletica_orizzontale_4_linea_margine_specifica = $record->segnaletica_orizzontale_4_linea_margine_specifica; $this->segnaletica_orizzontale_4_linea_mezzeria = $record->segnaletica_orizzontale_4_linea_mezzeria; $this->segnaletica_orizzontale_4_linea_mezzeria_specifica = $record->segnaletica_orizzontale_4_linea_mezzeria_specifica; $this->segnaletica_orizzontale_4_altro = $record->segnaletica_orizzontale_4_altro; $this->segnaletica_orizzontale_4_direzione = $record->segnaletica_orizzontale_4_direzione; $this->notes = \App\Models\ReportProtocolloNote::where('report_id', $idReport)->get(); $this->richieste = \App\Models\ReportRichiesta::where('report_id', $idReport)->get(); $this->allegatiImmagini = \App\Models\ReportAllegatiGallery::where('report_id', $idReport)->where('file_type', 0)->orderBy('name')->get(); $this->allegatiDocumenti = \App\Models\ReportAllegatiGallery::where('report_id', $idReport)->where('file_type', 1)->orderBy('name')->get(); $testi_oculari = \App\Models\ReportDataTestimoniOculari::where('report_id', $idReport)->get(); foreach ($testi_oculari as $idx => $i) { $property_testi_oculari = "data_testi_oculari_{$idx}"; $property_stato_testi_oculari = "data_testi_oculari_stato_{$idx}"; $this->$property_testi_oculari = $i->testi_oculari; $this->$property_stato_testi_oculari = $i->stato_testi_oculari; } $this->dataId = $record->id; $this->update = true; $this->add = false; } } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } $this->emit('load-check', ""); } public function update($validate = false) { if ($validate) { $rulesValidate = [ 'localita_uno' => 'required', 'localita_due' => 'required', 'verificatosi_in_data' => 'required', 'verificatosi_in_data_ora' => 'required', 'verificatosi_in_data_minuti' => 'required', 'rilievi_id' => 'required', 'segnalazione_data' => 'required', 'segnalazione_ora' => 'required', 'segnalazione_minuti' => 'required', 'sinistro_ora' => 'required', 'sinistro_minuti' => 'required', 'localizzazione_incidente' => 'required', 'nomenclatura_strada' => 'required', 'condizioni_atmosferiche' => 'required', 'pavimentazione' => 'required', 'condizione_strada' => 'required', 'fondo_stradale' => 'required', 'visibilita' => 'required', 'particolarita_strada' => 'required', ]; $this->validate($rulesValidate); } try { \App\Models\Report::whereId($this->dataId)->update([ 'name' => '0' . $this->protocollo_num . "/" . $this->protocollo_anno, 'necessita_nulla_osta' => $this->necessita_nulla_osta, 'data_nulla_osta' => $this->data_nulla_osta, 'protocollo_num' => $this->protocollo_num, 'protocollo_ord' => $this->protocollo_ord, 'protocollo_anno' => $this->protocollo_anno, 'verificatosi_in_data' => $this->verificatosi_in_data, 'verificatosi_in_data_ora' => $this->verificatosi_in_data_ora, 'verificatosi_in_data_minuti' => $this->verificatosi_in_data_minuti, 'utg' => $this->utg, 'utg_data' => $this->utg_data, 'utg_protocollo' => $this->utg_protocollo, 'ag' => $this->ag, 'ag_data' => $this->ag_data, 'ag_protocollo' => $this->ag_protocollo, 'incidente_con_danni_a_cose' => $this->incidente_con_danni_a_cose, 'incidente_con_feriti' => $this->incidente_con_feriti, 'incidente_con_feriti_lesioni_lievi' => $this->incidente_con_feriti_lesioni_lievi, 'incidente_con_feriti_lesioni_gravi' => $this->incidente_con_feriti_lesioni_gravi, 'incidente_mortale' => $this->incidente_mortale, 'localita_uno' => $this->localita_uno, 'localita_due' => $this->localita_due, 'intersezione_con' => $this->intersezione_con, 'prossimita_civico' => $this->prossimita_civico, 'prossimita_palo_luce' => $this->prossimita_palo_luce, 'prossimita_chilometro' => $this->prossimita_chilometro, 'note_aggiuntive' => $this->note_aggiuntive, 'accertatore_1' => $this->accertatore_1, 'grado_accertatore_1' => $this->grado_accertatore_1, 'accertatore_2' => $this->accertatore_2, 'grado_accertatore_2' => $this->grado_accertatore_2, 'accertatore_3' => $this->accertatore_3, 'grado_accertatore_3' => $this->grado_accertatore_3, 'accertatore_4' => $this->accertatore_4, 'grado_accertatore_4' => $this->grado_accertatore_4, 'accertatore_5' => $this->accertatore_5, 'grado_accertatore_5' => $this->grado_accertatore_5, 'rilievi_id' => $this->rilievi_id, 'segnalazione_data' => $this->segnalazione_data, 'segnalazione_ora' => $this->segnalazione_ora, 'segnalazione_minuti' => $this->segnalazione_minuti, 'segnalazione_altro' => $this->segnalazione_altro, 'ausilio_altri_enti_motivo' => $this->ausilio_altri_enti_motivo, 'ausilio_altri_enti_ora_intervento' => $this->ausilio_altri_enti_ora_intervento, 'ausilio_altri_enti_minuti_intervento' => $this->ausilio_altri_enti_minuti_intervento, 'ditta_intervenuta' => $this->ditta_intervenuta, 'ripristino_ora_chiamata' => $this->ripristino_ora_chiamata, 'ripristino_minuti_chiamata' => $this->ripristino_minuti_chiamata, 'ripristino_ora_arrivo' => $this->ripristino_ora_arrivo, 'ripristino_minuti_arrivo' => $this->ripristino_minuti_arrivo, 'danni_cose_diverse_da_veicoli' => $this->danni_cose_diverse_da_veicoli, 'sinistro_ora' => $this->sinistro_ora, 'sinistro_minuti' => $this->sinistro_minuti, 'localizzazione_incidente' => $this->localizzazione_incidente, 'localizzazione_incidente_altro' => $this->localizzazione_incidente_altro, 'condizioni_atmosferiche' => $this->condizioni_atmosferiche, 'condizioni_atmosferiche_altro' => $this->condizioni_atmosferiche_altro, 'nomenclatura_strada' => $this->nomenclatura_strada, 'nomenclatura_strada_numero' => $this->nomenclatura_strada_numero, 'nomenclatura_strada_altro' => $this->nomenclatura_strada_altro, 'pavimentazione' => $this->pavimentazione, 'pavimentazione_altro' => $this->pavimentazione_altro, 'condizione_strada' => $this->condizione_strada, 'condizione_strada_altro' => $this->condizione_strada_altro, 'fondo_stradale' => $this->fondo_stradale, 'fondo_stradale_specifica' => $this->fondo_stradale_specifica, 'visibilita' => $this->visibilita, 'visibilita_specifica' => $this->visibilita_specifica, 'particolarita_strada' => $this->particolarita_strada, 'particolarita_strada_specifica' => $this->particolarita_strada_specifica, 'tipo_strada_altro' => $this->tipo_strada_altro, 'traffico' => $this->traffico, 'segnaletica' => $this->segnaletica, 'segnaletica_verticale_1_via' => $this->segnaletica_verticale_1_via, 'segnaletica_verticale_1_altro' => $this->segnaletica_verticale_1_altro, 'segnaletica_verticale_1_limite_velocita' => $this->segnaletica_verticale_1_limite_velocita, 'segnaletica_verticale_1_direzione' => $this->segnaletica_verticale_1_direzione, 'segnaletica_verticale_1_pannello_integrativo' => $this->segnaletica_verticale_1_pannello_integrativo, 'segnaletica_verticale_2_via' => $this->segnaletica_verticale_2_via, 'segnaletica_verticale_2_altro' => $this->segnaletica_verticale_2_altro, 'segnaletica_verticale_2_limite_velocita' => $this->segnaletica_verticale_2_limite_velocita, 'segnaletica_verticale_2_direzione' => $this->segnaletica_verticale_2_direzione, 'segnaletica_verticale_2_pannello_integrativo' => $this->segnaletica_verticale_2_pannello_integrativo, 'segnaletica_verticale_3_via' => $this->segnaletica_verticale_3_via, 'segnaletica_verticale_3_altro' => $this->segnaletica_verticale_3_altro, 'segnaletica_verticale_3_limite_velocita' => $this->segnaletica_verticale_3_limite_velocita, 'segnaletica_verticale_3_direzione' => $this->segnaletica_verticale_3_direzione, 'segnaletica_verticale_3_pannello_integrativo' => $this->segnaletica_verticale_3_pannello_integrativo, 'segnaletica_verticale_4_via' => $this->segnaletica_verticale_4_via, 'segnaletica_verticale_4_altro' => $this->segnaletica_verticale_4_altro, 'segnaletica_verticale_4_limite_velocita' => $this->segnaletica_verticale_4_limite_velocita, 'segnaletica_verticale_4_direzione' => $this->segnaletica_verticale_4_direzione, 'segnaletica_verticale_4_pannello_integrativo' => $this->segnaletica_verticale_4_pannello_integrativo, 'segnaletica_orizzontale_1_via' => $this->segnaletica_orizzontale_1_via, 'segnaletica_orizzontale_1_linea_margine' => $this->segnaletica_orizzontale_1_linea_margine, 'segnaletica_orizzontale_1_linea_margine_specifica' => $this->segnaletica_orizzontale_1_linea_margine_specifica, 'segnaletica_orizzontale_1_linea_mezzeria' => $this->segnaletica_orizzontale_1_linea_mezzeria, 'segnaletica_orizzontale_1_linea_mezzeria_specifica' => $this->segnaletica_orizzontale_1_linea_mezzeria_specifica, 'segnaletica_orizzontale_1_altro' => $this->segnaletica_orizzontale_1_altro, 'segnaletica_orizzontale_1_direzione' => $this->segnaletica_orizzontale_1_direzione, 'segnaletica_orizzontale_2_via' => $this->segnaletica_orizzontale_2_via, 'segnaletica_orizzontale_2_linea_margine' => $this->segnaletica_orizzontale_2_linea_margine, 'segnaletica_orizzontale_2_linea_margine_specifica' => $this->segnaletica_orizzontale_2_linea_margine_specifica, 'segnaletica_orizzontale_2_linea_mezzeria' => $this->segnaletica_orizzontale_2_linea_mezzeria, 'segnaletica_orizzontale_2_linea_mezzeria_specifica' => $this->segnaletica_orizzontale_2_linea_mezzeria_specifica, 'segnaletica_orizzontale_2_altro' => $this->segnaletica_orizzontale_2_altro, 'segnaletica_orizzontale_2_direzione' => $this->segnaletica_orizzontale_2_direzione, 'segnaletica_orizzontale_3_via' => $this->segnaletica_orizzontale_3_via, 'segnaletica_orizzontale_3_linea_margine' => $this->segnaletica_orizzontale_3_linea_margine, 'segnaletica_orizzontale_3_linea_margine_specifica' => $this->segnaletica_orizzontale_3_linea_margine_specifica, 'segnaletica_orizzontale_3_linea_mezzeria' => $this->segnaletica_orizzontale_3_linea_mezzeria, 'segnaletica_orizzontale_3_linea_mezzeria_specifica' => $this->segnaletica_orizzontale_3_linea_mezzeria_specifica, 'segnaletica_orizzontale_3_altro' => $this->segnaletica_orizzontale_3_altro, 'segnaletica_orizzontale_3_direzione' => $this->segnaletica_orizzontale_3_direzione, 'segnaletica_orizzontale_4_via' => $this->segnaletica_orizzontale_4_via, 'segnaletica_orizzontale_4_linea_margine' => $this->segnaletica_orizzontale_4_linea_margine, 'segnaletica_orizzontale_4_linea_margine_specifica' => $this->segnaletica_orizzontale_4_linea_margine_specifica, 'segnaletica_orizzontale_4_linea_mezzeria' => $this->segnaletica_orizzontale_4_linea_mezzeria, 'segnaletica_orizzontale_4_linea_mezzeria_specifica' => $this->segnaletica_orizzontale_4_linea_mezzeria_specifica, 'segnaletica_orizzontale_4_altro' => $this->segnaletica_orizzontale_4_altro, 'segnaletica_orizzontale_4_direzione' => $this->segnaletica_orizzontale_4_direzione, 'validated' => $validate ]); \App\Models\ReportTipoUrto::where('report_id', $this->dataId)->delete(); foreach ($this->tipo_urto as $x) { \App\Models\ReportTipoUrto::create([ 'report_id' => $this->dataId, 'tipo_urto_id' => $x ]); } \App\Models\ReportTipoSegnalazione::where('report_id', $this->dataId)->delete(); foreach ($this->tipo_segnalazione as $x) { \App\Models\ReportTipoSegnalazione::create([ 'report_id' => $this->dataId, 'tipo_segnalazione_id' => $x ]); } \App\Models\ReportSegnalazionePervenutaDa::where('report_id', $this->dataId)->delete(); foreach ($this->segnalazione_pervenuta_da as $x) { \App\Models\ReportSegnalazionePervenutaDa::create([ 'report_id' => $this->dataId, 'segnalazione_pervenuta_da_id' => $x ]); } \App\Models\ReportMaterialeRecuperato::where('report_id', $this->dataId)->delete(); foreach ($this->materiale_recuperato as $x) { \App\Models\ReportMaterialeRecuperato::create([ 'report_id' => $this->dataId, 'materiale_recuperato_id' => $x ]); } \App\Models\ReportAusilioAltriEnti::where('report_id', $this->dataId)->delete(); foreach ($this->ausilio_altri_enti as $x) { \App\Models\ReportAusilioAltriEnti::create([ 'report_id' => $this->dataId, 'ausilio_altri_enti_id' => $x ]); } \App\Models\ReportCondizioniLuce::where('report_id', $this->dataId)->delete(); foreach ($this->condizioni_luce as $x) { \App\Models\ReportCondizioniLuce::create([ 'report_id' => $this->dataId, 'condizioni_luce_id' => $x ]); } \App\Models\ReportTipoStrada::where('report_id', $this->dataId)->delete(); foreach ($this->tipo_strada as $x) { \App\Models\ReportTipoStrada::create([ 'report_id' => $this->dataId, 'tipo_strada_id' => $x ]); } \App\Models\ReportSegnaleticaVerticale1::where('report_id', $this->dataId)->delete(); foreach ($this->segnaletica_verticale_1 as $x) { \App\Models\ReportSegnaleticaVerticale1::create([ 'report_id' => $this->dataId, 'segnaletica_verticale_id' => $x ]); } \App\Models\ReportSegnaleticaVerticale2::where('report_id', $this->dataId)->delete(); foreach ($this->segnaletica_verticale_2 as $x) { \App\Models\ReportSegnaleticaVerticale2::create([ 'report_id' => $this->dataId, 'segnaletica_verticale_id' => $x ]); } \App\Models\ReportSegnaleticaVerticale3::where('report_id', $this->dataId)->delete(); foreach ($this->segnaletica_verticale_3 as $x) { \App\Models\ReportSegnaleticaVerticale3::create([ 'report_id' => $this->dataId, 'segnaletica_verticale_id' => $x ]); } \App\Models\ReportSegnaleticaVerticale4::where('report_id', $this->dataId)->delete(); foreach ($this->segnaletica_verticale_4 as $x) { \App\Models\ReportSegnaleticaVerticale4::create([ 'report_id' => $this->dataId, 'segnaletica_verticale_id' => $x ]); } \App\Models\ReportSegnaleticaOrizzontale1::where('report_id', $this->dataId)->delete(); foreach ($this->segnaletica_orizzontale_1 as $x) { \App\Models\ReportSegnaleticaOrizzontale1::create([ 'report_id' => $this->dataId, 'segnaletica_orizzontale_id' => $x ]); } \App\Models\ReportSegnaleticaOrizzontale2::where('report_id', $this->dataId)->delete(); foreach ($this->segnaletica_orizzontale_2 as $x) { \App\Models\ReportSegnaleticaOrizzontale2::create([ 'report_id' => $this->dataId, 'segnaletica_orizzontale_id' => $x ]); } \App\Models\ReportSegnaleticaOrizzontale3::where('report_id', $this->dataId)->delete(); foreach ($this->segnaletica_orizzontale_3 as $x) { \App\Models\ReportSegnaleticaOrizzontale3::create([ 'report_id' => $this->dataId, 'segnaletica_orizzontale_id' => $x ]); } \App\Models\ReportSegnaleticaOrizzontale4::where('report_id', $this->dataId)->delete(); foreach ($this->segnaletica_orizzontale_4 as $x) { \App\Models\ReportSegnaleticaOrizzontale4::create([ 'report_id' => $this->dataId, 'segnaletica_orizzontale_id' => $x ]); } \App\Models\ReportDataTestimoniOculari::where('report_id', $this->dataId)->delete(); try { \App\Models\ReportDataTestimoniOculari::create([ 'progressive' => 0, 'report_id' => $this->dataId, 'testi_oculari' => $this->data_testi_oculari_0, 'stato_testi_oculari' => $this->data_testi_oculari_stato_0 ]); \App\Models\ReportDataTestimoniOculari::create([ 'progressive' => 1, 'report_id' => $this->dataId, 'testi_oculari' => $this->data_testi_oculari_1, 'stato_testi_oculari' => $this->data_testi_oculari_stato_1 ]); \App\Models\ReportDataTestimoniOculari::create([ 'progressive' => 2, 'report_id' => $this->dataId, 'testi_oculari' => $this->data_testi_oculari_2, 'stato_testi_oculari' => $this->data_testi_oculari_stato_2 ]); \App\Models\ReportDataTestimoniOculari::create([ 'progressive' => 3, 'report_id' => $this->dataId, 'testi_oculari' => $this->data_testi_oculari_3, 'stato_testi_oculari' => $this->data_testi_oculari_stato_3 ]); } catch (\Exception $ex) { session()->flash('error', 'Errore in fase di salvataggio (' . $ex->getMessage() . ')'); } session()->flash('success', 'Record aggiornato'); $this->resetFields(); $this->update = false; } catch (\Exception $ex) { session()->flash('error', 'Errore (' . $ex->getMessage() . ')'); } } public function cancel() { $this->add = false; $this->update = false; $this->resetFields(); $this->resetAnagrafica(); $this->resetVeicolo(); $this->resetVeicoloData(); } public function delete($id) { try { \App\Models\Report::find($id)->delete(); session()->flash('success', "Record eliminato"); } catch (\Exception $e) { session()->flash('error', "Errore"); } } public function closeAndResetModal() { logger('closeAndResetModal called'); $this->resetVeicoloData(); $this->emit('close-modal-parte-comune'); } public function addTesteOculare($x) { $this->resetAnagrafica(); $this->currentTeste = $x; $this->emit('load-anagrafica-modal'); } public function addConducente() { $this->resetAnagrafica(); $this->currentConducente = 99; $this->emit('load-anagrafica-modal'); } public function removeConducente() { $this->data_conducenti = 0; $this->emit('add-default-value', $this->data_conducenti, '', 'data_conducenti'); } public function editConducente() { $this->currentConducente = $this->data_conducenti; $this->editAnagrafica($this->data_conducenti); $this->emit('load-anagrafica-modal'); } public function addInfortunato($x) { $this->resetAnagrafica(); $this->currentInfortunato = $x; $this->emit('load-anagrafica-modal'); } public function dateToNull() { return "0000-00-00"; } public function getLocalita($localita) { if ($localita > 0) { $ret = \App\Models\LocationTown::where('id', $localita)->first(); if ($ret) return $ret->title; else return ""; } return ""; } public function getStradario($stradario) { if ($stradario > 0) { $ret = \App\Models\Stradario::findOrFail($stradario); return $ret->TOPONIMO . " " . $ret->DESCRIZIONE; } return ""; } public function getByTarga() { if ($this->vei_targa != '') { $targa = $this->vei_targa; try { Log::info("veicolo con targa: " . $targa); $wd = "dettaglioAutoveicoloBase"; $wd = "datiCartaCircolazioneAutoveicoloProprietario"; Log::info("wd: " . $wd); $url = env('MCTC_URL', 'https://e-servizicoll.dtt.ilportaledellautomobilista.it/Info-ws-sh/services'); Log::info("url: " . $url); $client = new \SoapClient($url . '/' . $wd . '/' . $wd . '.wsdl', array( 'stream_context' => stream_context_create(array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) )), 'trace' => 1 )); $utente = env('MCTC_USER', ''); $password = env('MCTC_PASSWORD', ''); $xml = ' ' . $utente . ' ' . $password . ' '; $header = new \SoapHeader( 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', 'Security', new \SoapVar($xml, XSD_ANYXML), true ); $client->__setSoapHeaders($header); $classe = "dettaglioAutoveicoloBase"; $classe = "dettaglioCartaCircolazioneProprietarioAutoveicolo"; try { $this->loadTarga = "OK"; $obj = $client->__soapCall($classe, array( $classe . "Request" => array( "login" => array(), "targa" => array("numeroTarga" => $targa), "pdf" => false ) )); if (!$this->handleMCTCError($obj)) { $this->emit('hideLoading', 'btTarga'); return; } Log::debug(print_r($obj, true)); $this->vei_data_ultima_revisione = @$obj->DatiUltimaRevisione->dataUltimaRevisione; $this->vei_carta_circolazione = @$obj->DatiAmministrativiVeicolo[0]->NumeroCartaCircolazione; $this->vei_carta_circolazione_rilasciata_il = @$obj->DatiAmministrativiVeicolo[0]->DataEmissioneDocumento; $this->vei_cilindrata = @$obj->DatiTecniciVeicolo->CilindrataInCentimetriCubi; $this->vei_peso_complessivo = @$obj->DatiTecniciVeicolo->TaraInKG; } catch (\SoapFault $fault) { $this->loadTarga = $fault->getMessage(); } } catch (\Exception $ex) { Log::error($ex->getMessage()); } $this->emit('hideLoading', 'btTarga'); } } public function getByPatente() { if ($this->anag_documento_numero != '') { $patente = $this->anag_documento_numero; Log::info("patente numero: " . $patente); Log::info("patente numero: " . $patente); try { $wd = "dettaglioPatenteBase"; $url = env('MCTC_URL', 'https://e-servizicoll.dtt.ilportaledellautomobilista.it/Info-ws-sh/services'); Log::info("url: " . $url); $client = new \SoapClient($url . '/' . $wd . '/' . $wd . '.wsdl', array( 'stream_context' => stream_context_create(array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) )), 'trace' => 1 )); $utente = env('MCTC_USER', ''); $password = env('MCTC_PASSWORD', ''); $xml = ' ' . $utente . ' ' . $password . ' '; $header = new \SoapHeader( 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', 'Security', new \SoapVar($xml, XSD_ANYXML), true ); $client->__setSoapHeaders($header); $classe = "dettaglioPatente"; try { $obj = $client->__soapCall($classe, array( $classe . "Request" => array( "login" => array(), "ambitoPatenteBase" => array( "patente" => array("numeroPatente" => $patente), ), "pdf" => false, "pdfAnteprimaPatente" => false ) )); if (!$this->handleMCTCError($obj)) { $this->emit('hideLoading', 'btTarga'); return; } $this->anag_firstname = @$obj->dettaglioPatenteBaseOutput->anagrafica->nome; $this->anag_lastname = @$obj->dettaglioPatenteBaseOutput->anagrafica->cognome; $this->anag_birth_date = @$obj->dettaglioPatenteBaseOutput->anagrafica->dataNascita; $this->anag_residenza_address = @$obj->dettaglioPatenteBaseOutput->datiResidenza->indirizzoResidenza; $this->anag_documento_scadenza_il = @$obj->dettaglioPatenteBaseOutput->datiPatente->dataScadenza; $this->anag_documento_rilasciato_il = @$obj->dettaglioPatenteBaseOutput->datiPatente->dataEmissione; } catch (\SoapFault $fault) { echo 'Request :
', $client->__getLastRequest(), '

Error Message :
', $fault->getMessage(); } } catch (\SoapFault $ex) { Log::error($ex->getMessage()); } $this->emit('hideLoading', 'btPatente'); } } protected function handleMCTCError($response) { if (isset($response->errore) && $response->errore->codiceErrore === '01') { Log::error("MCTC API Error: {$response->errore->descrizioneErrore}"); if (str_contains($response->errore->descrizioneErrore, 'Errore di validazione - string length')) { session()->flash('error', 'Errore di validazione numero di caratteri errato'); } else { session()->flash('error', $response->errore->descrizioneErrore); } return false; } return true; } public function print($id) { Log::info("Starting PDF generation for report ID: $id"); $record = \App\Models\Report::findOrFail($id); $parti_coinvolte = ReportDataPartiCoinvolte::where('report_id', $id)->get(); Log::info("Loaded report and parties involved. Found " . count($parti_coinvolte) . " parties."); $datiVeicolo = array(); $datiInfortunati = array(); $datiPasseggeri = array(); $datiPedoni = array(); $datiCascoOmologazione = array(); $datiCasco = array(); $datiCintureSicurezza = array(); foreach ($parti_coinvolte as $pr) { $datiVeicolo[$pr->progressive] = ReportDataVeicoli::where('progressive', $pr->progressive)->where('report_id', $id)->first(); $datiPedoni[$pr->progressive] = \App\Models\ReportDataPedoni::where('progressive', $pr->progressive)->where('report_id', $id)->get(); $datiInfortunati[$pr->progressive] = \App\Models\ReportDataInfortunati::where('progressive', $this->currentProgressive)->where('report_id', $id)->get(); $datiPasseggeri[$pr->progressive] = \App\Models\ReportDataPasseggeri::where('progressive', $this->currentProgressive)->where('report_id', $id)->get(); $datiCascoOmologazione[$pr->progressive] = \App\Models\ReportDataUsoDelCascoOmologazione::where('progressive', $this->currentProgressive)->where('report_id', $id)->get(); $datiCasco[$pr->progressive] = \App\Models\ReportDataUsoDelCasco::where('progressive', $this->currentProgressive)->where('report_id', $id)->get(); $datiCintureSicurezza[$pr->progressive] = \App\Models\ReportDataCintureSicurezza::where('progressive', $this->currentProgressive)->where('report_id', $id)->get(); } $testi_oculari = \App\Models\ReportDataTestimoniOculari::where('report_id', $id)->get(); $tipo_urto = \App\Models\ReportTipoUrto::where('report_id', $id)->get(); $tipo_segnalazione = \App\Models\ReportTipoSegnalazione::where('report_id', $id)->get(); $segnalazione_pervenuta_da = \App\Models\ReportSegnalazionePervenutaDa::where('report_id', $id)->get(); $ausilio_altri_enti = \App\Models\ReportAusilioAltriEnti::where('report_id', $id)->get(); $materiale_recuperato = \App\Models\ReportMaterialeRecuperato::where('report_id', $id)->get(); $condizioni_luce = \App\Models\ReportCondizioniLuce::where('report_id', $id)->get(); $tipo_strada = \App\Models\ReportTipoStrada::where('report_id', $id)->get(); $segnaletica_verticale_1 = \App\Models\ReportSegnaleticaVerticale1::where('report_id', $id)->get(); $segnaletica_verticale_2 = \App\Models\ReportSegnaleticaVerticale2::where('report_id', $id)->get(); $segnaletica_verticale_3 = \App\Models\ReportSegnaleticaVerticale3::where('report_id', $id)->get(); $segnaletica_verticale_4 = \App\Models\ReportSegnaleticaVerticale4::where('report_id', $id)->get(); $segnaletica_orizzontale_1 = \App\Models\ReportSegnaleticaOrizzontale1::where('report_id', $id)->get(); $segnaletica_orizzontale_2 = \App\Models\ReportSegnaleticaOrizzontale2::where('report_id', $id)->get(); $segnaletica_orizzontale_3 = \App\Models\ReportSegnaleticaOrizzontale3::where('report_id', $id)->get(); $segnaletica_orizzontale_4 = \App\Models\ReportSegnaleticaOrizzontale4::where('report_id', $id)->get(); $allegati = \App\Models\ReportAllegatiGallery::where('report_id', $id)->get(); Log::info("Loaded all report data. Found " . count($allegati) . " attachments."); $data = array( 'record' => $record, 'parti_coinvolte' => $parti_coinvolte, 'tipo_urto' => $tipo_urto, 'tipo_segnalazione' => $tipo_segnalazione, 'segnalazione_pervenuta_da' => $segnalazione_pervenuta_da, 'ausilio_altri_enti' => $ausilio_altri_enti, 'materiale_recuperato' => $materiale_recuperato, 'condizioni_luce' => $condizioni_luce, 'tipo_strada' => $tipo_strada, 'segnaletica_orizzontale_1' => $segnaletica_orizzontale_1, 'segnaletica_orizzontale_2' => $segnaletica_orizzontale_2, 'segnaletica_orizzontale_3' => $segnaletica_orizzontale_3, 'segnaletica_orizzontale_4' => $segnaletica_orizzontale_4, 'segnaletica_verticale_1' => $segnaletica_verticale_1, 'segnaletica_verticale_2' => $segnaletica_verticale_2, 'segnaletica_verticale_3' => $segnaletica_verticale_3, 'segnaletica_verticale_4' => $segnaletica_verticale_4, 'datiPedoni' => $datiPedoni, 'datiVeicolo' => $datiVeicolo, 'datiInfortunati' => $datiInfortunati, 'datiPasseggeri' => $datiPasseggeri, 'datiCascoOmologazione' => $datiCascoOmologazione, 'datiCasco' => $datiCasco, 'datiCintureSicurezza' => $datiCintureSicurezza, 'testi_oculari' => $testi_oculari, 'allegati' => $allegati ); $hasPdfAttachments = false; $pdfAttachments = []; $totalAttachmentPages = 0; foreach ($allegati as $allegato) { if ($allegato->is_visible && $allegato->files) { $files = explode('|', $allegato->files); foreach ($files as $file) { if (strtolower(pathinfo($file, PATHINFO_EXTENSION)) === 'pdf') { $attachmentPath = public_path('storage/' . $file); if (file_exists($attachmentPath)) { $attachmentPageCount = $this->countPdfPages($attachmentPath); Log::info("Attachment {$file} has {$attachmentPageCount} pages"); $pdfAttachments[] = $attachmentPath; $totalAttachmentPages += $attachmentPageCount; $hasPdfAttachments = true; } } } } } Log::info("Total attachment pages: {$totalAttachmentPages}"); $data['total_pages'] = 0; $initialPdf = Pdf::loadView('pdf.verbale', array('data' => $data)); $initialPdf->render(); $mainPageCount = $initialPdf->getDomPDF()->getCanvas()->get_page_count(); Log::info("Main PDF has {$mainPageCount} pages"); $totalPages = $mainPageCount + $totalAttachmentPages; Log::info("Total pages breakdown: Main={$mainPageCount}, Attachments={$totalAttachmentPages}"); Log::info("Total pages (main + attachments): {$totalPages}"); $data['total_pages'] = $totalPages; $pdf = Pdf::loadView('pdf.verbale', array('data' => $data)); $pdfName = "verbale_" . $record->protocollo_num . '_' . $record->protocollo_anno . ".pdf"; if ($hasPdfAttachments) { try { Log::info("Starting PDF merge using GhostScript with " . count($pdfAttachments) . " attachments"); $tempDir = storage_path('app/temp'); if (!file_exists($tempDir)) { mkdir($tempDir, 0755, true); } $tempMainPdf = $tempDir . '/verbale_' . uniqid() . '.pdf'; file_put_contents($tempMainPdf, $pdf->output()); $pdfFiles = [$tempMainPdf]; foreach ($pdfAttachments as $attachmentPath) { if (file_exists($attachmentPath)) { $pdfFiles[] = $attachmentPath; } else { Log::warning("Attachment file not found: $attachmentPath"); } } $outputPath = $tempDir . '/verbale_merged_' . uniqid() . '.pdf'; $success = $this->mergeWithGhostScript($pdfFiles, $outputPath); if ($success) { $finalPageCount = $this->countPdfPages($outputPath); Log::info("Final merged PDF has {$finalPageCount} pages (expected around: {$totalPages})"); Log::info("PDF merge successful, returning merged file"); $pdfContent = file_get_contents($outputPath); @unlink($tempMainPdf); @unlink($outputPath); return response($pdfContent) ->header('Content-Type', 'application/pdf') ->header('Content-Disposition', 'inline; filename="' . $pdfName . '"'); } else { Log::warning("PDF merge failed, falling back to main PDF only"); @unlink($tempMainPdf); return $pdf->stream($pdfName); } } catch (\Exception $e) { Log::error("PDF merging failed: " . $e->getMessage()); return $pdf->stream($pdfName); } } else { return $pdf->stream($pdfName); } } private function mergeWithGhostScript($pdfFiles, $outputPath) { try { exec('which gs', $output, $returnVar); if ($returnVar !== 0) { Log::error("GhostScript (gs) not found on system"); return false; } $fileList = implode(' ', array_map('escapeshellarg', $pdfFiles)); $outputFile = escapeshellarg($outputPath); $command = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$outputFile $fileList"; exec($command, $output, $returnVar); if ($returnVar !== 0) { Log::error("GhostScript command failed: " . implode("\n", $output)); return false; } return file_exists($outputPath); } catch (\Exception $e) { Log::error("GhostScript merge failed: " . $e->getMessage()); return false; } } private function countPdfPages($pdfPath) { try { $cmd = "gs -q -dNODISPLAY -c \"({$pdfPath}) (r) file runpdfbegin pdfpagecount = quit\""; exec($cmd, $output, $returnVar); if ($returnVar === 0 && !empty($output) && is_numeric($output[0])) { return (int)$output[0]; } $content = file_get_contents($pdfPath); $pageCount = preg_match_all("/\/Page\W/", $content, $matches); if ($pageCount > 0) { return $pageCount; } Log::warning("Could not determine page count for PDF: {$pdfPath}. Assuming 1 page."); return 1; } catch (\Exception $e) { Log::error("Error counting PDF pages: " . $e->getMessage()); return 1; } } public function updated($property, $value) { if ($property === 'verificatosi_in_data' && !preg_match('/^\d{4}-\d{2}-\d{2}$/', $value)) { $this->verificatosi_in_data = null; $this->addError('verificatosi_in_data', 'Il campo Verificatosi in data deve essere nel formato corretto.'); } } }