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

时间:2019-05-15 14:16:27

标签: xml odoo scheduler

我有一个在自定义模板中创建的日期字段(用于签订入学合同)。此字段未计算出来,但我想对该字段进行操作,以便:

->当用户选择一个日期时,我想检索该日期以供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中放一些东西,但是我找不到一个例子。

皮质

1 个答案:

答案 0 :(得分:1)

例如,您需要一个方法。 ecole.partner.school正在执行“关闭合同”部分。然后,您可以创建一个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>