← العودة للفهرس

الطلبيات

استيراد شحنة من الصين: رأس الطلبية + بنود منتج + سيريالات. المصدر الرئيسي لسجل Order Serials وأساس تسجيل الكفالة.

المجموعة: Orders & Serials اسم القائمة: Orders الرابط: /admin/orders الأيقونة: عربة تسوق الخطوة 1 في تدفق الطلبيات

الغرض ومنطق العمل

كل Order = شحنة واحدة (CI/BL/ETA…). عند الحفظ يُستورد السيريال ويُنشأ OrderSerial لكل رقم. تاريخ warehouse_arrival_at + grace_period_months يحددان نافذة تسجيل الكفالة.

إذا فشل الاستيراد عند الإنشاء: تُحذف الطلبية بالكامل (all-or-nothing). راجع الإشعار و trace_id.

راجع خريطة الطلبيات والسيريالات.

الارتباطات

الموردالحقل / العلاقةالأثر
Suppliers supplier_id — مطلوب المورد في الصين. Transfer يُقفل على MARVEL.
Products بنود serial_lines.product_id كل سيريال يُربط بمنتج عند الاستيراد.
Serials serials() RelationManager Serials + عداد Serials في الجدول.
Markets market_id، OrderMarkets بلد البيع + توزيع الكميات (صلاحية manage markets).
Warranty Durations grace_period_months + warehouse نافذة السماح بالتسجيل بعد وصول المستودع.
Warranties OrderSerial.serial_number التطبيق يبحث عن السيريال في هذه الطلبية.

أوضاع الطلبية (Order mode) — متى تستخدم أي وضع؟

الحقل Order mode / نوع الطلبية (serial_mode) لا يُحفظ في قاعدة البيانات — يوجّهك في النموذج فقط. ما يُحفظ هو order_type: new أو transfer.

الوضع في اللوحةorder_typeمتى تستخدمهما الذي يظهر / يختفي
New Order — Manual / Range new شحنة جديدة من المصنع. السيريالات قليلة أو متسلسلة (نطاق رقمي). بنود Product lines. Supplier حر. تستخدم Manual Serials أو Range Start + QTY.
New Order — Import per line new شحنة جديدة لكن كل منتج له ملف Excel/CSV منفصل (آلاف السيريالات). نفس بنود Product lines. لكل بند ترفع Serial Number File — الملف له الأولوية على باقي الحقول.
Transfer Order transfer نقل مخزون سيريالات موجودة مسبقاً إلى طلبية MARVEL (إعادة توزيع / نقل داخلي). يختفي repeater البنود. Supplier يُقفل على MARVEL. يظهر Transfer serial file فقط.

ماذا يحدث عند Save في كل وضع؟

الوضعالسلوك
Manual / Import per line يُنشأ Order → يُمرّر كل بند إلى محرك الاستيراد → يُنشأ OrderSerial لكل رقم. إن فشل التحقق (تكرار، بند بلا سيريالات…) → تُحذف الطلبية بالكامل عند الإنشاء.
Transfer لكل سيريال في الملف: إن وُجد في النظام → يُنقل إلى هذه الطلبية + يُسجّل Serial Transfer + is_transferred = true + يُحتفظ بـ Made In الأصلي. إن لم يُوجد → يُنشأ سيريال جديد بـ product_id = null (يظهر في Unassigned Serials).
Manual و Import per line يستخدمان نفس محرك الاستيراد — الفرق عملي: في Manual تعتمد على الكتابة اليدوية أو النطاق؛ في Import ترفع ملفاً لكل بند.
الاستيراد الكبير يُ queued تلقائياً → إشعار «Large import queued» مع trace_id و run_id. الطلبية تُنشأ لكن السيريالات تُكمل في الخلفية.

بنود المنتج (Product lines) — الحقول والحالات

تظهر فقط عندما Order mode ≠ Transfer. كل بند = منتج واحد + طريقة إدخال السيريالات. يمكن إضافة عدة بنود (منتج A + منتج B…).

