مقدمة
في Odoo، تحدد النماذج كيفية هيكلة البيانات وتخزينها في قاعدة البيانات. كل قطعة من بيانات الأعمال التي تعمل معها، من طلبات المبيعات إلى الفواتير إلى جهات الاتصال، تعيش في نموذج.
فهم نماذج Odoo أمر ضروري لكل من المطورين والاستشاريين الوظيفيين. النماذج هي أساس بنية بيانات Odoo. إنها تحدد الحقول والعلاقات والمنطق التجاري.
تركز هذه المقالة على أحد أهم النماذج في وحدة المبيعات: sale.order.line. سواء كنت تبني وحدات مخصصة، أو تدمج أنظمة خارجية، أو تقوم بتكوين سير عمل التسعير، ستعمل مع هذا النموذج.
ما هو نموذج sale.order.line
يمثل نموذج sale.order.line عناصر الخط الفردية في عرض الأسعار أو طلب البيع في Odoo. كل عنصر يتوافق عادةً مع منتج واحد، مع معلومات عن الكمية والسعر والضرائب.
يتم استخدام هذا النموذج في Odoo بواسطة وحدة المبيعات (sale). يرث من analytic.mixin لتتبع تكاليف المشروع ودمج سجلات الوقت. عند إضافة منتج إلى عرض الأسعار، فإنك تقوم بإنشاء سجل sale.order.line.
يتم تعريف النموذج في وحدة البيع. تقوم وحدات أخرى بتوسيعه من خلال وراثة نموذج Odoo. على سبيل المثال، تضيف sale_stock حقولًا متعلقة بالتسليم. تضيف sale_margin حسابات الهامش. تضيف كل وحدة ما تحتاجه دون تكرار الهيكل الأساسي.
الحقول الرئيسية في النموذج
إليك أهم حقول Odoo في نموذج sale.order.line. سيساعدك فهم هذه الحقول على العمل بفعالية مع عروض الأسعار وطلبات البيع.
1. order_id
النوع: Many2one (sale.order). مطلوب. إشارة إلى طلب البيع الأب. يربط هذا الحقل كل سطر بأصله. يتم حذف الأسطر عند حذف الطلب (cascade).
2. sequence
النوع: Integer. الافتراضي 10. يتحكم في ترتيب عرض الأسطر في الطلب. يستخدم لفرز الأقسام والملاحظات وخطوط المنتجات.
3. company_id
النوع: Many2one (res.company). مرتبط من order_id. يستخدم لقواعد الشركات المتعددة والتحكم في الوصول.
4. currency_id
النوع: Many2one (res.currency). مرتبط من order_id. يستخدم لجميع الحقول النقدية في السطر. يضمن العملة الصحيحة للتسعير.
5. order_partner_id
النوع: Many2one (res.partner). مرتبط من order_id. العميل. يُستخدم لقائمة الأسعار وقواعد الضرائب.
6. salesman_id
النوع: Many2one (res.users). مرتبط من order_id. مندوب المبيعات. يُستخدم للعمولة والتقارير.
7. state
النوع: اختيار. مرتبط من order_id. حالة الطلب (مسودة، مرسل، بيع، مكتمل، ملغى). يحدد أي الحقول قابلة للتعديل.
8. display_type
النوع: اختيار. القيم: line_section أو line_note. عند تعيينه، تكون السطر عنوان قسم أو ملاحظة، وليس سطر منتج. حقول المنتج فارغة.
9. is_downpayment
النوع: بولياني. يشير إلى ما إذا كانت السطر دفعة مقدمة. يتم فوترتها بشكل منفصل.
10. is_expense
النوع: بولياني. صحيح عندما يأتي السطر من مصروف أو فاتورة بائع. يُستخدم لتتبع تكاليف المشروع.
11. product_id
النوع: Many2one (product.product). المنتج الذي يتم بيعه. المجال يقتصر على المنتجات القابلة للبيع. مطلوب لخطوط المنتجات.
12. product_template_id
النوع: Many2one (product.template). يتم حسابه من product_id. يُستخدم بواسطة مُهيئ المنتج لاختيار المتغيرات.
13. name
النوع: نص. وصف السطر. يتم حسابه من المنتج والسمات المخصصة. يتضمن تفاصيل المتغيرات عند الاقتضاء.
14. product_uom_qty
النوع: Float. مطلوب. الكمية المطلوبة. الافتراضي 1.0. يمكن أن يتم تحديده بواسطة التعبئة.
15. product_uom
النوع: Many2one (uom.uom). وحدة القياس. الافتراضي من المنتج. يُستخدم للكمية والتسعير.
16. tax_id
النوع: Many2many (account.tax). الضرائب المطبقة على السطر. يتم حسابها من المنتج والموقف المالي.
17. price_unit
النوع: عائم. مطلوب. سعر الوحدة لكل منتج_uom. يتم حسابه من قائمة الأسعار أو المنتج. يمكن تغييره يدويًا.
18. discount
النوع: عائم. نسبة الخصم. تُطبق على price_unit قبل الضريبة.
19. price_subtotal
النوع: نقدي. المجموع الفرعي قبل الضريبة. يتم حسابه من الكمية وسعر الوحدة والخصم.
20. price_tax
النوع: عائم. إجمالي مبلغ الضريبة. يتم حسابه من price_subtotal و tax_id.
21. price_total
النوع: نقدي. الإجمالي بما في ذلك الضريبة. المبلغ الرئيسي للفوترة.
22. product_packaging_id
النوع: Many2one (product.packaging). التعبئة الاختيارية (مثل: صندوق من 12). عند تعيينه، يمكن أن تكون الكمية مدفوعة بالتعبئة.
23. customer_lead
النوع: عائم. زمن الانتظار بالأيام. الأيام بين تأكيد الطلب والشحن. يُستخدم لحساب تاريخ التسليم.
24. qty_delivered
النوع: عائم. الكمية المسلمة. يتم تحديثها بواسطة تحركات المخزون أو يدويًا. تُستخدم للفوترة الجزئية.
25. qty_invoiced
النوع: عائم. الكمية التي تم فوترتها بالفعل. يتم حسابها من خطوط الفاتورة.
26. qty_to_invoice
النوع: عائم. الكمية المتبقية للفوترة. يتم حسابها من qty_delivered و qty_invoiced.
27. invoice_status
النوع: اختيار. القيم: زيادة المبيعات، مفوتر، ليتم فوترته، لا. تشير إلى حالة الفوترة للسطر.
28. invoice_lines
النوع: Many2many (account.move.line). روابط لخطوط الفاتورة التي تم إنشاؤها من هذا السطر البيعي. تُستخدم للتتبع.
29. تاريخ الإنشاء
النوع: تاريخ ووقت. عندما تم إنشاء السجل. يتم إدارته تلقائيًا بواسطة Odoo.
30. تاريخ التعديل
النوع: تاريخ ووقت. عندما تم تعديل السجل آخر مرة. يستخدم للتدقيق.
كيف يتم استخدام هذا النموذج في سير العمل التجاري
1. الاقتباس وطلب البيع
عندما يقوم مندوب المبيعات بإنشاء اقتباس، يضيف المنتجات. كل منتج يصبح sale.order.line. تُظهر الخطوط الكمية والسعر والخصم والإجمالي. يتم تأكيد الطلب عندما يقبله العميل.
2. قائمة الأسعار والخصومات
تُطبق قوائم الأسعار لكل خط. يتم حساب حقول price_unit و discount من قواعد قائمة الأسعار. يتم التعامل مع خصومات الحجم أو التسعير الخاص بالعميل هنا.
3. التسليم والفوترة
عندما يتم تسليم المخزون، يتم تحديث qty_delivered. يمكن إجراء الفوترة لكل تسليم أو دفعة واحدة. يُرشد حقل invoice_status المستخدم بشأن ما يتبقى للفوترة.
4. المشروع والخدمات
بالنسبة لمنتجات الخدمة، ترتبط الخطوط بمهام المشروع وسجلات الوقت. يتيح وراثة analytic.mixin تتبع التكاليف لكل مشروع.
5. التجارة الإلكترونية والبوابة
يضيف زوار الموقع المنتجات إلى السلة. تصبح كل سطر في السلة sale.order.line عند إنشاء الطلب. يستخدم مُهيئ المنتج product_template_id والسمات المخصصة.
كيف يوسع المطورون هذا النموذج
يمتد المطورون sale.order.line باستخدام عدة أنماط. وراثة نموذج Odoo هي الآلية الرئيسية.
وراثة النموذج
استخدم _inherit = 'sale.order.line' لتمديد النموذج. أضف حقول جديدة، أو تجاوز طرق، أو أضف قيود. يحتفظ النموذج الموروث في Odoo بتغييراتك في وحدة منفصلة لتسهيل التحديثات.
إضافة حقول
حدد حقول Odoo جديدة في النموذج الموروث. استخدم نوع الحقل الصحيح: Char، Many2one، Boolean، Integer، Text، Selection. ضع في اعتبارك الحقول المعتمدة على الشركة للشركات المتعددة.
امتدادات بايثون
تجاوز _compute_price_unit، _compute_price_subtotal، أو أنشئ/اكتب لإضافة منطق. استخدم super() لاستدعاء الأصل. كن حذرًا مع الحقول المحسوبة واعتمادياتها.
استوديو Odoo
يتيح لك استوديو Odoo إضافة حقول بدون كود. جيد للتخصيصات السريعة. بالنسبة للمنطق المعقد أو التحديثات، فإن الوحدات المخصصة أكثر قابلية للصيانة.
أفضل الممارسات
- استخدم display_type للأقسام والملاحظات بدلاً من خطوط المنتجات الوهمية. هذا يحافظ على نظافة التقارير.
- عند بناء تكاملات API، قم بإنشاء خطوط عبر order_id. استخدم حقل order_line_ids في sale.order مع تنسيق الأمر الصحيح.
- احترم قيود SQL. يجب أن تحتوي خط الإنتاج على product_id و product_uom. يجب أن تحتوي القسم أو الملاحظة على display_type.
- للسعر المخصص، استخدم قواعد قائمة الأسعار عند الإمكان. تجاوز طرق الحساب فقط عندما تحتاج إلى منطق غير مدعوم من قبل قوائم الأسعار.
- بالنسبة للحقول المخصصة، استخدم بادئة
x_أو بادئة وحدة لتجنب التعارضات مع إصدارات Odoo المستقبلية.
الأخطاء الشائعة
- إنشاء خطوط بدون order_id. الحقل مطلوب. قم دائمًا بإنشاء خطوط في سياق طلب.
- خلط بين product_id و product_template_id. بالنسبة لخطوط المنتجات، قم بتعيين product_id. بالنسبة لتدفقات التكوين، استخدم product_template_id لاختيار متغير.
- تعديل price_unit أو الخصم بعد الفوترة. بمجرد أن تكون qty_invoiced أكبر من صفر، يمكن أن تتسبب تغييرات السعر في عدم التناسق.
- تجاوز الطرق الأساسية دون استدعاء super(). يمكن أن يؤدي ذلك إلى كسر وحدات أخرى أو ترقيات مستقبلية.
- نسيان تعيين display_type لخطوط القسم أو الملاحظة. بدون ذلك، سيتم اعتبار الخط كخط منتج وسيفشل في التحقق.
الخاتمة
نموذج sale.order.line هو محور مبيعات Odoo. يخزن كل خط منتج على الاقتباسات والطلبات. سيساعدك فهم حقوله وكيفية توسيع الوحدات في تكوين Odoo وتخصيصه ودمجه بشكل فعال.
سواء كنت مستشارًا وظيفيًا يرسم العمليات التجارية أو مطورًا يبني وحدات مخصصة، فإن فهم sale.order.line بشكل جيد سيوفر الوقت ويمنع الأخطاء.
هل تحتاج مساعدة في تنفيذ Odoo الخاص بك؟
تساعد Dasolo الشركات في تنفيذ وتخصيص وتحسين Odoo. نحن متخصصون في تكاملات API وتطوير Odoo. يتمتع فريقنا بخبرة عميقة في بنية بيانات Odoo ونماذج مثل sale.order.line.
إذا كنت بحاجة إلى مساعدة في تنفيذ Odoo الخاص بك، أو الوحدات المخصصة، أو التكاملات، فنحن هنا للمساعدة. احجز عرضًا توضيحيًا لمناقشة مشروعك.