Создаем триггер, который при установке значения поля "Статус" проставляет текущее время в поле "Завершено" и текущего пользователя в поле "Завершил"
Ссылка на форму задачи в демоверсии:
Пользователь изменяет поле "Статус" на "Выполнено" и сохраняет запись.
В поле "Завершено" автоматически проставляется текущее время, а в поле "Завершил" - текущий пользователь
Создаем тригер, который срабатывает на update поля "Статус". Он проверяет новое значение "Статуса", и если оно соответствует значению "Выполнено", проставляет в нужные поля данные.
Ссылка на форму сущности "Задачи":
Ссылка на тригер в демоверсии:
Указываем настройки:
BEFORE-триггер выполняется до вставки и/или изменения записи, поэтому значения ее полей можно перед вставкой изменить прямо в триггере.
AFTER-триггер выполняется после вставки и/или изменения записи, поэтому изменения значений полей записи приведут к еще одному update-у
Пишем код триггера:
export default async function handleEvent(event, args) {
/* В event - данные о триггере и идентификатор записи, на которую он сработал
в args - измененные поля и их новые значения */
const str = 'Trigger "fill_actions_completed_datetime" ' + JSON.stringify(event)
+ '\n args: ' + JSON.stringify(args);
FunDB.writeEvent(str);
/* Проверяем соответствует ли новое значение поля "Статус" - статусу "Выполнено"
В этом примере статус Выполнено имеет идентификатор = 7 */
if (args.stage === 7) {
const now = new Date();
/* Добавляем к списку изменяемых полей "Завершено" с текущим временем
в качестве значения поля и "Завершил" с идентификатором текущего пользователя */
args.completed_datetime = now;
args.completed_person = await getPersonId();
}
else {
/* Если статус != "Выполнено" - очищаем поля */
args.completed_datetime = null;
args.completed_person = null;
}
/* В BEFORE-триггере после return args происходит update всех значений
полей из args (stage, completed_datetime, completed_person) */
return args;
}
Реализацию функции getPersonId() можно посмотреть тут
https://acmeinc.ozma.org/views/admin/module_form?id=2
Готово. Теперь при заполнении поля "Статус" значением "Выполнено" будут фиксироваться время и пользователь, завершивший задачу.