📋 سجل التحديثات
v1.35.1 28-09-2026
  • إصلاحدورة استبدال تانية بنفس المنتج بقت بتتغلّف عادي — كانت بتترفض بـ«لم يتم اكتشاف أي تعديل — لا يمكن إعادة التغليف» رغم إن الأوردر في طابور «جاهز للتغليف». الشاشة بتفتح وتوست بيقول «🔁 دورة استبدال جديدة». محتاج Worker التغليف v2.8.0.
  • جديدنافذة «تم تغليف هذا الأوردر مسبقاً» (ونافذة «حدث تعديل بعد التغليف») بقى فيها رقم الأوردر أول سطر، ولينك لصفحته على شوبيفاي.
v1.27.0 16-09-2026
  • جديد🏷️ زرار «باركود المنتجات» في شاشة التغليف — بيجهّز ويفتح صفحة طباعة الباركود لمنتجات الأوردر اللي قدامك على طول، من غير ما تسيب الشاشة وتفتح أداة باركود SKU. نسخة لكل قطعة هتخرج من المخزن.
  • ملاحظةبيطبع بنود المرحلة اللي بتغلّفها دلوقتي (S1 أو S2) — يعني على أوردر استبدال بيطلّع الليبلات الصح. ومفيش تعديل على العدد من هنا: عايز تعدّل أو تضيف أصناف، افتح أداة باركود SKU.
  • ملاحظةالطباعة من هنا مالهاش صف في سجل باركود SKU — قرار مقصود.
v1.25.0 14-09-2026
  • تغيير🎨 مربع «شو روم» وعمود المندوب بقوا تركواز بدل الأخضر. نفس اللون بالظبط في الشاشة الرئيسية وفي قسم الطباعة — الموظف بيتعلّمه مرة واحدة.
v1.21.0 09-09-2026
  • جديد🔴 حارس أهلية على مسار السكان — قبل النسخة دي، أوردر ملغي أو New Order أو Confirmed ما اتطبعش كان بيفتح شاشة التغليف عادي وبلا أي تحذير. دلوقتي الأداة بتقول السبب: الحجب لما مفيش شغل ممكن (ملغي · مفيش قطعة تتغلّف)، وتحذير بإقرار لما فيه شغل بس محتاج مراجعة (ما اتطبعش · حالة مش من حالات التغليف · دورة استرجاع).
  • جديد🔴 نافذة تشخيص بدل رسالة «لا توجد منتجات نشطة» — الرسالة دي كانت بتسيب الموظف في حيرة. دلوقتي النافذة بتعرض ملف الأوردر (الحالتان · وقت الطباعة والتغليف · حالة الشحن والمالية · الإلغاء وسببه · المندوب والزون) وكل بنود الأوردر بالكميات التلاتة — الأصلي والحالي والمتبقي للشحن. النمط بيقول السبب لوحده: 2 → 2 → 0 اتشحنت · 2 → 0 → 0 اترجّعت أو اتلغت.
  • تغيير🔴 تمن رسائل توست بقوا نافذة — فشل فتح الأوردر · التغليف الجزئي · «اتغلّف بالفعل» · «محتاج سبب إعادة» · فشل الحفظ. الحالات دي بتسيب الأوردر محتاج فعل أو مراجعة، والتوست بيختفي لوحده: رسالة بتختفي لوحدها لحالة محتاجة فعل = الفعل مش هيتعمل. النجاح الكامل فضل توست — مالوش أي فعل مطلوب.
  • جديد«محتاج سبب إعادة التغليف» بقى فيها زرار 🔄 افتح الأوردر من أول — الرسالة كانت بتقول للموظف يعمل كده بإيده، والأداة تقدر تعمله بضغطة.
  • جديدزرار 📋 تفاصيل الأوردر في شاشة التشييك — نفس ملف الأوردر، بلا أي نداء للـ Worker (البيانات جاية في الرد أصلاً).
  • إصلاحبانر التحذير الأصفر كان بيقول «لم يتم تحديد حالة الأوردر» على أوردر حالته محددة تمامًا (Shipped · Cancelled · New Order) — معلومة غلط كانت بتخلّي الموظف يفتكرها بيانات ناقصة ويكمّل. دلوقتي بيسمّي الحالة الفعلية، وبيغطّي كل حالات التحذير مش unclear بس.
  • تغيير🔴 الحارس سيرفر-سايد كمان في complete_pack — حارس في الواجهة بس مش حارس. تاب مفتوح من ساعة والأوردر اتلغى في الوقت ده كان هيعدّي.
  • تغيير🔴 pack.min بقى 2.6.0 — Promote مطلوب لـ orders-packing-checker-worker v2.6.0 (ومعاه v2.5.0 المعلّق).
v1.15.0 08-09-2026
  • جديدصفحة 🏷️ باركود SKU بقى ليها تاب «📜 سجل العمليات» — الأداة كانت مالهاش أي أثر لمين طبع إيه وإمتى.
  • تغييرليبل الباركود بقى سطرين: رقم الأوردر تحت الخطوط اتشال، وخط الليبل بقى محايد (Arial) بدل السيريف.
  • تغيير🔴 barcode.min بقى 1.2.0 — Promote مطلوب لـ order-sku-barcode-printer-worker v1.2.0 (السجل + [[d1_databases]]).
