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

จาก Morange Wiki
แถว 24: แถว 24:
 
ถ้าหาก duration ของ session น้อยกว่า <b style="color:#31708f;">5</b> จะเปลี่ยนสีที่แสดงของ session นั้นเป็น<b style="color:#31708f;">สีฟ้า</b>
 
ถ้าหาก duration ของ session น้อยกว่า <b style="color:#31708f;">5</b> จะเปลี่ยนสีที่แสดงของ session นั้นเป็น<b style="color:#31708f;">สีฟ้า</b>
 
<br/>
 
<br/>
แต่ถ้าหาก duration ของ sessino มากกว่า <b style="color:#a94442;">15</b> จะเปลี่ยนสีที่แสดงของ session นั้นเป็น<b style="color:#a94442;">สีแดง</b> ดังภาพ
+
แต่ถ้าหาก duration ของ session มากกว่า <b style="color:#a94442;">15</b> จะเปลี่ยนสีที่แสดงของ session นั้นเป็น<b style="color:#a94442;">สีแดง</b> ดังภาพ
 
[[ไฟล์:odoo9-1ex.png]]
 
[[ไฟล์:odoo9-1ex.png]]
 
----
 
----
 +
 +
 +
 +
 +
 
* <h3>Calendars</h3>
 
* <h3>Calendars</h3>
 
แก้ไขไฟล์ดังนี้
 
แก้ไขไฟล์ดังนี้
 
<br/><br/>
 
<br/><br/>
 
openacademy/models.py
 
openacademy/models.py
 +
<br/>
 +
ส่วนที่ 1
 +
<br/>
 +
<pre>
 +
# -*- coding: utf-8 -*-
 +
 +
from datetime import timedelta
 +
from openerp import models, fields, api, exceptions
 +
 +
class Course(models.Model):
 +
</pre>
 +
<br/>
 +
ส่วนที่ 2
 +
<br/>
 +
<pre>
 +
    attendee_ids = fields.Many2many('res.partner', string="Attendees")
 +
 +
    taken_seats = fields.Float(string="Taken seats", compute='_taken_seats')
 +
    end_date = fields.Date(string="End Date", store=True,
 +
        compute='_get_end_date', inverse='_set_end_date')
 +
 +
    @api.depends('seats', 'attendee_ids')
 +
    def _taken_seats(self):
 +
</pre>
 +
<br/>
 +
ส่วนที่ 3
 +
<br/>
 +
<pre>
 +
                },
 +
            }
 +
 +
    @api.depends('start_date', 'duration')
 +
    def _get_end_date(self):
 +
        for r in self:
 +
            if not (r.start_date and r.duration):
 +
                r.end_date = r.start_date
 +
                continue
 +
 +
            # Add duration to start_date, but: Monday + 5 days = Saturday, so
 +
            # subtract one second to get on Friday instead
 +
            start = fields.Datetime.from_string(r.start_date)
 +
            duration = timedelta(days=r.duration, seconds=-1)
 +
            r.end_date = start + duration
 +
 +
    def _set_end_date(self):
 +
        for r in self:
 +
            if not (r.start_date and r.end_date):
 +
                continue
 +
 +
            # Compute the difference between dates, but: Friday - Monday = 4 days,
 +
            # so add one day to get 5 days instead
 +
            start_date = fields.Datetime.from_string(r.start_date)
 +
            end_date = fields.Datetime.from_string(r.end_date)
 +
            r.duration = (end_date - start_date).days + 1
 +
 +
    @api.constrains('instructor_id', 'attendee_ids')
 +
    def _check_instructor_not_in_attendees(self):
 +
        for r in self:
 +
</pre>
 +
<br/>
 +
openacademy/views/openacademy.xml
 +
<br/>
 
<pre>
 
<pre>
 +
            </field>
 +
        </record>
 +
 +
        <!-- calendar view -->
 +
        <record model="ir.ui.view" id="session_calendar_view">
 +
            <field name="name">session.calendar</field>
 +
            <field name="model">openacademy.session</field>
 +
            <field name="arch" type="xml">
 +
                <calendar string="Session Calendar" date_start="start_date"
 +
                          date_stop="end_date"
 +
                          color="instructor_id">
 +
                    <field name="name"/>
 +
                </calendar>
 +
            </field>
 +
        </record>
 +
 +
        <record model="ir.actions.act_window" id="session_list_action">
 +
            <field name="name">Sessions</field>
 +
            <field name="res_model">openacademy.session</field>
 +
            <field name="view_type">form</field>
 +
            <field name="view_mode">tree,form,calendar</field>
 +
        </record>
 +
 +
        <menuitem id="session_menu" name="Sessions"
 
