183 lines
7.6 KiB
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;
|
|
}
|
|
}
|
|
}
|