Предлагается обществу вариант доработанного модуля Календаря с новыми функциями
Добрый день!
На повестке дня - работа с календарём. Очень мне не хватало в существующем модуле возможности задать ещё и время для задачи. Была проведена в связи с этим некоторая доработка модуля.
Вот ссылка на гит ссылка.
Что получилось:
добавилась возможность включать задачи в иерархию (об этом позже)
И после того, как у задач возникло время начала с минутами, неожиданно пришла простая мысль - добавить признак автозавершения задачи, коль уже встроена возможность запускать по готовности код.
В результате к функциям модуля добавилась фича - теперь он может ещё быть и планировщиком!
Разрешение времени запуска задач - минута. Если задача разовая, код выполнится один раз в назначенное время, задача пометится признаком Готово. А с функцией повтора задач можно организовать и ежеминутное выполнение заданий. Есть возможность настроить повторение задачи на каждые N минут, часов, дней, месяцев, лет, на запуск по определенным дням недели. Тут при наступлении времени выполнения происходит запуск кода задачи, делается отметка в логе об отработке и вычисляется новое время начала задачи в зависимости от заданного периода повторения. Если у такой периодической задачи существует относительное напоминание (напомнить за 5 минут, за день, и т.д.), то оно тоже перенесется на новый срок.
Модуль подписан на событие MINUTELY. Каждую минуту он проверяет наступление времени начала/окончания задачи/события или напоминания, выполняет действия по ним при совпадении, вычисляет новый срок для истекшей повторяющейся задачи и т.п. Всего 5 запросов к базе в минуту
В модуле есть два вида сущностей, доставшихся нам из предыдущего модуля - события и задачи.
Для себя я их определяю так: событие - это что-то внешнее, на время его начала и завершения мы повлиять не можем. Типа 8 Марта). Событие по-любому начнется и завершится в указанное заранее время. А задача - мы можем выполнить ее досрочно, а можем и не выполнить в срок.
С точки зрения планировщика они отличаются в данной реализации следующим:
старт привязанного кода (если он есть) у события происходит по его окончании, а у задачи - по времени фактического выполнения её или же по её началу при установленном признаке автозавершения. Для задачи с автозавершением немного не логично, но так проще человеку при планировании - если задача выполняется автоматически, нагляднее указать время начала.
Задачки можно включать в иерархию - назначить одной или нескольким задачам одну главную. Подзадачи, в свою очередь, могут быть главными задачами для других. Иерархия - инструмент упорядочивания задач наряду с категориями. Плюс добавлена опция для главной задачи - автозакрытие при закрытии всех подзадач. Это даёт ёще один мощный инструмент планирования.
Проект сейчас уже работоспособен. У себя пользуюсь. Реализована форма редактирования задачи/события (спасибо Смоку)
и форма-обзор типа дашборда по делам
На дашборд планируется добавить функционал поиска.
Не определился пока с возможностью добавления кода не только к началу задачи, но и к концу
Буду рад замечаниям и предложениям.
PS. Уже замечен баг при инсталле модуля - я обнаружил, что при инсталле не обновляется тип поля DUE в таблице calendar_events, не смотря на явно прописанное
calendar_events: DUE datetime
Приходится менять тип поля вручную, иначе время начала не сохраняется и всегда равно 00:00 (
PPS Спасибо Руслану Бегу за помощь в тестировании модуля! Результаты тестирования - замороченое деление на события и задачи. Принято решение перейти на единую сущность планирования - оставить только задачи. Календарные события при этом превращаются в задачи на один день, их отделение от других возможно выделением в отдельную категорию. В части задач - добавление кода на начало и конец задачи - это позволит перекрыть такие вещи, как активация/деактивация режима одной задачей. При тестовой эксплуатации выявлена слабость внутреннего планировщика, кроме простейших повторов из списка периодов с какой-либо кратностью было предложено внедрить систему записи повторов, принятую в Кроне, для продвинутых юзеров. Не хватает настройки Повторять до. Просят сделать по-гибче напоминалки - сделать возможность их периодического повторения. И, самое трудное - просят написать доки и инструкции(
Наверное, стоит сделать новый модуль с учётом всего сказанного выше.
Домодедово, Россия
На форуме: xor