odoo自定義報表
阿新 • • 發佈:2019-01-29
核心目錄結構
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')