45 lines
3.9 KiB
SQL
45 lines
3.9 KiB
SQL
-- 2026_08_07_driver_cancel_compensation.sql
|
||
--
|
||
-- تعويض السائق عند عدم حضور الراكب (إلغاء السائق بعد الوصول والانتظار).
|
||
-- النموذج: التعويض = مسافة الاقتراب إلى الراكب × سعر الكيلومتر لنوع السيارة
|
||
-- + دقائق الانتظار الفعلية × سعر الدقيقة حسب وقت اليوم.
|
||
-- يُخصم من محفظة الراكب ويُضاف لمحفظة السائق. الأسعار من kazan نفسه الذي
|
||
-- تُسعَّر به الرحلة، عبر ride/pricing/pricing_helper.php.
|
||
--
|
||
-- يستبدل هذا الملف مقاربة "الرسم الثابت" السابقة: المبلغ لم يعد يُقرأ من
|
||
-- طلب العميل (كان filterRequest("penalty_fee") بلا سقف ولا تحقق)، ولم يعد
|
||
-- رقماً ثابتاً — صار محسوباً من بيانات مسجَّلة على الخادم.
|
||
--
|
||
-- ⚠️ هذا الملف لقاعدة ride (intaleq-ridesDB) حصراً. جدول kazan لا يُمسّ هنا: بنيته في قاعدة الرحلات أقدم ومختلفة الأعمدة، ولا يُقرأ في هذا المسار.
|
||
|
||
-- ══════════════════════════════════════════════════════════════
|
||
-- ٢) بيانات الوصول والاقتراب (قاعدتا primary و ride)
|
||
--
|
||
-- هذان العمودان للتوثيق النهائي فقط ولا يُكتبان أثناء الرحلة: القيمتان
|
||
-- تعيشان في هاش Redis نفسه الذي يستخدمه السوكِت لحالة الرحلة
|
||
-- (ride:$id:state، الحقول pickup_approach_km و driver_arrived_at)،
|
||
-- وتُثبَّتان هنا كتابةً واحدة مدمجة في جملة تحديث الحالة عند الإلغاء.
|
||
-- أي: صفر كتابات إضافية على المسار الحار (القبول والوصول).
|
||
-- ══════════════════════════════════════════════════════════════
|
||
ALTER TABLE `ride`
|
||
ADD COLUMN `driverArrivedAt` DATETIME NULL DEFAULT NULL
|
||
COMMENT 'لحظة تأكيد وصول السائق لنقطة الالتقاط — يختمها الخادم بعد تحقق الموقع',
|
||
ADD COLUMN `pickupApproachKm` FLOAT NOT NULL DEFAULT 0
|
||
COMMENT 'المسافة من موقع السائق لحظة القبول إلى نقطة الالتقاط (كم)';
|
||
|
||
-- ══════════════════════════════════════════════════════════════
|
||
-- ٣) تطبيق الإيقاف على الخادم (قاعدتا primary و ride)
|
||
-- كان الإيقاف يُكتب في تخزين تطبيق السائق وحده، فيُفكّ بإعادة التثبيت.
|
||
--
|
||
-- مسار الفحص في acceptRide.php هو مفتاح Redis بـ TTL (driver:$id:blocked)
|
||
-- فينتهي الإيقاف تلقائياً بلا كرون تنظيف وبلا استعلام على كل قبول.
|
||
-- هذا العمود سجل دائم للمراجعة الإدارية، يُكتب في الإلغاء الثالث فقط.
|
||
-- ══════════════════════════════════════════════════════════════
|
||
ALTER TABLE `driver`
|
||
ADD COLUMN `blockedUntil` DATETIME NULL DEFAULT NULL
|
||
COMMENT 'إيقاف استقبال الرحلات حتى هذا الوقت (إلغاءات متكررة). NULL = غير موقوف';
|
||
|
||
-- للتراجع:
|
||
-- ALTER TABLE `ride` DROP COLUMN `driverArrivedAt`, DROP COLUMN `pickupApproachKm`;
|
||
-- ALTER TABLE `driver` DROP COLUMN `blockedUntil`;
|