Описание: Сохранить одну или несколько записей учёта времени. Поведение зависит от типа контента каждой записи:
- Списание времени (
content_type_id=3E50F9CF-D408-410C-AD65-BAB0B6B744C4, обычная ручная запись) — длительность (duration) автоматически вычисляется как разница междуend_dateиstart_dateзаписи. - Табель (
content_type_id=8E4CCA44-5257-4340-A13C-E79687671798, запись, создаваемая из планировщика задач) — метод сам находит существующую запись этого пользователя по задаче (task) и дате (date) и обновляет её (если не найдена — создаётся новая); дополнительно после сохранения пересчитывается и записывается в задачу суммарная длительность (duration) по всем записям типа "Табель", ссылающимся на эту задачу.
Перед сохранением для каждой записи проверяется дневной лимит рабочего времени: суммарная длительность всех записей пользователя за эту дату (без учёта самой обновляемой записи, если она уже существует) не должна превышать 12 часов — иначе запрос отклоняется с ошибкой.
🌐 HTTP-информация
- Метод:
POST - URL:
/Timesheets/api/timesheet/Update - Headers:
Content-Type: application/jsonAuthorization: <UserSessionToken>
📦 Тело запроса (Request Body)
Тело — массив объектов-записей.
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
id | Guid | Нет | ID обновляемой записи. Для новой записи "Списание времени" не указывается; для записи "Табель" может быть не указан — метод сам найдёт существующую запись по task+date+principal |
content_type_id | Guid | Да | Тип контента записи — "Списание времени" или "Табель" (см. GUID выше) |
principal | Guid | Да | ID пользователя, к которому относится запись |
task | Guid | Нет | ID задачи, к которой относится запись (обязательно для "Табель") |
date | DateTime | Да | Дата записи |
start_date | DateTime | Условно | Начало интервала — обязательно для "Списание времени" (используется для расчёта длительности) |
end_date | DateTime | Условно | Конец интервала — обязательно для "Списание времени" |
duration | decimal | Нет | Длительность в часах. Для "Списание времени" вычисляется автоматически из start_date/end_date, и переданное значение игнорируется |
Пример JSON-тела:
[
{
"content_type_id": "3e50f9cf-d408-410c-ad65-bab0b6b744c4",
"principal": "622dddbb-2db2-433d-9d3c-89f31ea22e64",
"date": "2026-09-16",
"start_date": "2026-09-16T09:00:00Z",
"end_date": "2026-09-16T18:00:00Z"
}
]
📤 Тело ответа (Response Body)
IItem — первая из сохранённых/обновлённых записей.
Если суммарная длительность записей пользователя за день превышает 12 часов, метод возвращает ошибку с указанием превышенного лимита.