Update: 2026-08-08 12:58:16
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
<?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'],
|
||||
], 'تم تفعيل محفظة الوقود');
|
||||
Reference in New Issue
Block a user