++ 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:
@@ -206,6 +206,9 @@ class Assegnazione extends Model
|
||||
{
|
||||
$this->loadMissing(['territorio', 'proclamatore']);
|
||||
|
||||
$giorni = $this->giorniPercorrenza();
|
||||
$soglia = static::sogliaPercorrenzaElevata();
|
||||
|
||||
activity()->causedBy(auth()->user())
|
||||
->performedOn($this)
|
||||
->withProperties([
|
||||
@@ -213,11 +216,32 @@ class Assegnazione extends Model
|
||||
'proclamatore' => $this->proclamatore?->nome_completo,
|
||||
'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.
|
||||
|
||||
Reference in New Issue
Block a user