92 lines
4.1 KiB
PHP
92 lines
4.1 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
|
|
{
|
|
// 1. Tipi di superficie configurabili
|
|
Schema::create('tipi_superficie', function (Blueprint $table) {
|
|
$table->id();
|
|
$table->string('nome'); // es: "Commerciale", "Calpestabile", "Balconi", "Terrazzi", "Giardino"
|
|
$table->string('codice')->unique(); // es: "COMM", "CALP", "BALC", "TERR", "GIAR"
|
|
$table->text('descrizione')->nullable();
|
|
$table->boolean('obbligatoria')->default(false); // se deve essere sempre presente
|
|
$table->boolean('per_millesimi')->default(true); // se usata per calcolo millesimi
|
|
$table->string('unita_misura')->default('mq');
|
|
$table->decimal('moltiplicatore_default', 5, 3)->default(1.000); // coefficiente per calcoli
|
|
$table->integer('ordine_visualizzazione')->default(100);
|
|
$table->boolean('attiva')->default(true);
|
|
$table->timestamps();
|
|
|
|
$table->index('attiva');
|
|
$table->index('ordine_visualizzazione');
|
|
});
|
|
|
|
// 2. Classificazioni tecniche configurabili
|
|
Schema::create('classificazioni_tecniche', function (Blueprint $table) {
|
|
$table->id();
|
|
$table->enum('tipo_classificazione', [
|
|
'classe_energetica', 'stato_conservazione', 'tipo_riscaldamento',
|
|
'tipo_proprieta', 'categoria_catastale', 'destinazione_uso'
|
|
]);
|
|
$table->string('valore'); // es: "A++", "Ottimo", "Autonomo"
|
|
$table->string('codice')->nullable(); // per compatibilità sistemi esterni
|
|
$table->text('descrizione')->nullable();
|
|
$table->decimal('coefficiente_calcolo', 5, 3)->nullable(); // per calcoli automatici
|
|
$table->string('colore_badge')->nullable(); // per UI
|
|
$table->integer('ordine')->default(100);
|
|
$table->boolean('attiva')->default(true);
|
|
$table->timestamps();
|
|
|
|
$table->unique(['tipo_classificazione', 'valore'], 'unique_tipo_valore');
|
|
$table->index(['tipo_classificazione', 'attiva']);
|
|
});
|
|
|
|
// 3. Configurazioni globali sistema
|
|
Schema::create('configurazioni_sistema', function (Blueprint $table) {
|
|
$table->id();
|
|
$table->string('chiave')->unique(); // es: "millesimi_calcolo_automatico"
|
|
$table->string('valore'); // valore configurazione
|
|
$table->enum('tipo_valore', ['string', 'integer', 'decimal', 'boolean', 'json', 'date']);
|
|
$table->string('categoria'); // es: "millesimi", "contatori", "fatturazione"
|
|
$table->string('nome_visualizzato');
|
|
$table->text('descrizione')->nullable();
|
|
$table->boolean('modificabile_admin')->default(false); // se admin può modificare
|
|
$table->boolean('modificabile_superadmin')->default(true);
|
|
$table->timestamps();
|
|
|
|
$table->index('categoria');
|
|
});
|
|
|
|
// 4. Template configurazioni per stabili
|
|
Schema::create('template_configurazioni', function (Blueprint $table) {
|
|
$table->id();
|
|
$table->string('nome_template'); // es: "Condominio Standard", "Villette a Schiera"
|
|
$table->text('descrizione')->nullable();
|
|
$table->json('configurazioni_default'); // configurazioni predefinite
|
|
$table->json('tabelle_millesimali_default'); // tabelle millesimali da creare
|
|
$table->json('tipi_superficie_incluse'); // tipi superficie da abilitare
|
|
$table->boolean('attivo')->default(true);
|
|
$table->timestamps();
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Reverse the migrations.
|
|
*/
|
|
public function down(): void
|
|
{
|
|
Schema::dropIfExists('template_configurazioni');
|
|
Schema::dropIfExists('configurazioni_sistema');
|
|
Schema::dropIfExists('classificazioni_tecniche');
|
|
Schema::dropIfExists('tipi_superficie');
|
|
}
|
|
};
|