★ الهدف
دلوقتي أساليب الدفع (كاش / فيزا / تمارا / تابي / تحويل) ثابتة (static) ومكتوبة في الكود. المطلوب أخليها ديناميكية تقدر من الإعدادات:
➕ تضيف أسلوب➖ تشيل أسلوب⏸️ تعطّل أسلوب🎨 تحدد اسم + أيقونة🔗 تربطه بخزنة/حساب↕️ ترتيب
فهمك صح: أسلوب الدفع = اسم + أيقونة + خزنة (حساب) الفلوس بتروح لها. فالديناميكية معناها تعريف القايمة دي وتعديلها من السيتنج.
1 الوضع الحالي (إزاي شغّال دلوقتي)
| الطبقة | الحالة الآن |
|---|---|
| الواجهة (شاشة التحصيل + الويزارد) | ليستة ثابتة في الكود: cash, visa, tamara, tabby, bank_transfer |
| الباك-إند: نوع البيان | LabPaymentMethod = enum ثابت (5 قيم) |
| التحقق (validation) | Rule::enum(LabPaymentMethod) — يرفض أي قيمة برّه الـ5 |
| عمود الداتابيز | payment_method varchar(30) مرن ✅ (مش enum في الـDB) |
| ربط الأسلوب بالحساب | إعداد lis.method_accounts = {method: account_id} (والكاش بقى per-branch) |
الخبر الكويس: عمود الـDB
varchar مش enum — يعني نقدر نضيف أساليب جديدة من غير migration كل مرة ومن غير ما نلخبط أي دفعات قديمة. القيود بس في الـenum + الـvalidation + الليستة الثابتة في الواجهة — وكلها هنشيلها.2 التصميم المقترح
نفصل مفهومين:
① أساليب الدفع (الجديد — الديناميكي)
تعريف كل أسلوب:key + اسم (AR/EN) + icon + is_active + sort. يتدار من السيتنج (إضافة/حذف/تعطيل/ترتيب).② ربط الأسلوب بالخزنة/الحساب (موجود)
method_accounts: كل أسلوب → حساب الخزنة اللي بيروح لها (والكاش per-branch). نحتفظ بيه زي ما هو.📦 مكان التخزين — جدول مخصّص lab_payment_methods (موصى به)
-- جدول جديد lab_payment_methods( id, company_id, key // slug: cash / visa / stcpay … label_ar, label_en, icon, // pi-money-bill / pi-credit-card / pi-wallet … account_id (nullable),// الخزنة/الحساب المربوط (اختياري) is_cash (bool), // علشان توجيه per-branch للكاش is_active (bool), sort_order, timestamps )
3 اللي هيتعمل بالظبط
⚙️ Backend
- جدول + موديل + Resource لـ
lab_payment_methods+ seeder للأساليب الحالية (cash/visa/tamara/tabby/bank_transfer) عشان التوافق. - CRUD endpoints: list / create / update / delete (أو toggle active) — صلاحية
lis.settings. - إلغاء قيد الـenum: الـvalidation تتأكد إن الأسلوب ضمن الأساليب المفعّلة (من الجدول) بدل
Rule::enum. عمود الـDB يفضل varchar. القيمة المخزّنة =keyالأسلوب. - حل اللابل: عرض اسم الأسلوب في الردود يتقرأ من الجدول (AR/EN) بدل الـenum.
- endpoint التوجيه
/payments/routingيرجّع الأساليب المفعّلة (key + label + icon) + الـresolvedmap زي ما هو.
🎨 Frontend
- شاشة التحصيل + الويزارد: يقرأوا الأساليب ديناميكياً من الـrouting (اسم + أيقونة، المفعّلة بس) بدل الليستة الثابتة.
- تبويب «أساليب الدفع» في إعدادات المعمل: جدول بأزرار إضافة/تعديل/حذف + سويتش تفعيل + اختيار أيقونة + ربط بالخزنة + ترتيب بالسحب.
🔁 التوافق مع القديم
- الدفعات القديمة قيمتها (cash/visa…) تفضل شغّالة — الـseeder بيعرّف نفس الـkeys.
- التوجيه per-branch للكاش يفضل زي ما هو (الكاش أسلوب
is_cash).
4 أمثلة على المرونة بعد التنفيذ
- تضيف «STC Pay» بأيقونة محفظة وتربطه بحساب → يظهر فوراً للكاشير.
- تعطّل «تابي» مؤقتاً → يختفي من شاشة التحصيل من غير حذف بياناته.
- تعيد ترتيب الأساليب عشان الكاش يبقى الأول.
- كل أسلوب فلوسه بتروح لخزنته (وللكاش: خزنة فرع الكاشير).
→ الخطوة التالية
راجع الخطة. لو موافق أبدأ بـ جدول lab_payment_methods + CRUD + seeder ثم الواجهة (تحصيل ديناميكي + تبويب الإعدادات).
سؤال قبل التنفيذ: تمشي على جدول مخصّص (الموصى به)؟ ولا تفضّل الأخف (توسيع إعداد JSON)؟ وقول لي «ابدأ».