264 lines
12 KiB
PHP
Executable File
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;
|
|
}
|
|
}
|