有時我們背景需要一些定時任務,Odoo同樣也可以設定,依照慣例我們來寫一個範例,每半年學生的成績就要歸零重新計算。
首先在models/res_student.xml 新增方法:
class ResStudent(models.Model):
_name = 'res.student'
_inherit = 'res.partner'
_description = 'Student'
nickname = fields.Char(string='綽號')
math_score = fields.Float(string='數學成績')
chinese_score = fields.Float(string='國文成績')
avg_score = fields.Float(string='學期平均', compute='_compute_score')
birthday = fields.Date(string='生日', required=True)
school_id = fields.Many2one('res.company', string='所屬學校')
school_city = fields.Char(string='所在城市', related='school_id.city')
senior_id = fields.Many2one('res.student', string='直屬學長姐')
junior_ids = fields.One2many('res.student', 'senior_id', string='直屬學弟妹')
teacher_ids = fields.Many2many('res.partner', string='指導老師', domain=[('is_company', '!=', True)])
gender = fields.Selection([("male", "男"), ("female", "女"), ("other", "其他")], string='性別')
is_leadership = fields.Boolean(default=False)
is_active = fields.Boolean(default=True)
channel_ids = fields.Many2many('mail.channel', 'mail_channel_profile_partner', 'partner_id', 'channel_id', copy=False)
def _init_score(self):
for record in self:
record.math_score = 0.0
record.chinese_score = 0.0
方法單純就是將兩項成績設為零,而平均成績我們是用計算的,所以不用設定。
並增加檔案/data/res_student_cron.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="student_cron" model="ir.cron">
<field name="name">Student Score Init Cron Job</field>
<field name="model_id" ref="model_res_student"/>
<field name='interval_number'>6</field>
<field name='interval_type'>months</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
<field name="code">model._init_score()</field>
<field name="state">code</field>
</record>
</data>
</odoo>
設定cron job文件
id
:自定義,不重複即可
model
:固定為ir.cron
name
:cron job名稱
model_id
:關聯model,寫法為 "model" + Model Name
interval_type
:執行單位,分別有months
、weeks
、days
、hours
、minutes
。
interval_number
:填入數字,配合interval_type
,本範例代表六個月執行一次。
numbercall
:總共執行幾次,如果是-1,代表不斷執行。
doall
:布林值,如果沒執行到重啟時會不會執行。
state
、code
:以code的方式執行,參照為model內的哪個方法。
依照慣例將此文件加入__manifest__.py內:
'data': [
'data/res_student_cron.xml'
...
],
我們重啟後便可以在Odoo Scheduled Actions內看到,記得要開啟開發者模式:
這裡筆者先將時間改為一分鐘執行一次,來檢查是否正確執行,log內有cron job執行結果:
Student Model內的分數也已經清空
今天介紹就到這裡了,明天我們來介紹流水號的設定