建立一个Odoo Module (八)- Reporting

31 篇文章 0 订阅
28 篇文章 0 订阅

Reporting

Printed reports

在Odoo 8.0,Odoo 提供了一个全新的,基于 QWeb、Bootstrap、Wkhtmltopdf 的report engine。
一个 report 是由下面两部分组成的:

  • ir.actions.report.xml,可以用快捷方式report 代替,设置一个report所需的基本参数
<report
    id="account_invoices"
    model="account.invoice"
    string="Invoices"
    report_type="qweb-pdf"
    name="account.report_invoice"
    file="account.report_invoice"
    attachment_use="True"
    attachment="(object.state in ('open','paid')) and
        ('INV'+(object.number or '').replace('/','')+'.pdf')"
/>
  • 一个标准的 QWeb view,用以设置report的实际格式
<t t-call="report.html_container">
    <t t-foreach="docs" t-as="o">
        <t t-call="report.external_layout">
            <div class="page">
                <h2>Report title</h2>
            </div>
        </t>
    </t>
</t>
the standard rendering context provides a number of elements, the most
important being:

"docs"
    the records for which the report is printed
"user"
    the user printing the report

其实reports都是标准的 web pages, 所以,他们可以通过URL来输出结果,比如,Invoice 的report 就可已通过下面两个URL访问

分别访问 html 版本 和 pdf 版本的 report

注意:
如果说你的 pdf 格式的 report 出现没有 css 样式的情况(html 格式的pdf 有样式,但是pdf格式的没有样式,只有数据),多数情况是因为你的wkhtmltopdf 与你的服务器连接出现的错误。
如果你通过查询日志,发现当你请求 pdf 格式report时,css 等文件并未GET 成功,那么问题就明确了
wkhtmltopdf 程序是通过系统参数web.base.url作为root path 来连接各文件的,但是这个参数是根据 每次 administrator 登录后,自动改变的。如果说,你的服务器使用的某种反向代理,可能就为导致获取不到css文件的问题,你可以通过设置下面两个参数来解决这个问题
- report.url, pointing to an URL reachable from your server (probably http://localhost:8069 or something similar). It will be used for this particular purpose only.
web.base.url.freeze, when set to True, will stop the automatic updates to web.base.url.


练习 8-1
为session model 创建一个report,report中应该显示每一个session的 名字,开始,结束日期,以及列出参加人
openacademy/__openerp__.py

        'views/openacademy.xml',
        'views/partner.xml',
        'views/session_workflow.xml',
        'reports.xml', # new line
    ],
    # only loaded in demonstration mode
    'demo': [

openacademy/reports.xml

<openerp>
<data>
    <report
        id="report_session"
        model="openacademy.session"
        string="Session Report"
        name="openacademy.report_session_view"
        file="openacademy.report_session"
        report_type="qweb-pdf" />

    <template id="report_session_view">
        <t t-call="report.html_container">
            <t t-foreach="docs" t-as="doc">
                <t t-call="report.external_layout">
                    <div class="page">
                        <h2 t-field="doc.name"/>
                        <p>From <span t-field="doc.start_date"/> to <span t-field="doc.end_date"/></p>
                        <h3>Attendees:</h3>
                        <ul>
                            <t t-foreach="doc.attendee_ids" t-as="attendee">
                                <li><span t-field="attendee.name"/></li>
                            </t>
                        </ul>
                    </div>
                </t>
            </t>
        </t>
    </template>
</data>
</openerp>

Dashboards


练习 8-2
创建一个 dashboard,内含一个 graph view ,一个 sessions 的 calendar view 以及一个 courses 的 list view。并为这个 dashboard 创建一个menuitem,并且当用户点击Openacademy时,作为默认展示。

  • 创建一个 openacademy/views/session_board.xml 。内含一个 board view,一个action 用以展现这个view,

    注意:dashboard view 可以分为 1,1-1,1-2,2-1,以及1-1-1

  • 修改openacademy/__openerp__.py

openacademy/__openerp__.py

    'version': '0.1',

    # any module necessary for this one to work correctly
    'depends': ['base', 'board'], # 修改

    # always loaded
    'data': [
        'views/openacademy.xml',
        'views/partner.xml',
        'views/session_workflow.xml',
        'views/session_board.xml', # new line
        'reports.xml', 
    ],
    # only loaded in demonstration mode

openacademy/views/session_board.xml

<?xml version="1.0"?>
<openerp>
    <data>
        <record model="ir.actions.act_window" id="act_session_graph">
            <field name="name">Attendees by course</field>
            <field name="res_model">openacademy.session</field>
            <field name="view_type">form</field>
            <field name="view_mode">graph</field>
            <field name="view_id"
                   ref="openacademy.openacademy_session_graph_view"/>
        </record>
        <record model="ir.actions.act_window" id="act_session_calendar">
            <field name="name">Sessions</field>
            <field name="res_model">openacademy.session</field>
            <field name="view_type">form</field>
            <field name="view_mode">calendar</field>
            <field name="view_id" ref="openacademy.session_calendar_view"/>
        </record>
        <record model="ir.actions.act_window" id="act_course_list">
            <field name="name">Courses</field>
            <field name="res_model">openacademy.course</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form</field>
        </record>
        <record model="ir.ui.view" id="board_session_form">
            <field name="name">Session Dashboard Form</field>
            <field name="model">board.board</field>
            <field name="type">form</field>
            <field name="arch" type="xml">
                <form string="Session Dashboard">
                    <board style="2-1">
                        <column>
                            <action
                                string="Attendees by course"
                                name="%(act_session_graph)d"
                                height="150"
                                width="510"/>
                            <action
                                string="Sessions"
                                name="%(act_session_calendar)d"/>
                        </column>
                        <column>
                            <action
                                string="Courses"
                                name="%(act_course_list)d"/>
                        </column>
                    </board>
                </form>
            </field>
        </record>
        <record model="ir.actions.act_window" id="open_board_session">
          <field name="name">Session Dashboard</field>
          <field name="res_model">board.board</field>
          <field name="view_type">form</field>
          <field name="view_mode">form</field>
          <field name="usage">menu</field>
          <field name="view_id" ref="board_session_form"/>
        </record>

        <menuitem
            name="Session Dashboard" parent="base.menu_reporting_dashboard"
            action="open_board_session"
            sequence="1"
            id="menu_board_session" icon="terp-graph"/>
    </data>
</openerp>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值