Разработка калькулятора для BashZakaz
Главная страница
Задача
Разработать калькулятор сроков торгов по нескольким методам закупок. У каждого метода закупок свой набор дат, которые зависят от расчета предыдущих результатов с добавлением или вычетом дней (как рабочих, так и каледарных). Расчеты должны высчитываться с рабочими, календарными, выходными, нерабочими, праздничными, сокращенными днями.
Помимо калькулятора необходимо выводить данные по производственному календарю.
Решение
Для решения задачи были разработаны 3 модуля для сайта на Битриксе:
- модуль, который забирает информацию по производственному календарю с сайта consultant.ru (js + php)
- модуль, который обеспечивает редактирование данных ORM таблиц в админке сайта (Vue.js + php)
- модуль, по расчетам дат, берущий информацию из ORM таблиц и производственного календаря (Vue.js + php)
Цветовая палитра
Производственнй календарь
Модуль обеспечивает хранение, получение, запись, чтение данных о производственных календарях. Внутри есть методы по получению рабочего или календарного дня с учетом периода отсчета от стартовой даты и с возможностью считать период как в календарных днях, так и в рабочих днях.
В базе данных хратится структура вида:
- дата
- тип
- рабочий/не рабочий
- выходной/не выходной
- праздник/не праздник
- предпразничный/не предпраздничный
- не рабочий/рабочий (в связи с указом о нерабочих днях)
Данные берутся с сайта https://www.consultant.ru/law/ref/calendar/proizvodstvennye/ГОД/
Выбранный год при обновлении полностью удаляется и записывается новый результат, сделано для того чтобы можно было вручную обновлять данные
Также модуль имеет возможность для вывода на страницу построить производственный календарь помесячно с разбивкой на недели.
Модуль имеет своего агента, который будет обновлять календари каждые 30 дней. Имеется возможность отключить обновление и оставить только ручное обновление.
Интерфейс ORM таблиц
Написанное решение не претендует на повсеместное использование, но зато позволяет использовать его как основу для развития самой идеи. Возможности сводятся только к CRUD'у. Сам модуль в принципе и нужен был для контент-менеджеров, чтобы они заносили данные через интерфейс админки.
Итак, как устроен модуль:
Логика работы такова, что для того чтобы работать с ORM классами - нужно их указать в настройках с коллекциями. Таким образом можно использовать любые ORM классы для редактирования.
Есть возможность зарегистрировать классы и указать активности классов для редактирования, которые появятся в раскрывающемся списке при разворачивании
Для удобства у каждого зарегистрированного класса, через интерфейс, можно посмотреть схему ORM модели:
Расчет сроков торгов
В расчете почти каждой даты нужно учитывать расчитанную дату из предыдущей, но не у всех дат, относящихся к определенному методу например. Также есть исходные данные по каждому методу, которые пользовать может укаызвать свои.
Интерфейс калькулятора состоит из блоков: выбор метода закупки, выбор исходных данных, выбор даты публикации извещения и расчета сроков закупки.