Publicidad

lunes, 13 de enero de 2014

Reglas en Odoo (OpenERP) utilizando campos Many2Many y One2Many



Reglas con Campos Many2Many y One2Many


    Durante la creación de Reglas para Grupos en OpenERP en ocasiones tenemos que utilizar  campos many2many ó one2many para comparar que un valor se encuentre dentro de una lista de valores.

    Por ejemplo cuando trabajamos en un entorno Multicompañia en OpenERP en ocasiones tenemos errores durante el manejo de Modelos que tengan Acceso a campos que utilicen la campos con referencia a compañía, por ejemplo si queremos la comprobación de que un elemento se encuentra dentro de una lista ó que un campo compañia se encuentre dentro del campo company_ids que se encuentra en Usuarios y que contiene una lista de compañias a las cuales el usuario puede tener acceso, tendríamos que agregar en la creación de regla el dominio siguiente:

[('company_id','in',[x.id for x in user.company_ids])]

 - company_id: Es el campo que encuentra en el modelo OpenERP al cual quiero ligar con mi regla.

 - in: Es el la palabra reservada para comparar que un elemento se encuentra dentro de una lista.

 - [x.id for x in user.company_ids]: En esta linea  utilizamos un poco de código Python para crear una lista con los valores para la comparación de mi dominio, x.id es el valor obtenido de un ciclo for utilizando una variable x para la iterar dentro de el campo user.company_ids que contiene la relación many2many con el modelo de compañia. Al Final nos quedaría en ejecución algo como lo siguiente [('10','in',[1,5,15,10,25,35,2])], esto da como resultado True o False depensiendo si el valor 10 se encuentra dentro de los valores 1, 5, 15, 10, 25, 35, 2. A este proceso se le conoce en Python como Listas de Comprensión 


1 comentario:

  1. Buenos días German

    Siguiendo tu post...tenemos un problema. Estamos trabajando con OpenERP 7.0 en un entorno multi-compañía y tenemos un problema cuando un usuario que tiene acceso a varias compañías (C1, C2, C3). en el momento de realizar un pedido de ventas en la compañía C1, en el campo comercial (USER_ID) solamente tenemos acceso/visibilidad para los usuarios de la compañía C1.

    Tenemos usuarios creados del tipo:

    Usuario1 -> Compañía por defecto C1 -> Compañias permitidas (C1, C2, C3)
    Usuario2 -> Compañía por defecto C2 -> Compañías permitidas (C1,C2)
    Usuario3 -> Compañía por defecto C2 -> Compañías permitidas (C1,C2)
    Usuario4 -> Compañía por defecto C1 -> Compañias permitidas (C1, C2, C3)

    Cuando, por ejemplo, el Usuario4 hace un pedido para la compañía C1, al seleccionar el comercial, solo muestra el mismo y el Usuario1. Entendemos que el sistema debería mostrar los 4 usuarios, no?

    ¿Alguna sugerencia?, ¿Como podríamos ponerle en el campo user_id dentro de sale_order_view.xml un dominio para que muestre todos usuarios posibles?

    Muchas gracias

    Juan Sallent

    ResponderBorrar