# ميزة تكييش الأقساط - إعادة حساب الأقساط تلقائياً

## الوصف

تم إضافة ميزة تكييش الأقساط التي تسمح بإعادة حساب قيمة الأقساط تلقائياً عند تعديل بيانات التعاقد.

## كيفية العمل

### 1. التشغيل التلقائي

عند تعديل أي من الحقول التالية في التعاقد:
- **السعر الأصلي** (`original_price`)
- **نسبة الربح** (`profit_percentage`)
- **السعر بعد التقسيط** (`installment_price`)
- **عدد الأقساط** (`installment_count`)

يقوم النظام تلقائياً بـ:
1. **إعادة حساب قيمة القسط**: `قيمة القسط الجديدة = السعر بعد التقسيط ÷ عدد الأقساط`
2. **تحديث جميع الأقساط**: يتم تحديث حقل `value` لجميع الأقساط التابعة للتعاقد
3. **إعادة توزيع المدفوعات**: يتم إعادة توزيع جميع المدفوعات المكتملة على الأقساط بناءً على القيمة الجديدة

### 2. مثال عملي

#### الحالة الأولى (قبل التعديل):
- السعر بعد التقسيط: 12,000 جنيه
- عدد الأقساط: 12 قسط
- قيمة القسط: 1,000 جنيه
- المدفوع: 5,000 جنيه (5 أقساط مدفوعة بالكامل)

#### الحالة الثانية (بعد التعديل - تكييش):
العميل يريد دفع الباقي دفعة واحدة بخصم

- السعر الجديد بعد التقسيط: 10,500 جنيه (بعد الخصم)
- عدد الأقساط: 12 قسط (نفس العدد)
- **قيمة القسط الجديدة: 875 جنيه** (10,500 ÷ 12)

**النتيجة:**
- القسط 1 إلى 5: مدفوع (875 × 5 = 4,375 جنيه)
- القسط 6: مدفوع جزئياً (625 جنيه من أصل 875)
- الباقي: 10,500 - 5,000 = 5,500 جنيه
- الأقساط المتبقية: 6.29 قسط

الآن العميل يمكنه دفع الباقي (5,500 جنيه) دفعة واحدة لإنهاء التعاقد!

## الملفات المعنية

### 1. ContractObserver.php
مسؤول عن متابعة التعديلات على التعاقد وتنفيذ إعادة الحساب تلقائياً.

```php
app/Observers/ContractObserver.php
```

### 2. Contract Model (إضافة دالة اختيارية)
تم إضافة دالة `recalculateInstallments()` للاستخدام اليدوي عند الحاجة:

```php
$contract = Contract::find(1);
$contract->recalculateInstallments(); // إعادة حساب يدوية
```

### 3. AppServiceProvider.php
تم تسجيل `ContractObserver` لتفعيل الميزة.

## المزايا

1. ✅ **تلقائي بالكامل**: لا حاجة لتدخل يدوي
2. ✅ **دقيق**: يستخدم نفس خدمة `PaymentRedistributionService` الموثوقة
3. ✅ **آمن**: يستخدم Database Transactions لضمان سلامة البيانات
4. ✅ **مرن**: يدعم جميع سيناريوهات التعديل
5. ✅ **متناسق**: يعيد توزيع المدفوعات بشكل صحيح

## ملاحظات مهمة

- النظام يعمل فقط مع المدفوعات المكتملة (`status = completed`)
- يتم إعادة حساب جميع الأقساط (المدفوعة وغير المدفوعة)
- المدفوعات يتم إعادة توزيعها بناءً على تاريخ الدفع (الأقدم أولاً)
- القيم يتم تقريبها إلى منزلتين عشريتين

## الاختبار

للاختبار:
1. افتح أي تعاقد موجود
2. عدّل أحد الحقول: السعر الأصلي، نسبة الربح، السعر بعد التقسيط، أو عدد الأقساط
3. احفظ التعديلات
4. تحقق من قيمة الأقساط - سترى أنها تم تحديثها تلقائياً
5. تحقق من توزيع المدفوعات على الأقساط

## التكامل مع PaymentObserver

النظام يعمل بتكامل كامل مع `PaymentObserver`:
- عند إضافة دفعة جديدة → يتم توزيعها تلقائياً
- عند تعديل التعاقد → يتم إعادة الحساب والتوزيع
- عند حذف دفعة → يتم إعادة التوزيع

---

**تاريخ الإضافة:** 29 مارس 2026  
**الحالة:** ✅ مكتمل ونشط
