133 lines
4.2 KiB
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.');
|
|
}
|
|
}
|