diff --git a/HANDOFF.md b/HANDOFF.md index 44649a1..9e11a9b 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -147,6 +147,21 @@ assistente e operatore); creazione/modifica/cestino restano su `territori.manage sono sotto `@can('territori.manage')`; il link "Dettaglio" resta visibile a tutti. Il menu laterale mostra "Territori" a chi ha `territori.assign`. +### Assegnare un territorio ne azzera il flag "prioritario" + +`prioritario` è un flag **manuale**; `is_prioritario` è true se il flag è acceso +*oppure* se la giacenza supera la soglia — ma la parte a soglia vale solo per i +territori *in reparto* (`scopePrioritari`/`getIsPrioritarioAttribute` filtrano su +`inReparto`). Quindi un territorio assegnato può risultare prioritario **solo** +per via del flag manuale. Regola: alla creazione di un'assegnazione **aperta** il +flag viene spento. È implementata come evento `Assegnazione::created` (in +`booted()`), guardato su `returned_at === null` e `prioritario === true`, così +copre ogni via di creazione (pagina Assegna, CRUD del Registro, import XML) senza +duplicare la logica. Interazione con l'import XML: per i backup creati dopo questa +regola è un no-op (nessun territorio assegnato è prioritario); su backup vecchi +con stato contraddittorio l'import normalizza il flag anziché riprodurlo tale e +quale. + ### Export/Import XML: backup completo e round-trip `Livewire/Settings/XmlExchange` esporta e reimporta **tutti** i dati gestionali, diff --git a/app/Models/Assegnazione.php b/app/Models/Assegnazione.php index 741225b..2dd0846 100644 --- a/app/Models/Assegnazione.php +++ b/app/Models/Assegnazione.php @@ -35,6 +35,26 @@ class Assegnazione extends Model ]; } + protected static function booted(): void + { + // Assegnare un territorio ne azzera il flag "prioritario": una volta in + // carico a un proclamatore (assegnazione aperta) non ha più senso + // segnalarlo come prioritario. La priorità automatica per soglia di + // giacenza riguarda solo i territori in reparto, quindi resta il solo + // flag manuale da spegnere. Vale per ogni via di creazione (pagina + // Assegna, CRUD del Registro, import XML di assegnazioni aperte). + static::created(function (self $assegnazione): void { + if ($assegnazione->returned_at !== null) { + return; + } + + $territorio = $assegnazione->territorio; + if ($territorio && $territorio->prioritario) { + $territorio->update(['prioritario' => false]); + } + }); + } + // ─── Relationships ───────────────────────────────────────── public function territorio() diff --git a/resources/views/livewire/campagne/campagna-form.blade.php b/resources/views/livewire/campagne/campagna-form.blade.php index 2bde8a0..3508c10 100644 --- a/resources/views/livewire/campagne/campagna-form.blade.php +++ b/resources/views/livewire/campagne/campagna-form.blade.php @@ -15,7 +15,7 @@ @error('descrizione')
{{ $message }}
@enderror -| {{ $proclamatore->nome_completo }} | {{ $proclamatore->deleted_at->format('d/m/Y H:i') }} |
-
+ |