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 -
+
diff --git a/resources/views/livewire/campagne/campagna-index.blade.php b/resources/views/livewire/campagne/campagna-index.blade.php index fdaf1c9..624cfc9 100644 --- a/resources/views/livewire/campagne/campagna-index.blade.php +++ b/resources/views/livewire/campagne/campagna-index.blade.php @@ -46,7 +46,7 @@
-
+
diff --git a/resources/views/livewire/proclamatori/proclamatore-cestino.blade.php b/resources/views/livewire/proclamatori/proclamatore-cestino.blade.php index 36c567a..1e63dbf 100644 --- a/resources/views/livewire/proclamatori/proclamatore-cestino.blade.php +++ b/resources/views/livewire/proclamatori/proclamatore-cestino.blade.php @@ -8,6 +8,7 @@
+
@@ -22,7 +23,7 @@
{{ $proclamatore->nome_completo }} {{ $proclamatore->deleted_at->format('d/m/Y H:i') }} -
+
@@ -35,6 +36,7 @@ @endforelse
+
{{ $proclamatori->links() }}
diff --git a/resources/views/livewire/proclamatori/proclamatore-index.blade.php b/resources/views/livewire/proclamatori/proclamatore-index.blade.php index 72ebca7..fe248a4 100644 --- a/resources/views/livewire/proclamatori/proclamatore-index.blade.php +++ b/resources/views/livewire/proclamatori/proclamatore-index.blade.php @@ -57,7 +57,7 @@ {{ $proclamatore->assegnazioni_aperte_count ?? $proclamatore->assegnazioni()->aperte()->count() }} -
+
diff --git a/resources/views/livewire/registro.blade.php b/resources/views/livewire/registro.blade.php index b6cdf4a..ce81745 100644 --- a/resources/views/livewire/registro.blade.php +++ b/resources/views/livewire/registro.blade.php @@ -1,5 +1,5 @@
-
+

Registro Assegnazioni

@can('settings.manage') diff --git a/resources/views/livewire/settings/zone-index.blade.php b/resources/views/livewire/settings/zone-index.blade.php index 0a6aefc..1ec5470 100644 --- a/resources/views/livewire/settings/zone-index.blade.php +++ b/resources/views/livewire/settings/zone-index.blade.php @@ -19,7 +19,7 @@
    @forelse($zone as $zona) -
  • +
  • @if($editingId === $zona->id) @@ -34,7 +34,7 @@ @endif {{ $zona->territori()->count() }} territori
-
+
diff --git a/resources/views/livewire/territori/territorio-cestino.blade.php b/resources/views/livewire/territori/territorio-cestino.blade.php index 08fba57..de7535d 100644 --- a/resources/views/livewire/territori/territorio-cestino.blade.php +++ b/resources/views/livewire/territori/territorio-cestino.blade.php @@ -8,6 +8,7 @@
+
@@ -22,7 +23,7 @@
{{ $territorio->numero }} {{ $territorio->deleted_at->format('d/m/Y H:i') }} -
+
@@ -35,6 +36,7 @@ @endforelse
+
{{ $territori->links() }}