📋 سجل التحديثات
v1.35.1 25-09-2026
  • تغيير🔴 الصفحة اتسمّت تاني — من office-transfer.html لـPackage-Transfer-To-Office.html، مطابقة حرفيًا لاسم ريبو الـ Worker المنفصل (نفس قاعدة Bosta-Orders-Shipped-Scanner.html في v1.34.0). ⚠️ الرابط القديم ما بقاش شغّال — حدّث أي بوكمارك على أجهزة المخزن.
v1.30.0 19-09-2026
  • جديد🔴 عمود «موقع الشحنة» في الطابور — بيقول العهدة المسجّلة على الطرد قبل السكانة. ⚠️ والقيم اللي ممكن تظهر هنا اتنين بس (Warehouse أو فاضي): البوابة بتستبعد Office وCourier قبل ما الصف يدخل الطابور.
  • تغيير⚠️ والعمود هيقول «— مش مسجّل» على كل الصفوف دلوقتي — أداة التغليف لسه ما بتكتبش Warehouse وقت التغليف (بند مفتوح)، فالحقل فاضي على كل أوردر في المتجر. بيبقى مفيد أول ما التغليف يبدأ يكتب.
v1.29.0 19-09-2026
  • تغيير🔴 الطابور بقى بأرضية تاريخ أوردر ثابتة: 01/04/2026. الأوردرات الأقدم من كده مش بتظهر في القايمة. ⚠️ والأرضية عرض بس — الأوردر الأقدم منها بيتسكن عادي والتسجيل بيتم، هو مش في القايمة وبس.
  • جديدالسطر تحت عنوان الطابور بقى بيقول الأرضية بالتاريخ — والتاريخ جاي من رد الـ Worker مش مكتوب في الصفحة. ⚠️ ومعاها الـ Worker لازم يبقى 1.1.0: على نسخة أقدم السطر بيختفي والقايمة بترجع لكل الأوردرات.
v1.26.1 15-09-2026
  • تغييرعمود «الطرد» بقى «نوع الأوردر» — نفس القيم والألوان والتصميم بتاعة عمود «نوع الأوردر» في قسم التغليف (نص عادي بدل بادج: عادي أزرق · استبدال بنفسجي)، بنفس المعنى اللي كان في «الطرد» (S1/S2).
  • تغييرعمودا «الزون» و«الإجمالي» اتشالوا من جدول الطابور.
  • تغييرعمود «غلّفه» بقى «قام بالتغليف».
  • جديدعمودا «تاريخ التغليف» و«الوقت منذ التغليف» — بنفس تصميم عمود «الوقت منذ الطباعة» في قسم التغليف بالحرف (بادج ملوّن بدرجات التأخير حسب فرق الأيام التقويمية).
v1.26.0 15-09-2026
  • جديد🔴 قسم تسليمات المكتب — أداة جديدة بالكامل. بتسجّل انتقال الطرد من المخزن للمكتب على custom.package_whereabouts_s1/_s2، والسكان فوري: كل باركود بيتسجّل لوحده من غير دفعة ومن غير زرار تنفيذ.
  • جديدطابور «جاهز للتسليم للمكتب» — في الصفحة وفي صف رابع على الشاشة الرئيسية. الشروط: الزون قاهرة+جيزة أو شو روم · الحالة Ready (S1 أو S2) · اتغلّف فعلاً · وعهدة الطرد لسه Warehouse أو فاضية · ومش ملغي.
  • تغيير🔴 بوسطة خارج النطاق بالكامل. بوسطة بتستلم من المخزن نفسه والطرد عمره ما بيعدّي على المكتب — من غير الشرط ده كان ٤٠ أوردر (تلت الـReady يوم القياس) هيظهروا هنا، ونفس الأوردر يتعدّ في صف «جاهز لتسليم بوسطة» وفي الصف ده.
  • تغيير🔴 صف الاستبدال/الاسترجاع بيتفحص بوقت تغليف S2 (s2_packing_date_time) مش S1. الفحص بـS1 كان بيعدّي على طرد ما اتغلّفش — مقيس حيًا: ٦ من ٦ صفوف S2 كانت هتعدّي والصح ٢.
  • جديدشاشة تفاصيل قبل التسجيل للحالات الشاذة (الشحنة الأصلية ودورة الاستبدال الاتنين Ready · حالة بره القايمة المعتمدة) — بتكمّل بإقرار مش بتتمنع.
  • جديدشاشة رفض بالسبب للأوردر الملغي («قطع الشحنة ورجّع المنتجات على الرف») · اللي مع بوسطة · اللي ما اتغلّفش · واللي مع المندوب خلاص.
  • جديدتاب سجل العمليات — فلاتر server-side (نوع العملية · النتيجة · الماكينة · الموظف · فترة · بحث) وصفحات وترتيب وتصدير XLSX.
