Importando productos y variantes con xmlrpc

7 de noviembre de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Importar productos en Odoo es bastante sencillo, ahora importar productos con variantes es un acto heroico. Es imposible si uno no cuenta con las herramientas adecuadas. En este caso vamos a explicar como con xmlrpc creamos un producto llamado Remera con dos atributos: talle (con los tamaños large y small) y color (con los valores azul y blanco). Empecemos. 

Primero importamos las librerías y establecemos la conección con la base de datos cordoba-v1 y el usuario/password admin/admin

#!/usr/bin/python3

# import xmlrpc and openpyxl modules
from xmlrpc import client
import openpyxl
from datetime import datetime, date

url = 'http://localhost:8069'
common = client.ServerProxy('{}/xmlrpc/2/common'.format(url))
res = common.version()

dbname = 'cordoba-v1'
user = 'admin'
pwd = 'admin'
uid = common.authenticate(dbname, user, pwd, {})

# prints Odoo version and UID to make sure we are connected
print(res)
print(uid)

models = client.ServerProxy('{}/xmlrpc/2/object'.format(url))

Las primeras quince o veinte líneas las encontramos en todos los scripts de xmlrpc con los que trabajamos. El paso siguiente es crear los dos atributos que necesitamos: Talle y Color. Para ello debemos crear un registro en el modelo product.attribute

vals_attr_1 = {
'name': 'Talle',
}
attr_1_id = models.execute_kw(dbname,uid,pwd,'product.attribute','create',[vals_attr_1])
vals_attr_2 = {
'name': 'Color',
}
attr_2_id = models.execute_kw(dbname,uid,pwd,'product.attribute','create',[vals_attr_2])

Ahora vamos a crear los dos valores para el atributo Talle: Small y Large. Para ello creamos un registro en el modelo product.attribute.value

vals_attr_val_1 = {
'attribute_id': attr_1_id,
'name': 'Large'
}
attr_val_1_id = models.execute_kw(dbname,uid,pwd,'product.attribute.value','create',[vals_attr_val_1])
print(attr_val_1_id)

vals_attr_val_2 = {
'attribute_id': attr_1_id,
'name': 'Small'
}
attr_val_2_id = models.execute_kw(dbname,uid,pwd,'product.attribute.value','create',[vals_attr_val_2])
print(attr_val_2_id)

Como pueden ver, en los valores siempre tenemos que indicar cual es el ID del atributo con el que estamos trabajando.


Bien, el paso siguiente es crear el product. template. Un producto llamado remera del tipo stockeable y disponible para la venta (tranquilamente se lo puede usar en e-commerce).

vals_tmpl = {
'name': 'Remera',
'sale_ok': True,
'type': 'product',
}

product_tmpl_id = models.execute_kw(dbname,uid,pwd,'product.template','create',[vals_tmpl])
print(product_tmpl_id)

Y una vez creado el producto, procedemos a crear sus variantes. Para ello tenemos que crear los registros correspondientes en el modelo product.template.attribute.line. Por ejemplo para crear las variantes de los talles para el product template ya creado:

vals_attribute_line = {
'product_tmpl_id':product_tmpl_id,
'attribute_id':attr_1_id,
'value_ids':[(6,False,[attr_val_1_id,attr_val_2_id])]}

attribute_line = models.execute_kw(dbname, uid, pwd, 'product.template.attribute.line', 'create',[vals_attribute_line])

Los que nos da el siguiente resultado



Y si clickeamos en el producto podemos ver


En otros posts procederemos a actualizar los diferentes atributos de las variantes, como por ejemplo SKU y precio. 

Por que es importante saber esto? La administración de variantes es fundamental cuando uno trabaja con el e-commerce, y muchas veces nos vemos con la necesidad de crear productos con sus variantes en forma automática (como por ejemplo lo hace el módulo de MercadoLibre cuando sincroniza publicaciones y crea productos en base a la mismas). Es por eso que quisimos documentar como hacerlo aquí.

Gustavo Orrillo 7 de noviembre de 2023
Compartir
Archivar
Identificarse dejar un comentario