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

183 lines
7.6 KiB
PHP

<?php
namespace App\Console\Commands;
use App\Models\Stabile;
use App\Models\Palazzina;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class GeneraPalazzineDemo extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'netgescon:demo-palazzine {--stabile_id=1 : ID dello stabile}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Genera dati demo per palazzine e unità immobiliari';
/**
* Execute the console command.
*/
public function handle()
{
$stabileId = $this->option('stabile_id');
// Verifica che lo stabile esista
$stabile = Stabile::find($stabileId);
if (!$stabile) {
$this->error("Stabile con ID {$stabileId} non trovato!");
return 1;
}
$this->info("🏢 Generazione palazzine demo per stabile: {$stabile->denominazione}");
DB::beginTransaction();
try {
// Elimina eventuali palazzine esistenti per questo stabile
$this->info("🗑️ Rimozione palazzine esistenti...");
Palazzina::where('stabile_id', $stabileId)->delete();
$palazzineCreate = [];
// Genera 3 palazzine demo
$configPalazzine = [
[
'codice' => 'A',
'denominazione' => 'Palazzina A - Principale',
'scale' => 2,
'piani_fuori_terra' => 4,
'piani_interrati' => 1,
'appartamenti_per_piano' => 2,
'anno_costruzione' => 1985,
'ha_ascensore' => true,
'numero_ascensori' => 2,
'ha_videocitofono' => true,
'accessibile_disabili' => true,
'ha_giardino_comune' => true,
'mq_giardino_comune' => 150.50,
],
[
'codice' => 'B',
'denominazione' => 'Palazzina B - Residenziale',
'scale' => 1,
'piani_fuori_terra' => 3,
'piani_interrati' => 0,
'appartamenti_per_piano' => 3,
'anno_costruzione' => 1992,
'ha_ascensore' => true,
'numero_ascensori' => 1,
'ha_videocitofono' => true,
'accessibile_disabili' => false,
'ha_terrazza_comune' => true,
'mq_terrazza_comune' => 75.25,
],
[
'codice' => 'C',
'denominazione' => 'Palazzina C - Commerciale/Residenziale',
'scale' => 1,
'piani_fuori_terra' => 2,
'piani_interrati' => 0,
'appartamenti_per_piano' => 4,
'anno_costruzione' => 2005,
'ha_ascensore' => false,
'ha_videocitofono' => true,
'accessibile_disabili' => true,
'posti_auto_coperti' => 8,
'ha_locale_caldaia' => true,
'ha_locale_contatori' => true,
]
];
foreach ($configPalazzine as $config) {
$this->info("🏗️ Creazione Palazzina {$config['codice']}...");
$palazzina = Palazzina::create([
'stabile_id' => $stabileId,
'codice_palazzina' => $config['codice'],
'denominazione' => $config['denominazione'],
'descrizione' => "Palazzina {$config['codice']} - Generata automaticamente per demo",
'numero_scale' => $config['scale'],
'numero_piani_fuori_terra' => $config['piani_fuori_terra'],
'numero_piani_interrati' => $config['piani_interrati'],
'ha_piano_terra' => true,
'appartamenti_per_piano' => $config['appartamenti_per_piano'],
'superficie_totale' => rand(500, 1500),
'anno_costruzione' => $config['anno_costruzione'],
'stato_conservazione' => ['ottimo', 'buono', 'discreto'][array_rand(['ottimo', 'buono', 'discreto'])],
'tipo_riscaldamento' => 'centralizzato',
'ha_ascensore' => $config['ha_ascensore'] ?? false,
'numero_ascensori' => $config['numero_ascensori'] ?? 0,
'ha_videocitofono' => $config['ha_videocitofono'] ?? false,
'ha_impianto_allarme' => rand(0, 1),
'accessibile_disabili' => $config['accessibile_disabili'] ?? false,
'posti_auto_coperti' => $config['posti_auto_coperti'] ?? rand(0, 5),
'posti_auto_scoperti' => rand(0, 10),
'ha_giardino_comune' => $config['ha_giardino_comune'] ?? false,
'mq_giardino_comune' => $config['mq_giardino_comune'] ?? null,
'ha_terrazza_comune' => $config['ha_terrazza_comune'] ?? false,
'mq_terrazza_comune' => $config['mq_terrazza_comune'] ?? null,
'ha_locale_caldaia' => $config['ha_locale_caldaia'] ?? false,
'ha_locale_contatori' => $config['ha_locale_contatori'] ?? true,
'ha_locale_bici' => rand(0, 1),
'ha_lavanderia' => rand(0, 1),
'note' => "Palazzina demo creata il " . now()->format('d/m/Y H:i'),
'attiva' => true,
]);
$palazzineCreate[] = $palazzina;
$this->info(" ✅ Palazzina {$config['codice']} creata (ID: {$palazzina->id})");
$this->info(" 📊 Unità teoriche: {$palazzina->numero_teorico_unita}");
}
// Opzione per generare anche le unità immobiliari
if ($this->confirm('Vuoi generare automaticamente anche le unità immobiliari?', true)) {
$this->info("🏠 Generazione unità immobiliari...");
$totaleUnita = 0;
foreach ($palazzineCreate as $palazzina) {
$this->info(" 🔨 Generazione unità per Palazzina {$palazzina->codice_palazzina}...");
$numeroUnita = $palazzina->eseguiGenerazioneUnita();
$totaleUnita += $numeroUnita;
$this->info(" ✅ Generate {$numeroUnita} unità per Palazzina {$palazzina->codice_palazzina}");
}
$this->info("🎉 Totale unità generate: {$totaleUnita}");
}
DB::commit();
$this->info("✨ Generazione completata con successo!");
$this->table(
['Palazzina', 'Scale', 'Piani', 'App/Piano', 'Unità Teoriche', 'Anno'],
collect($palazzineCreate)->map(function ($p) {
return [
$p->codice_palazzina,
$p->numero_scale,
$p->numero_totale_piani,
$p->appartamenti_per_piano,
$p->numero_teorico_unita,
$p->anno_costruzione,
];
})->toArray()
);
return 0;
} catch (\Exception $e) {
DB::rollback();
$this->error("❌ Errore durante la generazione: " . $e->getMessage());
$this->error("Stack trace: " . $e->getTraceAsString());
return 1;
}
}
}