ℹ️ عن الأداة — قسم تسليمات المكتب (مركز عمليات المخزن)
📋 وصف الأداة

الهدف: تسجيل انتقال الطرد من المخزن للمكتب — الموظف بيسكن باركود الأوردر، والأداة بتكتب custom.package_whereabouts_s1 (أو _s2 لدورة الاستبدال/الاسترجاع) بقيمة Office.

ليه الأداة موجودة: أوردرات قاهرة+جيزة والشو روم مابتتشحنش من المخزن على طول — بتعدّي على المكتب، اللي فيه منسّق الشحن والمناديب بيتقابلوا. ولما تسليم الدفعة مايكونش كامل، بيفضل طرد في المكتب ومفيش نظام بيسجّل إنه هناك. الحقل ده بيقفل الفجوة دي.

المستخدمون المستهدفون: فريق المخزن — لحظة تجهيز دفعة الانتقال للمكتب.

شروط الأهلية

  1. مش ملغي — الأوردر الملغي بيترفض برسالة «قطع الشحنة ورجّع المنتجات على الرف»، مش بيتخفي في صمت.
  2. الزون قاهرة+جيزة أو شو روم، والمندوب مش Bosta — 🔴 بوسطة خارج النطاق بالكامل: بتستلم من المخزن نفسه وتتبّع طردها بييجي من بوسطة، مش من الحقل ده.
  3. الحالة Ready — S1 = Ready فالعهدة بتتكتب على _s1، أو S1 = Delivered و S2 = Ready فبتتكتب على _s2.
  4. اتغلّف فعلاً — وقت تغليف مسجّل على ميتافيلد الماكينة بتاعتها: s1_packing_date_time لصف S1 و s2_packing_date_time لصف S2.
  5. عهدة الطرد لسه Warehouse أو فاضية — Office بترجّع «خلاص متعمل» وCourier بترفض.

كيف تعمل — Workflow

  1. الدخول بيحصل مرة واحدة في الشاشة الرئيسية للهب — الصفحة دي مالهاش شاشة دخول.
  2. الطابور بيتحمّل تلقائيًا ويقول إيه اللي المفروض ينتقل النهاردة.
  3. الموظف بيسكن باركود الأوردر — والتسجيل فوري: مفيش دفعة ومفيش زرار تنفيذ.
  4. النتيجة: نجاح = توست + الصف بيختفي من الطابور · خلاص متعمل / مرفوض = نافذة بالسبب · حالة شاذة = نافذة تفاصيل وإقرار قبل التسجيل.
  5. كل سكانة بتسيب صف واحد بالظبط في D1 — يا update يا rejected.

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

actionالوصف
get_ready_to_officeأوردرات Ready (الماكينتين) بحقولها الخام — قراءة بحتة
scanقراءة الأوردر حيًّا + الحكم + metafieldsSet + صف D1
get_logs / get_logs_count / get_logs_exportسجل العمليات — فلاتر server-side (employees · types · results · machines · search · dateFrom/dateTo) + صفحات + ترتيب، والتصدير بيرجّع cap/total/truncated
get_employeesتعبئة فلتر الموظف في تاب السجل
diagفحص ذاتي بدون كتابة — المتغيرات (اسم وطول فقط) · OAuth · صلاحية write_orders · تعريف الميتافيلد الحيّ · D1 · تكلفة الاستعلام · الـ Origin
get_configبيرجّع WORKER_VERSION — الواجهة بتقارنه بـ min

