Hi !
I've built a module which try to override the invoice report (pdf), to add some more fields to it.
However, sometimes, the file from the account module is used instead of my own file. That happens when I use the print button on the invoice (the red one when invoice is not printed yet). In this cases, the translation work properly, but this is not the file my module provides, so its wrong.
Now, when I use other print buttons, like the one in the "print" dropdown menu, or a custom print button, the pdf generated comes from my module, which is good, but not translated, which is bad, since I included the whole i18n folder in my custom module.
Now, I will show my code.
module/report/account_print_invoice.xml :
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="account.account_invoices" model="ir.actions.report.xml">
<field name="auto" eval="False"/>
<field name="model">account.invoice</field>
<field name="report_name">custom.account.invoice</field>
<field name="name">Invoices</field>
<field name="report_rml">account_payment_method/report/account_print_invoice.rml</field>
<field name="attachment">"(object.state in ('open','paid')) and ('INV'+(object.number or '').replace('/','')+'.pdf')"</field>
<field name="attachment_use" eval="False"/>
<field name="usage">default</field>
</record>
<record id="invoice_form_test_custom" model="ir.ui.view">
<field name="name">account.invoice.form.test.custom</field>
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.invoice_form"/>
<field name="arch" type="xml">
<header>
<button name="custom_invoice_print" string="Print Invoice Custom" type="object"/>
</header>
</field>
</record>
</data>
</openerp>
module/account_invoice.py :
class account_invoice(osv.osv):
_inherit = "account.invoice"
def _voucher_ids(self, cr, uid, ids, name, args, context=None):
result = {}
for record in self.browse(cr, uid, ids, context=context):
result[record.id] = []
for line in record.move_lines:
result[record.id].extend(self.pool['account.voucher'].search(
cr, uid, [('move_id', '=', line.move_id.id)],
context=context))
return result
def custom_invoice_print(self, cr, uid, ids, context=None):
record = self.browse(cr, uid, ids[0], context=context)
datas = {
'ids': ids,
'model': 'account.invoice',
'form': self.read(cr, uid, ids[0], context=context)
}
return {
'type': 'ir.actions.report.xml',
'report_name': 'custom.account.invoice',
'datas': datas,
'name': 'Invoice ' + record.number ,
'nodestroy' : True
}
module/report/account_print_invoice.py :
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,
'cheque_no': self.cheque_no,
})
def cheque_no(self, voucher):
try:
cheque_no = voucher.cheque_number
if not cheque_no:
# no value in field
return ''
# value in field
return cheque_no
except AttributeError:
# field not defined
return False
report_sxw.report_sxw(
'report.custom.account.invoice',
'account.invoice',
'account_payment_method/report/account_print_invoice.rml',
parser=account_invoice
)
module/report/account_print_invoice.rml :
<?xml version="1.0"?>
<document filename="Invoices.pdf">
<template title="Invoices" author="OpenERP S.A.(sales@openerp.com)" allowSplitting="20">
<pageTemplate id="first">
<frame id="first" x1="34.0" y1="28.0" width="530" height="786"/>
</pageTemplate>
</template>
<stylesheet>
[...]
</stylesheet>
<story>
<para style="terp_default_8">[[ repeatIn(objects,'o') ]]</para>
<para style="terp_default_8">[[ setLang(o.partner_id.lang) ]]</para>
[...]
</story>
</document>
Note the "o.partner_id.lang", which I have not changed. The default lang of the database is the language I want the reports to be translated to. So my customers language is also set to the desired value.
I hope someone can help me fix this.
Thanks !
EDIT :
I also tried:
- Upgrading base module
- Upgrading my module
- Restarting server
- Synchronise terms
- Create new database
EDIT :
And of course I included the i18n folder from the account module.
In your account_invoice.py file change the name of your function : "custom_invoice_print" by "invoice_print". It will print the correct report.
That will just override the red button, not the one in the dropdown list, I think.