تطوير أودو

كيفية عرض شريط التقدم في عرض كانبان أودو (أودو 16–19)

مرجع شامل للمطوّر لعنصر <progressbar> في كانبان أودو: خصائص field_value وcolors وsum_field وإعداد حقل الاختيار واستكشاف الأخطاء. موثق لأودو 18 و19.

iWesabe Editorial Team١ أغسطس ٢٠٢٠7 دقائق للقراءة

يدعم عرض كانبان في أودو عنصرًا مدمجًا `` يعرض شريطًا ملوّنًا في أعلى كل عمود كانبان، يُظهر توزيع السجلات عبر قيم حقل الاختيار. يمنح هذا المستخدمين ملخصًا للحالة بنظرة واحدة دون فتح السجلات الفردية — مثلًا إظهار عدد الصفقات في مسار المبيعات التي هي 'مكتملة' أو 'قيد التنفيذ' أو 'محجوبة'. يُعرَّف شريط التقدم مباشرةً في XML للعرض بثلاث خصائص: الحقل المراد تقسيمه وتعيين الألوان وحقل رقمي اختياري لإجماليات العمود.

عنصر <progressbar> — مرجع الخصائص

خصائص <progressbar> في كانبان أودو — أودو 16–19
الخاصيةمطلوبةالنوعالوصف
field_valueنعماسم الحقل (نص)حقل الاختيار أو many2one الذي تحدد قيمه شرائح الشريط. يجب أن يكون حقلًا على النموذج، معرَّفًا في قائمة <fields> داخل عرض الكانبان.
colorsنعمكائن JSON حرفييُعيّن كل قيمة حقل لاسم لون Bootstrap. الألوان الصحيحة: muted وsuccess وwarning وdanger. القيم غير المدرجة في colors تعتمد على muted افتراضيًا.
sum_fieldلااسم الحقل (نص)حقل رقمي اختياري (Integer أو Float أو Monetary). عند تعيينه، يعرض أودو مجموع قيم هذا الحقل للسجلات في كل شريحة لونية، يُعرض بجانب الشريط.

قيم الألوان الصالحة

قيم ألوان progressbar ومعناها البصري
قيمة اللونالمظهر البصريحالة الاستخدام النموذجية
successأخضرمكتمل، فائز، معتمد، منجز
warningبرتقالي / كهرمانيقيد التنفيذ، معلق، يحتاج انتباهًا
dangerأحمرمحجوب، متأخر، مرفوض، فاشل
mutedرمادي (افتراضي)مسودة، جديد، غير مصنّف، لم يبدأ

مثال أساسي — عرض كانبان مع شريط التقدم

xml
<record id="view_my_model_kanban" model="ir.ui.view">
    <field name="name">my.model.kanban</field>
    <field name="model">my.model</field>
    <field name="arch" type="xml">
        <kanban>

            <!-- Step 1: Declare the fields the kanban needs -->
            <field name="name"/>
            <field name="state"/>
            <field name="priority"/>

            <!-- Step 2: Add the progressbar element.
                 Place it as a direct child of <kanban>, before <templates>. -->
            <progressbar
                field_value="state"
                colors='{"draft": "muted", "in_progress": "warning", "done": "success", "blocked": "danger"}'
            />

            <!-- Step 3: Kanban card template -->
            <templates>
                <t t-name="kanban-box">
                    <div class="oe_kanban_global_click">
                        <div class="oe_kanban_details">
                            <strong class="o_kanban_record_title">
                                <field name="name"/>
                            </strong>
                        </div>
                    </div>
                </t>
            </templates>

        </kanban>
    </field>
</record>

إضافة sum_field — عرض الإجماليات النقدية لكل شريحة لونية

تضيف خاصية `sum_field` إجماليات رقمية إلى عرض شريط التقدم. تُستخدم هذا بشكل شائع في مسارات CRM والمبيعات لإظهار الإيرادات المتوقعة لكل شريحة مرحلة (مثلًا القيمة الإجمالية للصفقات الفائزة مقابل قيد التنفيذ). يجب أن يكون الحقل المشار إليه بـ `sum_field` حقلًا رقميًا (Integer أو Float أو Monetary) ويجب تعريفه في قائمة `` لعرض الكانبان.

