مركز الإضافات والتوثيق
حسابي وتفعيلاتي
دليل الاستخدام · المخزون والباتشات

Mirror Product Batches

دليل Mirror Product Batches 1.0.0: باتشات وتواريخ انتهاء لمنتجات WooCommerce — سحب FEFO تلقائي في الطلبات، وعرض الباتش في كل طلب، وقائمة باتشات وتحليلات للانتهاء والمخزون، وسجل تغييرات، وتصدير واستيراد CSV، وWP-CLI والنقل من ATUM.

موثّق للإصدار 1.0.0 آخر مراجعة:

التثبيت والتفعيل وأول تشغيل

  1. من «الإضافات ← أضف إضافة جديدة ← رفع إضافة» اختر ملف ZIP، ثم ثبّت وفعّل. المتطلبات: ووردبريس 6.4 أو أحدث، وWooCommerce 8.0 أو أحدث، وPHP 7.4 أو أحدث، وامتداد openssl.
  2. افتح «WooCommerce ← Batches» وأدخل كود التفعيل من حسابك على mirrororg.com ← أكواد التفعيل، ثم اضغط «تفعيل».
  3. افتح منتجًا مفعّلًا فيه «إدارة المخزون»، وأضف باتشاته من تبويب «المخزون»، أو استخدم زر New batch في قائمة الباتشات.
  4. راجع الإعدادات أسفل قائمة الباتشات: عدد أيام «قرب الانتهاء» (120 يومًا افتراضيًا) وقاعدة السحب من المنتهي.

شاشات الإضافة باللغة الإنجليزية في هذا الإصدار، وبطاقة الترخيص بالعربية. أسماء الأزرار في هذا الدليل مكتوبة كما تظهر على الشاشة.

الترخيص: ما الذي يتوقف وما الذي يبقى

يتوقف بغير ترخيص صالح: قائمة الباتشات، والتحليلات، وسجل التغييرات، وجدول الباتشات في شاشة المنتج، وعمود Batches في تصدير واستيراد CSV، والتحديثات. تبقى صفحة «WooCommerce ← Batches» لإدخال الكود فقط.

يبقى يعمل: سحب الطلبات من الباتشات (FEFO)، وإعادة الكميات عند الإلغاء والاسترجاع، ومطابقة مجموع الباتشات مع مخزون WooCommerce، وعرض الباتش في شاشة الطلب، وحقل batches في REST API، وأوامر WP-CLI. هذا مقصود: لو توقف السحب لاختلف مجموع الباتشات عن المخزون من أول طلب.

كل البيانات محفوظة، وتعود الشاشات فور التجديد. إن تعطّل المركز أو فشل الفحص الدوري لا تتوقف الشاشات فورًا، فالحكم الموقَّع يحمل مهلة، ولا تتوقف إلا بعد انتهائها أو عند إلغاء الكود.

الباتشات في شاشة المنتج

يظهر جدول Batches & expiry في تبويب «المخزون» بالمنتج، وداخل كل تنويعة، ما دام خيار «إدارة المخزون» مفعّلًا. لكل باتش: الرقم أو الاسم، وتاريخ الانتهاء، والمخزون، وتكلفة الوحدة.

  • مخزون المنتج يساوي مجموع باتشاته. التغييرات تُحفظ بزر «تحديث» في المنتج.
  • انتبه عند أول باتش من شاشة المنتج: مخزون المنتج يصبح مجموع الباتشات التي أدخلتها، فأدخل كل الكمية الموجودة. أما زر New batch في قائمة الباتشات فيحفظ المخزون الحالي تلقائيًا كباتش بلا تاريخ اسمه Previous stock.
  • تعديل الكمية يُحفظ كفرق عن القيمة التي فُتحت بها الصفحة، فالطلب الذي يصل أثناء فتحها لا يضيع.
  • أزرار كل صف: نسخ الباتش، و«سحب من الرف» (المخزون = 0)، والحذف.
  • Recent batch activity يعرض آخر الطلبات التي خرجت من باتشات المنتج وآخر التعديلات.
  • لو أوقفت «إدارة المخزون» تبقى الباتشات للاطلاع فقط ولا تحرّك المخزون.

