按日期创建自动操作 - Odoo 10

Create an automated action by date - Odoo 10

我有一个在自定义模板中创建的日期字段(用于关闭注册合同)。该字段未计算,但我想对该字段执行操作,以便:

-> 当用户选择日期时,我想检索该日期以提供 CRON Odoo。由于用户先前选择的日期,此 CRON 将调用一个函数来完全关闭合约。

你有什么想法吗?

这是我的 CRON:

    <record id="scheduler_synchronization_closed_contract_school_catering" model="ir.cron">
        <field name="name">Scheduler synchronization closed contract school catering</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 name="args" eval=""/>
        <field name="nextcall" eval="" />
        <field name="doall" eval="False"/>
        <field name="model" eval="'ecole.partner.school'"/>
        <field name="function" eval="'closed_contract_school_catering'"/>
        <field name="active" eval="True"/>
    </record>

我想我必须在 args 和 nextcall 中添加一些东西,但我找不到示例。

亲切

您需要一个方法,例如。 ecole.partner.school 正在执行 "closing contract" 部分。然后你可以创建一个 CronJob,它每小时或每月调用一次这个方法。

在我的示例中,将有一个模型 school.catering.contract,其字段 date_close 可以由客户端中的用户设置。

class SchoolCateringContract(models.Model):
    # _name, fields, ...

    @api.model
    def run_close_old_contracts(self):
        domain = [('date_close', '<=', fields.Date.today())]
        for contract in self.search(domain):
            # completely close contract whatever this means

cron 几乎是正确的。 nextcallargs 不是必须的。但是 numbercall 很重要。这意味着应该调用 cron 的号码。所以 1 意味着,它只会被调用一次,不会再被调用。如果您需要每天调用的 cron,则将其设置为 -1.

<record id="scheduler_synchronization_closed_contract_school_catering" model="ir.cron">
    <field name="name">Scheduler synchronization closed contract school catering</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 name="doall" eval="False"/>
    <field name="model" eval="'school.catering.contract'"/>
    <field name="function" eval="'run_close_old_contracts'"/>
    <field name="active" eval="True"/>
</record>