netgescon-day0/app/Http/Controllers/Condomino/UnitaController.php

89 lines
2.8 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers\Condomino;
use App\Http\Controllers\Condomino\Concerns\ResolvesCondominoAccess;
use App\Http\Controllers\Controller;
use App\Models\RichiestaModifica;
use App\Models\UnitaImmobiliare;
use App\Models\UnitaRecapitoServizio;
use App\Services\Comunicazioni\RecapitiServizioResolver;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class UnitaController extends Controller
{
use ResolvesCondominoAccess;
public function index()
{
$user = Auth::user();
$unitaImmobiliari = $this->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.');
}
}