Версия 1.6.2 — 2026-06-05
QR-стикеры «Кабинет × Журнал» для физического размещения на кабинетах + важный фикс окна редактирования для двухэтапных записей.
Добавлено
QR-стикеры на каждый журнал в каждом кабинете
Новая консольная команда journals:qr-stickers генерирует печатно-готовые стикеры с QR-кодами для размещения на стенах кабинетов рядом с оборудованием (УФ-лампа, холодильник, шкаф и т.п.). Медсестра наводит камеру на QR — попадает прямо в нужный журнал, отфильтрованный по этому кабинету.
Что включено:
- Контроллер
QrLandingControllerи маршрут/q/{cabinet}/{journal}— короткий URL для QR. По переходу ставит активный кабинет в сессию и редиректит на индекс-страницу журнала (она автоматически фильтруется по этому кабинету черезWithActiveCabinetFilter). - Команда генерирует:
- HTML-лист
storage/app/qr-stickers.html— A4 с сеткой 3×4 стикера, удобно печатать на обычном принтере на самоклеящейся бумаге. - При флаге
--png— отдельные PNG-файлы в папкеqr/для термопринтера этикеток (по умолчанию 43×25 мм в обеих ориентациях:qr/landscape/+qr/portrait/, чтобы коллега подобрал ту, что встаёт ровно на одну этикетку).
- HTML-лист
- Логотип-знак клиники встроен в центр каждого QR (уровень коррекции H — выдерживает перекрытие).
- Подпись: «Кабинет №N» жирно + название журнала.
Использование:
php artisan journals:qr-stickers --png # дефолт: 43×25 @ 406 dpi, обе ориентации
php artisan journals:qr-stickers --png --orientation=landscape
php artisan journals:qr-stickers --png --sticker-mm=50x30 --dpi=300
php artisan journals:qr-stickers --cabinet=1 --cabinet=2 # только выбранные
Исправлено
Окно редактирования: пропадал карандаш сразу после заполнения второго этапа
Симптом (со слов главной медсестры):
Заполнила лампу УФО прямо сейчас. Выставила время выключения 14:00, внесла показания и сохранила. И тут же сразу пропала кнопка «Редактировать». То есть если я ошиблась в часах и через 5 минут хочу отредактировать — уже нет возможности.
Причина: окно редактирования (по умолчанию 2 часа) отсчитывалось от created_at — момента, когда запись была создана впервые. Для двухэтапных журналов (УФ: time_on утром → time_off днём; t°/влажность: утро → вечер; холодильники: утро → вечер) к моменту внесения второго этапа окно от created_at уже истекало, и сразу после сохранения карандаш скрывался из-за isRecordFullyLocked().
Фикс: опорная дата окна редактирования в AbstractJournalIndexPage::editWindowAnchor() и AbstractJournalFormPage::editWindowAnchor() сменена с created_at на updated_at ?? created_at. После КАЖДОГО сохранения окно начинается заново — у пользователя есть 2 часа поправить опечатку независимо от того, первое это сохранение или десятое.
Для одноразовых записей поведение не меняется (updated_at == created_at сразу после создания). Для журнала генеральных уборок WithGeneralCleaningEditWindow уже использовал updated_at — там фикс применился без изменений.
Технические детали
- Версия в
config/journals.php:1.6.1 → 1.6.2. - Новые файлы:
app/MoonShine/Controllers/QrLandingController.phpapp/Console/Commands/JournalsQrStickersCommand.php
- Новый маршрут:
GET /q/{cabinet}/{journal}→qr.landing. - В
.gitignoreдобавлена папка/qr/(PNG-стикеры — генерируемый артефакт).
Миграции
Не требуются.