Плановая дата завершения задания во временной зоне автора или исполнителя
Плановая дата завершения задания во временной зоне автора или исполнителя¶
Так же вместе со временными зонами и возможностью отправлять задачи, указывая время в квантах, появилась возможность указать - как трактовать плановую дату. Данная возможность доступна в случае, если задание отправляется по-старому (с указанием плановой даты), и позволяет указать, что переданная дата относится к временной зоне исполнителя задания, автора задания, или же не пытаться интерпретировать дату никак и использовать без каких-либо манипуляций. В классе CardTask
за это отвечает свойство PlannedType
. Оно принимает три значения перечисления:
-
None
- с датой завершения не производится изменений. Дата загружается и сохраняется как есть. -
InAuthorTime
- дата изменяется в соответствии с временной зоной автора задания. -
InPerformerTime
- дата изменяется в соответствии с временной зоной исполнителя задания.
Если с первым случаем, а по совместительству - значением по умолчанию (None), всё понятно, то для InAuthorTime и InPerformerTime - есть особенности.
InAuthorTime
- подразумевает, что переданный при создании задания Planned
относится к временной зоне автора задания. И значит из него необходимо вычесть смещение временной зоны автора перед сохранением в базу. Допустим мы некий сотрудник “А” в Москве (UTC+3) и мы ставим задачу сотруднику “Б” в Новосибирске (UTC+7). И мы хотим, чтобы задание было выполнено к некоторой дате к 14.00 по Москве. Если в CardTask
будет установлено PlannedType
= CardTaskPlannedType.InAuthorTime
, и дата переданная с клиента не будет никак модифицирована, то при создании такого задания через WorkflowAPI будет передана дата (Planned) с временем 14.00, а в базу попадёт дата с 11.00, т.к. будут вычтены 3 часа смещения временной зоны автора. Для исполнителя же эта дата будет со временем 18.00, т.к. по его временной зоне в это время будет 18.00 (11.00 + 7 часов смещения)
Tip
Настройка “Игнорировать часовой пояс” в контроле даты/времени позволяет не приводить ведённые пользователем дату/время к UTC относительно локального времени пользователя и передаёт их на сервер – “как есть”.
InPerformerTime
- подразумевает, что переданный при создании задания Planned
относится к временной зоне исполнителя задания. И значит из него необходимо вычесть смещение временной зоны исполнителя перед сохранением в базу. Опять же предположим, что мы некий сотрудник “А” в Москве (UTC+3) и мы ставим задачу сотруднику “Б” в Новосибирске (UTC+7). И мы хотим, чтобы задание было выполнено к некоторой дате к 14.00 по Новосибирску. Если в CardTask
будет установлено PlannedType
= CardTaskPlannedType.InPerformerTime
, и дата, переданная с клиента, не будет никак модифицирована, то будет передана дата (Planned) с временем 14.00, а в базу попадёт дата с 07.00, т.к. будут вычтены 7 часов смещения временной зоны исполнителя. И для исполнителя эта дата будет со временем 14.00, т.к. по его временной зоне в это время будет именно 14.00 (07.00 + 7 часов смещения)