++ Assegna aperta da "Assegna ->" della Home: senza l'elenco dei territori assegnati

La richiesta era per la pagina Assegna, non per la scheda del territorio:
annullata la modifica di f1f3408 (storico nascosto nella scheda) e ora il
link "Assegna ->" della Home porta ?dalla_home=1, con cui Assegna non
mostra ne' carica l'elenco "Territori Assegnati".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Francesco Picone
2026-10-20 17:28:56 +02:00
parent f1f340803a
commit 7d479a2c34
9 changed files with 54 additions and 65 deletions

View File

@@ -235,6 +235,18 @@ Decisioni successive dell'utente (20 ottobre 2026):
(erano `home_giorni_giacenza` e `home_is_prioritario`, anche nel PDF).
- "Il mio gruppo" mostra sotto il titolo nome e cognome del sorvegliante.
### Assegna aperta dalla Home: senza l'elenco dei territori assegnati (20 ottobre 2026)
Richiesta dell'utente: "quando provengo da un territorio dalla home, non
mostrare lo storico assegnazioni". Avevo capito la scheda del territorio e
ne avevo nascosto lo storico (commit `f1f3408`, poi annullato con un revert):
intendeva la pagina *Assegna* aperta da "Assegna →" della Home, e come
"storico" l'elenco "Territori Assegnati" sotto il modulo. Ora quel link porta
`?dalla_home=1` e `Assegna::$elencoNascosto` toglie `ElencoAssegnati` (che
così non si carica nemmeno). Dal menu o dalla scheda del territorio l'elenco
c'è come prima. Non si usa il `?da=` del ritorno per capirlo: si trasmette di
pagina in pagina.
### Storico assegnazioni in linea (20 ottobre 2026)
Richiesta dell'utente (screenshot della scheda territorio): le colonne dello
@@ -248,13 +260,6 @@ non diventa una scheda). Ordine esplicito: anni dal più recente
proclamatore la colonna Campagna ora dice "Sì — …" / "No" come in quella del
territorio, e c'è il badge "via gruppo …". Test: `StoricoAssegnazioniTest`.
Poi, su richiesta dell'utente: **aperta dalla Home la scheda del territorio
non mostra lo storico**. I link della Home ("Da assegnare", "Da rientrare")
portano `?dalla_home=1` e `TerritorioShow::$storicoNascosto` salta anche la
query; resta "Mostra lo storico delle assegnazioni". Non si usa il `?da=` del
ritorno per capirlo: si trasmette di pagina in pagina, e un territorio aperto
da *Assegna* (a sua volta aperta dalla Home) sembrerebbe venire dalla Home.
### Rientro dall'elenco dei territori assegnati (20 ottobre 2026)
Richiesta dell'utente ("un tasto che va alla registrazione", dallo screenshot

View File

