'required|string|max:255', 'email' => 'required|email|max:255', 'pec' => 'required|email|max:255', 'cellulare' => 'required|string|max:20', ]; public function resetFields() { $this->ragione_sociale = null; $this->nome_associazione = null; $this->tipologia = null; $this->discipline = null; $this->temp_logo = null; $this->sede_legale_nazione = null; $this->sede_legale_provincia = null; $this->sede_legale_comune = null; $this->sede_legale_indirizzo = null; $this->sede_legale_cap = null; $this->same_address = false; $this->sede_operativa_nazione = null; $this->sede_operativa_provincia = null; $this->sede_operativa_comune = null; $this->sede_operativa_indirizzo = null; $this->sede_operativa_cap = null; $this->email = null; $this->pec = null; $this->telefono = null; $this->cellulare = null; $this->partita_iva = null; $this->codice_fiscale = null; $this->codice_sdi = null; } public function mount() { $this->azienda = AziendaModel::first(); if ($this->azienda) { $this->ragione_sociale = $this->azienda->ragione_sociale; $this->nome_associazione = $this->azienda->nome_associazione; $this->tipologia = $this->azienda->tipologia; $this->discipline = $this->azienda->discipline; $this->logo = $this->azienda->logo; $this->sede_legale_nazione = $this->azienda->sede_legale_nazione; $this->sede_legale_provincia = $this->azienda->sede_legale_provincia; $this->sede_legale_comune = $this->azienda->sede_legale_comune; $this->sede_legale_indirizzo = $this->azienda->sede_legale_indirizzo; $this->sede_legale_cap = $this->azienda->sede_legale_cap; $this->sede_operativa_nazione = $this->azienda->sede_operativa_nazione; $this->sede_operativa_provincia = $this->azienda->sede_operativa_provincia; $this->sede_operativa_comune = $this->azienda->sede_operativa_comune; $this->sede_operativa_indirizzo = $this->azienda->sede_operativa_indirizzo; $this->sede_operativa_cap = $this->azienda->sede_operativa_cap; $this->email = $this->azienda->email; $this->pec = $this->azienda->pec; $this->telefono = $this->azienda->telefono; $this->cellulare = $this->azienda->cellulare; $this->partita_iva = $this->azienda->partita_iva; $this->codice_fiscale = $this->azienda->codice_fiscale; $this->codice_sdi = $this->azienda->codice_sdi; if ( $this->sede_legale_nazione == $this->sede_operativa_nazione && $this->sede_legale_provincia == $this->sede_operativa_provincia && $this->sede_legale_comune == $this->sede_operativa_comune && $this->sede_legale_indirizzo == $this->sede_operativa_indirizzo && $this->sede_legale_cap == $this->sede_operativa_cap ) { $this->same_address = true; } Log::info('Azienda disciplines: ' . json_encode($this->azienda->discipline)); if ($this->azienda && $this->azienda->discipline) { $this->selectedDisciplines = array_map('trim', array: explode(';', $this->azienda->discipline)); } } else { $this->update = true; $this->resetFields(); } $this->loadDisciplines(); } public function render() { return view('livewire.azienda'); } public function updatedSameAddress() { if ($this->same_address) { $this->sede_operativa_nazione = $this->sede_legale_nazione; $this->sede_operativa_provincia = $this->sede_legale_provincia; $this->sede_operativa_comune = $this->sede_legale_comune; $this->sede_operativa_indirizzo = $this->sede_legale_indirizzo; $this->sede_operativa_cap = $this->sede_legale_cap; } else { $this->sede_operativa_nazione = null; $this->sede_operativa_provincia = null; $this->sede_operativa_comune = null; $this->sede_operativa_indirizzo = null; $this->sede_operativa_cap = null; } } public function updatedSedeOperativaNazione() { $this->checkAddressDifference(); } public function updatedSedeOperativaProvincia() { $this->checkAddressDifference(); } public function updatedSedeOperativaComune() { $this->checkAddressDifference(); } public function updatedSedeOperativaIndirizzo() { $this->checkAddressDifference(); } public function updatedSedeOperativaCap() { $this->checkAddressDifference(); } public function checkAddressDifference() { if ( $this->sede_legale_nazione == $this->sede_operativa_nazione && $this->sede_legale_provincia == $this->sede_operativa_provincia && $this->sede_legale_comune == $this->sede_operativa_comune && $this->sede_legale_indirizzo == $this->sede_operativa_indirizzo && $this->sede_legale_cap == $this->sede_operativa_cap ) { $this->same_address = true; } else { $this->same_address = false; } } public function setTab($tab) { $this->activeTab = $tab; } public function edit() { $this->update = true; } public function save() { $this->validate(); Log::info('Saving discipline: ' . json_encode(implode('; ', $this->selectedDisciplines))); try { $data = [ 'ragione_sociale' => $this->ragione_sociale, 'nome_associazione' => $this->nome_associazione, 'tipologia' => $this->tipologia, 'discipline' => implode('; ', $this->selectedDisciplines), 'sede_legale_nazione' => $this->sede_legale_nazione, 'sede_legale_provincia' => $this->sede_legale_provincia, 'sede_legale_comune' => $this->sede_legale_comune, 'sede_legale_indirizzo' => $this->sede_legale_indirizzo, 'sede_legale_cap' => $this->sede_legale_cap, 'sede_operativa_nazione' => $this->sede_operativa_nazione, 'sede_operativa_provincia' => $this->sede_operativa_provincia, 'sede_operativa_comune' => $this->sede_operativa_comune, 'sede_operativa_indirizzo' => $this->sede_operativa_indirizzo, 'sede_operativa_cap' => $this->sede_operativa_cap, 'same_address' => $this->same_address, 'email' => $this->email, 'pec' => $this->pec, 'telefono' => $this->telefono, 'cellulare' => $this->cellulare, 'partita_iva' => $this->partita_iva, 'codice_fiscale' => $this->codice_fiscale, 'codice_sdi' => $this->codice_sdi, ]; // Create or update azienda first if ($this->azienda) { $this->azienda->update($data); } else { $this->azienda = AziendaModel::create($data); } // Handle logo upload using the service if ($this->temp_logo) { try { Log::info('Starting logo upload with service'); $logoService = app(LogoUploadServices::class); $logoPath = $logoService->uploadLogo($this->temp_logo, $this->azienda); Log::info('Logo uploaded successfully to: ' . $logoPath); // Reset temp logo after successful upload $this->temp_logo = null; } catch (\Exception $e) { Log::error('Error uploading logo via service: ' . $e->getMessage()); session()->flash('error', 'Errore durante il caricamento del logo: ' . $e->getMessage()); return; } } session()->flash('message', $this->azienda->wasRecentlyCreated ? 'Dati aziendali creati con successo!' : 'Dati aziendali aggiornati con successo!' ); $this->update = false; } catch (\Exception $ex) { Log::error('Error in save method: ' . $ex->getMessage()); session()->flash('error', 'Errore: ' . $ex->getMessage()); } } public function getSelectedDisciplineNamesProperty() { if (empty($this->selectedDisciplines)) { return []; } Log::info('Selected disciplines: ' . json_encode($this->selectedDisciplines)); return \App\Models\Discipline::whereIn('id', $this->selectedDisciplines) ->pluck('name') ->toArray(); } public function cancel() { $this->resetFields(); $this->mount(); $this->update = false; } public function loadDisciplines() { $this->discipline = \App\Models\Discipline::select('id', 'name')->get(); } public function addDiscipline() { if (!empty($this->disciplineId)) { $discipline = \App\Models\Discipline::find($this->disciplineId); if ($discipline && !in_array($discipline->name, $this->selectedDisciplines)) { $this->selectedDisciplines[] = $discipline->name; $this->disciplineId = ''; } } } public function removeDiscipline($index) { if (isset($this->selectedDisciplines[$index])) { unset($this->selectedDisciplines[$index]); $this->selectedDisciplines = array_values($this->selectedDisciplines); } } public function updatedSearch() { $this->loadDisciplines(); } public function removeLogo() { if ($this->azienda) { try { $logoService = app(LogoUploadServices::class); if ($logoService->deleteLogo($this->azienda)) { $this->logo = null; session()->flash('message', 'Logo rimosso con successo!'); Log::info('Logo removed successfully for azienda: ' . $this->azienda->id); } else { session()->flash('error', 'Nessun logo da rimuovere.'); } } catch (\Exception $e) { Log::error('Error removing logo: ' . $e->getMessage()); session()->flash('error', 'Errore durante la rimozione del logo: ' . $e->getMessage()); } } } /** * Get logo URL for display */ public function getLogoUrlProperty() { if ($this->azienda && $this->azienda->logo) { $logoService = app(LogoUploadServices::class); return $logoService->getLogoUrl($this->azienda); } return null; } /** * Check if logo exists */ public function getHasLogoProperty() { if ($this->azienda) { $logoService = app(LogoUploadServices::class); return $logoService->logoExists($this->azienda); } return false; } }