Данный Action предназначен для формирования HTML-формы запроса на продление срока пользования экземпляром издания. Он используется в сценариях, где читатель со своего рабочего места (например, в личном кабинете) хочет запросить продление книги, которая на данный момент находится у него на руках.
Входные параметры
Action принимает следующие параметры в GET или POST запросе:
rdrDb (string, обязательный): Имя базы данных, в которой хранится запись читателя.
rdrMfn (integer, обязательный): MFN (номер записи в мастер-файле) записи читателя.
occ (integer, обязательный): Номер повторения поля 40 (информация о выданном экземпляре) в записи читателя, для которого запрашивается продление.
Логика работы
Action проверяет наличие и корректность всех обязательных параметров. В случае ошибки возвращается JSON с сообщением об ошибке.
Инициализируется модуль Bookland и загружаются его настройки.
Используя MFN ({}rdrMfn{}) и имя БД ({}rdrDb{}), извлекается запись читателя.
На основе номера повторения ({}occ{}) поля 40 в записи читателя, определяется конкретный выданный экземпляр и находится его запись в базе данных книг.
Выполняется проверка, не существует ли уже активной заявки на продление для данной книги от этого читателя. Если заявка найдена, Action возвращает ошибку, предотвращая создание дублирующих запросов.
Вычисляется предполагаемая дата возврата. Она рассчитывается путем прибавления к текущей дате количества дней, указанного в настройке prolongatedefaultdays модуля {}Bookland{}. Если настройка отсутствует или равна нулю, по умолчанию используется 14 дней.
Генерируется HTML-код формы, который включает:
Краткое библиографическое описание книги.
Поле для ввода даты ({}<input type="date">{}) с именем {}prolongDate{}, предварительно заполненное рассчитанной датой возврата.
** Текстовое поле ({}<textarea>{}) с именем description для ввода примечания к заявке.
{
"success": false,
"message": "Текст сообщения об ошибке"
}
-
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 (устранение дублирования кода).