fix(unita): add fallback timeline population and normalize inquilini quota split and start dates for active gestion (task-d095b0e23b)
This commit is contained in:
parent
90ec7461cc
commit
dadee62d20
|
|
@ -1256,6 +1256,7 @@ public function hydrateNominativiStorici(): void
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
if ($rows->isEmpty()) {
|
if ($rows->isEmpty()) {
|
||||||
|
$this->populateNominativiStoriciFallback();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1344,6 +1345,107 @@ public function hydrateNominativiStorici(): void
|
||||||
'detail' => $details === [] ? null : implode(' · ', $details),
|
'detail' => $details === [] ? null : implode(' · ', $details),
|
||||||
];
|
];
|
||||||
})->all();
|
})->all();
|
||||||
|
|
||||||
|
if (empty($this->nominativiStorici)) {
|
||||||
|
$this->populateNominativiStoriciFallback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function populateNominativiStoriciFallback(): void
|
||||||
|
{
|
||||||
|
$fallbackList = [];
|
||||||
|
|
||||||
|
if (! $this->unita) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DbSchema::hasTable('persone_unita_relazioni') && DbSchema::hasTable('persone')) {
|
||||||
|
$purRows = DB::table('persone_unita_relazioni as pur')
|
||||||
|
->join('persone as p', 'pur.persona_id', '=', 'p.id')
|
||||||
|
->where('pur.unita_id', $this->unita->id)
|
||||||
|
->orderBy('pur.data_inizio')
|
||||||
|
->orderByDesc('pur.id')
|
||||||
|
->select('pur.*', 'p.cognome', 'p.nome', 'p.ragione_sociale', 'p.codice_fiscale')
|
||||||
|
->get();
|
||||||
|
|
||||||
|
foreach ($purRows as $r) {
|
||||||
|
$nome = trim((string) ($r->ragione_sociale ?? ''));
|
||||||
|
if ($nome === '') {
|
||||||
|
$nome = trim(($r->cognome ?? '') . ' ' . ($r->nome ?? ''));
|
||||||
|
}
|
||||||
|
if ($nome === '') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$inizio = $r->data_inizio ? Carbon::parse($r->data_inizio)->format('d/m/Y') : null;
|
||||||
|
$fine = $r->data_fine ? Carbon::parse($r->data_fine)->format('d/m/Y') : null;
|
||||||
|
$periodo = ($inizio && $fine) ? ('Da ' . $inizio . ' · fino a ' . $fine) : ($inizio ? ('Da ' . $inizio) : ($fine ? ('Fino al ' . $fine) : 'Da sempre'));
|
||||||
|
|
||||||
|
$quota = is_numeric($r->quota_relazione) ? (number_format((float) $r->quota_relazione, 2, ',', '.') . '%') : null;
|
||||||
|
$ruolo = ucfirst(strtolower((string) ($r->tipo_relazione ?? 'Condomino')));
|
||||||
|
|
||||||
|
$fallbackList[] = [
|
||||||
|
'ruolo' => $ruolo,
|
||||||
|
'nominativo' => $nome,
|
||||||
|
'periodo' => $periodo,
|
||||||
|
'percentuale' => $quota,
|
||||||
|
'fonte' => 'Anagrafica consolidata',
|
||||||
|
'detail' => $r->codice_fiscale ? ('CF: ' . $r->codice_fiscale) : null,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($fallbackList) && DbSchema::hasTable('rubrica_ruoli') && DbSchema::hasTable('rubrica_universale')) {
|
||||||
|
$rrRows = DB::table('rubrica_ruoli as rr')
|
||||||
|
->join('rubrica_universale as ru', 'rr.rubrica_id', '=', 'ru.id')
|
||||||
|
->where('rr.unita_immobiliare_id', $this->unita->id)
|
||||||
|
->orderBy('rr.data_inizio')
|
||||||
|
->orderByDesc('rr.id')
|
||||||
|
->select('rr.*', 'ru.cognome', 'ru.nome', 'ru.ragione_sociale', 'ru.codice_fiscale')
|
||||||
|
->get();
|
||||||
|
|
||||||
|
foreach ($rrRows as $r) {
|
||||||
|
$nome = trim((string) ($r->ragione_sociale ?? ''));
|
||||||
|
if ($nome === '') {
|
||||||
|
$nome = trim(($r->cognome ?? '') . ' ' . ($r->nome ?? ''));
|
||||||
|
}
|
||||||
|
if ($nome === '') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$inizio = $r->data_inizio ? Carbon::parse($r->data_inizio)->format('d/m/Y') : null;
|
||||||
|
$fine = $r->data_fine ? Carbon::parse($r->data_fine)->format('d/m/Y') : null;
|
||||||
|
$periodo = ($inizio && $fine) ? ('Da ' . $inizio . ' · fino a ' . $fine) : ($inizio ? ('Da ' . $inizio) : ($fine ? ('Fino al ' . $fine) : 'Da sempre'));
|
||||||
|
|
||||||
|
$ruolo = ucfirst(strtolower((string) ($r->ruolo_standard ?? 'Condomino')));
|
||||||
|
|
||||||
|
$fallbackList[] = [
|
||||||
|
'ruolo' => $ruolo,
|
||||||
|
'nominativo' => $nome,
|
||||||
|
'periodo' => $periodo,
|
||||||
|
'percentuale' => null,
|
||||||
|
'fonte' => 'Rubrica universale',
|
||||||
|
'detail' => $r->codice_fiscale ? ('CF: ' . $r->codice_fiscale) : null,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($fallbackList)) {
|
||||||
|
foreach (['proprietari', 'inquilini'] as $relType) {
|
||||||
|
foreach ($this->relazioniPerTipo[$relType] ?? [] as $rel) {
|
||||||
|
$fallbackList[] = [
|
||||||
|
'ruolo' => $relType === 'inquilini' ? 'Inquilino' : 'Proprietario',
|
||||||
|
'nominativo' => $rel['nome'] ?? '—',
|
||||||
|
'periodo' => $rel['data_inizio'] ? ('Da ' . $rel['data_inizio']) : 'Da sempre',
|
||||||
|
'percentuale' => isset($rel['quota']) && is_numeric($rel['quota']) ? (number_format((float) $rel['quota'], 2, ',', '.') . '%') : null,
|
||||||
|
'fonte' => 'Relazione attiva',
|
||||||
|
'detail' => ! empty($rel['codice_fiscale']) ? ('CF: ' . $rel['codice_fiscale']) : null,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->nominativiStorici = $fallbackList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function hydrateRecapitiServizio(): void
|
public function hydrateRecapitiServizio(): void
|
||||||
|
|
@ -3099,9 +3201,27 @@ protected function hydrateRelazioni(): void
|
||||||
$inquilini = $inquilini->filter(fn($r) => $isRelazioneCorrenteNelAnno($r, $activeAnno))->values();
|
$inquilini = $inquilini->filter(fn($r) => $isRelazioneCorrenteNelAnno($r, $activeAnno))->values();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$inqArr = $inquilini->values()->all();
|
||||||
|
$inqCount = count($inqArr);
|
||||||
|
if ($inqCount > 0) {
|
||||||
|
$equalQuota = round(100.0 / $inqCount, 2);
|
||||||
|
$startOfYearDate = '01/01/' . $activeAnno;
|
||||||
|
|
||||||
|
foreach ($inqArr as $idx => $inq) {
|
||||||
|
if ($inq['quota'] === null || (float)$inq['quota'] <= 0) {
|
||||||
|
$inqArr[$idx]['quota'] = $equalQuota;
|
||||||
|
$inqArr[$idx]['quota_label'] = number_format($equalQuota, 2, ',', '.');
|
||||||
|
}
|
||||||
|
$dInizio = trim((string) ($inq['data_inizio'] ?? ''));
|
||||||
|
if ($dInizio === '' || $dInizio === 'Da 01/01/2000' || $dInizio === '01/01/2000') {
|
||||||
|
$inqArr[$idx]['data_inizio'] = $startOfYearDate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$this->relazioniPerTipo = [
|
$this->relazioniPerTipo = [
|
||||||
'proprietari' => $proprietari->values()->all(),
|
'proprietari' => $proprietari->values()->all(),
|
||||||
'inquilini' => $inquilini->values()->all(),
|
'inquilini' => $inqArr,
|
||||||
'altri' => $altri->values()->all(),
|
'altri' => $altri->values()->all(),
|
||||||
'storico' => $relazioniStoriche,
|
'storico' => $relazioniStoriche,
|
||||||
];
|
];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user