netgescon-master/app/Console/Commands/CreateSampleData.php

217 lines
8.4 KiB
PHP

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\Stabile;
use App\Models\TabellaMillesimale;
use App\Models\DettaglioMillesimale;
use App\Models\UnitaImmobiliare;
use App\Models\RubricaUniversale;
use App\Models\DatiBancari;
class CreateSampleData extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'netgescon:sample-data';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Crea dati di esempio per testare le nuove interfacce NetGescon';
/**
* Execute the console command.
*/
public function handle()
{
$this->info('🚀 Creazione dati di esempio NetGescon...');
// 1. Verifica/Crea Stabile con tutti i dati completi
$stabileCount = Stabile::count();
$stabile = null;
if ($stabileCount == 0) {
$this->info('📋 Creazione primo stabile di esempio...');
$stabile = Stabile::create([
'codice_stabile' => 'ROM001',
'denominazione' => 'Condominio Via Roma 123',
'indirizzo' => 'Via Roma 123',
'citta' => 'Roma',
'cap' => '00100',
'provincia' => 'RM',
'amministratore_id' => 2, // admin@example.com
'stato' => 'attivo'
]);
$this->info("✅ Stabile creato: {$stabile->denominazione}");
} else {
// Usa l'ultimo stabile per creare i dati associati
$stabile = Stabile::latest()->first();
$this->info("📋 Uso stabile esistente: {$stabile->denominazione}");
}
// 2. Crea Tabella Millesimale se non esiste
$tabella = $stabile->tabelleMillesimali()->first();
if (!$tabella) {
$this->info('📊 Creazione tabella millesimale...');
$tabella = $stabile->tabelleMillesimali()->create([
'nome_tabella' => 'Spese Generali',
'codice_tabella' => 'TAB.A',
'denominazione' => 'Spese Generali',
'tipo_tabella' => 'proprieta',
'stato_tabella' => 'attiva',
'totale_millesimi' => 0,
'creato_da' => 1
]);
$this->info("✅ Tabella creata: {$tabella->codice_tabella}");
} else {
$this->info("📊 Tabella esistente: {$tabella->codice_tabella}");
}
// 3. Crea dettagli millesimali se non esistono
$dettagliCount = $tabella->dettagli()->count();
if ($dettagliCount == 0) {
$this->info('🏠 Creazione dettagli millesimali...');
// Prima verifica se ci sono unità immobiliari
$unitaImmobiliari = $stabile->unitaImmobiliari()->take(5)->get();
if ($unitaImmobiliari->count() == 0) {
$this->info('⚠️ Nessuna unità immobiliare trovata nello stabile.');
$this->info('📋 Creazione unità immobiliari di esempio...');
// Crea alcune unità immobiliari di esempio
$unitaData = [
['interno' => '1', 'scala' => 'A', 'piano' => '0', 'superficie' => 85.00],
['interno' => '2', 'scala' => 'A', 'piano' => '1', 'superficie' => 92.00],
['interno' => '3', 'scala' => 'A', 'piano' => '2', 'superficie' => 95.00],
['interno' => '4', 'scala' => 'A', 'piano' => '3', 'superficie' => 120.00],
['interno' => '5', 'scala' => 'B', 'piano' => '0', 'superficie' => 80.00]
];
foreach ($unitaData as $unita) {
$unitaImmobiliari[] = $stabile->unitaImmobiliari()->create([
'interno' => $unita['interno'],
'scala' => $unita['scala'],
'piano' => $unita['piano'],
'superficie' => $unita['superficie'],
'stato' => 'attiva',
'created_by' => 1
]);
}
$this->info("✅ Create " . count($unitaData) . " unità immobiliari");
}
// Ora crea i dettagli millesimali
$millesimi = [89.5000, 92.3000, 95.1000, 120.5000, 80.0000];
$totaleMillesimi = 0;
foreach ($unitaImmobiliari as $index => $unita) {
$millesimiValue = $millesimi[$index] ?? (80.0 + ($index * 5.0));
DettaglioMillesimale::create([
'tabella_id' => $tabella->id,
'unita_immobiliare_id' => $unita->id,
'millesimi' => $millesimiValue,
'creato_da' => 1
]);
$totaleMillesimi += $millesimiValue;
}
// Aggiorna il totale della tabella
$tabella->update(['totale_millesimi' => $totaleMillesimi]);
$this->info("✅ Creati " . $unitaImmobiliari->count() . " dettagli millesimali");
$this->info("📊 Totale millesimi: {$totaleMillesimi}");
} else {
$this->info("🏠 Dettagli esistenti: {$dettagliCount}");
}
// 4. Crea contatti rubrica universale
$banche = RubricaUniversale::categoria('banca')->count();
if ($banche == 0) {
$this->info('🏦 Creazione contatti banche...');
$bancheData = [
[
'ragione_sociale' => 'Banca Intesa SanPaolo S.p.A.',
'tipo_contatto' => 'persona_giuridica',
'categoria' => 'banca',
'partita_iva' => '06854851004',
'indirizzo' => 'Piazza San Carlo 156',
'citta' => 'Torino',
'cap' => '10121',
'provincia' => 'TO',
'telefono_ufficio' => '+39 011 555 1111',
'email' => 'condomini@intesasanpaolo.it',
'stato' => 'attivo'
],
[
'ragione_sociale' => 'UniCredit S.p.A.',
'tipo_contatto' => 'persona_giuridica',
'categoria' => 'banca',
'partita_iva' => '02008110222',
'indirizzo' => 'Piazza Gae Aulenti 3',
'citta' => 'Milano',
'cap' => '20154',
'provincia' => 'MI',
'telefono_ufficio' => '+39 02 888 2222',
'email' => 'condomini@unicredit.it',
'stato' => 'attivo'
]
];
foreach ($bancheData as $banca) {
RubricaUniversale::create($banca + ['creato_da' => 1]);
}
$this->info("✅ Creati " . count($bancheData) . " contatti banca");
} else {
$this->info("🏦 Banche esistenti: {$banche}");
}
// 5. Crea dati bancari se non esistono
$contiBancari = $stabile->datiBancari()->count();
if ($contiBancari == 0) {
$this->info('💳 Creazione dati bancari...');
$banca = RubricaUniversale::categoria('banca')->first();
if ($banca) {
DatiBancari::create([
'stabile_id' => $stabile->id,
'contatto_id' => $banca->id,
'tipo_conto' => 'corrente',
'denominazione_banca' => $banca->ragione_sociale,
'iban' => 'IT60 X054 2811 1010 0000 0123 456',
'intestazione_conto' => 'Condominio ' . $stabile->denominazione,
'data_saldo_iniziale' => '2025-01-01',
'saldo_iniziale' => 15000.00,
'valuta' => 'EUR',
'stato_conto' => 'attivo',
'creato_da' => 1
]);
$this->info("✅ Conto bancario creato presso {$banca->ragione_sociale}");
}
} else {
$this->info("💳 Conti bancari esistenti: {$contiBancari}");
}
$this->info('');
$this->info('🎉 Dati di esempio creati con successo!');
$this->info('📋 Ora puoi testare le nuove interfacce:');
$this->info(' • Tabelle Millesimali (vista Excel)');
$this->info(' • Dati Bancari (con rubrica universale)');
$this->info(' • Documenti Collegati (con protocolli)');
return 0;
}
}