++ fix grafica e compilazione s-13

This commit is contained in:
2026-07-28 17:52:22 +02:00
parent 710a2720e4
commit b30b87e74a
2 changed files with 168 additions and 42 deletions

View File

@@ -249,9 +249,9 @@ class Registro extends Component
private function impaginaS13(\Illuminate\Support\Collection $righe): \Illuminate\Support\Collection
{
$vuota = [
'numero' => '',
'rientro_precedente' => '',
'assegnazioni' => $this->completaCelleS13([]),
'numero' => '',
'riporto' => ['nome' => '', 'data' => ''],
'assegnazioni' => $this->completaCelleS13([]),
];
$pagine = $righe->isEmpty()
@@ -292,9 +292,10 @@ class Registro extends Component
return $assegnazioni
->map(function ($gruppo, $territorioId) use ($rientriPrecedenti) {
// Se un territorio è girato più di quattro volte nell'anno il
// modulo non ha spazio per tutte: si stampano le ultime
// quattro, mantenendo l'ordine cronologico da sinistra.
$gruppo = $gruppo->values();
// I quattro gruppi "Assegnato a" ospitano le ultime quattro
// assegnazioni, in ordine cronologico da sinistra.
$ultime = $gruppo->slice(-self::S13_ASSEGNAZIONI_PER_RIGA)->values();
$celle = $ultime->map(fn (Assegnazione $a) => [
@@ -303,18 +304,55 @@ class Registro extends Component
'restituito_il' => $a->returned_at?->format('d/m/Y') ?? '',
])->all();
$rientro = $rientriPrecedenti->get($territorioId);
return [
'numero' => $gruppo->first()->territorio?->numero ?? '',
'rientro_precedente' => $rientro ? \Carbon\Carbon::parse($rientro)->format('d/m/Y') : '',
'assegnazioni' => $this->completaCelleS13($celle),
'numero' => $gruppo->first()->territorio?->numero ?? '',
'riporto' => $this->riportoS13($gruppo, $rientriPrecedenti->get($territorioId)),
'assegnazioni' => $this->completaCelleS13($celle),
];
})
->sort(fn (array $a, array $b) => strnatcasecmp((string) $a['numero'], (string) $b['numero']))
->values();
}
/**
* Contenuto della colonna "Restituito l'ultima volta il", che funziona da
* quinta casella della riga.
*
* Quando le assegnazioni dell'anno superano le quattro che i gruppi
* "Assegnato a" possono ospitare, la colonna accoglie quella
* immediatamente precedente alle quattro mostrate — nome e data di
* rientro — così la riga copre cinque passaggi invece di quattro. In quel
* caso il riporto dell'anno precedente non ha più senso: la continuità
* con il passato ce l'ha già l'assegnazione in colonna.
*
* Con quattro o meno assegnazioni nell'anno la colonna torna al suo uso
* da modulo: l'ultima data di rientro dell'anno di servizio precedente,
* senza nome.
*
* @param \Illuminate\Support\Collection<int, Assegnazione> $gruppo
* @return array{nome: string, data: string}
*/
private function riportoS13(\Illuminate\Support\Collection $gruppo, ?string $rientroAnnoPrecedente): array
{
$eccedenti = $gruppo->count() - self::S13_ASSEGNAZIONI_PER_RIGA;
if ($eccedenti > 0) {
$precedente = $gruppo->get($eccedenti - 1);
return [
'nome' => $precedente->proclamatore?->nome_completo ?? '',
'data' => $precedente->returned_at?->format('d/m/Y') ?? '',
];
}
return [
'nome' => '',
'data' => $rientroAnnoPrecedente
? \Carbon\Carbon::parse($rientroAnnoPrecedente)->format('d/m/Y')
: '',
];
}
/**
* Ultima data di rientro di ogni territorio *precedente* all'inizio
* dell'anno di servizio: è il dato che la colonna "Restituito l'ultima