resolveUserUnita($user)->pluck('stabile_id')->filter()->unique(); $query = Documento::whereHasMorph('documentable', ['App\Models\Stabile'], function ($q) use ($stabiliIds) { $q->whereIn('id', $stabiliIds); })->with('documentable'); // Filtri if ($request->filled('tipo_documento')) { $query->where('tipo_documento', $request->tipo_documento); } if ($request->filled('search')) { $query->where(function ($q) use ($request) { $q->where('nome_file', 'like', '%' . $request->search . '%') ->orWhere('descrizione', 'like', '%' . $request->search . '%'); }); } $documenti = $query->orderBy('created_at', 'desc')->paginate(20); // Tipi documento per filtro $tipiDocumento = Documento::whereHasMorph('documentable', ['App\Models\Stabile'], function ($q) use ($stabiliIds) { $q->whereIn('id', $stabiliIds); })->distinct()->pluck('tipo_documento')->filter(); return view('condomino.documenti.index', compact('documenti', 'tipiDocumento')); } public function download(Documento $documento) { $user = Auth::user(); // Verifica accesso $stabiliIds = $this->resolveUserUnita($user)->pluck('stabile_id')->filter()->unique(); if ($documento->documentable_type === 'App\Models\Stabile') { if (! $stabiliIds->contains($documento->documentable_id)) { abort(403); } } if (! Storage::disk('public')->exists($documento->path_file)) { abort(404, 'File non trovato'); } return Storage::disk('public')->download($documento->path_file, $documento->nome_file); } }