Валидация предназначена для создания дополнительных проверок изменений заказов/клиентов/корп.клиентов/задач, которые делает пользователь в системе. Проверки применяются не только при редактировании в карточке заказа/клиента/кор.клиента/задачи, но и в групповых операциях.
В условии задается логическое выражение, в случае истинности которого действие будет отменено, а пользователь получит сообщение об ошибке.
В условии можно работать с объектом, над которым производится действие (это order
,customer
, customercorporate
, task
), а также с объектом changeSet
(тип Change\EntityChangeSet
), в котором содержится информация об изменяемых полях.
changeSet.isUpdate() and changeSet.hasChangedField('payments.status')
В некоторых случаях в валидации требуется проверить некоторые атрибуты пользователя, который изменяет данные в заказе/клиенте/ корп. клиенте/задаче. Например, проверить, что пользователь входит в определенную группу. Получить пользователя, меняющего данные, можно через функцию user().
- Запрет на завершение задачи без заполненного поля «Описание»
changeSet.isUpdate()
and changeSet.hasChangedField("complete")
and changeSet.getNewValue("complete") == true
and task.commentary == null
- Запрет на создание задачи без срока исполнения
changeSet.isCreate() and task.getDatetime() == null
- Разрешено только завершение задачи, редактировать нельзя
changeSet.isUpdate()
and changeSet.hasChangesExcluding(["complete", "completed_at"])
- Запрет менять статус оплаты заказа
changeSet.isUpdate() and changeSet.hasChangedField('payments.status')
- Дата доставки должна быть сегодняшней датой или позднее
order.deliveryDate < date('now 00:00:00') and (
(changeSet.isCreate() and order.deliveryDate) or
(changeSet.isUpdate() and changeSet.hasChangedField('delivery_date'))
)
- Отгрузку может выполнять только пользователь группы Логист
Примечание
По умолчанию в системе нет группы Логист, но вы можете создавать нужные вам группы пользователей.
changeSet.hasChangedField('shipped') and not user().hasGroup('logist')
- Пользователь может менять только определенные поля
changeSet.hasChangesExcluding(['status', 'first_name', 'last_name'])