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:
- если представление запрашивается (модель, тип), представление с правильной моделью и типом, режим = основной и самый низкий приоритет сопоставляется
- когда представление запрашивается по 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