Generando un XLSX con el inventario en Odoo (usando la librería xlsxwriter)

Gustavo Orrillo
- 27/09/2021 - 1 min. de lectura

El otro día me plantearon como generar una planilla de Excel con la información del inventario. Si bien Odoo tiene un reporte, el mismo es interactivo y a veces presenta problemas de performance al momento de exportarse. Es más, en este caso se necesitaba ejecutar el reporte de manera desatendida (durante las noches para enviarlo via e-mail). Es por eso que opté por recomendar un script que con XMLRPC y la librería xlsxwriter (una librería que te permite crear archivos compatibles con Excel)

Debajo tenemos un ejemplo de lo que hicimos
 #!/usr/bin/python3
import sys
import xmlrpc.client as client
import ssl
import xlsxwriter
username = 'admin' #the user
pwd = 'admin' #the user
dbname = 'grower'    #the database
gcontext = ssl._create_unverified_context()
# Get the uid
sock_common = client.ServerProxy ('http://odoo14:6069/xmlrpc/common',context=gcontext)
uid = sock_common.login(dbname, username, pwd)
#replace localhost with the address of the server
sock = client.ServerProxy('http://odoo14:6069/xmlrpc/object',context=gcontext)
# Obtenemos los ids de los quants con inventario
quant_ids = sock.execute(dbname,uid,pwd,'stock.quant','search',[('location_id.usage','=','internal')])
# Creamos workbook y agregamos pagina
workbook = xlsxwriter.Workbook('/home/gustavo/work/rescue_it/rescue_it.xlsx')
worksheet = workbook.add_worksheet()
# Agregamos cabeceras de la tabla
worksheet.write('A1','Ubicacion')
worksheet.write('B1','Producto')
worksheet.write('C1','Cantidad')
# Procesamos los quants y seteamos la fila original en 2
row = 2
for quant_id in quant_ids:
        # leemos el quant
        quant_data = sock.execute(dbname,uid,pwd,'stock.quant','read',quant_id)
        quant_data = quant_data[0]
        # ipmrimimos la linea con las tres columnas que necesitamos: ubicacion, producto, cantidad
        worksheet.write('A' + str(row), quant_data['location_id'][1])
        worksheet.write('B' + str(row), quant_data['product_id'][1])
        worksheet.write('C' + str(row), quant_data['quantity'])
        # aumentamos el nro de fila
        row = row + 1
workbook.close()

Como podran ver, con pocas lineas en un script desde la línea de comando se puede generar un archivo Excel con la información de Odoo. Si bien no es una herramienta que pueda usar un usuario final (para algo se creó el módulo report_xlsx), tranquilamente la puede usar un administrador de sistemas (siempre y cuando tenga nociones de programación Python, lo cual va a ser conveniente para las instalaciones de un tamaño mediano a grande). Otro beneficio es que uno evita los problemas de codificación (detalle no menor). Por otra parte uno de los grandes beneficios de trabajar con Excel es que uno puede evitar las limitaciones que imponen los generadores de reportes como Q-Web. La flexbilidad que uno cuenta para armar reportes no tiene comparación. Y por último, aprender a usar xlsxwriter brinda conocimientos que no solo sirven para usar xmlrpc, sino ademas el módulo report_xlsx.

Los usuarios agradecidos, ya que prefieren toda la vida un archivo Excel a un PDF. 

Acerca de:

Gustavo Orrillo

Apasionado de la programación, implementa Odoo para distintos tipos de negocios desde el año 2010. En Moldeo Interactive es Socio fundador y Programador; además de escribir en el Blog sobre distintos temas relacionados a los desarrollos que realiza.