Aggiunto classe immobili

This commit is contained in:
Amministratore 2025-10-03 10:18:41 +02:00
parent 71d75ef464
commit 5dbe0a2c85
9 changed files with 432 additions and 5 deletions

View File

@ -0,0 +1,117 @@
<?php
namespace App\Http\Controllers;
use App\Models\Immobili;
use Illuminate\Http\Request;
class ImmobiliController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
//
return view('affitti.immobili.index',[
'immobili' => Immobili::all()
]);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
return view('affitti.immobili.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
$data = $request->validate([
'indirizzo' => 'nullable|string|max:255',
'citta' => 'nullable|string|max:255',
'cap' => 'nullable|string|max:20',
'provincia' => 'nullable|string|max:255',
'nazione' => 'nullable|string|max:255',
'descrizione' => 'nullable|string|max:1000',
'categoria' => 'nullable|string|max:255',
'tipologia' => 'nullable|string|max:255',
'stato' => 'nullable|string|max:255',
'classe_energetica' => 'nullable|string|max:50',
'superficie' => 'nullable|string|max:50',
'vani' => 'nullable|string|max:50',
'bagni' => 'nullable|string|max:50',
'camere' => 'nullable|string|max:50',
'piano' => 'nullable|string|max:50',
'ascensore' => 'nullable|string|max:50',
'riscaldamento' => 'nullable|string|max:50',
'condizionatore' => 'nullable|string|max:50',
'giardino' => 'nullable|string|max:50',
'posto_auto' => 'nullable|string|max:50',
'garage' => 'nullable|string|max:50',
'balcone' => 'nullable|string|max:50',
'terrazzo' => 'nullable|string|max:50',
'cantina' => 'nullable|string|max:50',
'arredamento' => 'nullable|string|max:50',
'spese_condominiali' => 'nullable|string|max:100',
'anno_costruzione' => 'nullable|string|max:4',
'prezzo' => 'nullable|string|max:100',
'disponibilita' => 'nullable|string|max:255',
'note' => 'nullable|string|max:2000',
'fibra-ottica' => 'nullable|string|max:50',
'internet' => 'nullable|string|max:50',
]);
Immobili::create($data);
return redirect()->route('immobili')->with('success', 'Immobile creato con successo.');
}
/**
* Display the specified resource.
*/
public function show(Immobili $immobili)
{
//
$immobile=Immobili::find($immobili->id);
return view('affitti.immobili.show',compact('immobile'));
}
/**
* Show the form for editing the specified resource.
*/
public function edit(Immobili $immobili)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, Immobili $immobili)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Immobili $immobili)
{
//
$immobile=Immobili::find($immobili->id);
$immobile->delete();
return redirect()->route('immobili')->with('success', 'Immobile eliminato con successo.');
}
public function associaContratto(Immobili $immobili)
{
$immobile=Immobili::find($immobili);
return view('affitti.immobili.assegna-contratto',[compact('immobile'),'id'=>$immobili]);
}
}

45
app/Models/Immobili.php Normal file
View File

@ -0,0 +1,45 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Immobili extends Model
{
//
protected $table = 'immobilis';
protected $fillable = [
'indirizzo',
'citta',
'cap',
'provincia',
'nazione',
'descrizione',
'categoria',
'tipologia',
'stato',
'classe_energetica',
'superficie',
'vani',
'bagni',
'camere',
'piano',
'ascensore',
'riscaldamento',
'condizionatore',
'giardino',
'posto_auto',
'garage',
'balcone',
'terrazzo',
'cantina',
'arredamento',
'spese_condominiali',
'anno_costruzione',
'prezzo',
'disponibilita',
'note',
'fibra-ottica',
'internet',
];
}

View File

@ -428,7 +428,42 @@ return [
'icon' => 'fas fa-fw fa-car', 'icon' => 'fas fa-fw fa-car',
'can' => ['automobili'], 'can' => ['automobili'],
], ],
[ 'text' => 'Affitti',
'url' => '#',
'icon' => 'fas fa-fw fa-home',
'submenu' => [
[
'text' => 'Immobili',
'url' => 'admin/affitti/immobili',
'icon' => 'fas fa-fw fa-wine-bottle',
'can' => ['affitti'],
],
[
'text' => 'Contratti di locazione',
'url' => 'admin/affitti/locazioni',
'icon' => 'fas fa-fw fa-tags',
'can' => ['affitti'],
],
[
'text' => 'Scadenze',
'url' => 'admin/affitti/scadenze',
'icon' => 'fas fa-fw fa-wallet',
'can' => ['affitti'],
],
[
'text' => 'Spese condominiali',
'url' => 'admin/affitti/spese',
'icon' => 'fas fa-fw fa-tags',
'can' => ['affitti'],
],
[
'text' => 'Ripartizione spese',
'url' => 'admin/affitti/ripartizioni',
'icon' => 'fas fa-fw fa-wallet',
'can' => ['affitti'],
],
],
],
['header' => 'GESTIONE PIM', ['header' => 'GESTIONE PIM',
'can' => ['contatti','tasks','appuntamenti','meetingroom'], 'can' => ['contatti','tasks','appuntamenti','meetingroom'],
], ],

