331 lines
12 KiB
PHP
Executable File
331 lines
12 KiB
PHP
Executable File
<?php
|
|
namespace Database\Seeders;
|
|
|
|
use App\Models\Proprieta;
|
|
use App\Models\Soggetto;
|
|
use App\Models\Stabile;
|
|
use App\Models\User;
|
|
use Illuminate\Database\Seeder;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Schema;
|
|
use Spatie\Permission\PermissionRegistrar;
|
|
|
|
class DemoUsersSeeder extends Seeder
|
|
{
|
|
public function run(): void
|
|
{
|
|
app(PermissionRegistrar::class)->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<string, mixed> $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<string, mixed> $lookup
|
|
* @param array<string, mixed> $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<string, mixed> $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();
|
|
}
|
|
}
|