fix(ui): bind persone_unita_relazioni names and exact subentro dates for Interno A/11

This commit is contained in:
michele 2026-08-03 19:54:46 +02:00
parent 92c655d826
commit a0b54cee64
2 changed files with 52 additions and 8 deletions

View File

@ -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')) { if (Schema::hasTable('proprieta')) {
$rowsProp = DB::table('proprieta as pr') $rowsProp = DB::table('proprieta as pr')
->join('anagrafiche as a', 'a.id', '=', 'pr.anagrafica_id') ->join('anagrafiche as a', 'a.id', '=', 'pr.anagrafica_id')

View File

@ -265,14 +265,37 @@ public function table(Table $table): Table
} }
} }
// 3. Fallback secondario su soggetti (anagrafiche dirette) // 3. Fallback/Primary su persone_unita_relazioni + persone
if (empty($condomini)) { if (empty($condomini) && empty($inquilini)) {
$anagrafiche = $record->anagrafiche ?? collect(); $relazioni = \Illuminate\Support\Facades\DB::table('persone_unita_relazioni')
foreach ($anagrafiche as $s) { ->join('persone', 'persone.id', '=', 'persone_unita_relazioni.persona_id')
$nome = $s->ragione_sociale ?: trim($s->nome . ' ' . $s->cognome); ->where('persone_unita_relazioni.unita_id', $record->id)
$cf = $s->codice_fiscale ? " ({$s->codice_fiscale})" : ''; ->select([
if ($nome !== '') { 'persone.nome',
$condomini[] = "<span class='px-1.5 py-0.5 rounded bg-emerald-50 text-emerald-700 border border-emerald-200 text-xxs font-medium mr-1'>C</span><strong>" . e($nome) . "</strong>" . e($cf); '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[] = "<span class='px-1.5 py-0.5 rounded bg-sky-50 text-sky-700 border border-sky-200 text-xxs font-medium mr-1'>I</span><strong>" . e($nome) . "</strong>" . e($cf) . e($qInfo);
} else {
$condomini[] = "<span class='px-1.5 py-0.5 rounded bg-emerald-50 text-emerald-700 border border-emerald-200 text-xxs font-medium mr-1'>C</span><strong>" . e($nome) . "</strong>" . e($cf) . e($qInfo);
} }
} }
} }