إدارة الشركات
نظرة عامة
يوضح هذا الدليل كيفية إدارة شركات النقل في النظام.
حالات الشركة
| الحالة | الوصف |
|---|---|
pending | بانتظار الموافقة |
approved | معتمدة ونشطة |
suspended | موقوفة مؤقتاً |
rejected | مرفوضة |
دورة الإنذارات
إنذار نشط: الشركة تحت الإنذار حالياً وما زالت المهلة مفتوحة.إنذار منتهي: انتهت مهلة الإنذار وكان ذلك واضحاً في سجل الإنذارات.إنذار مُزال: تمت إزالة الإنذار يدوياً من قبل الإدارة قبل انتهاء المهلة.
واجهة إدارة الشركات تعرض الآن سجل الإنذارات مع حالة واضحة لكل عنصر، ويستخدم المكوّن data-testid="warnings-history" و data-testid="warning-item" لتثبيت اختبارات الانحدار.
قبول شركة جديدة
1. مراجعة بيانات الشركة
SELECT
c.*,
cu.email,
cu.name as owner_name
FROM companies c
JOIN company_users cu ON cu.company_id = c.id AND cu.role = 'OWNER'
WHERE c.status = 'pending';
2. التحقق من المستندات
قائمة التحقق:
- ترخيص النقل ساري المفعول
- السجل التجاري
- بيانات المالك صحيحة
- أرقام الهواتف فعالة
3. الموافقة على الشركة
UPDATE companies
SET
status = 'approved',
approved_at = NOW(),
approved_by = 'admin_user_id'
WHERE id = 'company_id';
4. إرسال إشعار للشركة
يتم إرسال إشعار تلقائي عبر WhatsApp/SMS.
رفض شركة
السبب الموثق
UPDATE companies
SET
status = 'rejected',
rejection_reason = 'سبب الرفض هنا',
rejected_at = NOW(),
rejected_by = 'admin_user_id'
WHERE id = 'company_id';
تعليق شركة
أسباب التعليق
- شكاوى متكررة من العملاء
- عدم الالتزام بالمواعيد
- مشاكل في الخدمة
- انتهاء الترخيص
تنفيذ التعليق
UPDATE companies
SET
status = 'suspended',
suspension_reason = 'سبب التعليق',
suspended_at = NOW(),
suspended_by = 'admin_user_id'
WHERE id = 'company_id';
التأثيرات
- إلغاء جميع الرحلات المستقبلية
- إخفاء الشركة من نتائج البحث
- إشعار العملاء الذين لديهم حجوزات
- منع تسجيل الدخول الجديد إلى لوحة الشركات
- رفض الطلبات الحساسة التي تغيّر الحجوزات أو الإعدادات أو اشتراكات الإشعارات من الجلسات الموقوفة
إلغاء التعليق
UPDATE companies
SET
status = 'approved',
suspension_reason = NULL,
unsuspended_at = NOW()
WHERE id = 'company_id';
إحصائيات الشركة
عرض أداء الشركة
SELECT
c.name_ar,
(
SELECT COUNT(*)
FROM bookings b
JOIN trips t ON t.id = b.trip_id
JOIN routes route ON route.id = t.route_id
WHERE route.company_id = c.id
) AS total_bookings,
(
SELECT COUNT(*)
FROM trips t
JOIN routes route ON route.id = t.route_id
WHERE route.company_id = c.id
) AS total_trips,
(
SELECT AVG(review.overall_rating)
FROM trip_reviews review
WHERE review.company_id = c.id
AND review.status = 'PUBLISHED'
) AS avg_rating
FROM companies c
WHERE c.id = 'company_id';
سجل التدقيق
جميع إجراءات إدارة الشركات تُسجَّل تلقائياً في audit_log.
SELECT * FROM audit_log
WHERE entity_type = 'company'
AND entity_id = 'company_id'
ORDER BY created_at DESC;