odoo自定义报表

来源:互联网 发布:网络视频广告数据分析 编辑:程序博客网 时间:2024/06/07 01:45
核心目录结构

1.建立模板文件   即上图的report_template.xml

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <template id="report_receipt_template">
            <t t-call="report.html_container">
                <t t-call="report.external_layout">
                    <div class="page">
                        <h2>财务收据</h2>
                        <h3>收据内容</h3>
                        <p>姓名:<t t-esc="name"/></p>
                        <p>收费:<t t-esc="price"/></p>
                    </div>
                </t>
            </t>
        </template>
    </data>
</openerp>

2.将模板添加到打印按钮  (menu=True  添加到顶部打印)

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <report id="report_receipt"
                model="jm.tju.student.charge"
                string="打印收据"
                report_type="qweb-html"
                name="finance.report_receipt"
                menu="True"/>
    </data>
</openerp>

3.写控制函数
  注意:_name=report.<模块名>.<第2步中的id>  report.render('<模块名>.<第1步中的id>', docargs)
              self.id = 勾选的记录的id

# _*_ coding: utf-8 _*_
from openerp import models, fields, api


class Report_receipt(models.AbstractModel):
    _name = "report.finance.report_receipt"

    @api.multi
    def render_html(self, data=None):
        report = self.env['report']
        report_obj = self.env['jm.tju.student.charge'].browse(self.id)[0]
        name = report_obj.name_show
        price = 0
        for line in report_obj.fee_line:
            if(line.printing == True):
                price += line.fee_charged
                line.printed = True
                line.printing = False
        docargs = {
            "name": name,
            "price": price
        }
        return report.render('finance.report_receipt_template', docargs)

4.自定义按钮调用打印
  <模块名>.<第1步中id>
return self.env['report'].get_action(self, 'finance.report_receipt')
原创粉丝点击