++ 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:
19
HANDOFF.md
19
HANDOFF.md
@@ -235,6 +235,18 @@ Decisioni successive dell'utente (20 ottobre 2026):
|
|||||||
(erano `home_giorni_giacenza` e `home_is_prioritario`, anche nel PDF).
|
(erano `home_giorni_giacenza` e `home_is_prioritario`, anche nel PDF).
|
||||||
- "Il mio gruppo" mostra sotto il titolo nome e cognome del sorvegliante.
|
- "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)
|
### Storico assegnazioni in linea (20 ottobre 2026)
|
||||||
|
|
||||||
Richiesta dell'utente (screenshot della scheda territorio): le colonne dello
|
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
|
proclamatore la colonna Campagna ora dice "Sì — …" / "No" come in quella del
|
||||||
territorio, e c'è il badge "via gruppo …". Test: `StoricoAssegnazioniTest`.
|
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)
|
### Rientro dall'elenco dei territori assegnati (20 ottobre 2026)
|
||||||
|
|
||||||
Richiesta dell'utente ("un tasto che va alla registrazione", dallo screenshot
|
Richiesta dell'utente ("un tasto che va alla registrazione", dallo screenshot
|
||||||
|
|||||||
@@ -700,9 +700,7 @@ docker compose --profile dev up -d --build
|
|||||||
- Badge di stato colorati e indicatore di priorità (manuale o automatica)
|
- Badge di stato colorati e indicatore di priorità (manuale o automatica)
|
||||||
- Dettaglio con visualizzatore PDF e storico assegnazioni per anno teocratico:
|
- Dettaglio con visualizzatore PDF e storico assegnazioni per anno teocratico:
|
||||||
una tabella sola con le colonne in linea, l'anno come riga di separazione,
|
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
|
dal più recente (lo stesso nella scheda del proclamatore)
|
||||||
Home, la scheda non mostra lo storico ("Mostra lo storico delle
|
|
||||||
assegnazioni" lo apre)
|
|
||||||
- Link PDF pubblico condivisibile, a scadenza configurabile
|
- Link PDF pubblico condivisibile, a scadenza configurabile
|
||||||
- Soft delete con cestino (ripristino o eliminazione definitiva)
|
- Soft delete con cestino (ripristino o eliminazione definitiva)
|
||||||
- Import massivo di PDF da cartella o archivio ZIP, elaborato in background
|
- 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
|
può copiare o condividere il link
|
||||||
- L'elenco dei territori assegnati si carica subito dopo la pagina e si filtra
|
- 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
|
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
|
- Rientro con calcolo automatico dei giorni
|
||||||
- **Prompt campagna**: se il territorio era fuori durante una campagna viene
|
- **Prompt campagna**: se il territorio era fuori durante una campagna viene
|
||||||
chiesto se è stato percorso per la campagna; oltre la soglia "da rientrare"
|
chiesto se è stato percorso per la campagna; oltre la soglia "da rientrare"
|
||||||
|
|||||||
@@ -23,11 +23,19 @@ class Assegna extends Component
|
|||||||
// Optional pre-selection from parent context
|
// Optional pre-selection from parent context
|
||||||
public ?int $preselectedTerritorioId = null;
|
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)
|
public function mount(?int $territorioId = null)
|
||||||
{
|
{
|
||||||
$this->preselectedTerritorioId = $territorioId;
|
$this->preselectedTerritorioId = $territorioId;
|
||||||
$this->territorio_id = $territorioId;
|
$this->territorio_id = $territorioId;
|
||||||
$this->assigned_at = now()->format('Y-m-d');
|
$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
|
// ?invia=<id>: riprende l'invio di un link rimasto in sospeso (dalla
|
||||||
// scheda del territorio).
|
// scheda del territorio).
|
||||||
|
|||||||
@@ -13,36 +13,21 @@ class TerritorioShow extends Component
|
|||||||
|
|
||||||
public Territorio $territorio;
|
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)
|
public function mount(Territorio $territorio)
|
||||||
{
|
{
|
||||||
$this->territorio = $territorio->load(['zona', 'tipologia', 'assegnazioneCorrente.proclamatore', 'ultimaAssegnazione']);
|
$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()
|
public function render()
|
||||||
{
|
{
|
||||||
$assegnazioni = $this->storicoNascosto
|
$assegnazioni = Assegnazione::where('territorio_id', $this->territorio->id)
|
||||||
? collect()
|
->with(['proclamatore', 'annoTeocratico', 'campagna', 'creatoDa', 'rientratoDa'])
|
||||||
: Assegnazione::where('territorio_id', $this->territorio->id)
|
->orderByDesc('assigned_at')
|
||||||
->with(['proclamatore', 'annoTeocratico', 'campagna', 'creatoDa', 'rientratoDa'])
|
->orderByDesc('id')
|
||||||
->orderByDesc('assigned_at')
|
->get()
|
||||||
->orderByDesc('id')
|
->groupBy(fn($a) => $a->annoTeocratico->label)
|
||||||
->get()
|
// Dal più recente: gli anni ("2026-2027") si ordinano come testo.
|
||||||
->groupBy(fn($a) => $a->annoTeocratico->label)
|
->sortKeysDesc();
|
||||||
// Dal più recente: gli anni ("2026-2027") si ordinano come testo.
|
|
||||||
->sortKeysDesc();
|
|
||||||
|
|
||||||
return view('livewire.territori.territorio-show', [
|
return view('livewire.territori.territorio-show', [
|
||||||
'activeAssignment' => $this->territorio->assegnazioneCorrente,
|
'activeAssignment' => $this->territorio->assegnazioneCorrente,
|
||||||
|
|||||||
@@ -80,6 +80,9 @@
|
|||||||
|
|
||||||
{{-- Elenco dei territori assegnati: componente a sé, caricato subito
|
{{-- Elenco dei territori assegnati: componente a sé, caricato subito
|
||||||
dopo la pagina (ElencoAssegnati, #[Lazy]). Le azioni del form non
|
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 />
|
<livewire:assegnazioni.elenco-assegnati />
|
||||||
|
@endunless
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -109,7 +109,7 @@
|
|||||||
<li class="px-5 py-3 flex items-center justify-between hover:bg-gray-50 transition-colors">
|
<li class="px-5 py-3 flex items-center justify-between hover:bg-gray-50 transition-colors">
|
||||||
<div>
|
<div>
|
||||||
<div class="flex items-center gap-2">
|
<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)
|
@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>
|
<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
|
@endif
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@can('territori.assign')
|
@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
|
@endcan
|
||||||
</li>
|
</li>
|
||||||
@empty
|
@empty
|
||||||
@@ -164,7 +164,7 @@
|
|||||||
@php($assegnazioneCorrente = $t->assegnazioneCorrente)
|
@php($assegnazioneCorrente = $t->assegnazioneCorrente)
|
||||||
<li class="px-5 py-3 flex items-center justify-between hover:bg-gray-50 transition-colors">
|
<li class="px-5 py-3 flex items-center justify-between hover:bg-gray-50 transition-colors">
|
||||||
<div>
|
<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">
|
<p class="text-xs text-gray-500">
|
||||||
{{ $assegnazioneCorrente?->proclamatore?->nome_completo }}
|
{{ $assegnazioneCorrente?->proclamatore?->nome_completo }}
|
||||||
— <span class="font-medium" style="color:#dc2626">{{ $assegnazioneCorrente?->giorni }} gg</span>
|
— <span class="font-medium" style="color:#dc2626">{{ $assegnazioneCorrente?->giorni }} gg</span>
|
||||||
|
|||||||
@@ -152,12 +152,7 @@
|
|||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
{{-- Assignment history: non quando si arriva dalla Home (TerritorioShow::$storicoNascosto) --}}
|
{{-- Assignment history --}}
|
||||||
@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
|
|
||||||
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6">
|
<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="flex items-center gap-3 mb-4">
|
||||||
<div class="h-8 w-8 rounded-lg flex items-center justify-center" style="background:#eef2ff">
|
<div class="h-8 w-8 rounded-lg flex items-center justify-center" style="background:#eef2ff">
|
||||||
@@ -218,5 +213,4 @@
|
|||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
@endif
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -261,6 +261,21 @@ class InvioLinkTest extends TestCase
|
|||||||
->assertSee(route('piantine.editor', ['nuovo' => 1]), false);
|
->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
|
public function test_dall_elenco_degli_assegnati_si_va_al_rientro(): void
|
||||||
{
|
{
|
||||||
$this->assegna($this->mario(), $this->territorioConPdf('7'));
|
$this->assegna($this->mario(), $this->territorioConPdf('7'));
|
||||||
|
|||||||
@@ -62,26 +62,6 @@ class StoricoAssegnazioniTest extends TestCase
|
|||||||
$this->assertSame(2, substr_count($html, 'tm-riga-gruppo'));
|
$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
|
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()
|
$html = $this->actingAs($this->admin)->get(route('proclamatori.show', $this->proclamatore))->assertOk()
|
||||||
|
|||||||
Reference in New Issue
Block a user