xml
<kanban>
    <field name="name"/>
    <field name="state"/>
    <field name="expected_revenue"/>  <!-- must be declared here -->

    <progressbar
        field_value="state"
        colors='{"new": "muted", "in_progress": "warning", "won": "success", "lost": "danger"}'
        sum_field="expected_revenue"
    />

    <templates>
        <t t-name="kanban-box">
            <div class="oe_kanban_global_click">
                <strong><field name="name"/></strong>
                <div class="oe_kanban_bottom_right">
                    <field name="expected_revenue" widget="monetary"/>
                </div>
            </div>
        </t>
    </templates>
</kanban>

نموذج Python — إعداد حقل الحالة

يجب أن يشير `field_value` في شريط التقدم إلى حقل موجود على النموذج. حقل `fields.Selection` هو الاختيار الأكثر شيوعًا — تُعيَّن قيمه مباشرةً إلى مفاتيح قاموس `colors`. لا يجب أن يُسمّى الحقل `state`؛ أي حقل اختيار يصلح.

python
from odoo import models, fields

class MyModel(models.Model):
    _name = 'my.model'
    _description = 'My Model'

    name = fields.Char(string='Name', required=True)

    # Selection field — values must match the keys in the progressbar colors attribute
    state = fields.Selection(
        selection=[
            ('draft', 'Draft'),
            ('in_progress', 'In Progress'),
            ('done', 'Done'),
            ('blocked', 'Blocked'),
        ],
        string='Status',
        default='draft',
    )

    # Optional: numeric field for sum_field
    expected_revenue = fields.Monetary(
        string='Expected Revenue',
        currency_field='currency_id',
    )
    currency_id = fields.Many2one(
        'res.currency',
        default=lambda self: self.env.company.currency_id,
    )

يظهر شريط التقدم فقط عندما تكون السجلات مجمّعة

يُعرض عنصر `` فقط عندما يكون لعرض الكانبان `group_by` نشط. بدون تجميع، تظهر السجلات في قائمة غير مجمّعة واحدة وليس لشريط التقدم عمود ليرتبط به. عادةً ما تُجمَّع عروض الكانبان حسب Many2one `stage_id` أو حسب حقل اختيار. يمكنك تعيين تجميع افتراضي في إجراء العرض باستخدام `context`:

xml
<!-- ir.actions.act_window — set default grouping so the progressbar appears -->
<record id="action_my_model_kanban" model="ir.actions.act_window">
    <field name="name">My Model</field>
    <field name="res_model">my.model</field>
    <field name="view_mode">kanban,list,form</field>
    <!-- group_by stage_id so the Kanban columns + progressbar are visible by default -->
    <field name="context">{"default_stage_id": 1, "search_default_group_by_stage_id": 1}</field>
</record>

<!-- Or group by the state selection field directly: -->
<field name="context">{"search_default_group_by_state": 1}</field>

إضافة شريط تقدم إلى عرض كانبان موجود عبر الوراثة

xml
<!-- Inherit an existing kanban view and add a progressbar -->
<record id="view_sale_order_kanban_inherit_progressbar" model="ir.ui.view">
    <field name="name">sale.order.kanban.progressbar</field>
    <field name="model">sale.order</field>
    <field name="inherit_id" ref="sale.view_sale_order_kanban"/>
    <field name="arch" type="xml">

        <!-- Insert the progressbar before the <templates> element -->
        <xpath expr="//kanban/templates" position="before">
            <progressbar
                field_value="state"
                colors='{"draft": "muted", "sent": "warning", "sale": "success", "cancel": "danger"}'
                sum_field="amount_total"
            />
        </xpath>

        <!-- Ensure the fields needed by progressbar are declared -->
        <xpath expr="//kanban/field[@name='name']" position="after">
            <field name="amount_total"/>
        </xpath>

    </field>
