الهدف: كل المستندات (بيع/شراء/مخازن) تستخدم مكوّن جدول أصناف واحد (TransactionLineItemsComponent) بأعمدة config،
وبعدها المستخدم يقدر يسحب الأعمدة يرتّبها ويُظهر/يُخفي، ويتحفظ مرة واحدة على مستوى الشركة كلها (مش لكل مستخدم) عبر DocConfigService الموجود.
مكوّن واحد مصدر الحقيقة لكل جداول الأصناف. كل مستند يمرّر descriptor (أعمدته + أنواعها). إعدادات الأعمدة (الترتيب + الإظهار) تُحفظ
لكل مستند على حدة، لكل الشركة، في نفس آلية DocConfigService (إعداد core.document_settings في الباك-إند).
// نموذج الإعداد المحفوظ (لكل الشركة) — نمدّد الموجود core.document_settings = { "sales.invoice": { fields: { ... }, // (موجود) إظهار/إخفاء + إلزامية "lineColumns": [ // (جديد) ترتيب + إظهار الأعمدة {key:"product_id", visible:true, order:0}, {key:"quantity", visible:true, order:1}, {key:"unit_price", visible:true, order:2}, ... ] }, ... }
المكوّن المشترك يقرأ lineColumns من DocConfigService ويطبّق الترتيب/الإظهار على الأعمدة قبل الرندر. شاشة «إعدادات المستندات» الموجودة
(core/settings) تكسب تبويب/قسم «أعمدة الأصناف» بسحب + توجيلات، تحفظ مرة واحدة.
| المستند | الحالة | أعمدة مميّزة تحتاج دعم |
|---|---|---|
| أمر بيع | ✅ موحّد (المرجع) | منتج، مخزن، كمية، سعر، خصم، ضريبة، إجمالي |
| فاتورة بيع | التالي | + مخزن (مفلتر بالفرع)، ضريبة مشمولة، (مُسلَّم/متبقّي للعرض) |
| عرض سعر بيع | للتوحيد | ≈ أمر البيع |
| مرتجع بيع | للتوحيد | + ربط بسطر الفاتورة، تكلفة |
| أمر/فاتورة/طلب شراء | للتوحيد | منتج، مخزن، كمية، تكلفة، ضريبة، خصم |
| مرتجع شراء | للتوحيد | + ربط بفاتورة الشراء |
| إذن صرف/استلام/تسوية/تحويل مخزون | للتوحيد | منتج، كمية (+ المنصرف)، باتش/سيريال، تكلفة |
| جرد / رصيد افتتاحي | للتوحيد | منتج، كمية، تكلفة |
| التصنيع (BOM/أوامر) | مرحلة لاحقة | تركيب مختلف (مكوّنات/توجيه) — يُقيَّم منفصل |
app-product-search) مشترك بالفعل في 19 شاشة — التوحيد هنا عن الجدول كامل (الأعمدة وتركيبها)، مش البحث.TransactionLineItemsComponent + أنواع خلاياه (TxCellType): هل تغطّي كل ما تحتاجه المستندات (مخزن، باتش/سيريال، ضريبة مشمولة، عمود «المنصرف» للإذن، أعمدة عرض-فقط)؟ نضيف الأنواع الناقصة. نضمن إن المكوّن يقبل قائمة أعمدة مرتّبة/مفلترة من الخارج (تمهيد للحفظ). مخرج: مكوّن مشترك «كامل القدرات» جاهز يستوعب كل الشاشات.
lineDescriptor يطابق أعمدته، ونستبدل الجدول اليدوي بـ <app-transaction-line-items [descriptor]>، ونوصّل الـ FormArray والـ callbacks، ونتأكّد بالبناء + مراجعة بصرية. الترتيب: فاتورة بيع (الأهم) → عرض سعر → مرتجع بيع → شراء (أمر/فاتورة/طلب/مرتجع) → مخازن (صرف/استلام/تسوية/تحويل/جرد). كل شاشة = خطوة مستقلة قابلة للمراجعة والرجوع.
DragDrop) + منتقي أعمدة (زرّ ⚙ بتوجيلات إظهار). لأنه مكوّن واحد، الميزة تشتغل في كل المستندات الموحّدة مرة واحدة. (عرض الأعمدة/resize: مرحلة لاحقة اختيارية.)
DocConfigService ليخزّن lineColumns (ترتيب + إظهار) لكل مستند ضمن core.document_settings (لكل الشركة). المكوّن المشترك يقرأها ويطبّقها عند الرندر. شاشة
core/settings (إعدادات المستندات) تكسب قسم «ترتيب أعمدة الأصناف» لكل مستند — سحب + توجيلات، يحفظ مرة واحدة للشركة كلها. (نقطة الباك-إند الوحيدة: نفس مفتاح الإعداد الموجود — مجرد توسيع الـ JSON، بلا migration.)
/app + بوش على main زي المعتاد (تطوير متوازي — ندمج main قبل البوش).هنبدأ بـ: المرحلة 1 (تجهيز المكوّن المشترك — audit القدرات وإضافة الناقص)، وبعدها فورًا توحيد فاتورة البيع كأول شاشة (الأهم والأقرب لأمر البيع). بعد ما تستقر، نكمّل باقي المستندات تباعًا، ثم التحكّم بالسحب، ثم الحفظ على مستوى الشركة.