نظام إدارة التقسيط والعقود

شرح تفصيلي شامل للنظام والشاشات والأفكار المطبقة

Laravel 11 Filament 4 PHP 8.2+
نظرة عامة على النظام

الهدف من النظام

نظام متكامل لإدارة عمليات بيع المنتجات بالتقسيط، مع إمكانية تتبع كامل لعمليات السداد، حساب الأرباح، إدارة الشركاء، والحصول على تقارير مالية تفصيلية.

إدارة العملاء

قاعدة بيانات كاملة للعملاء والضامنين

إدارة العقود

عقود متعددة بشروط مختلفة

إدارة التقسيط

متابعة الأقساط والسداد

التقارير المالية

تقارير شاملة ومفصلة

الوحدات الأساسية للنظام
وحدة إدارة العملاء (Customers)
البيانات المخزنة:
  • الاسم، رقم الهاتف، العنوان
  • البطاقة الشخصية (رقم - صورة)
  • صورة إيصال الكهرباء
  • صورة العميل
  • ربط بضامن (اختياري)
الميزات:
  • إنشاء عميل جديد من داخل نموذج العقد مباشرة
  • البحث السريع عن العملاء
  • عرض جميع العقود المرتبطة بالعميل
وحدة الضامنين (Guarantors)
البيانات المخزنة:
  • الاسم، رقم الهاتف، العمر
  • البطاقة الشخصية (رقم - صورة)
  • العنوان
  • ملاحظات عامة
الاستخدام:

الضامن يرتبط بالعقد لضمان السداد في حالة التعثر. يمكن أن يكون الضامن واحد لعدة عقود.

وحدة المنتجات (Products)
البيانات المخزنة:
  • اسم المنتج، الموديل، اللون
  • سعر الشراء (من المورد)
  • سعر البيع (للعميل)
  • التصنيف (Category)
  • العلامة التجارية (Brand)
  • الوسوم (Tags) - متعدد
ملاحظة: يمكن ربط عدة منتجات بعقد واحد (Many-to-Many Relationship)
وحدة المصروفات (Expenses)
البيانات المخزنة:
  • العنوان، الوصف، المبلغ
  • التصنيف (ExpenseCategory)
  • تاريخ الصرف، طريقة الدفع
  • رقم الإيصال، المورد
  • المرفقات (صور - مستندات)
  • حالة الموافقة (pending/approved/rejected)
نظام الموافقات: المصاريف تحتاج موافقة قبل احتسابها في التقارير المالية
منطق العقود والتقسيط - التفاصيل الكاملة
دورة حياة العقد (Contract Lifecycle)
1. إنشاء العقد

يتم اختيار العميل والضامن (إن وجد) والمنتجات

2. تحديد الشروط المالية

السعر الأصلي + نسبة الربح = سعر التقسيط النهائي

3. تحديد خطة السداد

عدد الأقساط، قيمة القسط، الفترة بين الأقساط (شهري/ربع سنوي/نصف سنوي/سنوي)

4. توليد الأقساط تلقائياً

يقوم النظام بإنشاء جدول الأقساط بناءً على الشروط المحددة

5. متابعة السداد

تسجيل المدفوعات، تحديث حالة الأقساط، حساب المتبقي

