poinService = $poinService; } public function index() { $penggunaan = PenggunaanPoin::with(['user', 'jenisPengurangan', 'status']) ->orderByRaw("CASE WHEN id_status = 1 THEN 0 ELSE 1 END") ->orderBy('tanggal_diajukan', 'desc') ->paginate(10); return view('penggunaan-poin.index', compact('penggunaan')); } public function update(Request $request, $id) { $request->validate([ 'action' => 'required|in:approve,reject', 'alasan_penolakan' => 'required_if:action,reject|nullable|string' ]); $penggunaan = PenggunaanPoin::findOrFail($id); try { if ($request->action == 'approve') { DB::transaction(function () use ($penggunaan) { $penggunaan->update(['id_status' => 2]); $this->poinService->deductPoin( $penggunaan->id_user, $penggunaan->jumlah_poin, $penggunaan->id_penggunaan ); }); $message = 'Pengajuan berhasil disetujui dan poin telah dipotong.'; } else { $penggunaan->update([ 'id_status' => 3, 'alasan_penolakan' => $request->alasan_penolakan ]); $message = 'Pengajuan berhasil ditolak.'; } return redirect()->back()->with('success', $message); } catch (\Exception $e) { return redirect()->back()->with('error', 'Gagal memproses: ' . $e->getMessage()); } } }