Como hacer una planilla de Excel con los stocks de Odoo

21 de junio de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Años atras me preguntaron como hacer una planilla de Excel con los stocks de la empresa. Si bien Odoo tiene un reporte, la verdad que tiene la flexibilidad de un velero de gran calado navegando por el Río de la Plata. Es poco util, es interactivo, descargarlo en Excel no es práctico y a veces presenta problemas de performance al momento de exportarse. 

Es más, supongamos que necesitamos ejecutarlo de forma desatendida (porque necesitamos enviarlo via e-mail todas las noches). No se puede usar. Es por eso que hice un pequeño script de python que mediante xmlrpc y xlsxwriter, lista la información. 

 #!/usr/bin/python3
import sys
import xmlrpc.client as client
import ssl
import xlsxwriter
username = 'admin' #the user
pwd = 'admin-password' #the user
dbname = 'dbdemo' #the database
gcontext = ssl._create_unverified_context()
# Get the uid
sock_common = client.ServerProxy ('http://odoo16:8069/xmlrpc/common',context=gcontext)
uid = sock_common.login(dbname, username, pwd)
#replace localhost with the address of the server
sock = client.ServerProxy('http://odoo16:8069/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/stocks.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()

Que estamos haciendo en este script? Realizamos una consulta mediante xmlrpc, donde buscamos todos los quants (del modelo stock.quant, donde se almacenan los inventarios en Odoo, ya hablaremos de ello en otro post) que se encuentran presentes en las ubicaciones del tipo internal (que son aquellas ubicaciones donde se almacena el stock).

Como ven, con pocas lineas de un script que se envoca desde la línea de comandos se puede crea un archivo con la información de Odoo, en este caso los inventarios de la empresa. Si bien no es una herramienta que pueda usar un usuario final (para algo se creó el módulo report_xlsx), la puede utilizar un administrador de sistemas con nociones de programación Python. 

Otro beneficio es que uno evita tener que desarrollar módulos para reportes ad-hoc y no es un detalle menor. A medida que pasa el tiempo implementar funcionalidades en el ambiente de producción de Odoo es cada vez más caro. Por otro lado como herramienta de reportes Excel es la herramienta elegida por el usuario. Los ambientes analíticos utilizan Excel y uno no puede evitarlo. Tiene que aprender a integrarlo con Odoo. 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.

Gustavo Orrillo 21 de junio de 2023
Compartir
Archivar
Identificarse dejar un comentario