78 lines
3.3 KiB
PHP
78 lines
3.3 KiB
PHP
<?php
|
|
/**
|
|
* fuel/enroll.php — تفعيل محفظة الوقود للسائق
|
|
*
|
|
* يفتح التزام `fuel_wallet` بسقف ائتمان مبدئي. لا يصرف شيئاً — الصرف
|
|
* يبدأ بقسيمة، والدَّين يُقيَّد عند تأكيد المحطة.
|
|
*/
|
|
|
|
require_once __DIR__ . '/../connect.php';
|
|
require_once __DIR__ . '/functions.php';
|
|
require_once __DIR__ . '/../driver_assurance/eligibility.php';
|
|
|
|
$driverId = $user_id ?? '';
|
|
if (empty($driverId) || ($role ?? '') !== 'driver') {
|
|
jsonError('Unauthorized', 401);
|
|
}
|
|
|
|
if (fuelObligation($con, $driverId)) {
|
|
jsonError('محفظة الوقود مفعّلة لديك بالفعل');
|
|
}
|
|
|
|
$product = obligationProduct($con, FUEL_PRODUCT_CODE);
|
|
if (!$product) {
|
|
error_log('[fuel/enroll] منتج محفظة الوقود غير موجود أو مُطفأ');
|
|
jsonError('محفظة الوقود غير متاحة حالياً');
|
|
}
|
|
|
|
// شروط الرحلات والتقييم تُقاس بالدالة نفسها التي يستعملها التأمين:
|
|
// المنطق واحد (سائق أثبت أنه باقٍ)، وازدواج تطبيقه كان سينتج معيارين
|
|
// يفترقان بصمت عند أول تعديل.
|
|
$check = assuranceCheckEligibility($con, $driverId, $product);
|
|
if (!$check['eligible']) {
|
|
jsonError('لم تستوفِ شروط محفظة الوقود بعد: ' . implode('، ', $check['reasons']));
|
|
}
|
|
|
|
// بوابة الائتمان أشدّ هنا منها في التأمين: الوقود قيمة فعلية تُسلَّم في
|
|
// خزّان السيارة، ولا سبيل لاستردادها إلا من أرباح تمرّ بالمحفظة.
|
|
$gate = obligationCheckWalletIncome($product, $driverId);
|
|
if (!$gate['eligible']) {
|
|
jsonError(
|
|
'محفظة الوقود تُسدَّد من أرباحك في المحفظة، ولذلك تشترط أن تمرّ أرباحك بها: '
|
|
. implode('، ', $gate['reasons'])
|
|
);
|
|
}
|
|
|
|
// السقف المبدئي واحد للجميع في هذه المرحلة. رفعه بحسب سلوك السداد قرار
|
|
// لاحق يحتاج بيانات لا نملكها بعد — ومنح سقف متدرّج بلا تاريخ سداد
|
|
// تخمينٌ يرتدي ثوب الخوارزمية.
|
|
$defaultLimit = (float) (getenv('FUEL_DEFAULT_CREDIT_LIMIT') ?: 30);
|
|
|
|
try {
|
|
$con->beginTransaction();
|
|
|
|
$obligationId = obligationOpen($con, $driverId, FUEL_PRODUCT_CODE, [
|
|
'cycle_amount' => 0, // منتج سحب: لا قسط دوري له
|
|
'rides' => $check['rides'],
|
|
'rating' => $check['rating'],
|
|
]);
|
|
|
|
$con->prepare("UPDATE driver_obligations SET credit_limit = ? WHERE id = ?")
|
|
->execute([$defaultLimit, $obligationId]);
|
|
|
|
$con->commit();
|
|
} catch (Throwable $e) {
|
|
if ($con->inTransaction()) $con->rollBack();
|
|
error_log('[fuel/enroll] ' . $e->getMessage());
|
|
jsonError('تعذّر تفعيل محفظة الوقود حالياً');
|
|
}
|
|
|
|
error_log("[fuel] فُعّلت محفظة الوقود للسائق $driverId بسقف $defaultLimit");
|
|
|
|
jsonSuccess([
|
|
'obligation_id' => $obligationId,
|
|
'credit_limit' => $defaultLimit,
|
|
'available' => $defaultLimit,
|
|
'currency' => $product['currency'],
|
|
], 'تم تفعيل محفظة الوقود');
|