Presentar vista particular con método desde un .py en OpenERP (Odoo)

Otra manera de presentar una vista determinada en OpenERP, es crear un método action al vuelo para que devuelva la determinada vista que deseamos mostrar. Esto consiste en realizar un método en un archivo .py dentro de la clase de la tabla desde donde se desea mostrar la vista, es decir, si estamos en fabricación y su tabla es mrp.bom y su clase es class mrp_bom(osv.Model), dentro de esa clase se crea el método para el botón que accionará la vista.

Como ejemplo, se requiere visualizar los detalles de un producto que está en una tabla sale.order.line, hay un campo many2one con el id asociado a la tabla mrp.bom. Tenemos archivo .py parecido al siguiente:

# -*- coding: utf-8 -*-

from osv import osv, fields

class mrp_bom_custom(osv.Model):

    _inherit = 'mrp.bom'
    _description = 'Datos adicionales para del producto en fabricacion'
    _columns = {
        'detalles_id': fields.many2one('sale.order.line', 'Detalles')
    }
    
    # Metodo para mostrar detalles
    def ver_detalles(self, cr, uid, ids, context):
        detalles_id = self.browse(cr, uid, ids[0], context)['detalles_id']
        view_ref = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'nom_app', 'view_detalles')
        view_id = view_ref and view_ref[1] or False
        return {
            'type': 'ir.actions.act_window',
            'name': 'Ver detalles',
            'res_model': 'sale.order.line',
            'res_id': detalles_id.id,
            'view_type': 'form',
            'view_mode': 'form',
            'view_id': view_id,
            'target': 'current'
        }

En el método simplemente se toman las variables que están en pantalla, la variable view_ref captura el id numérico de la vista personalizada, pese a que en la base de datos no se guarda el nombre literal que vemos en el archivo xml, luego el retorno del resultado será la estructura básica de una acción con su respectiva vista e id del producto que deseamos sacar los detalles que se refleja en la variable detalles_id.

Luego el archivo xml debería quedar algo parecido a lo siguiente:

    <!-- Vista personalizada -->
    <record id="view_detalles" model="ir.ui.view">
        <field name="name">view.detalles</field>
        <field name="model">sale.order.line</field>
        <field name="priority" eval="500"/>
        <field name="arch" type="xml">
            ...
            CONTENIDO DE LA VISTA
            ...
        </field>
    </record>

    <!-- Record donde se inserta el botón que accionará la vista personalizada -->
    <record id="mrp_bom_form_view_inherit_1" model="ir.ui.view">
        <field name="name">bom.from.view.inherit.1</field>
        <field name="model">mrp.bom</field>
        <field name="inherit_id" ref="mrp.mrp_bom_form_view"/>
        <field name="arch" type="xml">
            <data>
                ...
                <button name="ver_detalles" string="Detalles del producto" type="object"/>
                ...
            </data>
        </field>
    </record>

Simplemente se envía la petición a través del botón y el método de dicho botón, devuelve una acción con la vista.

Advertisements

About felixurbina

Humano con todos los defectos y virtudes que vienen de fábrica.
This entry was posted in Odoo, OpenERP. Bookmark the permalink.

2 Responses to Presentar vista particular con método desde un .py en OpenERP (Odoo)

  1. maelcoc says:

    Hola, quisiera saber si me puede ayudar con un problema que tengo.
    En el modulo de facturación de proveedores estoy usando el campo comment para ingresar información detallada del pago a realizar, necesito llamar esa información cuando uso la opción de pagar y que la guarde en pago a proveedores en el campo narration.
    Agradezco tus comentarios

    • felixurbina says:

      Hola. Envíame detalladamente cómo se llaman los campos y las tablas que quieres afectar. No entendí mucho lo que expresas. Entiendo que quieres guardar un dato de un campo de una tabla en otro campo de otra tabla.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s