# WP2 — الإعداد + إنشاء أمر إنتاج مؤقت + منتقي الأوامر

## Goal
تجهيز الباك إند لشاشة إذن الصرف: (أ) إعداد يشغّل/يقفل الخاصية كلها، (ب) endpoint ينشئ **أمر إنتاج مؤقت** بأقل بيانات ويكون **قابل للصرف فورًا**، (ج) endpoint يرجّع الأوامر **القابلة للصرف** للمنتقي.

## المطلوب

### أ) الإعداد
مفتاح جديد على نمط `Modules/Production/database/seeders/ProductionSettingDefinitionSeeder.php` (شوف `production.material_issue_requires_approval` :98-101 كمثال للشكل: setting_key / module / value_type=boolean / default_value). اسم مقترح: `production.allow_issue_against_order` (أو ما يناسب النمط). **الافتراضي:** اختَر ما يحافظ على سلوك اليوم للعملاء الحاليين وبرّره في الكود.
شغّل الـseeder على dev بعد الإضافة (idempotent) عشان الإعداد يبان في شاشة إعدادات الإنتاج.

### ب) الأمر المؤقت
endpoint بيقبل **product_id + planned_quantity + unit_id** بس وينشئ `ProductionOrder`:
- **`status = ProductionOrderStatus::Released`** مباشرة (مش `Planned`). ⚠️ `ProductionOrderController::store` بيحط `$data['status'] = ProductionOrderStatus::Planned` (~:165) — الأمر المؤقت مختلف عمدًا، لأن `canIssue()` بتسمح بـ Released/InProcess بس.
- **علامة المصدر:** استخدم العمود الموجود **`order_type`** (`string(20)`, default `'standard'`) بقيمة جديدة تدل إنه اتعمل من إذن صرف. ⛔ **مايكونش** `'rnd'` ولا `'pilot'` عشان `ProductionOrder::isDevelopment()` (:153-160) مايحسبهوش تطوير. **مفيش migration.**
- **الصلاحية:** صلاحية **إنشاء أمر إنتاج** الموجودة (شوف إزاي `ProductionOrderController::store` محمي واستخدم نفسها) — مش صلاحية الصرف.
- company scoping + `created_by` + رقم أمر من نفس مولّد التسلسل المستخدم في الإنشاء العادي.
- يرجّع الأمر (id + order_number + product + planned_quantity) عشان الواجهة تختاره فورًا.

### ج) منتقي الأوامر
endpoint (أو باراميتر على الموجود) يرجّع الأوامر **القابلة للصرف فقط** (`status` ∈ Released/InProcess) مع بحث server-side بـ**رقم الأمر أو اسم/كود المنتج**، company-scoped ومصفّح. الواجهة بتستخدمه في منتقي بحث (زي منتقي الموردين في شاشة فاتورة الشراء).

## ⚠️ عقد الـAPI مثبّت من المنسّق — نفّذه حرفيًا
1. `GET /api/production/orders?issuable=1&search=<q>` — **وسّع الـindex الموجود**، ماتعملش مسار جديد. `issuable=1` ⇒ status ∈ {released, in_process}. وسّع الـ`search` (:104-108) ليشمل اسم/كود المنتج. صلاحية `production.orders.view`.
2. `POST /api/production/orders/quick` — body `{product_id, planned_quantity, unit_id}` → 201. الحالة `released` مباشرة + `order_type` بعلامة المصدر. صلاحية **`production.orders.create`** فقط.
3. مفتاح الإعداد: **`production.allow_issue_against_order`** (boolean) في `GET /api/production/settings`.

## Interfaces (تستهلكها WP3)
- `GET` أوامر قابلة للصرف: بحث `?search=` + pagination، كل عنصر فيه على الأقل `{id, order_number, product_name, planned_quantity, unit_name, status}`.
- `POST` أمر مؤقت: body `{product_id, planned_quantity, unit_id}` → 201 بالأمر المُنشأ (نفس شكل العنصر فوق). أخطاء التحقّق 422، ونقص الصلاحية 403.
- مفتاح الإعداد بيظهر في `GET /production/settings` الموجود.

## Acceptance
- [ ] الإعداد موجود ومزروع على dev وبيظهر في شاشة إعدادات الإنتاج.
- [ ] `POST` بـ(منتج+كمية+وحدة) بس → أمر جديد **بحالة Released** و`order_type` بعلامة المصدر، ورقم أمر صحيح.
- [ ] الأمر ده **`canIssue()` = true** فورًا (اختبار مباشر على الموديل).
- [ ] بلا صلاحية إنشاء أمر إنتاج → **403**.
- [ ] كمية ≤ 0 أو منتج/وحدة من شركة تانية → **422**.
- [ ] منتقي الأوامر بيرجّع Released/InProcess بس، والبحث بيشتغل برقم الأمر واسم المنتج، ومحصور بالشركة.
- [ ] `isDevelopment()` بترجّع **false** للأمر المؤقت.

## Tests
Pest في `Modules/Production/tests/Feature/` (مثلاً `QuickProductionOrderTest.php`) تغطّي النقاط فوق.
شغّل: `/opt/cpanel/ea-php82/root/usr/bin/php -d memory_limit=1G vendor/bin/pest Modules/Production/tests --filter='Quick|Order'`
⚠️ baseline: Production 573/10 سابقة — ماتزوّدش عليهم.

## Flags
NOT [FIN] · **migration: لا** (العلامة على `order_type` الموجود).

## Out of scope
تعديل مسار إنشاء أمر الإنتاج العادي · استكمال خامات/تشغيلات/BOM للأمر المؤقت · الواجهة (WP3) · منطق الاعتماد (WP1).