v1.14.0 08-09-2026
  • جديد🔴 مربع «شو روم» تالت جنب «بوسطة» و«مناديب» — كان واقع جوّه «مناديب» رغم إنه أخضر في عمود المندوب، فالموظف كان بيدوّر على الصفوف الخضرا في مربع مش بتاعها. المربع بيشتغل بنفس قاعدة المربعين التانيين بالظبط (بيكتب في فلتر «المندوب»)، والمطابقة بتبلع Showroom وShow_Room و«شو روم».
  • تغييرليبل «أوردرات جاهزة للتغليف» وبادجا «عادي» و«استبدال» اتشالوا من صندوق الأعداد — التقسيمة اللي الموظف بيتصرّف عليها هي مربعات المندوب. «محاولة مكرّرة» فاضلة لأنها إشارة إن الأوردر بيتشحن تاني.
v1.13.0 07-09-2026
  • تغييرمربعا «بوسطة/مناديب» بقوا معروضين على صف «جاهز للتغليف» في الشاشة الرئيسية كمان — بنفس الألوان وبنفس الأرقام. القاعدة اتنقلت لـ shared/shell.js §COURIER-GROUP، نسخة واحدة للصفحتين. صفر تغيير في سلوك المربعات هنا.
v1.7.0 07-09-2026
  • جديدزرار «إعادة 🖨» في طابور التغليف بقى بيشتغل فعلاً. كان بيفتح صفحة الطباعة مفلترة على أوردر مش موجود فيها — لأن طابور الطباعة بيفلتر على حالات «مؤكَّد»، وأوردر اتطبع خلاص حالته Ready. الموظف كان بيشوف «لا توجد أوردرات تطابق الفلاتر» وتوست بيقول إن الجدول اتفلتر عليه، والحل الوحيد كان إن حد يرجّع الحالة يدوي.
  • جديدكارت 🔁 إعادة طباعة الفاتورة بيطلع أوتوماتيك لما الأوردر مش في الطابور: الحالة · النوع · العميل · آخر طباعة · عدد مرات الطباعة، وبيعدّي على نفس بوابة المراجعة بتاعة الطباعة العادية.
  • تغيير🔴 الحالة مابتتغيّرش — أوردر Ready بيفضل Ready. اللي بيتحدّث: التاج + ميتافيلد وقت الطباعة بالوقت الجديد + صف جديد في السجل باسم الموظف. ⏱️ الثمن المُعلَن: عمود «الوقت منذ الطباعة» في طابور التغليف بيرجع لأول اليوم.
  • إصلاح🔴 لغم كان هيطبع فاتورة ببنود غلط: الـ Worker بيحدد نوع الفاتورة من status_2_r_e ∈ {Confirmed + RETURN, Confirmed + EXCHANGE} بس، فأوردر S2 حالته Ready كان هيتقري S1 — والنوع ده بيختار البنود نفسها، وبعدين بيتبعت لـ /track اللي بيكتب على ماكينة S1. النوع بقى بيتبعت صريح في مسار إعادة الطباعة بس.
  • تغيير🔴 Worker الطباعة لازم Promote لـ v2.4.0 — printer.min بقى 2.4.0. من غيره كارت إعادة الطباعة بيقول بالنص إن النسخة أقدم، وباقي الصفحة شغّال عادي.
v1.6.0 06-09-2026
  • جديدصفحة 🏷️ باركود SKU — طباعة ليبل ٢×١ إنش لأصناف أوردر، أو بالبحث المباشر بـ SKU/باركود من غير أوردر.
  • جديدorder-sku-barcode-printer-worker انضم لمجموعة السر warehouse_ops — نفس حقل السر بيخدم الأربعة.
v1.5.1 06-09-2026
  • إصلاحتاب «📜 سجل العمليات» في صفحة حذف منتج بقى موجود. شريط التابات كان ناقص من الـ HTML — البانل وswitchMainTab وكل §LOG-JS كانوا موجودين بالكامل بس مفيش أي زرار بينادي عليهم، فالتاب كان مستحيل يتفتح. واتضاف كمان تعبئة فلتر الموظف من get_employees — كانت أثر جانبي لشاشة الدخول اللي اتشالت من الصفحة.
v1.5.0 06-09-2026
  • جديدصفحة 📊 إحصائيات المخزن — أرقام الفترة · جدول الموظفين · توزيع ساعات الشغل · مؤشرات الجودة. قراءة سجل D1 بحتة، صفر تعديل Worker.
  • إصلاحسلّم «آخر تحديث» (agoInfo) اتنقل لـ shared/shell.js — كان نسخة في الشاشة الرئيسية لوحدها.
v1.4.0 06-09-2026
  • تغييرلوحة «آخر تحديث» بقت ملزوقة بزرار التحديث في الشاشة الرئيسية، وبنفس شكلها في صفحة التغليف بالحرف — صندوق بسطرين: اللافتة وعدّاد القِدَم فوق، وختم التاريخ والوقت تحت.
v1.3.0 06-09-2026
  • تغييرطوابير الشاشة الرئيسية بقت صفوف بعرض الشاشة بدل كروت جنب بعض — الرقم والتقسيمة والختم والزرار كلهم على سطر واحد، والأدوات بقت مربعات مضغوطة تحتيهم.
v1.2.0 06-09-2026
  • تغييراسم الصفحة بقى «قسم التغليف» بدل «تشييك التغليف» — عرض بس، اسم الأداة في السجل (pack_checker) ما اتغيّرش.
  • تغييرزرار 🏠 الرئيسية بقى مصمت أزرق وفي نص الهيدر — كان بنفس شكل باقي الزراير بالظبط.
  • تغييرزرار الموظف بقى «الاسم ✕» بدل «👤 الاسم — خروج».
  • جديدالشاشة الرئيسية بقى فيها تحديث تلقائي كل ١٥ دقيقة للأعداد + لوحة «آخر تحديث» بعدّاد بيلوّن نفسه.
