# Планировщик задач

В первую очередь создается временной интервал, аналогичный crontab на странице /admin/django_celery_beat/crontabschedule/add/, или же указываете свой интервал в поле Interval Schedule на странице Задачи. Далее создаем саму задачу /admin/django_celery_beat/periodictask/add/, указывая Название и Временной интервал (может быть как Interval Schedule так и Crontab Schedule).

Выбираем Зарегистрированную Задачу (Поле Task registered):

processing.tasks.cron_task

В поле Позиционные аргументы/Positional Arguments необходимо указать необходимую для вызова функцию и ее аргументы (в формате json):

["calendar_notification_send_cron_events", null]

В поле Именованные аргументы оставляем:

{}

Пример задачи:

CREATE OR REPLACE FUNCTION calendar_notification_send_cron_events()
  RETURNS boolean
  LANGUAGE plpgsql
AS $function$
DECLARE
    --
    -- Календарь - рассылка уведомлений по вызову из крон
    -- /admin/django_celery_beat/periodictask/1/change/
    --

    row record;
    obj record;
BEGIN
    -- список эвентов
    FOR row IN (SELECT * FROM event_calendar WHERE DATE(NOW()) BETWEEN warning_date AND event_date) LOOP

        -- список всех, у кого разрешены уведомления
        FOR obj IN (SELECT * FROM authentication_user WHERE calendar_notification_enabled = TRUE) LOOP

            -- создание уведомлений в личном кабинете
            INSERT INTO notifications (type, created_at, recipient_id, is_read, body)
                VALUES 
                    (
                        'calendar', NOW(), obj.id, FALSE,
                        (SELECT name FROM event_headers WHERE id = row.event_id)
                    );
        END LOOP;

    END LOOP;

    RETURN TRUE;

END;
$function$

После, Сохранить и проверить работоспособность.

Совет

Результат работы переодичных задач доступен на странице: /admin/django_celery_results/taskresult/