50 lines
4.0 KiB
SQL
50 lines
4.0 KiB
SQL
-- 2026_08_07_driver_cancel_compensation.sql
|
|
--
|
|
-- تعويض السائق عند عدم حضور الراكب (إلغاء السائق بعد الوصول والانتظار).
|
|
-- النموذج: التعويض = مسافة الاقتراب إلى الراكب × سعر الكيلومتر لنوع السيارة
|
|
-- + دقائق الانتظار الفعلية × سعر الدقيقة حسب وقت اليوم.
|
|
-- يُخصم من محفظة الراكب ويُضاف لمحفظة السائق. الأسعار من kazan نفسه الذي
|
|
-- تُسعَّر به الرحلة، عبر ride/rides/pricing_helper.php.
|
|
--
|
|
-- يستبدل هذا الملف مقاربة "الرسم الثابت" السابقة: المبلغ لم يعد يُقرأ من
|
|
-- طلب العميل (كان filterRequest("penalty_fee") بلا سقف ولا تحقق)، ولم يعد
|
|
-- رقماً ثابتاً — صار محسوباً من بيانات مسجَّلة على الخادم.
|
|
--
|
|
-- ⚠️ يُنفَّذ على قاعدتَي primary و ride معاً: الكود يكتب جدول ride في الاثنتين.
|
|
|
|
-- ══════════════════════════════════════════════════════════════
|
|
-- ١) سياسة التعويض لكل دولة (قاعدة primary فقط — kazan يُقرأ عبر $con)
|
|
-- ══════════════════════════════════════════════════════════════
|
|
ALTER TABLE `kazan`
|
|
ADD COLUMN `cancelCompensationCap` VARCHAR(10)
|
|
CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
|
|
NOT NULL DEFAULT '0'
|
|
COMMENT 'سقف تعويض عدم حضور الراكب بعملة الدولة. 0 = التعويض معطّل بالكامل'
|
|
AFTER `startPrice`,
|
|
ADD COLUMN `cancelMinWaitMinutes` TINYINT UNSIGNED
|
|
NOT NULL DEFAULT 5
|
|
COMMENT 'أقل دقائق انتظار بعد الوصول قبل أن يستحق السائق تعويضاً'
|
|
AFTER `cancelCompensationCap`;
|
|
|
|
-- ══════════════════════════════════════════════════════════════
|
|
-- ٢) بيانات الوصول والاقتراب (قاعدتا primary و ride)
|
|
-- ══════════════════════════════════════════════════════════════
|
|
ALTER TABLE `ride`
|
|
ADD COLUMN `driverArrivedAt` DATETIME NULL DEFAULT NULL
|
|
COMMENT 'لحظة تأكيد وصول السائق لنقطة الالتقاط — يختمها الخادم بعد تحقق الموقع',
|
|
ADD COLUMN `pickupApproachKm` FLOAT NOT NULL DEFAULT 0
|
|
COMMENT 'المسافة من موقع السائق لحظة القبول إلى نقطة الالتقاط (كم)';
|
|
|
|
-- ══════════════════════════════════════════════════════════════
|
|
-- ٣) تطبيق الإيقاف على الخادم (قاعدتا primary و ride)
|
|
-- كان الإيقاف يُكتب في تخزين تطبيق السائق وحده، فيُفكّ بإعادة التثبيت.
|
|
-- ══════════════════════════════════════════════════════════════
|
|
ALTER TABLE `driver`
|
|
ADD COLUMN `blockedUntil` DATETIME NULL DEFAULT NULL
|
|
COMMENT 'إيقاف استقبال الرحلات حتى هذا الوقت (إلغاءات متكررة). NULL = غير موقوف';
|
|
|
|
-- للتراجع:
|
|
-- ALTER TABLE `kazan` DROP COLUMN `cancelCompensationCap`, DROP COLUMN `cancelMinWaitMinutes`;
|
|
-- ALTER TABLE `ride` DROP COLUMN `driverArrivedAt`, DROP COLUMN `pickupApproachKm`;
|
|
-- ALTER TABLE `driver` DROP COLUMN `blockedUntil`;
|