netgescon-master/database/migrations/2025_07_22_102159_create_palazzine_table.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');
}
};