forgetCachedPermissions(); $this->call(RoleSeeder::class); $superAdmin = $this->upsertUser('superadmin@demo.netgescon.it', 'Demo Super Admin'); $superAdmin->assignRole('super-admin'); $adminUser = $this->upsertUser('amministratore@demo.netgescon.it', 'Demo Amministratore'); $adminUser->assignRole('amministratore'); $amministratoreId = $this->upsertAmministratore($adminUser); $this->fillUserColumnsIfPresent($adminUser, [ 'amministratore_id' => $amministratoreId, 'last_stabile_id' => null, ]); $stabile = Stabile::updateOrCreate( ['codice_stabile' => 'DEMO001'], [ 'amministratore_id' => $amministratoreId, 'denominazione' => 'Condominio Demo NetGescon', 'codice_fiscale' => '97234560152', 'indirizzo' => 'Via Demo 24', 'cap' => '00100', 'citta' => 'Roma', 'provincia' => 'RM', 'stato' => 'attivo', 'attivo' => true, 'amministratore_nome' => 'Demo Amministratore', 'amministratore_email' => $adminUser->email, ] ); $this->fillUserColumnsIfPresent($adminUser, ['last_stabile_id' => $stabile->id]); $secondaryAdminUser = $this->upsertUser('amministratore2@demo.netgescon.it', 'Demo Amministratore 2'); $secondaryAdminUser->syncRoles(['amministratore']); $secondaryAmministratoreId = $this->upsertAmministratore($secondaryAdminUser, [ 'nome' => 'Demo', 'cognome' => 'Amministratore Due', 'denominazione_studio' => 'Studio Demo NetGescon Due', 'partita_iva' => '97123450988', 'codice_fiscale_studio' => 'DMDMTR80A01H501Y', 'indirizzo_studio' => 'Via Demo 26', 'cap_studio' => '00100', 'citta_studio' => 'Roma', 'provincia_studio' => 'RM', 'telefono_studio' => '0612345680', 'email_studio' => 'demo2@netgescon.it', 'pec_studio' => 'demo2@pec.netgescon.it', 'codice_amministratore' => 'DEMOADM2', ]); $this->fillUserColumnsIfPresent($secondaryAdminUser, [ 'amministratore_id' => $secondaryAmministratoreId, 'last_stabile_id' => null, ]); $secondaryStabile = Stabile::updateOrCreate( ['codice_stabile' => 'DEMO002'], [ 'amministratore_id' => $secondaryAmministratoreId, 'denominazione' => 'Condominio Demo NetGescon Due', 'codice_fiscale' => '97234560153', 'indirizzo' => 'Via Demo 26', 'cap' => '00100', 'citta' => 'Roma', 'provincia' => 'RM', 'stato' => 'attivo', 'attivo' => true, 'amministratore_nome' => 'Demo Amministratore 2', 'amministratore_email' => $secondaryAdminUser->email, ] ); $this->fillUserColumnsIfPresent($secondaryAdminUser, ['last_stabile_id' => $secondaryStabile->id]); $unitaProprietarioId = $this->upsertUnitaImmobiliare( ['stabile_id' => $stabile->id, 'scala' => 'A', 'interno' => '1'], [ 'palazzina' => 'Principale', 'piano' => '1', 'denominazione' => 'Appartamento Demo 1', 'categoria_catastale' => 'A/3', 'tipo_unita' => 'abitazione', 'stato_occupazione' => 'occupata_proprietario', 'superficie' => 92, 'attiva' => true, 'unita_demo' => true, ] ); $unitaInquilinoId = $this->upsertUnitaImmobiliare( ['stabile_id' => $stabile->id, 'scala' => 'A', 'interno' => '2'], [ 'palazzina' => 'Principale', 'piano' => '2', 'denominazione' => 'Appartamento Demo 2', 'categoria_catastale' => 'A/3', 'tipo_unita' => 'abitazione', 'stato_occupazione' => 'occupata_inquilino', 'superficie' => 78, 'attiva' => true, 'unita_demo' => true, ] ); $condominoUser = $this->upsertUser('condomino@demo.netgescon.it', 'Demo Condomino'); $condominoUser->syncRoles(['condomino']); $inquilinoUser = $this->upsertUser('inquilino@demo.netgescon.it', 'Demo Inquilino'); $inquilinoUser->syncRoles(['inquilino']); $collaboratoreUser = $this->upsertUser('collaboratore@demo.netgescon.it', 'Demo Collaboratore'); $collaboratoreUser->syncRoles(['collaboratore']); $fornitoreUser = $this->upsertUser('fornitore@demo.netgescon.it', 'Demo Fornitore'); $fornitoreUser->syncRoles(['fornitore']); $soggettoCondomino = Soggetto::updateOrCreate( ['email' => $condominoUser->email], [ 'nome' => 'Paolo', 'cognome' => 'Condomini', 'tipo' => 'proprietario', 'codice_fiscale' => 'CNDPLA80A01H501Z', 'telefono' => '3331001001', 'indirizzo' => 'Via Demo 24', 'cap' => '00100', 'citta' => 'Roma', 'provincia' => 'RM', ] ); $soggettoInquilino = Soggetto::updateOrCreate( ['email' => $inquilinoUser->email], [ 'nome' => 'Luca', 'cognome' => 'Inquilini', 'tipo' => 'inquilino', 'codice_fiscale' => 'NQILCU90B02H501Z', 'telefono' => '3331001002', 'indirizzo' => 'Via Demo 24', 'cap' => '00100', 'citta' => 'Roma', 'provincia' => 'RM', ] ); Proprieta::updateOrCreate( ['unita_immobiliare_id' => $unitaProprietarioId, 'soggetto_id' => $soggettoCondomino->id], [ 'tipo_diritto' => 'proprietario', 'percentuale_possesso' => 100, 'data_inizio' => '2024-01-01', ] ); Proprieta::updateOrCreate( ['unita_immobiliare_id' => $unitaInquilinoId, 'soggetto_id' => $soggettoInquilino->id], [ 'tipo_diritto' => 'inquilino', 'percentuale_possesso' => 100, 'data_inizio' => '2025-01-01', ] ); $this->command?->info('Demo users ready: superadmin/amministratore/amministratore2/condomino/inquilino/collaboratore/fornitore @demo.netgescon.it (password: demo12345)'); } private function upsertUser(string $email, string $name): User { $user = User::firstOrNew(['email' => $email]); $attributes = [ 'name' => $name, 'password' => Hash::make('demo12345'), 'email_verified_at' => now(), ]; if (Schema::hasColumn('users', 'is_active')) { $attributes['is_active'] = true; } if (Schema::hasColumn('users', 'registration_status')) { $attributes['registration_status'] = 'approved'; } if (Schema::hasColumn('users', 'approved_at')) { $attributes['approved_at'] = now(); } $user->fill($attributes); $user->save(); return $user; } /** * @param array $overrides */ private function upsertAmministratore(User $adminUser, array $overrides = []): int { $availableColumns = array_flip(Schema::getColumnListing('amministratori')); $attributes = array_merge([ 'user_id' => $adminUser->id, 'nome' => 'Demo', 'cognome' => 'Amministratore', 'denominazione_studio' => 'Studio Demo NetGescon', 'partita_iva' => '97123450987', 'codice_fiscale_studio' => 'DMNMTT80A01H501X', 'indirizzo_studio' => 'Via Demo 24', 'cap_studio' => '00100', 'citta_studio' => 'Roma', 'provincia_studio' => 'RM', 'telefono_studio' => '0612345678', 'email_studio' => 'demo@netgescon.it', 'pec_studio' => 'demo@pec.netgescon.it', 'codice_amministratore' => 'DEMOADM', 'attivo' => true, ], $overrides); $payload = []; foreach ($attributes as $column => $value) { if (isset($availableColumns[$column])) { $payload[$column] = $value; } } if (isset($availableColumns['updated_at'])) { $payload['updated_at'] = now(); } $lookupColumn = isset($availableColumns['user_id']) ? 'user_id' : 'email_studio'; $lookupValue = $lookupColumn === 'user_id' ? $adminUser->id : ($payload['email_studio'] ?? 'demo@netgescon.it'); $existing = DB::table('amministratori')->where($lookupColumn, $lookupValue)->first(); if ($existing) { DB::table('amministratori')->where('id', $existing->id)->update($payload); return (int) $existing->id; } if (isset($availableColumns['created_at'])) { $payload['created_at'] = now(); } return (int) DB::table('amministratori')->insertGetId($payload); } /** * @param array $lookup * @param array $attributes */ private function upsertUnitaImmobiliare(array $lookup, array $attributes): int { $availableColumns = array_flip(Schema::getColumnListing('unita_immobiliari')); $payload = []; foreach (array_merge($lookup, $attributes) as $column => $value) { if (isset($availableColumns[$column])) { $payload[$column] = $value; } } if (isset($availableColumns['updated_at'])) { $payload['updated_at'] = now(); } $query = DB::table('unita_immobiliari'); foreach ($lookup as $column => $value) { if (isset($availableColumns[$column])) { $query->where($column, $value); } } $existing = $query->first(); if ($existing) { DB::table('unita_immobiliari')->where('id', $existing->id)->update($payload); return (int) $existing->id; } if (isset($availableColumns['created_at'])) { $payload['created_at'] = now(); } return (int) DB::table('unita_immobiliari')->insertGetId($payload); } /** * @param array $attributes */ private function fillUserColumnsIfPresent(User $user, array $attributes): void { $fillable = []; foreach ($attributes as $column => $value) { if (Schema::hasColumn('users', $column)) { $fillable[$column] = $value; } } if ($fillable === []) { return; } $user->forceFill($fillable)->save(); } }