Практика 5.5 Разработка бизнес логики.
Ответ на задание необходимо предоставить в виде файлов Scala и XML, которые были изменены в текущем уроке (для написанного программного кода). Скриншоты интерфейса приложения для заданий выполняемых в интерфейсе и для демонстрации работы кода в системе Global ERP следует отправить в формате PDF, PNG или JPG. Для удобства рекомендуется прислать все файлы в одном архиве.
В ответе на задание должны содержаться элементы, обеспечивающие работоспособность описанного в задании функционала.
Вычисление заголовка с учетом типа объекта
-
В
Api
классов-документов измените вычисление заголовкаcalcHeadLine
, заголовок должен быть в формате{(Краткое наименование из типа объекта).nvl(HL класса)} № {sNumDoc} от {dDoc в формате дд.мм.гггг}
. -
Для созданных ранее объектов пересчитайте заголовки, для этого в карточках классов, под молотком и ключом запустите операцию
Пересчитать заголовки и мнемокоды объектов класса
. Для проверки можно посмотреть данные столбца sheadline_dz в таблицах.
Динамическое управление редактируемостью полей
-
В
Avi
документов для карточек переопределите сеттер состоянияsetidState
, в конце пропишите методы для корректного срабатыванияcheckWorkability
мастера и деталей, для того чтобы последующие задания работали корректно при переводе состояния:
//необязательные действия //завершение транзакции session.commit() //снятие блокировки Btk_FormSessionApi().closeLockUnit() //необходимые действия //обновление карточки selection.refreshItem() //вызов checkWorkability в карточке selection.checkWorkability() //вызов checkWorkability в деталях selection.cwaDetails()
-
Для реализации динамического управления редактируемостью в
Avi
позиций документов, для отображенийList_idDoc
иList_idInAct
переопределите методcheckWorkability
, напишите блокировку добавления, удаления, редактирования позиций, если номер состояния документа отличен от 100. Можно воспользоваться данными методами:
//переменная для управления редактируемостью val bvRO = getVar("super$idStateMC").asNNumber.isDistinct(100.nn) //для одного атрибута selection.attrs("Имя атрибута").isReadOnly = bvRO //для списка атрибутов selection.attrs().foreach(_.isReadOnly = bvRO) //для операций selection.opers("Имя операции").isEnabled = !bvRO
-
В
Avi
документов для карточек переопределитеcheckWorkability
, напишите блокировку на редактирование всех полей, кромеidState
,idStateHL
иnSum
, если номер состояния документа отличен от 100
Действия на перевод состояния
В Lbr_InActApi
:
-
Создайте метод проверки документа (например
validateDoc
), на вход будет rop документа. -
В нем пропишите вызов ошибки, если не будут выполнены какие либо условия (указаны ниже). Ошибку можно сделать одну общую с не выполненными условиями или отдельную по каждому условию. Вызов ошибки осуществляется методом
throw AppException("Текст ошибки")
. Перечень условий:- Заполнены атрибуты документа (дата, организация, библиотекарь)
- Наличие хотя бы одной записи в позициях
-
Заполнены атрибуты в позициях (книга, количество)
-
Переопределите сеттер состояния (
setidState
), в начале метода пропишите вызов метода проверки, если номер нового состояния будет >=300 и номер старого состояния < 300. -
В
Lbr_InOrderApi
иLbr_OutOrderApi
напишите аналогичную логику, только без проверки количества в позиции.
Проверка при удалении
в Api
документов переопределите метод delete
и напишите в начале проверку, чтобы нельзя было удалить документ, если он находится не в состоянии Оформляется