Publicidad

jueves, 9 de enero de 2014

Manejo de Campos many2many en Odoo (OPENERP)

Manejo de Campos many2many 



    En OPENERP es muy común que encontrásemos en el código de algunos módulos la utilización de campos relacionales may2many, los cuales contienen la siguiente sintaxis:

(0, 0, { fields }) Crear nuevos registros con la lista de campos.
(1, ID, { fields }) Modificar la lista de campos.
(2, ID) Borrar un id de la relación many2many.
(3, ID) Quitar (desvincular) un id de la relación manay2many.
(4, ID) Vincular un id
(5, ID) Desvincular todas las veces que aparece un id
(6,?, IDS) Establecer una lista de enlaces

    Por ejemplo para enlazar los impuestos de un producto al crear una linea en pedidos de venta o en lineas de factura nuestros valores quedarían de la siguiente manera:

pedido_padre_id = 65
product_obj = self.pool.get('product.product')
product_id = product_obj.search(cr, uid, [('name','=','Soda 2.5 Litros')])
product_browse = product_obj.browse(cr, uid, product_id, context=None)[0]

 linea_venta = {
                'product_id'           :  product_browse.id,
                'product_uom_qty' :  1,
                'product_uom'     : product_browse.uom_id.id,
                'product_uos_qty' : 1,
                'price_unit'          : product_browse.list_price,
                'name'                 : product_browse.name,
                'type'                   : 'make_to_stock',
                'default_code'      : product_browse.default_code,
                'tax_id'                : [(6, 0, [x.id for x in line.product_id.taxes_id])],
                'order_id'             :  pedido_padre_id,
            })

 order_line_id = self.pool.get('sale.order.line').create(cr, uid, linea_venta, context=None)

   Que pasa en este ejemplo estoy creando una linea para el pedido de venta con el ID 65 en la cual estoy pasando la información del producto 'Soda de 2.5 Litros' hacia mi linea, el punto mas importante en este ejemplo ó la que estamos estudiando es  'tax_id' : [(6, 0, [x.id for x in line.product_id.taxes_id])], que estamos haciendo en esta parte del código, estamos enlazando los impuestos del producto anterior en mi linea de pedido, ésto nos evita que nosotros realicemos la creación de cada impuesto al momento de mandar cada linea a un pedido de venta.
    

7 comentarios:

  1. Excelente explicación.
    Si quieres acceder a los valores del campo many2one usas algo así:
    product_id.name y te regresa el nombre del producto asociado a product_id,
    ¿hay una forma similar de hacerlo para un campo many2many?,

    probé con algo así:

    motivos_ids.motivo_id.name, dónde motivos_ids es el campo many2many, pero me da error.

    Saludos!

    ResponderBorrar
    Respuestas
    1. Hola Diego, me podrias explicar en si que es lo que necesitas?

      Saludos

      Borrar
  2. no tendran videos bien explicaditos . gracias

    ResponderBorrar
  3. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
    Respuestas
    1. Hola yo de nuevo la respuesta a mi duda es la siguiente:
      'invoice_line_tax_ids':[(6,0,[10,8])]
      listo con eso lo agrega de manera automática
      espero y les sirva y recuerden amar es compartir

      Borrar
  4. Buenos días, como hago para crear un impuesto que en lugar de calcularse de la linea base, se calcule de otro campo,por ejemplo de la utilidad. Gracias

    ResponderBorrar