إنتقل إلى المحتوى الرئيسي

إدارة الشركات

نظرة عامة

يوضح هذا الدليل كيفية إدارة شركات النقل في النظام.

حالات الشركة

الحالةالوصف
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;