ترتيب الأولوية — كيف يختار النظام مصدر السيريالات؟

لكل بند، النظام يأخذ السيريالات من مصدر واحد حسب هذا الترتيب (الأول الموجود يفوز):

  1. Serial Number File — إن رُفع ملف → يُقرأ العمود A فقط (صفاً صفاً). يُتجاهل Manual و Range.
  2. Manual Serials — إن لم يُرفع ملف وكان الحقل غير فارغ → سطر = سيريال واحد (الأسطر الفارغة تُتخطى).
  3. Range Start Serial + QTY — إن لم يُرفع ملف و Manual فارغ → يُولَّد نطاق من Range Start بعدد QTY.
إن لم يُوفَّر أي من الثلاثة → خطأ NO_SERIALS_PROVIDED → فشل الاستيراد (وحذف الطلبية عند الإنشاء).

جدول الحقول

الحقلالتقنيمطلوب؟الشرح
Productproduct_idمطلوبكل سيريال في هذا البند يُربط بهذا المنتج.
QTYquantityمع Rangeعدد السيريالات المُولَّدة. مطلوب > 0 مع Range Start. يُتجاهل إن وُجد ملف أو Manual.
Warrantywarrantyاختياريأشهر — تُنسخ لكل سيريال في البند.
Private Warrantypwarrantyاختياريكفالة خاصة — تُنسخ لكل سيريال.
Batch Numberbatch_numberاختيارييُنسخ لكل سيريال. بديل للبحث في الكفالة — التكرار مسموح.
Date Codedate_codeاختياريمثل Batch — بديل للسيريال في API الكفالة.
Made In (line)made_inاختياريتجاوز لـ Made In رأس الطلبية. إن تُرك فارغاً → يُؤخذ من رأس الطلبية.
Range Start Serialserial_startشرطيأول رقم في النطاق — انظر الحالات أدناه.
Manual Serialsmanual_serialsشرطيسيريال لكل سطر — انظر الحالات أدناه.
Serial Number Fileserials_fileشرطيxlsx / xls / csv / txt — العمود A = السيريال.

حالات عملية — ماذا تملأ في كل سيناريو؟

السيناريوProductQTYRange StartManualFileالنتيجة
ملف Excel من المصنع ✓ — فارغ فارغ ✓ xlsx كل صف في العمود A = سيريال. QTY و Range لا يُستخدمان.
نطاق متسلسل (100 بطارية) ✓ 100 BT20260001 فارغ فارغ يُولّد 100 رقماً: BT20260001 … BT20260100 (انظر قواعد الزيادة).
قائمة يدوية قصيرة ✓ — فارغ سطر لكل SN فارغ كل سطر في Manual = سيريال واحد. QTY لا يُستخدم.
بند بلا أي سيريال ✓ 0 أو فارغ فارغ فارغ فارغ ❌ NO_SERIALS_PROVIDED — فشل الاستيراد.
Range بدون QTY ✓ 0 أو فارغ SN001 فارغ فارغ ❌ لا يُولّد نطاق — QTY يجب أن يكون > 0.
ملف + Range معاً ✓ 50 SN001 — ✓ الملف فقط — Range و QTY يُتجاهلان.

Range Start Serial — كيف يعمل النطاق؟

عندما لا يُرفع ملف وManual Serials فارغ، املأ:

النظام يجد آخر مجموعة أرقام في النص ويزيدها واحداً واحداً مع الحفاظ على عدد الخانات (zero-padding):

Range StartQTYالسيريالات المُولَّدة
ML0001003ML000100 ، ML000101 ، ML000102
SN-2026-00992SN-2026-0099 ، SN-2026-0100
ABC (بلا أرقام)3ABC0 ، ABC1 ، ABC2
تأكد أن QTY = العدد الفعلي للقطع. النطاق لا يتحقق من «فراغات» في التسلسل — يولّد أرقاماً رياضياً فقط.

Manual Serials — قواعد الكتابة

SN-A-001
SN-A-002
SN-A-003

