### 日歷
顯示記錄為日歷事件。他們的根元素是 `<calendar>` 他們最常見的屬性是:
`color`
用于*顏色分割的字段的名稱*。顏色是自動地分布在事件,但在相同的顏色段(有相同的值,為他們的“@色”領域的事件)將得到相同的顏色。
`date_start`
記錄的字段為事件開始日期/時間
`date_stop` (optional)
記錄的字段為事件的 結束日期/時間 字段(為每個日歷事件定義標簽)
~~~ xml
<calendar string="Ideas" date_start="invent_date" color="inventor_id">
<field name="name"/>
</calendar>
~~~
練習
日歷視圖
向用戶添加一個日歷視圖,以便用戶查看與開放學院相關的事件。
1. 添加一個` end_date `字段計算` start_date `和`時間`
>Tip
反函數進行現場寫,并允許移動會議(通過拖放)在日歷視圖
2. 向*會話*模型添加日歷視圖
3. 并將日歷視圖添加到*會話*模型的操作
*openacademy/models.py*
~~~ python
# -*- coding: utf-8 -*-
from datetime import timedelta
from openerp import models, fields, api, exceptions
class Course(models.Model):
~~~
~~~ python
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):
~~~
~~~ python
},
}
@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*
~~~ 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"
~~~