v1.1.0 06-09-2026
  • جديدحارس الفاتورة اللاغية في صفحة الطباعة — أوردر رجع للطابور بعد ما اتطبع بيطلب تأكيد إن الورقة القديمة اتقطّعت، والمتغلّف بيتعلّم بشارة 📦.
  • تغييرحُرّاس ما قبل الطباعة اتجمعوا في نافذة مراجعة واحدة بدل نافذتين متتاليتين.
  • جديدكل فاتورة في آخرها سطر صغير بتاريخ ووقت الطباعة بتوقيت القاهرة واسم الموظف.
  • تغييرالحد الأدنى لـ Worker الطباعة بقى 2.3.0.
v1.0.0 05-09-2026
  • تغييرعمود «المنطقة» (custom.zone) اتشال نهائيًا من جدول الطابور والفلاتر — الأداة مش محتاجاه (قرار أحمد 05-09-2026)
  • جديدمربعا فلتر جدد فوق الجدول بدل مربعات المنطقة: «بوسطة» (أحمر) لو المندوب Bosta، و«مناديب» (أزرق) لأي مندوب تاني — حتى لو مفيش مندوب مسجل خالص
  • تغييرفلتر «المندوب» بقى أول فلتر في القسم بدل «المنطقة» — مربعا «بوسطة/مناديب» بيكتبوا فيه (نفس مبدأ v2.5.0: حالة واحدة مش فلترة موازية)
v2.6.1 05-09-2026
  • تغييرزرار «إغلاق» في نافذة «تم تغليف هذا الأوردر مسبقاً» بقى أحمر (`.btn-red` — نفس ألوان `.btn-green` الموجودة، `--red`/`--red-dark`) بدل الرمادي المحايد، عشان يعبّر إنه رفض مش إغلاق عادي
