netgescon-day0/app/Console/Commands/CreateGesconImportDatabase.php

264 lines
12 KiB
PHP
Executable File

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
class CreateGesconImportDatabase extends Command
{
protected $signature = 'gescon:create-import-db';
protected $description = 'Create GESCON import database structure';
public function handle()
{
$this->info('🚀 Creazione database GESCON import...');
try {
// Usa la connessione gescon_import
$connection = DB::connection('gescon_import');
$this->info('📊 Creazione tabelle essenziali...');
// 1. STABILI
$connection->statement("
CREATE TABLE IF NOT EXISTS stabili (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cod_stabile VARCHAR(10) UNIQUE NOT NULL,
denominazione VARCHAR(255) NOT NULL,
indirizzo VARCHAR(255),
cap VARCHAR(10),
citta VARCHAR(255),
provincia VARCHAR(5),
codice_fiscale VARCHAR(16),
cf_amministratore VARCHAR(16),
scale INT,
n_interni INT,
codice_directory VARCHAR(10) NOT NULL,
flag_attivo BOOLEAN DEFAULT TRUE,
iban VARCHAR(34),
superficie_totale DECIMAL(10,2),
note TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_cod_stabile (cod_stabile),
INDEX idx_directory (codice_directory)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
// 2. ANNI GESTIONE
$connection->statement("
CREATE TABLE IF NOT EXISTS anni_gestione (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cod_stabile VARCHAR(10) NOT NULL,
anno YEAR NOT NULL,
data_inizio DATE,
data_fine DATE,
chiuso BOOLEAN DEFAULT FALSE,
budget_preventivo_euro DECIMAL(12,2),
consuntivo_euro DECIMAL(12,2),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (cod_stabile) REFERENCES stabili(cod_stabile),
UNIQUE KEY unique_stabile_anno (cod_stabile, anno)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
// 3. CONDOMINI
$connection->statement("
CREATE TABLE IF NOT EXISTS condomini (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cod_stabile VARCHAR(10) NOT NULL,
id_cond INT NOT NULL,
cod_cond VARCHAR(20),
cognome VARCHAR(255),
nome VARCHAR(255),
codice_fiscale VARCHAR(16),
indirizzo VARCHAR(255),
cap VARCHAR(10),
citta VARCHAR(255),
telefono VARCHAR(255),
email VARCHAR(255),
tipo_soggetto ENUM('proprietario', 'inquilino', 'amministratore', 'altro') DEFAULT 'proprietario',
millesimi_proprieta DECIMAL(8,3),
superficie_mq DECIMAL(8,2),
attivo BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (cod_stabile) REFERENCES stabili(cod_stabile),
INDEX idx_stabile_cond (cod_stabile, id_cond),
INDEX idx_cf (codice_fiscale)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
// 4. VOCI SPESA
$connection->statement("
CREATE TABLE IF NOT EXISTS voci_spesa (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cod_stabile VARCHAR(10) NOT NULL,
anno YEAR NOT NULL,
cod_voce VARCHAR(20) NOT NULL,
descrizione VARCHAR(255) NOT NULL,
tabella_millesimi VARCHAR(50),
perc_proprietario DECIMAL(5,2),
perc_inquilino DECIMAL(5,2),
preventivo_euro DECIMAL(10,2),
consuntivo_euro DECIMAL(10,2),
tipo_spesa ENUM('ordinaria', 'straordinaria', 'fondo') DEFAULT 'ordinaria',
note TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (cod_stabile) REFERENCES stabili(cod_stabile),
INDEX idx_stabile_anno_voce (cod_stabile, anno, cod_voce)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
// 5. OPERAZIONI
$connection->statement("
CREATE TABLE IF NOT EXISTS operazioni (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cod_stabile VARCHAR(10) NOT NULL,
anno YEAR NOT NULL,
id_operazione INT NOT NULL,
numero_spesa INT NOT NULL,
data_spesa DATE NOT NULL,
cod_spesa VARCHAR(20),
importo_euro DECIMAL(10,2) NOT NULL,
beneficiario VARCHAR(255),
fornitore VARCHAR(255),
numero_fattura VARCHAR(255),
data_fattura DATE,
natura ENUM('spesa', 'entrata', 'credito', 'debito') NOT NULL,
note TEXT,
incluso_bilancio BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (cod_stabile) REFERENCES stabili(cod_stabile),
INDEX idx_stabile_anno_spesa (cod_stabile, anno, numero_spesa)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
// 6. RATE
$connection->statement("
CREATE TABLE IF NOT EXISTS rate (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cod_stabile VARCHAR(10) NOT NULL,
anno YEAR NOT NULL,
id_cond INT NOT NULL,
numero_rata INT NOT NULL,
data_emissione DATE NOT NULL,
data_scadenza DATE,
importo_euro DECIMAL(10,2) NOT NULL,
importo_pagato_euro DECIMAL(10,2) DEFAULT 0,
stato ENUM('emessa', 'pagata', 'parziale', 'scaduta') DEFAULT 'emessa',
dettaglio_voci TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (cod_stabile) REFERENCES stabili(cod_stabile),
INDEX idx_stabile_anno_cond (cod_stabile, anno, id_cond),
INDEX idx_scadenza_stato (data_scadenza, stato)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
// 7. INCASSI
$connection->statement("
CREATE TABLE IF NOT EXISTS incassi (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cod_stabile VARCHAR(10) NOT NULL,
anno YEAR NOT NULL,
id_cond INT NOT NULL,
data_pagamento DATE NOT NULL,
importo_euro DECIMAL(10,2) NOT NULL,
modalita_pagamento VARCHAR(50),
riferimento VARCHAR(255),
numero_rata_collegata INT,
riconciliato BOOLEAN DEFAULT FALSE,
note TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (cod_stabile) REFERENCES stabili(cod_stabile),
INDEX idx_stabile_anno_data (cod_stabile, anno, data_pagamento),
INDEX idx_cond_riconciliato (id_cond, riconciliato)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
// 8. MILLESIMI DETTAGLIO
$connection->statement("
CREATE TABLE IF NOT EXISTS millesimi_dettaglio (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cod_stabile VARCHAR(10) NOT NULL,
cod_tabella VARCHAR(20) NOT NULL,
id_cond INT NOT NULL,
millesimi DECIMAL(8,3) NOT NULL,
preventivo_euro DECIMAL(10,2),
consuntivo_euro DECIMAL(10,2),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (cod_stabile) REFERENCES stabili(cod_stabile),
INDEX idx_stabile_tabella_cond (cod_stabile, cod_tabella, id_cond)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
// 9. FORNITORI
$connection->statement("
CREATE TABLE IF NOT EXISTS fornitori (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cod_fornitore VARCHAR(20) UNIQUE NOT NULL,
ragione_sociale VARCHAR(255) NOT NULL,
codice_fiscale VARCHAR(16),
partita_iva VARCHAR(11),
indirizzo VARCHAR(255),
cap VARCHAR(10),
citta VARCHAR(255),
provincia VARCHAR(5),
telefono VARCHAR(255),
email VARCHAR(255),
iban VARCHAR(34),
categoria ENUM('manutenzione', 'utilities', 'servizi', 'altro') DEFAULT 'altro',
attivo BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_cf (codice_fiscale),
INDEX idx_piva (partita_iva)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
// 10. IMPORT LOG
$connection->statement("
CREATE TABLE IF NOT EXISTS import_log (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tabella_origine VARCHAR(50) NOT NULL,
cod_stabile VARCHAR(10),
record_originale_id INT,
stato ENUM('pending', 'imported', 'duplicate', 'error') DEFAULT 'pending',
dettagli TEXT,
data_import TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_tabella_stato (tabella_origine, stato),
INDEX idx_stabile_data (cod_stabile, data_import)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
$this->info('✅ Database GESCON import creato con successo!');
// Verifica tabelle create
$tables = $connection->select("SHOW TABLES");
$this->info('📋 Tabelle create: ' . count($tables));
foreach ($tables as $table) {
$tableName = array_values((array)$table)[0];
$this->line(" - {$tableName}");
}
$this->info('🎯 Pronto per importazione dati GESCON!');
} catch (\Exception $e) {
$this->error('❌ Errore: ' . $e->getMessage());
return 1;
}
return 0;
}
}