++ elenco dei territori assegnati: pulsante Rientro su ogni riga

Porta alla registrazione del rientro e torna all'elenco (data-ritorno);
solo con il permesso territori.return.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Francesco Picone
2026-10-20 15:32:07 +02:00
parent 699e2ef173
commit eda3c3f989
4 changed files with 27 additions and 2 deletions

View File

@@ -234,6 +234,15 @@ Decisioni successive dell'utente (20 ottobre 2026):
Gli attributi calcolati si chiamano `giacenza_giorni` e `in_priorita`
(erano `home_giorni_giacenza` e `home_is_prioritario`, anche nel PDF).
- "Il mio gruppo" mostra sotto il titolo nome e cognome del sorvegliante.
### Rientro dall'elenco dei territori assegnati (20 ottobre 2026)
Richiesta dell'utente ("un tasto che va alla registrazione", dallo screenshot
della pagina *Assegna* con l'elenco filtrato per proclamatore): in
`ElencoAssegnati` ogni riga ha **Rientro** (solo con `territori.return`), che
apre la registrazione del rientro e, con `data-ritorno`, torna all'elenco.
Anche le righe senza PDF lo hanno. L'elenco ha un tetto di peso per riga
(`AssegnaPrestazioniTest`, 2,6 KB): il pulsante ci sta.
- **Anche i membri si segnalano**: `Proclamatore::gruppo_etichetta`
("Gruppo Zisa" / "Sorvegliante del gruppo Zisa") come badge nell'elenco
(più il filtro *In un gruppo di servizio*, `filtroStato=gruppo`) e in testa

View File

@@ -728,7 +728,8 @@ docker compose --profile dev up -d --build
"Invia link" per riprendere. Anche dall'elenco dei territori assegnati si
può copiare o condividere il link
- L'elenco dei territori assegnati si carica subito dopo la pagina e si filtra
nel browser, senza attese
nel browser, senza attese; ogni territorio ha il pulsante **Rientro**, che
porta alla registrazione del rientro e poi torna all'elenco
- Rientro con calcolo automatico dei giorni
- **Prompt campagna**: se il territorio era fuori durante una campagna viene
chiesto se è stato percorso per la campagna; oltre la soglia "da rientrare"

View File

@@ -51,6 +51,8 @@
@endif
@if($pdfUrl)
<div class="tm-assegnato-link" data-link data-id="{{ $a->id }}" data-messaggio="{{ $a->messaggioLink($pdfUrl) }}" data-titolo="Territorio N° {{ $a->territorio?->numero }}">
{{-- Registra il rientro; finito, si torna qui (data-ritorno) --}}
@can('territori.return')<x-btn data-ritorno variante="primary" dimensione="sm" :href="route('assegnazioni.rientra', $a)">Rientro</x-btn>@endcan
<code x-on:click="window.getSelection().selectAllChildren($el)">{{ $pdfUrl }}</code>
<x-btn variante="secondary" tono="tenue" dimensione="sm" icona class="tm-copia" x-on:click="copia($el)" title="Copia link" aria-label="Copia il link del PDF"><svg aria-hidden="true"><use href="#tm-i-copia"/></svg><svg aria-hidden="true"><use href="#tm-i-spunta"/></svg></x-btn>
{{-- Condividi: menu di condivisione del telefono, solo dove il browser lo offre (elencoCercabile.condividi). --}}
@@ -59,7 +61,10 @@
<x-btn :variante="$a->link_sent ? 'primary' : 'secondary'" tono="tenue" dimensione="sm" wire:click="toggleLinkSent({{ $a->id }})" aria-pressed="{{ $a->link_sent ? 'true' : 'false' }}" title="{{ $a->link_sent ? 'Link inviato — clicca per annullare' : 'Segna come inviato' }}"><svg aria-hidden="true"><use href="{{ $a->link_sent ? '#tm-i-spunta' : '#tm-i-invio' }}"/></svg> {{ $a->link_sent ? 'Link inviato' : 'Non inviato' }}</x-btn>
</div>
@else
<div class="tm-assegnato-link">
@can('territori.return')<x-btn data-ritorno variante="primary" dimensione="sm" :href="route('assegnazioni.rientra', $a)">Rientro</x-btn>@endcan
<p class="tm-assegnato-senza">Nessun PDF disponibile</p>
</div>
@endif
</div>
@endforeach

View File

@@ -260,4 +260,14 @@ class InvioLinkTest extends TestCase
->get(route('territori.index'))
->assertSee(route('piantine.editor', ['nuovo' => 1]), false);
}
public function test_dall_elenco_degli_assegnati_si_va_al_rientro(): void
{
$this->assegna($this->mario(), $this->territorioConPdf('7'));
$a = Assegnazione::sole();
Livewire::withoutLazyLoading()->actingAs($this->admin)->test(ElencoAssegnati::class)
->assertSee('Rientro')
->assertSee(route('assegnazioni.rientra', $a), false);
}
}