netgescon-master/app/Http/Controllers/Admin/UnitaImmobiliariController.php

133 lines
4.2 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\UnitaImmobiliare;
use App\Models\Stabile;
use App\Models\Palazzina;
use Illuminate\Http\Request;
class UnitaImmobiliariController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$unita = UnitaImmobiliare::with(['stabile', 'palazzina'])
->paginate(20);
return view('admin.unita-immobiliari.index', compact('unita'));
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
$stabili = Stabile::all();
$palazzine = Palazzina::all();
return view('admin.unita-immobiliari.create', compact('stabili', 'palazzine'));
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$validated = $request->validate([
'stabile_id' => 'required|exists:stabili,id',
'palazzina_id' => 'nullable|exists:palazzine,id',
'codice_unita' => 'required|string|max:50',
'palazzina' => 'required|string|max:10',
'scala' => 'required|string|max:10',
'piano' => 'required|string|max:10',
'interno' => 'required|string|max:10',
'tipo_unita' => 'required|string',
'superficie_commerciale' => 'nullable|numeric|min:0',
'millesimi_proprieta' => 'nullable|numeric|min:0|max:1000',
]);
UnitaImmobiliare::create($validated);
return redirect()->route('admin.unita-immobiliari.index')
->with('success', 'Unità immobiliare creata con successo.');
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
$unita = UnitaImmobiliare::with(['stabile', 'palazzinaObj'])->findOrFail($id);
// Calcola statistiche per l'unità
$statistiche = [
'superficie_totale' => $unita->superficie_commerciale + ($unita->superficie_accessori ?? 0),
'rapporto_millesimi' => $unita->millesimi_proprieta ? round(($unita->millesimi_proprieta / 1000) * 100, 2) : 0,
'valore_stimato' => $unita->valore_commerciale_stimato ?? 0,
];
// Trova unità vicine
$unita_vicine = [
'sovrastante' => $unita->getUnitaSovrastante(),
'sottostante' => $unita->getUnitaSottostante(),
'laterali' => $unita->getUnitaLaterali(),
];
return view('admin.unita-immobiliari.show', compact('unita', 'statistiche', 'unita_vicine'));
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
$unita = UnitaImmobiliare::findOrFail($id);
$stabili = Stabile::all();
$palazzine = Palazzina::all();
return view('admin.unita-immobiliari.edit', compact('unita', 'stabili', 'palazzine'));
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
$unita = UnitaImmobiliare::findOrFail($id);
$validated = $request->validate([
'stabile_id' => 'required|exists:stabili,id',
'palazzina_id' => 'nullable|exists:palazzine,id',
'codice_unita' => 'required|string|max:50',
'palazzina' => 'required|string|max:10',
'scala' => 'required|string|max:10',
'piano' => 'required|string|max:10',
'interno' => 'required|string|max:10',
'tipo_unita' => 'required|string',
'superficie_commerciale' => 'nullable|numeric|min:0',
'millesimi_proprieta' => 'nullable|numeric|min:0|max:1000',
]);
$unita->update($validated);
return redirect()->route('admin.unita-immobiliari.show', $unita)
->with('success', 'Unità immobiliare aggiornata con successo.');
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
$unita = UnitaImmobiliare::findOrFail($id);
$unita->delete();
return redirect()->route('admin.unita-immobiliari.index')
->with('success', 'Unità immobiliare eliminata con successo.');
}
}