ผลต่างระหว่างรุ่นของ "Tutorial Odoo 9.0 Part 14 : Reporting"

จาก Morange Wiki
(หน้าที่ถูกสร้างด้วย '<h2>Reporting</h2> *<h3>Printed reports</h3> แก้ไขไฟล์ดังนี้ <br/><br/> openacademy/__openerp__.py <pre> ...')
 
 
(ไม่แสดง 1 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)
แถว 56: แถว 56:
 
[[ไฟล์:Odoo14-2.png]]
 
[[ไฟล์:Odoo14-2.png]]
 
<br/><br/>
 
<br/><br/>
*<h3>View Inheritance</h3>
+
*<h3>Dashboards</h3>
 
แก้ไขไฟล์ดังนี้
 
แก้ไขไฟล์ดังนี้
 
<br/><br/>
 
<br/><br/>
 
openacademy/__openerp__.py
 
openacademy/__openerp__.py
 +
<br/>
 +
ส่วนที่ 1
 +
<pre>
 +
    'version': '0.1',
 +
 +
    # any module necessary for this one to work correctly
 +
    'depends': ['base', 'board'],
 +
 +
    # always loaded
 +
    'data': [
 +
</pre>
 +
<br/>
 +
ส่วนที่ 2
 
<pre>
 
<pre>
        # 'security/ir.model.access.csv',
 
        'templates.xml',
 
 
         'views/openacademy.xml',
 
         'views/openacademy.xml',
 
         'views/partner.xml',
 
         'views/partner.xml',
 +
        'views/session_workflow.xml',
 +
        'views/session_board.xml',
 +
        'reports.xml',
 
     ],
 
     ],
 
     # only loaded in demonstration mode
 
     # only loaded in demonstration mode
    'demo': [
 
 
</pre>
 
</pre>
 
 
<br/>
 
<br/>
openacademy/views/partner.xml
+
openacademy/views/session_board.xml
 
<pre>
 
<pre>
<?xml version="1.0" encoding="UTF-8"?>
+
<?xml version="1.0"?>
<openerp>
+
<openerp>
 
     <data>
 
     <data>
        <!-- Add instructor field to existing view -->
+
         <record model="ir.actions.act_window" id="act_session_graph">
         <record model="ir.ui.view" id="partner_instructor_form_view">
+
             <field name="name">Attendees by course</field>
             <field name="name">partner.instructor</field>
+
             <field name="res_model">openacademy.session</field>
             <field name="model">res.partner</field>
+
             <field name="view_type">form</field>
             <field name="inherit_id" ref="base.view_partner_form"/>
+
             <field name="view_mode">graph</field>
             <field name="arch" type="xml">
+
            <field name="view_id"
                <notebook position="inside">
+
                  ref="openacademy.openacademy_session_graph_view"/>
                    <page string="Sessions">
 
                        <group>
 
                            <field name="instructor"/>
 
                            <field name="session_ids"/>
 
                        </group>
 
                    </page>
 
                </notebook>
 
            </field>
 
 
         </record>
 
         </record>
 
+
         <record model="ir.actions.act_window" id="act_session_calendar">
         <record model="ir.actions.act_window" id="contact_list_action">
+
             <field name="name">Sessions</field>
             <field name="name">Contacts</field>
+
             <field name="res_model">openacademy.session</field>
             <field name="res_model">res.partner</field>
+
            <field name="view_type">form</field>
             <field name="view_mode">tree,form</field>
+
             <field name="view_mode">calendar</field>
 +
            <field name="view_id" ref="openacademy.session_calendar_view"/>
 
         </record>
 
         </record>
         <menuitem id="configuration_menu" name="Configuration"
+
         <record model="ir.actions.act_window" id="act_course_list">
                  parent="main_openacademy_menu"/>
+
            <field name="name">Courses</field>
        <menuitem id="contact_menu" name="Contacts"
+
             <field name="res_model">openacademy.course</field>
                  parent="configuration_menu"
+
             <field name="view_type">form</field>
                  action="contact_list_action"/>
 
    </data>
 
</openerp>
 
</pre>
 
<br/><br/>
 
ทำการเพิ่มฟิลด์เข้าไปใน Form ของ partner (ที่ได้สืบทอดมา) ได้ผลลัพธ์ดังนี้
 
<br/>
 
[[ไฟล์:Odoo6-1.png|800px]]
 
<br/><br/>
 
และทำการเพิ่ม Contact ใน menuitem ดังภาพ
 
<br/>
 
[[ไฟล์:Odoo6.png|800px]]
 
<br/><br/>
 
*<h4>Dashboards</h4>
 
แก้ไขไฟล์ดังนี้
 
<br/><br/>
 
openacademy/models.py
 
<pre>
 
    duration = fields.Float(digits=(6, 2), help="Duration in days")
 
    seats = fields.Integer(string="Number of seats")
 
 
 
    instructor_id = fields.Many2one('res.partner', string="Instructor",
 
        domain=[('instructor', '=', True)])
 
    course_id = fields.Many2one('openacademy.course',
 
        ondelete='cascade', string="Course", required=True)
 
    attendee_ids = fields.Many2many('res.partner', string="Attendees")
 
</pre>
 
<br/>
 
เป็นการเพิ่มเงือนไขให้การเลือก instructor ให้กับ session โดยจะเลือกจาก partner ที่มี field instructor เป็น true
 
<pre>
 
    instructor_id = fields.Many2one('res.partner', string="Instructor",
 
        domain=[('instructor', '=', True)])
 
</pre>
 
<br/><br/>
 
สังเกตุได้จากการเลือก instructor ให้แต่ละ session
 
[[ไฟล์:Odoo6-4.png|800px]]
 
<br/><br/>
 
ทำการแก้ไขค่า instructor ให้กับ partner โดยให้ค่าเป็น true แล้วบันทึก จะได้ผลลัพธ์ดังภาพ
 
<br/>
 
[[ไฟล์:Odoo6-5.png|800px]]
 
<br/><br/>
 
และทำการเลือก instructor ให้ session อีกครั้ง จะปรากฏ partner ที่มีสถานะ instructor เป็น true ขึ้นมาในตัวเลือก ดังภาพ
 
<br/>
 
[[ไฟล์:Odoo6-6.png|800px]]
 
<br/><br/>
 
<br/>
 
*<h4>More complex domains</h4>
 
แก้ไขไฟล์ดังนี้
 
<br/><br/>
 
openacademy/models.py
 
<pre>
 
        seats = fields.Integer(string="Number of seats")
 
 
 
    instructor_id = fields.Many2one('res.partner', string="Instructor",
 
        domain=['|', ('instructor', '=', True),
 
                    ('category_id.name', 'ilike', "Teacher")])
 
    course_id = fields.Many2one('openacademy.course',
 
        ondelete='cascade', string="Course", required=True)
 
    attendee_ids = fields.Many2many('res.partner', string="Attendees")
 
</pre>
 
 
 
<br/>
 
ในส่วนนี้จะเป็นการปรับแก้ให้การเลือก instructor ให้กับ session
 
<br/>
 
จากเดิม <b>เลือกจาก partner ที่มีสถานะ instructor เป็น true</b>
 
<br/>
 
ปรับแก้เป็น
 
<br/>
 
<b>เลือกจาก partner ที่มีสถานะ instructor เป็น true "หรือ" partner ที่ติด tag Teacher</b>
 
<pre>
 
        domain=['|', ('instructor', '=', True),
 
                    ('category_id.name', 'ilike', "Teacher")])
 