View File

@ -0,0 +1,59 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('immobilis', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('indirizzo')->nullable();
$table->string('citta')->nullable();
$table->string('cap')->nullable();
$table->string('provincia')->nullable();
$table->string('nazione')->nullable();
$table->string('descrizione')->nullable();
$table->string('categoria')->nullable();
$table->string('tipologia')->nullable();
$table->string('stato')->nullable();
$table->string('classe_energetica')->nullable();
$table->string('superficie')->nullable();
$table->string('vani')->nullable();
$table->string('bagni')->nullable();
$table->string('camere')->nullable();
$table->string('piano')->nullable();
$table->string('ascensore')->nullable();
$table->string('riscaldamento')->nullable();
$table->string('condizionatore')->nullable();
$table->string('giardino')->nullable();
$table->string('posto_auto')->nullable();
$table->string('garage')->nullable();
$table->string('balcone')->nullable();
$table->string('terrazzo')->nullable();
$table->string('cantina')->nullable();
$table->string('arredamento')->nullable();
$table->string('spese_condominiali')->nullable();
$table->string('anno_costruzione')->nullable();
$table->string('prezzo')->nullable();
$table->string('disponibilita')->nullable();
$table->string('note')->nullable();
$table->string('fibra-ottica')->nullable();
$table->string('internet')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('immobilis');
}
};

View File

@ -0,0 +1,25 @@
@extends('adminlte::page')
@section('title', 'Assegna Contratto')
@section('content_header')
<h1>Assegna Contratto</h1>
@stop
@section('content')
<div class="container">
<h1>Assegna Contratto all'Immobile</h1>
<form action="{{ route('immobili.assegnaContratto', $id) }}" method="POST">
@csrf
<div class="mb-3">
<label for="contratto_id" class="form-label">Seleziona Contratto</label>
<select name="contratto_id" id="contratto_id" class="form-select" required>
<option value="">-- Seleziona --</option>
@foreach($contratti as $contratto)
<option value="{{ $contratto->id }}">{{ $contratto->nome }}</option>
@endforeach
</select>
</div>
<button type="submit" class="btn btn-primary">Assegna Contratto</button>
</form>
</div>
@endsection

View File

