81 lines
2.8 KiB
PHP
81 lines
2.8 KiB
PHP
<?php
|
|
/**
|
|
* fuel/get.php — حالة محفظة الوقود للسائق
|
|
*
|
|
* السقف، المستخدَم، المحجوز، والمتاح — ثم آخر الحركات. الأرقام الأربعة
|
|
* معاً لا المتاح وحده: السائق الذي يرى «المتاح ٥» بلا تفسير يظنّها
|
|
* عطلاً، والذي يرى «سقفك ٣٠، عليك ٢٠، محجوز ٥» يفهم ويتصرّف.
|
|
*/
|
|
|
|
require_once __DIR__ . '/../connect.php';
|
|
require_once __DIR__ . '/functions.php';
|
|
|
|
$driverId = $user_id ?? '';
|
|
if (empty($driverId) || ($role ?? '') !== 'driver') {
|
|
jsonError('Unauthorized', 401);
|
|
}
|
|
|
|
$obligation = fuelObligation($con, $driverId);
|
|
|
|
if (!$obligation) {
|
|
jsonSuccess([
|
|
'enrolled' => false,
|
|
'credit' => null,
|
|
'voucher' => null,
|
|
'entries' => [],
|
|
], 'محفظة الوقود غير مفعّلة');
|
|
}
|
|
|
|
fuelExpireStaleVouchers($con, $driverId);
|
|
$state = fuelCreditState($con, $obligation);
|
|
|
|
$voucher = null;
|
|
$entries = [];
|
|
|
|
try {
|
|
$st = $con->prepare("
|
|
SELECT id, code, amount_authorized, currency, expires_at
|
|
FROM fuel_vouchers
|
|
WHERE driver_id = ? AND status = 'issued' AND expires_at >= NOW()
|
|
LIMIT 1
|
|
");
|
|
$st->execute([$driverId]);
|
|
if ($row = $st->fetch(PDO::FETCH_ASSOC)) {
|
|
$voucher = [
|
|
'voucher_id' => (int) $row['id'],
|
|
'code' => $row['code'],
|
|
'amount' => (float) $row['amount_authorized'],
|
|
'expires_at' => $row['expires_at'],
|
|
];
|
|
}
|
|
|
|
// آخر عشرين حركة: كافية لشهر تزوّد، وتمنع رداً ينمو بلا حد.
|
|
$st = $con->prepare("
|
|
SELECT charge_date, amount, amount_collected, amount_remaining,
|
|
currency, status, note
|
|
FROM obligation_ledger
|
|
WHERE obligation_id = ?
|
|
ORDER BY id DESC LIMIT 20
|
|
");
|
|
$st->execute([(int) $obligation['id']]);
|
|
$entries = $st->fetchAll(PDO::FETCH_ASSOC);
|
|
} catch (PDOException $e) {
|
|
error_log('[fuel/get] تعذّرت قراءة الحالة: ' . $e->getMessage());
|
|
}
|
|
|
|
jsonSuccess([
|
|
'enrolled' => true,
|
|
'credit' => [
|
|
'limit' => $state['limit'],
|
|
'outstanding' => $state['outstanding'],
|
|
'held' => $state['held'],
|
|
'available' => $state['available'],
|
|
'currency' => $obligation['currency'],
|
|
// نسبة الاقتطاع اليومي معروضة صراحةً: الخصم من الأرباح يجب ألّا
|
|
// يكون مفاجأة، والسائق الذي يعرف أن الاقتطاع ١٥٪ يخطّط عليه.
|
|
'daily_cap_percent' => (float) $obligation['daily_cap_percent'],
|
|
],
|
|
'voucher' => $voucher,
|
|
'entries' => $entries,
|
|
], 'success');
|