¿Cómo sustituir un informe existente por uno propio de manera correcta (a través de un módulo)?

105 views
Skip to first unread message

Juan Formoso Vasco

unread,
Jan 28, 2015, 11:30:21 AM1/28/15
to openerp-s...@googlegroups.com
Hola a todos:

He realizado unos cambios en un RML (account_print_invoice.rml). Si sustituyo el archivo original por el que acabo de hacer, puedo ver los cambios al imprimir el informe.

Sin embargo, me gustaría hacerlo de manera correcta, a través de un módulo personalizado.

He creado el módulo (customized_reports_01) para introducir mi informe y sustituir el antiguo. Aquí está la distribución de las carpetas:

i18n
report
|__ __init__.py
|__ account_print_invoice.py
|__ account_print_invoice.rml
__init__.py
__openerp__.py
account_report.xml


He copiado y pegado los archivos originales en mi módulo. Las líneas que he modificado respecto a ellos, están en negrita en los códigos que se muestran a continuación.

El contenido de account_report.xml es el siguiente:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
   
<data>
       
<report
           
auto="False"
           
id="account_invoices_custom_01"
           
model="account.invoice"
           
name="account.invoice"
           
rml="customized_reports_01/report/account_print_invoice.rml"
           
string="Invoices"
           
attachment="(object.state in ('open','paid')) and ('INV'+(object.number or '').replace('/','')+'.pdf')"
           
attachment_use="True"
           
usage="default"
           
/>
   
</data>
</openerp>

Y el de account_print_invoice.py es:

import time
from openerp.report import report_sxw

class account_invoice(report_sxw.rml_parse):

   
def __init__(self, cr, uid, name, context):
       
super(account_invoice, self).__init__(cr, uid, name, context=context)
       
self.localcontext.update({
           
'time': time,
       
})

report_sxw
.report_sxw(
   
'report.account.invoice',
   
'account.invoice',
   
'addons/customized_reports_01/report/account_print_invoice.rml',
    parser
=account_invoice
)

Al instalar el módulo, recibo el siguiente error:

AssertionError: The report "report.account.invoice" already exists!

Así que he probado a modificar la llamada a report_swx.report_sxw de la siguiente manera:

report_sxw.report_sxw(
   
'report.account.invoice2',
   
'account.invoice',
   
'addons/customized_reports_01/report/account_print_invoice.rml',
    parser
=account_invoice
)

De esta manera puedo instalar el módulo, pero al imprimir el informe, resulta que obtengo el antiguo, y no el nuevo que acabo de hacer.

¿Cuál es el problema? Un saludo y gracias por adelantado.

cubells

unread,
Jan 28, 2015, 1:02:19 PM1/28/15
to openerp-s...@googlegroups.com
El 28/01/15 a les 17:30, Juan Formoso Vasco ha escrit:
> Hola a todos:
>
> He realizado unos cambios en un RML (/*account_print_invoice.rml*/). Si
> sustituyo el archivo original por el que acabo de hacer, puedo ver los
> cambios al imprimir el informe.
>
> Sin embargo, me gustaría hacerlo de manera correcta, a través de un
> módulo personalizado.
>
> He creado el módulo (*customized_reports_01*) para introducir mi informe
> y sustituir el antiguo. Aquí está la distribución de las carpetas:
>
> /i18n/
> /report/
> /|__ __init__.py/
> /|__ account_print_invoice.py/
> /|__ account_print_invoice.rml/
> /__init__.py/
> /__openerp__.py/
> /account_report.xml/
>
>
>
> He copiado y pegado los archivos originales en mi módulo. Las líneas que
> he modificado respecto a ellos, están en negrita en los códigos que se
> muestran a continuación.
>
> El contenido de *account_report.xml* es el siguiente:
> /
> /
> |
> <?xml version="1.0"encoding="utf-8"?>
> <openerp>
> <data>
> <report
> auto="False"
> id="*account_invoices_custom_01*"
> model="account.invoice"
> name="account.invoice"
> rml="*customized_reports_01/report/account_print_invoice.rml*"


Un informe en openrp tiene un id, no?

Tú quieres cambiar el informe que hay y poner el tuyo, no?

Pues deberás de poner el id anterior igual que el que tiene el informe
de openerp, con la única diferencia del fichero rml.

Así, cuando cargue el xml, si todo está correcto en tu configuración,
cargará el xml del informe oficial de openerp y después cargará el tuyo,
y en el mismo id calvará el tuyo.

no?


--
Atentament, cubells.
--

Juan Formoso Vasco

unread,
Jan 29, 2015, 3:50:11 AM1/29/15
to openerp-s...@googlegroups.com
Hola Cubells, muchas gracias por tu respuesta.

He cambiado el ID y le he puesto el del informe original (id="account_invoices").

Pero sigue ocurriendo lo mismo. Se queja de que el informe ya existe si llamo a report_sxw con el parámetro report.account.invoice, y si cambio este último, me imprime el informe antiguo. ¿Qué error puedo tener?

Un saludo.

cubells

unread,
Jan 29, 2015, 4:18:17 AM1/29/15
to openerp-s...@googlegroups.com
El 29/01/15 a les 09:50, Juan Formoso Vasco ha escrit:
> Hola Cubells, muchas gracias por tu respuesta.
>
> He cambiado el ID y le he puesto el del informe original
> (id="*account_invoices*").
>
> Pero sigue ocurriendo lo mismo. Se queja de que el informe ya existe si
> llamo a /report_sxw/ con el parámetro /report.account.invoice/, y si
> cambio este último, me imprime el informe antiguo. ¿Qué error puedo tener?
>



Esto me funciona perfecto a mi without problems:


<report
auto="False"
id="account.account_invoices"
model="account.invoice"
name="account.invoice.custom"
rml="custom_reports/report/account_print_invoice.rml"
string="Invoices"
attachment="(object.state in ('open','paid')) and
('INV'+(object.number or '').replace('/','')+'.pdf')"
attachment_use="True"
usage="default"
/>


y la linea de la clase del informe debe ser algo así:


report_sxw.report_sxw(
'report.account.invoice.custom',
'account.invoice',
'addons/custom_reports/report/account_print_invoice.rml',
parser=account_invoice
)


--
Atentament, cubells.
--

Juan Formoso Vasco

unread,
Jan 29, 2015, 4:50:06 AM1/29/15
to openerp-s...@googlegroups.com
Vaya error, en el ID del informe estaba olvidando indicar el módulo donde se encuentra el informe original, al ver ahora tu código, me he dado cuenta.

Ahora ya funciona perfectamente.

¡Muchas gracias por tu ayuda, Cubells!

Un saludo.
Reply all
Reply to author
Forward
0 new messages