ผลต่างระหว่างรุ่นของ "Tutorial Odoo 9.0 Part 9 : Advanced Views"
จาก Morange Wiki
Sirawich (คุย | มีส่วนร่วม) |
Sirawich (คุย | มีส่วนร่วม) |
||
แถว 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 ของ | + | แต่ถ้าหาก 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 นั้น
ถ้าหาก duration ของ session น้อยกว่า 5 จะเปลี่ยนสีที่แสดงของ session นั้นเป็นสีฟ้า
แต่ถ้าหาก duration ของ session มากกว่า 15 จะเปลี่ยนสีที่แสดงของ session นั้นเป็นสีแดง ดังภาพ
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