++ rientro: avviso tempo di percorrenza elevato nel banner campagna
Se il territorio è rimasto fuori oltre la soglia "giorni_per_smarrito", il banner della campagna mostra un avviso (non bloccante). Giorni e avviso vengono salvati anche nell'evento "campagna_percorso". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -116,8 +116,19 @@ class Rientra extends Component
|
|||||||
{
|
{
|
||||||
$campagna = $this->campagna_id ? Campagna::find($this->campagna_id) : null;
|
$campagna = $this->campagna_id ? Campagna::find($this->campagna_id) : null;
|
||||||
|
|
||||||
|
// Warning shown inside the campaign prompt only: holding time up to
|
||||||
|
// the selected return date above the "da rientrare" threshold.
|
||||||
|
$giorniPercorrenza = null;
|
||||||
|
$sogliaPercorrenza = null;
|
||||||
|
if ($campagna && $this->returned_at) {
|
||||||
|
$giorniPercorrenza = $this->assegnazione->giorniPercorrenza(\Carbon\Carbon::parse($this->returned_at));
|
||||||
|
$sogliaPercorrenza = Assegnazione::sogliaPercorrenzaElevata();
|
||||||
|
}
|
||||||
|
|
||||||
return view('livewire.assegnazioni.rientra', [
|
return view('livewire.assegnazioni.rientra', [
|
||||||
'campagna' => $campagna,
|
'campagna' => $campagna,
|
||||||
|
'giorniPercorrenza' => $giorniPercorrenza,
|
||||||
|
'sogliaPercorrenza' => $sogliaPercorrenza,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -206,6 +206,9 @@ class Assegnazione extends Model
|
|||||||
{
|
{
|
||||||
$this->loadMissing(['territorio', 'proclamatore']);
|
$this->loadMissing(['territorio', 'proclamatore']);
|
||||||
|
|
||||||
|
$giorni = $this->giorniPercorrenza();
|
||||||
|
$soglia = static::sogliaPercorrenzaElevata();
|
||||||
|
|
||||||
activity()->causedBy(auth()->user())
|
activity()->causedBy(auth()->user())
|
||||||
->performedOn($this)
|
->performedOn($this)
|
||||||
->withProperties([
|
->withProperties([
|
||||||
@@ -213,11 +216,32 @@ class Assegnazione extends Model
|
|||||||
'proclamatore' => $this->proclamatore?->nome_completo,
|
'proclamatore' => $this->proclamatore?->nome_completo,
|
||||||
'campagna' => $campagna?->descrizione,
|
'campagna' => $campagna?->descrizione,
|
||||||
'percorso_in_campagna' => $percorso ? 'Sì' : 'No',
|
'percorso_in_campagna' => $percorso ? 'Sì' : 'No',
|
||||||
|
'giorni_percorrenza' => $giorni,
|
||||||
|
'avviso_tempo_elevato' => $giorni > $soglia ? "Sì (soglia {$soglia} giorni)" : 'No',
|
||||||
'origine' => $origine,
|
'origine' => $origine,
|
||||||
])
|
])
|
||||||
->log('campagna_percorso');
|
->log('campagna_percorso');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Giorni tra assegnazione e rientro (o la data indicata, o oggi).
|
||||||
|
*/
|
||||||
|
public function giorniPercorrenza(?Carbon $returnDate = null): int
|
||||||
|
{
|
||||||
|
$end = $returnDate ?? $this->returned_at ?? now();
|
||||||
|
|
||||||
|
return (int) Carbon::parse($this->assigned_at)->startOfDay()->diffInDays(Carbon::parse($end)->startOfDay());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Oltre questa soglia il tempo di percorrenza è considerato molto alto:
|
||||||
|
* è la stessa soglia "giorni_per_smarrito" dello stato "da_rientrare".
|
||||||
|
*/
|
||||||
|
public static function sogliaPercorrenzaElevata(): int
|
||||||
|
{
|
||||||
|
return (int) Setting::getValue('giorni_per_smarrito', 120);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if a campaign prompt should be shown when returning this assignment.
|
* Check if a campaign prompt should be shown when returning this assignment.
|
||||||
* Returns the matching campaign or null.
|
* Returns the matching campaign or null.
|
||||||
|
|||||||
@@ -47,6 +47,12 @@
|
|||||||
({{ $campagna->start_date->format('d/m/Y') }} — {{ $campagna->end_date->format('d/m/Y') }}).
|
({{ $campagna->start_date->format('d/m/Y') }} — {{ $campagna->end_date->format('d/m/Y') }}).
|
||||||
È stato percorso per la campagna? Se sì, conteggialo nella percentuale di percorrenza.
|
È stato percorso per la campagna? Se sì, conteggialo nella percentuale di percorrenza.
|
||||||
</p>
|
</p>
|
||||||
|
@if($giorniPercorrenza !== null && $giorniPercorrenza > $sogliaPercorrenza)
|
||||||
|
<div class="mb-3 rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-800">
|
||||||
|
⚠️ <strong>Tempo di percorrenza molto alto: {{ $giorniPercorrenza }} giorni</strong> (soglia {{ $sogliaPercorrenza }}).
|
||||||
|
Verifica che il territorio sia stato effettivamente percorso durante la campagna.
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<input wire:model="counted_in_campaign" type="checkbox" id="counted_in_campaign" class="rounded border-gray-300 text-amber-600 focus:ring-amber-500">
|
<input wire:model="counted_in_campaign" type="checkbox" id="counted_in_campaign" class="rounded border-gray-300 text-amber-600 focus:ring-amber-500">
|
||||||
<label for="counted_in_campaign" class="text-sm text-amber-800">Sì, conteggia in campagna</label>
|
<label for="counted_in_campaign" class="text-sm text-amber-800">Sì, conteggia in campagna</label>
|
||||||
|
|||||||
Reference in New Issue
Block a user