الحسابات التلقائية في نموذج العقد
1. عند إدخال السعر الأصلي ونسبة الربح:
السعر النهائي = السعر الأصلي + (السعر الأصلي × نسبة الربح / 100) فرق السعر = السعر النهائي - السعر الأصلي مثال: السعر الأصلي = 10,000 جنيه نسبة الربح = 20% ─────────────────── السعر النهائي = 10,000 + (10,000 × 20 / 100) = 12,000 جنيه فرق السعر = 2,000 جنيه (الربح)
2. عند تحديد عدد الأقساط:
قيمة القسط = السعر النهائي ÷ عدد الأقساط مثال: السعر النهائي = 12,000 جنيه عدد الأقساط = 12 قسط ─────────────────── قيمة القسط = 12,000 ÷ 12 = 1,000 جنيه/شهرياً
3. حساب تواريخ الأقساط:
تاريخ أول قسط = تاريخ العقد + الفترة المحددة الفترات المتاحة: - شهري (Monthly): + 1 شهر - ربع سنوي (Quarterly): + 3 أشهر - نصف سنوي (Semiannual): + 6 أشهر - سنوي (Annual): + 12 شهر مثال (شهري): تاريخ العقد = 2026-01-01 تاريخ أول قسط = 2026-02-01 تاريخ ثاني قسط = 2026-03-01 ... وهكذا
التحسينات المطبقة:
  • تحديث قيمة القسط تلقائياً عند تغيير السعر الأصلي
  • تحديث قيمة القسط تلقائياً عند تغيير نسبة الربح
  • تحديث قيمة القسط تلقائياً عند تغيير عدد الأقساط
  • حساب تاريخ أول قسط تلقائياً بناءً على الفترة المختارة
حقول العقد (Contract Fields)
الحقل الوصف النوع مطلوب
customer_id العميل علاقة (Select) نعم
guarantor_id الضامن علاقة (Select) اختياري
products المنتجات علاقة متعددة نعم
contract_date تاريخ العقد تاريخ نعم
contract_image صورة العقد رفع ملف اختياري
mobile_serial أرقام السيريال نص متعدد الأسطر (JSON) اختياري
original_price السعر الأصلي رقم (Numeric) نعم
profit_percentage نسبة الربح % رقم (Numeric) نعم
installment_price سعر التقسيط النهائي رقم (محسوب تلقائياً) تلقائي
price_difference فرق السعر (الربح) رقم (محسوب تلقائياً) تلقائي
installment_count عدد الأقساط رقم صحيح نعم
installment_value قيمة القسط رقم (محسوب تلقائياً) تلقائي
installment_interval الفترة بين الأقساط قائمة (شهري/ربع سنوي/نصف سنوي/سنوي) نعم
first_installment_date تاريخ أول قسط تاريخ (محسوب تلقائياً) تلقائي
notes ملاحظات نص طويل اختياري
status حالة العقد قائمة نعم
منطق الأقساط التفصيلي (Installments Logic)
كيفية توليد الأقساط
عند إنشاء أو تعديل العقد:

يقوم النظام بتوليد جدول الأقساط تلقائياً بناءً على:

عدد الأقساط

المحدد في العقد

قيمة القسط

المحسوبة تلقائياً

الفترة الزمنية

شهري/ربع سنوي/...

بنية القسط (Installment Model):
الحقل الوصف القيمة الافتراضية
contract_id رقم العقد المرتبط -
due_date تاريخ الاستحقاق محسوب حسب الفترة
value قيمة القسط المستحق من العقد
paid_amount المبلغ المدفوع فعلياً 0
payment_date تاريخ السداد الفعلي null
is_paid هل تم السداد؟ false
notes ملاحظات -
ملاحظات مهمة:
  • يمكن الدفع جزئياً (paid_amount أقل من value)
  • is_paid يتحول لـ true فقط عند الدفع الكامل
  • يمكن تعديل تاريخ الاستحقاق يدوياً إذا لزم الأمر
حالات الأقساط (Installment States)
مدفوع

is_paid = true

قادم

due_date > اليوم

اليوم

due_date = اليوم

متأخر

due_date < اليوم

الإشعارات:

يظهر عدد الأقساط المتأخرة كـ Badge في قائمة التنقل للتنبيه

منطق الدفعات والسداد (Payments Logic)
أنواع المدفوعات في النظام
دفعات مرتبطة بأقساط

يتم تسجيلها عند سداد قسط محدد من جدول الأقساط

  • يجب اختيار عقد أولاً
  • اختيار القسط المراد سداده
  • إدخال المبلغ المدفوع
  • تحديث حالة القسط تلقائياً
