diff --git a/app/Http/Controllers/CotrattiAffittiController.php b/app/Http/Controllers/CotrattiAffittiController.php
index 02db9fe..5d21091 100644
--- a/app/Http/Controllers/CotrattiAffittiController.php
+++ b/app/Http/Controllers/CotrattiAffittiController.php
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use App\Models\CotrattiAffitti;
use Illuminate\Http\Request;
+use Barryvdh\DomPDF\Facade\Pdf;
class CotrattiAffittiController extends Controller
{
@@ -35,6 +36,21 @@ class CotrattiAffittiController extends Controller
public function store(Request $request)
{
//
+ $data = $request->validate([
+ 'immobile_id' => 'required|exists:immobilis,id',
+ 'tipo_contratto_id' => 'required|exists:tipo_contrattos,id',
+ 'data_inizio' => 'nullable|date',
+ 'data_fine' => 'nullable|date',
+ 'tacito_rinnovo' => 'nullable|boolean',
+ 'canone_mensile' => 'nullable|string|max:255',
+ 'deposito_cauzionale' => 'nullable|string|max:255',
+ 'spese_condominiali' => 'nullable|string|max:255',
+ 'iva' => 'nullable|string|max:255',
+ 'registrazione' => 'nullable|string|max:255',
+ 'note' => 'nullable|string|max:1000',
+ ]);
+ CotrattiAffitti::create($data);
+ return redirect()->route('contratti_affitti');
}
/**
@@ -68,4 +84,12 @@ class CotrattiAffittiController extends Controller
{
//
}
+
+ public function renderPdf(CotrattiAffitti $cotrattiAffitti)
+ {
+ //
+ $contratto=CotrattiAffitti::find($cotrattiAffitti->id);
+ $pdf = PDF::loadView('affitti.contratti.pdf', compact('contratto'));
+ return $pdf->download('contratto.pdf');
+ }
}
diff --git a/app/Http/Controllers/TipoContrattoController.php b/app/Http/Controllers/TipoContrattoController.php
index c01e40b..9a240c1 100644
--- a/app/Http/Controllers/TipoContrattoController.php
+++ b/app/Http/Controllers/TipoContrattoController.php
@@ -12,7 +12,8 @@ class TipoContrattoController extends Controller
*/
public function index()
{
- //
+ // Tipo di contratto non ha una vista di indice definita
+ return view('tipo_contrattos.index');
}
/**
@@ -21,6 +22,7 @@ class TipoContrattoController extends Controller
public function create()
{
//
+ return view('tipo_contrattos.create');
}
/**
diff --git a/composer.json b/composer.json
index 9dcfd3e..de06dc6 100644
--- a/composer.json
+++ b/composer.json
@@ -7,6 +7,7 @@
"license": "MIT",
"require": {
"php": "^8.2",
+ "barryvdh/laravel-dompdf": "^3.1",
"dompdf/dompdf": "^3.1",
"jeroennoten/laravel-adminlte": "*",
"laravel/framework": "^12.0",
diff --git a/composer.lock b/composer.lock
index 14cea3a..cfa6112 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "ddebac8f1beada895d0d5ce36fc77d5a",
+ "content-hash": "b9191d246ae95843fd5b0ec2a810cfc7",
"packages": [
{
"name": "almasaeed2010/adminlte",
@@ -49,6 +49,83 @@
},
"time": "2022-02-07T20:33:09+00:00"
},
+ {
+ "name": "barryvdh/laravel-dompdf",
+ "version": "v3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/barryvdh/laravel-dompdf.git",
+ "reference": "8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d",
+ "reference": "8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d",
+ "shasum": ""
+ },
+ "require": {
+ "dompdf/dompdf": "^3.0",
+ "illuminate/support": "^9|^10|^11|^12",
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "larastan/larastan": "^2.7|^3.0",
+ "orchestra/testbench": "^7|^8|^9|^10",
+ "phpro/grumphp": "^2.5",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "aliases": {
+ "PDF": "Barryvdh\\DomPDF\\Facade\\Pdf",
+ "Pdf": "Barryvdh\\DomPDF\\Facade\\Pdf"
+ },
+ "providers": [
+ "Barryvdh\\DomPDF\\ServiceProvider"
+ ]
+ },
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Barryvdh\\DomPDF\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Barry vd. Heuvel",
+ "email": "barryvdh@gmail.com"
+ }
+ ],
+ "description": "A DOMPDF Wrapper for Laravel",
+ "keywords": [
+ "dompdf",
+ "laravel",
+ "pdf"
+ ],
+ "support": {
+ "issues": "https://github.com/barryvdh/laravel-dompdf/issues",
+ "source": "https://github.com/barryvdh/laravel-dompdf/tree/v3.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://fruitcake.nl",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/barryvdh",
+ "type": "github"
+ }
+ ],
+ "time": "2025-02-13T15:07:54+00:00"
+ },
{
"name": "brick/math",
"version": "0.13.1",
@@ -9263,12 +9340,12 @@
],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": {},
+ "stability-flags": [],
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
"php": "^8.2"
},
- "platform-dev": {},
+ "platform-dev": [],
"plugin-api-version": "2.6.0"
}
diff --git a/database/migrations/2025_09_26_115029_create_immobilis_table.php b/database/migrations/2025_09_26_115029_create_immobilis_table.php
index 826e5b2..cedee1c 100644
--- a/database/migrations/2025_09_26_115029_create_immobilis_table.php
+++ b/database/migrations/2025_09_26_115029_create_immobilis_table.php
@@ -14,7 +14,9 @@ return new class extends Migration
Schema::create('immobilis', function (Blueprint $table) {
$table->id();
$table->timestamps();
+ $table->string('nome')->unique();
$table->string('indirizzo')->nullable();
+ $table->string('civico')->nullable();
$table->string('citta')->nullable();
$table->string('cap')->nullable();
$table->string('provincia')->nullable();
@@ -46,6 +48,11 @@ return new class extends Migration
$table->string('note')->nullable();
$table->string('fibra-ottica')->nullable();
$table->string('internet')->nullable();
+ $table->string('catasto_n')->nullable();
+ $table->string('cat_foglio')->nullable();
+ $table->string('cat_particella')->nullable();
+ $table->string('cat_sub')->nullable();
+ $table->string('cat_cat')->nullable();
});
}
diff --git a/database/migrations/2025_10_03_093033_create_tipo_contrattos_table.php b/database/migrations/2025_10_03_093033_create_tipo_contrattos_table.php
index 64637fb..acd0eed 100644
--- a/database/migrations/2025_10_03_093033_create_tipo_contrattos_table.php
+++ b/database/migrations/2025_10_03_093033_create_tipo_contrattos_table.php
@@ -14,6 +14,9 @@ return new class extends Migration
Schema::create('tipo_contrattos', function (Blueprint $table) {
$table->id();
$table->timestamps();
+ $table->string('nome')->nullable();
+ $table->string('descrizione')->nullable();
+ $table->longText('template')->nullable();
});
}
diff --git a/database/migrations/2025_10_03_093140_contratto_inquilino.php b/database/migrations/2025_10_03_093140_contratto_inquilino.php
index 88fa2f3..716fb0f 100644
--- a/database/migrations/2025_10_03_093140_contratto_inquilino.php
+++ b/database/migrations/2025_10_03_093140_contratto_inquilino.php
@@ -12,6 +12,12 @@ return new class extends Migration
public function up(): void
{
//
+ Schema::create('cotratto_inquilino', function (Blueprint $table) {
+ $table->id();
+ $table->timestamps();
+ $table->foreignId('contratto_id');
+ $table->foreignId('inquilino_id');
+ });
}
/**
@@ -20,5 +26,6 @@ return new class extends Migration
public function down(): void
{
//
+ Schema::dropIfExists('cotratto_inquilino');
}
};
diff --git a/resources/views/affitti/contratti/contratto.blade.php b/resources/views/affitti/contratti/contratto.blade.php
new file mode 100644
index 0000000..c31ae19
--- /dev/null
+++ b/resources/views/affitti/contratti/contratto.blade.php
@@ -0,0 +1,128 @@
+
CONTRATTO DI LOCAZIONE AD USO ABITATIVO
+A CANONE CONCORDATO O CONVENZIONATO
+
+
+ Il sig. {{ $proprietario->cognome }} {{ $proprietario->nome }}, nato a {{ $proprietario->nato_a }} il {{ $proprietario->nato_il }} (codice fiscale {{ $proprietario->codice_fiscale}}), residente in {{ $proprietario->residente_in}} via {{ $proprietario->res_indirizzo }} n. {{ $proprietario->res_civico }}, di seguito denominato locatore,
+
+
+@foreach($inquilini as $inquilino)
+al sig. {{ $inquilino->cognome }} {{ $inquilino->nome }}, nato a {{ $inquilino->nato_a }} il {{ $inquilino->nato_il }} (codice fiscale {{ $inquilino->codice_fiscale }}), residente in {{ $inquilino->residente_in }}, via {{ $inquilino->res_indirizzo }} n. {{ $inquilino->res_civico}},
+
+
+@endforeach
+ di seguito denominato/i conduttore, che accetta, l'unità immobiliare sita nel Comune di {{ $immobile->citta }} alla via {{ $immobile->indirizzo }} n. {{ $immobile->civico}}, piano {{ $immobile->piano }}, distinta al catasto al n. {{ $immobile->catasto_n }}, di proprietà esclusiva del locatore.
+
+ A seguito di quanto sopra premesso, che costituisce parte integrante e sostanziale del presente contratto, le parti convengono e stipulano quanto segue:
+
+
+
+ Il Sig. {{ $proprietario->cognome }} {{ $proprietario->nome }} concede in locazione ad uso di civile abitazione al Sig. @foreach($inquilini as $inquilino) {{ $inquilino->cognome }} {{ $inquilino->nome }}, che accetta/no, l’immobile sito al piano {{ $immobile->piano }}. del fabbricato in {{ $immobile->citta }}. via {{ $immobile->indirizzo }}. n. {{ $immobile->civico }}, di mq {{ $immobile->mq }}, composto di n. {{ $immobile->vani }} vani, distinto al Catasto Fabbricati al Foglio {{ $immobile->cat_foglio }}, Particella {{ $immobile->cat_particella }}, Sub. {{ $immobile->cat_sub }}, Cat. {{ $immobile->cat_cat }}.
+
+
+
+ Il contratto è stipulato per la durata di anni 3 (tre) dal {{ $contratto->data_inizio }} al {{ $contratto->data_fine }} e si intenderà rinnovato automaticamente alle medesime condizioni contrattuali per ulteriori 2 (due) anni, salvo che le parti concordino il rinnovo per ulteriori 3 (tre) anni a nuove condizioni contrattuali, ovvero, salvo espressa rinuncia di una delle parti al rinnovo contrattuale da comunicarsi all’altra parte almeno 6 (sei) mesi prima della scadenza tramite lettera raccomandata.
+
+
+ 3. Canone di locazione e modalità di pagamento
+
+ Il canone di locazione è calcolato sulla base dei parametri stabiliti nell’accordo dell’Associazione1 …. ed è fissato in € ... (...) mensili.
+
+ Il canone dovrà essere corrisposto entro il {{ $contratto->giorno }} di ciascun mese, a mezzo {{ $contratto->pagamento_mezzo }}.
+
+
+
+ In forza dell'articolo 3 del D.Lgs 14/03/2011 n. 23, per la durata del presente contratto e salvo revoca scritta che si riserva di esercitare in qualsiasi momento, il locatore dichiara di esercitare l'opzione per il sistema denominato "cedolare secca", restando pertanto esonerato dall'obbligo di inviare al conduttore la prevista comunicazione mediante lettera raccomandata.
+
+ Negli anni di decorrenza del contratto, inoltre, il locatore rinuncia espressamente all'applicazione degli aggiornamenti del canone di cui sopra, inclusa la variazione accertata dall’ISTAT.
+
+
+ 5. Inadempimento del conduttore
+
+ Il mancato puntuale pagamento del canone, ovvero, il mancato puntuale pagamento degli oneri accessori, oltre venti giorni dalla data di scadenza, quando l’importo non pagato supera quello di …. mensilità del canone, costituirà motivo di risoluzione del contratto.
+
+
+
+ E’ fatto divieto al conduttore di sublocare o concedere in comodato o consentire a terzi l’uso sotto qualsiasi forma contrattuale, in tutto o in parte, dell’immobile locato, pena la risoluzione del contratto.
+
+
+ 7. Consegna e stato dell’immobile locato
+
+ Il conduttore dichiara di aver visitato l’immobile oggetto del presente contratto e di averlo trovato in buono stato e adatto all’uso convenuto.
+
+ Il conduttore si impegna a riconsegnare l’unità immobiliare locata nello stato medesimo in cui l’ha ricevuta salvo il deperimento d’uso, pena il risarcimento del danno.
+
+ A tal fine, si allega verbale di constatazione delle condizioni dell’immobile e di inventario che costituiscono parte integrante del presente contratto (all. Modello n. _____ e n. ______).
+
+
+
+ Il locatore ha facoltà di accedere all’immobile locato per giustificati motivi.
+
+ Salvo espressa dispensa fornita dal conduttore, l’accesso dovrà avvenire alla presenza di costui o di persona da esso delegata.
+
+ Escluso il caso in cui sia indispensabile l’accesso immediato, al conduttore dovrà essere fornito un preavviso di almeno 3 giorni.
+
+
+ 9. Attestazione di prestazione energetica
+
+ Il conduttore dà atto di aver ricevuto le informazioni e la documentazione in ordine alla certificazione energetica dell'unità immobiliare in questione, eseguita da .... in data .... in conformità a quanto disposto dal D. Lgs. 3 marzo 2011, n. 28 art. 13.
+
+
+ 10. Rapporti di vicinato (nel caso di condominio)
+
+ Il conduttore si impegna a rispettare le norme del regolamento condominiale dello stabile che dichiara di ben conoscere, e ad osservare ogni altra norma legittimamente emanata.
+
+ È in ogni caso vietato al conduttore compiere atti e/o tenere comportamenti che possano recare molestia agli altri abitanti dello stabile.
+
+
+ 11. Modifiche o innovazioni
+
+ Il conduttore non potrà apportare alcuna modifica, innovazione, miglioria o addizione ai locali locati ed alla loro destinazione, o agli impianti esistenti, senza il preventivo consenso scritto del Locatore.
+
+
+ 12. Deposito cauzionale
+
+ A garanzia delle obbligazioni tutte che assume con il presente contratto, il conduttore rilascia al locatore la somma di € …. (…), pari a 3 (tre) mensilità del canone, non imputabile in conto pigioni.
+
+ Il deposito cauzionale come sopra costituito sarà restituito al termine della locazione, previa verifica dello stato dell’unità immobiliare e dell’osservanza di ogni obbligazione contrattuale.
+
+
+
+ Le spese di ordinaria amministrazione, incluse le spese condominiali, sono integralmente a carico del conduttore, restando a carico del locatore le spese di straordinaria amministrazione.
+
+ L’opzione di cui all’art. 4 (Cedolare secca) comporta il venir meno dell’obbligo di versamento delle imposte di registro e di bollo relative al presente contratto, comprese quelle dovute sulla risoluzione e sulle proroghe del contratto stesso.
+
+
+ 14. Variazioni condizioni contrattuali
+
+ Il presente contratto potrà essere modificato soltanto mediante atto scritto.
+
+
+ 15. Autorizzazione al trattamento dei dati personali
+
+ Il locatore ed il conduttore si autorizzano reciprocamente a comunicare a terzi i propri dati personali in relazione ad adempimenti connessi col rapporto di locazione, ai sensi del D. Lgs. n. 196/2003.
+
+
+ 16. Commissione di Conciliazione
+
+ Per ogni controversia che sorga in merito all'interpretazione ed esecuzione del presente contratto ciascuna parte può richiedere, prima di adire l'Autorità giudiziaria, che si pronunci una Commissione di conciliazione stragiudiziale che deve decidere non oltre sessanta giorni dalla data della richiesta.
+
+ La Commissione di conciliazione, di cui all’articolo 6 del decreto del Ministro delle infrastrutture e dei trasporti di concerto con il Ministro dell’economia e delle finanze, emanato ai sensi dell’articolo 4, comma 2, della legge 431/98, è composta al massimo da tre membri di cui due scelti fra appartenenti alle rispettive organizzazioni firmatarie dell'Accordo territoriale sulla base delle designazioni, rispettivamente, del locatore e del conduttore ed un terzo - che svolge funzioni di presidente - sulla base della scelta operata dai due componenti come sopra designati qualora gli stessi ritengano di nominarlo.
+
+ La richiesta di intervento della Commissione non determina la sospensione delle obbligazioni contrattuali.
+
+
+ Per quanto non previsto dal presente contratto le parti fanno espresso rinvio alle disposizioni del codice civile, alle norme vigenti ed agli usi locali.
+
+
+
+
+
+
Il locatore
+
Il conduttore
+
diff --git a/resources/views/affitti/contratti/create.blade.php b/resources/views/affitti/contratti/create.blade.php
new file mode 100644
index 0000000..09282c6
--- /dev/null
+++ b/resources/views/affitti/contratti/create.blade.php
@@ -0,0 +1,70 @@
+@extends('adminlte::page')
+@section('title', 'Crea Contratti')
+@section('content_header')
+ Crea Contratto di Locazione
+@stop
+@section('content')
+
+ @if ($errors->any())
+
+
+ @foreach ($errors->all() as $error)
+ - {{ $error }}
+ @endforeach
+
+
+ @endif
+
+
+@stop
diff --git a/resources/views/affitti/contratti/index.blade.php b/resources/views/affitti/contratti/index.blade.php
index f2dee02..89fe1e9 100644
--- a/resources/views/affitti/contratti/index.blade.php
+++ b/resources/views/affitti/contratti/index.blade.php
@@ -7,7 +7,7 @@
@section('content')