Printing a report from a button a wizard is quite easy and very fast in execution. Its really awesome when you created a report on your own format using OpenOffice or any other report designing tool for OpenERP, and you can call that report on a single click of a button.
I created a report and sent it to server earlier, now I wanted to launch the same report using a wizard. I had to create wizard for this. my wizard folder:
__init__.py
print_my_report.py (wizard class)
I created a wizard, added the necessary fields, and a many2many relation as my report belongs to the invoice module(report), so that i can get a list of the invoices. Notice the print_report function that tells to fetch those invoices that fall in the given date range, then return the report name. I used my own report so I used technical name of my report. Type should always be ir.actions.report.xml.
class print_my_report(osv.osv_memory):
_name = 'print.my.report'
_description = 'Daly Sale Report'
_columns = {
'date_from':fields.date('Date From',store=True),
'date_to':fields.date('Date To',store=True),
'invoice_ids': fields.many2many('account.invoice',string='Filter on invoices',help="Only selected invoices will be printed"),
}
_defaults = {
'date_from': lambda *a: time.strftime('%Y-%m-%d'),
'date_to': lambda *a: time.strftime('%Y-%m-%d'),
}
def print_report(self, cr, uid, ids, context=None):
datas = {}
if context is None:
context = {}
data = self.read(cr, uid, ids,['date_from', 'date_;to', 'invoice_ids'], context=context)
date_from = data[0]['date_from']
date_to = data[0]['date_to']
obj = self.pool.get('account.invoice')
ids = obj.search(cr, uid, [('date_invoice','>=',date_from),('date_invoice','<=',date_to)])
datas = {
'ids': ids,
'model': 'account.invoice',
'form': data
}
return {'type': 'ir.actions.report.xml', 'report_name': 'account.invoice.rndKhHYk', 'datas': datas}
print_my_report()
Then print_my_report_view.xml, just need to create a view for wizard as you wish and simply add the button and call the print_report method on it.
<record id="print_my_report_view" model="ir.ui.view">
<field name="name">My Report</field>
<field name="model">print.my.report</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Print Report">
<group colspan="4" >
<field name="date_from" filter_domain="[('date_invoice','>=',self)]" />
<field name="date_to" filter_domain="[('date_invoice','<=',self)]" />
</group>
<separator string="Print Only" colspan="4" />
<group colspan = "4">
<field name="invoice_ids" colspan="4" nolabel="1"/>
</group>
<group colspan="4" col="6">
<button icon="gtk-ok" name="print_report" string="Print" type="object"/>
</group>
</form>
</field>
</record>
That's about it, all the best!
0 Comment(s)