hasAnyRole(['super-admin', 'admin', 'amministratore', 'collaboratore']); } public function mount(): void { $user = Auth::user(); if (! $user instanceof User) { return; } $activeId = StabileContext::resolveActiveStabileId($user); if (! $activeId) { return; } $this->stabileAttivo = StabileContext::accessibleStabili($user)->firstWhere('id', $activeId); } protected function getHeaderActions(): array { return [ Action::make('apri_documenti') ->label('Archivio documenti') ->icon('heroicon-o-folder-open') ->url(fn(): string => DocumentiArchivio::getUrl(panel: 'admin-filament')), ]; } public function getStatsProperty(): array { $stabileId = (int) ($this->stabileAttivo?->id ?? 0); if ($stabileId <= 0) { return ['totale' => 0, 'convocate' => 0, 'in_calendario' => 0, 'con_verbale' => 0]; } $query = Assemblea::query()->where('stabile_id', $stabileId); return [ 'totale' => (clone $query)->count(), 'convocate' => (clone $query)->where('stato', 'convocata')->count(), 'in_calendario'=> (clone $query) ->where(function ($builder): void { $today = now(); $builder->whereDate('data_prima_convocazione', '>=', $today->toDateString()) ->orWhereDate('data_seconda_convocazione', '>=', $today->toDateString()); }) ->count(), 'con_verbale' => (clone $query)->whereHas('verbale')->count(), ]; } public function getAssembleeRowsProperty(): Collection { $stabileId = (int) ($this->stabileAttivo?->id ?? 0); if ($stabileId <= 0) { return collect(); } return Assemblea::query() ->with(['verbale:id,assemblea_id']) ->withCount(['ordineGiorno', 'convocazioni', 'presenze', 'documenti']) ->where('stabile_id', $stabileId) ->orderByDesc('data_seconda_convocazione') ->orderByDesc('data_prima_convocazione') ->orderByDesc('id') ->limit(16) ->get(); } }