netgescon-master/database/migrations/2025_07_15_150002_create_configurazioni_dinamiche.php
2025-07-20 14:57:25 +00:00

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');
}
};