Запрещаем пользователям "двигать задачи"

Запрещать пользователям "двигать задачи" может быть очень уместно в случае, когда, например, они должны перевести задачу в состояние "Выполненна", но не допускается изменение поставленных сроков. При этом, подразумевается, что пользователь ответственный по задаче И (как обязательное условие) - НЕ автор. Свои задача, по которым он автор (сам себе поставил), путь делает что угодно.

В самой карточке редактирования логику реализовать очень легко - достаточно в сервисе Tasks\General\Main Grid\scr_TaskEdit найти обработчик события function wnd_TaskEditOnPrepare(Window) и перед закрывающей скобкой вставить код:

if (!Connector.CurrentUser.IsAdmin || (dlData.Dataset.Values('AuthorID') != Connector.CurrentUser.ContactID)) {
    edtStartDate.IsEnabled = false;
    edtDueDate.IsEnabled = false;
} else {
    edtStartDate.IsEnabled = true;
    edtDueDate.IsEnabled = true;
}

Это сделает поля "Дата начала" и "Дата завершения" в карточке задачи неактивными в случае если выполняется вышеописанное условие.

Но, есть такой замечательный элемент в разделе задач - Расписание. И в нем, задачу можно просто пеертянуть. Как тут быть? Выход есть: открыв сервис Tasks\General\SchedulerArea\wnd_SchedulerArea задаем обработчик события OnAfterDragEvent
taskscheduler.png
В обработчик вставьте код:

function ScheduleControlOnAfterDragEvent(ScheduleControl, Event, DoAccept) {
    if (!Connector.CurrentUser.IsAdmin ||
                  (dlEvents.Dataset.Values('AuthorID') != Connector.CurrentUser.ContactID)) {
        ShowInformationDialog('У Вас нет прав на изменение это изменение!');
        return;
    }
}

После сохранения и перезапуска клиентского ПО изменения вступят в силу.

Нравится

Поделиться

2 комментария

Паша, при такой реализации оно сообщение выдавать будет, а задачу все равно можно перемещать.

Чтобы задача возвращалась на место, нужно добавить:

function ScheduleControlOnAfterDragEvent(ScheduleControl, Event, DoAccept) {
     if (!Connector.CurrentUser.IsAdmin ||
                   (dlEvents.Dataset.Values('AuthorID') != Connector.CurrentUser.ContactID)) {
         ShowInformationDialog('У Вас нет прав на изменение это изменение!');
         DoAccept.Value = false;
         return;
     }
}

Аня, спасибо за замечание! :smile:
С DoAccept будет правильнее!

Показать все комментарии