دفعات مباشرة (غير مرتبطة بقسط)

دفعات إضافية أو مبالغ خارج جدول الأقساط

  • اختيار العميل
  • اختيار العقد
  • إدخال المبلغ مباشرة
  • تُحتسب في إجمالي المدفوعات
حقول نموذج الدفع (Payment Form)
الحقل الوصف مطلوب
customer_id اختيار العميل (يتم تصفية العقود بناءً عليه) نعم
contract_id اختيار العقد (يتم تصفية الأقساط بناءً عليه) نعم
installment_id 🆕 اختيار القسط (اختياري تماماً)
اتركه فارغاً وسيتم التوزيع التلقائي على جميع الأقساط
اختياري
amount المبلغ المدفوع نعم
payment_date تاريخ الدفع نعم
payment_method طريقة الدفع (نقدي/بنكي/...) اختياري
receipt_number رقم الإيصال اختياري
reference_number الرقم المرجعي اختياري
status حالة الدفع (completed/pending/...) نعم
notes ملاحظات اختياري
created_by المستخدم الذي سجل الدفعة تلقائي
التدفق التفاعلي لنموذج الدفع
الخطوة 1: اختيار العميل

عند اختيار العميل، يتم:

  • تفعيل قائمة العقود
  • عرض عقود هذا العميل فقط
  • مسح قيمة العقد والقسط السابقة
الخطوة 2: اختيار العقد

عند اختيار العقد، يتم:

  • تفعيل قائمة الأقساط
  • عرض الأقساط غير المدفوعة فقط
  • عرض معلومات العقد (رقم - المبلغ)
  • مسح قيمة القسط والمبلغ السابقة
الخطوة 3: إدخال المبلغ المدفوع 🆕
تحديث جديد: لا حاجة لاختيار قسط محدد!

ببساطة أدخل المبلغ الذي دفعه العميل:

  • النظام الجديد: إدخال المبلغ مباشرة (مثال: 2000 جنيه)
  • اختياري: يمكنك اختيار قسط محدد إذا أردت
  • التوزيع التلقائي: النظام يوزع المبلغ على الأقساط تلقائياً
الخطوة 4: الحفظ والتوزيع التلقائي 🎯
Observer يعمل تلقائياً!

عند الحفظ، يحدث التالي تلقائياً:

  • ✅ حفظ سجل الدفعة
  • 🔍 جلب الأقساط غير المدفوعة بالترتيب الزمني
  • 📊 توزيع المبلغ على الأقساط تلقائياً
  • 🎨 تحديث حالة كل قسط (مدفوع/جزئي/غير مدفوع)
  • 💰 تحديث paid_amount في كل قسط
  • 📈 تحديث إجمالي المدفوعات في العقد
مثال: دفع 2000 جنيه على 6 أقساط × 700 جنيه
النتيجة: قسط 1 ✅ (700) + قسط 2 ✅ (700) + قسط 3 ⚠️ (600) = 2000
الحسابات المالية في العقد
Attributes المحسوبة في موديل العقد
// 1. إجمالي المدفوع من الدفعات المباشرة public function getTotalPaidAttribute() { return $this->payments()->completed()->sum('amount'); } // 2. إجمالي المدفوع من الأقساط public function getTotalInstallmentsPaidAttribute() { return $this->installments()->where('is_paid', true)->sum('paid_amount'); } // 3. إجمالي المحصل الكلي (أقساط + مدفوعات مباشرة) public function getTotalCollectedAttribute() { return $this->total_paid + $this->total_installments_paid; } // 4. المبلغ المتبقي public function getRemainingAmountAttribute() { return $this->installment_price - $this->total_collected; } // 5. نسبة السداد (كنسبة مئوية) public function getPaymentPercentageAttribute() { if ($this->installment_price == 0) { return 0; } return round(($this->total_collected / $this->installment_price) * 100, 2); }
مثال عملي على الحسابات:
البيان القيمة طريقة الحساب
سعر التقسيط الكلي 12,000 جنيه installment_price
أقساط مدفوعة (5 أقساط × 1000) 5,000 جنيه total_installments_paid
دفعات مباشرة 2,000 جنيه total_paid
إجمالي المحصل 7,000 جنيه 5,000 + 2,000
المتبقي 5,000 جنيه 12,000 - 7,000
نسبة السداد 58.33% (7,000 ÷ 12,000) × 100
نظام الشركاء (Partners System)
مكونات نظام الشركاء
الشركاء (Partners)
البيانات:
  • الاسم، العنوان
  • رقم الهوية، الهاتف
  • الوظيفة
  • رأس المال الأولي
  • صورة الشريك
  • صورة البطاقة
