Просмотр и редактирования клиента#
Пользователи процесса#
- пользователь с ролью CONTRACTOR.
- пользователь с ролью PARTNER.
Предусловия#
- Клиент создан в системе
- У роли пользователя есть право VIEW_CUSTOMER_ALL или VIEW_CUSTOMER - право для просмотра клиента
- У роли пользователя есть право EDIT_CUSTOMER_ALL или EDIT_CUSTOMER - право для редактирования клиента
Точки входа#
- Нажатие на клиента в списке клиентов
Варианты завершения#
- Данные клиента и его учетной записи обновлены.
Процесс#
Общий вид#
| # | Шаг |
|---|---|
| 1 | Пользователь кликает на клиента в списке. |
| 2 | Система показывает форму клиента в режиме просмотра. |
| 3 | Пользователь нажимает кнопку Редактировать. |
| 4 | Система показывает форму клиента в режиме редактирования. |
| 5 | Пользователь вносит корректировки в карточку клиента, |
| 6 | Система делает доступной кнопку Сохранить (после изменения значения в любом поле) |
| 7 | Пользователь нажимает кнопку Сохранить |
| 7а | Если пользователь нажимает кнопку Отменить, система отменяет изменения, возврат к шагу 2. |
| 6 | Система проверяет заполненные поля. |
| 6а | Если есть ошибки, система показывает сообщение об ошибке. Возврат к шагу 5. |
| 7 | Система выполняет проверку наличия дубликата клиента в базе. |
| 8а | Если в базе есть аналогичный клиент,система показывает сообщение об ошибке. Возврат к шагу 5. |
| 9 | В системе сохраняются изменения в клиенте |
| 11 | Система создает запись в журнале аудита. |
| 12 | Система показывает пользователю форму в режиме просмотра с сохраненными изменениями. |
Особенности процесса#
- Для редактирования клиента пользователь открывает карточку не заблокированного клиента кликом на его строке в списке клиентов и видит карточку в режиме просмотра. В этом режиме все поля закрыты для редактирования.
- Для перехода в режим редактирования, пользователь нажимает кнопку
Редактировать - Система позволяет редактировать все поля, кроме статуса.
- Особенности процесса редактирования клиента аналогичны особенностям в процессе добавления клиента.
- Заблокированный клиент недоступен для редактирования, кнопка
Редактироватьне отображается. - Если для клиента были сохранены резиденство Россия, Беларусь, Казахстан, то при редактировании и изменении на резиденство "Другое", в поле для указания страны резидентства - пусто.
-
Если было выбрано резиденство Другое и указана страна, то при переключении на Россия, Беларусь, Казахстан и обратно на "Другое", указанная страна сохраняется до сохранения карточки клиента.
-
Пользователь с правом VIEW_CUSTOMER_ALL может просматривать всех клиентов
- Пользователю с правом VIEW_CUSTOMER
- ролью PARTNER может просматривать только "своих" клиентов (связанные с тем-же партнером, с которым связан пользователь-партнер)
Использование сервисов Dadata для автозаполнения атрибутов#
Аналогично использованию dadata в процессе добавления клиента
Интерфейс#
Ссылка возврата на таблицу Клиенты#
В режиме просмотра - система показывает таблицу клиентов.
В режиме редактирования аналогично ссылке возврата процесса добавления клиента
Поведение Dadata-полей при смене резидентства#
Аналогично поведению Dadata-полей процесса добавления клиента
Статус клиента#
В режиме просмотра система отображает статус клиента
- Статус
- Атрибут объекта:
customer.status
- Недоступен для редактирования
Закладка "Реквизиты"#
Поля формы#
- ЮЛ: Поля, маски и ограничения аналогичны описанию интерфейса юрлица в процессе добавления клиента
- ФЛ: Поля, маски и ограничения аналогичны описанию интерфейса физлица в процессе добавления клиента
- ИП: Поля, маски и ограничения аналогичны описанию интерфейса ИП в процессе добавления клиента
Режим просмотра#
- Все поля недоступны для редактирования.
- Кнопка
Редактировать- отображается пользователю с правом EDIT_CUSTOMER_ALL или EDIT_CUSTOMER
- при нажатии на кнопку форма переходит в режим редактирования
Режим редактирования#
- Кнопка
Отменить. При нажатии на кнопку система возвращает карточку в режим просмотра, не сохраняет внесенные изменения - Кнопка
Сохранитьстановится доступной, после того как пользователь внес изменение в любое из полей.
Сабмит формы#
Лоадер на кнопке, все поля на форме в readonly
Проверка права при сохранении#
- пользователю с правом EDIT_CUSTOMER_ALL - могут обновлять любых клиентов
- пользователю с правом EDIT_CUSTOMER:
- ролью PARTNER только в карточках "своих" клиентов (связанных с тем-же партнером, с которым связан пользователь-партнер)
Проверка статуса компании в DADATA#
Проверка наличия клиента в базе#
Аналогична проверке дубликатов при добавлении клиентов. Редактируемый клиент исключается из набора клиентов среди которых ищутся дубликаты.
Обновление объектов#
@startuml
skinparam ConditionEndStyle hline
start
:Обновить объект Customer;
if (Тип\nклиента) is (ФЛ или ИП) then
:Обновить объект Person;
else (ЮЛ)
:Обновить объект Company;
endif
end
@enduml
customer
type: не меняетсяstatus: не меняетсяemail: из поля на форме.partner: из поля на форме- если редактирует пользователь с ролю PARTNER, в
partnerсохраняется партнер связанный с текущим пользователем.
- если редактирует пользователь с ролю PARTNER, в
company и person
Маппинг атрибутов company и person на поля формы описан в разделе поля формы
Нотификация при успешном обновлении:#
Изменения сохранены
Журнал событий#
Система создает событие аудита CUSTOMER_EDITED
Закладка "Пользователи"#
Мэппинг полей#
На закладке отображается информация о пользователях клиента:
| Поле таблицы | Атрибут объекта |
|---|---|
user.email |
|
| ФИО | {user.lastName} {user.firstName} {user.patronymic} |
| Телефон | user.phone |
| Статус | user.status |
Сортировка по полю E-mail (по алфавиту).
Отображается списком без пагинации
Если у пользователя нет прав на добавление клиента INVITE_CUSTOMER и в таблице пользователей нет записей,
то пустая закладка Пользователи не отображается
Добавление пользователя#
Можно пригласить нового пользователя или прикрепить существующего, который не привязан ни к одному партнеру/клиенту/агенту/пользователю
- Кнопка
+ Добавить- отображается пользователю с правом INVITE_CUSTOMER
- активна в режимах просмотра и редактирования клиента
- неактивна, если клиент заблокирован
- При нажатии на кнопку
+ Добавить, открывается модальное окно с полями для ввода - модалка не закрывается по клику на фон (только крестиком или кнопками
Отменить,Добавить)
- Атрибут объекта:
user.email
- Обязательное
- Максимальная длина 256 символов
- При вводе e-mail (потеря фокуса поля), система выполняет проверки, во время обработки все поля и кнопки формы неактивны:
- если пользователь с ролю CONTRACTOR привязывает существующего пользователя к ещё одному (любому) клиенту,
(т.е. добавление выполняет с ролю CONTRACTOR, введен валидный e-mail, пользователь с таким e-mail уже существует,
но привязан к другому клиенту):
- поле
Телефонзаблокировано, в нем отображается номер найденного пользователя - поле
Фамилиязаблокировано, в нем отображается фамилия найденного пользователя - поле
Имязаблокировано, в нем отображается фамилия найденного пользователя - поле
Отчествозаблокировано, в нем отображается фамилия найденного пользователя - кнопка
Добавитьактивна
- поле
- если пользователь с ролю PARTNER привязывает существующего "своего" пользователя к ещё одному "своему" клиенту
(т.е. добавление выполняет с ролю PARTNER, введен валидный e-mail, пользователь с таким e-mail уже существует,
привязан к клиенту у которого в карточке указан партнер связанный с добавляющим пользователем)
- поле
Телефонзаблокировано, в нем отображается номер найденного пользователя - поле
Фамилиязаблокировано, в нем отображается фамилия найденного пользователя - поле
Имязаблокировано, в нем отображается фамилия найденного пользователя - поле
Отчествозаблокировано, в нем отображается фамилия найденного пользователя - кнопка
Добавитьактивна
- поле
- в остальных случаях никаких изменений на форме не происходит
- если пользователь с ролю CONTRACTOR привязывает существующего пользователя к ещё одному (любому) клиенту,
(т.е. добавление выполняет с ролю CONTRACTOR, введен валидный e-mail, пользователь с таким e-mail уже существует,
но привязан к другому клиенту):
- Телефон
- Атрибут объекта:
user.phone
- Обязательно к заполнению.
- Маска ввода номера мобильного телефона РФ
+7 9XX XXX-XX-XX - Если пользователь вставляет номер телефона из буфера (copy-past), система вставляет только 9 цифр справа.
- Фамилия
- Атрибут объекта:
user.lastName
- Обязательно к заполнению.
- Максимальная длина: 50 символов.
- Маска ввода: русские и латинские буквы, пробелы, дефисы.
- Имя
- Атрибут объекта:
user.firstName
- Обязательно к заполнению.
- Максимальная длина: 50 символов.
- Маска ввода: русские и латинские буквы, пробелы, дефисы.
- Отчество
- Атрибут объекта:
user.patronymic
- Необязательно к заполнению.
- Максимальная длина: 50 символов.
- Маска ввода: русские и латинские буквы, пробелы, дефисы.
Кнопка Отменить
- Активна всегда
- При нажатии пользователем на кнопку, система:
- закрывает окно без дополнительных подтверждений
- запись не сохраняется в БД
Кнопка Добавить
- Активна всегда
- При нажатии пользователем на кнопку, система:
- проверяет заполненность обязательных полей
- если проверка не выполнена, запись не сохраняется, обязательные незаполненные поля подсвечиваются
- выполняет проверки
- если проверки не выполнены, запись не сохраняется, отображается сообщение (см. в описании проверок).
- закрывает окно
- сохраняет в БД
- отправляет письмо на почту пользователю
- создает запись в журнале событий
- показывает обновленную таблицу
- проверяет заполненность обязательных полей
Проверки при сохранении пользователя#
-
Если E-mail не соответствует паттерну указанному в модели, под полем
E-mailотображается сообщение об ошибке:Некорректный e-mail -
Если Телефон не соответствует маске (см описание поля), под полем
Телефонотображается сообщение об ошибке:Некорректный номер -
Если пользователь с таким же E-mail уже привязан к текущему клиенту, под полем
E-mailотображается сообщение об ошибке:Пользователь уже приглашён -
если добавляет пользователь с ролю CONTRACOR:
- если введен валидный e-mail, пользователь с таким e-mail уже существует, но привязан
к любому сотруднику/агенту/партнеру:
- под полем email отображается сообщение
Пользователь уже приглашён и привязан к другой роли
- под полем email отображается сообщение
- если введен валидный e-mail, пользователь с таким e-mail уже существует, но привязан
к любому сотруднику/агенту/партнеру:
-
если добавляет пользователь с ролю PARTNER:
- если пытается добавить "чужого пользователя" к "своему" клиенту
(т.е. добавление выполняет с ролю PARTNER, введен валидный e-mail, пользователь с таким e-mail уже существует,
но привязан к клиенту у которого в карточке указан партнер не связанный с добавляющим пользователем или привязан к сотруднику/агенту/партнеру):
- под полем email отображается сообщение
Пользователя нельзя добавить. Обратитесь к оператору системы. - для инфо, зачем это запрещать: чтоб пользователя с ролью PARTNER не мог смотреть таким образом номера телефонов и ФИО "чужих" пользователей
- под полем email отображается сообщение
- если пытается добавить "чужого пользователя" к "своему" клиенту
(т.е. добавление выполняет с ролю PARTNER, введен валидный e-mail, пользователь с таким e-mail уже существует,
но привязан к клиенту у которого в карточке указан партнер не связанный с добавляющим пользователем или привязан к сотруднику/агенту/партнеру):
Сохранение пользователя#
- Если привязывается существующий пользователь клиенту, то система
- обновляет привязанного пользователя в БД.
- если привязывают активного пользователя, генерирует для клиента договор как при принятии приглашения пользователем
- Если создается новый, то создает нового в БД и в Keycloak
кроме указанных на форме значений, система сохраняет:
user.type=CUSTOMERuser.role=CUSTOMERuser.status=- если добавлен новый пользователь -
INVITED, - если добавлен существующий - оставляет без изменений
- если добавлен новый пользователь -
user.name-{user.LastName user.FirstName user.patronymic }(пользователям-клиентам в вехрнем углу показываем их ФИО т.к. может быть привязан к нескольким компаниям)
Отправка письма пользователю#
- Если добавлен новый пользователь или существующий, который ешё не принял приглашение
- Если добавлен существующий
Журнал событий#
Система создает события аудита:
- USER_INVITED - при добавлении нового пользователя
- USER_LINKED - при привязке существующего пользователя
Отвязывание пользователя#
Кнопка отвязывания в строках пользователей:
- отображается пользователю с правом INVITE_CUSTOMER
- неактивна, если клиент заблокирован
- при наведении курсора отображается подсказка
Отвязать пользователя - При нажатии пользователем, система:
- отображает диалоговое окно для подтверждения пользователем (макет)
- если пользователь отказался, диалоговое окно закрывается без изменений.
- система отвязывает пользователя от клиента
- если пользователь не связан с другим активным клиентом, блокирует его (с запоминанием предыдущего статуса и записью события в журнал аудита)
- создает событие журнала аудита USER_UNLINKED
- показывает обновленный список пользователей клиента
- отображает диалоговое окно для подтверждения пользователем (макет)