Данный проект содержит следующие элементы из предметной области "выдача займов":
- Сущности Client (клиент) и Loan (займ)
- Экраны для просмотра и редактирования Client, а также экран со списком Loans
В этом задании требуется реализовать пользовательский интерфейс и логику работы с данными для создания заявок на займы, а также для просмотра и одобрения заявок.
Создать экран RequestLoan:
- Создать экран на основе шаблона "Blank screen".
- Экран должен открываться как диалог.
- Экран должен отсутствовать в меню (будет открываться из другого экрана).
- Экран содержит два поля ввода с подписями: Client и Amount, и две кнопки: Request и Cancel.
- Поле Client - выбирает клиента из списка, использовать EntityComboBox. Обязательное поле.
- Поле Amount - текстовое поле. Обязательное.
- Действие Request
- Должно провести валидацию данных: Client (обязательное) и Amount (обязательное; значение должно быть > 0). Вывести уведомление в случае некорректных значений.
- Создает, заполняет атрибутами и сохраняет в БД объект Loan.
- Дополнительно проставляет атрибуты requestDate текущим днём, а также status - Requested.
- После успешного сохранения, закрывает текущий экран (диалог).
- Выбрать и добавить к кнопке Request подходящую по смыслу иконку.
- Действие Cancel - просто закрывает диалог.
Для сохранения сущности использовать DataManager.
Верстка диалога:
- Кнопки Request и Cancel должны быть расположены внизу диалога, рядом, по горизонтали.
- Диалог должен быть компактно поджат по высоте и ширине содержимого, без пустого пространства.
Добавить кнопку для открытия экрана-диалога RequestLoan в экран Clients.
- Название "Request loan"
- По нажатию открывает диалог RequestLoan
- (*) (опционально) Если в таблице Clients выделена запись, то передавать эту запись в диалог RequestLoan, чтобы сразу предзаполнить поле Client.
Создать отдельный экран LoanApproval для просмотра информации по заявкам на займы (Loan).
- Использовать шаблон экрана Entity Browser, для сущности Loan
- Отключить стандартные CRUD действия.
- Заголовок экрана и подпись в меню - "Loan Approval"
- В экран должны загружаться только Loans со статусом Requested.
- Использовать компонент GroupTable. Настроить в таблице начальную группировку по столбцу requestDate.
- Настроить следующий набор столбцов:
- requestDate (группа)
- client (полное имя)
- amount
- client - phoneNumber
- client - salary
- client age (возраст, в годах). Это генерируемая колонка (Generated Column) с текстом. Возраст вычислять на основании client#birthDate.
Добавить в экран LoanApproval дополнительную таблицу для показа данных о других займах клиента, который создавал выбранную заявку:
- Расположение - в нижней части экрана.
- Данная таблица должна иметь фиксированный размер по вертикали, чтобы отображать ~4 строки. По горизонтали - растянуть на всю ширину.
- Над дополнительной таблицей поместить надпись-заголовок "Previous loans:".
- Таблица должна отображать другие Loans того же Client, заявка которого выделена в основной таблице. Текущую заявку на займ не показывать здесь.
- Когда в основной таблице заявок меняется выделение, содержимое дополнительной таблицы должно обновляться.
- Столбцы: amount, requestDate, status.
При изменении размера экрана расти должна основная таблица заявок, и она же должна занимать все свободное место по высоте.
Примечания:
- Использовать слушатель события ItemChangeEvent контейнера данных (collection container) для реакции на смену выделения в таблице.
- Проставлять значения параметров запроса в загрузчик данных (data loader) из кода контроллера экрана.
Добавить в экран LoanApproval две кнопки для одобрения (Approve) или отклонения (Reject) заявки.
- Добавить кнопки в панель над основной таблицей.
- Подобрать и добавить к обеим кнопкам подходящие по смыслу иконки.
- Действие Approve:
- Меняет статус выбранного в таблице Loan на Approved
- Удаляет Loan из таблицы на экране
- Показывает уведомление (Notification) "Approved"
- Действие Reject:
- Меняет статус выбранного в таблице Loan на Rejected
- Удаляет Loan из таблицы на экране
- Показывает уведомление (Notification) "Rejected"
Для сохранения изменений использовать DataManager.