Como asignar campos many to many en OpenERP


Buenas…

Os incluyo estos ejemplos de Jordi que me han ayudado a encontrar cómo asociar a un Partner a una categoría por código. Es un pelín enrevesado y por eso os lo pongo. Estuve buscando por ahí y no encontré nada relacionado.

Puedes ver un ejemplo en base/res/partner/partner_demo.

xml, línea 80, cuando se crean datos de demo al partner Camptocamp se le asignan 2 categorías:

<field eval=”[(6, 0, [ref('res_partner_category_10' ), ref('res_partner_category_5')])]” name=”category_id”/>

Lo importante es asignar al campo

category_id

un valor que sea

[(6, 0, [lista de categorías del partner])]

Por ej al final del archivo sale/stock.py puedes ver como se crean facturas a partir de albaranes, verás cosas como:

self.pool.get(’sale.order. line’).write(cursor, user, [sale_line.id], {‘invoiced’:True, ‘invoice_lines’: [(6, 0, [invoice_line_id])], })

ya que una línea de pedido puede estar relacionada con una o varis lineas de factura (en este caso sólo una, la lista tiene un sólo elemento [invoice_line_id]).

Jordi

A continuación os posteo el ejemplo concreto en el que lo he utilizado, por si fuese de interés.
def customer_extra_info(self, cr, uid, website, partner_id, osc_customer_id):
esale_category_obj = self.pool.get(‘esale.oscom.partner.category’) –> Aquí un objeto que me relaciona un código de categoría en una base de datos externa con el código de categoría correspondiente en OpenERP.
server = xmlrpclib.ServerProxy(“%s/openerp-synchro.php” % website.url)–> Conexión a la base de datos externa mediante protocolo xmlrpc
esale_pcategory = server.get_customers_group_id(osc_customer_id) –> Llamada a la función externa que me devuelve el identificador de la categoría en dicha aplicación externa.
cat_oscom_id = esale_category_obj.search(cr, uid, [('web_id','=',website.id), ('esale_oscom_id', '=', esale_pcategory)]) –> Busca el identificador recogido de la función anterior en el pool de objetos que relaciona ambos Ids (Id categoría aplicación externa, Id categoria OpenERP).
if len(cat_oscom_id) > 0: Si encuentra algún registro
cat_oscom = esale_category_obj.browse(cr, uid, cat_oscom_id)[0] –> guarda registro encontrado

pcategory_id = cat_oscom.category_id.id –> Recojo Id categoría OpenERP

self.pool.get(‘res.partner’).write(cr, uid, [partner_id], {‘category_id’:[(6, 0, [pcategory_id])]}) –> Asocio categoría a Parner según ejemplo de Jordi…

return True

Esperando sea de vuestro interés!!!

,

  1. No hay Comentarios
(No será publicado)