Как отобразить все этапы (даже пустые) поля выбора в канбан-представлении в Odoo 10?

Я пытаюсь отобразить этапы для модели, определенной как поле выбора в представлении Канбан в Odoo 10. Но когда я добавляю поле stage в представление Kanban, этапы с записями в нем отображаются в представлении Kanban, но не все этапы.

У меня есть поле выбора с 3 этапами и канбан-представление. Я использовал приведенный ниже код в моем xml, чтобы отобразить им этапы в представлении Канбан.

Это мое поле выбора:

stage = fields.Selection([
        ('not reviewed', 'Not Reviewed'), 
        ('review in progress', 'Review In Progress'), 
        ('review complete', 'Review Complete')
    ], default='not reviewed')

Это xml-часть, в которой я использую поле Selection в представлении Kanban для отображения в представлении:

<record id="sources_daily_review_kanban_view" model="ir.ui.view">
        <field name="name">Daily Sources Review Kanban</field>
        <field name="model">daily.source.review</field>
        <field name="arch" type="xml">
            <kanban default_group_by="stage" class="o_kanban_small_column o_opportunity_kanban">
                <field name="stage" options='{"group_by_tooltip": {"requirments": "Description", "legend_priority": "Use of stars"}}'/>
                <field name="color"/>
                <field name="name"/>
                <field name="description"/>
                <field name="responsible"/>
                <field name="active"/>
                <field name="source_date"/>
                <templates>
                    <t t-name="kanban-box">
                        <div t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click">
                           <div class="o_dropdown_kanban dropdown">
                                <a class="dropdown-toggle btn" data-toggle="dropdown" href="#">
                                    <span class="fa fa-bars fa-log"/>
                                </a>
                                <ul class="dropdown-menu" role="menu" area-labelledby="dLabel">
                                    <t t-if="widget.editable"><li><a type="edit">Edit</a></li></t> 
                                    <t t-if="widget.deletable"><li><a type="delete">Delete</a></li></t>
                                    <li t-if="! record.active.value"><a name="action_set_active" type="object">Unarchive</a></li>
                                    <li t-if="record.active.value"><a name="action_set_unactive"  type="object">Archive</a></li>
                                    <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
                                </ul>
                           </div>
                           <div class="oe_kanban_content">
                                <div>
                                    <field name="tag_ids"/>
                                </div>
                                <div>
                                    <strong><field name="name" domain="[('including_in_daily_review', '=', True)]"/></strong>
                                </div>
                                <div>
                                    <field name="description"/>
                                </div>
                                <div>
                                    <field name="responsible"/>
                                </div>
                                <div class="oe_kanban_footer">

                                </div>
                           </div>
                        </div>
                    </t>
                </templates>
            </kanban>
        </field>
</record>

Этот код отображает только те этапы, о которых есть запись на этом этапе, в то время как я хочу, чтобы отображались все этапы, даже пустые. Я много искал и нашел решение, связанное с этой проблемой, https://stackoverflow.com/a/40761734/2498426. но для моего случая это было непонятно (поле выбора).


person Ibrahim Rahimi    schedule 31.07.2019    source источник
comment
Думаю, будет лучше, если в канбан выложишь картинку того, что тебе нужно в итоге   -  person Charif DZ    schedule 04.08.2019


Ответы (3)


он работает для меня в файле Python:

state = fields.Selection([('en_cours_confirmation', 'En Cours de Confirmation'), ('confirmer', 'Confirmé'), ('annuler', 'Annulé')]
                         , default='en_cours_confirmation', string="Status",  group_expand='_expand_states', index=True)

def _expand_states(self, states, domain, order):
    return [key for key, val in type(self).state.selection]

в XML-файле:

...<kanban colors="blue:state=='en_cours_confirmation';red:state=='annuler';grey:state=='confirmer'" default_group_by="state">...
person SAAD BELEFQIH    schedule 09.03.2020

Используйте параметр расширения группы. Хороший пример можно найти в модуле hr_contract.

stage = fields.Selection([
    ('not reviewed', 'Not Reviewed'), 
    ('review in progress', 'Review In Progress'), 
    ('review complete', 'Review Complete')
], default='not reviewed',group_expand='_expand_states')


def _expand_states(self, states, domain, order):
    return [key for key, val in type(self).state.selection]
person Explorer    schedule 31.07.2019
comment
Я применил ваш код, но он не запускается. Есть ошибки, точен ли ваш код? Я также проверял модель hr.contract и базовый код, но ничего не нашел. - person Ibrahim Rahimi; 31.07.2019

Я попытался создать статические этапы, применив решение Explorer в Odoo10, а также нашел эту функцию в Odoo12, но она не работает в Odoo10. Итак, я использовал описанную ниже технику, чтобы иметь статические и фиксированные этапы даже с пустыми столбцами в представлении Канбан:

Сначала я определил новую модель, как показано ниже:

class CheckListStage(models.Model):

    _name = "checklist.stage"
    _rec_name = "name"
    _sequence = "sequence, name, id"

    name = fields.Text(string='Name', required=True, translate=True)
    sequence = fields.Integer('Sequence', default=1, help='Used to order stages. Lower is better.')

Затем я добавил в эту модель 3 записи в виде файла данных в xml:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <record id="stage_not_reviewed" model="checklist.stage">
            <field name="name">Not Review</field>
            <field name="sequence">1</field>
        </record>

        <record id="stage_review_in_progress" model="checklist.stage">
            <field name="name">Review In Progress</field>
            <field name="sequence">2</field>
        </record>
        
        <record id="stage_review_complete" model="checklist.stage">
            <field name="name">Review Complete</field>
            <field name="sequence">3</field>
        </record>
    </data>
</odoo>

Чтобы иметь записи модели checklist.stage в качестве этапов в моем канбан-представлении модели, я использовал поле Many2one, как показано ниже, с group_expand, чтобы все этапы отображались в канбан-представлении:

stage = fields.Many2one('checklist.stage', group_expand='_expand_stages', default=lambda self: self._default_stage())

Для group_expand я использовал следующий код как метод _expand_satages:

def _expand_stages(self, states, domain, order):
        stage_ids = self.env['checklist.stage'].search([])
        return stage_ids

Наконец, в представлении Канбан я просто добавил default_group_by="stage" и group_create="false" к элементу Канбан. Хотя, это немного длинновато, но в моем случае сработало.

person Ibrahim Rahimi    schedule 06.08.2019