Creando un reporte de Excel con información de Odoo

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

Una de las tareas frecuentes del administrador de Odoo es armar reportes en Excel con la información de Odoo (reportes sobre facturas, stock, etc). Si bien Odoo tiene algunas herramientas que permiten generar dichos reportes, la verdad es que muchas veces se necesitan reportes ad-hoc para los usuarios. Reportes que se necesitan una sola vez.

Estos reportes no los genera Odoo por muchas razones; siendo la principal razón que la cantidad de reportes puede llegar a ser infinitas. Las otras dos razones es la falta de tiempo de los programadores que implementan Odoo en la empresa, y por último la estructura libre que permite generar los reportes de Excel.

Como puede uno siendo administrador generar reportes de Excel? Una opción crear un script es utilizando la librería de Python xlsxwriter. De esta manera nos conectaríamos a Odoo mediante xmlrpc y con la librería xlsxwriter crearíamos la planilla de cálculo. xlsxwriter es una librería muy poderosa en términos de procesamiento y formato de planillas. Y es muy facil de usar, por ejemplo para hacer un "Hola mundo" en Excel uno solo debe:


#!/usr/bin/python3
# importamos xlsxwriter
import xlsxwriter
# Creamos un workbook y agregamos una pagina al mismo
workbook = xlsxwriter.Workbook('/home/gorrillo/hola_mundo.xlsx')
worksheet = workbook.add_worksheet()
# Agregamos el contenido de la celda
worksheet.write('A1','Hola mundo')
workbook.close()

Esto crea una una planilla en el directorio /home/gorrillo. Dicha planilla puede ser abierta con Excel o LibreOffice. Como pueden ver es muy facil. Ahora, vamos a ver un ejemplo en el que consultamos Odoo mediante xmlrpc y creamos la planilla. 

Supongamos que queremos hacer un archivo Excel de los proveedores, y que queremos listar el código del proveedor, su nombre, dirección, ciudad, teléfono e e-mail. Para ello tenemos que hacer un script como el que se lista a continuación:


#!/usr/bin/python3
import sys
import xmlrpc.client as client
import ssl
import xlsxwriter
username = 'admin' #the user
pwd = 'admin-password' #the password
dbname = 'dbdemo' #the database
gcontext = ssl._create_unverified_context()
# Get the uid
sock_common = client.ServerProxy ('http://odoo16:6069/xmlrpc/common',context=gcontext)
uid = sock_common.login(dbname, username, pwd)
#replace localhost with the address of the server
sock = client.ServerProxy('http://odoo16:6069/xmlrpc/object',context=gcontext)
# Obtenemos los ids de los partners que son proveedores
partner_ids = sock.execute(dbname,uid,pwd,'res.partner','search',[('supplier_rank','>',0)])
# Creamos workbook y agregamos pagina
workbook = xlsxwriter.Workbook('/home/gorrillo/proveedores.xlsx')
worksheet = workbook.add_worksheet()
# Agregamos cabeceras de la tabla
worksheet.write('A1','Codigo')
worksheet.write('B1','Cliente')
worksheet.write('C1','Telefono')
worksheet.write('D1','e-mail')
worksheet.write('E1','Calle')
worksheet.write('F1','Ciudad')
# Procesamos los proveedores y seteamos la fila original en 2
row = 2
for partner_id in partner_ids:
# leemos el partner
partner_data = sock.execute(dbname,uid,pwd,'res.partner','read',partner_id)
partner_data = partner_data[0]
# ipmrimimos la linea con las tres columnas que necesitamos: codigo, nombre, e-mail
worksheet.write('A' + str(row), partner_data['ref'])
worksheet.write('B' + str(row), partner_data['name'])
worksheet.write('C' + str(row), partner_data['phone'])
worksheet.write('D' + str(row), partner_data['email'])
​ worksheet.write('E' + str(row), partner_data['address'])
​ worksheet.write('F' + str(row), partner_data['city'])
# aumentamos el nro de fila
row = row + 1
workbook.close()
Gustavo Orrillo 20 de junio de 2023
Compartir
Archivar
Identificarse dejar un comentario