⚙️ نتيجة كل سكانة — أربع حالات

الحالةمعناها
✓ تمالعهدة اتكتبت واتأكدت من رد شوبيفاي (Office)
⚠ تم بتحذيراتكتبت، بس كان فيه حاجة محتاجة مراجعة والموظف أقرّ بيها
✗ فشلالنداء وصل لشوبيفاي واترفض — العهدة ما اتكتبتش
⏭ خلاص متعملالعهدة هي المستهدفة أصلاً (Office) — لا نجاح ولا فشل ولا رفض: مفيش حاجة كانت مطلوبة. عدّاد مستقل ولون محايد
⛔ مرفوضاتوقف قبل أي محاولة كتابة (ملغي · بوسطة · ما اتغلّفش · مع المندوب · حالة مش Ready) — الصف بيتسجّل بالسبب
🔧 تشريح الكود

FEATURE MAP

  • shared/shell.js — الهوية والهيدر والإعدادات والتوست وحارس النسخة (نسخة واحدة مضمّنة للهب كله)
  • shared/shell.js §OFFICE-GATE — 🔴 مصدر الأهلية الوحيد في الواجهة (wocOfficeGate · wocOfficeQueue). الصفحة دي والشاشة الرئيسية بينادوا نفس الدالة على نفس الرد
  • §SCAN — سكانر بمهلة (١٥٠ms للسكانة · ٤٠٠ms للكتابة)، نفس قيم Orders-Packing-Checker.html بالحرف
  • §TOOL-JS::scanOrder — نداء scan فوري لكل باركود، ومعالجة الخمس نتايج
  • §TOOL-JS::outcomeModal — نافذة واحدة بأربع نغمات (مرفوض · خلاص متعمل · إقرار · فشل)، ومدخل واحد showOutcome
  • §TOOL-JS::session — جدول سكانات الجلسة + العدّادات
  • §OFFICE-QUEUE-JS — الطابور بالتحديث التلقائي وحراسه التلاتة
  • §LOG-JS — القسم الموحّد: فلاتر multi-select + فترة سريعة + جدول + صفحات + تصدير
  • §LOG-JS::logParams — المصدر الوحيد لفلاتر التلات نداءات
  • §SHELL-JS::freezeOnScroll — قفل الهيدر وشريط التابات بعتبة مقيسة مش رقم ثابت
  • §SCAN::evaluate (Worker) — 🔴 الحارس الحقيقي: بيقرا الأوردر حيًّا وقت الضغطة
  • §SCAN::resolveOrder (Worker) — الرقم الطويل قراءة بمفتاح، والقصير بحث بمطابقة تامة على الاسم الراجع
  • checkWorkerVersion(PAGE_WORKERS) + wocRunDiag() (shell) — حارس النسخة وزرار 🩺 الفحص الذاتي

KEY VARIABLES

  • currentEmployee — { username, displayName } جاي من sessionStorage عبر requireSession()
  • TOOL_VERSION (shell) — نسخة الهب كله
  • WOC_WORKERS.office.min (shell) — أقل نسخة Worker مقبولة. مالهاش أي علاقة بـ TOOL_VERSION
  • LS_SECRET = 'warehouse_ops_worker_secret' (shell) — 🔴 الأداة دي عضو في مجموعة warehouse_ops من أول يوم: مفيش سر قديم خاص بيها لأنها مالهاش نسخة مستقلة
  • WOC_API_TIMEOUT_MS (shell) — مهلة ٩٠ ثانية على كل نداء
  • D1: tool = "metafields_change" (سجل مشترك) + extra.sourceTool = "package_transfer_to_office" · type = "update" أو "rejected". أحداث الدخول/الخروج تحت warehouse_ops_center (الهب)
  • 🔴 أي استعلام خط أساس على السجل ده لازم يفلتر على extra.sourceTool — من غيره بيعدّ صفوف تلات أدوات مع بعض
  • extra.result — success/warning/error/rejected/already
  • extra.machine — S1 أو S2: أنهي طرد اتسجّل، مش حالة الأوردر
  • doneThisSession — الأوردر اللي اتسجّل في الجلسة دي بيتشال من الطابور فورًا؛ الشاشة لازم تتغيّر بعد النجاح

