Потребность клиента
Я как Нанимающий менеджер, хочу иметь функциональность запрета на уменьшение значения в поле Потребность, чтобы избежать ситуаций, когда Потребность может уйти в минусовое значение, а также предотвратить возможность закрытия заявок путем уменьшения значения, так как заявки могут быть актуальные.
На данный момент есть две стратегии закрытия заявок по Потребности, это либо "Старые", либо "Новые" заявки.

{% note info "Проблематика" %}
- Без добавления настройки закрытия заявки по Потребности нельзя сохранить документ КФГ, таким образом, чтобы осталась только стратегия закрытия заявки по Кандидату
- Если у пользователя есть доступ на редактирование значения в поле Потребность, тогда пользователь всегда сможет отменить заявки путем уменьшения значения.
- Для ряда компаний актуально, когда Отмена заявок происходит только, если пользователь с полномочиями на смену статуса заявки сам переведет заявку в статус Отменена, в таком случае автоматически произойдет уменьшение значения в поле Потребность на то количество, сколько заявок отменил пользователь.
- Может произойти Отмена заявки по кандидату, который уже может находится на статусе "Оформлен"
{% endnote %}
Детали реализации
Необходимо реализовывать валидацию значения поля потребности в форме редактирования потребности / в превью ОЕ.
| Название валидатора | Тип | Описание |
|---|---|---|
| Запрет на уменьшение Потребности | Клиентский | Валидирует числовое значение потребности. Недоступно введение значения меньше указанного |
Расположение валидатора: документ "Потребность" - Поле OpenPositionsCount - Значение - Валидаторы

Добавить информационное уведомление в форме редактирования потребности при неуспешной валидации на поле OpenPositionsCount с текстом "Уменьшение потребности недоступно":

Добавить всплывающее уведомление ошибки с текстом: "Нельзя редактировать значение в поле в меньшую сторону, для уменьшения значения в данном поле отмените неактуальную заявку, созданную в рамках данной Потребности"

Критерии приёмки
| N | Дано | Когда | Тогда | |
|---|---|---|---|---|
| 1 | Пользователь с полномочиями на редактирование сущности Потребность (hire-need) И Форма редактирования Потребности Поле - "Потребность" (OpenPositionsCount) указано значение 2 | Пользователь корректирует значение в меньшую сторону | Действие недоступно, нет возможности сохранить изменения И Всплывает уведомление с ошибкой И Отображается информационное уведомление под полем "Потребность" (OpenPositionsCount) | ТК-44221-1 |
| 2 | Пользователь с полномочиями на редактирование сущности Потребность (hire-need) И Превью Орг единица Поле - "Потребность" (OpenPositionsCount) указано значение 2 | Пользователь корректирует значение в меньшую сторону | Действие недоступно, нет возможности сохранить изменения И Всплывает уведомление с ошибкой | ТК-44221-2 |
| 3 | Пользователь с полномочиями на редактирование сущности Потребность (hire-need) И Поле Потребности - "Потребность" (OpenPositionsCount) указано значение 2 | Пользователь корректирует значение в большую сторону | Изменение успешно сохраняется | ТК-44221-3(Форма редактирования Потребности) |
| 4 | Пользователь с полномочиями на редактирование сущности Потребность (hire-need) И Превью Орг единица поле - "Потребность" (OpenPositionsCount) указано значение 2 | Пользователь корректирует значение в большую сторону | Изменение успешно сохраняется | ТК-44221-4(Превью Орг единица) |
| 5 | Пользователь с полномочиями на редактирование сущности Потребность "Х"(hire-need) И Поле Потребности - "Потребность" (OpenPositionsCount) указано значение "2" И Заявка, созданная из Потребности "Х" И Пользователь с полномочиями на смену статуса заявки в "Отменена" | Пользователь меняет статус заявки на "Отменена" | Заявка переходит в статус "Отменена" И В поле Потребности - "Потребность" (OpenPositionsCount) указано значение "1" | ТК-44221-5.1(Стратегия старые) ТК-44221-5.2(Стратегия новые) |
| 6 | Пользователь с полномочиями на редактирование сущности Потребность (hire-need) И На поле - "Потребность" (OpenPositionsCount) нет установленного валидатора И Поле - "Потребность" (OpenPositionsCount) указано значение 2 | Пользователь корректирует значение в меньшую сторону | Действие доступно, есть возможность сохранить изменения |
Техническая реализация
- Создать конфигурацию валидатора, отнаследоваться от IValidatorConfiguration.
- В качестве DataType указываем Integer, ObjectsTypes - OrgUnitNeed.
- Описать логику валидатора:
-
Создаем валидатор и отнаследуемся от DocumentFieldValidatorBase.
-
Переопределяем метод Validate и реализуем логику (сравниваем текущее значение поля с новым, выдаем ошибки).
Ошибка: new CandidateWorkflowValidatorResult { IsValid = false, Messages = "Нельзя редактировать значение в поле в меньшую сторону, для уменьшения значения в данном поле отмените неактуальную заявку, созданную в рамках данной Потребности" } --> посмотреть примеры из других валидаторов.
-
Текущее значение берем из model в методе Validate.
-
- Для каждой компании создать ConfigurationFactory и зарегистрировать там валидаторы (пример PepsiConfigurationFactory и т.п.): configuration.CandidateWorkflowValidators.Add<Новый_валидатор>();
- Зарегистрировать в ConfigurationLoader NEWConfigurationFactory.
- Тесты.