Xor

<<< Back

Календарь-планировщик

Предлагается обществу вариант доработанного модуля Календаря с новыми функциями

Добрый день!

На повестке дня - работа с календарём. Очень мне не хватало в существующем модуле возможности задать ещё и время для задачи. Была проведена в связи с этим некоторая доработка модуля.
Вот ссылка на гит ссылка.
Что получилось:

  • добавилось время начала/конца задачи
  • задача может занимать и несколько дней
  • добавилась возможность добавить напоминание к задаче
  • добавилась возможность включать задачи в иерархию (об этом позже)

    И после того, как у задач возникло время начала с минутами, неожиданно пришла простая мысль - добавить признак автозавершения задачи, коль уже встроена возможность запускать по готовности код.
    В результате к функциям модуля добавилась фича - теперь он может ещё быть и планировщиком!

    Разрешение времени запуска задач - минута. Если задача разовая, код выполнится один раз в назначенное время, задача пометится признаком Готово. А с функцией повтора задач можно организовать и ежеминутное выполнение заданий. Есть возможность настроить повторение задачи на каждые N минут, часов, дней, месяцев, лет, на запуск по определенным дням недели. Тут при наступлении времени выполнения происходит запуск кода задачи, делается отметка в логе об отработке и вычисляется новое время начала задачи в зависимости от заданного периода повторения. Если у такой периодической задачи существует относительное напоминание (напомнить за 5 минут, за день, и т.д.), то оно тоже перенесется на новый срок.

    Модуль подписан на событие MINUTELY. Каждую минуту он проверяет наступление времени начала/окончания задачи/события или напоминания, выполняет действия по ним при совпадении, вычисляет новый срок для истекшей повторяющейся задачи и т.п. Всего 5 запросов к базе в минуту

    В модуле есть два вида сущностей, доставшихся нам из предыдущего модуля - события и задачи.
    Для себя я их определяю так: событие - это что-то внешнее, на время его начала и завершения мы повлиять не можем. Типа 8 Марта). Событие по-любому начнется и завершится в указанное заранее время. А задача - мы можем выполнить ее досрочно, а можем и не выполнить в срок.

    С точки зрения планировщика они отличаются в данной реализации следующим:
    старт привязанного кода (если он есть) у события происходит по его окончании, а у задачи - по времени фактического выполнения её или же по её началу при установленном признаке автозавершения. Для задачи с автозавершением немного не логично, но так проще человеку при планировании - если задача выполняется автоматически, нагляднее указать время начала.

    Задачки можно включать в иерархию - назначить одной или нескольким задачам одну главную. Подзадачи, в свою очередь, могут быть главными задачами для других. Иерархия - инструмент упорядочивания задач наряду с категориями. Плюс добавлена опция для главной задачи - автозакрытие при закрытии всех подзадач. Это даёт ёще один мощный инструмент планирования.

    Проект сейчас уже работоспособен. У себя пользуюсь. Реализована форма редактирования задачи/события (спасибо Смоку)

pic0
и форма-обзор типа дашборда по делам

pic1

На дашборд планируется добавить функционал поиска.
Не определился пока с возможностью добавления кода не только к началу задачи, но и к концу
Буду рад замечаниям и предложениям.

PS. Уже замечен баг при инсталле модуля - я обнаружил, что при инсталле не обновляется тип поля DUE в таблице calendar_events, не смотря на явно прописанное

calendar_events: DUE datetime

Приходится менять тип поля вручную, иначе время начала не сохраняется и всегда равно 00:00 (

PPS Спасибо Руслану Бегу за помощь в тестировании модуля! Результаты тестирования - замороченое деление на события и задачи. Принято решение перейти на единую сущность планирования - оставить только задачи. Календарные события при этом превращаются в задачи на один день, их отделение от других возможно выделением в отдельную категорию. В части задач - добавление кода на начало и конец задачи - это позволит перекрыть такие вещи, как активация/деактивация режима одной задачей. При тестовой эксплуатации выявлена слабость внутреннего планировщика, кроме простейших повторов из списка периодов с какой-либо кратностью было предложено внедрить систему записи повторов, принятую в Кроне, для продвинутых юзеров. Не хватает настройки Повторять до. Просят сделать по-гибче напоминалки - сделать возможность их периодического повторения. И, самое трудное - просят написать доки и инструкции(
Наверное, стоит сделать новый модуль с учётом всего сказанного выше.

Discuss (3) (14)

See also:
2020-08-01 Irbis как терминал
2020-05-18 Китайская камера rtsp + vlc как перекодировщик для html
2020-05-12 Опыт интеграции МДМ с Я.Алисой ещё одним способом - без белого адреса, москита, ПУ.(дополнено)
2020-05-07 Поправим формат даты в Панели управления
2020-04-11 Баловство с шаблонами
2020-03-26 Простые правила - вариант модуля. ч. 2
2020-03-25 Простые правила - вариант модуля
2019-12-20 расширение средств работы с events updated
2019-11-20 По следам наших выступлений - сколько мы наэкономили?
2019-11-04 Группа как объект - экономим на коде - 2
2019-10-26 Прикручиваем Grafana к Мажордому
2019-10-11 Группа как объект - экономим на коде
2019-09-25 Если у вас нет телеги...
2019-09-11 Датчик присутствия из ип камеры
2019-07-30 Win-платформа-замена ffmpeg для получения скриншотов из rstp - потока
2019-06-24 Форматированный отчет в телеграм - имитация таблицы
2019-04-30 Используем зомбо-ящик в Мажордомо
2019-03-24 О среднем в Мажордомо
2018-10-31 Об "обделённых" пользователях Win-систем -- с точки зрения кэширования winTTS сообщений
2018-09-16 Перезагрузка Мажордомо в Win-системах

Домодедово, Россия

На форуме: xor