الإيداعات (Deposits)
البيانات:
  • الشريك
  • المبلغ
  • التاريخ
  • طريقة الدفع
  • الملاحظات
تُحتسب في إيرادات الخزينة
المسحوبات (Withdrawals)
البيانات:
  • الشريك
  • المبلغ
  • التاريخ
  • طريقة الصرف
  • الملاحظات
تُحتسب في مصروفات الخزينة
حساب أرباح الشركاء:

يتم حساب حصة كل شريك من الأرباح في تقرير الأرباح بناءً على:

  • نسبة مساهمة الشريك من إجمالي رأس المال
  • الفترة الزمنية المحددة
  • إجمالي الأرباح المحققة
التقارير والإحصائيات
تقرير الخزينة العمومية
يعرض:
  • الرصيد الافتتاحي: قيمة محددة في الإعدادات
  • الإيرادات:
    • الأقساط المسددة
    • إيداعات الشركاء
  • المصروفات:
    • المصاريف المعتمدة
    • مسحوبات الشركاء
    • مشتريات المنتجات
  • الرصيد الختامي: الرصيد + الإيرادات - المصروفات
الفلاتر:
  • من تاريخ / إلى تاريخ
  • قيم افتراضية من الإعدادات
تقرير الأرباح
يعرض:
  • تفاصيل كل عقد:
    • العميل
    • المنتجات
    • سعر الشراء الإجمالي
    • سعر التقسيط
    • الربح = التقسيط - الشراء
  • توزيع الأرباح على الشركاء
الفلاتر:
  • من تاريخ / إلى تاريخ
  • العميل
  • المنتج
  • العلامة التجارية
  • التصنيف
تقارير الأقساط
  • الأقساط المستحقة اليوم
  • الأقساط المستحقة هذا الأسبوع
  • الأقساط المستحقة هذا الشهر
  • الأقساط المتأخرة
  • الأقساط المدفوعة في فترة
تقارير العملاء
  • كشف حساب عميل
  • عقود العميل
  • المدفوعات
  • الأقساط المتبقية
  • نسبة السداد
تقارير الشركاء
  • كشف حساب شريك
  • حركات الشريك
  • الإيداعات
  • المسحوبات
  • حصة الأرباح
شرح الشاشات بالتفصيل
1. لوحة التحكم (Dashboard)
الإحصائيات المعروضة:
إجمالي العملاء

عدد العملاء المسجلين

العقود النشطة

عدد العقود الجارية

أقساط اليوم

المستحقة اليوم

الأقساط المتأخرة

للمتابعة الفورية

الويدجتس (Widgets):
  • DashboardStatsWidget: إحصائيات عامة بـ Charts
  • TodayInstallmentsWidget: أقساط اليوم
  • LatestContractsWidget: أحدث العقود
  • InstallmentsChart: رسم بياني للأقساط
  • PaymentsOverviewWidget: نظرة عامة على المدفوعات
  • ExpenseOverviewWidget: نظرة عامة على المصروفات
  • ProductSalesChart: مبيعات المنتجات