@ -0,0 +1,45 @@
@extends('adminlte::page')
@section('title', 'Crea Immobile')
@section('content_header')
<h1>Crea Nuovo Immobile</h1>
@stop
@section('content')
<form method="POST" action="{{ route('immobili.store') }}">
@csrf
<div class="form-group"><label for="indirizzo">Indirizzo</label><input type="text" name="indirizzo" id="indirizzo" class="form-control"></div>
<div class="form-group"><label for="citta">Città</label><input type="text" name="citta" id="citta" class="form-control"></div>
<div class="form-group"><label for="cap">CAP</label><input type="text" name="cap" id="cap" class="form-control"></div>
<div class="form-group"><label for="provincia">Provincia</label><input type="text" name="provincia" id="provincia" class="form-control"></div>
<div class="form-group"><label for="nazione">Nazione</label><input type="text" name="nazione" id="nazione" class="form-control"></div>
<div class="form-group"><label for="descrizione">Descrizione</label><input type="text" name="descrizione" id="descrizione" class="form-control"></div>
<div class="form-group"><label for="categoria">Categoria</label><input type="text" name="categoria" id="categoria" class="form-control"></div>
<div class="form-group"><label for="tipologia">Tipologia</label><input type="text" name="tipologia" id="tipologia" class="form-control"></div>
<div class="form-group"><label for="stato">Stato</label><input type="text" name="stato" id="stato" class="form-control"></div>
<div class="form-group"><label for="classe_energetica">Classe Energetica</label><input type="text" name="classe_energetica" id="classe_energetica" class="form-control"></div>
<div class="form-group"><label for="superficie">Superficie</label><input type="text" name="superficie" id="superficie" class="form-control"></div>
<div class="form-group"><label for="vani">Vani</label><input type="text" name="vani" id="vani" class="form-control"></div>
<div class="form-group"><label for="bagni">Bagni</label><input type="text" name="bagni" id="bagni" class="form-control"></div>
<div class="form-group"><label for="camere">Camere</label><input type="text" name="camere" id="camere" class="form-control"></div>
<div class="form-group"><label for="piano">Piano</label><input type="text" name="piano" id="piano" class="form-control"></div>
<div class="form-group"><label for="ascensore">Ascensore</label><input type="text" name="ascensore" id="ascensore" class="form-control"></div>
<div class="form-group"><label for="riscaldamento">Riscaldamento</label><input type="text" name="riscaldamento" id="riscaldamento" class="form-control"></div>
<div class="form-group"><label for="condizionatore">Condizionatore</label><input type="text" name="condizionatore" id="condizionatore" class="form-control"></div>
<div class="form-group"><label for="giardino">Giardino</label><input type="text" name="giardino" id="giardino" class="form-control"></div>
<div class="form-group"><label for="posto_auto">Posto Auto</label><input type="text" name="posto_auto" id="posto_auto" class="form-control"></div>
<div class="form-group"><label for="garage">Garage</label><input type="text" name="garage" id="garage" class="form-control"></div>
<div class="form-group"><label for="balcone">Balcone</label><input type="text" name="balcone" id="balcone" class="form-control"></div>
<div class="form-group"><label for="terrazzo">Terrazzo</label><input type="text" name="terrazzo" id="terrazzo" class="form-control"></div>
<div class="form-group"><label for="cantina">Cantina</label><input type="text" name="cantina" id="cantina" class="form-control"></div>
<div class="form-group"><label for="arredamento">Arredamento</label><input type="text" name="arredamento" id="arredamento" class="form-control"></div>
<div class="form-group"><label for="spese_condominiali">Spese Condominiali</label><input type="text" name="spese_condominiali" id="spese_condominiali" class="form-control"></div>
<div class="form-group"><label for="anno_costruzione">Anno Costruzione</label><input type="text" name="anno_costruzione" id="anno_costruzione" class="form-control"></div>
<div class="form-group"><label for="prezzo">Prezzo</label><input type="text" name="prezzo" id="prezzo" class="form-control"></div>
<div class="form-group"><label for="disponibilita">Disponibilità</label><input type="text" name="disponibilita" id="disponibilita" class="form-control"></div>
<div class="form-group"><label for="note">Note</label><input type="text" name="note" id="note" class="form-control"></div>
<div class="form-group"><label for="fibra-ottica">Fibra Ottica</label><input type="text" name="fibra-ottica" id="fibra-ottica" class="form-control"></div>
<div class="form-group"><label for="internet">Internet</label><input type="text" name="internet" id="internet" class="form-control"></div>
<button type="submit" class="btn btn-primary">Salva</button>
</form>
@stop

View File

@ -0,0 +1,44 @@
@extends('adminlte::page')
@section('title', 'Immobili')
@section('content_header')
<h1>Immobili</h1>
@stop
@section('content')
<p>Elenco immobili</p>
<a href="{{ route('immobili.create') }}" class="btn btn-primary mb-3">Nuovo Immobile</a>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>ID</th>
<th>Indirizzo</th>
<th>Città</th>
<th>Stato</th>
<th>Azioni</th>
</tr>
</thead>
<tbody>
@foreach($immobili as $immobile)
<tr>
<td>{{ $immobile->id }}</td>
<td>{{ $immobile->indirizzo }}</td>
<td>{{ $immobile->citta }}</td>
<td>{{ $immobile->stato }}</td>
<td>
<a href="{{ route('immobili.show', $immobile->id) }}" class="btn btn-info btn-sm">Visualizza</a>
<a href="{{ route('immobili.edit', $immobile->id) }}" class="btn btn-warning btn-sm">Modifica</a>
<form action="{{ route('immobili.destroy', $immobile->id) }}" method="POST" style="display:inline;">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('Sei sicuro di voler eliminare questo immobile?')">Elimina</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
@stop

View File

