最後我們來說說如何產出PDF吧~
在odoo中想要產出report主要有兩種方式,一個是透過odoo內建的action按鈕,另一個就是自己製作一個button使PDF產出,我們先從action來示範吧。
<odoo>
<template id='libaray_report'>
<t t-call ='web.html_container'>
<t t-foreach='library_book' t-as='doc'>
<t t-call='external_layout'>
<div class='page'>
<h1>Hellow</h1>
</div>
</t>
</t>
</t>
</template>
<record id='libaray_report_action' model='ir.action.report'>
<field name='name'>library report action</field>
<field name='model'>library</field>
<field name='report_type'>qweb_pdf 或 qweb_html</field>
<field name='report_name'>Library.library_report</field>
<field name='report_file'>Library.library_report</field>
<field name='print_report_name'>library_detail_report</field>
<field name='binding_type'>report</field>
</record>
</odoo>
這一個方法是最簡單的方式,不過記得要在__manifest__.py
中加入report/hello.xml,不然odoo是不會知道有這個report。
我們來說另一個方法吧,這個方法是筆者比較常用的,因為使用者在需要產出報表最直觀也最不需要去記起來的,就是直接按一個button,所以我們來看看要如何實現吧。
首先我們要在 library > model > model.py 中製作一個Function:
def print_report(self):
return self.env.ref("library.libaray_report_action").report_action(self)
再來是在 library > view > view.xml 中,增加一個object button:
<header>
<button name="print_report" type="object" string="print_hello_report"?>
</header>
最後就是將我們的report設計好放在library >report > hello.xml 中,也就是第一個範例,你會發現在製作Function時,libaray_report_action
就是我們前面範例中的action。
格式化QWeb
讀者如果有寫過html的經驗,接下來介紹的東西應該不陌生。在QWeb中也提供了header與footer的方式,使報表呈現更美觀也更方便換頁,你只需要在你的report中加入 <div class="header">
與<div class="footer">
就可以把你的表頭表尾給排版好了。