有時我們背景需要一些定時任務,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內的分數也已經清空

今天介紹就到這裡了,明天我們來介紹流水號的設定