Advertisement
acakluqman

PresensiResource

May 21st, 2025 (edited)
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.91 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Filament\Resources;
  4.  
  5. use App\Filament\Resources\PresensiResource\Pages;
  6. use App\Filament\Resources\PresensiResource\RelationManagers;
  7. use App\Models\PresensiWrapper;
  8. use Carbon\Carbon;
  9. use Filament\Forms\Form;
  10. use Filament\Resources\Resource;
  11. use Filament\Support\Enums\FontWeight;
  12. use Filament\Tables\Columns\TextColumn;
  13. use Filament\Tables\Enums\FiltersLayout;
  14. use Filament\Tables\Filters\SelectFilter;
  15. use Filament\Tables\Table;
  16. use Illuminate\Contracts\Database\Eloquent\Builder;
  17. use Illuminate\Support\Facades\Log;
  18.  
  19. class PresensiResource extends Resource
  20. {
  21.     protected static ?string $model = PresensiWrapper::class;
  22.     protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
  23.  
  24.     protected $listeners = [
  25.         'filtered' => '$refresh'
  26.     ];
  27.  
  28.     public static function form(Form $form): Form
  29.     {
  30.         return $form
  31.             ->schema([
  32.                 //
  33.             ]);
  34.     }
  35.  
  36.     public static function table(Table $table): Table
  37.     {
  38.         return $table
  39.             ->query(PresensiWrapper::query())
  40.             ->columns([
  41.                 TextColumn::make('tanggal')
  42.                     ->date('l, d F Y')
  43.                     ->weight(FontWeight::Medium)
  44.                     ->description('Jam Kerja 08:00 AM - 16:00 PM')
  45.                     ->searchable(),
  46.                 TextColumn::make('keterangan_libur')
  47.                     ->label('Keterangan')
  48.                     ->icon('heroicon-o-pause-circle')
  49.                     ->color('gray'),
  50.                 TextColumn::make('clock_in')
  51.                     ->formatStateUsing(fn($state) => Carbon::parse($state)->format('H:i A')),
  52.                 TextColumn::make('clock_out')
  53.                     ->formatStateUsing(fn($state) => Carbon::parse($state)->format('H:i A')),
  54.                 TextColumn::make('durasi_kerja'),
  55.             ])
  56.             ->paginated(false)
  57.             ->hiddenFilterIndicators()
  58.             ->deferLoading()
  59.             ->filters([
  60.                 SelectFilter::make('bulan')
  61.                     ->label('Bulan')
  62.                     ->default(now()->month)
  63.                     ->selectablePlaceholder(false)
  64.                     ->options(collect(range(1, 12))->mapWithKeys(
  65.                         fn($i) => [$i => Carbon::create()->month($i)->translatedFormat('F')]
  66.                     ))
  67.                     ->query(function (Builder $query, array $data, $livewire): Builder {
  68.                         self::$model::setBulan($data['value']);
  69.                         self::$model::setTableFilters(['bulan' => $data['value']]);
  70.                         Log::info("filter bulan: " . $data['value']);
  71.                         $livewire->dispatch('filtered');
  72.                         return $query;
  73.                     }),
  74.                 SelectFilter::make('tahun')
  75.                     ->label('Tahun')
  76.                     ->default(now()->year)
  77.                     ->selectablePlaceholder(false)
  78.                     ->options(collect(range(now()->year - 2, now()->year))->reverse()->mapWithKeys(fn($y) => [$y => $y]))
  79.                     ->query(function (Builder $query, array $data, $livewire): Builder {
  80.                         self::$model::setTahun($data['value']);
  81.                         Log::info("filter tahun: " . $data['value']);
  82.                         $livewire->dispatch('filtered');
  83.                         return $query;
  84.                     }),
  85.             ], layout: FiltersLayout::AboveContent);
  86.     }
  87.  
  88.     public static function getRelations(): array
  89.     {
  90.         return [
  91.             //
  92.         ];
  93.     }
  94.  
  95.     public static function getPages(): array
  96.     {
  97.         return [
  98.             'index' => Pages\ListPresensis::route('/'),
  99.             'create' => Pages\CreatePresensi::route('/create'),
  100.             'view' => Pages\ViewPresensi::route('/{record}'),
  101.             'edit' => Pages\EditPresensi::route('/{record}/edit'),
  102.         ];
  103.     }
  104. }
  105.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement