diff --git a/app/Livewire/Assegnazioni/Rientra.php b/app/Livewire/Assegnazioni/Rientra.php index 094cab3..5765075 100644 --- a/app/Livewire/Assegnazioni/Rientra.php +++ b/app/Livewire/Assegnazioni/Rientra.php @@ -116,8 +116,19 @@ class Rientra extends Component { $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', [ 'campagna' => $campagna, + 'giorniPercorrenza' => $giorniPercorrenza, + 'sogliaPercorrenza' => $sogliaPercorrenza, ]); } } diff --git a/app/Models/Assegnazione.php b/app/Models/Assegnazione.php index 64e6691..445442b 100644 --- a/app/Models/Assegnazione.php +++ b/app/Models/Assegnazione.php @@ -244,6 +244,9 @@ class Assegnazione extends Model { $this->loadMissing('territorio'); + $giorni = $this->giorniPercorrenza(); + $soglia = static::sogliaPercorrenzaElevata(); + activity()->causedBy(auth()->user()) ->performedOn($this) ->withProperties([ @@ -251,11 +254,32 @@ class Assegnazione extends Model 'proclamatore_id' => $this->proclamatore_id, // vedi Assegna: niente nomi in chiaro 'campagna' => $campagna?->descrizione, 'percorso_in_campagna' => $percorso ? 'Sì' : 'No', + 'giorni_percorrenza' => $giorni, + 'avviso_tempo_elevato' => $giorni > $soglia ? "Sì (soglia {$soglia} giorni)" : 'No', 'origine' => $origine, ]) ->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. * Returns the matching campaign or null. diff --git a/resources/views/livewire/assegnazioni/rientra.blade.php b/resources/views/livewire/assegnazioni/rientra.blade.php index 9326736..64690ff 100644 --- a/resources/views/livewire/assegnazioni/rientra.blade.php +++ b/resources/views/livewire/assegnazioni/rientra.blade.php @@ -47,6 +47,12 @@ ({{ $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.
+ @if($giorniPercorrenza !== null && $giorniPercorrenza > $sogliaPercorrenza) +