2. شاشة العقود (Contracts)
العمليات المتاحة:
إضافة عقد جديد
  1. اختيار/إنشاء العميل
  2. اختيار/إنشاء الضامن (اختياري)
  3. اختيار/إنشاء المنتجات
  4. تحديد تاريخ العقد
  5. رفع صورة العقد (اختياري)
  6. إدخال أرقام السيريال (اختياري)
  7. إدخال السعر الأصلي
  8. تحديد نسبة الربح
  9. اختيار عدد الأقساط
  10. اختيار الفترة بين الأقساط
  11. مراجعة الحسابات التلقائية
  12. الحفظ
عرض العقد
  • معلومات العقد الكاملة
  • جدول الأقساط (Relation Manager)
  • جدول المدفوعات (Relation Manager)
  • حالة السداد (Progress Bar)
  • الإحصائيات المالية
Relation Managers:
  • InstallmentsRelationManager
  • PaymentsRelationManager
3. شاشة الأقساط (Installments)
الجدول (Table) يعرض:
  • رقم العقد والعميل
  • تاريخ الاستحقاق
  • قيمة القسط
  • المبلغ المدفوع
  • حالة السداد (Badge ملون)
  • تاريخ السداد الفعلي
الفلاتر المتاحة:
حسب الحالة
  • مدفوع
  • غير مدفوع
  • متأخر
حسب الفترة
  • اليوم
  • هذا الأسبوع
  • هذا الشهر
حسب البيانات
  • العميل
  • العقد
  • التاريخ
Badge التنبيه:

يظهر عدد الأقساط المتأخرة في قائمة التنقل باللون الأحمر للتنبيه الفوري

4. شاشة الدفعات (Payments)
النموذج يحتوي على:
  1. اختيار العميل: قائمة منسدلة مع بحث
  2. اختيار العقد: تتفعل بعد اختيار العميل، تعرض عقود العميل فقط
  3. اختيار القسط: (اختياري) تعرض الأقساط غير المدفوعة للعقد المختار
  4. المبلغ: يتم ملؤه تلقائياً عند اختيار قسط، أو يدوياً للدفعات المباشرة
  5. تاريخ الدفع: التاريخ الفعلي للسداد
  6. طريقة الدفع: (اختياري) نقدي/بنكي/...
  7. أرقام مرجعية: رقم الإيصال والرقم المرجعي
  8. الحالة: completed/pending
  9. ملاحظات: أي تفاصيل إضافية
التفاعلية (Reactive):
  • تغيير العميل → مسح العقد والقسط
  • تغيير العقد → مسح القسط والمبلغ
  • اختيار قسط → ملء المبلغ تلقائياً
5. شاشة المنتجات (Products)
البيانات المعروضة:
  • اسم المنتج
  • الموديل
  • اللون
  • سعر الشراء
  • سعر البيع
  • التصنيف (Category)
  • العلامة التجارية (Brand)
  • الوسوم (Tags)
  • تاريخ الإضافة
الربط: يمكن ربط منتج واحد بعدة عقود، وعقد واحد بعدة منتجات (Many-to-Many)
6. شاشة المصروفات (Expenses)
نظام الموافقات:
1. إنشاء مصروف

المستخدم ينشئ مصروف جديد بحالة "في الانتظار" (pending)

2. المراجعة

المسؤول يراجع المصروف ويضيف ملاحظات

3. القرار

الموافقة (approved) أو الرفض (rejected)

4. التسجيل في الدفاتر

فقط المصاريف الموافق عليها تُحتسب في التقارير المالية

الحقول:
  • العنوان، الوصف، المبلغ
  • التصنيف (ExpenseCategory)
  • تاريخ الصرف
  • طريقة الدفع
  • رقم الإيصال، المورد
  • المرفقات (صور/ملفات)
  • مصاريف متكررة (اختياري)
الميزات المتقدمة والأفكار المطبقة
التوزيع التلقائي للمدفوعات 🆕
تحديث مارس 2026
  • توزيع المدفوعات تلقائياً على الأقساط
  • لا حاجة لاختيار قسط محدد
  • استخدام Observer Pattern
  • تحديث حالات الأقساط تلقائياً
  • حسابات دقيقة 100%
  • توفير 90% من الوقت
