# نظام حسابات وإدارة عملاء شركات الاستضافة — نسخة CodeIgniter 4

نفس النظام اللي بنيناه بلارافيل، لكن بـ CodeIgniter 4، بنفس الوظائف:
Multi-Company، فواتير، تنبيهات بريد تلقائية (تجديدات + استحقاق فواتير)،
عمولات مسوّقين، فروقات عملات، أرباح/خسائر، عربي/إنجليزي، بوابة عميل، لوحة أدمن (Bootstrap 5).

## ⚠️ ملاحظة عن لوحة الأدمن
CodeIgniter ما فيهوش أداة جاهزة زي Filament (المستخدمة بنسخة لارافيل)، فلوحة الأدمن هنا
مبنية يدوياً بـ Bootstrap 5 — وظيفياً كاملة (كل الشاشات CRUD + عزل شركات + تقارير) لكن
بدون الإضافات التلقائية زي الفلاتر المتقدمة أو الرفع بالسحب، وهي نقطة تقدر تطورها لاحقاً.

---

## 1. تثبيت CodeIgniter 4
```bash
composer create-project codeigniter4/appstarter hosting-erp-ci4
cd hosting-erp-ci4
```

## 2. انسخ ملفات الحزمة فوق المشروع
من حزمتي، انسخ (استبدال عند التعارض):
```
app/Config/Routes.php        → استبدل
app/Controllers/              → انسخ بالكامل (يشمل BaseController, AuthController)
app/Models/                   → انسخ بالكامل
app/Database/Migrations/      → انسخ الملفات الـ13
app/Database/Seeds/DemoDataSeeder.php → انسخ
app/Views/                    → انسخ بالكامل
app/Language/                 → انسخ بالكامل (ar + en)
app/Commands/                 → انسخ بالكامل
app/Filters/                  → انسخ بالكامل
app/Helpers/email_locale_helper.php → انسخ
database/database.sql         → انسخ (اختياري، بديل عن المايجريشن)
```

## 3. فعّل الـ Filters (المصادقة + اللغة)
افتح `app/Config/Filters.php` الأصلي، وطبّق الإضافات من `app/Config/Filters.php.snippet`:
- أضف `adminAuth`, `clientAuth`, `locale` داخل مصفوفة `$aliases`
- أضف `'locale'` داخل `$globals['before']`

## 4. فعّل اللغتين
افتح `app/Config/App.php` الأصلي، وطبّق التعديلات من `app/Config/App.php.snippet`
(`defaultLocale`, `supportedLocales`, `appTimezone`)

## 5. ملف البيئة
انسخ محتوى `.env` المرفق إلى جذر مشروعك (أو عدّل `.env` الموجود عندك بنفس القيم)،
وحدّث بيانات `database.default.*` بمعلومات قاعدة بياناتك.

## 6. قاعدة البيانات — طريقتان

**الطريقة أ (المايجريشن القياسية بـ CI4):**
```bash
php spark migrate
php spark db:seed DemoDataSeeder
```

**الطريقة ب (استيراد SQL مباشر):**
```bash
mysql -u root -p hosting_erp < database/database.sql
```

## 7. التشغيل محلياً
```bash
php spark serve
```
- لوحة الأدمن: `http://localhost:8080/admin/login`
- بوابة العميل: `http://localhost:8080/client/login`

بيانات الدخول التجريبية (كلمة المرور لكلها `password`):
| الحساب | البريد |
|---|---|
| سوبر أدمن | super@admin.test |
| مدير شركة | admin@example-hosting.test |
| عميل | client1@example.test |

## 8. التنبيهات التلقائية (Cron)
CodeIgniter ما فيهوش Scheduler مدمج زي لارافيل، فالحل مباشرة عبر cron بثلاثة أسطر
على السيرفر:
```
0 8 * * * cd /path-to-project && php spark app:check-renewals >> /dev/null 2>&1
30 8 * * * cd /path-to-project && php spark app:check-invoice-due-dates >> /dev/null 2>&1
5 0 * * * cd /path-to-project && php spark app:mark-overdue-invoices >> /dev/null 2>&1
```

للتجربة اليدوية من سطر الأوامر:
```bash
php spark app:check-renewals
php spark app:check-invoice-due-dates
```

## ملاحظة مهمة: إرسال البريد بدون Queue
لارافيل بيرسل البريد بالخلفية (Queue) عشان ما يعلقش الموقع. CodeIgniter مفيهوش Queue
مدمج، فالإيميلات هنا بترسل مباشرة (Synchronous) وقت تشغيل أمر الـ cron نفسه —
مناسب تماماً لعدد عملاء متوسط، لكن لو عندك مئات العملاء وعايز أداء أفضل، الحل
لاحقاً: استخدام مكتبة queue خارجية زي `codeigniter4/queue` أو تنفيذ عبر جدول
`jobs` مخصص تعمله بنفسك.

## المزايا المطبّقة (نفس نسخة لارافيل وظيفياً)
- ✅ Multi-Company مع سوبر أدمن (`is_super_admin`) وعزل بيانات لكل شركة (`forCompany()`)
- ✅ عملاء، خدمات (استضافة/نطاقات)، فواتير + بنود + دفعات
- ✅ تنبيهات بريد تلقائية (عربي/إنجليزي حسب لغة العميل) قبل مدة زمنية للتجديد والاستحقاق
- ✅ حساب عمولة المسوّق تلقائياً عند تسجيل دفعة (`PaymentModel::afterPaymentCreated`)
- ✅ فروقات أسعار العملات (`InvoiceModel::currencyDifference`)
- ✅ تقرير أرباح وخسائر شهري بلوحة الأدمن
- ✅ بوابة عميل مستقلة (Session guard خاص بالعميل عبر `clientAuth` filter)
- ✅ واجهتان عربي/إنجليزي RTL/LTR بالكامل

## نقاط التوسعة المقترحة
- استبدال تنفيذ الفلترة اليدوية `forCompany()` بمكتبة أعمق لو كبر عدد الشركات
- توليد PDF للفواتير (`mpdf/mpdf` أو `dompdf/dompdf` عبر Composer)
- ربط بوابة دفع أونلاين لتفعيل الدفع من بوابة العميل مباشرة
- تفعيل CI4 Shield (`codeigniter4/shield`) بدل نظام الجلسات اليدوي لصلاحيات أكثر تفصيلاً

---
بالتوفيق 🚀 لو احتجت تعديل أو ميزة إضافية، قولّي وأكمل معاك.