</pre>
 
ดังภาพ
 
<br/>
 
[[ไฟล์:Odoo6-8.png|800px]]
 
<br/><br/>
 
 
 
openacademy/views/partner.xml
 
<pre>
 
<menuitem id="contact_menu" name="Contacts"
 
                  parent="configuration_menu"
 
                  action="contact_list_action"/>
 
 
 
        <record model="ir.actions.act_window" id="contact_cat_list_action">
 
             <field name="name">Contact Tags</field>
 
             <field name="res_model">res.partner.category</field>
 
 
             <field name="view_mode">tree,form</field>
 
             <field name="view_mode">tree,form</field>
 
         </record>
 
         </record>
         <menuitem id="contact_cat_menu" name="Contact Tags"
+
         <record model="ir.ui.view" id="board_session_form">
                  parent="configuration_menu"
+
            <field name="name">Session Dashboard Form</field>
                  action="contact_cat_list_action"/>
+
            <field name="model">board.board</field>
 
+
            <field name="type">form</field>
        <record model="res.partner.category" id="teacher1">
+
            <field name="arch" type="xml">
            <field name="name">Teacher / Level 1</field>
+
                <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>
         <record model="res.partner.category" id="teacher2">
+
         <record model="ir.actions.act_window" id="open_board_session">
            <field name="name">Teacher / Level 2</field>
+
          <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>
 
         </record>
 +
 +
        <menuitem
 +
            name="Session Dashboard" parent="base.menu_reporting_dashboard"
 +
            action="open_board_session"
 +
            sequence="1"
 +
            id="menu_board_session" icon="terp-graph"/>
 
     </data>
 
     </data>
 
</openerp>
 
</openerp>
 
</pre>
 
</pre>
 
 
<br/>
 
<br/>
เป็นการเพิ่ม Tag Teacher / Level 1 และ Teacher / Level 2 ลงใน Contact Tags
+
จากโค้ดข้างต้นเป็นการเพิ่ม dashboard ของ openacademy ซึ่งแสดงภาพรวมต่างๆ ดังภาพ
 
<br/>
 
<br/>
[[ไฟล์:Odoo6-2.png|800px]]
+
[[ไฟล์:Odoo14-3.png|800px]]
 
<br/><br/>
 
<br/><br/>
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 7 : Computed fields and default values]]
+
หัวข้อถัดไป [[Tutorial Odoo 9.0 Part 15 : WebServices]]

รุ่นแก้ไขปัจจุบันเมื่อ 11:12, 19 กรกฎาคม 2559

Reporting

  • Printed reports

แก้ไขไฟล์ดังนี้

openacademy/__openerp__.py

        'views/openacademy.xml',
        'views/partner.xml',
        'views/session_workflow.xml',
        'reports.xml',
    ],
    # 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>


จากการแก้ไขโค้ดข้างต้น จะมีตัวเลือก print ปรากฏ และสามารถออกรายงานเป็นไฟล์ pdf ดังภาพ
Odoo14-1.png

ตัวอย่างไฟล์ pdf
Odoo14-2.png

  • Dashboards

แก้ไขไฟล์ดังนี้

openacademy/__openerp__.py
ส่วนที่ 1

    'version': '0.1',

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

    # always loaded
    'data': [


ส่วนที่ 2

        'views/openacademy.xml',
        'views/partner.xml',
        'views/session_workflow.xml',
        'views/session_board.xml',
        '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>


จากโค้ดข้างต้นเป็นการเพิ่ม dashboard ของ openacademy ซึ่งแสดงภาพรวมต่างๆ ดังภาพ

มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย



หัวข้อถัดไป Tutorial Odoo 9.0 Part 15 : WebServices