</record>

استكشاف الأخطاء

مشكلات شريط التقدم في كانبان الشائعة وحلولها
الأعراضالسبب المحتملالحل
شريط التقدم لا يظهر على الإطلاقعرض الكانبان غير مجمّع. يُعرض شريط التقدم فقط عندما تكون السجلات مجمّعة في أعمدة.أضف group_by افتراضيًا إلى سياق الإجراء: {"search_default_group_by_stage_id": 1}. بدون التجميع، لا توجد أعمدة ولا شريط للعرض.
جميع الشرائح تظهر رمادية (muted) — بدون لونقيم الحقل في قاعدة البيانات لا تطابق المفاتيح في خاصية colorsتأكد أن مفاتيح colors تطابق تمامًا القيم المخزنة في الاختيار (وليس تسميات العرض). مثلًا {'in_progress': 'warning'} وليس {'In Progress': 'warning'}.
sum_field يُظهر 0 أو لا يظهرsum_field غير معرَّف كـ <field> داخل عنصر <kanban>أضف <field name="your_numeric_field"/> داخل عنصر <kanban> (قبل <templates>). يجب إدراج الحقل هناك حتى لو كان مستخدمًا بالفعل في قالب البطاقة.
خطأ في التحقق من XML أثناء تثبيت/ترقية الوحدةJSON غير صالح في خاصية colors — استخدام علامات اقتباس مفردة بدلًا من المزدوجة داخل قيمة JSONيجب أن تكون قيمة خاصية colors JSON صالحة. استخدم علامات اقتباس مزدوجة للمفاتيح والقيم: colors='{"draft": "muted"}'. محددات الخاصية الخارجية تستخدم علامات اقتباس مفردة.
شرائح شريط التقدم لا تطابق أعداد السجلات الفعليةالحقل المشار إليه بـ field_value غير معرَّف داخل <kanban> وأودو لا يجلب قيمهأضف <field name="state"/> (أو أي حقل يشير إليه field_value) داخل عنصر <kanban>. بدون هذا التعريف، لا يحمّل ORM قيمة الحقل لسجلات الكانبان.

ملاحظات الإصدار

تغييرات شريط التقدم في الكانبان حسب إصدار أودو
إصدار أودوالتغييرات الرئيسية المؤثرة على شريط تقدم الكانبان
أودو 15لا توجد تغييرات كاسرة على <progressbar>. خصائص field_value وcolors وsum_field لم تتغير. السلوك مطابق لأودو 13/14.
أودو 16تمت إعادة هيكلة جزئية لـ JavaScript في عرض الكانبان (ترحيل مكوّن OWL). عنصر <progressbar> XML وخصائصه لم تتغير — تعريفات XML الموجودة تستمر في العمل دون تعديل.
أودو 17ترحيل OWL الكامل لعرض الكانبان. عنصر <progressbar> وخصائصه تبقى كما هي — لا تغييرات مطلوبة على بنية XML. انتقل منطق عرض شريط التقدم من الودجات القديمة إلى مكوّنات OWL داخليًا، لكن واجهة XML الخاصة بالمطوّر لم تتغير.
أودو 18 و19لا توجد تغييرات كاسرة. field_value وcolors وsum_field في <progressbar> تتصرف كما هو موثق. تحسينات أداء عرض الكانبان في أودو 18 تُقلل وقت التحميل لمجموعات البيانات الكبيرة المجمّعة.

تحتاج عروض كانبان مخصصة أو لوحات مسار للمبيعات لنظام أودو؟

يبني مطورونا المعتمدون في أودو عروض كانبان مخصصة وتهيئات مسار CRM ولوحات سير العمل البصرية المصمَّمة خصيصًا لعمليات الشركات السعودية — بما في ذلك تخطيطات العربية من اليمين لليسار وأسماء المراحل ثنائية اللغة.

واتساب

الأسئلة الشائعة

