Перейти к содержанию

Просмотр и редактирования клиента#

Пользователи процесса#

  • пользователь с ролью 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
  • Недоступен для редактирования

Закладка "Реквизиты"#

Поля формы#

Режим просмотра#

  • Все поля недоступны для редактирования.
  • Кнопка Редактировать

Режим редактирования#

  • Кнопка Отменить. При нажатии на кнопку система возвращает карточку в режим просмотра, не сохраняет внесенные изменения
  • Кнопка Сохранить становится доступной, после того как пользователь внес изменение в любое из полей.

Сабмит формы#

Лоадер на кнопке, все поля на форме в 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 сохраняется партнер связанный с текущим пользователем.

company и person

Маппинг атрибутов company и person на поля формы описан в разделе поля формы

Нотификация при успешном обновлении:#
  • Изменения сохранены
Журнал событий#

Система создает событие аудита CUSTOMER_EDITED

Закладка "Пользователи"#

Мэппинг полей#

На закладке отображается информация о пользователях клиента:

user.schema.json

Поле таблицы Атрибут объекта
E-mail user.email
ФИО {user.lastName} {user.firstName} {user.patronymic}
Телефон user.phone
Статус user.status

Сортировка по полю E-mail (по алфавиту). Отображается списком без пагинации

Если у пользователя нет прав на добавление клиента INVITE_CUSTOMER и в таблице пользователей нет записей, то пустая закладка Пользователи не отображается

Добавление пользователя#

Можно пригласить нового пользователя или прикрепить существующего, который не привязан ни к одному партнеру/клиенту/агенту/пользователю

  • Кнопка + Добавить
  • При нажатии на кнопку + Добавить, открывается модальное окно с полями для ввода
  • модалка не закрывается по клику на фон (только крестиком или кнопками Отменить, Добавить)
E-mail
Атрибут объекта: user.email
  • Обязательное
  • Максимальная длина 256 символов
  • При вводе e-mail (потеря фокуса поля), система выполняет проверки, во время обработки все поля и кнопки формы неактивны:
    • если пользователь с ролю CONTRACTOR привязывает существующего пользователя к ещё одному (любому) клиенту, (т.е. добавление выполняет с ролю CONTRACTOR, введен валидный e-mail, пользователь с таким e-mail уже существует, но привязан к другому клиенту):
      • поле Телефон заблокировано, в нем отображается номер найденного пользователя
      • поле Фамилия заблокировано, в нем отображается фамилия найденного пользователя
      • поле Имя заблокировано, в нем отображается фамилия найденного пользователя
      • поле Отчество заблокировано, в нем отображается фамилия найденного пользователя
      • кнопка Добавить активна
    • если пользователь с ролю PARTNER привязывает существующего "своего" пользователя к ещё одному "своему" клиенту (т.е. добавление выполняет с ролю PARTNER, введен валидный 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 отображается сообщение Пользователь уже приглашён и привязан к другой роли
  • если добавляет пользователь с ролю PARTNER:

    • если пытается добавить "чужого пользователя" к "своему" клиенту (т.е. добавление выполняет с ролю PARTNER, введен валидный e-mail, пользователь с таким e-mail уже существует, но привязан к клиенту у которого в карточке указан партнер не связанный с добавляющим пользователем или привязан к сотруднику/агенту/партнеру):
      • под полем email отображается сообщение Пользователя нельзя добавить. Обратитесь к оператору системы.
      • для инфо, зачем это запрещать: чтоб пользователя с ролью PARTNER не мог смотреть таким образом номера телефонов и ФИО "чужих" пользователей
Сохранение пользователя#
  • Если привязывается существующий пользователь клиенту, то система
  • Если создается новый, то создает нового в БД и в Keycloak

кроме указанных на форме значений, система сохраняет:

  • user.type = CUSTOMER
  • user.role = CUSTOMER
  • user.status =
    • если добавлен новый пользователь - INVITED,
    • если добавлен существующий - оставляет без изменений
  • user.name - {user.LastName user.FirstName user.patronymic } (пользователям-клиентам в вехрнем углу показываем их ФИО т.к. может быть привязан к нескольким компаниям)
Отправка письма пользователю#
Журнал событий#

Система создает события аудита:

  • USER_INVITED - при добавлении нового пользователя
  • USER_LINKED - при привязке существующего пользователя

Отвязывание пользователя#

Кнопка отвязывания в строках пользователей:

  • отображается пользователю с правом INVITE_CUSTOMER
  • неактивна, если клиент заблокирован
  • при наведении курсора отображается подсказка Отвязать пользователя
  • При нажатии пользователем, система:
    • отображает диалоговое окно для подтверждения пользователем (макет)
      • если пользователь отказался, диалоговое окно закрывается без изменений.
    • система отвязывает пользователя от клиента
    • если пользователь не связан с другим активным клиентом, блокирует его (с запоминанием предыдущего статуса и записью события в журнал аудита)
    • создает событие журнала аудита USER_UNLINKED
    • показывает обновленный список пользователей клиента