مثال: دفع 2000 ج على 6 أقساط
→ قسطين كاملين + قسط جزئي تلقائياً!
الحسابات التلقائية
  • حساب سعر التقسيط من السعر الأصلي + نسبة الربح
  • حساب قيمة القسط عند تغيير أي متغير
  • حساب تاريخ أول قسط حسب الفترة المختارة
  • تحديث إجمالي المدفوعات تلقائياً
  • حساب نسبة السداد
  • حساب المتبقي
التحقق من البيانات
  • التحقق من القيم الرقمية
  • التحقق من التواريخ
  • التحقق من العلاقات (العميل/العقد/القسط)
  • منع الحذف إذا كانت هناك بيانات مرتبطة
  • التحقق من الصلاحيات
الترجمة الكاملة

النظام مترجم بالكامل إلى 3 لغات:

  • العربية: اللغة الأساسية (RTL)
  • الإنجليزية: اللغة الثانوية (LTR)
  • الفرنسية: لغة إضافية (LTR)
جميع الشاشات، الرسائل، التقارير، والإشعارات مترجمة بالكامل
نظام الصلاحيات

باستخدام Filament Shield:

  • صلاحيات على مستوى الموديل
  • صلاحيات على مستوى الصفحة
  • صلاحيات على مستوى الويدجت
  • صلاحيات على مستوى التقرير
  • تحكم كامل في Create/View/Edit/Delete
التواريخ الافتراضية

ميزة التواريخ الافتراضية في التقارير:

  • يمكن تعيين تاريخ بداية أساسي في الإعدادات
  • جميع التقارير تستخدم هذا التاريخ كإعداد افتراضي
  • يمكن تغييره من شاشة الإعدادات (Settings)
  • توفير وقت المستخدم في إدخال التواريخ
getDefaultDateFrom() → من الإعدادات getDefaultDateTo() → اليوم
التصميم المتجاوب
  • التقارير responsive على الموبايل
  • الجداول قابلة للتمرير أفقياً
  • البطاقات تنسدل عمودياً على الشاشات الصغيرة
  • التحكم في عرض الأعمدة حسب الشاشة
  • قوائم التنقل قابلة للطي
الطباعة والتصدير
الطباعة:
  • طباعة التقارير بتنسيق احترافي
  • تنسيق خاص للطباعة (CSS)
  • إخفاء العناصر غير الضرورية
  • تحسين الهوامش والمحاذاة
التصدير إلى Excel:
  • تصدير الجداول إلى Excel
  • الاحتفاظ بالتنسيق
  • التصدير حسب الفلاتر المطبقة
  • باستخدام maatwebsite/excel
التصدير إلى PDF:
  • تصدير التقارير PDF
  • دعم العربية بشكل كامل
  • تنسيق احترافي
  • باستخدام dompdf
الأفكار التقنية المطبقة
1. Eloquent Relationships:
  • One-to-Many: Customer → Contracts
  • One-to-Many: Contract → Installments
  • One-to-Many: Contract → Payments
  • Many-to-Many: Contract ← → Products
  • BelongsTo: Installment → Contract
2. Accessors & Mutators:
  • getTotalPaidAttribute()
  • getTotalInstallmentsPaidAttribute()
  • getTotalCollectedAttribute()
  • getRemainingAmountAttribute()
  • getPaymentPercentageAttribute()
3. Query Scopes:
  • scopeCompleted() - للمدفوعات المكتملة
  • scopeForCustomer() - حسب العميل
  • scopeForContract() - حسب العقد
  • Filters متقدمة في Filament
4. Filament Features:
  • Forms with Reactive Fields
  • Relation Managers
  • Custom Pages & Reports
  • Widgets & Charts
  • Infolist للعرض الأنيق

