Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Filament\Resources;
- use App\Filament\Resources\PresensiResource\Pages;
- use App\Filament\Resources\PresensiResource\RelationManagers;
- use App\Models\PresensiWrapper;
- use Carbon\Carbon;
- use Filament\Forms\Form;
- use Filament\Resources\Resource;
- use Filament\Support\Enums\FontWeight;
- use Filament\Tables\Columns\TextColumn;
- use Filament\Tables\Enums\FiltersLayout;
- use Filament\Tables\Filters\SelectFilter;
- use Filament\Tables\Table;
- use Illuminate\Contracts\Database\Eloquent\Builder;
- use Illuminate\Support\Facades\Log;
- class PresensiResource extends Resource
- {
- protected static ?string $model = PresensiWrapper::class;
- protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
- protected $listeners = [
- 'filtered' => '$refresh'
- ];
- public static function form(Form $form): Form
- {
- return $form
- ->schema([
- //
- ]);
- }
- public static function table(Table $table): Table
- {
- return $table
- ->query(PresensiWrapper::query())
- ->columns([
- TextColumn::make('tanggal')
- ->date('l, d F Y')
- ->weight(FontWeight::Medium)
- ->description('Jam Kerja 08:00 AM - 16:00 PM')
- ->searchable(),
- TextColumn::make('keterangan_libur')
- ->label('Keterangan')
- ->icon('heroicon-o-pause-circle')
- ->color('gray'),
- TextColumn::make('clock_in')
- ->formatStateUsing(fn($state) => Carbon::parse($state)->format('H:i A')),
- TextColumn::make('clock_out')
- ->formatStateUsing(fn($state) => Carbon::parse($state)->format('H:i A')),
- TextColumn::make('durasi_kerja'),
- ])
- ->paginated(false)
- ->hiddenFilterIndicators()
- ->deferLoading()
- ->filters([
- SelectFilter::make('bulan')
- ->label('Bulan')
- ->default(now()->month)
- ->selectablePlaceholder(false)
- ->options(collect(range(1, 12))->mapWithKeys(
- fn($i) => [$i => Carbon::create()->month($i)->translatedFormat('F')]
- ))
- ->query(function (Builder $query, array $data, $livewire): Builder {
- self::$model::setBulan($data['value']);
- self::$model::setTableFilters(['bulan' => $data['value']]);
- Log::info("filter bulan: " . $data['value']);
- $livewire->dispatch('filtered');
- return $query;
- }),
- SelectFilter::make('tahun')
- ->label('Tahun')
- ->default(now()->year)
- ->selectablePlaceholder(false)
- ->options(collect(range(now()->year - 2, now()->year))->reverse()->mapWithKeys(fn($y) => [$y => $y]))
- ->query(function (Builder $query, array $data, $livewire): Builder {
- self::$model::setTahun($data['value']);
- Log::info("filter tahun: " . $data['value']);
- $livewire->dispatch('filtered');
- return $query;
- }),
- ], layout: FiltersLayout::AboveContent);
- }
- public static function getRelations(): array
- {
- return [
- //
- ];
- }
- public static function getPages(): array
- {
- return [
- 'index' => Pages\ListPresensis::route('/'),
- 'create' => Pages\CreatePresensi::route('/create'),
- 'view' => Pages\ViewPresensi::route('/{record}'),
- 'edit' => Pages\EditPresensi::route('/{record}/edit'),
- ];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement