diff --git a/app/Filament/Pages/Condomini/CatastoHub.php b/app/Filament/Pages/Condomini/CatastoHub.php index 225bf1a..7e7361e 100644 --- a/app/Filament/Pages/Condomini/CatastoHub.php +++ b/app/Filament/Pages/Condomini/CatastoHub.php @@ -388,6 +388,27 @@ public function loadUnitaList(): void } } + if (Schema::hasTable('persone_unita_relazioni')) { + $rowsRel = DB::table('persone_unita_relazioni as pur') + ->join('persone as p', 'p.id', '=', 'pur.persona_id') + ->whereIn('pur.unita_id', $unitaIds) + ->select('pur.unita_id as unita_immobiliare_id', 'p.cognome', 'p.nome', 'p.ragione_sociale') + ->distinct() + ->get(); + + foreach ($rowsRel as $row) { + $nomeCompleto = $row->ragione_sociale ?: trim("{$row->cognome} {$row->nome}"); + if ($nomeCompleto !== '') { + if (!isset($proprietariMap[$row->unita_immobiliare_id])) { + $proprietariMap[$row->unita_immobiliare_id] = []; + } + if (!in_array($nomeCompleto, $proprietariMap[$row->unita_immobiliare_id])) { + $proprietariMap[$row->unita_immobiliare_id][] = $nomeCompleto; + } + } + } + } + if (Schema::hasTable('proprieta')) { $rowsProp = DB::table('proprieta as pr') ->join('anagrafiche as a', 'a.id', '=', 'pr.anagrafica_id') diff --git a/app/Filament/Pages/Condomini/UnitaImmobiliariArchivio.php b/app/Filament/Pages/Condomini/UnitaImmobiliariArchivio.php index de7e809..e7ada5c 100755 --- a/app/Filament/Pages/Condomini/UnitaImmobiliariArchivio.php +++ b/app/Filament/Pages/Condomini/UnitaImmobiliariArchivio.php @@ -265,14 +265,37 @@ public function table(Table $table): Table } } - // 3. Fallback secondario su soggetti (anagrafiche dirette) - if (empty($condomini)) { - $anagrafiche = $record->anagrafiche ?? collect(); - foreach ($anagrafiche as $s) { - $nome = $s->ragione_sociale ?: trim($s->nome . ' ' . $s->cognome); - $cf = $s->codice_fiscale ? " ({$s->codice_fiscale})" : ''; - if ($nome !== '') { - $condomini[] = "C" . e($nome) . "" . e($cf); + // 3. Fallback/Primary su persone_unita_relazioni + persone + if (empty($condomini) && empty($inquilini)) { + $relazioni = \Illuminate\Support\Facades\DB::table('persone_unita_relazioni') + ->join('persone', 'persone.id', '=', 'persone_unita_relazioni.persona_id') + ->where('persone_unita_relazioni.unita_id', $record->id) + ->select([ + 'persone.nome', + 'persone.cognome', + 'persone.ragione_sociale', + 'persone.codice_fiscale', + 'persone_unita_relazioni.tipo_relazione', + 'persone_unita_relazioni.ruolo_rate', + 'persone_unita_relazioni.quota_relazione', + 'persone_unita_relazioni.data_inizio', + 'persone_unita_relazioni.data_fine', + ]) + ->get(); + + foreach ($relazioni as $rel) { + $nome = $rel->ragione_sociale ?: trim($rel->nome . ' ' . $rel->cognome); + if ($nome === '') { + continue; + } + $cf = $rel->codice_fiscale ? " ({$rel->codice_fiscale})" : ''; + $qInfo = $rel->quota_relazione && (float)$rel->quota_relazione > 0 && (float)$rel->quota_relazione < 100 ? " [" . (float)$rel->quota_relazione . "%]" : ''; + $role = strtolower(trim((string)($rel->tipo_relazione ?? $rel->ruolo_rate ?? ''))); + + if (str_contains($role, 'inquilin') || $role === 'i') { + $inquilini[] = "I" . e($nome) . "" . e($cf) . e($qInfo); + } else { + $condomini[] = "C" . e($nome) . "" . e($cf) . e($qInfo); } } }