</pre>
 
</pre>
 
<br/>
 
<br/>
 
----
 
----
 +
 +
 +
 +
 +
 
* <h3>Search views</h3>
 
* <h3>Search views</h3>
 
แก้ไขไฟล์ดังนี้
 
แก้ไขไฟล์ดังนี้

รุ่นแก้ไขเมื่อ 10:16, 15 กรกฎาคม 2559

Advanced Views

  • Tree views

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

openacademy/views/openacademy.xml

            <field name="name">session.tree</field>
            <field name="model">openacademy.session</field>
            <field name="arch" type="xml">
                <tree string="Session Tree" decoration-info="duration<5" decoration-danger="duration>15">
                    <field name="name"/>
                    <field name="course_id"/>
                    <field name="duration" invisible="1"/>
                    <field name="taken_seats" widget="progressbar"/>
                </tree>
            </field>


ส่วนนี้เป็นการปรับแก้ไข decoration ของ tree views โดยคิดจาก duration ของ session นั้น Odoo9-0ex.png

ถ้าหาก duration ของ session น้อยกว่า 5 จะเปลี่ยนสีที่แสดงของ session นั้นเป็นสีฟ้า
แต่ถ้าหาก duration ของ session มากกว่า 15 จะเปลี่ยนสีที่แสดงของ session นั้นเป็นสีแดง ดังภาพ Odoo9-1ex.png




  • Calendars

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

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

# -*- coding: utf-8 -*-

from datetime import timedelta
from openerp import models, fields, api, exceptions

class Course(models.Model):


ส่วนที่ 2

    attendee_ids = fields.Many2many('res.partner', string="Attendees")

    taken_seats = fields.Float(string="Taken seats", compute='_taken_seats')
    end_date = fields.Date(string="End Date", store=True,
        compute='_get_end_date', inverse='_set_end_date')

    @api.depends('seats', 'attendee_ids')
    def _taken_seats(self):


ส่วนที่ 3

                },
            }

    @api.depends('start_date', 'duration')
    def _get_end_date(self):
        for r in self:
            if not (r.start_date and r.duration):
                r.end_date = r.start_date
                continue

            # Add duration to start_date, but: Monday + 5 days = Saturday, so
            # subtract one second to get on Friday instead
            start = fields.Datetime.from_string(r.start_date)
            duration = timedelta(days=r.duration, seconds=-1)
            r.end_date = start + duration

    def _set_end_date(self):
        for r in self:
            if not (r.start_date and r.end_date):
                continue

            # Compute the difference between dates, but: Friday - Monday = 4 days,
            # so add one day to get 5 days instead
            start_date = fields.Datetime.from_string(r.start_date)
            end_date = fields.Datetime.from_string(r.end_date)
            r.duration = (end_date - start_date).days + 1

    @api.constrains('instructor_id', 'attendee_ids')
    def _check_instructor_not_in_attendees(self):
        for r in self:


openacademy/views/openacademy.xml

            </field>
        </record>

        <!-- calendar view -->
        <record model="ir.ui.view" id="session_calendar_view">
            <field name="name">session.calendar</field>
            <field name="model">openacademy.session</field>
            <field name="arch" type="xml">
                <calendar string="Session Calendar" date_start="start_date"
                          date_stop="end_date"
                          color="instructor_id">
                    <field name="name"/>
                </calendar>
            </field>
        </record>

        <record model="ir.actions.act_window" id="session_list_action">
            <field name="name">Sessions</field>
            <field name="res_model">openacademy.session</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form,calendar</field>
        </record>

        <menuitem id="session_menu" name="Sessions"





  • Search views

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

openacademy/models.py




  • Gantt

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

openacademy/models.py




  • Graph views

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

openacademy/models.py




  • Kanban

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

openacademy/models.py