# اختبار إصلاح رقم الطلب في Payment Details

## ✅ التغييرات التي تم إجراؤها

### 1. تحديث `PaymentDetailsResource.php`
```php
// الآن يستخدم modelable بدلاً من order
$orderNumber = '';
if ($this->modelable && $this->modelable instanceof \App\Models\Order) {
    $orderNumber = ' ' . $this->modelable->order_number;
}

'reference_trans' => $this->reference ? __($this->reference) . $orderNumber : null,
```

### 2. تحديث `ChargeController.php`
```php
// إضافة ->with('modelable') لتحميل العلاقة
$history = WalletTransaction::where('user_id', auth('api')->id())
    ->where('type', WalletTransactionType::WITHDRAWAL)
    ->with('modelable') // ← هنا!
    ->latest()
    ->paginate(6);
```

## 🧪 كيفية الاختبار

### 1. تأكد من وجود بيانات في wallet_transactions

```bash
php artisan tinker
```

```php
// تحقق من البيانات
$transaction = App\Models\WalletTransaction::with('modelable')->first();

// تحقق من نوع modelable
echo get_class($transaction->modelable); // يجب أن يكون App\Models\Order

// تحقق من order_number
echo $transaction->modelable->order_number; // يجب أن يظهر رقم الطلب
```

### 2. اختبر الـ API

```http
GET {{url}}/client/wallet/total-payments
Authorization: Bearer {token}
```

**النتيجة المتوقعة:**
```json
{
  "data": {
    "history": [
      {
        "id": 1,
        "amount": 100,
        "status": "completed",
        "reference": "order_payment",
        "reference_trans": "دفع الطلب ORD-12345", // ← رقم الطلب يظهر هنا!
        "created_at": "2026-04-29T10:00:00.000000Z"
      }
    ]
  }
}
```

## 🔍 استكشاف الأخطاء

### المشكلة: رقم الطلب لا يزال لا يظهر

**السبب المحتمل 1:** العلاقة `modelable` غير محملة
```php
// تحقق في Controller
->with('modelable') // تأكد من وجود هذا السطر
```

**السبب المحتمل 2:** `modelable_type` ليس Order
```php
// تحقق من قاعدة البيانات
SELECT modelable_type, modelable_id FROM wallet_transactions WHERE id = 1;

// يجب أن يكون:
// modelable_type: App\Models\Order
// modelable_id: رقم الطلب
```

**السبب المحتمل 3:** البيانات غير موجودة
```php
// تحقق من أن modelable_id و modelable_type ليسا NULL
SELECT * FROM wallet_transactions WHERE modelable_id IS NOT NULL;
```

## 📊 كيف يعمل النظام

### عند إنشاء معاملة محفظة لطلب:

```php
$wallet->transactions()->create([
    'user_id' => $user->id,
    'amount' => $amount,
    'type' => WalletTransactionType::WITHDRAWAL,
    'reference' => 'order_payment',
    'modelable_type' => Order::class,  // ← مهم!
    'modelable_id' => $order->id,      // ← مهم!
]);
```

### عند عرض البيانات:

1. ✅ Controller يحمل `modelable` relationship
2. ✅ Resource يتحقق إذا كان `modelable` هو `Order`
3. ✅ إذا نعم، يأخذ `order_number` ويضيفه للنص
4. ✅ النتيجة: "دفع الطلب ORD-12345"

## 🎯 أمثلة على النتائج

### مع رقم طلب:
```json
{
  "reference": "order_payment",
  "reference_trans": "دفع الطلب ORD-12345"
}
```

### بدون رقم طلب (مثل شحن المحفظة):
```json
{
  "reference": "wallet_charge",
  "reference_trans": "شحن المحفظة"
}
```

### مع رقم طلب (إرجاع):
```json
{
  "reference": "order_cancellation_refund",
  "reference_trans": "استرداد إلغاء الطلب ORD-12345"
}
```

## ✅ التحقق النهائي

```bash
php artisan tinker
```

```php
// اختبار كامل
$user = App\Models\User::find(1);
$transactions = App\Models\WalletTransaction::where('user_id', $user->id)
    ->with('modelable')
    ->get();

foreach ($transactions as $t) {
    echo "Reference: " . $t->reference . "\n";
    if ($t->modelable instanceof App\Models\Order) {
        echo "Order Number: " . $t->modelable->order_number . "\n";
    }
    echo "---\n";
}
```

---

**آخر تحديث**: 29 أبريل 2026
**الحالة**: ✅ جاهز للاختبار