كيف أضيف شريط تقدم إلى عرض كانبان أودو؟
أضف عنصر `` كابن مباشر لعنصر ``، قبل ``. عيّن ثلاث خصائص: `field_value` (حقل الاختيار المراد تقسيمه حسبه) و`colors` (كائن JSON يُعيّن قيم الاختيار لأسماء الألوان) وبشكل اختياري `sum_field` (حقل رقمي لإجمالي كل شريحة لونية). أيضًا عرّف الحقل `field_value` في قائمة `` للكانبان حتى يحمّله ORM. مثال: ``.
لماذا لا يظهر شريط تقدم الكانبان؟
السبب الأكثر شيوعًا هو أن عرض الكانبان غير مجمّع. يُعرض عنصر `` فقط عندما تكون السجلات مجمّعة في أعمدة (عادةً حسب stage_id أو حقل اختيار). إذا رأيت السجلات في قائمة مسطحة واحدة، فالشريط ليس لديه عمود للعرض عليه. الحل: أضف `group_by` افتراضيًا إلى سياق إجراء النافذة — مثلًا `{"search_default_group_by_stage_id": 1}`. تأكد أيضًا أن الحقل المشار إليه بـ `field_value` معرَّف كـ `` داخل ``.
ما هي قيم الألوان الصالحة لشريط تقدم كانبان أودو؟
هناك أربع قيم ألوان صالحة: `success` (أخضر — للحالات المكتملة أو الفائزة) و`warning` (برتقالي/كهرماني — للحالات قيد التنفيذ أو المعلقة) و`danger` (أحمر — للحالات المحجوبة أو المتأخرة أو الفاشلة) و`muted` (رمادي — الافتراضي للحالات كمسودة أو جديد أو غير مصنّف). أي قيمة اختيار غير مدرجة في خاصية `colors` تعتمد على `muted` افتراضيًا. تُعيَّن هذه مباشرةً لفئات الألوان السياقية في Bootstrap المستخدمة في واجهة أودو.
هل يمكنني عرض إجمالي نقدي في شريط تقدم الكانبان؟
نعم — استخدم خاصية `sum_field`. عيّنها على اسم حقل رقمي (Integer أو Float أو Monetary) وسيعرض أودو مجموع قيم ذلك الحقل للسجلات في كل شريحة لونية، معروضًا بجانب شريط التقدم. يجب تعريف الحقل في قائمة `` للكانبان. مثال: ``. تأكد أن `amount_total` معرَّف أيضًا كـ `` داخل ``.
هل يعمل شريط التقدم مع حقل Many2one بدلًا من حقل Selection؟
تقنيًا نعم — يمكن لـ `field_value` الإشارة إلى حقل Many2one وسيحاول أودو التقسيم حسب معرّفات السجلات المرتبطة. ومع ذلك، تُعيَّن خاصية `colors` لقيم مخزنة محددة (معرّفات صحيحة لـ Many2one)، مما يجعل تعيين الألوان الثابت هشًّا لأن المعرّفات تختلف بين قواعد البيانات. النمط الموصى به هو استخدام حقل `fields.Selection` لـ `field_value` حتى تكون تعيينات الألوان قيمًا نصية ثابتة مستقلة عن حالة قاعدة البيانات.
كيف أضيف شريط تقدم إلى عرض كانبان أودو قياسي موجود؟
استخدم وراثة العرض. أنشئ سجل `ir.ui.view` جديدًا مع `inherit_id` يشير إلى العرض الأصلي واستخدم XPath لإدراج عنصر `` قبل ``: ``. أضف أيضًا XPath لتعريف أي حقول يحتاجها شريط التقدم إذا لم تكن موجودة بالفعل في العرض. هذا النهج آمن للترقية — يُضاف شريط التقدم المخصص فوق العرض القياسي دون المساس بالوحدة الأساسية.
iWesabe Editorial Team

iWesabe Editorial Team

رؤى عملية حول Odoo ERP وامتثال ZATCA والعمليات الرقمية للشركات السعودية — بقلم فرق الاستشارات والمالية والهندسة في iWesabe.

عن iWesabe

مقالات ذات صلة