كيف تسحب الطلبات من الباتشات

  1. الأقرب انتهاءً أولًا، والباتشات بلا تاريخ بعدها.
  2. الباتشات المنتهية آخرًا: لا يُسحب منها إلا إذا لم يكفِ غير المنتهي. يمكن إيقاف هذه القاعدة من Settings أسفل قائمة الباتشات، فتدخل المنتهية بترتيب تاريخها.
  3. إذا زاد الطلب عن المتاح (طلب مسبق أو بيع زائد) يُسجَّل الفرق على باتش واحد بالسالب، ليبقى المجموع مساويًا للمخزون. تجده في خانة Negative stock.

يتم السحب في اللحظة التي ينقص فيها WooCommerce مخزون الطلب. الإلغاء والاسترجاع مع إعادة المخزون وتعديل سطور الطلب تعيد الكمية إلى الباتش الذي خرجت منه، وتبقى حالة الباتش في الطلب ظاهرة (returned).

تحت كل سطر في شاشة الطلب يظهر الباتش وتاريخ انتهائه والكمية، ويبقى ظاهرًا حتى لو حُذف الباتش لاحقًا. الإضافة لا تعرض الباتش للعميل في صفحة الطلب أو في الرسائل.

تغييرات المخزون من خارج الطلبات (التعديل السريع، والتعديل الجماعي، وREST، واستيراد CSV بلا عمود Batches، والإضافات الأخرى): النقص يُسحب بالترتيب نفسه، والزيادة تضاف إلى آخر باتش صالح.

قائمة الباتشات

«WooCommerce ← Batches»: خانات حالة (قرب الانتهاء، ومنتهٍ وفيه مخزون، ومخزون سالب، وبلا تاريخ، وبلا تكلفة، وكل الباتشات)، وخط زمني للانتهاء، وفلاتر بالبحث والقسم والماركة والتاريخ.

  • تعديل مباشر لرقم الباتش والتاريخ والكمية والتكلفة من الصف نفسه.
  • إجراءات جماعية حتى 500 باتش: تصفير المخزون، والحذف، وتحديد تاريخ انتهاء، وتحديد تكلفة.
  • لوحة تفاصيل لكل باتش: باتشات المنتج الأخرى، والطلبات التي خرجت منه، وسجل تغييراته.
  • Download CSV ينزّل القائمة بالفلاتر الحالية.
  • اختصارات: / بحث، N باتش جديد، Esc إغلاق، Enter حفظ التعديل السريع.

إذا اختلف مخزون منتج عن مجموع باتشاته يظهر تنبيه بزر لضبط المخزون على مجموع الباتشات.

القائمة لمن يملك صلاحية edit_products، والإعدادات لمن يملك manage_woocommerce.

التحليلات

Batch analytics: ما ينتهي كل شهر خلال 18 شهرًا، وأعمار الباتشات، وجودة البيانات، وثلاثة تبويبات:

  • Won’t sell before expiry: الوحدات التي لن تُباع قبل تاريخها بمعدل البيع الحالي، لتقرر عرضًا أو خصمًا مبكرًا. تقدير مبني على المبيعات، للباتشات التي تنتهي خلال سنة.
  • Sold from expired batch: سطور طلبات خرجت من باتش منتهٍ يوم الطلب.
  • Stock mismatches: منتجات يختلف مخزونها عن مجموع باتشاتها. المفروض أن تكون فارغة.

Stock analytics: قيمة المخزون بالتكلفة وبسعر البيع، وأيام التغطية، ومعدل الدوران، وتحليل ABC، والأقسام والماركات، وتبويبات: إعادة الطلب بكمية مقترحة، ونفد وعليه طلب، والراكد، والزائد، والأكثر مبيعًا، وكل الأصناف. فترة المبيعات: 30 أو 60 أو 90 أو 180 أو 365 يومًا، وكل قائمة تنزَّل CSV.

