netgescon-day0/database/seeders/RubricaUnicaSeeder.php

216 lines
10 KiB
PHP
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\Persona;
use App\Models\PersonaUnitaRelazione;
use App\Models\UnitaImmobiliare;
use App\Models\PersonaEmailMultipla;
class RubricaUnicaSeeder extends Seeder
{
/**
* Popola la rubrica unica con dati di test realistici
*/
public function run()
{
// 1⃣ PERSONE FISICHE
$personeFisiche = [
[
'tipologia' => 'fisica',
'cognome' => 'Rossi',
'nome' => 'Mario',
'codice_fiscale' => 'RSSMRA70A01H501Z',
'telefono_principale' => '+393331234567',
'email_principale' => 'mario.rossi@email.it',
'data_nascita' => '1970-01-01',
'residenza_via' => 'Via Roma, 123',
'consenso_privacy' => true,
'modalita_comunicazione_preferita' => 'email'
],
[
'tipologia' => 'fisica',
'cognome' => 'Bianchi',
'nome' => 'Anna',
'codice_fiscale' => 'BNCNNA80B15F205Y',
'telefono_principale' => '+393339876543',
'email_principale' => 'anna.bianchi@gmail.com',
'data_nascita' => '1980-02-15',
'residenza_via' => 'Via Milano, 45',
'consenso_privacy' => true,
'modalita_comunicazione_preferita' => 'whatsapp',
'whatsapp' => '+393339876543'
],
[
'tipologia' => 'fisica',
'cognome' => 'Verdi',
'nome' => 'Giuseppe',
'codice_fiscale' => 'VRDGPP65C10L736X',
'telefono_principale' => '+393355678901',
'email_principale' => 'g.verdi@hotmail.com',
'data_nascita' => '1965-03-10',
'residenza_via' => 'Corso Italia, 67',
'consenso_privacy' => true,
'modalita_comunicazione_preferita' => 'telefono'
],
[
'tipologia' => 'fisica',
'cognome' => 'Ferrari',
'nome' => 'Laura',
'codice_fiscale' => 'FRRLRA75D20H501W',
'telefono_principale' => '+393348765432',
'email_principale' => 'laura.ferrari@libero.it',
'data_nascita' => '1975-04-20',
'residenza_via' => 'Via Garibaldi, 89',
'consenso_privacy' => true,
'modalita_comunicazione_preferita' => 'sms'
],
[
'tipologia' => 'fisica',
'cognome' => 'Conti',
'nome' => 'Roberto',
'codice_fiscale' => 'CNTRBT85E30L219V',
'telefono_principale' => '+393391234567',
'email_principale' => 'roberto.conti@yahoo.it',
'data_nascita' => '1985-05-30',
'residenza_via' => 'Piazza Duomo, 12',
'consenso_privacy' => false,
'modalita_comunicazione_preferita' => 'posta'
]
];
// 2⃣ PERSONE GIURIDICHE
$personeGiuridiche = [
[
'tipologia' => 'giuridica',
'cognome' => 'Immobiliare',
'nome' => 'Milano',
'ragione_sociale' => 'Immobiliare Milano S.r.l.',
'codice_fiscale' => '12345678901',
'partita_iva' => '12345678901',
'forma_giuridica' => 'S.r.l.',
'telefono_principale' => '+390212345678',
'email_principale' => 'info@immobiliaremilano.it',
'email_pec' => 'immobiliaremilano@pec.it',
'residenza_via' => 'Via Montenapoleone, 1',
'consenso_privacy' => true,
'modalita_comunicazione_preferita' => 'email'
],
[
'tipologia' => 'giuridica',
'cognome' => 'Costruzioni',
'nome' => 'Roma',
'ragione_sociale' => 'Costruzioni Roma S.p.A.',
'codice_fiscale' => '98765432109',
'partita_iva' => '98765432109',
'forma_giuridica' => 'S.p.A.',
'telefono_principale' => '+390687654321',
'email_principale' => 'amministrazione@costruzioniroma.it',
'email_pec' => 'costruzioniroma@pec.it',
'residenza_via' => 'Via del Corso, 234',
'consenso_privacy' => true,
'modalita_comunicazione_preferita' => 'email'
]
];
// 3⃣ DITTE INDIVIDUALI
$ditteIndividuali = [
[
'tipologia' => 'ditta_individuale',
'cognome' => 'Fontana',
'nome' => 'Marco',
'ragione_sociale' => 'Ditta Individuale Fontana Marco',
'codice_fiscale' => 'FNTMRC78F12L736Z',
'partita_iva' => '11223344556',
'telefono_principale' => '+393357788990',
'email_principale' => 'marco.fontana@business.it',
'data_nascita' => '1978-06-12',
'residenza_via' => 'Via Venezia, 56',
'consenso_privacy' => true,
'modalita_comunicazione_preferita' => 'email'
]
];
// Crea le persone
$personeCreate = [];
foreach (array_merge($personeFisiche, $personeGiuridiche, $ditteIndividuali) as $datiPersona) {
$persona = Persona::create($datiPersona);
$personeCreate[] = $persona;
echo "✅ Creata persona: {$persona->nome_completo} ({$persona->codice_interno})\n";
}
// 4⃣ AGGIUNGI EMAIL MULTIPLE (solo per alcune persone)
$emailAggiuntive = [
['persona_id' => $personeCreate[0]->id, 'email' => 'mario.rossi.lavoro@azienda.it', 'tipo_email' => 'lavoro'],
['persona_id' => $personeCreate[1]->id, 'email' => 'anna.bianchi.personale@outlook.com', 'tipo_email' => 'personale'],
['persona_id' => $personeCreate[5]->id, 'email' => 'commerciale@immobiliaremilano.it', 'tipo_email' => 'commerciale'],
['persona_id' => $personeCreate[5]->id, 'email' => 'tecnico@immobiliaremilano.it', 'tipo_email' => 'tecnico'],
];
foreach ($emailAggiuntive as $emailData) {
PersonaEmailMultipla::create($emailData);
}
// 5⃣ COLLEGA PERSONE ALLE UNITÀ IMMOBILIARI (se esistono)
$unita = UnitaImmobiliare::limit(10)->get();
// Creo un mapping persona_id => persona per facilitare l'accesso
$personeMap = [];
foreach ($personeCreate as $persona) {
$personeMap[$persona->id] = $persona;
}
if ($unita->count() > 0) {
$relazioniDaCreare = [
// Mario Rossi - Proprietario di due unità
['persona_id' => $personeCreate[0]->id, 'unita_id' => $unita[0]->id ?? null, 'tipo_relazione' => 'proprietario', 'quota_relazione' => 100.00, 'data_inizio' => '2020-01-15'],
['persona_id' => $personeCreate[0]->id, 'unita_id' => $unita[1]->id ?? null, 'tipo_relazione' => 'proprietario', 'quota_relazione' => 50.00, 'data_inizio' => '2021-03-20'],
// Anna Bianchi - Comproprietaria
['persona_id' => $personeCreate[1]->id, 'unita_id' => $unita[1]->id ?? null, 'tipo_relazione' => 'comproprietario', 'quota_relazione' => 50.00, 'data_inizio' => '2021-03-20'],
// Giuseppe Verdi - Inquilino
['persona_id' => $personeCreate[2]->id, 'unita_id' => $unita[2]->id ?? null, 'tipo_relazione' => 'inquilino', 'quota_relazione' => null, 'data_inizio' => '2023-01-01'],
// Laura Ferrari - Usufruttuaria
['persona_id' => $personeCreate[3]->id, 'unita_id' => $unita[3]->id ?? null, 'tipo_relazione' => 'usufruttuario', 'quota_relazione' => null, 'data_inizio' => '2022-06-01'],
// Roberto Conti - Delegato Assemblea
['persona_id' => $personeCreate[4]->id, 'unita_id' => $unita[0]->id ?? null, 'tipo_relazione' => 'delegato_assemblea', 'quota_relazione' => null, 'data_inizio' => '2023-12-01', 'vota_assemblea' => true],
// Immobiliare Milano - Proprietaria di unità commerciale
['persona_id' => $personeCreate[5]->id, 'unita_id' => $unita[4]->id ?? null, 'tipo_relazione' => 'proprietario', 'quota_relazione' => 100.00, 'data_inizio' => '2019-05-10'],
// Marco Fontana - Referente per Costruzioni Roma
['persona_id' => $personeCreate[7]->id, 'unita_id' => $unita[5]->id ?? null, 'tipo_relazione' => 'referente', 'quota_relazione' => null, 'data_inizio' => '2023-01-01'],
];
foreach ($relazioniDaCreare as $relazione) {
if ($relazione['unita_id'] && isset($personeMap[$relazione['persona_id']])) {
PersonaUnitaRelazione::create([
'persona_id' => $relazione['persona_id'],
'unita_id' => $relazione['unita_id'],
'tipo_relazione' => $relazione['tipo_relazione'],
'quota_relazione' => $relazione['quota_relazione'],
'data_inizio' => $relazione['data_inizio'],
'attivo' => true,
'riceve_comunicazioni' => true,
'riceve_convocazioni' => in_array($relazione['tipo_relazione'], ['proprietario', 'comproprietario', 'usufruttuario', 'delegato_assemblea']),
'vota_assemblea' => $relazione['vota_assemblea'] ?? in_array($relazione['tipo_relazione'], ['proprietario', 'comproprietario', 'usufruttuario', 'delegato_assemblea'])
]);
echo "🔗 Collegata relazione: {$personeMap[$relazione['persona_id']]->nome_completo} -> {$relazione['tipo_relazione']}\n";
}
}
}
echo "\n🎉 Rubrica Unica popolata con successo!\n";
echo "📊 Totale persone create: " . count($personeCreate) . "\n";
echo "📧 Email aggiuntive create: " . count($emailAggiuntive) . "\n";
echo "🔗 Relazioni create: " . (isset($relazioniDaCreare) ? count(array_filter($relazioniDaCreare, fn($r) => $r['unita_id'])) : 0) . "\n";
}
}