В разделе "Книги на руках" появилась новая кнопка "Продлить":
image-2026-03-06-21-03-20-066.png
При нажатии на кнопку появляется диалоговое окно с возможностью указать дату до которой читатель хочет продлить срок пользования изданием:
image-2026-03-06-21-05-06-863.png
После подтверждения заявка становится доступна для обработки сотрудникам в АРМ Книговыдача 128. Вид формуляра с активной заявкой на продление:
image-2026-03-06-21-02-24-534.png
-
I128~~2223 Функция Bookland::GetDbBookByRdrOcc(ObjectDataRecord $rdrRec, int $rdrOcc): ObjectDataDatabase
I128~~2224 Новый раздел настроек АРМ Книговыдача "Настройка подсистемы заявок на продление срока пользования изданием"
I128~~2225 Новый Action RQST/GetRqstProlongationForm: Возвращает HTML-форму для модального окна продления
I128~~2226 Новый Action RQST/CreateRequestProlongationBS: Обрабатывает логику создания заявки на продление (валидация дат, обновление записи читателя, создание записи в БД заказов)
I128~~2227 Возможность для читателей в разделе "Книги на руках" сформировать заявку на продление срока пользования экземпляром издания
I128~~2228 Функционал обработки заявок на продление срока пользования экземпляром издания читателем
Добавлена функция Bookland::GetDbBookByRdrOcc(ObjectDataRecord $rdrRec, int $rdrOcc): ObjectDataDatabase
Оптимизация GetDbBookByRdrOcc.inc
Добавлена настройка подсистемы заявок на продление в Bookland
В модуль Bookland добавлены конфигурационные параметры для управления подсистемой заявок на продление срока пользования изданиями.
Основные изменения:
В ApplyGeneralVariablesConfig.inc добавлен новый раздел настроек "Настройка подсистемы заявок на продление срока пользования изданием".
Реализованы параметры для включения подсистемы (isprolongationallow), отправки уведомлений на email (isprolongationmail), настройки фильтрации, пагинации и форматов отображения.
Добавлена возможность настройки дополнительных колонок и пользовательских кнопок для списка заявок.
Добавлены настройки подполей для даты продления (rdrdelimprolongation) и даты заявки на продление (rdrdelimreturndaterequest).
В api.php обновлен класс BooklandAnswer: добавлены новые свойства в PHPDoc и уточнены сигнатуры методов работы с БД.
Bookland: уточнение типов возвращаемых значений и исправление обработки тега шифра
В методах GetDbBook, GetDbRdr, GetDbRqst изменен тип возвращаемого значения с ObjectData на ObjectDataDatabase.
В RqstExec добавлено приведение dbntagshifr к целому числу (intval) при вызове GetSubField для корректной работы с полями.
Реализована функциональность продления книг и рефакторинг подсистемы заказов (RQST)
Подсистема заказов (RQST):
Рефакторинг типов заказов: Внедрена классовая структура для обработки типов заказов. Создан базовый класс RQSTExType и наследники ExTypeedd (ЭДД) и ExType_prolongation (Продление).
Фабрика типов: Добавлен RqstExTypeFactory для обеспечения обратной совместимости со старым форматом передачи параметров ($scaninfo в виде массива).
CreateRequestRecord:
Метод переписан с использованием строгой типизации аргументов (ObjectDataDatabase, ObjectDataRecord).
Добавлена поддержка объектов RQST_ExType для формирования поля 928.
Улучшена обработка ошибок и проверок (должники, лимиты, доступность экземпляров).
Новые Action-ы:
GetRqstProlongationForm: Возвращает HTML-форму для модального окна продления.
CreateRequestProlongationBS: Обрабатывает логику создания заявки на продление (валидация дат, обновление записи читателя, создание записи в БД заказов).
Добавлен статический метод RQST::getInstance() и подключение новых классов.
Кабинет читателя и История чтения (Users):
В формат ReadHistory.pft128 добавлена кнопка "Продлить" для текущих выдач (страница GetKvInfo).
Оптимизирована функция highlight (использование preg_replace вместо рекурсии).
Исправлена логика фильтрации записей (долги/история) и передача номера повторения (occ) для корректной работы продления.
АРМ Читатель (EC):
В irbis-advancedsearch.js добавлен метод WIrbis.EC.requestBookProlongation для вызова формы продления и обработки ответа сервера.
Мелкие исправления форматирования в JS.
Изменения касаются реализации функционала заявок на продление книг в модуле АРМ Книговыдача (Bookland) и Кабинете читателя.
АРМ Книговыдача: Реализация функционала заявок на продление книг
Добавлена новая таблица WIrbis.B.RqstProlongationTable для отображения списка заявок на продление (фильтр RQSTT=prolongation).
Добавлено модальное окно WIrbis.B.RqstProlongationWindow для обработки заявки библиотекарем (выбор новой даты возврата).
В интерфейс АРМа добавлена вкладка "Продление" (при условии включенной настройки isbroneallow).
Скорректированы поисковые запросы в таблицах обычных заказов (RqstTable) и бронирования (Rqstbrtb), чтобы исключить из них заявки на продление.
Зарегистрированы новые JS-файлы в WIrbis/api.php.
Реализован новый Action RqstExecProlongation для выполнения продления.
Обновлена функция Prodl (__call/Prodl.inc):
Добавлена поддержка привязки к записи заявки ($rqstRec).
Реализовано удаление признака запроса из записи читателя после выполнения.
Исправлен расчет даты возврата (использование strtotime для корректной работы с переходом месяцев/лет).
Добавлена блокировка файла (flock) при обновлении статистики.
В стандартный RqstExec добавлено исключение ExceptionBooklandRqstExec_IsProlongation, которое перехватывает попытку выполнить продление как обычный заказ и открывает соответствующее окно.
Добавлен хелпер GetRdrOccByRqst для поиска экземпляра у читателя по данным из заявки.
RQST (Создание заявок):
Обновлен класс RqstExTypeprolongation: расширен набор сохраняемых данных в поле 928 (БД читателя, идентификатор, шифр книги, инвентарный номер и т.д.).
CreateRequestProlongationBS: Добавлена проверка на существование уже активной заявки на продление для данного экземпляра.
GetRqstProlongationForm: Добавлена проверка на дубликаты заявок и расчет даты по умолчанию.
Кабинет читателя (Users):
Обновлен формат ReadHistory.pft128:
Оптимизирована загрузка записей книг (пакетный запрос вместо цикла).
Добавлено отображение статуса "в обработке заявка на продление".
Добавлена кнопка "Продлить" для выданных книг.
Функционал продления:
Исправлена логика отображения вкладки продления: теперь она зависит от настройки isprolongationallow, а не isbroneallow (отвязана от бронирования).
В таблицу заявок на продление добавлена колонка «Продлить до» (формат RqstProlongationRequestDate).
Колонка «Дата заказа» переименована в «Дата заявки».
Добавлены настройки для конфигурации колонок в списках выполненных заявок на продление и отказов (prolongationcolumnlistissue, prolongationcolumnlistdeny).
Рефакторинг и оптимизация:
Show.inc: Переход на использование getInstance(), оптимизация передачи конфигурации колонок в JS (устранение дублирования кода).
Добавлена логика определения типа заявки (Заказ или Заявка на продление).
Вывод даты, до которой запрашивается продление.
Добавлено экранирование спецсимволов (htmlspecialchars) для безопасности и корректного отображения.
Добавлен новый формат RqstProlongationRequestDate.pft128 для вывода даты продления (поле 928^B).
1. Связанные задачи
1.1. 🔗 Соответствует задача: I128-2230
[I128-2230] Возможность для читателей в разделе "Книги на руках" сформировать заявку на продление срока пользования экземпляром издания
Статус: Открытая задача | Автор: Ilya Mikhaylenko