prepare(" SELECT id, code, amount_authorized, expires_at FROM fuel_vouchers WHERE driver_id = ? AND status = 'issued' AND expires_at >= NOW() LIMIT 1 "); $st->execute([$driverId]); if ($open = $st->fetch(PDO::FETCH_ASSOC)) { jsonError( 'لديك قسيمة سارية بالرمز ' . $open['code'] . ' بقيمة ' . (float) $open['amount_authorized'] . '. استخدمها أو ألغِها أولاً.' ); } $state = fuelCreditState($con, $obligation); if ($amount > $state['available']) { jsonError( 'المتاح في محفظة وقودك ' . $state['available'] . ' ' . $obligation['currency'] . '. سدّد المستحق عليك ليعود سقفك.' ); } try { $code = fuelGenerateCode($con); $con->prepare(" INSERT INTO fuel_vouchers (obligation_id, driver_id, code, amount_authorized, currency, status, expires_at) VALUES (?, ?, ?, ?, ?, 'issued', DATE_ADD(NOW(), INTERVAL ? MINUTE)) ")->execute([ (int) $obligation['id'], $driverId, $code, $amount, $obligation['currency'], FUEL_VOUCHER_TTL_MIN, ]); $voucherId = (int) $con->lastInsertId(); } catch (Throwable $e) { error_log('[fuel/request_voucher] ' . $e->getMessage()); jsonError('تعذّر إصدار القسيمة حالياً'); } error_log("[fuel] قسيمة #$voucherId للسائق $driverId بقيمة $amount"); jsonSuccess([ 'voucher_id' => $voucherId, 'code' => $code, 'amount' => $amount, 'currency' => $obligation['currency'], 'expires_in_min' => FUEL_VOUCHER_TTL_MIN, 'available_after' => round($state['available'] - $amount, 3), ], 'أعطِ هذا الرمز لعامل المحطة');