authorize('territori.manage'); $territorio = Territorio::onlyTrashed()->findOrFail($id); $territorio->restore(); activity()->causedBy(auth()->user()) ->performedOn($territorio) ->log('restored'); session()->flash('success', "Territorio {$territorio->numero} ripristinato."); } public function forceDelete(int $id) { $this->authorize('territori.manage'); $territorio = Territorio::onlyTrashed()->findOrFail($id); if ($territorio->assegnazioni()->exists()) { session()->flash('error', 'Impossibile eliminare definitivamente: il territorio ha assegnazioni nello storico.'); return; } activity()->causedBy(auth()->user()) ->withProperties(['numero' => $territorio->numero]) ->log('force_deleted_territorio'); // I file vanno via con la riga. Cancellare solo il record lascerebbe la // mappa e la miniatura sul volume senza piu' nulla che le riferisca: // invisibili in ogni schermata, non raggiungibili da nessuna // cancellazione futura, e comunque dentro ogni backup successivo. // Prima della riga, non dopo: se la cancellazione dei file fallisce, // il territorio resta nel cestino e l'operazione si puo' ritentare. $this->rimuoviFile($territorio); $territorio->forceDelete(); session()->flash('success', 'Territorio eliminato definitivamente.'); } /** * Rimuove mappa e miniatura di un territorio dal disco `public`. * * Stessa coppia di cancellazioni che fa TerritorioEdit quando si sostituisce * il PDF; qui e' definitiva perche' non resta una riga a cui riattaccarle. */ private function rimuoviFile(Territorio $territorio): void { if ($territorio->pdf_path) { Storage::disk('public')->delete($territorio->pdf_path); } if ($territorio->thumbnail_path) { app(TerritorioThumbnailService::class)->delete($territorio->thumbnail_path); } } public function render() { return view('livewire.territori.territorio-cestino', [ 'territori' => Territorio::onlyTrashed()->orderByDesc('deleted_at')->paginate(20), ]); } }