Update: 2026-08-07 05:56:50
This commit is contained in:
@@ -261,3 +261,33 @@ function getMoneyHardCap(string $currency): float
|
||||
// والصرف الخاطئ لا يُسترد.
|
||||
return $caps[strtoupper($currency)] ?? min($caps);
|
||||
}
|
||||
|
||||
/**
|
||||
* تسعير داخلي للرحلات التي تُنشأ خادمياً (الحجز المسبق).
|
||||
*
|
||||
* ⚠️ ليس بديلاً عن ride/pricing/get.php — ذاك محرك كامل فيه الذروة
|
||||
* وإضافات المطار والخصومات المناطقية، ويُستدعى من التطبيق مع رمز سعر
|
||||
* موقَّع. هذه دالة أبسط لمسار واحد لا يملك رمزاً ولا جلسة راكب.
|
||||
*
|
||||
* المكوّنات هي نفسها التي تُسوَّى بها الرحلة في finish_ride_updates.php:
|
||||
* فتحة العداد + المسافة × سعر الكيلومتر + الزمن × سعر الدقيقة
|
||||
*
|
||||
* فالنتيجة متسقة مع ما سيُحاسَب عليه الراكب فعلاً عند الإنهاء، وأي فرق
|
||||
* يبقى في صالحه لا ضده (لا تُحتسب إضافات الذروة هنا).
|
||||
*/
|
||||
function computeInternalRidePrice(array $kazan, string $carType,
|
||||
float $distanceKm, int $durationSeconds): float
|
||||
{
|
||||
$startPrice = (float) ($kazan['startPrice'] ?? 0);
|
||||
$perKm = getPerKmRate($carType, $kazan);
|
||||
$perMin = getPerMinRate($kazan);
|
||||
|
||||
// حد أدنى للمسافة المحتسبة — يمنع رحلة بمسافة صفر من إنتاج سعر صفر
|
||||
// إن وصلت بيانات ناقصة.
|
||||
$km = max(0.2, $distanceKm);
|
||||
$minutes = max(1.0, $durationSeconds / 60.0);
|
||||
|
||||
$price = $startPrice + ($km * $perKm) + ($minutes * $perMin);
|
||||
|
||||
return round(max(0.0, $price), 2);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user