الخطة والتصوّر قبل تطبيق الكود — الهدف: نقل بضاعة الأمانة بين المخازن يحفظ ملكية العميل وهوية اللوت، ويحافظ على سجل الأمانة مطابقًا للواقع.
التحويل المخزني مصمَّم لمخزون الشركة فقط. لما يتنقل مخزون أمانة (بضاعة عميل)، الكمية الفعلية بتتحرّك لكن هوية اللوت وملكية العميل بتضيع، وسجل الأمانة بيختلّ.
مثال حقيقي على prod (TRF-000001، نقل 2 قطعة): لوت الأمانة في المصدر ما اتخصمش (فضل 200 والفعلي 198)، ماتعملش لوت في الوجهة، حركة النقل batch=NULL، وسجل الأمانة فضل 200 من غير سطر للمخزن الجديد ← قطعتان من بضاعة العميل بقوا بلا هوية ملكية.
إجراء الشحن ShipTransfer بيخصّص لوطات بملكية الشركة فقط:
'owner_partner_id' => InventoryLotBalance::OWNER_COMPANY
فلوطات الأمانة (owner ≠ 0) مبتتخصمش أبدًا، ومبيتكتبش أي تخصيص، وبالتالي إجراء الاستلام ReceiveTransfer — اللي أصلاً بيحفظ المالك عند إعادة بناء لوت الوجهة — مبيلاقيش حاجة يعيد بناءها.
owner · batch · expiry · on_book. أول ما الشحن يخصّص لوطات الأمانة، الاستلام هيعيد بناءها في الوجهة بملكية العميل تلقائيًا.| المؤشّر | قبل التعديل (الحالي) | بعد التعديل (المتوقّع) |
|---|---|---|
| لوت الأمانة في المصدر (wh2) | 200 (لم يُخصَم) | 198 (خُصم 2) |
| لوت أمانة للعميل في الوجهة (wh1) | لا يوجد | سطر جديد بـ2، نفس المالك/الدفعة/الصلاحية |
| تخصيص لوطات للتحويل | 0 | مسجّل بمالك = العميل |
| batch على حركة النقل | NULL | CONS-1-… (محفوظ) |
| سجل الأمانة | wh2=200 فقط (خطأ) | wh2 ينقص 2 · wh1 يزيد 2 |
| ملكية العميل | ضاعت | محفوظة عبر المخازن |
بضاعة العميل تتحرّك بصمت كأنها مخزون شركة — السجل يبالغ في رصيد العميل، وقيمة مخزون الشركة ممكن تتضخّم ببضاعة مش ملكها.
بضاعة العميل تفضل «بضاعته» في أي مخزن تروح له — اللوت والملكية والدفعة والصلاحية محفوظين، والجرد والإرجاع والتقييم يطلعوا صح.
تصوّر قبل التنفيذ · التطوير جارٍ على dev · لم تُعدَّل أي بيانات إنتاج.