Update: 2026-08-07 00:57:03

This commit is contained in:
Hamza-Ayed
2026-08-07 00:57:03 +03:00
parent 6e451e8b71
commit a1104a4695
10 changed files with 338 additions and 188 deletions
@@ -0,0 +1,49 @@
-- 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`;
@@ -1,22 +0,0 @@
-- 2026_08_07_kazan_cancel_penalty_policy.sql
--
-- ‏سبب الترحيل: كان مبلغ غرامة الإلغاء في ride/rides/cancel_ride_by_driver.php
-- ‏يُقرأ من طلب العميل مباشرة (filterRequest("penalty_fee")) ويُخصم من محفظة
-- ‏الراكب بلا سقف ولا تحقق — أي أن طلباً مصاغاً يدوياً كان يقدر يخصم أي مبلغ
-- ‏من أي راكب. صار المبلغ يُقرأ من هنا فقط، ولا يقبل الخادم أي قيمة من العميل.
--
-- ‏القيمة الافتراضية '0' تحفظ السلوك الحالي حرفياً: لا عميل يرسل penalty_fee
-- ‏اليوم، فالغرامة لا تُطبَّق فعلياً. تفعيلها قرار إداري صريح بتحديث الصف.
--
-- ‏القاعدة المستهدفة: primary فقط — الكود يقرأ kazan عبر $con، وجدول kazan في
-- ‏قاعدتي ride/tracking بنية أقدم ومختلفة الأعمدة (لا يُستخدم في هذا المسار).
ALTER TABLE `kazan`
ADD COLUMN `cancelPenaltyFee` VARCHAR(10)
CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
NOT NULL DEFAULT '0'
COMMENT 'غرامة إلغاء السائق بعد القبول، تُخصم من محفظة الراكب. 0 = معطّلة'
AFTER `startPrice`;
-- ‏للتراجع:
-- ALTER TABLE `kazan` DROP COLUMN `cancelPenaltyFee`;