# 📦 نظام إدارة الموردين والتجار - حالة العمل

## ✅ ما تم إنجازه

### 1. Models (4 موديلات) ✅
- ✅ **Supplier** - المورد
- ✅ **Merchant** - التاجر  
- ✅ **SupplierInbound** - الوارد من المورد
- ✅ **SupplierOutbound** - الصادر للتاجر

### 2. Migrations ✅
- ✅ جدول `suppliers` - الموردين
- ✅ جدول `merchants` - التجار
- ✅ جدول `supplier_inbounds` - الوارد
- ✅ جدول `supplier_outbounds` - الصادر

**الجداول تم إنشاؤها في قاعدة البيانات بنجاح! ✅**

---

## ⏳ العمل المتبقي (كبير جداً)

### 1. Filament Resources (4 Resources)

يحتاج كل Resource إلى:
- Resource file
- 3 Pages (Create, Edit, List)
- Form Schema
- Table Configuration

**المطلوب**: 20+ ملف PHP

#### أ) SupplierResource
- `app/Filament/Resources/Suppliers/SupplierResource.php`
- `app/Filament/Resources/Suppliers/Pages/CreateSupplier.php`
- `app/Filament/Resources/Suppliers/Pages/EditSupplier.php`
- `app/Filament/Resources/Suppliers/Pages/ListSuppliers.php`
- `app/Filament/Resources/Suppliers/Schemas/SupplierForm.php`
- `app/Filament/Resources/Suppliers/Tables/SuppliersTable.php`

#### ب) MerchantResource
- 6 ملفات مماثلة

#### ج) SupplierInboundResource (الوارد)
- 6 ملفات مماثلة
- **مع ميزة CreateOptionAction لإضافة مورد/ثلاجة جديدة**

#### د) SupplierOutboundResource (الصادر)
- 6 ملفات مماثلة
- **مع ميزة CreateOptionAction لإضافة تاجر/مورد/ثلاجة**

### 2. صفحات كشف الحساب (2 صفحات)
- صفحة كشف حساب مورد
- صفحة كشف حساب تاجر

### 3. التقارير
- تقرير المبالغ المدفوعة
- تقرير الموردين
- تقرير التجار

### 4. ميزة CreateOptionAction
إضافة زر + بجانب كل Select لإضافة:
- مورد جديد
- تاجر جديد
- ثلاجة جديدة (إذا لم تكن موجودة)

---

## 🚀 الخيارات المتاحة

### الخيار 1: إنشاء الملفات يدوياً (الطريقة الطويلة)
سيتطلب إنشاء 30+ ملف PHP بشكل فردي.
**الوقت المتوقع**: 2-3 ساعات

### الخيار 2: استخدام Artisan Commands (أسرع)
```bash
# إنشاء Resources
php artisan make:filament-resource Supplier --generate
php artisan make:filament-resource Merchant --generate  
php artisan make:filament-resource SupplierInbound --generate
php artisan make:filament-resource SupplierOutbound --generate

# ثم تخصيص الملفات
```
**الوقت المتوقع**: 1-2 ساعة

### الخيار 3: نسخ وتعديل من نظام موجود
نسخ من FreezerResource وتعديله
**الوقت المتوقع**: 45-60 دقيقة

---

## 📋 القالب السريع لإنشاء Resource

### مثال: SupplierResource.php

```php
<?php

namespace App\Filament\Resources\Suppliers;

use App\Filament\Resources\Suppliers\Pages\CreateSupplier;
use App\Filament\Resources\Suppliers\Pages\EditSupplier;
use App\Filament\Resources\Suppliers\Pages\ListSuppliers;
use App\Filament\Resources\Suppliers\Schemas\SupplierForm;
use App\Filament\Resources\Suppliers\Tables\SuppliersTable;
use App\Models\Supplier;
use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Tables\Table;

class SupplierResource extends Resource
{
    protected static ?string $model = Supplier::class;
    protected static string|\UnitEnum|null $navigationGroup = 'suppliers';
    protected static ?string $navigationLabel = 'الموردين';
    protected static ?string $modelLabel = 'مورد';
    protected static ?string $pluralModelLabel = 'الموردين';
    protected static string|BackedEnum|null $navigationIcon = 'heroicon-o-truck';
    
    public static function form(Schema $schema): Schema
    {
        return SupplierForm::configure($schema);
    }
    
    public static function table(Table $table): Table
    {
        return SuppliersTable::configure($table);
    }
    
    public static function getPages(): array
    {
        return [
            'index' => ListSuppliers::route('/'),
            'create' => CreateSupplier::route('/create'),
            'edit' => EditSupplier::route('/{record}/edit'),
        ];
    }
    
    public static function getNavigationGroup(): string|null
    {
        return 'إدارة الموردين والتجار';
    }
    
    protected static ?int $navigationSort = 1;
}
```

