++ invio del link dopo l'assegnazione; nuovo territorio dal designer
- Dopo l'assegnazione si apre una finestra con i canali (copia link sempre; WhatsApp ed email solo se il proclamatore ha numero / indirizzo, l'email solo con la posta configurata) e la domanda "Hai inviato il link?". Si va avanti solo dopo la risposta. - L'email la manda l'app con notifyNow, mai in coda: l'indirizzo è cifrato nel database e non deve finire in chiaro nei job. - Procedura interrotta o "non ancora": assegnazioni.link_da_inviare resta vero e "Link ancora da inviare" compare nell'elenco Assegna e nella scheda territorio, con "Invia link" per riprendere. - Colonne link_da_inviare e link_canale (anche nell'XML); log con canale e proclamatore_id, senza dati personali. - "Nuovo territorio" apre il designer delle piantine già in disegno, con la prima piantina pronta a creare il territorio. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -20,6 +20,8 @@ class Assegnazione extends Model
|
||||
'campaign_id',
|
||||
'pdf_access_code',
|
||||
'link_sent',
|
||||
'link_da_inviare',
|
||||
'link_canale',
|
||||
'note',
|
||||
'created_by',
|
||||
'returned_by',
|
||||
@@ -32,6 +34,7 @@ class Assegnazione extends Model
|
||||
'returned_at' => 'date',
|
||||
'counted_in_campaign' => 'boolean',
|
||||
'link_sent' => 'boolean',
|
||||
'link_da_inviare' => 'boolean',
|
||||
];
|
||||
}
|
||||
|
||||
@@ -211,9 +214,43 @@ class Assegnazione extends Model
|
||||
return route('assignments.pdf.short', ['code' => $this->ensurePdfAccessCode()]);
|
||||
}
|
||||
|
||||
public function markLinkSent(): void
|
||||
public function markLinkSent(?string $canale = null): void
|
||||
{
|
||||
$this->forceFill(['link_sent' => true])->saveQuietly();
|
||||
$this->registraInvioLink(true, $canale);
|
||||
}
|
||||
|
||||
/** Canali con cui si manda il link al proclamatore. */
|
||||
public const CANALI_LINK = ['copia' => 'Copia link', 'whatsapp' => 'WhatsApp', 'email' => 'Email'];
|
||||
|
||||
/**
|
||||
* Esito dell'invio del link: inviato (con il canale usato) oppure no. Un
|
||||
* link non inviato resta "da inviare" e lo si segnala sull'assegnazione,
|
||||
* a meno che non ci sia proprio un link da mandare (territorio senza PDF).
|
||||
*/
|
||||
public function registraInvioLink(bool $inviato, ?string $canale = null): void
|
||||
{
|
||||
$this->forceFill([
|
||||
'link_sent' => $inviato,
|
||||
'link_da_inviare' => ! $inviato && $this->shortPdfUrl() !== null,
|
||||
'link_canale' => $inviato ? $canale : $this->link_canale,
|
||||
])->saveQuietly();
|
||||
}
|
||||
|
||||
/** Il link va ancora mandato: l'avviso da mostrare sull'assegnazione. */
|
||||
public function getLinkInSospesoAttribute(): bool
|
||||
{
|
||||
return $this->link_da_inviare && ! $this->link_sent && $this->is_aperta;
|
||||
}
|
||||
|
||||
/** Il messaggio con il link, uguale per WhatsApp ed email. */
|
||||
public function messaggioLink(): ?string
|
||||
{
|
||||
$link = $this->shortPdfUrl();
|
||||
if ($link === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return "Ciao {$this->proclamatore?->nome}, ti è stato assegnato il territorio N° {$this->territorio?->numero}. Ecco la piantina: {$link}";
|
||||
}
|
||||
|
||||
// ─── Scopes ─────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user