Serial Number File — تنسيق الملف

قواعد التحقق المشتركة (كل الأوضاع)

القاعدةرسالة الخطأ
لا تكرار داخل نفس الاستيرادDUPLICATE_IN_INPUT
السيريال غير موجود مسبقاً في قاعدة البيانات (طلبية new)DUPLICATE_IN_DATABASE
Product غير موجودINVALID_PRODUCT_MAPPING
ملف تالف أو غير قابل للقراءةFILE_READ_FAILED

صورة تقريبية — رأس الطلبية

Create Order
New Order — Manual / Range
Factory ABC
CI-2026-001
BL-8842
AW-1024
2026-03-15
12
Received

حقول رأس الطلبية

الاسمالتقنيمطلوب؟الشرح
Suppliersupplier_idمطلوبالمورد. Transfer = MARVEL فقط.
CI / BL / Order Numberci_number, bl_number, order_numberمطلوبمرجع الشحنة في نظام الأوائل.
ETA / ETD / CI Dateeta_date, etd_date, ci_dateمطلوبتواريخ الشحن والفاتورة.
Made Inmade_inمطلوبيُنسخ لكل سيريال (Transfer يحتفظ بالأصل).
Warehouse arrivalwarehouse_arrival_atمطلوببداية grace period للكفالة.
Market Placemarket_idاختياريبلد البيع الافتراضي.
Grace periodgrace_period_monthsافتراضي 12أشهر السماح بتسجيل الكفالة.
Statusstatuspending/received/cancelledحالة الطلبية.
Total price/weight/volume—اختياريمعلومات إدارية.

Transfer — ملف النقل (بدون Product lines)

عند اختيار Transfer Order يختفي repeater البنود ويظهر حقل واحد:

الحقلالشرح
Transfer serial filexlsx / xls / csv / txt — العمود A = أرقام سيريالات من طلبيات سابقة. مطلوب.

Supplier يُعيَّن تلقائياً على MARVEL ولا يمكن تغييره. Made In الأصلي لكل سيريال موجود لا يُستبدل.

Relation Managers (صفحة View/Edit)

التبويبالغرضصلاحية
Serialsعرض/إضافة/تعديل سيريالات الطلبيةmanage serials
Market Distributionmarket_id + quantity لكل سوقmanage markets

خطوات إنشاء طلبية جديدة

  1. تأكد من Products وSupplier.
  2. Orders → + New → اختر Order mode.
  3. املأ رأس الطلبية — خاصة warehouse_arrival و grace period.
  4. أضف بنود منتج + سيريالات (ملف أو يدوي أو range).
  5. Save — انتظر إشعار النجاح أو الخطأ.
  6. View → Serials: تحقق من العدد والمنتجات.
  7. إن وُجدت سيريالات بلا منتج → Unassigned Serials.

أين يظهر؟

الواجهةالدور
Serialsكل سيريال مربوط بـ order_id.
Serial Trackبحث يعرض order_number و supplier.
تطبيق الكفالةAPI يبحث serial في order_serials + order.grace.

أخطاء شائعة

المشكلةالسببالحل
Order import failed — حُذفت الطلبيةIntegrity gate (تكرار، ملف فارغ…)صحّح الملف وأعد الإنشاء. راجع trace_id.
NO_SERIALS_PROVIDEDبند بلا ملف ولا Manual ولا Range+QTYأضف أحد مصادر السيريالات الثلاثة لكل بند.
Range Start بدون QTYquantity = 0 أو فارغضع QTY > 0 يساوي عدد القطع.
عدد سيريالات ≠ QTYRange يولّد رياضياً فقطتأكد أن Range Start صحيح وأن QTY = العدد المطلوب.
لا سيريالات بعد الحفظلم تُضف بنود أو ملفأضف serial_lines أو transfer_file.
الكفالة خارج النافذةwarehouse_arrival + graceصحّح التاريخ أو grace_period_months.
Transfer لا يغيّر Supplierمقفل على MARVELسلوك متعمد — لا تحاول تغييره.