92 lines
3.7 KiB
PHP
92 lines
3.7 KiB
PHP
<?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('palazzine', function (Blueprint $table) {
|
|
$table->id();
|
|
$table->foreignId('stabile_id')->constrained('stabili')->onDelete('cascade');
|
|
|
|
// Identificatori
|
|
$table->string('codice_palazzina', 10); // A, B, C o 1, 2, 3
|
|
$table->string('denominazione')->nullable();
|
|
$table->text('descrizione')->nullable();
|
|
|
|
// Struttura fisica
|
|
$table->integer('numero_scale')->default(1);
|
|
$table->integer('numero_piani_fuori_terra')->default(3); // escluso piano terra
|
|
$table->integer('numero_piani_interrati')->default(0);
|
|
$table->boolean('ha_piano_terra')->default(true);
|
|
$table->integer('appartamenti_per_piano')->default(2);
|
|
|
|
// Caratteristiche fisiche
|
|
$table->decimal('superficie_totale', 10, 2)->nullable();
|
|
$table->integer('anno_costruzione')->nullable();
|
|
$table->integer('anno_ultima_ristrutturazione')->nullable();
|
|
$table->enum('stato_conservazione', ['ottimo', 'buono', 'discreto', 'da_ristrutturare'])->default('buono');
|
|
|
|
// Dati catastali base (se specifici per palazzina)
|
|
$table->string('sezione_urbana', 10)->nullable();
|
|
$table->string('foglio', 20)->nullable();
|
|
$table->string('particella', 20)->nullable();
|
|
|
|
// Impianti comuni alla palazzina
|
|
$table->enum('tipo_riscaldamento', ['centralizzato', 'autonomo', 'misto', 'assente'])->default('centralizzato');
|
|
$table->boolean('ha_ascensore')->default(false);
|
|
$table->integer('numero_ascensori')->default(0);
|
|
$table->boolean('ha_montacarichi')->default(false);
|
|
$table->boolean('ha_videocitofono')->default(false);
|
|
$table->boolean('ha_impianto_allarme')->default(false);
|
|
|
|
// Accessibilità
|
|
$table->boolean('accessibile_disabili')->default(false);
|
|
$table->text('note_accessibilita')->nullable();
|
|
|
|
// Parcheggi e spazi comuni
|
|
$table->integer('posti_auto_coperti')->default(0);
|
|
$table->integer('posti_auto_scoperti')->default(0);
|
|
$table->boolean('ha_giardino_comune')->default(false);
|
|
$table->decimal('mq_giardino_comune', 8, 2)->nullable();
|
|
$table->boolean('ha_terrazza_comune')->default(false);
|
|
$table->decimal('mq_terrazza_comune', 8, 2)->nullable();
|
|
|
|
// Locali tecnici e di servizio
|
|
$table->boolean('ha_locale_caldaia')->default(false);
|
|
$table->boolean('ha_locale_contatori')->default(false);
|
|
$table->boolean('ha_locale_bici')->default(false);
|
|
$table->boolean('ha_lavanderia')->default(false);
|
|
$table->text('altri_locali_comuni')->nullable();
|
|
|
|
// Note e gestione
|
|
$table->text('note')->nullable();
|
|
$table->boolean('attiva')->default(true);
|
|
|
|
// Audit trail
|
|
$table->timestamps();
|
|
$table->foreignId('created_by')->nullable()->constrained('users');
|
|
$table->foreignId('updated_by')->nullable()->constrained('users');
|
|
|
|
// Indici per performance
|
|
$table->index(['stabile_id', 'codice_palazzina']);
|
|
$table->index('stabile_id');
|
|
$table->unique(['stabile_id', 'codice_palazzina']); // Codice palazzina unico per stabile
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Reverse the migrations.
|
|
*/
|
|
public function down(): void
|
|
{
|
|
Schema::dropIfExists('palazzine');
|
|
}
|
|
};
|