Herencia en vista, a una referencia xpath

529 views
Skip to first unread message

Iniciado

unread,
Jan 25, 2018, 5:32:20 AM1/25/18
to Usuarios Odoo / OpenERP en España
[V10] Hola, estoy intentando ocultar una columna de order_line. product_id y product_tmpl_id

Tengo instalado sale_variant_configurator que crea la columna product_tmpl_id en el tree, este es el código del módulo:

<record model="ir.ui.view" id="view_order_form">
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form" />
<field name="priority" eval="20" />
<field name="arch" type="xml">
        ...
<xpath expr="//field[@name='order_line']/tree//field[@name='product_id']"
position="before">
<field name="product_tmpl_id" />
</xpath>
        ...

Estoy intentando, en mi módulo, modificar la vista para que sean invisibles los dos campos, he conseguido ocultar la de la vista padre, product_id

<record id="custom_sale_order_form" model="ir.ui.view">
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="priority" eval="10" />
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='product_id']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
</field>
</record>

pero con product_tmpl_id, no lo consigo, no sé como ponerlo para modificarlo.

Lo primero, es que no estoy seguro si tengo que modificarlo de la vista padre (sale.view_order_form, estoy casi seguro que no), o modificar la vista del módulo sale_variant_configurator (sale_variant_configurator.view_order_form, creo que esto es lo correcto)

Lo he intentado así, pero nada:

<record id="custom2_sale_order_form" model="ir.ui.view">
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale_variant_configurator.view_order_form"/>
<field name="priority" eval="10" />
<field name="arch" type="xml">
<xpath expr="//field[@name='product_tmpl_id']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
</field>
</record>

A ver si alguien me puede decir donde estoy metiendo la pata.

Muchas gracias de antemano.




Aitor Bouzas Naveira

unread,
Jan 25, 2018, 6:58:34 AM1/25/18
to Usuarios Odoo / OpenERP en España
Hola,

Efectivamente lo correcto es heredar la vista del sale_variant_configurator y editarla. Eso lo tienes bien.
Revisa si en las dependencias de tu módulo se encuentra sale_variant_configurator. No se me ocurre qué otra cosa puede estar fallando.

Iniciado

unread,
Jan 25, 2018, 7:18:28 AM1/25/18
to Usuarios Odoo / OpenERP en España
Pues efectivamente, era eso, no lo tenía en dependencias, no creía que fallara al no estar puesto ahí, y tener el módulo instalado.

Tengo ahora otro problema, en el módulo sale_variant_configurator, hay dos sitios que tiene product_tmpl_id, y con la declaración anterior me coge el segundo y no el primero.

he probado con esto:

<xpath expr="//xpath/expr[@name='//field[@name='order_line']/tree//field[@name='product_id']']/field[@name='product_tmpl_id']"
        position="attributes">
<attribute name="invisible">1</attribute>
</xpath>

pero no vale, como lo hago si no tengo un identificador claro (te copio de nuevo el código original):

<xpath expr="//field[@name='order_line']/tree//field[@name='product_id']"
position="before">
<field name="product_tmpl_id" />
</xpath>

Muchas gracias.

Aitor Bouzas Naveira

unread,
Jan 25, 2018, 7:22:46 AM1/25/18
to Usuarios Odoo / OpenERP en España
¿Puedes copiar la vista entera que añade el módulo sale_variant_configurator?

Iniciado

unread,
Jan 25, 2018, 7:29:19 AM1/25/18
to Usuarios Odoo / OpenERP en España
Por supuesto, gracias:

<record model="ir.ui.view" id="view_order_form">
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form" />
<field name="priority" eval="20" />
<field name="arch" type="xml">
        <xpath expr="//field[@name='order_line']/tree" position="attributes">
<attribute name="editable"/>
</xpath>
        <xpath expr="//field[@name='order_line']/tree//field[@name='product_id']"
position="before">
<field name="product_tmpl_id" />
</xpath>
        <xpath expr="//field[@name='order_line']" position="attributes">
<attribute name="options">{'reload_on_button': true}</attribute>
</xpath>
<xpath expr="//field[@name='order_line']/form//field[@name='product_id']"
               position="before">
<field name="product_tmpl_id" />
            <field name="product_attribute_ids"
context="{'default_owner_model': 'sale.order.line', 'default_owner_id': id}"
attrs="{'invisible':[('product_attribute_ids','=',[])]}">
<!-- We are not using isolated view because onchange doesn't work in this case -->
<tree create="0" delete="0" editable="1">
<field name="owner_model" invisible="1"/>
<field name="owner_id" invisible="1"/>
<field name="attribute_id" />
<field name="possible_value_ids" widget="many2many_tags" invisible="1"/>
<field name="product_tmpl_id" invisible="1"/>
<field name="value_id"/>
<field name="price_extra"/>
</tree>
</field>
</xpath>
</field>
</record>

Aitor Bouzas Naveira

unread,
Jan 25, 2018, 7:36:28 AM1/25/18
to Usuarios Odoo / OpenERP en España

Iniciado

unread,
Jan 25, 2018, 8:39:33 AM1/25/18
to Usuarios Odoo / OpenERP en España
No hay manera, me coge el segundo siempre, he probado de todo...

Y sé que es el primero, porque he probado a borrarlo del modulo original y funciona...

Que fastidio... lo tengo ahí, y nada...

Iniciado

unread,
Jan 26, 2018, 5:14:28 PM1/26/18
to Usuarios Odoo / OpenERP en España
Lo conseguí, no lo entiendo cómo lo hace pero el código resultante es así:

<record id="custom2_sale_order_form" model="ir.ui.view">
    <field name="model">sale.order</field>
    <field name="inherit_id" ref="sale_variant_configurator.view_order_form"/>
    <field name="arch" type="xml">
        <xpath expr="//field[@name='order_line']/tree//field[@name='product_tmpl_id']" position="attributes">
            <attribute name="invisible">1</attribute>
</xpath>
</field>
</record>

se supone que esta linea

<xpath expr="//field[@name='order_line']/tree//field[@name='product_tmpl_id']"

llama a sustituir esta linea:

<record model="ir.ui.view" id="view_order_form">
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form" />
<field name="priority" eval="20" />
<field name="arch" type="xml">
<xpath expr="//field[@name='order_line']/tree" position="attributes">
<attribute name="editable"/>
</xpath>
<xpath expr="//field[@name='order_line']/tree//field[@name='product_id']"
position="before">
<field name="product_tmpl_id" />
</xpath>
<xpath expr="//field[@name='order_line']" position="attributes">
<attribute name="options">{'reload_on_button': true}</attribute>
</xpath>

Yo creía que tendría que ser:

<xpath expr="//field[@name='product_tmpl_id']"

como mucho

<xpath expr="//xpath/field[@name='product_tmpl_id']"

No comprendo muy bien como es que sustituye en el resultado final.

Bueno, a ver si hay alguien que me lo explique... un saludo.
Reply all
Reply to author
Forward
0 new messages