Дев-релиз — 2026-05-06

Дев-релиз — 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.