Дев-релиз — 2026-05-06
Большой релиз: новая страница «Обход кабинетов», переход журнала t°/влажности на единую запись «утро + вечер», календарь генеральных уборок, развитие журнала УФ-обеззараживания (наработка лампы, длительность в часах), множественные значения в журналах хранения отходов и уборок, плюс множество правок UX и DevOps.
Добавлено
Обход кабинетов
- Новая страница
/page/cabinet-round-pageдля мобильного режима «сотрудник с телефоном ходит по кабинетам». - Список кабинетов плитками с фильтром по структурному подразделению; цвет плитки и счётчик отражают, сколько журналов осталось заполнить за сегодня.
- На карточке кабинета — крупные плитки журналов, требующих внимания (нет записи за сегодня или заполнено только утро/вечер). Полностью заполненные журналы свёрнуты в строку «Уже выполнены сегодня».
- По клику на плитку открывается форма соответствующего журнала с предзаполненным кабинетом и датой; после сохранения — автоматический возврат на экран кабинета.
- Спокойная палитра (зелёный/янтарный/синий) вместо тревожно-красной.
Календарь генеральных уборок
- Отдельная страница-календарь по месяцам с переключением «← / Сегодня / →».
- Планирование уборок прямо из календаря: «+» создаёт план на день, «×» отменяет.
- Виджеты на дашборде:
- «Просрочены генеральные уборки» — записи с
planned_date < сегоднябезactual_date. - «Сегодня по плану» — список уборок на сегодняшнюю дату с кнопкой «Заполнить».
- «Просрочены генеральные уборки» — записи с
- Подсказки на форме записи (последний выполненный тип уборки и т. п.).
Журнал t° и относительной влажности
- Переход на структуру «одна запись на день» с под-блоками «Утро» и «Вечер» (JSON
measurements). - Миграция существующих записей: для каждой пары (кабинет, дата) старые строки с
period = morning/eveningобъединены в одну. - Подсказки у полей:
в градусах °C,в процентах %. - Печатная форма обновлена под новый формат (две строки на запись с rowspan по дате и подписи).
- В списке убраны устаревшие колонки замеров и фильтр по периоду — стал лаконичнее, как в журнале холодильников.
Журнал УФ-бактерицидного обеззараживания
- Поле «Наработка часов» с подсказкой «Предыдущая наработка: N ч»; автоматический пересчёт
previous + durationпри изменении времени включения/выключения, длительности или флага «Заменена лампа». - Длительность теперь в часах (а не в минутах); выполнена миграция данных.
- При создании записи поля «Время выключения» и «Длительность» по умолчанию пустые.
- Дефолты на форме: «Условия обеззараживания → В присутствии людей», «Объект → Воздух».
- На дашборде новый отчёт «Наработка УФ-ламп»: сводка по кабинетам, детализация по конкретному кабинету, алёрт о превышении ресурса лампы (>7899 ч).
Журнал температуры холодильников
- Автоподстановка холодильника: при создании новой записи поле «Холодильная камера» заполняется значением из последней записи этого кабинета.
Журнал хранения отходов
- Поле «Тип упаковки» теперь поддерживает множественный выбор (jsonb-массив); выполнена миграция существующих скалярных значений в массив из одного элемента.
Журнал текущих уборок
- Поддержка нескольких дезинфицирующих средств в одной записи (many-to-many с pivot-таблицей).
- Быстрый выбор времени уборки на форме.
Список пользователей
- Колонка «Роли» в индексной таблице.
Авторизация
- Автоматическая подстановка домена
@mymedex.ruна странице входа. - Переключение драйвера авторизации (LDAP / Eloquent) для dev-окружения через переменную окружения.
Ограничения редактирования
- Записи журналов теперь нельзя редактировать после истечения настраиваемого окна редактирования (часы), кроме super-admin. Поле
edit_window_hoursдобавлено в таблицу пользователей.
Изменено
- Дашборд: убраны пустые графики «Состояние отходов» и «Вывоз мусора», которые отвлекали при отсутствии данных. Удалены связанные неиспользуемые импорты.
- Журнал t°/влажности: упростилась навигация — поле «Период» убрано, форма строится как «одна запись = один день».
- Печатные формы: исправлены поля даты в журналах уборок (
$entry->date→$entry->cleaned_at). - Меню MoonShine: добавлен пункт «Обход кабинетов» рядом с дашбордом и календарём ген. уборок.
- Базовый Docker-образ: откат с
php:8.4.12наphp:8.4.11(8.4.12 ещё не появился в registry).
Исправлено
- Журнал УФ: при изменении длительности значение «Наработка часов» теперь корректно реактивно обновляется в UI (поле помечено
->reactive()). - Печатная форма уборок: использовалась несуществующая колонка
dateвместоcleaned_at. - Списки пользователей: отсутствовала информация о ролях.
Миграции
Для применения релиза нужно выполнить php artisan migrate. Среди миграций — несколько с переносом данных (не пустые up()):
convert_temperature_humidity_to_morning_evening_measurements— объединение пар «утро/вечер» в одну запись.convert_packaging_type_to_array_in_waste_storage_entries— перевод скалярногоpackaging_typeв jsonb-массив.make_cleaning_entry_disinfectants_many_to_many,make_general_cleaning_entry_disinfectants_many_to_many— переход на many-to-many для дезсредств с переносом существующих связей.convert_duration_to_hours_in_ultraviolet_bactericidal_entries— перевод длительности из минут в часы.add_operating_hours_to_ultraviolet_bactericidal_entries_table,add_lamp_replaced_to_ultraviolet_bactericidal_entries_table— новые поля журнала УФ.add_period_to_temperature_humidity_entries_table— служебная (поле далее удаляется в миграции выше).create_general_cleaning_plans_table— таблица планов ген. уборок.add_edit_window_hours_to_users_table— настраиваемое окно редактирования.grant_super_admin_permissions_and_assign_to_sidorenko— все права super-admin и назначение роли.
Все миграции имеют рабочий down() (где это возможно без потери данных).
Технические заметки
- Удалён enum
App\Enums\MeasurementPeriod— не используется после перехода журнала t°/влажности на JSON. - Добавлены сервисные классы:
App\Services\CabinetJournalDailyStatus— расчёт статуса заполнения журнала за день для кабинета.App\Support\WithRoundReturn— трейт, обеспечивающий возврат после сохранения в режиме «обхода кабинетов» (подключён ко всем 15 журнальным ресурсам).App\Support\UvOperatingHoursStats— расчёты наработки УФ-ламп для отчётов.App\Support\GeneralCleaningPlanHint— подсказки на форме генеральной уборки.
- Контроллеры:
RoundOpenController— точка входа в форму журнала из режима обхода (выставляет активный кабинет, кладёт URL возврата в сессию).GeneralCleaningEntryCalendarController,GeneralCleaningPlanCalendarController— поддержка операций календаря уборок.
- Печатные компоненты Blade обновлены под новые структуры данных в журналах t°/влажности, холодильников, УФ, отходов и уборок; добавлена
general-cleaning.blade.php.