lotteryAdmin(); abort_if($admin === null, 401); abort_if(! AdminAgentSettlementScope::billAccessible($admin, $settlement_bill), 404); $bill = DB::table('settlement_bills')->where('id', $settlement_bill)->first(); abort_if($bill === null, 404); $unpaid = (int) $bill->unpaid_amount; DB::table('settlement_bills')->where('id', $settlement_bill)->update([ 'paid_amount' => (int) $bill->paid_amount + $unpaid, 'unpaid_amount' => 0, 'status' => 'confirmed', 'confirmed_at' => now(), 'updated_at' => now(), ]); if ($bill->owner_type === 'player' && (int) $bill->owner_id > 0) { $player = Player::query()->find((int) $bill->owner_id); if ($player !== null) { $creditService->releaseFromSettlement($player, $unpaid, $settlement_bill); } } AuditLogger::recordForAdmin( $admin, $request, moduleCode: 'settlement', actionCode: 'settlement_bill.confirm', targetType: 'settlement_bill', targetId: (string) $settlement_bill, beforeJson: ['status' => (string) $bill->status, 'unpaid_amount' => $unpaid], afterJson: ['status' => 'confirmed', 'paid_amount' => (int) $bill->paid_amount + $unpaid], ); $request->attributes->set(RecordAdminApiAudit::ATTRIBUTE_AUDIT_RECORDED, true); return ApiResponse::success(['bill_id' => $settlement_bill, 'status' => 'confirmed']); } }