v2.6.0 05-09-2026
  • إصلاحرقم الأوردر في شاشة التغليف بقى لينك لشوبيفاي — كان نص عادي، دلوقتي بيفتح الأوردر في تاب جديدة زي رقم الأوردر في الجدول وفي تاب السجل (قاعدة #20)
  • إصلاحأيقونة زرار «إعادة» في عمود الخيارات بقت أيقونة طابعة SVG — الإيموجي 🖨 كان بيطلع مربع فاضي على أجهزة كتير
  • تغييرعمود المحاولة بقى نص عادي من غير بادج — بنفس الألوان (محاولة مكرّرة كهرماني · أول شحنة رمادي)، زي عمود نوع الأوردر
v2.5.0 05-09-2026
  • جديدماسح باركود بوسطة — مربع تالت بيقرا تراكينج بوسطة، بيطلّع منه رقم الأوردر على شوبيفاي ويفتح شاشة التشييك عادي. نفس مسار التغليف بالظبط ونفس حارس «اتغلّف قبل كده» — والتراكينج بيفضل معروض فوق شاشة التشييك عشان تقارنه بالملصق
  • جديدالتلات مداخل جنب بعض بالتساوي، كل واحد بلونه: ماسح شوبيفاي أزرق · ماسح بوسطة أحمر · الإدخال اليدوي محايد
  • جديدالفوكس بيرجع لآخر مربع اتشتغل منه — لو آخر أوردر فتحته من ماسح بوسطة، أول ما ترجع من التغليف تلاقي السكانة جاهزة على نفس المربع
  • جديدمربعات المناطق في نص صندوق الأعداد: كل منطقة وعددها بلونها، والضغط على أي مربع بيفلتر الجدول عليها (وضغطة تانية بتشيل الفلتر)
  • جديدفلتر المنطقة — وبقى أول فلتر في القسم
  • تغييرقسم الفلاتر بقى مقفول افتراضيًا — الجدول بقى أقرب للشاشة، والفلاتر بضغطة على العنوان
  • تغييرنوع الأوردر بقى نص عادي من غير بادج — بنفس الألوان (عادي أزرق · استبدال بنفسجي)
  • تغييرالمندوب الفاضي بقى «غير محدد» بدل «لا يوجد مندوب مسجل»
  • تغييرزرار «طباعة» في عمود الخيارات بقى «إعادة» — نفس الرابط، ولسه لينك خارجي بلا أي أكشن على الأوردر
  • تنبيهماسح بوسطة محتاج مفتاح بوسطة على الـ Worker. لو ظهرت رسالة عن BOSTA_API_KEY، ده إعداد ناقص — باقي الأداة شغّالة عادي، وافحصه من 🩺 فحص النظام
v2.4.0 05-09-2026
  • جديدعمود المنطقة (custom.zone) بعد رقم الأوردر: قاهرة وجيزة (أزرق) · محافظات (أحمر) · شو روم (أخضر) · ⚠ لا توجد منطقة مسجلة ⚠ (برتقالي) — والغايب زي BLANK، الاتنين تحذير مش خانة فاضية
  • جديدعمود «خيارات» قبل رقم الأوردر بزرارين بيفتحوا أدوات تانية في تاب جديدة: عطلان (أحمر) وطباعة (أصفر) — مفيش أي أكشن على الأوردر
  • جديدتحديث تلقائي كل ١٥ دقيقة — ولو الطابور مش معروض (شاشة تشييك أو تاب السجل) بيتأجّل لحد ما ترجع بدل استعلام على قايمة محدش شايفها
  • تغييرالمندوب بقى بيتعرض زي ما هو — قبل كده أي مندوب غير بوسطة كان بيتقري «قاهرة» وده كان غلط. اللون هو اللي بيصنّف: بوسطة أحمر · شو روم أخضر · باقي المناديب أزرق · والفاضي «لا يوجد مندوب مسجل»
  • تغييربادج عمر الأوردر بقى بنفس ألوان «الوقت منذ الطباعة» — نفس درجات التأخير بالظبط
  • تغيير«من امبارح» بقت «منذ أمس» في العمودين
  • تغييرعنوان القسم اتشال، وزرار التحديث ولوحة «آخر تحديث» بقوا جوّه صندوق الأعداد — والصندوق بيفضل ظاهر في كل الحالات (الأعداد بتبقى «—» قبل أول تحديث)
  • تغييرزرار تصدير XLSX اتشال من جدول الطابور (لسه موجود في تاب السجل)
v2.3.0 05-09-2026
  • جديدعمود «الوقت منذ الطباعة» في الطابور — بيتحسب لوحده وبيتلوّن مع كل يوم تقويمي جديد: نفس اليوم أخضر بالدقايق والساعات، ويوم كهرماني، يومين برتقالي، ٣–٦ أيام أحمر، وسبعة فأكتر أحمر داكن
  • جديدعدّاد عمر الأوردر بالأيام جوّه عمود «تاريخ الأوردر» — «اليوم» · «من امبارح» · «من ٥ أيام»
  • جديدزرار تحديث واضح في هيدر الطابور ببادج بعدد الأوردرات — وموجود كمان في حالتَي «في انتظار التحديث» و«لا توجد أوردرات»
  • جديدلوحة «آخر تحديث»: التاريخ والوقت + عدّاد «منذ كام» بيتحدّث كل نص دقيقة وبيتلوّن بالقِدَم، والزرار بيبقى كهرماني بعد ١٥ دقيقة
  • تغييرترتيب أعمدة الطابور: رقم الأوردر · المندوب · تاريخ الطباعة · وقت الطباعة · الوقت منذ الطباعة · تاريخ الأوردر · نوع الأوردر · المحاولة — والتصدير بقى بنفس الترتيب
  • تغييرالترتيب الافتراضي للطابور بقى بتاريخ الأوردر من الأقدم للأحدث — والضغطة التالتة على أي عمود بترجّع للترتيب ده
  • تغييرالتحديث بعد التغليف بقى عند الرجوع لشاشة الطابور مش في لحظة الحفظ — استعلام واحد، وبيشمل الرجوع من تاب السجل
v2.2.0 05-09-2026
  • جديدأداة «أوردرات جاهزة للتغليف» بقت جوّه الأداة دي — الطابور بيظهر تحت مربعات الإدخال في نفس شاشة التغليف، بفلاتر وترتيب وتصدير XLSX
  • جديدالطابور بيتحدّث لوحده بعد الدخول وبعد كل تغليف — الأوردر اللي خلص بيختفي من القايمة
  • جديدبانرين منفصلين: «تعذّر تصنيف أوردرات» (القايمة ناقصة) و«تصنيف مبني على بيانات مقصوصة» — الاتنين مش نفس الحاجة
  • تغييرالجدول للعرض بس — الضغط على صف مابيفتحش شاشة التشييك؛ التغليف لسه بالسكانر أو الإدخال اليدوي
  • تغييرمنطق تصنيف أوردرات الاستبدال بقى نسخة واحدة بدل نسختين في أداتين — كان ده سبب إن الأداتين يقولوا حاجتين متضادتين عن نفس الأوردر
v2.1.0 03-09-2026
  • جديدزرار تسجيل الخروج — الأداة كانت من غير خروج خالص، وده سبب إن سجل الـ logout في D1 فاضي
  • جديدحارس نسخة الـ Worker + زرار 🩺 فحص النظام في الإعدادات
  • جديدتاب السجل بقى جدول بفلاتر اختيار متعدد + فلتر تاريخ + ترتيب أعمدة + صفحات
  • جديدتحذير ثابت لو تصدير Excel اتقص عند سقف الـ Worker
  • تغييررابط الـ Worker بقى ثابت في الكود — اتشال من شاشة الإعدادات (السر بس هو اللي بيتكتب)
  • تغييرنتيجة التغليف بقت ٣ حالات: تم / تم جزئيًا / فشل — مع سطر بما تم فعليًا
  • تغييرأرقام الأوردرات بقت لينك مباشر لشوبيفاي، وصيغة التاريخ اتوحّدت
  • إصلاحرقم النسخة بقى مصدر واحد بدل ما يتكتب في تلات أماكن
  • إصلاحرسالة خطأ تحميل قائمة الموظفين كانت بتتكتب في عنصر مخفي فما بتظهرش
  • إصلاحترتيب الطبقات (z-index) — نافذة الإعدادات كانت ممكن ترسم تحت شاشة الدخول
v1.7.1 02-09-2026
  • إصلاحعرض بيانات التغليف السابق ووقته في نافذتي التغليف السابق
ℹ️ About — Pack Checker
🏭 الصفحة دي جوّه مركز عمليات المخزن

الصفحة دي جزء من الهب — الدخول بيحصل مرة واحدة في الشاشة الرئيسية، والهوية بتوصل هنا من sessionStorage (بتموت مع قفل التاب، ولكل تاب لوحده).

اللي اتغيّر عن الأداة المستقلة

  • زراري «عطلان» و«إعادة» في جدول الطابور بقوا صفحات جوّه الهب (Order-Item-Remover.html وOrder-Printer.html) وبياخدوا رقم الأوردر معاهم. target="_blank" اتشال — التنقل في نفس التاب + زرار «↩ رجوع للطابور».
  • لسه بلا أي أكشن على الأوردر ومفيش نداء للـ Worker — بيفتحوا صفحة وبس.
  • الطابور بيترسم من الكاش أول ما الصفحة تفتح (مختوم بوقته)، والجلب بيحصل في الخلفية لو الكاش عدّى ١٥ دقيقة. الشاشة الفاضية أسوأ من شاشة قديمة مختومة بوقتها.
  • صف الدخول في D1 بقى warehouse_ops_center، لكن فعل التغليف نفسه (packed) لسه تحت pack_checker زي ما هو — التاريخ ما اتكسرش.
📋 وصف الأداة

الهدف: التحقق من تغليف الأوردرات قطعة قطعة قبل الشحن، وتسجيل التغليف على الأوردر (ميتافيلد + tag) وفي سجل D1.

المستخدمون المستهدفون: موظفو التغليف في المخزن — بالسكانر أو بالإدخال اليدوي.

كيف تعمل — Workflow

  1. الشاشة بتفتح على طابور «جاهز للتغليف» تحت مربعات الإدخال — الأوردرات اللي حالتها Ready واتطبعت ولسه ما اتغلّفتش. الجدول للعرض بس: الضغط على صف مابيفتحش التشييك، ورقم الأوردر لينك لشوبيفاي.
  2. سكان باركود الأوردر أو إدخال رقمه → الـ Worker بيجيب بيانات الأوردر من Shopify.
  3. الأداة بتحدّد المرحلة (S1/S2) من تلات إشارات: وجود طلب استبدال نشط + custom.manual_status + custom.status_2_r_e.
  4. لو الأوردر متغلّف قبل كده من غير تعديل: نافذة بتعرض تفاصيل التغليف السابق وبتمنع الإعادة.
  5. لو متغلّف قبل كده ومع تعديل مكتشف: نافذة واحدة بتجمع التفاصيل + تأكيد رجوع المخزون، وبعد التأكيد بتكمّل.
  6. سكان منتجات الأوردر واحدة واحدة بالباركود/SKU → لما تكتمل → زرار «تأكيد اكتمال التغليف».
  7. الـ Worker بيكتب الميتافيلدات + tag، وبيسجّل في D1 ومعاه بصمة المنتجات للمقارنة المستقبلية.

الـ Endpoints الرئيسية

actionالوصف
get_orderجلب الأوردر + تحليل المرحلة + كشف التغيير بالبصمة
complete_packكتابة الميتافيلدات + tag + تسجيل D1، وبترجّع status وactions
get_ready_ordersطابور «جاهز للتغليف» — أوردرات S1+S2 حالتها Ready واتطبعت ولسه ما اتغلّفتش. قراءة بحتة، وبترجّع partial وs2Failed وs2Truncated. من Worker v2.3.0 بيرجّع كمان zone (custom.zone) — الواجهة بقت من v2.6.2 مابتقراهوش، عمود المنطقة اتشال نهائيًا
get_logs · get_logs_count · get_logs_exportاستعراض وتصدير سجل التغليف (فلترة server-side)
diag · get_configفحص ذاتي بدون كتابة · نسخة الـ Worker لحارس التوافق
check_employee · register_pin · verify_employee · log_logout · get_employeesبلوك الدخول المشترك

⚙️ إجراءات كل حالة

الحالةالإجراءات على الأوردر
تغليف S1كتابة custom.s1_packed_by + custom.s1_packing_date_time · إضافة tag S1=Packed · صف packed في D1
تغليف S2كتابة custom.s2_packed_by + custom.s2_packing_date_time · إضافة tag S2=Packed · صف packed في D1
إعادة تغليف بعد تعديلنفس الإجراءات + edit_reason في السجل + extra.repack وextra.previousPackedBy
محاولة تغليف أوردر اتغلّف بالفعلمفيش أي كتابة — رد 409 + conflict: true. لو البنود اتغيّرت: requiresReason: true لحد ما يتدخل سبب.
🔧 تشريح الكود

FEATURE MAP

  • §AUTH (Worker) — بلوك الدخول المشترك · §AUTH-JS (HTML) — شاشة الدخول والخروج
  • §PACK::analyzeStage (Worker) — تحديد المرحلة من التلات إشارات
  • §PACK::classifyOrderItems (Worker) — تصنيف المنتجات على fulfillableQuantity
  • §PACK::buildFingerprint + readStoredFingerprint (Worker) — كشف التغيير
  • §PACK::fetchOrderForPack (Worker) — تصفيح lineItems و returns + علم truncated
  • §DIAG (Worker) — diag وget_config
  • §SCAN (HTML) — سكانر الأوردر وسكانر الباركود · §SCAN::entryMode — المربع النشط والفوكس بيرجع له · ::scannerBinding — نفس سلوك السكانة للمربعين
  • §BOSTA (Worker) — bostaSearch · cleanOrderName · resolveTrackingToOrderName — تحويل تراكينج بوسطة لرقم أوردر (قراءة بحتة)
  • §TOOL-JS (HTML) — شاشة الفحص · النوافذ · نتيجة التغليف بـ ٣ حالات
  • §LOG-JS (HTML) — جدول السجل · الفلاتر · الترتيب · الصفحات · تصدير XLSX
  • §READY (Worker) — طابور «جاهز للتغليف»: get_ready_orders · isPrintedNotPacked · classifyS2Subtype · classifyS2Batch · shapeReadyOrder
  • §TOOL::readyQueue (HTML) — الطابور تحت مربعات الإدخال · §READY-JS — الفلاتر · الترتيب · الجدول · تصدير XLSX
  • §READY-JS::elapsed (HTML) — rdySincePrint · rdyOrderAgeText · rdyDayDiff — الأعمدة المحسوبة بالوقت (بتوقيت القاهرة، بفرق الأيام التقويمية)
  • §READY-JS::ticker + ::freshness (HTML) — نبضة كل ٣٠ ثانية بتحدّث الأرقام النسبية في مكانها بدون أي نداء شبكة
  • §READY-JS::autoRefresh (HTML) — rdyArmAutoRefresh · rdyAutoRefreshTick · rdyQueueVisible — التحديث التلقائي كل ١٥ دقيقة (النداء الدوري الوحيد في الأداة)
  • §READY-JS::courier (HTML) — عرض المندوب بلونه (بوسطة أحمر · شو روم أخضر · غيرهم أزرق · فاضي رمادي)
  • §READY-JS::courierChips (HTML) — مربعا «بوسطة/مناديب» فوق الجدول (v2.6.2، بدّلوا مربعات المنطقة اللي اتشالت): عدّ من الطابور كله وفلترة بضغطة، نفس حالة فلتر «المندوب»
  • §LABEL-MACHINE (HTML · CSS + JS) — ماكينة الليبل المطبوع ٢×١ إنش: bcBuildLabel · bcFitLabelText · bcRenderLabels · bcFirePrint. 🔴 نسخة مكرّرة عن قصد — التوأم في Order-SKU-Barcode-Printer.html، والكتلتان متطابقتان بايت ببايت. الانحراف بيتمسك بـbash docs/label-twin-check.sh
  • §PACK-LABELS (HTML) — packPrintLabels: زرار «🏷️ باركود المنتجات» في شاشة التشييك. بيطبع بنود المرحلة الجارية (currentItems) بصفر نداء للـ Worker

KEY VARIABLES

  • TOOL_VERSION — مصدر واحد لرقم نسخة الواجهة (الهيدر + الـ Changelog + شاشة الدخول)
  • MIN_WORKER_VERSION — أقل نسخة Worker الواجهة دي بتشتغل معاها (مالهاش علاقة بـ TOOL_VERSION)
  • روابط الـ Workers — ثوابت في shared/shell.js § CONFIG، مش في الإعدادات ولا في التخزين المحلي (Standards #28)
  • LS_SECRET = 'pack_checker_worker_secret' — المفتاح الوحيد في localStorage
  • currentEmployee — { username, displayName } في الذاكرة فقط
  • lastEntryMode — آخر مربع إدخال اتشتغل منه (shopify · bosta · manual). في الذاكرة فقط، وبيتصفّر عند الخروج.
  • msState — حالة فلاتر الاختيار المتعدد في تاب السجل (فلترة server-side)
  • rdyMsState · rdyAllOrders · rdySortState — حالة فلاتر وترتيب الطابور (فلترة client-side). منفصلة عن اللي فوقها بالكامل — الاتنين شغّالين في نفس الصفحة.
  • rdyDirty — «حصل تغليف والطابور بقى قديم». التحديث بيحصل عند الرجوع لشاشة الطابور، والفلاج مابيتصفّرش غير بعد جلب ناجح.
  • rdyLastLoadedAt — ختم آخر جلب ناجح؛ منه بيتحسب «منذ كام» ولون الزرار.
  • TOOL_NAME = 'pack_checker' — قيمة tool في جدول logs

NOTES / QUIRKS

  • كشف التغيير بيقرا extra.fingerprint المخزّن؛ الصفوف القديمة بترجع لتحليل نص items — ولو التحليل فشل، النتيجة «فيه تغيير» (الافتراضي الآمن).
  • صيغة items (SKU ×qty) مرتبطة بين complete_pack وget_order — الاتنين بيتغيّروا مع بعض.
  • fulfillableQuantity هو مصدر الحقيقة الوحيد للتصنيف — ممنوع فلترة يدوية على الـ refunds.
  • v2.1.0 — complete_pack بقى بيتحقق من شوبيفاي قبل أي كتابة: بيقرا الأوردر، بيحسب المرحلة بنفسه (أي stage جاي من الواجهة بيتجاهل)، وبيرجّع 409 + conflict لو الأوردر اتغلّف بالفعل. تاب مفتوح من ساعة أو ضغطة مزدوجة ماعادش يعدّي.
  • v2.1.0 — الحارس اتفصل في §PACK::evaluatePackGuard: دالة واحدة بينادها get_order وcomplete_pack، فمستحيل يفترقوا في المنطق.
  • v2.1.0 — البصمة والملخّص المخزّنين في السجل بقوا من بنود السيرفر مش بنود الواجهة. لو الاتنين اختلفوا، العملية بتكمل ببنود السيرفر مع تحذير «الأوردر اتعدّل بين ما فتحته وما ضغطت تم».
  • dateFrom/dateTo بيتقارنوا بـ timestamp المخزّن (UTC) والعرض بتوقيت القاهرة (UTC+3) — فرق ٣ ساعات ممكن يحط عملية متأخرة في يوم UTC اللي بعده.
  • edit_count لسه في schema الـ D1 للتوافق بس — مابيتكتبش من v1.3.0+.
  • v2.2.0 — أداة «أوردرات جاهزة للتغليف» اتدمجت هنا. الطابور بيظهر تحت مربعات الإدخال في نفس تاب التغليف — مش تاب منفصلة — والضغط على صف مابيفتحش شاشة التشييك (قرار أحمد 05-09-2026). الدخول للتغليف من السكانر أو الإدخال اليدوي زي ما هو.
  • v2.3.0 — الطابور بيتحدّث لوحده في تلات لحظات: بعد الدخول · بالضغط على «تحديث» · عند الرجوع لشاشة الطابور بعد أي تغليف ناجح أو جزئي (تحديث صامت). التحديث بقى عند الرجوع مش في لحظة الحفظ — استعلام واحد بدل اتنين، والقايمة بتتجاب بعد ما الكتابة على شوبيفاي خلصت. مفيش polling.
  • v2.3.0 — «الوقت منذ الطباعة» و«عمر الأوردر» بيتحسبوا بـفرق الأيام التقويمية بتوقيت القاهرة مش بـ(الآن − الوقت)/٢٤ ساعة. أوردر اتطبع ١١ مساءً بيبقى «متأخر يوم» الساعة ١ صباحًا — وده الصح للمخزن. الحساب من toCairo، لأن iso.slice(0,10) كان هيقفل اليوم الساعة ٣ صباحًا بتوقيتنا.
  • v2.3.0 — الأرقام النسبية بتتحدّث في مكانها (data-rdy-since · data-rdy-age) مش بإعادة رسم الجدول — إعادة الرسم بتصفّر تمرير الجدول تحت إيد الموظف. النبضة بتقف عند الخروج (rdyStopTicker).
  • v2.3.0 — الترتيب الافتراضي للطابور بقى تاريخ الأوردر تصاعديًا في الواجهة (rdyDefaultSort). الـ Worker لسه بيرجّع الأحدث أولاً — الترتيب الافتراضي قرار واجهة عشان يتغيّر من غير deploy للـ Worker.
  • v2.4.0 — تحديث تلقائي كل ١٥ دقيقة — النداء الدوري الوحيد في الأداة، وقرار مقصود. مابيستعلمش والطابور مش معروض: بيعلّم rdyDirty والجلب بيحصل أول ما الموظف يرجع، فمافيش استعلام على قايمة محدش شايفها ولا إعادة رسم تحت إيد موظف بيغلّف. العدّاد بيتسلّح من جديد بعد كل جلب ناجح — «١٥ دقيقة من آخر تحديث» مش من الدخول.
  • v2.4.0 — المندوب بيتعرض زي ما هو. لحد v2.3.0 كانت أي قيمة غير Bosta بتتعرض «قاهرة» — يعني مندوب باسمه كان بيتقري غلط. دلوقتي النص من الميتافيلد كما هو، واللون هو اللي بيصنّف (بوسطة أحمر · شو روم أخضر · غيرهم أزرق)، والفاضي نصّه صريح «لا يوجد مندوب مسجل».
  • v2.4.0 — custom.zone بيتجاب من Worker v2.3.0. القيمة الغايبة وBLANK الاتنين بيتعرضوا تحذير برتقالي مش خانة فاضية — منطقة ناقصة قرار شحن ناقص. وأي قيمة مش في الـ choice list بتتعرض زي ما هي ببادج محايد: ما بنترجمش قيمة معرفناهاش وما بنخبّيهاش.
  • v2.4.0 — الترجمة بتحصل مرة واحدة وقت بناء الصف (zone + zoneCls)، مش وقت الرسم. لو الرسم ترجم تاني، هيترجم نص عربي مترجم أصلاً والبادج هيفقد لونه.
  • v2.4.0 — صندوق الأعداد مابيختفيش في أي حالة، لأنه بقى شايل زرار التحديث ولوحة «آخر تحديث». وقبل أول جلب ناجح الأعداد «—» مش «0»: «ما اتحدّثش» مش «مفيش شغل».
  • v2.4.0 — زراير عمود «خيارات» لينكات خارجية بس (target="_blank") — مفيش أي أكشن على الأوردر ومفيش نداء للـ Worker. لو حد ضاف أكشن هناك بعدين، لازم يعدّي على حارس التغليف زي أي كتابة تانية.
  • v2.2.0 — منطق الطابور والتغليف بيقروا نفس الميتافيلدات، وclassifyS2Subtype بقت نسخة واحدة في الـ Worker. قبل الدمج كانت في ملفين، وده اللي خلّى إصلاح refundedIds يتعمل في أداة ويفضل مكسور في التانية لشهور.
  • v2.5.0 — مدخل تالت: ماسح باركود بوسطة. رقم التتبع بيتبعت للـ Worker (get_order?tracking=)، والـ Worker بينادي بوسطة قراءة بحتة، بيطلّع businessReference، بينضّفه من الـ # وبيكمّل بنفس مسار الاسم بالحرف — نفس التصنيف ونفس حارس «اتغلّف قبل كده». مفيش مسار تغليف تاني: مسار موازي كان معناه حارسين يفترقوا، وده اللي أنتج R3.
  • v2.5.0 — BOSTA_API_KEY سر جديد مطلوب على الـ Worker. من غيره مدخل بوسطة بس هو اللي بيفشل، وبرسالة باسم المتغيّر مش بـ«الشحنة غير موجودة» — و🩺 فحص النظام بيعرض وجوده.
  • v2.5.0 — التلات مداخل جنب بعض بالتساوي، وكل واحد بلونه: شوبيفاي أزرق · بوسطة أحمر · اليدوي محايد. اللون هو التمييز — الموظف بيختار المربع من لون الملصق اللي في إيده.
  • v2.5.0 — الفوكس بيرجع لآخر مربع اتشتغل منه (lastEntryMode): موظف شغّال دفعة ملصقات بوسطة مايرجعش بإيده للمربع بعد كل أوردر. في ذاكرة الصفحة بس — مش في التخزين المحلي — فموظف جديد بيبدأ من الافتراضي.
  • v2.5.0 — مربعات المناطق في نص صندوق الأعداد = فلتر بضغطة. العدد جوّه المربع من الطابور كله مش من المفلتر: لو اتحسب على المفلتر، أول ضغطة كانت هتصفّر باقي المربعات فمحدش يقدر يرجّع. والضغط بينادي نفس rdyMsToggleItem('zone', …) — حالة واحدة مع فلتر «المنطقة»، مش حالة موازية.
  • v2.5.0 — قسم الفلاتر مقفول افتراضيًا، و«المنطقة» بقت أول فلتر. قيمة الفلتر هي النص المترجم المعروض في العمود، مش قيمة الميتافيلد.
  • v2.5.0 — نوع الأوردر بقى نص عادي بنفس الألوان بدل بادج، والمندوب الفاضي بقى «غير محدد»، وزرار «طباعة» بقى «إعادة» (نفس الرابط — لسه لينك خارجي بلا أكشن).
  • v2.6.0 — رقم الأوردر في شاشة التغليف بقى لينك لشوبيفاي (قاعدة #20) — نفس orderLink() اللي في الجدول وتاب السجل. ولو الأوردر جه من غير id، بيتعرض نص عادي (.no-link) مش لينك مكسور.
  • v2.6.0 — عمود المحاولة بقى نص عادي بنفس الألوان بدل بادج — زي نوع الأوردر.
  • v2.6.0 — أيقونة زرار «إعادة» بقت SVG (RDY_PRINT_ICON) بترث لون الزرار. الإيموجي 🖨 (U+1F5A8) مش مدعوم على أجهزة كتير وكان بيطلع مربع فاضي — ممنوع الرجوع لإيموجي هنا.
  • v2.6.2 — عمود «المنطقة» (custom.zone) اتشال نهائيًا من الجدول والفلاتر (قرار أحمد 05-09-2026) — مش موقوف مؤقتًا، محذوف. الـ Worker لسه بيرجّع zone في get_ready_orders، بس الواجهة بقت متجاهلاه تمامًا.
  • v2.6.2 — مربعات المنطقة فوق الجدول اتبدّلت بمربعين على عمود المندوب: «بوسطة» (أحمر، نفس .courier-bosta) لو المندوب Bosta، و«مناديب» (أزرق، نفس .courier-other) لأي مندوب تاني حتى لو مفيش مندوب مسجل خالص. الشو روم بقى داخل «مناديب» هنا رغم إنه أخضر في عمود المندوب — التقسيم في المربعات ثنائي بس (بوسطة/غير بوسطة).
  • v2.6.2 — نفس مبدأ v2.5.0: المربعان **حالة واحدة** مع فلتر «المندوب» التفصيلي (بقى أول فلتر بدل المنطقة) — الضغط بيحدد/يلغي كل قيم المندوب الحقيقية اللي بتقع في المجموعة دي جوّه rdyMsState.courier.selected، مش حالة موازية.
  • فخّ v2.5.0: §BOSTA اتنقل حرفيًا من ريبو Bosta-Orders-Shipped-Scanner، فالكود ده بقى في مكانين. أي إصلاح على شكل رد بوسطة أو على cleanOrderName لازم يتعمل في الاتنين — نفس عيلة خطر classifyS2Subtype.
  • فخّ: منطق الـ multi-select والترتيب متكرر بين §LOG-JS و§READY-JS (الأول server-side والتاني client-side). أي تعديل على سلوك القوايم أو الترتيب لازم يتعمل في الاتنين.
  • فخّ v1.27.0: §LABEL-MACHINE مكرّرة عن قصد بين Orders-Packing-Checker.html وOrder-SKU-Barcode-Printer.html (قرار أحمد 16-09-2026). الفشل لو افترقوا مالوش صوت: الليبل بيتقص من تحت في صمت وبياكل من خطوط الباركود، والسكانر بيبطّل يقرا. أي تعديل يتعمل في الاتنين في نفس التمريرة، والتحقق بـbash docs/label-twin-check.sh.
  • v1.27.0: الطباعة من هنا مابتكتبش أي صف في D1 (قرار أحمد) — الصفحة مابتناديش log_print ولا Worker الباركود خالص، وPAGE_WORKERS فضلت ['pack'].
  • isPrintedNotPacked بتسأل «اتطبع بعد آخر تغليف؟» مش «متملّي ولا فاضي» — ميتافيلدات التغليف مبتتصفّرش بين دورات الإرجاع، والمقارنة بـ new Date() مش نصوص (printing_time بتيجي بصيغتين).
النشط الآن
🔫 ماسح باركود شوبيفاي
Scanner Gun: امسح وسيتم الاستعلام تلقائياً
النشط الآن
🚚 ماسح باركود بوسطة
Scanner Gun: التراكينج بيتحوّل لرقم أوردر تلقائياً
النشط الآن
⌨️ إدخال يدوي
أدخل الرقم مع أو بدون # ثم اضغط بحث أو Enter
📦
—
محاولة مكرّرة: —
آخر تحديث لسه ما اتحدّثش
—
⏳
في انتظار التحديث
اضغط «تحديث» للاستعلام عن الأوردرات الجاهزة
▲
الموظف
تحديد الكل
نوع العملية
تحديد الكل
بحث (رقم الأوردر / الملاحظات)
🔍
فترة سريعة
✕ مسح الاختيار
اليوم✓
أمس✓
آخر 3 أيام✓
آخر 7 أيام✓
آخر 30 يوم✓
آخر 90 يوم✓
📅 شهر محدد‹
اختَر الشهر والسنة — يتطبّق الفلتر تلقائيًا بمجرد اختيار الاتنين. لسنة أقدم اختَر «سنة تانية...» واكتبها يدويًا.
الشهر الحالي✓
الشهر السابق✓
الربع الحالي✓
العام الحالي✓
العام السابق✓
من تاريخ
إلى تاريخ
▲
النتائج: —
التاريخ الوقت الأوردر المرحلة الموظف مُغلَّف بواسطة عدد القطع المنتجات النتيجة سبب الإعادة ملاحظات