columns([ TextColumn::make('user.name') ->label('Karyawan') ->searchable() ->sortable(), TextColumn::make('period_month') ->label('Periode') ->sortable() ->formatStateUsing(fn ($state) => Carbon::parse($state)->translatedFormat('F Y')), TextColumn::make('total_salary') ->label('Total Gaji') ->money('IDR', decimalPlaces: 0) ->sortable(), TextColumn::make('is_paid') ->label('Status') ->badge() ->color(fn (IsPaid $state): string => match ($state) { IsPaid::PAID => 'success', IsPaid::NOT_PAID => 'danger', default => 'gray', }), TextColumn::make('paid_at') ->label('Tanggal Bayar') ->dateTime('l, d F Y') ->sortable() ->toggleable(), ...TimestampColumns::make(), ]) ->filters([ TrashedFilter::make() ->native(false) ->visible(fn (): bool => auth()->user() && auth()->user()->hasRole(RoleEnum::DEVELOPER)), ]) ->recordActions([ EditAction::make() ->modalWidth(Width::Large), DeleteAction::make(), ForceDeleteAction::make(), RestoreAction::make(), ]) ->toolbarActions([ BulkActionGroup::make([ ...DefaultBulkActions::make('Penggajian'), ]), ]) ->emptyStateIcon(Heroicon::Banknotes) ->emptyStateDescription('Setelah Anda membuat data pertama, maka akan muncul disini.') ->defaultSort('created_at', 'desc') ->deferFilters(false); } public static function getEloquentQuery(): Builder { return parent::getEloquentQuery()->paid(); } public static function getPages(): array { return [ 'index' => ManagePayrolls::route('/'), ]; } public static function getRecordRouteBindingEloquentQuery(): Builder { return parent::getRecordRouteBindingEloquentQuery() ->withoutGlobalScopes([ SoftDeletingScope::class, ]); } }