Рубрики
Software

Планировщики в Odoo (Scheduled Actions)

Планировщики (Scheduled Actions) — это автоматизированные действия, которые запускаются Odoo в течение определенного периода времени и могут выполнять множество задач.

Scheduled Actions предназначены для регулярного запуска процесса и по сути, являются такими себе cron jobs.

На практике, планировщики в Odoo применяются для отправки эллектронной почты, проверки количества товара, формирования документов на закупки и других действий.

Найти их можно в режиме разработчика. Для этого, переходим в Settings→Technical→Automation→Scheduled Actions.

Планировщики в Odoo (Scheduled Actions)
Добавление нового Scheduled Actions в Odoo

Значение нескольких параметров:

  • Model: Модель, на основании которой будет выполняться действие.
  • Priority: Приоритет задания в виде целого числа: 0 означает высокий приоритет, 10 — более низкий приоритет.
  • Action Name: Название планируемого действия.
  • Next Execution Date: Следующая дата выполнения.
  • Interval Number: Интервал повторения запуска задачи.
  • Interval Type: Единица измерения для интервала. Доступны следующие варианты: minutes, hours, days, work_days, weeks и months.
  • No of calls: Сколько раз вызывается метод. Значение «-1» указывает на отсутствие ограничений.
  • Active: Статус планировщика: вкл/выкл.

Создание Scheduled Actions в Odoo

Чтобы добавить новую задачу в планировщик, нужно:

  1. Определить в модели логику действия, которое мы будем выполнять.
  2. Создать XML-файл для ir.cron, который будет определять параметры для Scheduled Action.

Эти действия лучше выполнять в отдельном модуле, так как это правильный способ расширения функционала Odoo.

Пример XML файла:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <record id="np_check_cron" model="ir.cron">
            <field name="name">Проверка ТТН (Новая почта)</field>
            <field eval="True" name="active"/>
            <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="model_id" ref="model_nova_posta"/>
            <field name="state">code</field>
            <field name="code">model.np_check()</field>
        </record>
    </data>
</odoo>

В примере, выполняется действие «Проверка ТТН (Новая почта)», логика которого прописана в функции np_check() из модели nova_posta.

Скрипт стартует каждый день. Точное время не задано, но если это необходимо, работает следующий вариант. После numbercall добавляем еще один параметр — nextcall, который расчитывается с помошью DateTime.

<field name=»nextcall» eval=»(DateTime.now() + timedelta(days=1)).strftime(‘%Y-%m-%d 21:00:00’)» />