assegnazione = $assegnazione->load(['territorio', 'proclamatore']); if ($assegnazione->returned_at) { abort(404, 'Assegnazione giĆ  rientrata.'); } $this->returned_at = now()->format('Y-m-d'); $this->checkCampaign(); } public function updatedReturnedAt() { $this->checkCampaign(); } protected function checkCampaign() { if (!$this->returned_at) { $this->showCampaignPrompt = false; return; } $returnDate = \Carbon\Carbon::parse($this->returned_at); $campagna = $this->assegnazione->campagnaApplicabile($returnDate); if ($campagna) { $this->showCampaignPrompt = true; $this->campagna_id = $campagna->id; } else { $this->showCampaignPrompt = false; $this->campagna_id = null; $this->counted_in_campaign = false; } } protected function rules(): array { return [ 'returned_at' => 'required|date|after_or_equal:' . $this->assegnazione->assigned_at->format('Y-m-d') . '|before_or_equal:today', ]; } public function save() { $this->validate(); $returnDate = \Carbon\Carbon::parse($this->returned_at); $this->assegnazione->update([ 'returned_at' => $returnDate, 'returned_by' => auth()->id(), 'campaign_id' => $this->counted_in_campaign ? $this->campagna_id : null, 'counted_in_campaign' => $this->counted_in_campaign, ]); $territorio = $this->assegnazione->territorio; $proclamatore = $this->assegnazione->proclamatore; activity()->causedBy(auth()->user()) ->performedOn($this->assegnazione) ->withProperties([ 'territorio' => $territorio->numero, 'proclamatore' => $proclamatore->nome_completo, 'giorni' => $this->assegnazione->giorni, 'campagna' => $this->counted_in_campaign, ]) ->log('returned'); session()->flash('success', "Territorio {$territorio->numero} rientrato da {$proclamatore->nome_completo} dopo {$this->assegnazione->giorni} giorni."); return $this->redirect(route('territori.show', $territorio), navigate: true); } public function render() { $campagna = $this->campagna_id ? Campagna::find($this->campagna_id) : null; return view('livewire.assegnazioni.rientra', [ 'campagna' => $campagna, ]); } }