تحديث جديد: نظام التوزيع التلقائي للمدفوعات (مارس 2026)

ميزة جديدة ثورية!

تم تطبيق نظام ذكي يوزع المدفوعات تلقائياً على الأقساط بدون تدخل يدوي

❌ قبل التحديث (الطريقة القديمة)
  • يجب اختيار قسط محدد لكل دفعة
  • كل دفعة = قسط واحد فقط
  • إذا دفع العميل 2000 جنيه على 3 أقساط:
    • دفعة 1: 700 للقسط الأول
    • دفعة 2: 700 للقسط الثاني
    • دفعة 3: 600 للقسط الثالث
  • 😫 عمل يدوي متعب
✅ بعد التحديث (الطريقة الجديدة)
  • ❌ لا حاجة لاختيار قسط محدد
  • فقط أدخل المبلغ المدفوع (2000 جنيه)
  • النظام يوزع تلقائياً:
    • ✅ القسط 1: 700 (مدفوع كلياً)
    • ✅ القسط 2: 700 (مدفوع كلياً)
    • ⚠️ القسط 3: 600 (مدفوع جزئياً)
  • 😊 توزيع تلقائي ذكي!
مثال عملي توضيحي:
عميل عليه 6 أقساط × 700 جنيه = 4,200 جنيه العميل دفع: 2,000 جنيه النتيجة التلقائية: ✅ القسط 1: 700/700 (100%) - مدفوع كلياً ✅ القسط 2: 700/700 (100%) - مدفوع كلياً ⚠️ القسط 3: 600/700 (85.7%) - مدفوع جزئياً ❌ القسط 4: 0/700 (0%) - غير مدفوع ❌ القسط 5: 0/700 (0%) - غير مدفوع ❌ القسط 6: 0/700 (0%) - غير مدفوع 💰 المدفوع: 2,000 جنيه 💸 المتبقي: 2,200 جنيه 📊 نسبة السداد: 47.6%
توفير 90% من الوقت

خطوة واحدة بدلاً من عدة خطوات

دقة 100%

لا أخطاء في التوزيع

تلقائي بالكامل

Observer يعمل في الخلفية

التفاصيل التقنية
الملفات المضافة:
  • app/Observers/PaymentObserver.php - منطق التوزيع التلقائي
  • Migration: جعل installment_id اختياري في جدول payments
آلية العمل:
1. إضافة دفعة

المستخدم يدخل المبلغ بدون تحديد قسط

2. Observer يتفعل

PaymentObserver يعمل تلقائياً عند الحفظ

3. جلب الأقساط

الأقساط غير المدفوعة بالترتيب الزمني

4. التوزيع التلقائي

المبلغ يوزع على الأقساط بالترتيب

5. تحديث الحالات

كل قسط يُحدث حالته (مدفوع/جزئي/غير مدفوع)

حسابات جديدة في Contract Model:
// عدد الأقساط المدفوعة كلياً $contract->paid_installments_count // عدد الأقساط المدفوعة جزئياً $contract->partially_paid_installments_count // عدد الأقساط غير المدفوعة $contract->unpaid_installments_count // إجمالي المحصل (محدّث) $contract->total_collected
التوثيق الكامل:

لمزيد من التفاصيل، راجع الملفات التالية:

  • START_HERE.md - ابدأ من هنا (30 ثانية)
  • دليل_الاستخدام_السريع.md - دليل المستخدم الشامل
  • المقارنة_البصرية.md - مقارنة قبل وبعد التحديث
  • PAYMENT_AUTO_DISTRIBUTION.md - الشرح التقني المفصل

نظام متكامل ومتطور

تم بناء النظام باستخدام أحدث التقنيات وأفضل الممارسات في البرمجة

كود نظيف
آمن ومحمي
سريع وفعال
قابل للتطوير
التقنيات المستخدمة
Laravel 11
PHP 8.2+
Filament 4
MySQL
Livewire
Alpine.js

تم إنشاء هذا المستند في مارس 2026