الحدود قابلة للتعديل من Analysis thresholds: مدة وصول المورد 14 يومًا، وتغطية الشراء 45 يومًا، والزائد فوق 180 يومًا، والراكد بلا بيع 90 يومًا.

منحنى Stock trend يبدأ من يوم التفعيل ويمتلئ مع الأيام. التحليلات لمن يملك صلاحية view_woocommerce_reports.

سجل التغييرات

تبويب Change log يسجّل كل تغيير من شاشة المنتج وقائمة الباتشات واستيراد CSV وWP-CLI: من غيّر، وماذا، وقبل وبعد، ويجمع صفوف الاستيراد الواحد معًا. مبيعات الطلبات لا تُكرَّر فيه لأنها مسجلة في الطلب نفسه.

السجل يُحفظ 365 يومًا افتراضيًا، ويُغيَّر ذلك من التبويب نفسه (0 = بلا حذف)، ويمكن إيقافه.

التصدير والاستيراد

تضيف الإضافة عمود Batches إلى تصدير واستيراد منتجات WooCommerce العاديين. صيغة الخلية:

#15 | LOT-A | 2028-10-01 | 6 | 42.5 ; LOT-B | 10/2028 | 3

  • الباتشات تفصل بينها ; والحقول |: الرقم التعريفي (اختياري)، ثم رقم الباتش، ثم التاريخ، ثم الكمية، ثم التكلفة (اختيارية).
  • التاريخ بصيغة 2028-10-01 أو 01-10-2028 أو 01/10/2028 أو 10/2028 (أول الشهر)، ويمكن تركه فارغًا.
  • مهم: الباتشات المذكورة في الخلية تصبح باتشات المنتج، وأي باتش غير مذكور يُحذف، ويصبح المخزون مجموعها.
  • الخلية الفارغة تترك الباتشات كما هي، والخلية - تحذفها كلها.
  • كل استيراد يظهر في سجل التغييرات.

تكلفة الوحدة

تكلفة الوحدة اختيارية، وتغذي قيمة المخزون في القوائم والتحليلات. إذا لم يكن للباتش تكلفة تُستخدم تكلفة المنتج إن وُجدت، وإلا سعر البيع في تحليل القيمة.

إذا كانت إضافة Cost of Goods for WooCommerce مفعّلة: تكلفة سطر الطلب تصبح متوسط تكلفة الباتشات التي خرج منها، وتكلفة المنتج (_alg_wc_cog_cost) تتبع الباتش التالي في البيع. الخياران مفعّلان افتراضيًا، ويوقفان بضبط الخيارين mmb_cost_to_orders وmmb_sync_product_cost على no، ولا توجد لهما شاشة.

تظهر التكلفة لكل من يدير المنتجات. لإخفائها عن دور معين استخدم الفلتر mmb_can_view_costs في كود الموقع.

REST API

قراءة فقط ضمن WooCommerce REST API (wc/v3):

  • المنتجات والتنويعات: batches بالحقول id وlot وexpiry وstock، وcost لمن يملك manage_woocommerce.
  • الطلبات: كل سطر فيه batches بالحقول batch_id وlot وexpiry وqty وreturned.

أوامر WP-CLI والنقل من ATUM

  • wp mmb verify فحص الاتساق.
  • wp mmb sync-stock [--dry-run] يجعل مخزون WooCommerce مساويًا لمجموع الباتشات.
  • wp mmb migrate [--force] [--skip-stock-sync] ينسخ باتشات ATUM Multi-Inventory وروابطها بالطلبات. يرفض العمل إذا كانت الجداول غير فارغة، و--force يمسح باتشات هذه الإضافة أولًا.
  • wp mmb cleanup-atum --yes يحذف جداول ATUM وخياراتها نهائيًا.

خذ نسخة احتياطية من قاعدة البيانات قبل migrate وcleanup-atum. عطّل ATUM Multi-Inventory بعد النقل، فلا تعمل إضافتان تديران الباتشات معًا.

