如何根据日期自动更改状态? (odoo 11)

时间:2019-04-28 14:09:41

标签: python odoo

如何根据表单上的给定日期自动更改状态/状态,我尝试了此代码,但无效:

@api.multi
def action_confirm(self):
    for rec in self:
        if rec.mission_start_date:
            td = datetime.now().strftime("%Y-%m-%d")
            today = datetime.strptime(td, "%Y-%m-%d")
            start = datetime.strptime(rec.mission_start_date, "%Y-%m-%d")
            if start == today:
                res = self.write({'state': 'progress'})
    return res

2 个答案:

答案 0 :(得分:1)

为此,您可以使用计划的操作。计划的操作在您设置的时间间隔内运行。 请在此处阅读有关计划的操作的信息:https://www.odoo.yenthevg.com/creating-automated-actions-in-odoo/

答案 1 :(得分:1)

您需要定义计划的操作并将interval_type设置为days

1-创建一个新的计划动作:

    <record id="ir_cron_scheduler_missions" model="ir.cron">
        <field name="name">Mission scheduler</field>
        <field name="user_id" ref="base.user_root"/>
        <field name="interval_number">1</field>
        <field name="interval_type">days</field>
        <field name="numbercall">-1</field>
        <field eval="False" name="doall"/>
        <field eval="'mission.mission'" name="model"/>
        <field eval="'process_scheduler_queue'" name="function"/>
    </record>

2-在计划的操作模型中定义功能:

class Mission(models.Model):
    _name = 'mission.mission'

    @api.model
    def process_scheduler_queue(self):
        for rec in self.search([('state', '!=', 'progress')]):
            if rec.mission_start_date and rec.mission_start_date == fields.Date.today():
                rec.write({'state': 'progress'})