Publicidad

martes, 27 de marzo de 2018

Reportes Word en Odoo


GeneraciĆ³n de reportes en formato Doc/Docx integrado a Odoo




Mas de uno de nosotros hemos tenido la curiosidad o necesidad de Generar reportes en formato Doc(x),  esto es posible gracias a Python y a la gran cantidad de librerias que se crean y existen, en este Post les enseƱare un par de librerias que nos ayudan a generar este tipo de Reportes.


InstalaciĆ³n

Haremos uso de la libreria python-docx alojada en los Repositorios de Python, para ello podemos utilizar la aplicaciĆ³n Pip en Linux o easy_install.

sudo pip install python-docx
o
sudo easy_install install python-docx


ImplementaciĆ³n

El primer paso que debemos realizar como cualquier libreria es importarla en nuestra Clase Odoo.

from docx import Document

Creamos una instancia de la libreria y la asignamos a una variable para poder generar nuestro Documento.

report_word = Document()

A partir de nuestra variable instanciada, podemos ir aƱadiendo informaciĆ³n tomada de nuestro recordset o bien para ejemplos, podemos usar informaciĆ³n ficticia.

Algunos ejemplos de lo que podemos hacer con la  libreria son:

Agregar un Parrafo


report_word = Document()

paragraph  = report_word.add_paragraph('Hola, este es mi primer parrafo con la libreria docx')


Agregar una cabecera


report_word = Document()

report_word.add_heading('Dream big and start with something small')

Agregar una tabla

report_word = Document()

report_word.add_table(rows=2, cols=2)

Un ejemplo completo seria:

from docx import Document
from docx.shared import Inches

document = Document()

document.add_heading('Document Title', 0)

p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True

document.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='IntenseQuote')

document.add_paragraph(
    'first item in unordered list', style='ListBullet'
)
document.add_paragraph(
    'first item in ordered list', style='ListNumber'
)

document.add_picture('monty-truth.png', width=Inches(1.25))

table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for item in recordset:
    row_cells = table.add_row().cells
    row_cells[0].text = str(item.qty)
    row_cells[1].text = str(item.id)
    row_cells[2].text = item.desc

document.add_page_break()

document.save('demo.docx')

Si quieren conocer mas acerca de la libreria:

https://python-docx.readthedocs.io/en/latest/

3 comentarios:

  1. Hola, por favor ayĆŗdame con esta pregunta: es posible agregar pie de pĆ”gina y encabezado con la librerĆ­a. AdemĆ”s, se puede agregar una imagen dentro de una tabla.
    Muchas gracias por tu ayuda.

    ResponderBorrar
    Respuestas
    1. Buenos dias Caro, claro que es posible aunque aƱadir la imagen requerirĆ” que la vuelques a un archivo temporal del sistema operativo para despuĆ©s recuperar la direcciĆ³n fisica de archivo y referenciarlo en el documento de word.

      Saludos

      Borrar