Day16 Let's ODOO: Report

Odoo提供建立report的功能,透过wkhtmltopdf来输出pdf,我们来写一个简单的范例,能够印出学生的姓名、绰号、所属学校。

首先增加档案 /reports/res_student_report.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <template id="report_student_id_card">
        <t t-call="web.html_container">
            <t t-foreach="docs" t-as="o">
                <t t-call="web.external_layout">
                    <div class="page">
                        <h2>Student Report</h2>
                        <div>
                            <p>Name: <span t-field="o.name"/></p>
                        </div>
                        <div>
                            <p>Nickname: <span t-field="o.nickname"/></p>
                        </div>
                        <div>
                            <p>School: <span t-field="o.school_id.name"/></p>
                        </div>
                    </div>
                </t>
            </t>
        </t>
    </template>
    
    <report
        id="report_student"
        model="res.student"
        string="Student report"
        report_type="qweb-pdf"
        name="student.report_student_id_card"
        file="student.report_student_id_card"
        print_report_name="'学生资讯 %s' % (object.name)"
    />
    
</odoo>

我们分为两个部分来解释

Template

Odoo 的Template代表画面,是用Qweb撰写,将xml转译成html

    <template id="report_student_id">
        <t t-call="web.html_container">
            <t t-foreach="docs" t-as="o">
                <t t-call="web.external_layout">
                    <div class="page">
                        <h2>Student Report</h2>
                        <div>
                            <p>Name: <span t-field="o.name"/></p>
                        </div>
                        <div>
                            <p>Nickname: <span t-field="o.nickname"/></p>
                        </div>
                        <div>
                            <p>School: <span t-field="o.school_id.name"/></p>
                        </div>
                    </div>
                </t>
            </t>
        </t>
    </template>

id:自定义,不重复即可

t:以t开头的为Qweb写法,基本上一开始写的是一样的

t-call="web.external_layout :提供我们基本的header与footer
<t t-foreach="docs" t-as="o"> :代表遍历整个records,像是python的 for o in records:

t-as 是帮你的model的名称

t-field :配上之前设定的model object可以拿到底下的field

只要知道Qweb代表的意义,可以写出基本的画面,另外也有t-if 等逻辑判断帮助report更加完善

Report

    <report
        id="report_student"
        model="res.student"
        string="Student report"
        report_type="qweb-pdf"
        name="res_student.report_student_id"
        file="res_student.report_student_id"
        print_report_name="'学生资讯 %s' % (object.name) +'.pdf'"
    />

report就是汇出档案的设定

id:自定义,不重复即可

model:关联的model name

string:显示的Action button name

report_type :输出模式,预设为qweb-pdf ,另外还有qweb-html ,会以网页的方式呈现

name file:串连template的设定,格式为model.template_id

print_report_name :输出档案名称

设定好之後我们将reports加入__manifest__.py

'data': [
        'reports/student_report.xml'
		...
    ],

重启之後我们便可以在页面看到多了一个print button:

https://ithelp.ithome.com.tw/upload/images/20211001/20130896xt4pm05bLC.png

点选之後即会下载pdf到电脑中,而我们印出其中三个field,档名也与设定的一致:

https://ithelp.ithome.com.tw/upload/images/20211001/20130896SfVOvUozij.png

同样Odoo也提供介面去操作Reports,当然也可以设定权限,或是修改相关资讯

https://ithelp.ithome.com.tw/upload/images/20211001/2013089610xELVgHpP.png

今天就介绍到这边了,如果要客制化Report,可以利用一些base template可以减少花的时间,这部分建议多看source code的写法比较可以掌握Qweb的用法。


<<:  DAY 19-数位签章- DSA

>>:  Day16 资料库-model的创建(2)

Day26-用jQuery写得出ToDoList吗_1_新增list没什麽问题

这应该是这次参赛的最後作品了 来挑战用jQuery做一个ToDoList 首先先写简单的架构 一个i...

【心得】border-radius 知多少~

要把物件边角变得圆圆润润的,首先都会想到border-radius 初学者刚会用的时候只会设定一个值...

Day21 - 用 Ruby on Rails 抓台湾证券交易所资料-除权除息计算结果表

前言 这篇主要以抓「台湾证券交易所」的「除权除息计算结果表」为主 取得「除权除息计算结果表」CSV ...

上场,就是要放手一博 - 认清自己的特质与优势

我们先看看以下这些知名的团队运动的状况: 在棒球的规则中,各国一军日常可以登录25-29名球员,约在...

Alpine Linux Porting (1.99) ES LEBT !!!

惯例先上成果图XD https://asciinema.org/a/439607 终於开机开到she...