headerActions([ Action::make('setKuota') ->label('Set Kuota Penerimaan') ->form([ TextInput::make('kuota') ->label('Jumlah Kuota') ->numeric() ->required() ->minValue(1) ->helperText('Masukkan jumlah kuota penerimaan untuk akreditasi B.'), ]) ->action(function (array $data): void { DB::beginTransaction(); try { // Reset hasil untuk akreditasi B Parameter::whereHas('mahasiswa.prodi', function ($query) { $query->where('akreditasi', 'B'); })->update(['hasil' => 'Tidak Diterima']); // Ambil data parameter yang valid dengan akreditasi B $validParameters = Parameter::where('status', 'valid') ->whereHas('mahasiswa.prodi', function ($query) { $query->where('akreditasi', 'B'); }) ->orderBy('total_nilai', 'desc') ->get(); $kuota = (int) $data['kuota']; $index = 0; foreach ($validParameters as $parameter) { if ($index < $kuota) { DB::table('parameters') ->where('id', $parameter->id) ->update(['hasil' => 'Diterima']); } $index++; } DB::commit(); Notification::make() ->title("Berhasil mengatur kuota penerimaan untuk {$kuota} mahasiswa akreditasi B") ->success() ->send(); } catch (\Exception $e) { DB::rollBack(); Notification::make() ->title('Terjadi kesalahan: ' . $e->getMessage()) ->danger() ->send(); } }) ->requiresConfirmation() ->modalHeading('Set Kuota Penerimaan Akreditasi B') ->modalDescription('Apakah Anda yakin ingin mengatur kuota penerimaan untuk akreditasi B?') ->modalSubmitActionLabel('Ya, Set Kuota') ->successNotificationTitle('Kuota berhasil diatur'), Action::make('resetKuota') ->label('Reset') ->color('danger') ->icon('heroicon-o-arrow-path') ->action(function (): void { DB::beginTransaction(); try { Parameter::whereHas('mahasiswa.prodi', function ($query) { $query->where('akreditasi', 'B'); })->update(['hasil' => null]); DB::commit(); Notification::make() ->title('Berhasil mereset hasil kuota penerimaan') ->success() ->send(); } catch (\Exception $e) { DB::rollBack(); Notification::make() ->title('Terjadi kesalahan: ' . $e->getMessage()) ->danger() ->send(); } }) ->requiresConfirmation() ->modalHeading('Reset Kuota Penerimaan') ->modalDescription('Apakah Anda yakin ingin mereset hasil kuota penerimaan? Semua hasil akan dikosongkan.') ->modalSubmitActionLabel('Ya, Reset Kuota') ->successNotificationTitle('Kuota berhasil direset'), ]) ->modifyQueryUsing(fn ($query) => $query->where('status', 'valid') ->whereHas('mahasiswa.prodi', function ($query) { $query->where('akreditasi', 'B'); })) ->columns([ TextColumn::make('no') ->label('No.') ->rowIndex(false) ->alignCenter(), TextColumn::make('mahasiswa.nama') ->label('Nama Mahasiswa') ->searchable() ->sortable(), TextColumn::make('total_nilai') ->label('Total Nilai') ->formatStateUsing(fn ($state) => number_format($state, 4)) ->sortable(), TextColumn::make('hasil') ->label('Hasil') ->badge() ->color(fn (string $state): string => match ($state) { 'Diterima' => 'success', 'Tidak Diterima' => 'danger', default => 'gray', }), ]) ->defaultSort('total_nilai', 'desc') ->filters([ \Filament\Tables\Filters\SelectFilter::make('hasil') ->options([ 'Diterima' => 'success', 'Tidak Diterima' => 'danger', ]), ]); } }