hasAnyRole(['super-admin', 'admin'])) { return true; } return $user->can('contabilita.preventivi'); } public function mount(): void { $this->mountInteractsWithTable(); } protected function getTableQuery(): Builder { $user = Auth::user(); if (! $user instanceof User) { return Preventivo::query()->whereRaw('1 = 0'); } $activeStabileId = StabileContext::resolveActiveStabileId($user); if (! $activeStabileId) { return Preventivo::query()->whereRaw('1 = 0'); } return Preventivo::query() ->where('stabile_id', $activeStabileId) ->with('stabile') ->orderByDesc('anno_gestione') ->orderByDesc('created_at'); } public function table(Table $table): Table { return $table ->striped() ->columns([ TextColumn::make('anno_gestione') ->label('Anno') ->sortable(), TextColumn::make('tipo_gestione') ->label('Gestione') ->badge() ->sortable(), TextColumn::make('descrizione') ->label('Descrizione') ->wrap() ->searchable(), TextColumn::make('stato') ->label('Stato') ->badge() ->sortable(), TextColumn::make('importo_totale') ->label('Totale') ->alignEnd() ->formatStateUsing(fn($state) => '€ ' . number_format((float) $state, 2, ',', '.')), ]) ->actions([ Action::make('lettera') ->label('Lettera') ->icon('heroicon-o-printer') ->url(fn(Preventivo $record) => PreventivoLettera::getUrl(['record' => $record->id], panel: 'admin-filament'), shouldOpenInNewTab: true), ]); } }