OpenERP 7: почему унаследованный вид не отображается?

Я пытаюсь переопределить Deliver кнопка в представлении "Заказы на доставку" (т.е. stock.picking.out) и тот, что в соответствующем мастере (т.е. stock.partial.picking).

Для этого я создал собственный модуль: compose_delivery_order.

deliver_button.xml

как суть

<data>
    <!-- override: stock/wizard/stock_partial_picking_view.xml -->
    <record id="stock_partial_picking_delivery_form" model="ir.ui.view">
        <field name="name">compose_delivery_order.stock_partial_picking_delivery_form</field>
        <field name="model">stock.partial.picking</field>
        <field name="priority" eval="15"/>
        <field name="inherit_id" ref="stock.stock_partial_picking_form"/>
        <field name="arch" type="xml">
            <xpath expr="/form/footer//button[@name='do_partial']" position="replace">
                <button
                        name="do_partial"
                        string="picking delivery"
                        type="object"
                        class="oe_highlight"
                />
            </xpath>
        </field>
    </record>

    <!-- override: sale_stock/sale_stock_view.xml -->
    <record id="view_delivery_form" model="ir.ui.view">
        <field name="name">stock.picking.out.form</field>
        <field name="model">stock.picking.out</field>
        <field name="inherit_id" ref="stock.view_picking_out_form"/>
        <field name="view_id" ref="stock_partial_picking_delivery_form"/>
        <field name="arch" type="xml">
            <xpath expr="/form/header//button[@name='action_process']" position="replace">
                <button name="action_process" states="assigned" string="[Deliver]" type="object"
                        class="oe_highlight"/>
            </xpath>
        </field>
    </record>
</data>

вопрос

Кнопка на stock.picking.out правильно заменить, но один в stock.partial.picking не является. Когда я проверяю информацию об управлении просмотром, я получаю:

обнаружен, но не используется

Таким образом, мой вид обнаружен, но не выбран как вид по умолчанию, как кажется.

Вопрос

Как я могу заставить использование моего взгляда?

2 ответа

Есть 2 способа ссылки на представления в Odoo:

  1. если представление запрашивается (модель, тип), представление с правильной моделью и типом, режим = основной и самый низкий приоритет сопоставляется
  2. когда представление запрашивается по id, если его режим не является первичным, сопоставляется его ближайший родительский элемент с основным режимом

Если ваш вид запрашивается по приоритету, попробуйте установить приоритет на более низкое значение.

После долгих поисков, попыток и тестирования я наконец обнаружил, что кнопка для данного представления была переопределена в коде Python.

Таким образом, чтобы изменить кнопку, мне пришлось переопределить метод в моем модуле

# override: stock/wizard/stock_partial_picking.py
class stock_partial_picking(osv.osv_memory):
    _inherit = 'stock.partial.picking'
    _rec_name = 'picking_id'
    _description = "Partial Picking Processing Wizard"

    def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
        # override of fields_view_get in order to change the label of the process button and the separator accordingly to the shipping type
        if context is None:
            context = {}
        res = super(stock_partial_picking, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type,
                                                                 context=context, toolbar=toolbar, submenu=submenu)
        type = context.get('default_type', False)
        if type:
            doc = etree.XML(res['arch'])
            for node in doc.xpath("//button[@name='do_partial']"):
                if type == 'in':
                    node.set('string', _('_Receive'))
                elif type == 'out':
                    node.set('string', _('[_Deliver]'))
            for node in doc.xpath("//separator[@name='product_separator']"):
                if type == 'in':
                    node.set('string', _('Receive Products'))
                elif type == 'out':
                    node.set('string', _('Deliver Products'))
            res['arch'] = etree.tostring(doc)
        return res
Другие вопросы по тегам