@ -0,0 +1,39 @@
@extends('adminlte::page')
@section('title', 'Dettagli Immobile')
@section('content_header')
<h1>Dettagli Immobile</h1>
@stop
@section('content')
<div class="container">
<!-- Navbar superiore -->
<nav class="navbar navbar-expand-lg navbar-light bg-light mb-4">
<div class="container-fluid">
<span class="navbar-brand">Gestione Immobile</span>
<div class="collapse navbar-collapse">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="{{ route('affitti_contratti.associa',$immobile->id) }}">Associa Contratto</a>
</li>
<!-- Aggiungi altri collegamenti qui -->
</ul>
</div>
</div>
</nav>
<!-- Informazioni Immobile -->
<div class="card">
<div class="card-header">
<h4>Informazioni Immobile</h4>
</div>
<div class="card-body">
<p><strong>Indirizzo:</strong> {{ $immobile->indirizzo }}</p>
<p><strong>Tipologia:</strong> {{ $immobile->tipologia }}</p>
<p><strong>Superficie:</strong> {{ $immobile->superficie }} </p>
<!-- Aggiungi altre informazioni rilevanti -->
</div>
</div>
</div>
@endsection

View File

@ -59,10 +59,7 @@ Route::middleware([
'web', 'web',
'auth', 'auth',
])->group(function () { ])->group(function () {
/*Route::get('admin', function () {
dd(\App\Models\User::all());
return 'This is your multi-tenant application. The id of the current tenant is ' . tenant('id');
});*/
Route::get('admin/', [MovimentiController::class,'dashboard']); Route::get('admin/', [MovimentiController::class,'dashboard']);
Route::get('changepassword',function(){return view('auth.change-password');})->name('changePassword'); Route::get('changepassword',function(){return view('auth.change-password');})->name('changePassword');
Route::post('changepassword', [Utenti::class,'changePassword']); Route::post('changepassword', [Utenti::class,'changePassword']);
@ -252,7 +249,28 @@ Route::middleware([
Route::get('admin/meeting', function() { return view('meetings.meeting'); })->name('meeting'); Route::get('admin/meeting', function() { return view('meetings.meeting'); })->name('meeting');
}); });
// AFFITTI
Route::group(['middleware'=>['permission:affitti']], function(){
Route::get('admin/affitti/immobili', [App\Http\Controllers\ImmobiliController::class,'index'])->name('immobili');
Route::get('admin/affitti/immobili/create', [App\Http\Controllers\ImmobiliController::class,'create'])->name('immobili.create');
Route::post('admin/affitti/immobili', [App\Http\Controllers\ImmobiliController::class,'store'])->name('immobili.store');
Route::get('admin/affitti/immobili/{immobili}', [App\Http\Controllers\ImmobiliController::class,'show'])->name('immobili.show');
Route::get('admin/affitti/immobili/{immobili}/edit', [App\Http\Controllers\ImmobiliController::class,'edit'])->name('immobili.edit');
Route::put('admin/affitti/immobili/{immobili}', [App\Http\Controllers\ImmobiliController::class,'update'])->name('immobili.update');
Route::delete('admin/affitti/immobili/{immobili}', [App\Http\Controllers\ImmobiliController::class,'destroy'])->name('immobili.destroy');
//navbar
Route::get('admin/affitti/associaContratto', [App\Http\Controllers\ImmobiliController::class,'associaContratto'])->name('affitti_contratti.associa');
// Cotratti
Route::get('admin/affitti/contratti', [App\Http\Controllers\ContrattiAffittiController::class,'index'])->name('contratti_affitti');
Route::get('admin/affitti/contratti/create', [App\Http\Controllers\ContrattiAffittiController::class,'create'])->name('contratti_affitti.create');
Route::post('admin/affitti/contratti', [App\Http\Controllers\ContrattiAffittiController::class,'store'])->name('contratti_affitti.store');
Route::get('admin/affitti/contratti/{contrattiAffitti}', [App\Http\Controllers\ContrattiAffittiController::class,'show'])->name('contratti_affitti.show');
Route::get('admin/affitti/contratti/{contrattiAffitti}/edit', [App\Http\Controllers\ContrattiAffittiController::class,'edit'])->name('contratti_affitti.edit');
Route::put('admin/affitti/contratti/{contrattiAffitti}', [App\Http\Controllers\ContrattiAffittiController::class,'update'])->name('contratti_affitti.update');
Route::delete('admin/affitti/contratti/{contrattiAffitti}', [App\Http\Controllers\ContrattiAffittiController::class,'destroy'])->name('contratti_affitti');
});
// API // API
}); });