- Gli elenchi tengono ricerca, filtri e ordinamento nell'indirizzo (#[Url]); la pagina c'era già. - I link verso schede e operazioni (data-ritorno) portano ?da= con la pagina di partenza, o il da già ricevuto: si risale all'origine (elenco -> scheda -> Rientra -> elenco filtrato). - Ritorno::valida accetta solo percorsi interni: niente rimandi esterni. - Trait RicordaRitorno: redirect dopo il salvataggio, Annulla e "Torna indietro" usano la pagina di partenza. Senza da, tutto come prima. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
61 lines
2.1 KiB
PHP
61 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Campagne;
|
|
|
|
use App\Livewire\Concerns\RicordaRitorno;
|
|
use Livewire\Component;
|
|
use App\Models\Campagna;
|
|
use App\Models\Assegnazione;
|
|
use App\Models\Territorio;
|
|
|
|
class CampagnaShow extends Component
|
|
{
|
|
use RicordaRitorno;
|
|
|
|
public Campagna $campagna;
|
|
|
|
public function mount(Campagna $campagna)
|
|
{
|
|
$this->campagna = $campagna;
|
|
}
|
|
|
|
public function render()
|
|
{
|
|
// Le assegnazioni contate per la campagna, cioè quelle per cui al
|
|
// rientro si è risposto sì (campagnaApplicabile propone anche quelle
|
|
// uscite poco prima dell'inizio e rientrate durante). Le stesse della
|
|
// percentuale: prima qui si scartavano quelle uscite prima dell'inizio,
|
|
// e l'elenco era più corto di quanto la percentuale contasse.
|
|
$conteggiate = $this->campagna->assegnazioniConteggiate()
|
|
->with(['territorio', 'proclamatore'])
|
|
->orderBy('returned_at')
|
|
->get();
|
|
|
|
// Open assignments can still be counted for this campaign only while
|
|
// no later campaign has started: on return the most recent one is
|
|
// offered (see Assegnazione::campagnaApplicabile()).
|
|
$superata = Campagna::where('start_date', '>', $this->campagna->start_date)
|
|
->where('start_date', '<=', now()->toDateString())
|
|
->exists();
|
|
|
|
$inCorso = $superata ? null : $this->campagna->assegnazioniInCorso()
|
|
->with(['territorio', 'proclamatore'])
|
|
->orderBy('assigned_at')
|
|
->get();
|
|
|
|
// All assignments that were active during this campaign range
|
|
$assegnateNelRange = Assegnazione::where('assigned_at', '<=', $this->campagna->end_date)
|
|
->where(function ($q) {
|
|
$q->whereNull('returned_at')
|
|
->orWhere('returned_at', '>=', $this->campagna->start_date);
|
|
})
|
|
->count();
|
|
|
|
return view('livewire.campagne.campagna-show', [
|
|
'conteggiate' => $conteggiate,
|
|
'inCorso' => $inCorso,
|
|
'assegnateNelRange' => $assegnateNelRange,
|
|
]);
|
|
}
|
|
}
|