---

## 🎯 ميزة CreateOptionAction

### مثال الاستخدام في Form

```php
Select::make('supplier_id')
    ->label('المورد')
    ->relationship('supplier', 'name_ar')
    ->searchable()
    ->preload()
    ->required()
    ->createOptionForm([
        TextInput::make('name')
            ->label('الاسم (EN)')
            ->required(),
        TextInput::make('name_ar')
            ->label('الاسم (AR)')
            ->required(),
        TextInput::make('phone')
            ->label('الهاتف')
            ->tel(),
        // ... باقي الحقول
    ])
    ->createOptionUsing(function (array $data) {
        return Supplier::create($data);
    })
```

---

## 📝 الهيكل المطلوب للنماذج

### نموذج الوارد (SupplierInbound)
```php
Section::make('معلومات الوارد')
    ->schema([
        Select::make('freezer_id')
            ->label('الثلاجة')
            ->createOptionAction(...),
        Select::make('supplier_id')
            ->label('المورد')
            ->createOptionAction(...),
        DateTimePicker::make('date')
            ->label('التاريخ'),
    ]),
Section::make('الوزن')
    ->schema([
        TextInput::make('tons')->label('طن'),
        TextInput::make('kilos')->label('كيلو'),
        TextInput::make('total_kilos')
            ->label('الإجمالي بالكيلو')
            ->disabled(),
    ]),
Section::make('بيانات إضافية')
    ->schema([
        TextInput::make('product_name')->label('الصنف'),
        TextInput::make('vehicle_number')->label('رقم السيارة'),
        TextInput::make('driver_name')->label('السائق'),
        TextInput::make('balance')
            ->label('الرصيد')
            ->disabled(),
    ]),
```

### نموذج الصادر (SupplierOutbound)
```php
// نفس الأعلى +
Section::make('التاجر والسعر')
    ->schema([
        Select::make('merchant_id')
            ->label('التاجر')
            ->createOptionAction(...),
        TextInput::make('price_per_kilo')
            ->label('السعر للكيلو')
            ->live(),
        TextInput::make('total_amount')
            ->label('المبلغ الإجمالي')
            ->disabled(),
    ]),
Section::make('الدفع')
    ->schema([
        TextInput::make('paid_amount')
            ->label('المدفوع')
            ->live(),
        TextInput::make('remaining_amount')
            ->label('المتبقي')
            ->disabled(),
    ]),
```

---

## 📊 الجداول المطلوبة

### SuppliersTable
- الكود
- الاسم
- الهاتف
- إجمالي الوارد
- إجمالي الصادر
- الرصيد المتبقي
- المبالغ المستحقة
- الحالة

### MerchantsTable
- الكود
- الاسم
- الهاتف
- إجمالي المشتريات
- إجمالي المدفوع
- المتبقي
- الحالة

### SupplierInboundsTable
- رقم المرجع
- التاريخ
- الثلاجة
- المورد
- الصنف
- الوزن (طن + كيلو)
- الرصيد

### SupplierOutboundsTable
- رقم المرجع
- التاريخ
- المورد
- التاجر
- الصنف
- الوزن
- السعر
- المبلغ
- المدفوع
- المتبقي

---

## 🔥 الخطوة التالية الموصى بها

أنصح بـ **الخيار 2**: استخدام Artisan Commands ثم التخصيص

### الأوامر:

```bash
# تشغيل في PowerShell آخر (ليس الذي يشغل serve)

# 1. إنشاء Supplier Resource
php artisan make:filament-resource Supplier --generate

# 2. إنشاء Merchant Resource  
php artisan make:filament-resource Merchant --generate

# 3. إنشاء SupplierInbound Resource
php artisan make:filament-resource SupplierInbound --generate

# 4. إنشاء SupplierOutbound Resource
php artisan make:filament-resource SupplierOutbound --generate
```

### بعد ذلك:
1. تخصيص النماذج حسب المتطلبات
2. إضافة CreateOptionAction للـ Selects
3. إنشاء صفحات كشف الحساب
4. إضافة التقارير

---

## 📞 هل تريد المتابعة؟

أخبرني إذا كنت تريد:
1. ✅ إنشاء الـ Resources بالكامل (سيأخذ وقتاً)
2. ✅ إنشاء ملف واحد كمثال وتترك الباقي لك
3. ✅ شرح مفصل أكثر لأي جزء معين
4. ✅ التركيز على ميزة CreateOptionAction فقط

**الحالة الحالية**: الـ Models و Migrations جاهزة ✅  
**المطلوب**: 30+ ملف للـ Resources والنماذج والجداول ⏳

---

**تاريخ الإنشاء**: 28 يناير 2026  
**الحالة**: قاعدة البيانات جاهزة - Resources مطلوبة
