++ gruppi: l'assegnazione dal pacchetto rilegge territorio e membro, e ricontrolla il pacchetto sotto lock
HANDOFF: trappola di Blade sul @php in linea, test sul server prima del push. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -168,6 +168,12 @@ class GruppiServizio
|
||||
{
|
||||
$this->attivo($gruppo);
|
||||
|
||||
// Si decide sui dati di adesso, non su quelli con cui è partita la
|
||||
// pagina: nel frattempo l'amministratore può aver cambiato pacchetto
|
||||
// o membri.
|
||||
$territorio->refresh();
|
||||
$membro->refresh();
|
||||
|
||||
if ($territorio->gruppo_servizio_id !== $gruppo->id) {
|
||||
throw new InvalidArgumentException("Il territorio {$territorio->numero} non è nel pacchetto del gruppo.");
|
||||
}
|
||||
@@ -182,7 +188,10 @@ class GruppiServizio
|
||||
}
|
||||
|
||||
$esito = DB::transaction(function () use ($gruppo, $territorio, $membro, $data) {
|
||||
Territorio::whereKey($territorio->id)->lockForUpdate()->first();
|
||||
$bloccato = Territorio::whereKey($territorio->id)->lockForUpdate()->first();
|
||||
if (! $bloccato || $bloccato->gruppo_servizio_id !== $gruppo->id) {
|
||||
return "Il territorio {$territorio->numero} non è più nel pacchetto del gruppo.";
|
||||
}
|
||||
|
||||
$conflitto = Assegnazione::sovrappostaA($territorio->id, $data);
|
||||
if ($conflitto) {
|
||||
|
||||
Reference in New Issue
Block a user