netgescon-day0/database/seeders/DemoTicketsSeeder.php

120 lines
5.3 KiB
PHP
Executable File

<?php
namespace Database\Seeders;
use App\Models\CategoriaTicket;
use App\Models\Soggetto;
use App\Models\Ticket;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class DemoTicketsSeeder extends Seeder
{
public function run(): void
{
$stabileId = DB::table('stabili')->where('codice_stabile', 'DEMO001')->value('id')
?: DB::table('stabili')->orderBy('id')->value('id');
if (! $stabileId) {
$this->command?->warn('Nessuno stabile disponibile per i ticket demo.');
return;
}
$unitaCondomino = DB::table('unita_immobiliari')
->where('stabile_id', $stabileId)
->where('interno', '1')
->value('id');
$unitaInquilino = DB::table('unita_immobiliari')
->where('stabile_id', $stabileId)
->where('interno', '2')
->value('id');
$adminUserId = User::query()->where('email', 'amministratore@demo.netgescon.it')->value('id');
$condominoUserId = User::query()->where('email', 'condomino@demo.netgescon.it')->value('id');
$inquilinoUserId = User::query()->where('email', 'inquilino@demo.netgescon.it')->value('id');
$condominoSoggettoId = Soggetto::query()->where('email', 'condomino@demo.netgescon.it')->value('id');
$inquilinoSoggettoId = Soggetto::query()->where('email', 'inquilino@demo.netgescon.it')->value('id');
$guastiId = CategoriaTicket::query()->firstOrCreate(
['nome' => 'Guasti'],
['descrizione' => 'Guasti e manutenzioni ordinarie']
)->id;
$acquaId = CategoriaTicket::query()->firstOrCreate(
['nome' => 'Acqua'],
['descrizione' => 'Segnalazioni acqua e letture contatori']
)->id;
$documentiId = CategoriaTicket::query()->firstOrCreate(
['nome' => 'Documentazione'],
['descrizione' => 'Richieste e verifiche documentali']
)->id;
$tickets = [
[
'lookup' => 'DEMO-GUASTO-ASCENSORE',
'stabile_id' => $stabileId,
'unita_immobiliare_id' => $unitaCondomino,
'soggetto_richiedente_id' => $condominoSoggettoId,
'aperto_da_user_id' => $condominoUserId,
'categoria_ticket_id' => $guastiId,
'assegnato_a_user_id' => $adminUserId,
'titolo' => 'Ascensore fermo al piano terra',
'descrizione' => 'Segnalazione demo: ascensore fermo al piano terra con apertura porte intermittente.',
'luogo_intervento' => 'Scala A - Ascensore principale',
'stato' => 'Aperto',
'priorita' => 'Alta',
'data_apertura' => now()->subDays(2),
'data_scadenza_prevista' => now()->addDay(),
],
[
'lookup' => 'DEMO-ACQUA-PERDITA',
'stabile_id' => $stabileId,
'unita_immobiliare_id' => $unitaInquilino,
'soggetto_richiedente_id' => $inquilinoSoggettoId,
'aperto_da_user_id' => $inquilinoUserId,
'categoria_ticket_id' => $acquaId,
'assegnato_a_user_id' => $adminUserId,
'titolo' => 'Perdita acqua nel vano contatori',
'descrizione' => 'Segnalazione demo: perdita leggera nel vano contatori con lettura acqua anomala.',
'luogo_intervento' => 'Piano terra - vano tecnico acqua',
'stato' => 'In Lavorazione',
'priorita' => 'Urgente',
'data_apertura' => now()->subDay(),
'data_scadenza_prevista' => now()->addDay(),
],
[
'lookup' => 'DEMO-DOC-VERBALE',
'stabile_id' => $stabileId,
'unita_immobiliare_id' => $unitaCondomino,
'soggetto_richiedente_id' => $condominoSoggettoId,
'aperto_da_user_id' => $condominoUserId,
'categoria_ticket_id' => $documentiId,
'assegnato_a_user_id' => $adminUserId,
'titolo' => 'Richiesta copia verbale assemblea',
'descrizione' => 'Segnalazione demo: richiesta invio verbale assemblea straordinaria di luglio.',
'luogo_intervento' => 'Area documentale',
'stato' => 'Chiuso',
'priorita' => 'Media',
'data_apertura' => now()->subDays(8),
'data_scadenza_prevista' => now()->subDays(6),
'data_chiusura_effettiva' => now()->subDays(5),
'data_risoluzione_effettiva' => now()->subDays(5),
],
];
foreach ($tickets as $ticket) {
unset($ticket['lookup']);
Ticket::query()->updateOrCreate(
['titolo' => $ticket['titolo']],
$ticket
);
}
$this->command?->info('Ticket demo sincronizzati: ' . count($tickets));
}
}