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);
}
}
}