netgescon-master/netgescon-laravel/database/seeders/DatiTestRealisticiSeeder.php

228 lines
9.2 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\Stabile;
use App\Models\UnitaImmobiliare;
use App\Models\Condomino;
use App\Models\Ticket;
use Illuminate\Support\Facades\DB;
class DatiTestRealisticiSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->command->info('🏗️ Creazione dati di test realistici...');
// 1. Crea stabili di test
$stabili = $this->creaStabili();
// 2. Crea unità immobiliari
$this->creaUnitaImmobiliari($stabili);
// 3. Crea condomini di test
$this->creaCondomini();
// 4. Crea tickets di test
$this->creaTickets();
$this->command->info('✅ Dati di test creati con successo!');
$this->command->info('📊 Statistiche:');
$this->command->info(' - Stabili: ' . Stabile::count());
$this->command->info(' - Unità: ' . UnitaImmobiliare::count());
$this->command->info(' - Condomini: ' . Condomino::count());
$this->command->info(' - Tickets: ' . Ticket::count());
}
private function creaStabili()
{
$stabiliData = [
[
'denominazione' => 'Condominio Milano Centro',
'indirizzo' => 'Via Brera, 15',
'citta' => 'Milano',
'cap' => '20121',
'codice_fiscale' => '80012345678',
'amministratore_nome' => 'Avv. Mario Rossi',
'amministratore_email' => 'admin@netgescon.local',
'telefono' => '+39 02 123456',
'num_palazzine' => 1,
'num_scale' => 4,
'num_piani' => 6,
'num_unita' => 24,
'banca_principale' => 'Intesa Sanpaolo',
'iban_principale' => 'IT60 X054 2811 1010 0000 0123 456',
'saldo_iniziale_principale' => 15000.00,
'data_saldo_iniziale' => '2025-01-01'
],
[
'denominazione' => 'Residenza Porta Nuova',
'indirizzo' => 'Corso Garibaldi, 82',
'citta' => 'Milano',
'cap' => '20121',
'codice_fiscale' => '80012345679',
'amministratore_nome' => 'Dott.ssa Laura Bianchi',
'amministratore_email' => 'admin@netgescon.local',
'telefono' => '+39 02 234567',
'num_palazzine' => 2,
'num_scale' => 6,
'num_piani' => 8,
'num_unita' => 48,
'banca_principale' => 'UniCredit',
'iban_principale' => 'IT60 X020 0811 1010 0000 0234 567',
'saldo_iniziale_principale' => 28000.00,
'data_saldo_iniziale' => '2025-01-01'
],
[
'denominazione' => 'Villaggio Verde',
'indirizzo' => 'Via dei Tigli, 33',
'citta' => 'Milano',
'cap' => '20137',
'codice_fiscale' => '80012345680',
'amministratore_nome' => 'Geom. Franco Verdi',
'amministratore_email' => 'admin@netgescon.local',
'telefono' => '+39 02 345678',
'num_palazzine' => 5,
'num_scale' => 2,
'num_piani' => 3,
'num_unita' => 30,
'banca_principale' => 'Banco BPM',
'iban_principale' => 'IT60 X056 9611 1010 0000 0345 678',
'saldo_iniziale_principale' => 8500.00,
'data_saldo_iniziale' => '2025-01-01'
]
];
$stabili = [];
foreach ($stabiliData as $data) {
$stabili[] = Stabile::create($data);
}
return $stabili;
}
private function creaUnitaImmobiliari($stabili)
{
foreach ($stabili as $stabile) {
$numUnita = $stabile->num_unita;
$scale = $stabile->num_scale;
$piani = $stabile->num_piani;
$unitaPerScala = intval($numUnita / $scale);
$unitaPerPiano = 2; // Media 2 unità per piano
for ($scala = 1; $scala <= $scale; $scala++) {
for ($piano = 1; $piano <= $piani; $piano++) {
for ($unita = 1; $unita <= $unitaPerPiano; $unita++) {
if (($scala - 1) * ($piani * $unitaPerPiano) + ($piano - 1) * $unitaPerPiano + $unita <= $numUnita) {
UnitaImmobiliare::create([
'stabile_id' => $stabile->id,
'interno' => $scala . '0' . $piano . '0' . $unita,
'scala' => 'Scala ' . chr(64 + $scala), // A, B, C...
'piano' => $piano,
'superficie' => rand(60, 120),
'vani' => rand(2, 5),
'categoria_catastale' => 'A/' . rand(2, 4),
'classe_energetica' => ['A', 'B', 'C', 'D'][rand(0, 3)],
'millesimi_proprieta' => rand(15, 35),
'millesimi_riscaldamento' => rand(12, 30),
'millesimi_ascensore' => rand(10, 25),
'note' => 'Unità di test - ' . $stabile->denominazione
]);
}
}
}
}
}
}
private function creaCondomini()
{
$condominiData = [
['nome' => 'Giuseppe', 'cognome' => 'Verdi', 'email' => 'g.verdi@email.com', 'telefono' => '+39 335 1234567'],
['nome' => 'Maria', 'cognome' => 'Rossi', 'email' => 'm.rossi@email.com', 'telefono' => '+39 338 2345678'],
['nome' => 'Francesco', 'cognome' => 'Bianchi', 'email' => 'f.bianchi@email.com', 'telefono' => '+39 340 3456789'],
['nome' => 'Anna', 'cognome' => 'Neri', 'email' => 'a.neri@email.com', 'telefono' => '+39 347 4567890'],
['nome' => 'Luigi', 'cognome' => 'Ferrari', 'email' => 'l.ferrari@email.com', 'telefono' => '+39 349 5678901'],
['nome' => 'Giulia', 'cognome' => 'Romano', 'email' => 'g.romano@email.com', 'telefono' => '+39 351 6789012'],
['nome' => 'Marco', 'cognome' => 'Gallo', 'email' => 'm.gallo@email.com', 'telefono' => '+39 333 7890123'],
['nome' => 'Elena', 'cognome' => 'Costa', 'email' => 'e.costa@email.com', 'telefono' => '+39 345 8901234'],
['nome' => 'Roberto', 'cognome' => 'Ricci', 'email' => 'r.ricci@email.com', 'telefono' => '+39 366 9012345'],
['nome' => 'Francesca', 'cognome' => 'Lombardi', 'email' => 'f.lombardi@email.com', 'telefono' => '+39 392 0123456']
];
foreach ($condominiData as $data) {
// Nota: qui dovresti creare il model Condomino se esiste
// Al momento lo skippiamo se la tabella non esiste
try {
DB::table('condomini')->insert(array_merge($data, [
'created_at' => now(),
'updated_at' => now()
]));
} catch (\Exception $e) {
$this->command->warn('Tabella condomini non trovata, skip creazione condomini');
break;
}
}
}
private function creaTickets()
{
$ticketsData = [
[
'titolo' => 'Problema ascensore Piano 3',
'descrizione' => 'L\'ascensore si blocca al terzo piano da questa mattina',
'priorita' => 'alta',
'stato' => 'aperto',
'categoria' => 'manutenzione'
],
[
'titolo' => 'Richiesta pulizia scale',
'descrizione' => 'Le scale necessitano di una pulizia straordinaria',
'priorita' => 'media',
'stato' => 'in_lavorazione',
'categoria' => 'pulizie'
],
[
'titolo' => 'Sostituzione lampadina cortile',
'descrizione' => 'La lampadina del cortile interno è bruciata',
'priorita' => 'bassa',
'stato' => 'aperto',
'categoria' => 'elettrico'
],
[
'titolo' => 'Perdita acqua garage',
'descrizione' => 'Segnalata perdita d\'acqua nel garage al piano -1',
'priorita' => 'alta',
'stato' => 'aperto',
'categoria' => 'idraulico'
],
[
'titolo' => 'Verifica riscaldamento',
'descrizione' => 'Alcuni appartamenti lamentano scarso riscaldamento',
'priorita' => 'media',
'stato' => 'chiuso',
'categoria' => 'riscaldamento'
]
];
foreach ($ticketsData as $data) {
try {
DB::table('tickets')->insert(array_merge($data, [
'created_at' => now(),
'updated_at' => now()
]));
} catch (\Exception $e) {
$this->command->warn('Tabella tickets non trovata, skip creazione tickets');
break;
}
}
}
}