resolveUserUnita($user); return view('condomino.unita.index', compact('unitaImmobiliari')); } public function show(UnitaImmobiliare $unitaImmobiliare) { $user = Auth::user(); // Verifica accesso $hasAccess = $this->resolveUserUnita($user) ->pluck('id') ->contains((int) $unitaImmobiliare->id); if (! $hasAccess) { abort(403); } $unitaImmobiliare->load(['stabile', 'soggetti', 'relazioniPersoneAttive.persona.emailMultiple', 'unitaRecapitiServizio']); $serviceLabels = UnitaRecapitoServizio::serviceLabels(); $serviceRecipients = []; $resolver = app(RecapitiServizioResolver::class); foreach (array_keys($serviceLabels) as $serviceType) { $serviceRecipients[$serviceType] = $resolver->resolveForUnita($unitaImmobiliare, $serviceType); } return view('condomino.unita.show', compact('unitaImmobiliare', 'serviceLabels', 'serviceRecipients')); } public function richiestaModifica(Request $request, UnitaImmobiliare $unitaImmobiliare) { $user = Auth::user(); // Verifica accesso $hasAccess = $this->resolveUserUnita($user) ->pluck('id') ->contains((int) $unitaImmobiliare->id); if (! $hasAccess) { abort(403); } $soggettoId = $this->resolveSoggettoId($user); if (! $soggettoId) { abort(403); } $request->validate([ 'tipo_modifica' => 'required|in:anagrafica,catastale,proprieta,catastale_servizio', 'descrizione' => 'required|string', 'dati_proposti' => 'required|array', ]); RichiestaModifica::create([ 'unita_immobiliare_id' => $unitaImmobiliare->id, 'soggetto_richiedente_id' => $soggettoId, 'tipo_modifica' => $request->tipo_modifica, 'descrizione' => $request->descrizione, 'dati_attuali' => $unitaImmobiliare->toArray(), 'dati_proposti' => $request->dati_proposti, 'stato' => 'in_attesa', ]); return back()->with('success', 'Richiesta di modifica inviata con successo.'); } }