حل المشاكل

  • لا يظهر جدول الباتشات في المنتج: فعّل «إدارة المخزون» للمنتج أو التنويعة، وتأكد أن الترخيص مفعّل.
  • الطلب لم يسحب من أي باتش: السحب يتم عند إنقاص WooCommerce للمخزون، ويعتمد ذلك على حالة الطلب وخيار «إدارة المخزون».
  • اختلف المخزون عن مجموع الباتشات: استخدم زر التنبيه في قائمة الباتشات، أو wp mmb sync-stock. قد يحدث ذلك إذا كتبت إضافة أخرى في قاعدة البيانات مباشرة.
  • إشعار «توجد إضافة باتشات أخرى مفعّلة»: توجد إضافة تستخدم الجداول نفسها. عطّلها، فتعمل هذه الإضافة بالبيانات نفسها دون نقل.
  • رسالة «توقيع الرد غير صحيح» أو تعذّر الاتصال: يجب أن يصل الخادم إلى license.mirrororg.com، وأن يكون امتداد openssl مفعّلًا.
  • لا تُعرض الماركات: الإضافة تقرأ التصنيف product_brand، ولتصنيف آخر استخدم الفلتر mmb_brand_taxonomy.

التحديث والرجوع لإصدار سابق وإزالة الإضافة

التحديثات تصل من مركز MirrorORG: إشارة فورية عند النشر، وفحص كل ساعة احتياطيًا، وتُثبَّت تلقائيًا افتراضيًا (يمكن جعلها يدوية من «وصول التحديثات» في تبويب Licence). تُطابَق بصمة الملف قبل التثبيت. التحديث يحتاج ترخيصًا مفعّلًا.

للرجوع لإصدار سابق نزّله من حسابك وارفعه من «رفع إضافة ← استبدال الحالية»؛ البيانات لا تتأثر.

الإزالة: التعطيل يوقف المهام المجدولة ولا يمسح شيئًا. والحذف في هذا الإصدار لا يمسح الجداول (mmb_batches وmmb_order_batches وmmb_logs) ولا الخيارات (mmb_*)، لكن بعد التعطيل لا تسحب الطلبات من الباتشات، فإن فعّلتها لاحقًا فراجع تبويب Stock mismatches.

الشاشات بالإنجليزية في هذا الإصدار، ولم تُجرَّب الإضافة على Multisite بعد.

سجل الإصدارات

هذه التغييرات مأخوذة مباشرة من الإصدارات المنشورة على الـHub.

1.0.0 · 2026-10-31 · الإصدار الحالي

الإصدار الأول

  • باتشات لكل منتج أو تنويعة: رقم الباتش، وتاريخ الانتهاء، والمخزون، وتكلفة الوحدة، ومخزون المنتج يساوي مجموعها.
  • سحب FEFO تلقائي في الطلبات (الأقرب انتهاءً أولًا والمنتهي آخرًا)، وإعادة الكميات إلى باتشها عند الإلغاء والاسترجاع وتعديل الطلب، وعرض الباتش تحت كل سطر في شاشة الطلب.
  • مطابقة تغييرات المخزون من خارج الطلبات مع الباتشات.
  • قائمة باتشات بتعديل مباشر وإجراءات جماعية وخط زمني ولوحة تفاصيل، وتحليلات للباتشات والمخزون، وسجل تغييرات.
  • عمود Batches في تصدير واستيراد منتجات WooCommerce، وحقل batches للقراءة في REST API، وأوامر wp mmb، والنقل من ATUM Multi-Inventory.
  • تكلفة الباتش تصل إلى تكلفة سطر الطلب والمنتج عند تفعيل Cost of Goods for WooCommerce.
  • التفعيل والتحديثات من مركز MirrorORG. بغير ترخيص تتوقف الشاشات والتحديثات، ويستمر السحب من الباتشات، وتبقى البيانات محفوظة.
  • الشاشات بالإنجليزية في هذا الإصدار.

الدليل 1.0.0 مراجَع.

دليل هذه النسخة