الـ Workers اللي الصفحة دي بتناديهم

—

NOTES

  • 🔴 الأداة دي مالهاش نسخة مستقلة بقرار — ريبو Package-Transfer-To-Office فيه Worker وبس، والواجهة الوحيدة هي الصفحة دي.
  • 🔴 الفلترة في الواجهة بقرار — package_whereabouts_s1 مش قابل للفلترة في بحث شوبيفاي: الفلتر عليه بيتجاهَل في صمت ويرجّع المتجر كله (١٠٬٠٠٠ صف — مقيس 15-09-2026). فالـ Worker بيجيب Ready بس، والأهلية بتتحسب في §OFFICE-GATE بتاع الـ shell — مصدر واحد للصفحة وللشاشة الرئيسية.
  • 🔴 الطابور مش حارس. الحارس الحقيقي في الـ Worker، وبيقرا الأوردر حيًّا وقت السكان — الجدول لقطة عمرها لحد ١٥ دقيقة، وحارس في الواجهة بس مش حارس.
  • ⚠️ الحقل لسه فاضي على كل الأوردرات (15-09-2026) — أداة التغليف هي اللي المفروض تكتب Warehouse وقت التغليف ولسه ما اتعدّلتش. عشان كده العهدة الفاضية مقبولة في الطابور؛ لو اترفضت الطابور كان هيفتح فاضي.
  • ⚠️ أول أسبوع = تنضيف. الطابور هيفتح بأوردرات متغلّفة من أسابيع، وبعضها راح المكتب فعلاً من غير ما يتسجّل. ده متوقّع — القايمة بتنضّف نفسها مع أول دورة.
  • مفيش دفعة ومفيش زرار تنفيذ — السكان فوري. عشان كده مفيش CHUNK ولا MAX_BATCH في الأداة دي.
  • الأوردر اللي اتسجّل بيتشال من الطابور فورًا — الشاشة لازم تتغيّر بعد النجاح، وده الدرس اللي أنتج ٥٩ صف فشل كذّاب في أداة المرتجعات.
  • dateFrom/dateTo بيتقارنوا بالـ timestamp المخزّن (UTC) بينما العرض بتوقيت القاهرة — فرق الساعات ممكن يحط عملية بعد ٩ مساءً في يوم UTC اللي بعده. مقبول لفلتر بالأيام، ومكتوب هنا عشان مايتكتشفش كباج بعدين.
  • الـ Worker بيرجّع أسماء وأطوال المتغيرات في diag بس — مفيش قيمة أي سر بتتعرض.
—

📷 امسح باركود الأوردر

0 اتسجّل في الجلسة دي
🏢 جاهز للتسليم للمكتب
اتغلّف ولسه في المخزن · قاهرة+جيزة وشو روم
— أوردر
آخر تحديث لسه ما اتحدّثش
—
⏳ جاري الاستعلام عن الأوردرات برجاء الانتظار ...
▲
نوع العملية
تحديد الكل
النتيجة
تحديد الكل
الطرد
تحديد الكل
بحث برقم أوردر أو ملاحظة
🔍
فترة سريعة
اليوم✓
أمس✓
آخر 3 أيام✓
آخر 7 أيام✓
آخر 30 يوم✓
آخر 90 يوم✓
📅 شهر محدد‹
اختَر الشهر والسنة — يتطبّق الفلتر تلقائيًا بمجرد اختيار الاتنين. لسنة أقدم اختَر "سنة تانية..." واكتبها يدويًا.
الشهر الحالي✓
الشهر السابق✓
الربع الحالي✓
العام الحالي✓
العام السابق✓
من تاريخ
إلى تاريخ
الموظف
تحديد الكل
▲
النتائج: —
التاريخ الوقت الموظف رقم الأوردر الطرد من → إلى النتيجة السبب / ملاحظة
لا يوجد سجل بعد — اضغط تحديث