@@ -700,9 +700,7 @@ docker compose --profile dev up -d --build
- Badge di stato colorati e indicatore di priorità (manuale o automatica)
- Dettaglio con visualizzatore PDF e storico assegnazioni per anno teocratico:
una tabella sola con le colonne in linea, l'anno come riga di separazione,
dal più recente (lo stesso nella scheda del proclamatore). Aperta dalla
Home, la scheda non mostra lo storico ("Mostra lo storico delle
assegnazioni" lo apre)
dal più recente (lo stesso nella scheda del proclamatore)
- Link PDF pubblico condivisibile, a scadenza configurabile
- Soft delete con cestino (ripristino o eliminazione definitiva)
- Import massivo di PDF da cartella o archivio ZIP, elaborato in background
@@ -733,7 +731,8 @@ docker compose --profile dev up -d --build
può copiare o condividere il link
- L'elenco dei territori assegnati si carica subito dopo la pagina e si filtra
nel browser, senza attese; ogni territorio ha il pulsante **Rientro**, che
porta alla registrazione del rientro e poi torna all'elenco
porta alla registrazione del rientro e poi torna all'elenco. Aperta da
"Assegna →" della Home, la pagina mostra solo il modulo, senza l'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

@@ -23,11 +23,19 @@ class Assegna extends Component
// Optional pre-selection from parent context
public ?int $preselectedTerritorioId = null;
/**
* Aperta da "Assegna →" della Home (?dalla_home=1, lo mette solo la Home)
* la pagina serve ad assegnare quel territorio: l'elenco dei territori
* assegnati sotto il modulo non si mostra (né si carica).
*/
public bool $elencoNascosto = false;
public function mount(?int $territorioId = null)
{
$this->preselectedTerritorioId = $territorioId;
$this->territorio_id = $territorioId;
$this->assigned_at = now()->format('Y-m-d');
$this->elencoNascosto = request()->boolean('dalla_home');
// ?invia=<id>: riprende l'invio di un link rimasto in sospeso (dalla
// scheda del territorio).

View File

@@ -13,29 +13,14 @@ class TerritorioShow extends Component
public Territorio $territorio;
/**
* Aperta dalla Home (?dalla_home=1, lo mettono solo i link della Home) la
* scheda non mostra lo storico delle assegnazioni: lì serve il territorio,
* non la sua storia. "Mostra lo storico" lo apre comunque.
*/
public bool $storicoNascosto = false;
public function mount(Territorio $territorio)
{
$this->territorio = $territorio->load(['zona', 'tipologia', 'assegnazioneCorrente.proclamatore', 'ultimaAssegnazione']);
$this->storicoNascosto = request()->boolean('dalla_home');
}
public function mostraStorico(): void
{
$this->storicoNascosto = false;
}
public function render()
{
$assegnazioni = $this->storicoNascosto
? collect()
: Assegnazione::where('territorio_id', $this->territorio->id)
$assegnazioni = Assegnazione::where('territorio_id', $this->territorio->id)
->with(['proclamatore', 'annoTeocratico', 'campagna', 'creatoDa', 'rientratoDa'])
->orderByDesc('assigned_at')
->orderByDesc('id')

View File

@@ -80,6 +80,9 @@
{{-- Elenco dei territori assegnati: componente a sé, caricato subito
dopo la pagina (ElencoAssegnati, #[Lazy]). Le azioni del form non
lo ridisegnano. --}}
lo ridisegnano. Non c'è quando si arriva da "Assegna →" della Home
(Assegna::$elencoNascosto). --}}
@unless($elencoNascosto)
<livewire:assegnazioni.elenco-assegnati />
@endunless
</div>

View File

@@ -109,7 +109,7 @@
<li class="px-5 py-3 flex items-center justify-between hover:bg-gray-50 transition-colors">
<div>
<div class="flex items-center gap-2">
<a data-ritorno href="{{ route('territori.show', ['territorio' => $t, 'dalla_home' => 1]) }}" class="text-sm font-semibold text-gray-900 hover:text-indigo-600 transition-colors">N° {{ $t->numero }}</a>
<a data-ritorno href="{{ route('territori.show', $t) }}" class="text-sm font-semibold text-gray-900 hover:text-indigo-600 transition-colors">N° {{ $t->numero }}</a>
@if($t->in_priorita)
<span class="inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide badge-pulse" style="background:#fef3c7;color:#92400e">★ Prioritario</span>
@endif
@@ -122,7 +122,7 @@
</p>
</div>
@can('territori.assign')
<x-btn data-ritorno variante="primary" tono="tenue" dimensione="sm" :href="route('assegnazioni.assegna', ['territorioId' => $t->id])">Assegna →</x-btn>
<x-btn data-ritorno variante="primary" tono="tenue" dimensione="sm" :href="route('assegnazioni.assegna', ['territorioId' => $t->id, 'dalla_home' => 1])">Assegna →</x-btn>
@endcan
</li>
@empty
@@ -164,7 +164,7 @@
@php($assegnazioneCorrente = $t->assegnazioneCorrente)
<li class="px-5 py-3 flex items-center justify-between hover:bg-gray-50 transition-colors">
<div>
<a data-ritorno href="{{ route('territori.show', ['territorio' => $t, 'dalla_home' => 1]) }}" class="text-sm font-semibold text-gray-900 hover:text-indigo-600 transition-colors">N° {{ $t->numero }}</a>
<a data-ritorno href="{{ route('territori.show', $t) }}" class="text-sm font-semibold text-gray-900 hover:text-indigo-600 transition-colors">N° {{ $t->numero }}</a>
<p class="text-xs text-gray-500">
{{ $assegnazioneCorrente?->proclamatore?->nome_completo }}
— <span class="font-medium" style="color:#dc2626">{{ $assegnazioneCorrente?->giorni }} gg</span>

View File

@@ -152,12 +152,7 @@
</div>
@endif
{{-- Assignment history: non quando si arriva dalla Home (TerritorioShow::$storicoNascosto) --}}
@if($storicoNascosto)
<div class="flex justify-end">
<x-btn variante="ghost" dimensione="sm" wire:click="mostraStorico">Mostra lo storico delle assegnazioni</x-btn>
</div>
@else
{{-- Assignment history --}}
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6">
<div class="flex items-center gap-3 mb-4">
<div class="h-8 w-8 rounded-lg flex items-center justify-center" style="background:#eef2ff">
@@ -218,5 +213,4 @@
</div>
@endif
</div>
@endif
</div>

View File

@@ -261,6 +261,21 @@ class InvioLinkTest extends TestCase
->assertSee(route('piantine.editor', ['nuovo' => 1]), false);
}
public function test_da_assegna_della_home_l_elenco_dei_territori_assegnati_non_c_e(): void
{
$t = $this->territorioConPdf('7');
$daHome = route('assegnazioni.assegna', ['territorioId' => $t->id, 'dalla_home' => 1]);
// "Assegna →" della Home porta il segnale...
$this->actingAs($this->admin)->get(route('dashboard'))->assertOk()->assertSee($daHome, false);
// ...e Assegna non mostra (né carica) l'elenco dei territori assegnati.
$this->get($daHome)->assertOk()->assertDontSee('assegnazioni.elenco-assegnati', false);
// Aperta dal menu o dalla scheda del territorio, l'elenco c'è.
$this->get(route('assegnazioni.assegna'))->assertSee('assegnazioni.elenco-assegnati', false);
$this->get(route('assegnazioni.assegna', ['territorioId' => $t->id]))->assertSee('assegnazioni.elenco-assegnati', false);
}
public function test_dall_elenco_degli_assegnati_si_va_al_rientro(): void
{
$this->assegna($this->mario(), $this->territorioConPdf('7'));

View File

@@ -62,26 +62,6 @@ class StoricoAssegnazioniTest extends TestCase
$this->assertSame(2, substr_count($html, 'tm-riga-gruppo'));
}
public function test_aperta_dalla_home_la_scheda_del_territorio_non_mostra_lo_storico(): void
{
// La Home manda alla scheda con il segnale dalla_home.
$this->actingAs($this->admin)->get(route('dashboard'))->assertOk()
->assertSee(route('territori.show', ['territorio' => $this->territorio, 'dalla_home' => 1]), false);
$this->get(route('territori.show', ['territorio' => $this->territorio, 'dalla_home' => 1]))->assertOk()
->assertDontSee('Storico Assegnazioni')
->assertDontSee('Anno Teocratico')
->assertSee('Mostra lo storico delle assegnazioni');
// Su richiesta si apre; aperta da altrove c'è sempre.
\Livewire\Livewire::actingAs($this->admin)->withQueryParams(['dalla_home' => 1])
->test(\App\Livewire\Territori\TerritorioShow::class, ['territorio' => $this->territorio])
->assertDontSee('Anno Teocratico')
->call('mostraStorico')
->assertSee('Anno Teocratico 2025-2026');
$this->get(route('territori.show', $this->territorio))->assertSee('Storico Assegnazioni');
}
public function test_nella_scheda_del_proclamatore_una_tabella_sola_dal_piu_recente(): void
{
$html = $this->actingAs($this->admin)->get(route('proclamatori.show', $this->proclamatore))->assertOk()