REST API: описание запросов
Обязательные поля помечены символом звездочка (*) в комментариях к ним
Информация по версии API
Все запросы имеют необязательный параметр apiVersion (версия API). Пример: GET /rest/tasks/87554?apiVersion=2.0
Названия и типы полей в запросе и ответе могут отличаться в зависимости от значения параметра apiVersion.
Возможные значения параметра apiVersion: 1.0, 1.1, 1.2, 1.3, 1.4, 2.0
Значение версии API по умолчанию: apiVersion=1.0
Изменения вводились постепенно, и начиная с версии 1.0 до версии 2.0 было изменено:
- Тип запроса/ответа для полей с числовыми значениями. Ранее они передавались/отображались как строки (
"id": "100"), в версии 2.0 - как числа ("id": 100) - Тип запроса/ответа для полей с логическими значениями. Ранее они передавались/отображались как строки (
"archive": "f"), в версии 2.0 - как логические значения ("archive": false) - Тип запроса/ответа для полей со значениями типа "дата". Ранее они передавались/отображались как строки (
"deadline": "2019-06-06 17:31:00"), в версии 2.0 - как Unix Timestamp ("deadline": 1559831460) - Все вышеперечисленные изменения коснулись и значений полей внутри настраиваемых полей (внутри поля "custom_fields" для версий < 2.0 и внутр поля "fields" для версии 2.0). Ранее числа, логические значения и даты передавались/отображались как строки, в версии 2.0 - как числа, логические значения и Unix Timestamp, соответственно
- Передавались экранированные символы кавычек внутри структуры настраиваемых полей (
"custom_fields": "{\"id_obiektа\":{\"field_id\":95,\"value\":753}}"). В версии 2.0 - неэкранированные ("fields": "{"id_obiektа":{"field_id":95,"value":753}}") - В версии 2.0 также были несколько изменены адреса запросов и названия некоторых полей в запросах и ответах
apiVersion=2.0, если явно не указано иное.
Отсутствие описания ответа означает пустой json с http-кодом 200.
/rest/auth
POST /rest/auth/by-login
Неавторизованный пользователь (guest, role_id = 13), авторизованный пользователь.
Запрос на авторизацию.
Входные данные
// 2.0+
{
"login": "login", // логин
"password": "password" // пароль
}
status = 200
// 2.0+
{
"id": 6, // id пользователя
"login": "login", // логин пользователя
"fio": "ФИО", // имя пользователя
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": null, // id организации
"workgroup_ids": [
132,
232
], // массив id проектов, доступных пользователю
"role_id": 8, // id роли
"info": {
"email": "t@t.ru", // адрес электронной почты
"address": "Казань", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766" // телефон
},
"map_extent": [ // координаты положения карты: [min lon, min lat, max lon, max lat]
46.0927078887718,
53.9919087034184,
55.2997131017069,
56.6837870890742
],
"tracking": false, // включен ли трекинг
"glonass_id": null, // ГЛОНАСС-id для трекинга
"message_channel_id": 99, // канал входящих сообщений
"token": "87e3d7ae036b752cc90bd093bbfa1634" // token
} DELETE /rest/auth/tokens/:token
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Удаление пользовательской сессии (токена).
POST /rest/auth/pushes/subscribe
Запрос на регистрацию для получения PUSH-сообщений. Запрос поступает с мобильного устройства.
Входные данные
// 2.0+
{
"regId": "APA91bGmD0VObEd-KKuJ9J826c4o4VaxKL9VhvBQaecj3bY0RmrSp2aVmpsujTRPvYRDTvZDhVB9kxke4Q0pcivIM61PsPDd_Eh3k-0DUVdSSpXmgFAM4lsvxpuW1Re9dfQ2mSWMLiCr", // уникальный адрес устройства для получения
// PUSH-сообщений, генерируется при установке приложения
"fqn": "android://ru.gs.mapmobile" // полное имя приложения
} POST /rest/auth/pushes/unsubscribe
Запрос на отмену регистрации для получения PUSH-сообщений. Запрос поступает с мобильного устройства.
Входные данные
// 2.0+
{
"regId": "APA91bGmD0VObEd-KKuJ9J826c4o4VaxKL9VhvBQaecj3bY0RmrSp2aVmpsujTRPvYRDTvZDhVB9kxke4Q0pcivIM61PsPDd_Eh3k-0DUVdSSpXmgFAM4lsvxpuW1Re9dfQ2mSWMLiCr", // уникальный адрес устройства для получения PUSH-сообщений,
// генерируется при установке приложения
"fqn": "android://ru.gs.mapmobile" // полное имя приложения
} /rest/tasks
GET /rest/tasks/cache
Запрос на создание WebSocketChannel для возможности получения оповещений об операциях с заданиями (создание, обновление, удаление, добавление комментариев, ответов на комментарии) в формате JSON.
// ws://localhost:9000/tasks/cacheGET /rest/tasks/stats
Получение статистики по заданиям. Количество заданий с группировкой по этапам, приоритетам, видам работ, организациям-исполнителям, организациям-создателям.
Параметры фильтрации
date_fromtimestamp — дата начала, начиная с которой необходимо отфильтровать заданияdate_tilltimestamp — дата, до которой необходимо отфильтровать задания
/tasks/stats?date_from=1445845360&date_till=1448523760`
status = 200
// 2.0+
{
"statuses": [ // по этапам
{
"status_id": 1,
"count": 3
},
{
"status_id": 2,
"count": 2
},
{
"status_id": 3,
"count": 0
}
],
"priorities": [ // по приоритетам
{
"priority_id": 1,
"statuses": [
{
"status_id": 1,
"count": 1
},
{
"status_id": 2,
"count": 0
},
{
"status_id": 3,
"count": 2
}
]
}
],
"types": [ // по видам работ
{
"type_id": 1,
"statuses": [
{
"status_id": 1,
"count": 2
},
{
"status_id": 2,
"count": 2
},
{
"status_id": 3,
"count": 2
}
]
}
],
"organizations": [ // по организациям-создателям
{
"organization_id": 1,
"statuses": [
{
"status_id": 1,
"count": 0
},
{
"status_id": 2,
"count": 2
},
{
"status_id": 3,
"count": 2
}
]
}
],
"assignedOrganizations": [ // по назначенным организациям
{
"assigned_organization_id": 1,
"statuses": [
{
"status_id": 1,
"count": 2
},
{
"status_id": 2,
"count": 3
},
{
"status_id": 3,
"count": 4
}
]
}
]
} GET /rest/tasks/points
Быстрый запрос для получения списка заданий и точек.
Параметры фильтрации
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, organizationId=1,2.
stageinteger — стадия задания: 1 - в работе, 2 - завершено. Значение GET-параметра запроса перекроет значение PATH-параметра "stage" (/:stage) для запроса GET /tasks/listAfterId/:from/:limit/{:stage}withAssignedboolean — при значении withAssigned=true в список добавляются не новые и не закрытые задания, назначенные пользователю, либо его организации (если он админ) заданияwithClosedboolean — при значении withClosed=true в список добавляются задания со этапом выполнено, назначенные пользователю, либо его организации (если он админ)withArchiveboolean — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)onlyMyboolean — при значении onlyMy=true, в списке отображаются только задания, созданные пользователем. Параметры withAssigned, withClosed, onlyStatus при этом игнорируютсяonlyAssignedboolean — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначеныsearchstring — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, text, title. Например, search=7891+
onlyStatus— отображаются задания с соответствующими этапами+
onlyStates— отображаются задания, которые находятся в соответствующих состояниях+
priority_idlong — фильтр по приоритетам заданий (apiVersion >= 2.0)+
+type_idlong — фильтр по видам работ заданийgtUpdateDatetimestamp — отображаются задания, дата обновления которых больше указанной датыltUpdateDatetimestamp — отображаются задания, дата обновления которых меньше указанной датыgtDatetimestamp — отображаются задания, дата которых больше указанной датыltDatetimestamp — отображаются задания, дата которых меньше указанной датыgtDeadlinetimestamp — отображаются задания, deadline которых больше указанной датыltDeadlinetimestamp — отображаются задания, deadline которых меньше указанной даты+
assignedOrganizationIdlong — отображаются задания, которые назначены на указанные организации+
assignedUserIdlong — отображаются задания, которые назначены на указанных пользователей+
organizationIdlong — отображаются задания, созданные в указанных организациях+
workgroupIdlong — отображаются задания, относящиеся к указанным проектам+
creatorIdlong — отображаются задания, созданные указанными пользователями+
serviceObjectIdlong — фильтр по объектам обслуживания+
serviceObjectLayerIdlong — фильтр по слоям объектов обслуживания+
scheduleIdlong — фильтр по расписаниям:Главному администратору и Главному инспектору запрос с переданным параметром scheduleId вернет все шаблоны расписания.
Администратору организации и Инспектору организации запрос с переданным параметром scheduleId вернет все шаблоны расписания в рамках доступных проектов.
Пользователю организации запрос с переданным параметром scheduleId вернет те шаблоны, которые на него назначены.
isTemplateboolean — фильтр по шаблонным заданиям:Главному администратору и Главному инспектору запрос с переданным параметром isTemplate=true вернет все шаблонные задания.
Администратору организации и Инспектору организации запрос с переданным параметром isTemplate=true вернет все шаблонные задания в рамках доступных проектов.
Пользователю организации запрос с переданным параметром isTemplate=true вернет те шаблонные задания, которые на него назначены.
+
clusterIdlong — фильтр по кластерам организацийcustomFields— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, customFields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion < 2.0)fields— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion >= 2.0)Более подробно фильтрация по настраиваемым полям описана в разделе Фильтрация заданий по настраиваемым полям
expiredboolean :true — просроченные задания, т.е. такие, deadline которых уже прошел, а само задание находится в стадии В работе (stage = 1);
false — непросроченные задания, т.е. такие, deadline которых еще не прошел, а само задание находится в стадии В работе (stage = 1);
undefined — задания, для которых понятие просроченности не определено, т.е. такие, которые не имеют deadline'а, либо не находятся в стадии В работе.
sortBydefaultnews_date— поле, по которому осуществляется сортировкаsortDirectiondefaultDESC— направление сортировки (ASC, DESC)
/tasks/points
/tasks/points?limit=10&page=1&withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&priority_id=1,2
/tasks/points?limit=10&page=1>UpdateDate=1440835402<UpdateDate=1443513802>CreateDate=1438157002<Date=1443513802&expired=false
/tasks/points?limit=10&page=1&assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&stage=1
/tasks/points?limit=10&page=1&search=тест&fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}]
status = 200
// 2.0+
{
"items": [
{
"id": 789238, // id задания
"title": "тест", // текст задания
"lon": 49.1425763, // координаты точки - lat
"lat": 55.774754, // координаты точки - lon
"assigned_status": 1 // этап: 1 - новый, 2 - назначено, 3 - обратная связь, 4 - выполнено
},
... // следующие элементы списка
]
} GET /rest/tasks/geometry
Быстрый запрос для получения списка заданий и геометрии - точек и данных настраиваемых полей типа "геометрия".
Параметры фильтрации
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, organizationId=1,2.
stageinteger — стадия задания: 1 - в работе, 2 - завершено. Значение GET-параметра запроса перекроет значение PATH-параметра "stage" (/:stage) для запроса GET /tasks/listAfterId/:from/:limit/{:stage}withAssignedboolean — при значении withAssigned=true в список добавляются не новые и не закрытые задания, назначенные пользователю, либо его организации (если он админ) заданияwithClosedboolean — при значении withClosed=true в список добавляются задания со этапом выполнено, назначенные пользователю, либо его организации (если он админ)withArchiveboolean — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)onlyMyboolean — при значении onlyMy=true, в списке отображаются только задания, созданные пользователем. Параметры withAssigned, withClosed, onlyStatus при этом игнорируютсяonlyAssignedboolean — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначеныsearchstring — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, text, title. Например, search=7891+
onlyStatus— отображаются задания с соответствующими этапами+
onlyStates— отображаются задания, которые находятся в соответствующих состояниях+
priority_idlong — фильтр по приоритетам заданий (apiVersion >= 2.0)+
+type_idlong — фильтр по видам работ заданийgtUpdateDatetimestamp — отображаются задания, дата обновления которых больше указанной датыltUpdateDatetimestamp — отображаются задания, дата обновления которых меньше указанной датыgtDatetimestamp — отображаются задания, дата которых больше указанной датыltDatetimestamp — отображаются задания, дата которых меньше указанной датыgtDeadlinetimestamp — отображаются задания, deadline которых больше указанной датыltDeadlinetimestamp — отображаются задания, deadline которых меньше указанной даты+
assignedOrganizationIdlong — отображаются задания, которые назначены на указанные организации+
assignedUserIdlong — отображаются задания, которые назначены на указанных пользователей+
organizationIdlong — отображаются задания, созданные в указанных организациях+
creatorIdlong — отображаются задания, созданные указанными пользователями+
serviceObjectIdlong — фильтр по объектам обслуживания+
serviceObjectLayerIdlong — фильтр по слоям объектов обслуживания+
scheduleIdlong — фильтр по расписаниям+
clusterIdlong — фильтр по кластерам организацийcustomFields— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, customFields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion < 2.0)fields— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion >= 2.0)Более подробно фильтрация по настраиваемым полям описана в разделе Фильтрация заданий по настраиваемым полям
expiredboolean :true — просроченные задания, т.е. такие, deadline которых уже прошел, а само задание находится в стадии В работе (stage = 1);
false — непросроченные задания, т.е. такие, deadline которых еще не прошел, а само задание находится в стадии В работе (stage = 1);
undefined — задания, для которых понятие просроченности не определено, т.е. такие, которые не имеют deadline'а, либо не находятся в стадии В работе.
sortBydefaultnews_date— поле, по которому осуществляется сортировкаsortDirectiondefaultDESC— направление сортировки (ASC, DESC)
/tasks/geometry?limit=10&page=1&withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&priority_id=1,2
/tasks/geometry?limit=10&page=1>UpdateDate=1440835402<UpdateDate=1443513802>CreateDate=1438157002<Date=1443513802&expired=false
/tasks/geometry?limit=10&page=1&assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&stage=1
/tasks/geometry?limit=10&page=1&search=тест&fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}]
status = 200
// 2.0+
{
"items": [
{
"id": 789238, // id задания
"title": "тест", // текст задания
"lon": 49.1425763, // координаты точки - lat
"lat": 55.774754, // координаты точки - lon
"assigned_status": 1, // этап: 1 - новый, 2 - назначено, 3 - обратная связь, 4 - выполнено
"fields": { // json-объект, хранящий значения настраиваемых полей тпа "геометрия" в формате:
"Geometrija": { // {"транслит русского названия поля": {
"field_id": 8, // "field_id": <ID>,
"value": { // "value": <значение>
"coordinates": [ // }}
[
37.54096936955436,
55.9499035987994
],
[
37.558478490656356,
55.95202252412895
],
[
37.58148066935899,
55.95914896382962
]
],
"distance": 6.484990692549826,
"type": "LineString",
"description": "Маршрут до места назначения",
"name": "Маршрут",
"pointsCount": 3
}
}
}
},
... // следующие элементы списка
]
} GET /rest/tasks/distribution
Статистика по количеству заданий в разрезе видов работ, приоритетов, этапов.
Параметры фильтрации
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, organizationId=1,2.
stageinteger — стадия задания: 1 - в работе, 2 - завершено. Значение GET-параметра запроса перекроет значение PATH-параметра "stage" (/:stage) для запроса GET /tasks/listAfterId/:from/:limit/{:stage}withAssignedboolean — при значении withAssigned=true в список добавляются не новые и не закрытые задания, назначенные пользователю, либо его организации (если он админ) заданияwithClosedboolean — при значении withClosed=true в список добавляются задания со этапом выполнено, назначенные пользователю, либо его организации (если он админ)withArchiveboolean — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)onlyMyboolean — при значении onlyMy=true, в списке отображаются только задания, созданные пользователем. Параметры withAssigned, withClosed, onlyStatus при этом игнорируютсяonlyAssignedboolean — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначеныsearchstring — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, text, title. Например, search=7891+
onlyStatus— отображаются задания с соответствующими этапами+
onlyStates— отображаются задания, которые находятся в соответствующих состояниях+
priority_idlong — фильтр по приоритетам заданий (apiVersion >= 2.0)+
+type_idlong — фильтр по видам работ заданийgtUpdateDatetimestamp — отображаются задания, дата обновления которых больше указанной датыltUpdateDatetimestamp — отображаются задания, дата обновления которых меньше указанной датыgtDatetimestamp — отображаются задания, дата которых больше указанной датыltDatetimestamp — отображаются задания, дата которых меньше указанной датыgtDeadlinetimestamp — отображаются задания, deadline которых больше указанной датыltDeadlinetimestamp — отображаются задания, deadline которых меньше указанной даты+
assignedOrganizationIdlong — отображаются задания, которые назначены на указанные организации+
assignedUserIdlong — отображаются задания, которые назначены на указанных пользователей+
organizationIdlong — отображаются задания, созданные в указанных организациях+
workgroupIdlong — отображаются задания, относящиеся к указанным проектам+
creatorIdlong — отображаются задания, созданные указанными пользователями+
serviceObjectIdlong — фильтр по объектам обслуживания+
serviceObjectLayerIdlong — фильтр по слоям объектов обслуживания+
scheduleIdlong — фильтр по расписаниям:Главному администратору и Главному инспектору запрос с переданным параметром scheduleId вернет все шаблоны расписания.
Администратору организации и Инспектору организации запрос с переданным параметром scheduleId вернет все шаблоны расписания в рамках доступных проектов.
Пользователю организации запрос с переданным параметром scheduleId вернет те шаблоны, которые на него назначены.
isTemplateboolean — фильтр по шаблонным заданиям:Главному администратору и Главному инспектору запрос с переданным параметром isTemplate=true вернет все шаблонные задания.
Администратору организации и Инспектору организации запрос с переданным параметром isTemplate=true вернет все шаблонные задания в рамках доступных проектов.
Пользователю организации запрос с переданным параметром isTemplate=true вернет те шаблонные задания, которые на него назначены.
+
clusterIdlong — фильтр по кластерам организацийcustomFields— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, customFields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion < 2.0)fields— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion >= 2.0)Более подробно фильтрация по настраиваемым полям описана в разделе Фильтрация заданий по настраиваемым полям
expiredboolean :true — просроченные задания, т.е. такие, deadline которых уже прошел, а само задание находится в стадии В работе (stage = 1);
false — непросроченные задания, т.е. такие, deadline которых еще не прошел, а само задание находится в стадии В работе (stage = 1);
undefined — задания, для которых понятие просроченности не определено, т.е. такие, которые не имеют deadline'а, либо не находятся в стадии В работе.
sortBydefaultnews_date— поле, по которому осуществляется сортировкаsortDirectiondefaultDESC— направление сортировки (ASC, DESC)
/tasks/distribution?withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&priority_id=1,2
/tasks/distribution?gtUpdateDate=1440835402<UpdateDate=1443513802>CreateDate=1438157002<Date=1443513802&expired=false
/tasks/distribution?assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&stage=1
/tasks/distribution?search=тест&fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}]
status = 200
// 2.0+
{
"type": { // расклад количества заданий по видам работ
1: 1021, // id вида работ : количество заданий
2: 879,
3: 699
},
"priority": { // расклад количества заданий по приоритетам
1: 6625,
2: 12211,
3: 3644
},
"stage": { //расклад количества заданий по стадиям: 1 - в работе, 2 - завершено
0: 5,
1: 22457,
2: 18
},
"status": { // расклад количества заданий по этапам
1: 22245,
2: 197,
3: 8,
4: 30
}
}
} GET /rest/tasks/states
Список всех возможных состояний заданий.
status = 200
// 2.0+
{
"items": [
{
"id": 11, // id состояния
"name": "assigned_me", // название состояния
"field": "assigned_user_id", // поле, по которому осуществляется проверка
"value": true, // значение, которое оно должно принимать
"sign": null, // знак для сравнения
"field_from_session": null, // поле в сессии, если нужно сравнивать с ним
"role": null // служебное поле
},
... // следующие элементы списка состояний
]
} GET /rest/tasks/capabilities
Получение списка возможных действий с заданиями (capability).
status = 200
// 2.0+
{
"items": [
{
"id": 2, // id действия
"label": "Удалить задание" // название действия
"name": "delete", // кодовое название действия
"default": false // разрешеное ли действие по умолчанию
},
... // следующие элементы списка действий
]
} GET /rest/tasks/allowed
Получение списка правил, доступных роли текущего пользователя. Правила описывают состояния (states), в которых должно находиться задание, чтобы определенное действие (capability) было доступно роли (role) пользователя. Если для роли не прописано какое-то действие, оно для нее не доступно. Если в поле состояний (states) стоит null, действие доступно роли при любых состояниях.
status = 200
// 2.0+
{
"items": [
{
"id": 38, // id правила
"capability_id": 1, // id действия
"states": [
1,
2
] // массив id состояний, либо null
},
{
"id": 14,
"capability_id": 7,
"states": null
},
{
"id": 159,
"capability_id": 7,
"states": [
18
]
},
... // следующие элементы списка
]
} GET /rest/tasks/tracking
Список информации о входе/выходе пользователей в зоны действия заданий.
Параметры фильтрации
pageinteger default1— номер запрашиваемой страницыlimitinteger default25— количество записей на странице
status = 200
// 2.0+
// /tasks/tracking?page=2&limit=5
{
"items": [ // Список записей о входе/выходе пользователей в зоны действия заданий
{
"id": 17, // id записи
"user": { // информация по пользователю
"id": 719, // id пользователя
"fio": "Игорь Зиновьев" // ФИО пользователя
},
"coordinate": { // информация по точке (центр зоны задания)
"id": 24257, // id точки
"lon": 49.142077, // долгота
"lat": 55.774431 // широта
},
"date": 1521620985, // время действия (входа/выхода)
"inside": false, // характеристика нахождения пользователя внутри (true) или вне (false) зоны действия задания
// true - при изменении задания (Исполнитель находится внутри зоны действия задания/ Исполнитель находится вне зоны действия задания)
// false - при перемещении пользователя (Исполнитель вошел в зону действия задания/Исполнитель покинул зону действия задания)
}
]
} GET /rest/tasks
Для пользователя организации "Население" (people_dep = true) в ответе отобразятся только созданные им задания. Для пользователя организации, отличной от "Население" (people_dep = false), в ответе отобразятся все задания его организации. Для пользователя без организации (например, главного администратора) в ответе отобразятся все задания всех организаций.
Список всех заданий, доступных пользователю.
Параметры фильтрации
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, organizationId=1,2.
stageinteger — стадия задания: 1 - в работе, 2 - завершено. Значение GET-параметра запроса перекроет значение PATH-параметра "stage" (/:stage) для запроса GET /tasks/listAfterId/:from/:limit/{:stage}withAssignedboolean — при значении withAssigned=true в список добавляются не новые и не закрытые задания, назначенные пользователю, либо его организации (если он админ) заданияwithClosedboolean — при значении withClosed=true в список добавляются задания со этапом выполнено, назначенные пользователю, либо его организации (если он админ)withArchiveboolean — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)onlyMyboolean — при значении onlyMy=true, в списке отображаются только задания, созданные пользователем. Параметры withAssigned, withClosed, onlyStatus при этом игнорируютсяonlyAssignedboolean — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначеныsearchstring — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, text, title. Например, search=7891+
onlyStatus— отображаются задания с соответствующими этапами+
onlyStates— отображаются задания, которые находятся в соответствующих состояниях+
priority_idlong — фильтр по приоритетам заданий (apiVersion >= 2.0)+
+type_idlong — фильтр по видам работ заданийgtUpdateDatetimestamp — отображаются задания, дата обновления которых больше указанной датыltUpdateDatetimestamp — отображаются задания, дата обновления которых меньше указанной датыgtDatetimestamp — отображаются задания, дата которых больше указанной датыltDatetimestamp — отображаются задания, дата которых меньше указанной датыgtDeadlinetimestamp — отображаются задания, deadline которых больше указанной датыltDeadlinetimestamp — отображаются задания, deadline которых меньше указанной даты+
assignedOrganizationIdlong — отображаются задания, которые назначены на указанные организации+
assignedUserIdlong — отображаются задания, которые назначены на указанных пользователей+
organizationIdlong — отображаются задания, созданные в указанных организациях+
workgroupIdlong — отображаются задания, относящиеся к указанным проектам+
creatorIdlong — отображаются задания, созданные указанными пользователями+
parentIdlong — фильтр по родительским заданиям+
serviceObjectIdlong — фильтр по объектам обслуживания+
serviceObjectLayerIdlong — фильтр по слоям объектов обслуживания+
scheduleIdlong — фильтр по расписаниям:Главному администратору и Главному инспектору запрос с переданным параметром scheduleId вернет все шаблоны расписания.
Администратору организации и Инспектору организации запрос с переданным параметром scheduleId вернет все шаблоны расписания в рамках доступных проектов.
Пользователю организации запрос с переданным параметром scheduleId вернет те шаблоны, которые на него назначены.
isTemplateboolean — фильтр по шаблонным заданиям:Главному администратору и Главному инспектору запрос с переданным параметром isTemplate=true вернет все шаблонные задания.
Администратору организации и Инспектору организации запрос с переданным параметром isTemplate=true вернет все шаблонные задания в рамках доступных проектов.
Пользователю организации запрос с переданным параметром isTemplate=true вернет те шаблонные задания, которые на него назначены.
+
clusterIdlong — фильтр по кластерам организацийfields— отображаются задания, отфильтрованные по значениям настраиваемых полей. Например, fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}] (apiVersion >= 2.0)Более подробно фильтрация по настраиваемым полям описана в разделе Фильтрация заданий по настраиваемым полям
expiredboolean :true — просроченные задания, т.е. такие, deadline которых уже прошел, а само задание находится в стадии В работе (stage = 1);
false — непросроченные задания, т.е. такие, deadline которых еще не прошел, а само задание находится в стадии В работе (stage = 1);
undefined — задания, для которых понятие просроченности не определено, т.е. такие, которые не имеют deadline'а, либо не находятся в стадии В работе.
sortBydefaultnews_date— поле, по которому осуществляется сортировкаДопустимые поля для сортировки: news_date, news_type_id, category_id. Также допустима сортировка по удаленности от указанной точки. В этом случае не указывается поле для сортировки, но указываются дополнительные параметры с координатами точки lon (долгота), lat (широта) и направление сортировки в параметре sortDirection. Сортировка по удаленности от указанной точки ведется только по тем заданиям, которые имеют точку.
sortDirectiondefaultDESC— направление сортировки (ASC, DESC)londouble — координата долготы для сортировки заданий по удаленности от точкиlatdouble — координата широты для сортировки заданий по удаленности от точкиpageinteger default1— номер запрашиваемой страницыlimitinteger default25— количество записей на странице
/tasks?withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&priority_id=1,2
/tasks?gtUpdateDate=1440835402<UpdateDate=1443513802>CreateDate=1438157002<Date=1443513802&expired=false
/tasks?assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&stage=1
/tasks?search=тест&fields=[{"name":"gorod","op":"EQ","value":"Казань"},{"name":"Telefon","op":"NOT NULL"}]
status = 200
// 2.0+
{
"items": [
{
"id": 786847, // id задания
"title": "Ямы на дорогах", // заголовок
"user_id": 363, // id создателя задания
"user_fio": "Иванов Иван", // ФИО создателя задания
"text": "Ямы на дорогах в центре города на ул.Профсоюзная", // описание
"organization_id": 1, // id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"organization_name": "Население", // название назначенной организации
"organization_logo": "logo_3.png", // логотип организации
"workgroup_id": 188, // id проекта
"date": 1619685526, // дата создания задания
"deadline": 1619771926, // дедлайн
"expired_date": 1619771926, // дата, когда задание было просрочено
"stage": 1, // стадия задания: 1 - в работе, 2 - завершено
"type_id": 1, // id вида работ задания
"type_name": "Аварии", // название вида работ задания
"type_icon": "icon_7.jpg", // пиктограмма вида работ задания
"priority_id": 2, // id приоритета
"priority_name": "Дополнительные", // название приоритета
"status_id": 1, // id этапа
"status_name": "Рассмотрение", // название этапа
"num_main_photo": 1, //порядковый номер фотографии, которая будет в заголовке.
"archive": false, // архивное задания
"system_data": null, // поле для интеграционных целей
"update_date": 1619685526, // дата изменения задания
"is_template": false, // шаблонное задание
"assigned_user_id": 719, // id назначенного пользователя
"assigned_user_fio": "Петров Иван", // ФИО назначенного пользователя,
"assigned_organization_id": 312, // id назначенной организации
"assigned_organization_name": null // название назначенной организации
"lon": 49.1421403, // координаты точки - lon
"lat": 55.774427, // координаты точки - lat
"date": 1619685526, // дата создания задания
"unread_message_count": 3, // количество непрочитанных сообщений
"service_object_layer_id": 1493, // id слоя объекта обслуживания
"service_object_id": 7, // id объекта обслуживания
"fields": { // json-объект, хранящий значения настраиваемых полей в формате:
"Dop_pole_dlya_testov": { // {"транслит русского названия поля": {
"field_id": 19, // "field_id": <ID>,
"value": 12345 // "value": <значение>
} // }}
},
"parent": { // родительское задание
"id": 2,
"title": "Ямы",
"organization_id": 3,
"organization_name": "Контроль дорог",
"organization_logo": null,
"stage": 1,
"type_id": 1,
"type_name": "Аварии",
"type_icon": "2.png",
"priority_id": 1,
"priority_name": "Плановые",
"status_id": 2,
"status_name": "назначено",
"assigned_user_id": 95,
"assigned_user_fio": "Петров Иван",
"assigned_organization_id": 101,
"assigned_organization_name": "Ремонт дорог",
"date": 1619684526
},
"attachments": [ // прикрепленные файлы
{
"id": 54666, // id файла
"num": 1, // порядковый номер файла
"name": "Nature.jpg", // исходное название файла
"description": "New photo", // описание файла
"extension": "jpg", // расширение файла
"file_name": "8ce1c640-e2c6-1004-8171-1dcd61b183b4.jpg", // название файла на сервере
"parent_photo_id": 54500, // для фотографий: id родительской фотографии
"link": null, // для видеофайлов: ссылка, если видеофайл находится не на сервере; для файлов других типов null
"sticker": { // стикер, прикрепленный к файлу
"id": 76, // id
"title": "Тестовый стикер" // название
}
"create_date": 1533215550, // дата добавления файла
"deleted": false, // удален файл или нет
"size": 1288395, // размер файла в байтах
"file_source": "device_camera", // источник файла ("device_camera"/"app_camera"/app_redactor/"gallery"/"dictaphone")
"attachment": { // информация по времени и месту прикрепления файла
"time": 1533111159, // время прикрепления файла
"time_provider": "system", // источник времени прикрепления файла
"location": { // информация по месту прикрепления файла
"location": [
55.56,
46.67
], // координаты места прикрепления файла
"provider": "gps", // источник координат места прикрепления файла
"accuracy": 12.5, // точность координат места прикрепления файла
"distance_to_task": 102.363663636 // расстояние от точки задания до места прикрепления файла (в метрах)
}
},
"origin": { // информация по времени и месту создания файла
"time": 1533113954, // время создания файла
"time_provider": "ntp", // источник времени создания файла
"location": { // координаты места создания файла
"location": [
55.45,
46.89
], // координаты места создания файла
"provider": "gps", // источник координат места создания файла
"accuracy": 10, // точность координат места создания файла
"distance_to_task": 243.121212121 // расстояние от точки задания до места создания файла (в метрах)
}
},
"author": { // информация по платформе и приложению
"platform": "android", // платформа
"platform_version": "4.2", // версия платформы
"application": "MapMobile", // приложение
"application_version": "8.5" // версия приложения
},
"type": "PHOTO", // тип файла
"task_id": 786847 // id задания
}
],
},
... // следующие элементы списка заданий
],
"count": 59503 // количество заданий
} POST /rest/tasks
Добавление задания.
В массив attachments закладывается возможность прикрепления ярлыков к файлам
сразу при создании задания (поле sticker_id). При прикреплении ярлыков производится
проверка их доступности виду работ задания. При проверке учитывается свойство
ярлыков is_for_all (доступно всем видам работ). Если хотя бы один из указанных
ярлыков не соответствуют виду работ, будет получен код 403 . При передаче sticker_id: null или
отсутствии sticker_id считается, что к файлу не прикреплен никакой ярлык.
Входные данные
// 2.0+
{
"organization_id": 3, // id организации-создателя;
// поле должно быть передано, если создатель задания
// не принадлежит ни к одной организации
//
"date": 1619685526, // * дата задания
"title": "Яма на дороге", // * заголовок
"text": "Яма на дороге, перекресток ул Пушкина/Университетская", // * описание
"type_id": 1, // * id вида работ
"priority_id": 1, // * id приоритета
"parent_id": 2, // id родительского задания
"status_id": 1, // id этапа
//
"assigned_user_id": 95, // 0.24+ исполнитель
"assigned_organization_id": 101, // 0.24+ организация исполнителя при её наличии;
// также можно указать только организацию
// без указания конкретного исполнителя;
// организации должен быть доступен вид работ задания
//
"workgroup_id": 188, // id проекта
"deadline": 1619771926, // дедлайн;
// если не передан, то может быть проставлен
// на основе поля period_of_review_in_sec вида работ.
// Для этого:
// * вид работ должен иметь тип AT_CREATE
// * либо
// * вид работ должен иметь тип AT_UPDATE
// * и должен быть указан исполнитель
// (или только организация исполниеля)
//
"system_data": "версия: 1.1.1", // поле для интеграционных целей
//
"point": [ // координаты точки задания в формате [lon, lat]
55.56,
46.67
],
"tracking_on": true, // 0.18+ настройка включения/выключения оповещений
// о входе/выходе исполнителя в зону/из зоны задания
//
"zone_radius": 20, // 0.18+ размер зоны задания для оповещений о входе/выходе
// исполнителя в/из неё
//
"service_object_id": 7, // 0.24+ id объекта обслуживания
//
"fields": { // JSON-объект, состоящий из списка настраиваемых полей
"Pole": { // с их значениями в формате:
"field_id": 1 // {"транслит русского названия поля": {
"value": 12 // "field_id": <ID поля>,
} // "value": <значение>
}, // }}
//
"attachments": [ // 0.16+ файлы
{
"file": "dN2k9B9r42YbfDyz.jpg", // имя файла на сервере после закачки
"file_name": "моя фотография.jpg", // оригинальное имя файла
"description": "Второстепенное фото", // описание файла
"parent_photo_id": 54500, // для фотографий: id родительской фотографии
"file_type": "PHOTO", // тип файла, PHOTO/VIDEO/FILE/SOUND
"main_photo": true, // признак главного фото задания;
// можно применяться только к PHOTO;
// в attachments допускается не более одного
// main_photo = true
//
"sticker_id": 12, // id ярлыка для прикрепления к файлу
"file_source": "device_camera", // 0.21+ источник файла;
// device_camera/app_camera/app_redactor/gallery/dictaphone
//
"attachment": { // 0.21+ время и место прикрепления файла
"time": 1619685526, // время
"time_provider": "system", // источник времени, ntp/gps/system
"location": { // место
"provider": "gps", // источник координат
"accuracy": 12.5, // точность координат
"lonlat": [ // координаты
55.56,
46.67
],
"distance_to_task": 102.363663636 // расстояние от точки задания
// до места прикрепления файла, метры
}
},
"origin": { // 0.21+ время и место записи файла
"time": 1619685526, // время
"time_provider": "ntp", // источник времени, ntp/gps/system
"location": { // место
"provider": "gps", // источник координат, gps/network
"accuracy": 10.5, // точность координат
"lonlat": [ // координаты
55.45,
46.89
],
"distance_to_task": 102.65656556 // расстояние от точки задания
// до места записи файла, метры
}
},
"author": { // 0.21+ информация о приложении и платформе
"platform": "android", // платформа, iOS/android/desktop/web
"platform_version": "4.2", // версия платформы
"application": "MapMobile", // приложение, в котором был записан файл
"application_version": "8.5" // версия приложения
}
},
... // следующие элементы списка файлов
]
}
status = 200
// 2.0+
{
"id": 789249, // id созданного задания
"user_id": 6, // id создателя задания
"user_fio": "Главный Администратор", // ФИО создателя
"title": "Яма на дороге", // заголовок
"text": "Яма на дороге, перекресток ул Пушкина/Университетская", // описание
"organization_id": 3, // id организации создателя (для создателей без организации
// это значение указывается явно при создании задания)
"organization_name": "Контроль дорог", // название организации создателя задания
"organization_logo": null, // логотип организации
"workgroup_id": 188, // id проекта
"deadline": 1619771926, // дедлайн
"expired_date": null, // дата, когда задание было просрочено
"stage": 1, // стадия задания: 1 - в работе,
// 2 - завершено
"type_id": 1, // id вида работ задания
"type_name": "Аварии", // название вида работ задания
"type_icon": "icon_7.jpg", // пиктограмма вида работ задания
"priority_id": 1, // id приоритета
"priority_name": "Плановые", // название приоритета
"status_id": 1, // id этапа
"status_name": "рассмотрение", // название этапа
"num_main_photo": 1, // порядковый номер фотографии,
// которая будет в заголовке.
"archive": false, // архивное задание
"update_date": 1619685526, // дата обновления задания
"workgroup_id": 188, // id проекта
"assigned_organization_id": 101, // id назначенной организации
"assigned_organization_name": "Ремонт дорог", // название назначенной организации
"assigned_user_id": 95, // id назначенного пользователя
"assigned_user_fio": "Петров Иван", // ФИО назначенного пользователя
"lat": 46.67, // координаты точки - lat
"lon": 55.56, // координаты точки - lon
"date": 1619685526, // дата создания задания
"service_object_layer_id": 1493, // id слоя объекта обслуживания
"service_object_id": 7, // id объекта обслуживания
"fields": { // json-объект, хранящий значения настраиваемых полей в формате:
"Dop_pole_dlya_testov": { // {"транслит русского названия поля": {
"field_id": 19, // "field_id": <ID>,
"value": 12345 // "value": <значение>
} // }}
},
"parent": { // родительское задание
"id": 2,
"title": "Ямы",
"organization_id": 3,
"organization_name": "Контроль дорог",
"organization_logo": null,
"stage": 1,
"type_id": 1,
"type_name": "Аварии",
"type_icon": "2.png",
"priority_id": 1,
"priority_name": "Плановые",
"status_id": 2,
"status_name": "назначено",
"assigned_user_id": 95,
"assigned_user_fio": "Петров Иван",
"assigned_organization_id": 101,
"assigned_organization_name": "Ремонт дорог",
"date": 1618907926
},
"attachments": [ // прикрепленные файлы
{
"id": 54666, // id файла
... // следующие элементы
}
],
}
Более подробное описание прикрепленных файлов см. в GET /tasks
GET /rest/tasks/:id
Получение данных по конкретному заданию.
Права пользователей на выполнение данного запроса зависят от capability роли пользователя. Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы пользователь мог просмотреть задание, его роли должна быть доступна capability = show.
status = 200
// 2.0+
{
"task": {
"id": 789249, // id созданного задания
"user_id": 6, // id создателя задания
"user_fio": "Главный Администратор", // ФИО создателя
"title": "Яма на дороге", // заголовок
"text": "Яма на дороге, перекресток ул Пушкина/Университетская", // описание
"organization_id": 3, // id организации создателя (для создателей без организации
// это значение указывается явно при создании задания)
"organization_name": "Контроль дорог", // название организации создателя
"organization_logo": null, // логотип организации
"workgroup_id": 188, // id проекта
"deadline": 1619771926, // дедлайн
"stage": 1, // стадия задания: 1 - в работе,
// 2 - завершено
"type_id": 1, // id вида работ задания
"type_name": "Аварии", // название вида работ задания
"type_icon": "icon_7.jpg", // пиктограмма вида работ задания
"priority_id": 1, // id приоритета
"priority_name": "Плановые", // название приоритета
"status_id": 1, // id этапа
"status_name": "рассмотрение", // название этапа
"num_main_photo": null, // порядковый номер фотографии,
// которая будет в заголовке.
"archive": false, // архивное задание
"system_data": "версия: 1.1.1",
"update_date": 1619771926, // дата обновления задания
"assigned_organization_id": 3, // id назначенной организации
"assigned_organization_name": "Ремонт дорог", // название назначенной организации
"assigned_user_id": 613, // id назначенного пользователя
"assigned_user_fio": "Петров Иван", // ФИО назначенного пользователя
"lat": 46.67, // координаты точки - lat
"lon": 55.56, // координаты точки - lon
"date": 1619685526, // дата создания задания
"unread_message_count": 3, // количество непрочитанных сообщений
"service_object_layer_id": 1493, // id слоя объекта обслуживания
"service_object_id": 7, // id объекта обслуживания
"fields": { // json-объект, хранящий значения настраиваемых полей в формате:
"Dop_pole_dlya_testov": { // {"транслит русского названия поля": {
"field_id": 19, // "field_id": <ID>,
"value": 12345 // "value": <значение>
} // }}
},
"parent": { // родительское задание
"id": 2,
"title": "Ямы",
"organization_id": 3,
"organization_name": "Контроль дорог",
"organization_logo": null,
"stage": 1,
"type_id": 1,
"type_name": "Аварии",
"type_icon": "2.png",
"priority_id": 1,
"priority_name": "Плановые",
"status_id": 2,
"status_name": "назначено",
"assigned_user_id": 95,
"assigned_user_fio": "Петров Иван",
"assigned_organization_id": 101,
"assigned_organization_name": "Ремонт дорог",
"date": 1618907926
},
"attachments": [ // прикрепленные файлы
{
"id": 54666, // id файла
... // следующие элементы
}
],
},
"configuration": {}
}
Более подробное описание прикрепленных файлов см. в GET /tasks
PATCH /rest/tasks/:id
Обновление задания.
Права пользователей на выполнение данного запроса зависят от capability роли пользователя. Понятие capability обозначает действие, которое можно выполнять с заданием. Права пользователей на выполнения данного запроса могут быть описаны следующим образом:
для изменения значения поля stage роль пользователя должна иметь capability со свойствами: capability_id = 6, capability_name = "confirm",
для изменения значения поля assigned_organization_id роль пользователя должна иметь capability со свойствами: capability_id = 7, capability_name = "assign_department",
для изменения значения поля assigned_user_id роль пользователя должна иметь capability со свойствами: capability_id = 8, capability_name = "assign_user",
для изменения значения поля assigned_status роль пользователя должна иметь capability со свойствами: capability_id = 9, capability_name = "assign_status",
для изменения значения поля text роль пользователя должна иметь capability со свойствами: capability_id = 3, capability_name = "edit".
Новые переданные файлы будут прикреплены к заданию и добавлены к ранее прикрепленным файлам.
Если массив "attachments" содержит файл с "main_photo":true, информацию по номеру главного фото берем из него. Независимо от того, было ли передано поле "photo_main" в основном JSON-объекте, оно будет проигнорировано. Если массив "attachments" не будет передан, или в нем не будет информации по номеру главного фото, информацию по номеру главного фото берем из поля "photo_main" в основном JSON-объекте. Если поле "photo_main" в основном JSON-объекте тоже не было передано, оставляем номер главного фото без изменений.
В массив "attachments" закладывается возможность прикрепления стикеров к файлам при изменении задания (поле "sticker_id"). При прикреплении стикеров производим проверку доступности указанных стикеров виду работ. При проверке учитываем свойство стикеров "is_for_all" (доступно всем видам работ). Если хотя бы один из указанных стикеров не соответствуют виду работ, выдаем 403. При передаче "sticker_id": null полагаем, что к файлу не прикреплен никакой стикер. Если поле "sticker_id" не было передано, полагаем, что к файлу не прикреплен никакой стикер.
При передаче поля "fields" происходит частичное изменение настраиваемых полей:
переданное настраиваемое поле, которое было прикреплено к заданию ранее, обновляется;
новое настраиваемое поле, прикрепляется к заданию и добавляется к ранее прикрепленным полям.
Для открепления всех настраиваемых полей необходимо передать null.
// 2.0+
{
"title": "Яма на дороге", // заголовок
"text": "Яма на дороге, перекресток ул Пушкина/Университетская", // описание
"status_id": 1, // id этапа
"assigned_organization_id": 3, // id назначенной организации
"assigned_user_id": 613, // id назначенной пользователя
"type_id": 1, // id вида работ
"stage": 1, // стадия задания: 1 - в работе, 2 - завершено
"priority_id": 1, // id приоритета
"parent_id": 2, // id родительского задания
"deadline": 1619771926, // дедлайн
"system_data": "версия: 1.1.1",
"archive": false, // архивное задание
//
"fields": { // JSON-объект, состоящий из списка настраиваемых полей
"Pole": { // с их значениями в формате:
"field_id": 1 // {"транслит русского названия поля": {
"value": 12 // "field_id": <ID поля>,
} // "value": <значение>
}, // }}
//
"point": [
55.56,
46.67
], // координаты точки в формате [lon, lat]; отправка null сотрёт точку; если поле отсутствует в JSON, изменений в БД не будет
"pointZoom": 14, // зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"tracking_on": true, // настройка включения/выключения оповещений о входе/выходе исполнителя в зону/из зоны задания; доступно для версий Cerebellum, начиная с 0.18
"zone_radius": 20, // размер зоны задания для оповещений о входе/выходе исполнителя в зону/из зоны задания; доступно для версий Cerebellum, начиная с 0.18
"update_comments": "Задание было назначено", //комментарии при обновлении
"photo_main": 1, // номер главного фото, начиная с 0 (среди ранее загруженных файлов), для версий Cerebellum до 0.16
"attachments": [ // передача файлов в массиве для версий Cerebellum от 0.16 и старше
{
"file": "dN2k9B9r42YbfDyz.jpg", // название файла после загрузки
"file_name": "1313410929241.jpg", // исходное название файла
"description": "Второстепенное фото", // описание файла
"parent_photo_id": 54500, // для фотографий: id родительской фотографии
"file_type": "PHOTO", // тип файла: "PHOTO" - фото, "VIDEO" - видео, "FILE" - файл, "SOUND" - аудио
"main_photo": false, // является ли фото главным
"sticker_id": 12, // id стикера для прикрепления к файлу
"file_source": "device_camera", // источник файла, тип String, возможные значения: "device_camera"/"app_camera"/app_redactor/"gallery"/"dictaphone"
"attachment": { // информация по времени и месту прикрепления файла
"time": 1619685526, // время прикрепления файла
"time_provider": "system", // источник времени прикрепления, тип String, возможные значения: "ntp"/"gps"/"system"
"location": { // информация по месту прикрепления
"provider": "gps", // источник координат места прикрепления, тип String, возможные значения: "gps"/"network"
"accuracy": 12.5, // точность координат места прикрепления, тип Double
"lonlat": [
55.56,
46.67
], // координаты места прикрепления в формате [lon, lat]
"distance_to_task": 102.363663636 // расстояние от точки задания до места прикрепления файла, тип Double, измеряется в метрах
}
},
"origin": { // информация по времени и месту записи файла
"time": 1619685526, // время записи файла
"time_provider": "ntp", // источник времени записи, тип String, возможные значения: "ntp"/"gps"/"system"
"location": { // информация по месту записи
"provider": "gps", // источник координат места записи, тип String, возможные значения: "gps"/"network"
"accuracy": 10.5, // точность координат места записи, тип Double
"lonlat": [
55.45,
46.89
], // координаты места записи в формате [lon, lat]
"distance_to_task": 342.212819281928 // расстояние от точки задания до места записи файла, тип Double, измеряется в метрах
}
},
"author": { // информация о приложении и платформе
"platform": "android", // платформа, тип String, возможные значения: "iOS"/"android"/"desktop"/"web"
"platform_version": "4.2", // версия платформы, тип String
"application": "MapMobile", // приложение, в котором был записан файл, тип String
"application_version": "8.5" // версия приложения, тип String
}
},
{
"file": "dN2k9B9r42YbreDyz.3gp", // название файла после загрузки
"file_name": "1313910929241.3gp", // исходное название файла
"description": "Вторая запись", // описание файла
"file_type": "VIDEO", // тип файла: "PHOTO" - фото, "VIDEO" - видео, "FILE" - файл, "SOUND" - аудио
"main_photo": false, // для видео false или null
"sticker_id": 11 // id стикера для прикрепления к файлу
"file_source": "gallery", // источник файла, тип String, возможные значения: "device_camera"/"app_camera"/app_redactor/"gallery"/"dictaphone"
"attachment": { // информация по времени и месту прикрепления файла
"time": 1619685526, // время прикрепления файла
"time_provider": "gps", // источник времени прикрепления, тип String, возможные значения: "ntp"/"gps"/"system"
"location": { // информация по месту прикрепления
"provider": "gps", // источник координат места прикрепления, тип String, возможные значения: "gps"/"network"
"accuracy": 120.5, // точность координат места прикрепления, тип Double
"lonlat": [
55.45,
46.37
], // координаты места прикрепления в формате [lon, lat]
"distance_to_task": 352.23535253 // расстояние от точки задания до места прикрепления файла, тип Double, измеряется в метрах
}
},
"origin": { // информация по времени и месту записи файла
"time": 1619685526, // время записи файла
"time_provider": "system", // источник времени записи, тип String, возможные значения: "ntp"/"gps"/"system"
"location": { // информация по месту записи
"provider": "gps", // источник координат места записи, тип String, возможные значения: "gps"/"network"
"accuracy": 100.5, // точность координат места записи, тип Double
"lonlat": [
55.44,
46.88
], // координаты места записи в формате [lon, lat]
"distance_to_task": 123.121212 // расстояние от точки задания до места записи файла, тип Double, измеряется в метрах
}
},
"author": { // информация о приложении и платформе
"platform": "android", // платформа, тип String, возможные значения: "iOS"/"android"/"desktop"/"web"
"platform_version": "4.2", // версия платформы, тип String
"application": "MapMobile", // приложение, в котором был записан файл, тип String
"application_version": "8.5" // версия приложения, тип String
}
},
{
"file": "dN2k9B9r42YbtDtz.m4a", // название файла после загрузки
"file_name": "1313410926541.m4a", // исходное название файла
"description": "Аудио запись", // описание файла
"file_type": "SOUND", // тип файла: "PHOTO" - фото, "VIDEO" - видео, "FILE" - файл, "SOUND" - аудио
"main_photo": null, // для аудио false или null
"sticker_id": null, // id стикера для прикрепления к файлу
"file_source": "dictaphone", // источник файла, тип String, возможные значения: "device_camera"/"app_camera"/app_redactor/"gallery"/"dictaphone"
"attachment": { // информация по времени и месту прикрепления файла
"time": 1619685526, // время прикрепления файла
"time_provider": "gps", // источник времени прикрепления, тип String, возможные значения: "ntp"/"gps"/"system"
"location": null // информация по месту прикрепления
},
"origin": { // информация по времени и месту записи файла
"time": 1619685526, // время записи файла
"time_provider": "system", // источник времени записи, тип String, возможные значения: "ntp"/"gps"/"system"
"location": null // информация по месту записи
},
"author": null // информация о приложении и платформе
},
{
"file": "dN2k9B9r42Ybsa.txt", // название файла после загрузки
"file_name": "1288324666.txt", // исходное название файла
"description": "Вторая запись", // описание файла
"file_type": "FILE", // тип файла: "PHOTO" - фото, "VIDEO" - видео, "FILE" - файл, "SOUND" - аудио
"main_photo": null, // для типа "FILE" false или null
"sticker_id": null, // id стикера для прикрепления к файлу
"attachment": { // информация по времени и месту прикрепления файла
"time": 1619685526, // время прикрепления файла
"time_provider": "gps", // источник времени прикрепления, тип String, возможные значения: "ntp"/"gps"/"system"
"location": null // информация по месту прикрепления
},
"origin": { // информация по времени и месту записи файла
"time": 1619685526, // время записи файла
"time_provider": "system", // источник времени записи, тип String, возможные значения: "ntp"/"gps"/"system"
"location": null // информация по месту записи
},
"author": null // информация о приложении и платформе
},
... // следующие элементы списка файлов
]
}
status = 200
// 2.0+
{
"id": 789249, // id созданного задания
"user_id": 6, // id создателя задания
"user_fio": "Главный Администратор", // ФИО создателя
"title": "Яма на дороге", // заголовок
"text": "Яма на дороге, перекресток ул Пушкина/Университетская", // описание
"organization_id": 3, // id организации создателя
"organization_name": "Контроль дорог", // название организации создателя
"organization_logo": null, // логотип организации
"workgroup_id": 188, // id проекта
"deadline": 1619771926, // дедлайн
"expired_date": 1619771926, // дата, когда задание было просрочено
"stage": 1, // стадия задания: 1 - в работе,
// 2 - завершено
"type_id": 1, // id вида работ задания
"type_name": "Аварии", // название вида работ задания
"type_icon": "icon_7.jpg", // пиктограмма вида работ задания
"priority_id": 1, // id приоритета
"priority_name": "Плановые", // название приоритета
"status_id": 1, // id этапа
"status_name": "рассмотрение", // название этапа
"num_main_photo": null, // порядковый номер фотографии,
// которая будет в заголовке.
"archive": false, // архивное задание
"system_data": "версия: 1.1.1",
"update_date": 1619771926, // дата обновления задания
"assigned_organization_id": 3, // id назначенной организации
"assigned_organization_name": "Ремонт дорог", // название назначенной организации
"assigned_user_id": 613, // id назначенного пользователя
"assigned_user_fio": "Петров Иван", // ФИО назначенного пользователя
"lat": 46.67, // координаты точки - lat
"lon": 55.56, // координаты точки - lon
"date": 1619685526, // дата создания задания
"service_object_layer_id": 1493, // id слоя объекта обслуживания
"service_object_id": 7, // id объекта обслуживания
"fields": { // json-объект, хранящий значения настраиваемых полей в формате:
"Dop_pole_dlya_testov": { // {"транслит русского названия поля": {
"field_id": 19, // "field_id": <ID>,
"value": 12345 // "value": <значение>
} // }}
},
"parent": { // родительское задание
"id": 2,
"title": "Ямы",
"organization_id": 3,
"organization_name": "Контроль дорог",
"organization_logo": null,
"stage": 1,
"type_id": 1,
"type_name": "Аварии",
"type_icon": "2.png",
"priority_id": 1,
"priority_name": "Плановые",
"status_id": 2,
"status_name": "назначено",
"assigned_user_id": 95,
"assigned_user_fio": "Петров Иван",
"assigned_organization_id": 101,
"assigned_organization_name": "Ремонт дорог",
"date": 1618907926
},
"attachments": [ // прикрепленные файлы
{
"id": 54666, // id файла
... // следующие элементы
}
],
}
Более подробное описание прикрепленных файлов см. в GET /tasks
DELETE /rest/tasks/:id
Удаление задания.
Права пользователей на выполнение этого запроса зависят от capability роли пользователя. Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы пользователь мог удалить задание, его роль должна иметь capability со свойствами: capability_id = 2, capability_name = "delete".
GET /rest/tasks/:id/can/*capabilities
Проверка прав пользователя на задание: имеет ли пользователь право выполнять указанные действия (capabilities) с заданием. Действия (capabilities) перечисляются через запятую в строке запроса.
/tasks/123/can/show,delete
status = 200
// 2.0+
{
"show": true, // действие, доступно или нет
"delete": true // действие, доступно или нет
} GET /rest/tasks/:id/track
Список информации о входе/выходе пользователя в зону действия задания.
Параметры фильтрации
pageinteger default1— номер запрашиваемой страницыlimitinteger default25— количество записей на странице
/tasks/123/track?page=2&limit=5
status = 200
// 2.0+
{
"items": [ // Список записей о входе/выходе пользователя в зону действия задания
{
"id": 17, // id записи
"user": { // информация по пользователю
"id": 719, // id пользователя
"fio": "Игорь Зиновьев" // ФИО пользователя
},
"coordinates": { // информация по точк (центр зоны задания)
"id": 24257, // id точки
"lon": 49.142077, // долгота
"lat": 55.774431 // широта
},
"date": 1521620985, // время действия (входа/выхода)
"inside": false, // характеристика нахождения пользователя внутри (true) или вне (false) зоны действия задания
// true - при изменении задания (Исполнитель находится внутри зоны действия задания/ Исполнитель находится вне зоны действия задания)
// false - при перемещении пользователя (Исполнитель вошел в зону действия задания/Исполнитель покинул зону действия задания)
}
] POST /rest/tasks/:id/rating
Клиент-создатель задания.
Права пользователей на выполнение этого запроса зависят от capability роли пользователя.
Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы выполнить это действие, его роль должна иметь capability со свойствами: capability_id = 1, capability_name = "show".
Поставить оценку указанному заданию. Оценку можно поставить, только если это ещё не было сделано, либо если она была удалена. Запрос разрешается выполнять только пользователю с ролью Клиент, который создал задание. Оценка является целым числом и обязательно должна быть передана. Комментарий является необязательным. В базу будет записано время проставления оценки и пользователь, который её проставил.
// 2.0+
{
"rating": 5, // * Оценка, целое число от 1 до 5
"comment": "Все отлично"
}
status = 200
// 2.0+
{
"rating": 5, // Оценка, Int от 1 до 5
"comment": "Все отлично",
"datetime": 1234567890, // время проставления оценки, Timestamp
"last_update": 1234567890 // время последнего изменения, Timestamp
"author": { // пользователь, который поставил оценку
"id": 6,
"fio": "Иванов Петр"
}
}
status = 400
// 2.0+
{
"error_description": "rating: Обязательное поле."
}
status = 403
// 2.0+
{
"error_description": "Нет прав доступа"
}
status = 403
// 2.0+
{
"error_description": "Оценка уже была поставлена."
} GET /rest/tasks/:id/rating
Клиент-создатель задания, главный администратор, главный инспектор, администратор организации, инспектор организации.
Права пользователей на выполнение этого запроса зависят от capability роли пользователя.
Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы выполнить это действие, его роль должна иметь capability со свойствами: capability_id = 1, capability_name = "show".
Получить оценку, поставленную заданию.
status = 200
// 2.0+
{
"rating": 5, // Оценка, Int от 1 до 5
"comment": "Все отлично",
"datetime": 1234567890, // время проставления оценки, Timestamp
"last_update": 1234567890 // время последнего изменения, Timestamp
"author": { // пользователь, который поставил оценку
"id": 6,
"fio": "Иванов Петр"
}
}
status = 403
// 2.0+
{
"error_description": "Нет прав доступа"
}
status = 404
// 2.0+
{
"error_description": "Такого задания не существует!"
}
status = 404
// 2.0+
{
"error_description": "Оценки не существует."
} PATCH /rest/tasks/:id/rating
Клиент-создатель задания.
Права пользователей на выполнение этого запроса зависят от capability роли пользователя.
Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы выполнить это действие, его роль должна иметь capability со свойствами: capability_id = 1, capability_name = "show".
Проставить оценку указанному заданию. Разрешается выполнять только пользователю с ролью Клиент, который создал задание. К этому моменту оценка уже должна быть поставлена. Поля оценки и комментария в этом запросе необязательные, можно не присылать одно из них. Попытка не прислать оба поля не вызывает изменений в БД, пользователю отдаётся код 200. Попытка прислать null в качестве оценки вызывает 400 BadRequest.
// 2.0+
{
"rating": 4, // Оценка, целое число от 1 до 5
}
// 2.0+
{
"comment": "Не уложились в срок",
}
// 2.0+
{
"rating": null, // 400 Bad Request
}
// 2.0+
{ // Не вызывает изменений в БД
}
status = 200
// 2.0+
{
"rating": 5, // Оценка, Int от 1 до 5
"comment": "Все отлично",
"datetime": 1234567890, // время проставления оценки, Timestamp
"last_update": 1543312469 // время последнего изменения, Timestamp
"author": { // пользователь, который поставил оценку
"id": 6,
"fio": "Иванов Петр"
}
}
status = 200
// 2.0+
{
"rating": 4, // Оценка, Int от 1 до 5
"comment": "Не уложились в срок",
"datetime": 1234567890, // время проставления оценки, Timestamp
"last_update": 1543312469 // время последнего изменения, Timestamp
"author": { // пользователь, который поставил оценку
"id": 6,
"fio": "Иванов Петр"
}
}
status = 400
// 2.0+
{
"error_description": "rating: Обязательное поле."
}
status = 403
// 2.0+
{
"error_description": "Нет прав доступа"
}
status = 404
// 2.0+
{
"error_description": "Такого задания не существует!"
}
status = 404
// 2.0+
{
"error_description": "Такой оценки не существует!"
} DELETE /rest/tasks/:id/rating
Клиент-создатель задания.
Права пользователей на выполнение этого запроса зависят от capability роли пользователя.
Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы выполнить это действие, его роль должна иметь capability со свойствами: capability_id = 1, capability_name = "show".
Удалить оценку, поставленную заданию.
status = 403
// 2.0+
{
"error_description": "Нет прав доступа"
}
status = 404
// 2.0+
{
"error_description": "Такого задания не существует!"
}
status = 404
// 2.0+
{
"error_description": "Такой оценки не существует!"
} GET /rest/tasks/:id/comments/list
Получение списка комментариев к заданию.
Параметры фильтрации
pageinteger default1— номер запрашиваемой страницыlimitinteger default25— количество записей на страницеsortDirectiondefaultDESC— направление сортировки (ASC, DESC). Сортировка производится по номеру сообщения (первичный критерий) и дате (вторичный критерий для сообщений без номера)
status = 200
// 2.0+
{
"items": [
{
"id": 50029, // id комментария
"uuid": "1454bd95-3653-4499-ab39-9733af031312",
"date": 1619771926, // дата создания комментария
"update_text": "Заданию назначили организацию: \"Отдел разработки\"", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": { // информация по внесенным в задание изменениям
"id": 39983, // id изменения
"date": 1619771926, // дата изменения
"old_deadline": null, // значение дедлайна до изменения (если это значение было изменено, иначе null)
"new_deadline": null, // значение дедлайна до изменения (если это значение было изменено, иначе null)
"old_expired_date": null, // значение даты просроченности задания до изменения (если это значение было изменено, иначе null)
"new_expired_date": null, // значение даты просроченности задания после изменения (если это значение было изменено, иначе null)
"old_stage": null, // значение стадии до изменения (если это значение было изменено, иначе null)
"new_stage": null, // значение стадии после изменения (если это значение было изменено, иначе null)
"old_status": { // значение этапа до изменения (если это значение было изменено, иначе null)
"id": 1, // id этапа
"name": "новое" // название этапа
},
"new_status": { // значение этапа до изменения (если это значение было изменено, иначе null)
"id": 2, // id этапа
"name": "назначено" // название этапа
},
"old_assigned_organization": null, // значение assigned_organization до изменения (если это значение было изменено, иначе null)
"new_assigned_organization": { // значение assigned_organization после изменения (если это значение было изменено, иначе null)
"id": 188, // id организации
"name": "Отдел разработки" // название организации
},
"old_assigned_user": null, // значение assigned_user до изменения (если это значение было изменено, иначе null)
"new_assigned_user": { // значение assigned_user после изменения (если это значение было изменено, иначе null)
"id": 719, // id пользователя
"fio": "Игорь Зиновьев" // имя пользователя
},
"files_added": [], // список добавленных после изменения файлов
"files_deleted": [], // список удаленных после изменения файлов
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529 //id задания
},
"parent": null, // родительский комментарий
"fio": "Администратор", //ФИО пользователя, который сделал изменение
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529, //id задания
"chat_message_number": 99, // номер сообщения в чате задания
"system_message_code": null // код системного сообщения
},
{
"id": 50028, //id комментария
"uuid": "b95268a0-41d8-4c91-b758-aa822782c181",
"date": 1619772926, //дата создания комментария
"update_text": "Вид работы изменен с \"Ямы\" на \"Аварии\"", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": null, // информация по внесенным в задание изменениям
"parent": null, // родительский комментарий
"fio": "Администратор", // ФИО пользователя, который сделал изменение
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529, // id задания
"chat_message_number": 100, // номер сообщения в чате задания
"system_message_code": null // код системного сообщения
},
{
"id": 50026, // id комментария
"uuid": "df11d7d7-1e36-4e2a-8343-dbd5b7e94058",
"date": 1619773926, // дата создания комментария
"update_text": "Были добавлены новые файлы. Файлы были изменены.", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": { // информация по внесенным в задание изменениям
"id": 39981, // id изменения
"date": 1619773926, // дата изменения
"old_stage": null, // значение стадии до изменения (если это значение было изменено, иначе null)
"new_stage": null, // значение стадии после изменения (если это значение было изменено, иначе null)
"old_assigned_status": null, // значение этапа до изменения (если это значение было изменено, иначе null)
"new_assigned_status": null, // значение этапа после изменения (если это значение было изменено, иначе null)
"old_assigned_organization": null, // значение assigned_organization до изменения (если это значение было изменено, иначе null)
"new_assigned_organization": null, // значение assigned_organization после изменения (если это значение было изменено, иначе null)
"old_assigned_user": null, // значение assigned_user до изменения (если это значение было изменено, иначе null)
"new_assigned_user": null, // значение assigned_user после изменения (если это значение было изменено, иначе null)
"old_deadline": null, // значение дедлайна до изменения (если это значение было изменено, иначе null)
"new_deadline": null, // значение дедлайна до изменения (если это значение было изменено, иначе null)
"old_expired_date": null, // значение даты просроченности задания до изменения (если это значение было изменено, иначе null)
"new_expired_date": null, // значение даты просроченности задания после изменения (если это значение было изменено, иначе null)
"files_added": [
{ // список добавленных после изменения файлов
"id": 54665, // id файла
"num": 24, // порядковый номер файла
"name": "Fox.jpg", // исходное названи файла
"description": "New photo", // описание файла
"extension": "jpg", // расширение файла
"file_name": "8ce1c640-e2c6-1004-8171-1dcd61b183b4.jpg", //название файла на сервере
"link": null, // ссылка, если видео файл, если он находится не на сервере, или null
"sticker": null, // информация для стикера, прикрепленного к файлу
"create_date": 1619772926,
"deleted": false, // был файл удален или нет
"file_source": "device_camera", // источник файла
"size": 1288395, // размер файла в байтах
"attachment": { // информация по времени и месту прикрепления файла
"time": 1619772926, // время прикрепления файла
"time_provider": "system", // источник времени прикрепления файла
"location": { // информация по месту прикрепления файла
"location": [
55.56,
46.67
], // координаты места прикреплени файла
"provider": "gps", // источник координат места прикрепления файла
"accuracy": 12.5, // точность координат места прикрепления файла
"distance_to_task": 25.85713665489607, // расстояние от точки задания до места прикрепления файла (в метрах)
}
},
"origin": { // информация по времени и месту создания файла
"time": 1619772926, // время создания файла
"time_provider": "ntp", // источник времени создания файла
"location": { // информация по месту создания файла
"location": [
55.45,
46.89
], // координаты места создания файла
"provider": "gps", // источник координат места создания файла
"accuracy": 10, // точность координат места создания файла
"distance_to_task": 115.121211221212, // расстояние от точки задания до места создания файла (в метрах)
}
},
"author": { // информация о приложении и платформе
"platform": "android", // платформа
"platform_version": "4.2", // версия платформы
"application": "MapMobile", // приложение
"application_version": "8.5" // версия приложения
},
"type": "PHOTO", // тип файла
"task_id": 60529 // id задания
}
],
"files_deleted": [], // список удаленных после изменения файлов
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529 // id задания
},
"parent": null, // родительский комментарий
"fio": "Администратор", // ФИО пользователя, который сделал изменение
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529, // id задания
"chat_message_number": 101, // номер сообщения в чате задания
"system_message_code": null // код системного сообщения
}
]
} GET /rest/tasks/:id/comments/list-hierarchy
Получение списка комментариев задания и всех его подзаданий.
Параметры фильтрации
pageinteger default1— номер запрашиваемой страницыlimitinteger default25— количество записей на страницеsortDirectiondefaultDESC— направление сортировки (ASC, DESC). Комментарии заданий отдаются одним потоком в порядке их появления, что практически во всех случаях соответствует сортировке по полю date
status = 200
// 2.0+
{
"items": [
{
"id": 50029, // id комментария
"uuid": "1454bd95-3653-4499-ab39-9733af031312",
"date": 1619772926, // дата создания комментария
"update_text": "Заданию назначили организацию: \"Отдел разработки\"", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": { // информация по внесенным в задание изменениям
"id": 39983, // id изменения
"date": 1619771926, // дата изменения
"old_stage": null, // значение стадии до изменения (если это значение было изменено, иначе null)
"new_stage": null, // значение стадии после изменения (если это значение было изменено, иначе null)
"old_status": { // значение этапа до изменения (если это значение было изменено, иначе null)
"id": 1, // id этапа
"name": "новое" // название этапа
},
"new_status": { // значение этапа до изменения (если это значение было изменено, иначе null)
"id": 2, // id этапа
"name": "назначено" // название этапа
},
"old_assigned_organization": null, // значение assigned_organization до изменения (если это значение было изменено, иначе null)
"new_assigned_organization": { // значение assigned_organization после изменения (если это значение было изменено, иначе null)
"id": 188, // id организации
"name": "Отдел разработки" // название организации
},
"old_assigned_user": null, // значение assigned_user до изменения (если это значение было изменено, иначе null)
"new_assigned_user": { // значение assigned_user после изменения (если это значение было изменено, иначе null)
"id": 719, // id пользователя
"fio": "Игорь Зиновьев" // имя пользователя
},
"old_deadline": null, // значение дедлайна до изменения (если это значение было изменено, иначе null)
"new_deadline": null, // значение дедлайна до изменения (если это значение было изменено, иначе null)
"old_expired_date": null, // значение даты просроченности задания до изменения (если это значение было изменено, иначе null)
"new_expired_date": null, // значение даты просроченности задания после изменения (если это значение было изменено, иначе null)
"files_added": [], // список добавленных после изменения файлов
"files_deleted": [], // список удаленных после изменения файлов
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529 //id задания
},
"parent": null, // родительский комментарий
"fio": "Администратор", //ФИО пользователя, который сделал изменение
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529, //id задания
"chat_message_number": 99, // номер сообщения в чате задания
"system_message_code": null // код системного сообщения
},
{
"id": 50028, //id комментария
"uuid": "b95268a0-41d8-4c91-b758-aa822782c181",
"date": 1619773926, //дата создания комментария
"update_text": "Вид работы изменен с \"Ямы\" на \"Аварии\"", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": null, // информация по внесенным в задание изменениям
"parent": null, // родительский комментарий
"fio": "Администратор", // ФИО пользователя, который сделал изменение
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60530, // id задания
"chat_message_number": 1, // номер сообщения в чате задания
"system_message_code": null // код системного сообщения
},
{
"id": 50026, // id комментария
"uuid": "df11d7d7-1e36-4e2a-8343-dbd5b7e94058",
"date": 1619774926, // дата создания комментария
"update_text": "Были добавлены новые файлы. Файлы были изменены.", //текст обновления (для комментария об обновлении задания)
"comment": "", // текст комментария
"type": 2, // тип комментария: 1 - обычный, 2 - системный
"diff": null, // информация по внесенным в задание изменениям
"parent": null, // родительский комментарий
"fio": "Администратор", // ФИО пользователя, который сделал изменение
"user_id": 6, // id пользователя, который сделал изменение
"task_id": 60529, // id задания
"chat_message_number": 98, // номер сообщения в чате задания
"system_message_code": null // код системного сообщения
}
],
"total": 3, // общее количество комментариев
"page": 1, // текущая страница
"limit": 25 // максимальное количество элементов на странице
} POST /rest/tasks/:id/comments
Добавление комментария к заданию.
// 2.0+
{
"uuid": "Работы начаты", // UUID4, необязательное поле
"comment": "Комментарий" // текст комментария
}
status = 200
// 2.0+
{
"id": 9145, // id комментария
"uuid": "cdnjskcnkjdancfk", // UUID4, необязательное поле
"parent": null, // родительский комментарий
"date": 1619685526, // дата создания комментария
"update_text": null, // текст обновления (для комментария об обновлении задания)
"comment": "Работы начаты", // текст комментария
"type": 1, // тип комментария: 1 - обычный, 2 - системный
"fio": "Петров Иван", // ФИО создателя комментария
"user_id": 45, // id создателя комментария
"task_id": 789237, // id задания
"diff": null, // информация по внесенным в задание изменениям (для системных комментариев)
"chat_message_number": 102, // номер сообщения в чате задания
"system_message_code": null // код системного сообщения
} POST /rest/tasks/:id/comments/:referenceId
Добавление ответного комментария
Параметры запроса
idlong — id заданияreferenceIdlong — id существующего комментария
// 2.0+
{
"uuid": "vfjdnvkjlsdnfvkj" // UUID4, необязательное поле
"comment": "Работы начали. Прибыли на объект" // текст комментария
}
status = 200
// 2.0+
{
"id": 9146, // id комментария
"uuid": "cdnjskcnkjdancfk", // UUID4, необязательное поле
"parent": {...}, // родительский комментарий в том же формате,
// но без вложенного родительского
"date": 1619685526, // дата создания комментария
"update_text": null, // текст обновления (для комментария об обновлении задания)
"comment": "Работы начали. Прибыли на объект", // текст комментария
"type": 1, // тип комментария: 1 - обычный, 2 - системный
"fio": "Петров Иван", // ФИО создателя комментария
"user_id": 45, // id создателя комментария
"task_id": 789237, // id задания
"diff": null, // информация по внесенным в задание изменениям (для системных комментариев)
"chat_message_number": 103, // номер сообщения в чате задания
"system_message_code": null // код системного сообщения
} PUT /rest/tasks/:id/stickers
Прикрепление стикеров к файлам задания. При прикреплении производится проверка доступности указанных стикеров виду работ. При проверке учитывается свойство стикеров is_for_all (доступно всем видам работ). Если хотя бы один из указанных стикеров не соответствуют виду работ, будет выдана ошибка 403. Если пара {file_id, sticker_id} не передана, полагаем, что к файлу никакой стикер не прикрепляется.
// 2.0+
{
"files": [
{
"file_id": 123,
"sticker_id": 12
},
{
"file_id": 124,
"sticker_id": 14
}
]
} GET /rest/tasks/:id/photos/main/fit/w:width/h:height
Получение превью главной фотографии задания.
Фотография будет вписана в прямоугольник WxH так, что её стороны не будут выступать за границы прямоугольника.
Параметры запроса
winteger — желаемая ширинаhinteger — желаемая высота
/tasks/69704/photos/main/fit/w400/h300GET /rest/tasks/:id/photos/:num/fit/w:width/h:height
Получение превью указанной фотографии задания.
Фотография будет вписана в прямоугольник WxH так, что её стороны не будут выступать за границы прямоугольника.
Параметры запроса
numinteger — порядковый номер фотографииwinteger — желаемая ширинаhinteger — желаемая высота
/tasks/69704/photos/3/fit/w400/h300GET /rest/tasks/:id/photos/main/crop/w:width/h:height
Получение превью главной фотографии задания.
Фотография будет вписана в прямоугольник WxH так, что весь прямоугольник будет заполнен; при этом возможна обрезка фотографии по одной из сторон.
Параметры запроса
winteger — желаемая ширинаhinteger — желаемая высота
/tasks/69704/photos/main/crop/w400/h300GET /rest/tasks/:id/photos/:num/crop/w:width/h:height
Получение превью указанной фотографии задания.
Фотография будет вписана в прямоугольник WxH так, что весь прямоугольник будет заполнен; при этом возможна обрезка фотографии по одной из сторон.
Параметры запроса
numinteger — порядковый номер фотографииwinteger — желаемая ширинаhinteger — желаемая высота
/tasks/69704/photos/3/crop/w400/h300GET /rest/tasks/:id/photos/main
Получение главной фотографии задания.
GET /rest/tasks/:id/photos/:num
Получение указанной фотографии задания.
Параметры запроса
numinteger — порядковый номер фотографии
GET /rest/tasks/:id/sounds/:num
Получение указанной звукозаписи задания.
Параметры запроса
numinteger — порядковый номер звукозаписи
GET /rest/tasks/:id/videos/:num
Получение указанного видеофайла задания.
Параметры запроса
numinteger — порядковый номер видеофайла
GET /rest/tasks/:id/files/:num
Получение указанного приложенного файла задания.
Параметры запроса
numinteger — порядковый номер приложенного файла
/rest/configuration
GET /rest/configuration/tree-nodes
Главный администратор, главный инспектор.
Отдаёт метаинформацию обо всем дереве настроек.
Настройки хранятся в базе в виде дерева, в котором одни из них вложены в другие. Промежуточные настройки являются "папками", а терминальные настройки (листья) - это, собственно, сами настройки, в которые ещё могут быть вложены их возможные значения, различные для разных пользователей и/или ролей, организаций, состояний заданий. Формат представления этих сущностей в JSON разный.
Каждая из настроек помимо id имеет поля name и label. Первое из них
используется как имя настройки при вызове /props. Рекомендуется использовать
в нём только латинские буквы, цифры, знаки - и _. Второе поле
используется как имя настройки, отображаемое в интерфейсе.
Если в одну промежуточную настройку вложено несколько других с одинаковым
именем name, то они собираются в массив. Порядковый номер
настройки в массиве задаётся полем array_index.
Также настройки могут быть системными. Они хранят сведения, критически важные для работы приложения, а потому создаются только разработчиками при выпуске новых версий, и не могут быть изменены или удалены (это не касается их возможных значений).
Терминальная настройка имеет тип данных type и четыре поля для
значения по умолчанию, из которых заполненным может быть только
одно (какое именно - зависит от типа данных): default_bool_value,
default_double_value, default_int_value,
default_string_value.
Терминальная настройка может иметь любое количество возможных значений,
в том числе нулевое. Все возможные значения одной настройки отсортированы
по полю order_index и имеют правило доступа access_rule.
Последнее определяет, какое именно возможное значение будет взято
при вычислении настройки. Внутри access_rule могут находиться
user- при наличии указывает, что возможное значение справедливо только для этого пользователя;role- при наличии указывает, что возможное значение справедливо только для этой роли;organization- при наличии указывает, что возможное значение справедливо только пользователей внутри этой организации;state_rule- содержит состояния заданий (states). Если настройка вычисляется в контексте задания, то возможное значение может быть применено, только если задание удовлетворяет этим состояниям.
Все эти поля необязательны.
При вычислении значения настройки сначала определяется список допустимых
возможных значений в соответствии с описанием полей user, role,
organization, state_rule выше (при их отсутствии возможное значение
всегда допустимо).
Из допустимых возможных значений выбирается первое из них в порядке
возрастания order_index. Из него в зависимости от типа настройки
выбирается одно из полей bool_value, double_value, int_value
string_value. Если допустимых значений нет, то берётся значение
по умолчанию.
Промежуточная настройка
// 2.0+
{
"id": 1, // * ID настройки
"name": "intermediate_node", // * название для выдачи в JSON в /configuration/props
"label": "Некая промежуточная настройка", // * имя настройки для отображения в интерфейсе
"is_terminal": false, // * false для промежуточной настройки
"is_system": true/false, // * признак системной настройки
"array_index": 0, // * задаёт индекс в массиве, если настройка входит в массив
//
"children": [...] // Массив дочерних настроек.
// Может содержать оба типа настроек - и промежуточные,
// и терминальные.
}
Терминальная настройка
// 2.0+
{
"id": 2, // * ID настройки
"name": "terminal_node", // * название для выдачи в JSON в /configuration/props
"label": "Некая терминальная настройка", // * имя настройки для отображения в интерфейсе
"is_terminal": true, // * true для терминальной настройки
"is_system": true/false, // * признак системной настройки
//
"type": "INTEGER", // * тип данных терминальной настройки, один из
// {BOOLEAN, INTEGER, DOUBLE, STRING}
//
"default_bool_value": null, // значение по умолчанию будет
"default_double_value": null, // находиться в одном из четырёх полей
"default_int_value": 1, //
"default_string_value": null, //
//
"possible_values": [...] // Массив возможных значений настройки
}
Возможное значение настройки
// 2.0+
{
"id": 1, // * ID возможного значения
"order_index": 0, // * задаёт порядок этого возможного значения среди прочих
//
"bool_value": null, // в зависимости от типа настройки, её значение
"double_value": null, // будет содержаться в одном из этих полей
"int_value": 2, //
"string_value": null, //
//
"access_rule": { // правило срабатывания
"role": { // роль пользователя
"id": 7,
"name": "Пользователь ведомства"
},
"organization": { // организация пользователя
"id": 188,
"name": "Информационные технологии"
},
"user": { // пользователь
"id": 1230,
"fio": "Иванов Сергей Петрович"
},
"state_rule": { // состояния задания
"states": [
1,
2,
3
]
}
}
}
status = 200
// 2.0+
{
"rootProperty": {...} // корневой узел - всегда промежуточный
} PUT /rest/configuration/tree-nodes/:id
Главный администратор, главный инспектор.
Позволяет полностью изменить информацию о каком-то узле дерева настроек, включая его свойства, свойства дочерних настроек, набор дочерних настроек, набор возможных значений терминальных настроек и проч.
Тело запроса должно содержать полное описание изменяемого узла, его потомков, потомков его потомков и так далее, даже если сами эти потомки не меняются.
Если для какого-то поля указано, что оно неизменяемо (без дополнительных комментариев), это означает, что заданное при создании этой настройки значение в дальнейшем не может быть изменено.
Параметры
обязательный
idlong — id редактируемой настройки
Входные данные
Промежуточная настройка
// 2.0+
{
"id", // не изменяемо; для новых настроек не передаётся
"name", // * название; для системных настроек неизменяемо
"label", // * отображаемое имя; для системных настроек неизменяемо
"is_terminal": false, // * false для промежуточных настроек; неизменяемо
"array_index": 0, // * индекс в массиве
"children": [...] // дочерние настройки
}
Терминальная настройка
// 2.0+
{
"id", // неизменяемо; для новых настроек не передаётся
"name", // * название; для системных настроек неизменяемо
"label", // * отображаемое имя; для системных настроек неизменяемо
"is_terminal": true, // * true для терминальных настроек; неизменяемо
"type": "INTEGER", // * тип; неизменяемо
"possible_values": [...] // возможные значения
}
Возможное значение настройки
// 2.0+
{
"id", // неизменяемо; для новых настроек не передаётся
"order_index", // * порядок в списке возможных значений
"bool_value", // поля для хранения значения; должно быть заполнено
"double_value", // только одно в зависимости от типа настройки
"int_value",
"string_value",
"access_rule": { // правило доступности возможного значения
"role": { // для роли
"id": 7
},
"user": { // для пользователя
"id": 1230
},
"organization": { // для организации
"id": 188
},
"state_rule": { // в состояниях
"states": [
1,
2,
3
]
}
}
}
status = 200
// 2.0+
{
"property": {...} // изменённый узел
} GET /rest/configuration/props
Отдаёт все настройки и их значения, рассчитанные для текущего пользователя.
status = 200
// 2.0+
{ // Содержатся все настройки в виде JSON-объекта
// с названиями полей, соответствующими "name" настроек.
// Значения настроек уже рассчитаны в соответствии
// с заведёнными для них правилами и с учетом
// переданного токена (или его отсутствия).
} GET /rest/configuration/backward-compatible
Получение некоторых настроек для сохранения обратной совместимости
со старыми версиями клиентских приложений. Ранее запрос назывался
/files/settings; он и сейчас работает, т.к. на nginx сделан проброс.
Т.к. ранее /files/settings был просто запросом к файлу, и потому
выполнялся без токена, то в /backward-compatible сохранено такое
поведение. Все настройки вычисляются так, как если бы токен не передавался.
status = 200
// 2.0+
{
"is_camera_needs_to_use_location": false, // настройка "mobileapp/camera/is_camera_needs_to_use_location"
"camera_max_location_error_meters": 50, // настройка "mobileapp/camera/camera_max_location_error_meters"
"camera_max_location_delay_millis": 10000, // настройка "mobileapp/camera/camera_max_location_delay_millis"
"is_need_to_use_custom_camera": true, // настройка "mobileapp/camera/is_need_to_use_custom_camera"
"camera_is_put_date_stamp": false, // настройка "mobileapp/camera/camera_is_put_date_stamp"
"is_need_choose_sticker_before_start_camera": false, // настройка "mobileapp/camera/is_need_choose_sticker_before_start_camera"
"is_need_choose_sticker_after_stop_camera": false, // настройка "mobileapp/camera/is_need_choose_sticker_after_stop_camera"
"camera_max_distance_to_task_meters": 100, // настройка "mobileapp/camera/camera_max_distance_to_task_meters"
"is_need_add_caption_mode": true, // настройка "mobileapp/camera/is_need_add_caption_mode"
"is_required_add_caption": false, // настройка "mobileapp/camera/is_required_add_caption"
"is_landing": false, // настройка "system/is_landing"
"mapinformer_type": "standard", // настройка "mobileapp/mapinformer_type"
"geoportal": {
"url": "http://integration.dev.geo4.pro", // доступ к геопорталу; значение рассчитывается
// исходя из ключей ssc.host и requests.use.ssl.protocol
// в настройках
"socket_port": "80" // константа
},
"cerebellum": {
"url": "http://integration.dev.geo4.pro" // доступ к cerebellum; значение рассчитывается
// исходя из ключей ssc.host и requests.use.ssl.protocol
}
} GET /rest/configuration/service-objects
Чтение конфигурационных параметров для объектов обслуживания.
// 2.0+
{
"items": {
"search_params": "?size=20&default_operator=AND",
"search_field": "adress",
"sort": "adress:asc",
"layer": {
"id": 999,
"name": "baki_z"
},
"geo_json_field": "the_geom.coordinates",
"title_format": "{0}",
"title_fields": [
"address"
],
"fields": [
"fid",
"address",
"the_geom.coordinates"
],
"fields_mapping": [
{
"type": "CustomField",
"field_id": 1,
"format": "{0}-{1}",
"fields": [
"fid",
"address"
]
},
{
"type": "CustomField",
"field_id": 2,
"format": "{0}--{1}",
"fields": [
"address",
"fid"
]
},
{
"type": "TaskTitle",
"format": "{0}-title-{1}",
"fields": [
"address",
"fid"
]
},
{
"type": "Description",
"format": "{0}-desc-{1}",
"fields": [
"address",
"fid"
]
}
]
}
} PUT /rest/configuration/service-objects
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Запрос на редактирование конфигурационных параметров для объектов обслуживания. Работает по принципу полной замены.
Входные данные
// 2.0+
{
"search_params": "size=20&default_operator=AND",
"search_field": "adress",
"sort": "adress:desc",
"layer": {
"id": 999
},
"geo_json_field": "the_geom.coordinates",
"title_format": "{0}",
"title_fields": [
"address"
],
"fields": [
"fid",
"address",
"the_geom.coordinates"
],
"fields_mapping": [
{
"type": "CustomField",
"custom_field_id": 1,
"format": "{0}-{1}",
"fields": [
"fid",
"address"
]
},
{
"type": "CustomField",
"custom_field_id": 2,
"format": "{0}--{1}",
"fields": [
"address",
"fid"
]
},
{
"type": "TaskTitle",
"format": "{0}-title-{1}",
"fields": [
"address",
"fid"
]
},
{
"type": "Description",
"format": "{0}-desc-{1}",
"fields": [
"address",
"fid"
]
}
]
}
status = 200
// 2.0+
{
"search_params": "size=20&default_operator=AND",
"search_field": "adress",
"sort": "adress:desc",
"layer": {
"id": 999,
"name": "baki_z"
},
"geo_json_field": "the_geom.coordinates",
"title_format": "{0}",
"title_fields": [
"address"
],
"fields": [
"fid",
"address",
"the_geom.coordinates"
],
"fields_mapping": [
{
"type": "CustomField",
"custom_field_id": 1,
"format": "{0}-{1}",
"fields": [
"fid",
"address"
]
},
{
"type": "CustomField",
"custom_field_id": 2,
"format": "{0}--{1}",
"fields": [
"address",
"fid"
]
},
{
"type": "TaskTitle",
"format": "{0}-title-{1}",
"fields": [
"address",
"fid"
]
},
{
"type": "Description",
"format": "{0}-desc-{1}",
"fields": [
"address",
"fid"
]
}
]
} GET /rest/configuration/service-objects/search
Служит для поиска по объектам обслуживания.
Параметры запроса
qstring — текстовый поиск, пример: q=никольскаяlonLat— координаты точки для сортировки по удалению от нее, пример: lonLat=37.617635,55.755814
status = 200
// 2.0+
{
"items": {
"hits": [
{
"_id": 123, // ID объекта помещается в выделенное поле
"fid": 123, // остальные поля
"address": "Москва, улица Никольская, дом 11",
"the_geom": {
"coordinates": [
[
37.605677,
55.763433
],
],
}
}
],
"total": 1
}
} GET /rest/configuration/java-options
Получение информации о настройках конфигурации.
status = 200
// 2.0+
{
"onlyMyOrganization": false, // в системе отображается только организация текущего пользователя
// (значение параметра берется из конфигурационного файла application.conf)
"-Dfiles.localStorage": "c:/work/tmp", // локальное хранилище для загружаемых файлов
// (значение параметра берется из "VM Options")
"filesLocalStorage": "c:/work/tmp", // локальное хранилище для загружаемых файлов
// (если значение параметра не прописано в "VM Options",
// тогда оно берется из конфигурационного файла application.conf)
"issueZoneTrackingOn": false // включать отслеживание местоположения исполнителя
// по умолчанию для всех заданий
} PUT /rest/configuration/locale/*code
Главный администратор (role_id = 8).
Изменить локаль сервера.
/rest/clusters
GET /rest/clusters/list
Список кластеров, доступных текущему пользователю.
Главному администратору и главному инспектору доступны все неудаленные кластеры.
Пользователи других ролей видят кластеры своих организаций.
Сортировка осуществляется по полю title.
Параметры
pageinteger default1— номер запрашиваемой страницыlimitinteger default25— количество записей на страницеsortDirectiondefaultASC— направление сортировки (ASC, DESC)
status = 200
// 2.0+
{
"items": [ // список доступных кластеров
{
"id": 2, // id кластера
"title": "Организации Вахитовского района", // название кластера
"defaults": false, // отметка: является ли данный кластер кластером по умолчанию
"creation_date": 1585045830, // дата создания кластера
"created_by": { // информация о пользователе, который создал кластер
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
}
},
{
"id": 3,
"title": "Организации Московского района",
"defaults": false,
"creation_date": 1585638692,
"created_by": {
"id": 6,
"fio": "Администратор"
}
},
{
"id": 1,
"title": "По умолчанию",
"defaults": true,
"creation_date": 1584975466,
"created_by": {
"id": 6,
"fio": "Администратор"
}
}
],
} GET /rest/clusters/:id
Получение информации по кластеру (если данный кластер доступен текущему пользователю).
Главному администратору и главному инспектору доступны все неудаленные кластеры.
Пользователи других ролей видят кластеры своих организаций.
status = 200
// 2.0+
{
"id": 10, // id кластера
"title": "Организации Кировского района", // название кластера
"defaults": false, // отметка: является ли данный кластер кластером по умолчанию
"creation_date": 1585045830, // дата создания кластера
"created_by": { // информация о пользователе, который создал кластер
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
}
} POST /rest/clusters
Главный администратор (role_id = 8), Главный инспектор (role_id = 12).
Добавление нового кластера.
// 2.0+
{
"title": "Организации Кировского района" // * название кластера
}
status = 200
// 2.0+
{
"id": 10, // id кластера
"title": "Организации Кировского района", // название кластера
"defaults": false, // отметка: является ли данный кластер кластером по умолчанию
"creation_date": 1585045830, // дата создания кластера
"created_by": { // информация о пользователе, который создал кластер
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
}
} PATCH /rest/clusters/:id
Главный администратор (role_id = 8), Главный инспектор (role_id = 12), Администратор кластера (role_id = 5).
Администратор кластера может редактировать только свой кластер.
Изменение информации о кластере.
// 2.0+
{
"title": "Организации Приволжского района" // * название кластера
}
status = 200
// 2.0+
{
"id": 10, // id кластера
"title": "Организации Приволжского района", // название кластера
"defaults": false, // отметка: является ли данный кластер кластером по умолчанию
"creation_date": 1585045830, // дата создания кластера
"created_by": { // информация о пользователе, который создал кластер
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
}
} DELETE /rest/clusters/:id
Главный администратор (role_id = 8).
Удаление кластера.
При попытке удаления кластера "По умолчанию" или кластера, в котором есть организации, получим ошибку (400 BadRequest).
/rest/organizations
GET /rest/organizations/list/:limit/:offset
Авторизованный пользователь.
Получение списка организаций, где offset - номер первой выводимой в ответе организации, limit - количество выводимых
в ответе организаций.
Главный инспектор и главный администратор видят все организации, для других пользователей видимость организаций зависит от настройки behavior.can.see.my.organization.only. Если эта настройка выставлена в true, пользователь будет видеть только доступные ему организации. Если настройка выставлена в false, доступ к организациям будет ограничиваться кластерами его организаций.
Параметры limit, offset не обязательны.
Параметры
searchstring — поиск по названию или idclientboolean — показывать только клиентские организации
status = 200
// 2.0+
{
"items": [
{
"id": 2, // id организации
"name": "Отдел Тестирования T", // название организации
"logo": "logo_291.jpg", // название файла логотипа
//
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
} //
"client": false, // признак клиентской организации
//
"users_count": 37, // количество пользователей
//
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901 // БИК банка
"account": 2012019292109, // Счет организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгултера
"stamp": "Печать.png", // Имя файла с печатью организации, полученное после загрузки файла через метод POST /files/upload
"head_signature": "Подпись_руководителя.png", // Имя файла с подписью руководителя организации, полученное после загрузки файла через метод POST /files/upload
"accountant_signature": "Подпись_бухгалтера.png", // Имя файла с подписью бухгалтера организации, полученное после загрузки файла через метод POST /files/upload
"max_users_count": 50 // Максимально допустимое количество пользователей организации
}, //
//
"task_defaults": { // для заданий внутри создаваемой организации:
// параметры автоподстановки
"assigned_organization": {
"id": 500 // ID организации-исполнителя (если она не
// указана в теле запроса на создание задания).
}
}
},
... // следующие элементы списка организаций
]
} GET /rest/organizations/public
Получение списка публичных (клиентских) организаций.
status = 200
// 2.0+
{
"items": [
{
"id": 3, // id организации
"name": "Власть народу", // название организации
"logo": "logo_162.jpg", //
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
}
},
... // следующие элементы списка организаций
]
} POST /rest/organizations/icons
Авторизованный пользователь.
Загрузка файлов пиктограмм для организаций.
Для версий Cerbellum до 0.16 в запросе на загрузку пиктограмм необходимо:
указать
Content-Disposition: name="Filedata",передать файл в переменной
Filedata.
Для версий Cerbellum от 0.16 и старше в запросе достаточно передать файл пиктограммы, дополнительно ничего указывать не нужно.
Пример загрузки пиктограммы через REST-клиент Advanced REST client

status = 200
// 2.0+
{
"name": "ebb453e8-db16-1004-8f9e-3e07628b8015.jpg" // имя файла, преобразованное с помощью
// UUID-стандарта идентификации
} GET /rest/organizations/:id
Получение данных по конкретной организации.
Авторизованный пользователь
Для пользователей с ролями Главный администратор (role_id = 8), Главный инспектор (role_id = 12) доступные все организации.
Для пользователей с другими ролями доступ к организациям ограничивается кластерами их организаций.
status = 200
// 2.0+
{
"id": 600, // ID
"name": "Высокие технологии", // название
"logo": "logo_600.jpg", // файл с логотип организации
//
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
} //
"client": false, // признак клиентской организации
//
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Банковский счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"stamp": "Печать.png", // Имя файла с печатью организации, полученное после загрузки файла через метод POST /files/upload
"head_signature": "Подпись_руководителя.png", // Имя файла с подписью руководителя организации, полученное после загрузки файла через метод POST /files/upload
"accountant_signature": "Подпись_бухгалтера.png", // Имя файла с подписью бухгалтера организации, полученное после загрузки файла через метод POST /files/upload
"max_users_count": 50 // Максимально допустимое количество пользователей организации
}, //
//
"task_defaults": { // для заданий внутри создаваемой организации:
// параметры автоподстановки
"assigned_organization": {
"id": 500 // ID организации-исполнителя (если она не
// указана в теле запроса на создание задания).
}
},
"chat_id": 65006 // идентификатор канала уведомлений
} POST /rest/organizations
Добавление новой организации.
Главный администратор (role_id = 8), Администратор кластера (role_id = 5).
Администратор кластера может создавать организации только внутри своих кластеров.
Файл с логотипом к моменту запроса должен находиться в папке
{FILES_ROOT}/department_logoПоле
idприменяется для интеграционных целей: чтобы создаваемая организация имела тот жеID, что и её двойник в некой другой системе
Входные данные
// 2.0+
{
"name": "Высокие технологии", // * название организации
"logo": "high_tech.jpg", // файл с логотипом организации
"map_extent_id": 268, // id положения карты; по умолчанию 1
"client": false, // признак клиентской организации; по умолчанию false
"cluster_id": 2, // id кластера
//
"info": { // * дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"stamp": "Печать.png", // Имя файла с печатью организации, полученное после загрузки файла через метод POST /files/upload
"head_signature": "Подпись_руководителя.png", // Имя файла с подписью руководителя организации, полученное после загрузки файла через метод POST /files/upload
"accountant_signature": "Подпись_бухгалтера.png", // Имя файла с подписью бухгалтера организации, полученное после загрузки файла через метод POST /files/upload
"max_users_count": 100 // Максимально допустимое количество пользователей организации
}, //
//
"id": 600, // id при создании; не должно совпадать с существующими
//
"task_defaults": { // для заданий внутри создаваемой организации:
// параметры автоподстановки
"assigned_organization": {
"id": 500 // ID организации-исполнителя (если она не
// указана в теле запроса на создание задания).
}
}
}
status = 200
// 2.0+
{
"id": 600, // ID
"name": "Высокие технологии", // название
"logo": "logo_600.jpg", // файл с логотип организации
"cluster_id": 2, // id кластера
//
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
} //
"client": false, // признак клиентской организации
//
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"stamp": "Печать.png", // Имя файла с печатью организации, полученное после загрузки файла через метод POST /files/upload
"head_signature": "Подпись_руководителя.png", // Имя файла с подписью руководителя организации, полученное после загрузки файла через метод POST /files/upload
"accountant_signature": "Подпись_бухгалтера.png", // Имя файла с подписью бухгалтера организации, полученное после загрузки файла через метод POST /files/upload
"max_users_count": 100 // Максимально допустимое количество пользователей организации
}, //
//
"task_defaults": { // для заданий внутри создаваемой организации:
// параметры автоподстановки
"assigned_organization": {
"id": 500 // ID организации-исполнителя (если она не
// указана в теле запроса на создание задания).
}
},
"chat_id": 65006 // идентификатор канала уведомлений
} PATCH /rest/organizations/:id
Изменение информации об организации.
Главный администратор (role_id = 8), Администратор организации (role_id = 3), Администратор кластера (role_id = 5).
Администратор организации может менять данные только своих организаций.
Администратор кластера может менять данные организаций внутри своих кластеров.
Файл с логотипом к моменту запроса должен находиться в папке {FILES_ROOT}/department_logo
Перенос организации в другой кластер (cluster_id) разрешен только пользователю с ролью Главный администратор (role_id = 8).
Входные данные
// 2.0+
{
"name": "Высокие технологии", // название организации
"logo": "high_tech.jpg", // файл с логотипом организации
"map_extent_id": 268, // id положения карты
"client": false, // признак клиентской организации
"cluster_id": 2, // id кластера
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"stamp": "Печать.png", // Имя файла с печатью организации, полученное после
// загрузки файла через метод POST /files/upload
"head_signature": "Подпись_руководителя.png", // Имя файла с подписью руководителя организации, полученное после
// загрузки файла через метод POST /files/upload
"accountant_signature": "Подпись_бухгалтера.png", // Имя файла с подписью бухгалтера организации, полученное
// после загрузки файла через метод POST /files/upload
"max_users_count": 100 // Максимально допустимое количество пользователей организации
// (не должно быть меньше текущего количества пользователей организации)
},
"task_defaults": {
"assigned_organization": { // организация-исполнитель по умолчанию
"id": 99
}
}
}
status = 200
// 2.0+
{
"id": 600 // ID
"name": "Высокие технологии", // название организации
"logo": "logo_600.jpg", // файл с логотипом организации
//
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
} //
"client": false, // признак клиентской организации
//
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"stamp": "Печать.png", // Имя файла с печатью организации, полученное после загрузки файла через метод POST /files/upload
"head_signature": "Подпись_руководителя.png", // Имя файла с подписью руководителя организации, полученное после загрузки файла через метод POST /files/upload
"accountant_signature": "Подпись_бухгалтера.png", // Имя файла с подписью бухгалтера организации, полученное после загрузки файла через метод POST /files/upload
"max_users_count": 100 // Максимально допустимое количество пользователей организации
}, //
//
"task_defaults": { // для заданий внутри создаваемой организации:
// параметры автоподстановки
"assigned_organization": {
"id": 99 // ID организации-исполнителя (если она не
// указана в теле запроса на создание задания).
}
},
"chat_id": 65006 // идентификатор канала уведомлений
} PUT /rest/organizations/:id
Изменение существующей организации.
Главный администратор (role_id = 8), Администратор организации (role_id = 3), Администратор кластера (role_id = 5).
Администратор организации может изменять данные только своих организаций.
Администратор кластера может менять данные организаций внутри своих кластеров.
Файл с логотипом к моменту запроса должен находиться в папке {FILES_ROOT}/department_logo
Перенос организации в другой кластер clusterid) разрешен только пользователю с ролью Главный администратор (role_id = 8).
Входные данные
// 2.0+
{
"name": "Высокие технологии", // * название организации
"logo": "high_tech.jpg", // файл с логотипом организации
"map_extent_id": 268, // * id положения карты
"client": false, // * признак клиентской организации
"cluster_id": 2, // * id кластера
//
"info": { // * дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"stamp": "Печать.png", // Имя файла с печатью организации, полученное после загрузки файла через метод POST /files/upload
"head_signature": "Подпись_руководителя.png", // Имя файла с подписью руководителя организации, полученное после загрузки файла через метод POST /files/upload
"accountant_signature": "Подпись_бухгалтера.png", // Имя файла с подписью бухгалтера организации, полученное после загрузки файла через метод POST /files/upload
"max_users_count": 100 // Максимально допустимое количество пользователей организации (не должно быть меньше текущего количества пользователей организации)
}, //
//
"task_defaults": {
"assigned_organization": { // организация-исполнитель по умолчанию
"id": 99
}
}
}
status = 200
// 2.0+
{
"id": 600 // ID
"name": "Высокие технологии", // название организации
"logo": "logo_600.jpg", // файл с логотипом организации
"cluster_id": 2, // id кластера
//
"map_extent": { // положение карты
"id": 2,
"name": "Республика Татарстан",
"extent": [
47.1643057526207,
54.2202822940369,
54.3273954713906,
56.7105387481253
]
} //
"client": false, // признак клиентской организации
//
"info": { // дополнительные поля
"address": "Москва", // адрес организации
"email": "test@test.org", // e-mail
"phone": "1234567890", // телефон
"fax": "123456", // факс
"inn": 123456789012, // ИНН
"kpp": 123456789, // КПП
"bank": "234567890", // Банк
"bank_account": "", // Расчётный счёт
"bank_kpp": 123456789013, // ИНН банка
"bank_bik": 345678901, // БИК банка
"account": "2012019292109", // Счет организации
"about": "Организация Высокие технологии, на рынке более 20 лет", // Об организации
"full_name": "ООО Высокие технологии", // Полное юридическое название
"head_fio": "Никифоров Александр Петрович", // ФИО руководителя
"accountant_fio": "Никитина Ольга Ивановна", // ФИО бухгалтера
"stamp": "Печать.png", // Имя файла с печатью организации, полученное после загрузки файла через метод POST /files/upload
"head_signature": "Подпись_руководителя.png", // Имя файла с подписью руководителя организации, полученное после загрузки файла через метод POST /files/upload
"accountant_signature": "Подпись_бухгалтера.png", // Имя файла с подписью бухгалтера организации, полученное после загрузки файла через метод POST /files/upload
"max_users_count": 100 // Максимально допустимое количество пользователей организации
}, //
//
"task_defaults": { // для заданий внутри создаваемой организации:
// параметры автоподстановки
"assigned_organization": {
"id": 500 // ID организации-исполнителя (если она не
// указана в теле запроса на создание задания).
}
},
"chat_id": 65006 // идентификатор канала уведомлений
} DELETE /rest/organizations/:id
Удаление организации.
Главный администратор (role_id = 8), Администратор кластера (role_id = 5).
Администратор кластера может удалять организации внутри своих кластеров.
При удалении организации происходит удаление пользователей, для которых эта организация - главная.
GET /rest/organizations/:id/users
Получение списка пользователей организации, где id - id организации.
Главный администратор (role_id = 8), Главный инспектор (role_id = 12), Администратор кластера (role_id = 5), Авторизованный пользователь.
Главный администратор и Главный инспектор могут видеть всех пользователей всех организаций.
Администратор кластера может видеть пользователей организаций внутри своего кластера, а также внутри доступных ему проектов.
Пользователи с другими ролями могут видеть пользователей внутри своих организаций и доступных проектов.
Данные пользователей с ролью Клиент (role_id = 6) недоступны другим пользователям с ролью Клиент.
status = 200
// 2.0+
{
"items": [
{
"id": 3011, // id пользователя
"login": "admin1439218241106", // логин пользователя
"fio": "Иванов И.И.", // ФИО пользователя
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": 2, // id организации, либо null, если пользователь
// не относится ни к какой организации
"workgroup_ids": [ // массив id проектов, доступных пользователю
132,
232
],
"role_id": 10, // id роли пользователя: 6, 7 - обычный пользователь,
// 10 - админ организации, 8 - администратор всех организаций
"task_count": 17, // начиная с 0.16.0: количество назначенных на
// пользователя заданий в статии "В работе"
"message_channel_id": 99 // канал входящих сообщений
},
... // следующие элементы списка
// пользователей организации
]
} GET /rest/organizations/:id/workgroups
Авторизованный пользователь.
Список проектов организации, доступных текущему пользователю.
Главному администратору и Главному инспектору доступны все проекты. Другим пользователям доступны:
проекты, в которые их включили явно
открытые проекты, если они состоят в этой организации
администраторам и инспекторам этой организации доступны все проекты
Сортировка осуществляется по полю title.
Параметры
pageinteger default1— номер запрашиваемой страницыlimitinteger default1000000— количество записей на страницеsortDirectiondefaultASC— направление сортировки (ASC, DESC)titlestring — поиск только тех групп, названия которых включают переданный текст (без учета регистра)
status = 200
// 2.0+
{
"items": [ // список доступных проектов
{
"id": 2, // id проекта
"title": "Настольная система по работе с обращениями граждан", // название проекта
"open": true, // отметка: является ли данный проект открытым
"defaults": false, // отметка: является ли данный проект проектом по умолчанию для организации
"creation_date": 1590578653, // дата создания проекта
"created_by": { // информация о пользователе, который создал проект
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
},
"organization": { // информация об организации, к которой относится проект
"id": 189, // id организации
"name": "Отдел разработки ПО" // название организации
},
},
{
"id": 3,
"title": "Мобильное приложение для работы с обращениями граждан",
"open": false,
"defaults": false,
"creation_date": 1590578653,
"created_by": {
"id": 6,
"fio": "Администратор"
},
"organization": {
"id": 189,
"name": "Отдел разработки ПО"
}
},
{
"id": 1,
"title": "По умолчанию",
"open": true,
"defaults": true,
"creation_date": 1590578653,
"created_by": {
"id": 6,
"fio": "Администратор"
},
"organization": {
"id": 189,
"name": "Отдел разработки ПО"
}
}
],
} POST /rest/organizations/:id/types/:typeId
Привязка вида работ к организации.
Главный администратор (role_id = 8), Администратор кластера (role_id = 5), Администратор организации (role_id = 10).
Администратор кластера может привязать вид работ только к организациям своего кластера.
Администратор организации может привязать вид работ только к своим организациям.
Если указанных вида работ или организации не существует, получаем ошибку 404. Если связь уже существует, ошибку не получаем (INSERT в таблицу повторно не выполняется).
DELETE /rest/organizations/:id/types/:typeId
Удаление связи между видом работ и организацией.
Главный администратор (role_id = 8), Администратор кластера (role_id = 5), Администратор организации (role_id = 10).
Администратор кластера может удалить связь между видом работ и организацией своего кластера.
Администратор организации может удалить связь между видом работ и своей организацией.
Если указанных вида работ или организации не существует, получаем ошибку 404. Если связи не существует, получаем ошибку 400.
GET /rest/organizations/:id/stamp
Получить изображение печати организации.
Авторизованный пользователь
Для пользователей с ролями Главный администратор (role_id = 8), Главный инспектор (role_id = 12) доступные все организации.
Для пользователей с другими ролями доступ к организациям ограничивается кластерами их организаций.
GET /rest/organizations/:id/head-signature
Получить изображение подписи руководителя организации.
Авторизованный пользователь
Для пользователей с ролями Главный администратор (role_id = 8), Главный инспектор (role_id = 12) доступные все организации.
Для пользователей с другими ролями доступ к организациям ограничивается кластерами их организаций.
GET /rest/organizations/:id/accountant-signature
Получить изображение подписи бухгалтера организации.
Авторизованный пользователь
Для пользователей с ролями Главный администратор (role_id = 8), Главный инспектор (role_id = 12) доступные все организации.
Для пользователей с другими ролями доступ к организациям ограничивается кластерами их организаций.
/rest/workgroups
GET /rest/workgroups/list
Список проектов, видимых текущему пользователю.
Главному администратору и Главному инспектору доступны все проекты. Другим пользователям доступны:
проекты, в которые их включили явно
открытые проекты их организаций
администратором и инспекторам организаций видны все проекты в рамках их организаций
Сортировка осуществляется по полю title.
Параметры
pageinteger default1— номер запрашиваемой страницыlimitinteger default25— количество записей на страницеsortDirectiondefaultASC— направление сортировки (ASC, DESC)titlestring — поиск только тех проектов, названия которых включают переданный текст (без учета регистра)
status = 200
// 2.0+
{
"items": [ // список доступных проектов
{
"id": 2, // id проекта
"title": "Настольная система по работе с обращениями граждан", // название проекта
"open": true, // отметка: является ли данный проект открытым
"defaults": false, // отметка: является ли данный проект проектом по умолчанию для организации
"creation_date": 1590577589, // дата создания проекта
"created_by": { // информация о пользователе, который создал проект
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
},
"organization": { // информация об организации, к которой относится проект
"id": 189, // id организации
"name": "Отдел разработки ПО" // название организации
},
},
{
"id": 3,
"title": "Мобильное приложение для работы с обращениями граждан",
"open": false,
"defaults": false,
"creation_date": 1590577589,
"created_by": {
"id": 6,
"fio": "Администратор"
},
"organization": {
"id": 188,
"name": "Отдел технической поддержки"
},
},
{
"id": 1,
"title": "По умолчанию",
"open": true,
"defaults": true,
"creation_date": 1590577589,
"created_by": {
"id": 6,
"fio": "Администратор"
},
"organization": {
"id": 188,
"name": "Отдел системного администрирования"
}
}
]
} GET /rest/workgroups/:id
Получение информации о проекте, если проект доступен текущему пользователю.
Главному администратору и главному инспектору доступны все проекты.
Администраторам и инспекторам организаций доступны проекты их организаций, а также другие проекты, в которые их включили явно.
Пользователям других ролей доступны открытые проекты их организаций, а также другие проекты, в которые их включили явно.
status = 200
// 2.0+
{
"id": 10, // id проекта
"title": "Настольная система по работе с обращениями граждан", // название проекта
"open": false, // отметка: является ли данный проект открытым
"defaults": false, // отметка: является ли данный проект проектом по умолчанию для организации
"creation_date": 1590577589, // дата создания проекта
"created_by": { // информация о пользователе, который создал проект
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
},
"organization": { // информация об организации, к которой относится проект
"id": 189, // id организации
"name": "Отдел разработки ПО" // название организации
}
} GET /rest/workgroups/:id/users
Получение списка пользователей проекта, где id - id проекта.
Главный администратор и Главный инспектор могут видеть пользователей внутри всех проектов.
Пользователи с другими ролями могут видеть пользователей внутри доступных им проектов.
Данные пользователей с ролью Клиент (role_id = 6) недоступны другим пользователям с ролью Клиент.
status = 200
// 2.0+
{
"items": [
{
"id": 3011, // id пользователя
"login": "admin1439218241106", // логин пользователя
"fio": "Иванов И.И.", // ФИО пользователя
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": 2, // id организации, либо null, если пользователь
// не относится ни к какой организации
"workgroup_ids": [ // массив id проектов, доступных пользователю
132,
232
],
"role_id": 10, // id роли пользователя: 6, 7 - обычный пользователь,
// 10 - админ организации, 8 - администратор всех организаций
"task_count": 17, // начиная с 0.16.0: количество назначенных на
// пользователя заданий в статии "В работе"
"message_channel_id": 99 // канал входящих сообщений
},
... // следующие элементы списка
// пользователей организации
]
} POST /rest/workgroups
Добавление нового проекта.
Главный администратор (role_id = 8), Главный инспектор (role_id = 12), Администратор организации (role_id = 10), Инспектор организации (role_id = 11), Администратор кластера (role_id = 5).
Главный администратор и Главный инспектор могут создать проект в любой организации.
Администратор организации и Инспектор организации могут создать проект только в своих организациях.
Администратор кластер может создавать проекты в организациях своих кластеров.
// 2.0+
{
"title": "Настольная система по работе с обращениями граждан", // * название проекта
"organization": {
"id": 189
}, // * id организации проекта
"open": false // отметка: является ли данный проект открытым; значение по умолчанию - true
}
status = 200
// 2.0+
{
"id": 10, // id проекта
"title": "Настольная система по работе с обращениями граждан", // название проекта
"open": false, // отметка: является ли данный проект открытым
"defaults": false, // отметка: является ли данный проект проектом по умолчанию для организации
"creation_date": 1590577589, // дата создания проекта
"created_by": { // информация о пользователе, который создал проект
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
},
"organization": { // информация об организации, к которой относится проект
"id": 189, // id организации
"name": "Отдел разработки ПО" // название организации
}
} PATCH /rest/workgroups/:id
Изменение информации о проекте.
Главный администратор (role_id = 8), Главный инспектор (role_id = 12), Администратор организации (role_id = 10), Инспектор организации (role_id = 11), Администратор кластера (role_id = 5).
Главному администратору и Главному инспектору для редактирования доступны все проекты.
Администратору организации и Инспектору организации для редактирования доступны проекты своих организаций, а также другие проекты, в которые их включили явно.
Администратору кластера для редактирования доступны проекты в организациях своих кластеров.
При попытке изменения проекта "По умолчанию" получим ошибку (400 BadRequest).
// 2.0+
{
"title": "Настольная система по работе с жалобами граждан" // * название проекта
}
status = 200
// 2.0+
{
"id": 10, // id проекта
"title": "Настольная система по работе с жалобами граждан", // название проекта
"open": false, // отметка: является ли данный проект открытым
"defaults": false, // отметка: является ли данный проект проектом по умолчанию для организации
"creation_date": 1590577589, // дата создания проекта
"created_by": { // информация о пользователе, который создал проект
"id": 6, // id пользователя
"fio": "Администратор" // ФИО пользователя
},
"organization": { // информация об организации, к которой относится проект
"id": 189, // id организации
"name": "Отдел разработки ПО" // название организации
}
} DELETE /rest/workgroups/:id
Удаление проекта.
Главный администратор (role_id = 8), Администратор организации (role_id = 10), Администратор кластера (role_id = 5).
Главному администратору для удаления доступны все проекты.
Администратору организации для удаления доступны проекты своих организаций, а также другие проекты, в которые его включили явно.
Администратору кластера для удаления доступны проекты в организациях своих кластеров.
При попытке удаления проекта "По умолчанию" получим ошибку (400 BadRequest).
POST /rest/workgroups/:id/users/:userId
Добавление пользователя в проект
Главный администратор (role_id = 8), Главный инспектор (role_id = 12), Администратор организации (role_id = 10), Инспектор организации (role_id = 11), Администратор кластера (role_id = 5).
Главному администратору и Главному инспектору доступны все проекты.
Администратору организации и Инспектору организации доступны проекты своих организаций, а также другие проекты, в которые их включили явно.
Администратору кластера доступны проекты в организациях своих кластеров.
Если пользователь уже состоит в проекте (открытом или закрытом), ничего не происходит; при этом неважно, каким образом он был включен туда ранее.
DELETE /rest/workgroups/:id/users/:userId
Удаление пользователя из проекта
Главный администратор (role_id = 8), Администратор организации (role_id = 10), Администратор кластера (role_id = 5).
Главному администратору доступны все проекты.
Администратору организации доступны проекты своих организаций, а также другие проекты, в которые его включили явно.
Администратору кластера доступны проекты в организациях своих кластеров.
Если проект открытый, и пользователь состоит в его организации, то ничего не происходит, а запрос возвращает 403 Forbidden.
Если пользователь не участвует в проекте, то ничего не происходит.
/rest/users
GET /rest/users/current
Получение информации о текущем пользователе.
status = 200
// 2.0+
{
"id": 6, // id пользователя
"login": "ivanov", // логин
"fio": "Иванов Иван Иванович", // ФИО
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": 1, // id организации
"workgroup_ids": [ // массив id проектов, доступных пользователю
132,
232
],
"role_id": 8, // id роли
"email": "test@gmail.com", // адрес электронной почты
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766", // телефон
"tracking": true, // включен ли трекинг
"glonass_id": null, // ГЛОНАСС-id для трекинга
"message_channel_id": 99, // канал входящих сообщений
"task_defaults": {
"assigned_organization": { // организация-исполнитель по умолчанию, если она есть
"id": 99,
"Тестовая организация"
}
}
} POST /rest/users/register
Неавторизованный пользователь.
Регистрация нового пользователя с ролью Клиент (role_id = 6).
Входные данные
// 2.0+
{
"login": "login", // * логин
"paswd": 12345, // * пароль
"fio": "Иванов И.И.", // * ФИО
"organization_id": 514, // * id организации
"email": "test@gmail.com", // * email
"phone": "+7 999 888 7766", // телефон
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999" // паспортные данные
}
status = 200
// 2.0+
{
"id": 6923, // id пользователя
"login": "login", // логин
"fio": "Иванов И.И.", // ФИО
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [], // список меток пользователя
"organization_id": 514, // id организации
"role_id": 6, // id роли
"email": "test@gmail.com", // адрес электронной почты
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766", // телефон
"tracking": false, // включить трекинг
"glonass_id": null, // ГЛОНАСС-id для трекинга
"message_channel_id": 99 // канал входящих сообщений
} POST /rest/users/check-login
Неавторизованный пользователь.
Проверка логина на существование в системе.
Входные данные
// 2.0+
{
"login": "user_test" // логин пользователя
}
status = 200
// 2.0+
{
"check": false // true - логин не существует в системе,
// и он доступен для использования;
// false - логин существует в системе,
// и он не доступен для использования;
} GET /rest/users
Получение списка всех пользователей, которых может увидеть текущий пользователь:
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
Пользователям с ролью Клиент недоступны данные других пользователей с ролью Клиент.
Параметры запроса
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2.
taskDatetimestamp — дата, параметр для подсчета количества заданий: в списке отобразится количество назначенных на пользователя заданий, в стадии "В работе" в указанный день (время не учитывается)+
typeIdlong — фильтр по типам пользователей+
tagIdlong — фильтр по меткам пользователей
status = 200
// 2.0+
{
"items": [
{
"id": 3011, // id пользователя
"login": "admin1439218241106", // логин пользователя
"fio": "Иванов И.И.", // ФИО
"organization_id": 2, // id организации
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"workgroup_ids": [ // массив id проектов, доступных пользователю
132,
232
],
"role_id": 10, // id роли
"email": "test@gmail.com", // адрес электронной почты
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766", // телефон
"task_count": 17, // начиная с 0.16.0: количество назначенных на
// пользователя заданий в стадии "В работе"
"tracking": false, // включен ли трекинг
"glonass_id": null, // ГЛОНАСС-id для трекинга
"message_channel_id": 99 // канал входящих сообщений
},
... // следующие элементы списка пользователей
]
} GET /rest/users/by-distance
Запрос выдает список видимых пользователей с информацией об их местоположении:
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
Пользователям с ролью Клиент недоступны данные других пользователей с ролью Клиент.
todo Если трекинг для пользователя не включен, то информация о местоположении пользователя отсутствует.
Параметры запроса
londouble — долгота точки, параметр для сортировки пользователей: для активных в течение последних суток пользователей, по местоположению которых имеются данные, рассчитывается расстояние от местоположения пользователя до точки с указанными координатами, и пользователи сортируются в порядке удаления от указанной точки; остальные пользователи сортируются по полюfiolatdouble — широта точки, параметр для сортировки пользователей: для активных в течение последних суток пользователей, по местоположению которых имеются данные, рассчитывается расстояние от местоположения пользователя до точки с указанными координатами, и пользователи сортируются в порядке удаления от указанной точки; остальные пользователи сортируются по полюfiosearchstring — параметр для фильтрации пользователей по полюfio: в списке остаются только те пользователи, значение поляfioкоторых содержит в себе указанную строкуpageinteger default1— параметр для фильтрации пользователей, номер страницы списка пользователей: в ответе отобразится только та часть списка пользователей, которая соответствует указанной страницеlimitinteger default10— параметр для фильтрации пользователей, количество пользователей из списка, размещенных на одной странице: в ответе отобразится только то количество пользователей из списка, которое соответствует указанному ограничению
status = 200
// 2.0+
{
"items": [
{
"user": {
"id": 614, // id пользователя
"fio": "Иванов Иван Иванович", // ФИО пользователя
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
... // следующие элементы списка
],
"organization_id": 3 // id организации пользователя
},
"glonass_id": 225, // ГЛОНАСС-id
"lon": 49.1416784, // координата долготы местоположения пользователя
"lat": 55.7745002, // координата широты местоположения пользователя
"date": 1501844904, // дата последней активности пользователя
"active": true // активность пользователя за последние сутки от
// текущего времени: активность рассчитывается
// исходя из даты последнего обновления точки
// пользователя; null, если нет даты
// обновления, или мы не имеем данных о
// местоположении пользователя;
"distance": 34.7971366515358 // расстояние от пользователя до указанной
// в параметрах запроса точки (в км.),
// либо null, в случаях, если точка не была
// указана в параметрах запроса, или мы не
// имеем данных о местоположении пользователя;
},
... // следующие элементы списка
]
} GET /rest/users/count
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Получение количества пользователей.
status = 200
// 2.0+
{
"count": 970 // количество пользователей
} GET /rest/users/locations
Запрос выдает точки всех пользователей, которые доступны текущему пользователю:
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
Пользователям с ролью Клиент недоступны данные других пользователей с ролью Клиент.
status = 200
// 2.0+
{
"items": [
{
"id": 999, // id пользователя ActiveMap
"point": { // координаты местоположения пользователя
"user_id": 225, // ГЛОНАСС-id
"lon": 50.0001, // координата longitude (долгота)
"lat": 50.0002, // координата latitude (широта),
"date": 1526314368, // время последней активности пользователя
"direction": 96, // направление
"speed": 1.0, // скорость
"active": false // активность пользователя в заданный временной интервал
// (интервал задается в переменной geo4me.user.activity.interval
// в файле app.conf, по умолчанию, 30 минут)
}
}
]
} GET /rest/users/monitoring
Соединение по web-socket для получения координат и значений датчиков пользователей.
Запрос выдает данные, доступные текущему пользователю:
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
Пример сообщения по WS
// 2.0+
{
"gauges": [
{
"user_id": 131, // id пользователя
"port": 54, // порт, по которому приходят данные
"analog_value": 2.0, // текущее значение аналогового датчика
"date": 1605100717 // дата обновления
},
... // следующие элементы списка
]
}
{
"points": [
{
"user": {
"id": 609, // id пользователя
"department_id": 609 // id организации
},
"location": {
"user_id": 1510, // ГЛОНАСС-id
"lon": 49.4513218, // координата долготы
"lat": 56.2500685, // координата широты
"date": 1490987230, // дата последней активности пользователя
"direction": 96, // направление
"speed": 1.0, // скорость
"active": false // активность пользователя (временной интервал
// для проверки активности пользователя задается
// в настройках, по умолчанию это 30 минут);
// null, если нет данных о местоположении пользователя
}
}
]
} GET /rest/users/locations/live
Соединение по web-socket для получения актуальной информации о местоположении пользователей.
Запрос выдает данные о местоположении пользователей, доступных текущему пользователю:
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
// 2.0+
{
"points": [
{
"user": {
"id": 609, // id пользователя
"department_id": 609 // id организации
},
"location": {
"user_id": 1510, // ГЛОНАСС-id
"lon": 49.4513218, // координата долготы
"lat": 56.2500685, // координата широты
"date": 1490987230, // дата последней активности пользователя
"direction": 96, // направление
"speed": 1.0, // скорость
"active": false // активность пользователя (временной интервал
// для проверки активности пользователя задается
// в настройках, по умолчанию это 30 минут);
// null, если нет данных о местоположении пользователя
}
},
{
"user": {
"id": 622,
"organization_id": 622
},
"location": {
"user_id": 1511,
"lon": 0.0,
"lat": 0.0,
"date": null,
"active": false
}
}
]
} PATCH /rest/users/tags-batch
Главный администратор (role_id = 8).
Массовый запрос на редактирование меток пользователей: всем пользователям, id которых указаны в users, будут добавлены метки из added и удалены метки из remove.
Входные данные
// 2.0+
{
"users": [ // пользователи, метки которых необходимо отредактировать
{
"id": 121 // id пользователя
},
... // следующие элементы списка пользователей
],
"tags": { // метки пользователей
"add": [ // метки, которые необходимо добавить
{
"id": 1 // id метки
},
... // следующие элементы списка меток
],
"remove": [ // метки, которые необходимо удалить
{
"id": 2 // id метки
},
... // следующие элементы списка меток
]
}
} POST /rest/users
Добавление нового пользователя.
Главный администратор (role_id = 8), Администратор организации (role_id = 3), Администратор кластера (role_id = 5).
Администратор организации может добавить пользователя только в свою организацию.
Администратор кластера может добавить пользователя только в организацию своего кластера.
При добавлении аватара к началу выполнения запроса файл должен быть загружен на сервер запросом POST /files/upload.
Полученный name нужно подставить в поле avatar_file_name при выполнении основного запроса.
Входные данные
// 2.0+
{
"id": 123, // id пользователя
"login": "ivanov_ivan", // * логин
"paswd": "qwerty123", // * пароль
"fio": "Иванов И.И.", // * ФИО пользователя
"organization_id": 1, // * id организации
"workgroup_ids": [ // массив id проектов, доступных пользователю
132,
232
],
"role_id": 7, // id роли, по умолчанию 6 - Клиент
"type": { // тип
"id": 1 // id типа
},
"avatar_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.jpg" // имя файла после загрузки на сервер
// (jpg | jpeg)
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
{
"id": 22
},
... // следующие элементы списка
],
"email": "test@gmail.com", // email
"phone": "+7 999 888 7766", // телефон
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"tracking": true // включить трекинг
}
status = 200
// 2.0+
{
"id": 123,
"login": "ivanov_ivan",
"fio": "Иванов И.И.",
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
{
"id": 22
},
... // следующие элементы списка
],
"organization_id": 1, // id организации
"workgroup_ids": [ // массив id проектов, доступных пользователю
132,
232
],
"role_id": 7, // id роли
"email": "test@gmail.com", // адрес электронной почты
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766", // телефон
"tracking": true, // включен ли трекинг
"glonass_id": 1450, // ГЛОНАСС-id для трекинга
"message_channel_id": 99 // канал входящих сообщений
} PATCH /rest/users/:id
Редактирование учетной записи пользователя по id.
Текущий пользователь, Главный администратор (role_id = 8), Администратор организации (role_id = 3), Администратор кластера (role_id = 5).
Текущий пользователь может редактировать свою учетную запись.
Администратор организации может редактировать учетные записи пользователей только своей организации.
Администратор кластера может редактировать учетные записи пользователей из организаций своего кластера.
При organizationIds = [] и не-передаче organizationId ("оставить главную организацию как есть") будет осуществлена попытка стереть как organizationId, так и organizationIds. Такая попытка пройдёт только если одновременно меняется роль на главного администратора/инспектора.
При передаче organizationIds = [] и передаче organizationId = X ("установить главную организацию") будет сделана замена organizationIds = [X], чтобы привести передаваемые данные к согласованности.
Имеем два случая и разное поведение в каждом из них. Так сделано потому, что оба приведённых выше запроса — некорректные, и мы "исправляем" каждый из них наиболее удобным для нас способом, чтобы минимизировать изменения в клиентах, которые на данный момент отправляют (или могут отправлять) неверные данные.
Входные данные
// 2.0+
{
"login": "ivanov_ivan", // логин
"fio": "Иванов Иван Иванович", // ФИО
"role_id": 7, // id роли; пользователь не может сам поменять свою роль
"organization_id": 517, // id организации, права на изменения
// есть только у главного администратора
"workgroup_ids": [ // массив id проектов, доступных пользователю
132,
232
],
"type": { // тип
"id": 1 // id типа
},
"avatar_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.jpg" // имя файла после загрузки на сервер
// (jpg | jpeg)
"tags": { // метки пользователя
"add": [ // метки, которые необходимо добавить
{
"id": 21 // id метки
}
],
"remove": [ // метки, которые необходимо удалить
{
"id": 22 // id метки
}
]
}
"email": "test@gmail.com", // адрес электронной почты
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"phone": "+7 999 888 7766", // телефон
"passport": "9205 999999", // паспортные данные
"tracking": true // включить трекинг
}
status = 200
// 2.0+
{
"id": 6935, // id пользователя
"login": "ivanov_ivan", // логин пользователя
"fio": "Иванов Иван Иванович", // ФИО
"type": { // тип
"id": 1, // id типа
"title": "Пользователи" // название
},
"avatar_update_date": 1605793362, // дата обновления аватара
"tags": [ // метки пользователя
{
"id": 1 // id метки
},
{
"id": 21
},
... // следующие элементы списка
],
"organization_id": 517, // id организации
"workgroup_ids": [ // массив id проектов, доступных пользователю
132,
232
],
"role_id": 10, // id роли
"email": "test@gmail.com", // адрес электронной почты
"address": "г.Казань, ул.Назарбаева, д.25, кв.125", // адрес
"passport": "9205 999999", // паспортные данные
"phone": "+7 999 888 7766", // телефон
"tracking": true, // включен ли трекинг
"glonass_id": 1450 // ГЛОНАСС-id для трекинга
"message_channel_id": 99, // канал входящих сообщений
} DELETE /rest/users/:id
Удаление учетной записи пользователя.
Главный администратор (role_id = 8), Администратор организации (role_id = 3), Администратор кластера (role_id = 5).
Администратор организации может удалять учетные записи пользователей только своей организации.
Администратор кластера может удалять учетные записи пользователей из организаций своего кластера.
GET /rest/users/:activeMapUserId/geo4me/track
Получение трека пользователя за указанный временной интервал (dateFrom, dateTo).
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
Пользователям с ролью Клиент недоступны данные других пользователей с ролью Клиент.
Параметры запроса
fromtimestamp — дата начала временного интервала для получения трека пользователяtilltimestamp — дата окончания временного интервала для получения трека пользователя
// 2.0+
{
"items": [
{
"data": 1516709271, // дата
"lat": 55.01, // координаты точки, широта
"lon": 50.02, // координаты точки, долгота
"control": true, // является ли точка контрольной
"address": "Российская Федерация, Татарстан, Казань, улица Нурсултана Назарбаева, 27", // адрес точки
"distance": 18644 // пройденная дистанция от начала пути
}, // ... другие точки
]
}
Примечания:
Если параметры
dateFrom,dateToне заданы, по умолчанию берем текущие сутки (с 00:00:00 до текущего времени текущего дня);Если параметр
dateFromзадан,dateToне задан, берем сутки вперед отdateFrom;Если параметр
dateToзадан,dateFromне задан, берем сутки назад отdateTo;Если параметры
dateFrom,dateToзаданы, но временной интервал превышает 1 неделю, выдаем ошибку 404;Задание параметров
dateFrom,dateToв будущем времени допускается.
GET /rest/users/:id/avatar
Получение аватара пользователя, если запрашиваемый пользователь виден текущему пользователю.
GET /rest/users/:id/avatar/crop/w:width/h:height
Получение аватара пользователя, если запрашиваемый пользователь виден текущему пользователю.
Аватар отдается указанных размеров (возможна обрезка изображения вдоль одной из сторон).
GET /rest/users/:id/avatar/fit/w:width/h:height
Получение аватара пользователя, если запрашиваемый пользователь виден текущему пользователю.
Аватар отдается указанных размеров (возможно появление пустого поля вдоль одной из сторон).
DELETE /rest/users/:id/avatar
Текущий пользователь, главный администратор (role_id = 8), администратор организации (role_id = 3), администратор кластера (role_id = 5).
Удалить аватар пользователя.
Текущий пользователь может удалить свой аватар.
Администратор организации может удалить аватар пользователя только своей организации.
Администратор кластера может удалить аватар пользователя из организации своего кластера.
GET /rest/users/gauges/values
Получить текущий срез значений всех датчиков.
Запрос выдает данные о значениях датчиков пользователей, доступных текущему пользователю:
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
status = 200
// 2.0+
{
"items": [
{
"user_id": 131, // id пользователя
"port": 54, // порт, по которому приходят данные
"name": "Наличие интернета", // название типа датчика
"analog_value": 2.0, // текущее значение аналогового датчика
"date": 1605100717 // дата обновления
},
... // следующие элементы списка
]
} GET /rest/users/:id/gauges/history
Главный администратор (role_id = 8), главный инспектор (role_id = 12), администратор кластера (role_id = 5). администратор организации (role_id = 10), инспектор организации (role_id = 11), текущий пользователь.
Получить историю значений датчиков за указанный период.
Администратор кластера может получить историю значений датчиков пользователя из организации своего кластера.
Администратор организации (инспектор организации) может получить историю значений датчиков пользователя только своей организации.
Авторизованный пользователь может получить только свою историю значений датчиков.
Параметры запроса
обязательный
fromtimestamp — дата начала временного интервала для получения истории значений датчиковобязательный
tilltimestamp — дата окончания временного интервала для получения истории значений датчиков
status = 200
// 2.0+
{
"items": [
{
"user_id": 131, // id пользователя
"port": 54, // порт, по которому приходят данные
"name": "Наличие интернета", // название типа датчика
"analog_value": 2.0, // текущее значение аналогового датчика
"date": 1605100717 // дата обновления
},
... // следующие элементы списка
]
} GET /rest/users/gauges/live
Соединение по web-socket для получения значений датчиков пользователей.
Запрос выдает данные о значениях датчиков пользователей, доступных текущему пользователю:
главный администратор и главный инспектор видят всех пользователей
администратор кластера видит всех пользователей в организациях и проектах внутри кластера
прочие пользователи видят:
состоящих с ними в одной организации
состоящих в проектах, которые они видят (кроме одного случая: пользователь, включенный в закрытый проект организации, в которой он не состоит, не будет видеть администраторов и инспекторов этой организации)
Пример сообщения по WS
// 2.0+
{
"gauges": [
{
"user_id": 131, // id пользователя
"port": 54, // порт, по которому приходят данные
"analog_value": 2.0, // текущее значение аналогового датчика
"date": 1605100717 // дата обновления
},
... // следующие элементы списка
]
} POST /rest/users/types
Главный администратор (role_id = 8).
Добавление нового типа пользователей.
Пиктограмма является обязательным полем, поэтому к началу выполнения запроса файл пиктограммы уже должен
быть загружен на сервер запросом POST /files/upload. Полученный name нужно подставить в поле icon_file_name
при выполнении основного запроса.
Входные данные
// 2.0+
{
"title": "Название типа", // * название
"icon_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.PNG", // * имя файла после загрузки на сервер
// (png)
"use_initials": true, // признак того, что нужно использовать инициалы
// пользователя в маркере на карте (вместо пиктограммы)
"use_avatar": true // признак того, что нужно использовать аватар пользователя
// (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
}
status = 200
// 2.0+
{
"id": 184, // id типа
"title": "Название типа", // название
"icon_update_date": 1605699953, // дата последнего изменения пиктограммы
"use_initials": false, // признак того, что нужно использовать инициалы пользователя
// в маркере на карте (вместо пиктограммы)
"use_avatar": false, // признак того, что нужно использовать аватар пользователя
// (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
"is_default": false // признак типа по умолчанию
} PATCH /rest/users/types/:id
Главный администратор (role_id = 8).
Изменение информации о типе пользователей.
Входные данные
// 2.0+
{
"title": "Название типа", // название
"icon_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.PNG", // имя файла после загрузки на сервер
// (png)
"use_initials": true, // признак того, что нужно использовать инициалы
// пользователя в маркере на карте (вместо пиктограммы)
"use_avatar": true // признак того, что нужно использовать аватар пользователя
// (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
}
status = 200
// 2.0+
{
"id": 184, // id типа
"title": "Название типа", // название
"icon_update_date": 1605699953, // дата последнего изменения пиктограммы
"use_initials": false, // признак того, что нужно использовать инициалы пользователя
// в маркере на карте (вместо пиктограммы)
"use_avatar": false, // признак того, что нужно использовать аватар пользователя
// (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
"is_default": false // признак типа по умолчанию
} DELETE /rest/users/types/:id
Главный администратор (role_id = 8).
Удаление типа пользователей.
Нельзя удалить тип пользователей по умолчанию - будет получена 403.
Нельзя удалить тип пользователей, если существуют (неудалённые) пользователи с этим типом - будет получена 403.
GET /rest/users/types/list
Список типов пользователей.
Сортировка осуществляется по полю title.
Параметры
pageinteger default1— номер запрашиваемой страницыlimitinteger default25— количество записей на страницеsortDirectiondefaultASC— направление сортировки (ASC, DESC)
status = 200
// 2.0+
{
"items": [
{
"id": 184, // id типа
"title": "Название типа", // название
"icon_update_date": 1605699953, // дата последнего изменения пиктограммы
"use_initials": false, // признак того, что нужно использовать инициалы пользователя
// в маркере на карте (вместо пиктограммы)
"use_avatar": false, // признак того, что нужно использовать аватар пользователя
// (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
"is_default": false // признак типа по умолчанию
},
... // следующие элементы списка
],
"total": 3, // общее количество элементов
"limit": 25, // максимальное количество элементов на странице
"page": 1 // текущая страница
} GET /rest/users/types/:id
Получение информации о типе пользователей.
status = 200
// 2.0+
{
"id": 184, // id типа
"title": "Название типа", // название
"icon_update_date": 1605699953, // дата последнего изменения пиктограммы
"use_initials": false, // признак того, что нужно использовать инициалы пользователя
// в маркере на карте (вместо пиктограммы)
"use_avatar": false, // признак того, что нужно использовать аватар пользователя
// (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
"is_default": false // признак типа по умолчанию
} GET /rest/users/types/:id/icon
Любой пользователь.
Получение пиктограммы (файла) типа пользователей.
POST /rest/users/tags
Главный администратор (role_id = 8).
Добавление новой метки пользователей.
Входные данные
// 2.0+
{
"title": "Курьер", // * название метки
"color": "ff0000" // цвет метки для отображения на карте (HEX код)
}
status = 200
// 2.0+
{
"id": 11, // id метки
"title": "Курьер", // название метки
"color": "ff0000" // цвет метки
} PATCH /rest/users/tags/:id
Главный администратор (role_id = 8).
Изменение информации о метке пользователей.
Входные данные
// 2.0+
{
"title": "Курьер Подмосковье", // название метки
"color": "008000" // цвет метки для отображения на карте (HEX код)
}
status = 200
// 2.0+
{
"id": 11, // id метки
"title": "Курьер Подмосковье", // название метки
"color": "008000" // цвет метки
} GET /rest/users/tags/list
Список меток пользователей.
Сортировка осуществляется по полю title.
Параметры
pageinteger default1— номер запрашиваемой страницыlimitinteger default25— количество записей на страницеsortDirectiondefaultASC— направление сортировки (ASC, DESC)
status = 200
// 2.0+
{
"items": [
{
"id": 11, // id метки
"title": "Курьер", // название метки
"color": "ff0000" // цвет метки
},
... // следующие элементы списка
],
"total": 3, // общее количество элементов
"limit": 25, // максимальное количество элементов на странице
"page": 1 // текущая страница
} GET /rest/users/tags/:id
Получение информации о метке пользователей.
status = 200
// 2.0+
{
"id": 11, // id метки
"title": "Курьер", // название метки
"color": "ff0000" // цвет метки
} DELETE /rest/users/tags/:id
Главный администратор (role_id = 8).
Удаление метки пользователей.
GET /rest/users/roles
Список ролей пользователей.
status = 200
// 2.0+
{
"items": [
{
"id": 6, // id роли
"name": "Клиент", // название роли
"code": "CUSTOMER" // код роли
},
... // следующие элементы списка
]
} /rest/types
GET /rest/types
Получение списка доступных текущему пользователю видов работ. Главному администратору отдаются все виды работ.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, groupId=1,2.
useCacheboolean defaulttrue— использовать кэш; возможно только при отсутствии сортировки и параметров фильтрацииsearchstring — текстовый поиск видов работ по значениям параметров id, namenamestring — текстовый поиск видов работ по значению параметра namedefaultTypeboolean — при значении defaultType=true отображаются виды работ, которые являются видами по умолчаниюperiodOfReviewInSeclong — отображаются виды работ, для которых величина срока исполнения работ данного вида в секундах равна указанному значениюltPeriodOfReviewInSeclong — отображаются виды работ, для которых величина срока исполнения работ данного вида в секундах меньше указанного значенияgtPeriodOfReviewInSeclong — отображаются виды работ, для которых величина срока исполнения работ данного вида в секундах больше указанного значения+
deadlineTypeinteger — отображаются виды работ, для которых поле расчета срока исполнения работ данного вида совпадает с указанными значениями (deadlineType=1 соответствует значению "AT_CREATE", расчет срока ведется от времени создания, deadlineType=2 соответствует значению "AT_UPDATE", расчет срока ведется от даты назначения на исполнителя)+
groupIdlong — отображаются виды работ, принадлежащие указанным группамsortBydefaultid— поле, по которому ведется сортировкаsortDirectiondefaultASC— направление сортировки (ASC, DESC)В независимости от значения настройки
behavior.use.custom.work.types.sort=true/falseвapplication.conf, если параметры сортировкиsortBy,sortDirectionпереданы, то сортировка ведется по ним.Если параметры
sortBy,sortDirectionне переданы иbehavior.use.custom.work.types.sort=true, то сортировка будет вестись по полюorder_keyс направлением ASC.Если параметры
sortBy,sortDirectionне переданы иbehavior.use.custom.work.types.sort=false, то сортировка будет вестись по полюidс направлением ASC.
/types
/types?search=доставка&defaultType=true<PeriodOfReviewInSec=172800
/types?search=доставка&defaultType=false>PeriodOfReviewInSec=86400&deadlineType=1&groupId=1,2
/types?defaultType=false&deadlineType=1&groupId=1,2&sortBy=order_key&sortDirecton=DESC
/types?defaultType=false&deadlineType=1>PeriodOfReviewInSec=86400<PeriodOfReviewInSec=172800&groupId=1,2
status = 200
// 2.0+
{
"count": 20, // количество видов работ, удовлетворяющих
// условиям поиска и фильтрации
"items": [
{
"id": 12, // id вида работ
"name": "Обрушение конструкции", // название вида работ
"icon": "icon_12.png", // название двумерной иконки
"icon3d": "icon3d_12.png", // название трехмерной иконки
"icon_done": "icon_done_1.png", // название иконки для этапа "выполнено"
"map_icon": "map_icon_12.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной
// иконки для карты
"map_icon_done": "map_icon_done_1.png", // название иконки для этапа "выполнено" на карте
"default": true, // является ли данный вид
// видом по умолчанию
"period_of_review": null, // период исполнения работ
// данного вида работ
"period_of_review_in_sec": null, // величина срока исполнения работ данного
// вида работ по умолчанию (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида:
// null,
// от даты создания "AT_CREATE",
// от даты назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид работ
1,
2,
3
],
"order_key": 3, // порядковый номер вида работ
// в отсортированном списке
"group_id": null // id группы, которой принадлежит
// вид работ, и null,
// если он не принадлежит никакой группе
},
... // следующие элементы списка видов работ
]
}
Более подробно о времени истечения срока исполнения видов работ можно прочитать здесь: Время истечения срока в часах
Более подробно о сортировке видов работ можно прочитать здесь: Сортировка видов работ
Более подробно о группировке видов работ можно прочитать здесь: Группировка видов работ
GET /rest/types/compressed
Получение списка доступных текущему пользователю видов работ с учетом доступности вида работ организациям:
поле organizations в ответе будет отсутствовать, вместо него добавляются новые поля: included_organizations (доступные организации) и excluded_organizations (недоступные организации)
если вид работ доступен всем организациям (default=true), то поля included_organizations, excluded_organizations будут пустыми
если вид работ доступен не всем организациям (default=false), тогда поле included_organizations будет заполнено доступными организациями, если их количество составлет не более половины от количества всех организаций; в противном случае поле excluded_organizations будет заполнено недоступными организациями.
Главному администратору отдаются все виды работ.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, groupId=1,2.
useCacheboolean defaulttrue— использовать кэш; возможно только при отсутствии сортировки и параметров фильтрацииsearchstring — текстовый поиск видов работ по значениям параметров id, namenamestring — текстовый поиск видов работ по значению параметра namedefaultTypeboolean — при значении defaultType=true отображаются виды работ, которые являются видами по умолчаниюperiodOfReviewInSeclong — отображаются виды работ, для которых величина срока исполнения работ данного вида в секундах равна указанному значениюltPeriodOfReviewInSeclong — отображаются виды работ, для которых величина срока исполнения работ данного вида в секундах меньше указанного значенияgtPeriodOfReviewInSeclong — отображаются виды работ, для которых величина срока исполнения работ данного вида в секундах больше указанного значения+
deadlineTypeinteger — отображаются виды работ, для которых поле расчета срока исполнения работ данного вида совпадает с указанными значениями (deadlineType=1 соответствует значению "AT_CREATE", расчет срока ведется от времени создания, deadlineType=2 соответствует значению "AT_UPDATE", расчет срока ведется от даты назначения на исполнителя)+
groupIdlong — отображаются виды работ, принадлежащие указанным группамsortBydefaultid— поле, по которому ведется сортировкаsortDirectiondefaultASC— направление сортировки (ASC, DESC)
Примечания:
В независимости от значения настройки behavior.use.custom.work.types.sort=true/false в application.conf,
если параметры сортировки sortBy, sortDirection переданы, то сортировка ведется по ним.
Если параметры sortBy, sortDirection не переданы и behavior.use.custom.work.types.sort=true, то сортировка будет
вестись по полю order_key с направлением ASC.
Если параметры sortBy, sortDirection не переданы и behavior.use.custom.work.types.sort=false, то сортировка будет
вестись по полю id с направлением ASC.
/types/compressed
/types/compressed?search=доставка&defaultType=true<PeriodOfReviewInSec=172800
/types/compressed?search=доставка&defaultType=false>PeriodOfReviewInSec=86400&deadlineType=1&groupId=1,2
/types/compressed?defaultType=false&deadlineType=1&groupId=1,2&sortBy=order_key&sortDirecton=DESC
/types/compressed?defaultType=false&deadlineType=1>PeriodOfReviewInSec=86400<PeriodOfReviewInSec=172800&groupId=1,2
status = 200
// 2.0+
{
"count": 20, // количество видов работ, удовлетворяющих
// условиям поиска и фильтрации
"items": [
{
"id": 12, // id вида работ
"name": "Обрушение конструкции", // название вида работ
"icon": "icon_12.png", // название двумерной иконки
"icon3d": "icon3d_12.png", // название трехмерной иконки
"icon_done": "icon_done_1.png", // название иконки для этапа "выполнено"
"map_icon": "map_icon_12.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной
// иконки для карты
"map_icon_done": "map_icon_done_1.png", // название иконки для этапа "выполнено" на карте
"default": true, // является ли данный вид
// видом по умолчанию
"period_of_review": null, // период исполнения работ
// данного вида работ
"period_of_review_in_sec": null, // величина срока исполнения работ данного
// вида работ по умолчанию (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида:
// null,
// от даты создания "AT_CREATE",
// от даты назначения на исполнителя
// "AT_UPDATE".
"organizations": [
], // массив id организаций, которым доступен вид работ, в данном запросе будет пустым
"included_organizations": [ // массив id организаций,
// которым доступен вид работ
1,
2,
3
],
"excluded_organizations": [
], // массив id организаций, которым не доступен вид работ
"order_key": 3, // порядковый номер вида работ
// в отсортированном списке
"group_id": null // id группы, которой принадлежит
// вид работ, и null,
// если он не принадлежит никакой группе
},
... // следующие элементы списка видов работ
]
}
Более подробно о времени истечения срока исполнения видов работ можно прочитать здесь: Время истечения срока в часах
Более подробно о сортировке видов работ можно прочитать здесь: Сортировка видов работ
Более подробно о группировке видов работ можно прочитать здесь: Группировка видов работ
POST /rest/types/sort
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Ручная сортировка видов работ в порядке, заданном в теле запроса.
Входные данные
// 2.0+
{
"ids": [ // id видов работ в отсортированном порядке
12,
1,
3,
6,
2,
5
]
}
status = 200
// 2.0+
{
"items": [
{
"id": 12, // id вида
"name": "Обрушение конструкции", // название вида
"icon": "icon_12.png", // название двумерной иконки
"icon3d": "icon3d_12.png", // название трехмерной иконки
"icon_done": "icon_done_1.png", // название иконки для этапа "выполнено"
"map_icon": "map_icon_12.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной иконки для карты
"map_icon_done": "map_icon_done_1.png", // название иконки для этапа "выполнено" на карте
"default": true, // является ли данный вид видом
// по умолчанию
"period_of_review": null, // период исполнения работ данного вида
"period_of_review_in_sec": null, // величина срока исполнения работ
// данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения работ
// данного вида: null, от даты создания
// "AT_CREATE", от даты назначения
// на исполнителя "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
1,
2,
3
],
"order_key": 3, // порядковый номер видов работ
// в отсортированном списке
"group_id": null // id группы, которой принадлежит вид,
// и null, если вид не принадлежит
// никакой группе
},
... // следующие элементы списка видов работ
// в заданном порядке сортировки
]
} GET /rest/types/groups/list
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Получить список всех групп видов работ.
status = 200
// 2.0+
{
"items": [
{
"id": 41, // id группы
"name": "название группы" // название группы
},
... // следующие элементы списка групп
]
} POST /rest/types/groups
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Создание новой группы видов работ.
Входные данные
// 2.0+
{
"name": "название группы" // * название группы
}
status = 200
// 2.0+
{
"id": 208, // id группы
"name": "название группы" // название группы
} GET /rest/types/groups/:id
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Получение группы видов работ.
status = 200
// 2.0+
{
"id": 208, // id группы
"name": "название группы" // название группы
} PUT /rest/types/groups/:id
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Изменение группы видов работ.
Входные данные
// 2.0+
{
"name": "измененное название группы" // название группы
}
status = 200
// 2.0+
{
"id": 208, // id группы
"name": "измененное название группы" // название группы
} DELETE /rest/types/groups/:id
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Удаление группы видов работ.
POST /rest/types
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Создание вида работ.
Входные данные
// 2.0+
{
"name": "Доставка техники", // * название вида работ
"icon": "icon_158.png", // * название двумерной иконки, иконка
// по умолчанию - "default_icon.png"
"icon3d": "icon3d_158.png", // * название трехмерной иконки, иконка
// по умолчанию - "default_icon3d.png"
"map_icon": "default_iconmap.png", // * название иконки для карты, иконка
// по умолчанию - "default_iconmap.png"
"map_icon_highlight": "default_iconmap_highlight.png", // * название увеличенной иконки для карты,
// иконка по умолчанию -
// "default_iconmap_highlight.png"
"type_default": false, // * является ли данный вид видом
// по умолчанию
"period_of_review": 2, // период исполнения работ данного вида
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", // * поле для расчета срока исполнения
// работ данного вида: от даты
// создания "AT_CREATE", от даты
// назначения на исполнителя "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"group_id": 22 // id группы, которой принадлежит вид,
// и null, если вид не принадлежит
// никакой группе
}
status = 200
// 2.0+
{
"id": 1325, // id вида
"name": "Доставка оборудования", // название вида
"order_key": null, // порядок сортировки
"icon": "icon_158.png", // название двумерной иконки
"icon3d": "icon3d_158.png", // название трехмерной иконки
"map_icon": "default_iconmap.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной
// иконки для карты
"default": false, // является ли данный вид
// видом по умолчанию
"period_of_review": 2, // период исполнения работ
// данного вида
"icon_done": null, // название иконки для этапа "выполнено"
"map_icon_done": null, // название иконки для этапа "выполнено" на карте
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию
// (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида: от даты
// создания "AT_CREATE", от даты
// назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"group_id": 22 // id группы, которой принадлежит
// вид, или null, если вид не
// принадлежит никакой группе
} GET /rest/types/:id
Получение вида работ по указанному id.
status = 200
// 2.0+
{
"id": 1325, // id вида
"name": "Доставка оборудования", // название вида работ
"order_key": null, // порядок сортировки
"icon": "icon_158.png", // название двумерной иконки
"icon3d": "icon3d_158.png", // название трехмерной иконки
"map_icon": "default_iconmap.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной иконки
// для карты
"default": false, // является ли данный вид видом
// по умолчанию
"period_of_review": 2, // период исполнения работ
// данного вида
"icon_done": null, // название иконки для этапа "выполнено"
"map_icon_done": null, // название иконки для этапа "выполнено" на карте
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию
// (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида: от даты
// создания "AT_CREATE", от даты
// назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"group_id": 22 // id группы, которой принадлежит
// вид, или null, если вид не
// принадлежит никакой группе
} PUT /rest/types/:id
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Изменение вида работ.
Входные данные
// 2.0+
{
"name": "Доставка оборудования", // название вида
"icon": "icon_158.png", // название двумерной иконки
"icon3d": "icon3d_158.png", // название трехмерной иконки
"map_icon": "default_iconmap.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной иконки для карты
"type_default": false, // является ли данный вид работ видом
// по умолчанию
"period_of_review": 2, // период исполнения работ данного вида
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида: от даты
// создания "AT_CREATE", от даты
// назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"group_id": 22 // id группы, которой принадлежит
// вид, или null (либо 0), если вид не
// принадлежит никакой группе
}
status = 200
// 2.0+
{
"id": 1325, // id вида
"name": "Доставка оборудования", // название вида
"order_key": null, // порядок сортировки
"icon": "icon_158.png", // название двумерной иконки
"icon3d": "icon3d_158.png", // название трехмерной иконки
"map_icon": "default_iconmap.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной иконки
// для карты
"default": false, // является ли данный вид
// видом по умолчанию
"period_of_review": 2, // период исполнения работ
// данного вида
"icon_done": null, // название иконки для этапа "выполнено"
"map_icon_done": null, // название иконки для этапа "выполнено" на карте
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию
// (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида:
// от даты создания "AT_CREATE",
// от даты назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"group_id": 22 // id группы, которой принадлежит
// вид, или null, если вид не
// принадлежит никакой группе
} DELETE /rest/types/:id
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Удаление вида работ.
POST /rest/types/:id/fields/:fieldId
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Привязка настраиваемого поля к виду работ.
Если указанных вида работ или настраиваемого поля не существует, получаем ошибку 404. Если связь уже существует, ошибку не получаем (INSERT в таблицу повторно не выполняется).
DELETE /rest/types/:id/fields/:fieldId
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Удаление связи между видом работ и настраиваемым полем, отвязка поля от вида работ.
Если указанных вида работ или настраиваемого поля не существует, получаем ошибку 404. Если связи не существует, получаем ошибку 400.
POST /rest/types/:id/stickers/:stickerId
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Прикрепление стикера к виду работ.
Если указанных вида работ или стикера не существует, получаем ошибку 404.
Если стикер доступен для всех видов работ (is_for_all=true), получаем 403.
Если связь уже существует, то есть, стикер был явно прикреплен к виду работ, ошибку не получаем
(INSERT в таблицу повторно не выполняется).
DELETE /rest/types/:id/stickers/:stickerId
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Открепление стикера от вида работ.
Если указанных вида работ или настраиваемого поля не существует, получаем ошибку 404.
Если стикер доступен для всех видов работ (is_for_all=true), получаем 403.
Если связи не существует, то есть, стикер не был явно прикреплен к виду работ, получаем ошибку 400.
PUT /rest/types/:id/:iconType
Главный администратор (role_id = 8), администратор организации (role_id = 10), главный инспектор (role_id = 12), инспектор организации (role_id = 11).
Загрузить иконку вида работ.
Параметры запроса
idinteger — id вида работiconType— тип загружаемой иконки, возможные значения:icon
icon3d
mapIcon
mapIconHighlight
icon3dDone
iconDone
mapIconDone
Для версий Cerebellum до 0.16 в запросе необходимо:
указать Content-Disposition: name="icon",
передать файл в переменной "icon".
Для версий Cerebellum, начиная с 0.16 и старше, достаточно просто передать файл, дополнительно ничего указывать не нужно.
Пример загрузки пиктограммы через REST-клиент Advanced REST client

status = 200
// 2.0+
{
"id": 1326, // id вида
"name": "Доставка оборудования", // название вида работ
"order_key": null, // порядок сортировки
"icon": "default_icon.png", // название двумерной иконки
"icon3d": "14486184457501326_icon3d_photo_test.jpg", // название трехмерной иконки
"map_icon": "default_iconmap.png", // название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", // название увеличенной иконки
// для карты
"default": false, // является ли данный вид видом
// по умолчанию
"period_of_review": 2, // период исполнения работ данного вида
"icon_done": null, // название иконки для этапа "выполнено"
"map_icon_done": null, // название иконки для этапа "выполнено" на карте
"period_of_review_in_sec": 172800, // величина срока исполнения работ
// данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", // поле для расчета срока исполнения
// работ данного вида: null, от даты
// создания "AT_CREATE", от даты
// назначения на исполнителя
// "AT_UPDATE".
"organizations": [ // массив id организаций,
// которым доступен вид
2,
3
],
"group_id": 22 // id группы, которой принадлежит
// вид, или null, если вид не
// принадлежит никакой группе
} /rest/statuses
POST /rest/statuses
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Создать этап.
Входные данные
// 2.0+
{
"name": "рассмотрение", // * название этапа
"visible": true, // * видимость этапа пользователям в списке этапов
"default": false, // * является ли данный этап этапом по умолчанию
"closed": false, // * является ли данный этап этапом выполнено
"color": "000000" // цвет этапа
}
status = 200
// 2.0+
{
"id": 1, // id этапа
"name": "рассмотрение", // название этапа
"visible": true, // видимость этапа пользователям в списке этапов
"default": false, // является ли данный этап этапом по умолчанию
"closed": false, // является ли данный этап этапом выполнено
"color": "000000" // цвет этапа
} GET /rest/statuses
Получение списка видимых этапов заданий.
Параметры
searchstring — текстовый поиск этапов по значениям параметров id, namenamestring — текстовый поиск этапов по значению параметра namedefaultboolean — при значении default=true отображаются этапы, которые являются этапами по умолчаниюclosedboolean — при значении closed=true отображаются этапы, относящиеся к выполненнымsortBydefaultid— поле, по которому ведется сортировкаsortDirectiondefaultASC— направление сортировки (ASC, DESC)
status = 200
// 2.0+
{
"count": 10, // количество этапов, удовлетворяющих заданным
// условиям поиска и фильтрации
"items": [
{
"id": 1, // id этапа
"name": "рассмотрение", // название этапа
"visible": true, // видимость этапа пользователям в списке этапов
"default": true, // является ли данный этап этапом по умолчанию
"closed": false, // является ли данный этап этапом выполнено
"color": "000000" // цвет этапа
},
... // следующие элементы списка этапов
]
} GET /rest/statuses/list/all
Главный администратор (role_id = 8), главный инспектор (role_id = 12), администратор организации (role_id = 10), инспектор организации (role_id = 11).
Получение списка этапов заданий.
Параметры запросов:
searchstring — текстовый поиск этапов по значениям параметров id, namenamestring — текстовый поиск этапов по значению параметра namedefaultboolean — при значении default=true отображаются этапы, которые являются этапами по умолчаниюvisibleboolean — при значении visible=true отображаются этапы, видимые пользователям в списке этаповclosedboolean — при значении closed=true отображаются этапы, относящиеся к выполненнымsortBydefaultid— поле, по которому ведется сортировкаsortDirectiondefaultASC— направление сортировки (ASC, DESC)
status = 200
// 2.0+
{
"count": 10, // количество этапов, удовлетворяющих заданным
// условиям поиска и фильтрации
"items": [
{
"id": 1, // id этапа
"name": "рассмотрение", // название этапа
"visible": true, // видимость этапа пользователям в списке этапов
"default": true, // является ли данный этап этапом по умолчанию
"closed": false, // является ли данный этап этапом выполнено
"color": "000000" // цвет этапа
},
... // следующие элементы списка этапов
]
} PUT /rest/statuses/:id
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Изменить этап.
Входные данные
// 2.0+
{
"name": "подробное рассмотрение", // название этапа
"visible": false, // видимость этапа пользователям в списке этапов
"default": false, // является ли данный этап этапом по умолчанию
"closed": true, // является ли данный этап этапом выполнено
"color": "000000" // цвет этапа
}
status = 200
// 2.0+
{
"id": 1, // id этапа
"name": "подробное рассмотрение", // название этапа
"visible": false, // видимость этапа пользователям в списке этапов
"default": false, // является ли данный этап этапом по умолчанию
"closed": true, // является ли данный этап этапом выполнено
"color": "000000" // цвет этапа
} DELETE /rest/statuses/:id
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Удалить этап.
/rest/priorities
GET /rest/priorities
Получение списка приоритетов заданий.
Параметры запроса
searchsring — текстовый поиск приоритетов по значениям параметров id, namenamestring — текстовый поиск приоритетов по значению параметра namesortBydefaultorder_important— поле, по которому ведется сортировкаsortDirectiondefaultASC— направление сортировки (ASC, DESC)
/priorities
/priorities?search=test
/priorities?search=test&sortBy=name&sortDirection=ASC
status = 200
// 2.0+
{
"count": 10, // количество приоритетов заданий,
// удовлетворяющих заданным условиям поиска и сортировки
"items": [
{
"id": 1, // id
"name": "Плановые", // название приоритета
"icon": "priority_1.png", // название иконки
"order_important": 7 // степень значимости приоритета
},
... // следующие элементы списка приоритетов
]
} POST /rest/priorities/sort
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Сортировка приоритетов (по полю order_important).
Входные данные
// 2.0+
{
"ids": [ // список всех существующих id приоритетов
39,
1,
2,
3
]
}
status = 200
// 2.0+
{
"items": [
{ // отсортированный список приоритетов
"id": 39,
"name": "test",
"icon": "f2761b20-db3a-1004-86b0-68c8f55ace7c.png",
"order_important": 4
},
{
"id": 1,
"name": "Плановые",
"icon": "priority_9_20140327111133.png",
"order_important": 1
},
{
"id": 2,
"name": "Дополнительные",
"icon": "priority_10_20140327111111.png",
"order_important": 2
},
{
"id": 3,
"name": "Сверх норматива\t",
"icon": "priority_12.png",
"order_important": 3
}
]
} POST /rest/priorities
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Создать приоритет.
Поле
iconбудет заполнено автоматически, путем связывания стандартной иконкиdefault_priority_icon.png, которая лежит вCEREBELLUM_HOME/conf/resources/files/default_priority_icon.png.Поле
order_importantбудет заполнено автоматически, путем вычисления следующего, наибольшего числового значения.
Входные данные
// 2.0+
{
"name": "Плановые" // * название приоритета
}
status = 200
// 2.0+
{
"id": 1, // id приоритет
"name": "Плановые", // название приоритета
"icon": "default_priority.png", // название иконки
"order_important": 7 // cтепень значимости приоритета
} PUT /rest/priorities/:id
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Изменить приоритет.
Входные данные
// 2.0+
{
"name": "Внеплановые" // название приоритета
}
status = 200
// 2.0+
{
"id": 1, // id приоритета
"name": "Внеплановые", // название приоритета
"icon": "priority_2.png", // название иконки
"order_important": 8 // степень значимости приоритета
} DELETE /rest/priorities/:id
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Удалить приоритет.
POST /rest/priorities/:id/uploadicon
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Загрузка и прикрепление иконки к приоритету.
Пример загрузки пиктограммы через REST-клиент Advanced REST client

status = 200
// 2.0+
{
"id": 450,
"name": "test",
"icon": "f2761b20-db3a-1004-86b0-68c8f55ace7c.png", // имя файла, преобразованное с помощью
// UUID-стандарта идентификации
"order_important": 14
} /rest/fields
GET /rest/fields
Список настраиваемых полей и их возможных типов.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, minLength=1,2.
useCachedefaulttrue— использовать кэш; возможно только при отсутствии сортировки и параметров фильтрацииsearchstring — текстовый поиск настраиваемых полей по значениям параметров id, name, group_name, format, regexp, default_valuenamestring — текстовый поиск настраиваемых полей по значению параметра nameregexpstring — текстовый поиск настраиваемых полей по значению параметра regexpdefaultValuestring — текстовый поиск настраиваемых полей по значению параметра defaultValuegroupNamestring — текстовый поиск настраиваемых полей по значению параметра groupNameformatstring — текстовый поиск настраиваемых полей по значению параметра formatisRequireddefault — при значении isRequired = true отображаются обязательные настраиваемые поляdeletedboolean defaultfalse— при значении deleted = false отображаются не удаленные настраиваемые поляisForAllboolean — при значении isForAll = true отображаются доступные для всех типов заданий настраиваемые поляvisibleboolean — при значении visible = true отображаются видимые настраиваемые поля (видимые при показе полной информации по заданию)+
minLengthinteger — отображаются настраиваемые поля, минимальная длина которых совпадает с одним из указанных значений+
maxLengthinteger — отображаются настраиваемые поля, максимальная длина которых совпадает с одним из указанных значенийsortBydefaultorder— поле, по которому ведется сортировкаsortDirectiondefaultASC— направление сортировки (ASC, DESC)
/fields
/fields?search=test
/fields?search=test&isRequired=false&deleted=false
/fields?isForAll=true&minLength=1&maxLength=10
/fields?sortBy=id&sortDirection=DESC
status = 200
// 2.0+
{
"fields_types": [ // список возможных типов настраиваемых полей
{
"name": "string", // английское название типа
"rusname": "строка" // русское название типа
},
{
"name": "int",
"rusname": "целое число"
},
... // следующие элементы списка возможных
// типов настраиваемых полей
],
"items": [
{
"id": 18, // id поля
"name": "Знак зодиака (string, len<=8)", // русское название
"translit": "Znak_zodiaka__string__len<=8_", // транслит русского названия
"format": "string", // формат: английское название типа поля
"group_name": "", // название группы полей, если
// оно нужно. По одинаковым названиям
// поля группируются при отображении
"possible_values": null, // возможные значения. Для типа list.
// Список значений, разделенных \n
"regexp": "", // регулярное выражение для типов string и text,
// если оно необходимо для проверки значений
"min_length": 0, // минимальная длина строки/текста типов
// string и text, если необходимо такое
// ограничение
"max_length": 8, // максимальная длина строки/текста типов
// string и text, если необходимо такое
// ограничение
"is_required": false, // является ли поле обязательным
"default_value": "", // значение по умолчанию
"visible": true, // является ли поле видимым. Отображать
// ли его, когда показывается полная
// информация по заданию
"is_for_all": true, // доступно ли поле всем типам заданий
"order": 1, // порядковый номер поля в общем списке
"type_ids": [
14
] // массив id типов заданий, для которых
// поле доступно, если оно не
// доступно всем типам заданий
},
... // следующие элементы списка
// настраиваемых полей
],
"count": 35 // количество настраиваемых полей, удовлетворяющих
// заданным условиям фильтрации и поиска
} POST /rest/fields/sort
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Ручная сортировка настраиваемых полей.
Сортировке подлежат только неудаленные настраиваемые поля.
Отсортированный список будет сохраняться в БД и отдаваться клиентам при последующих запросах списка
(в ответе к данному запросу, а также в ответе на GET-запрос /fields).
Сортировка ведется по полю
orderтипа integer.Для ручной сортировки будет добавлен POST-запрос
/fields/sort, который можно будет выполнить неоднократно.В теле POST-запроса
/fields/sortклиент должен будет передать id-шники настраиваемых полей в отсортированном им порядке. Если переданный список id-шников будет некорректным, в ответе будет выдан BadRequest. Корректность списка id-шников проверяется по следующим пунктам:неверный формат переданных данных,
передача несуществующих id-шников,
передача дублирующихся id-шников,
передача id-шников удаленных настраиваемых полей,
передача неверного количества id-шников (должны быть переданы все существующие в БД id-шники).
В БД будет произведен UPDATE: порядок полученных id-шников будет занесен в таблицу
issues.custom_fieldsв столбецorder.Пользователю в ответ на POST-запрос
/fields/sort, а также в ответ на GET-запрос/fieldsбудет выдаваться список настраиваемых полей, отсортированный в указанном порядке.Для новых настраиваемых полей
orderбудет назначаться равным 0. В БД также имеются настраиваемые поля сorder= null (созданные до ввода дефолтного значенияorder= 0). Настраиваемые поля сorder, равным 0 или null, будут располагаться в списке после отсортированных поorderполей, и они будут отсортированы по полюid.
Входные данные
// 2.0+
{
"ids": [
4,
1,
3,
6,
2,
5
]
}
status = 200
// 2.0+
{
"items": [
{
"id": 19,
"name": "Знак зодиака (string, len<=8)",
"translit": "Znak_zodiaka__string__len<=8_",
"format": "string",
"group_name": "",
"possible_values": null,
"regexp": "",
"min_length": 0,
"max_length": 8,
"is_required": false,
"default_value": "",
"visible": true,
"is_for_all": true,
"order": 1,
"type_ids": [
14
]
},
{
"id": 9,
"name": "Доп.поле для тестов (5-10)",
"translit": "Dop_pole_dlya_testov",
"format": "text",
"group_name": "",
"possible_values": null,
"regexp": "",
"min_length": 5,
"max_length": 10,
"is_required": false,
"default_value": 12345,
"visible": true,
"is_for_all": true,
"order": 2,
"type_ids": []
},
...
]
} POST /rest/fields
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Создание нового настраиваемого поля.
Входные данные
// 2.0+
{
"name": "Фактический адрес организации", // * название нового поля
"format": "text", // * формат данных поля, возможные значения:
// "int", "float", "bool", "geometry",
// "string", "text", "list", "date";
"group_name": "Информация об организации", // название группы полей,
// при указании несуществующей
// группы полей в таблицу
// будет добавлена запись.
"possible_values": [ // список возможных значений, доступно
// только для поля формата "list", и является
// обязательным параметром для поля формата "list"
"первое значение",
"второе значение"
],
"regexp": "[0-9]{1,3}", // регулярное выражение, доступно
// только для полей форматов "string",
// "text", "int", "float"
"min_length": 2, // минимальная длина, доступно только
// для полей форматов "string", "text"
"max_length": 25, // максимальная длина, доступно только
// для полей форматов "string", "text"
"is_required": true, // обязательное ли поле, по умолчанию false
"default_value": "г.Москва", // значение по умолчанию, доступно
// для всех форматов полей, за
// исключением формата "geometry",
// значение задается с соответствии
// с форматом поля (текст, число,
// дата, булево значение)
"visible": true // видимость данного поля при отображении
// полной информации по заданию, по умолчанию true
"types": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
]
}
При возникновении одной из следующих ситуаций клиенту возвращается статус 400:
Передано поле
possible_values, но формат настраиваемого поля не "list";передано поле
regexp, но формат не "string", "text", "int" или "float";переданы поля
min_lengthилиmax_length, но формат не "string" или "text";передано поле
default_value, но формат "geometry";значение
default_value(переданное или текущее)не соответствует формату поля (для форматов "bool", "int", "float", "date");
и/или не проходит валидацию по
regexp/min_length/max_length;и/или не является одним из
possible_values(для поля формата "list").
status = 200
// 2.0+
{
"id": 123, // id нового поля
"name": "Фактический адрес организации", // название нового поля
"translit": "Fakticheskiy_adres_organizatsi", // транслитерация названия поля
"format": "text", // формат данных поля, возможные значения:
// "int", "float", "bool", "geometry", "string",
// "text", "list", "date"
"group_name": "Информация об организации", // название группы полей, при указании
// несуществующей группы полей в таблицу
// будет добавлена запись.
"possible_values": [ // список возможных значений, доступно только
// для поля формата "list"
"первое значение",
"второе значение"
],
"regexp": "[0-9]{1,3}", // регулярное выражение, доступно только
// для полей форматов "string", "text",
// "int", "float"
"min_length": 2, // минимальная длина, доступно только для
// полей форматов "string", "text"
"max_length": 25, // максимальная длина, доступно только
// для полей форматов "string", "text"
"is_required": true, // обязательное ли поле
"default_value": "РТ, г.Москва", // значение по умолчанию, доступно для всех
// форматов полей, за исключением формата "geometry",
// значение задается с соответствии с форматом
// поля (текст, число, дата, булево значение)
"visible": true, // видимость данного поля при отображении
// полной информации по заданию
"is_for_all": false, // доступно ли данное поле для
// всех типов заданий (видов работ)
"type_ids": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
],
"order": 10 // номер данного поля для отображения
// в списке настраиваемых полей
} GET /rest/fields/:id
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Получение информации по настраиваемому полю.
Если поле не существует, клиенту возвращается статус 404.
status = 200
// 2.0+
{
"id": 123, // id нового поля
"name": "Адрес филиала организации", // название поля
"translit": "string", // транслитерация названия поля
"format": "text", // формат данных поля, возможные значения:
// "int", "float", "bool", "geometry",
// "string", "text", "list", "date"
"group_name": "Информация о филиалах организации", // название группы полей
"possible_values": [ // список возможных значений, доступно
// только для поля формата "list"
"первое значение",
"второе значение",
"третье значение"
],
"regexp": "[0-9]{1,3}", // регулярное выражение, доступно
// только для полей форматов
// "string", "text", "int", "float"
"min_length": 5, // минимальная длина, доступно только для
// полей форматов "string", "text"
"max_length": 50, // максимальная длина, доступно только
// для полей форматов "string", "text"
"is_required": false, // обязательное ли поле
"default_value": "РТ, г.Казань", // значение по умолчанию, доступно для
// всех форматов полей, за исключением
// формата "geometry", значение
// задается с соответствии с форматом поля
// (текст, число, дата, булево значение)
"visible": false, // видимость данного поля при отображении
// полной информации по заданию
"is_for_all": false, // доступно ли данное поле для
// всех типов заданий (видов работ)
"type_ids": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
],
"order": 10 // номер данного поля для отображения
// в списке настраиваемых полей
} PUT /rest/fields/:id
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Редактирование настраиваемого поля.
Формат поля изменить нельзя, т.к. это может вызвать массовую некорректность данных настраиваемых полей в заданиях.
Входные данные
// 2.0+
{
"name": "Адрес филиала организации", // измененное название поля
"group_name": "Информация о филиалах организации", // измененное название группы полей
"possible_values": [ // список возможных значений,
// доступно только для поля
// формата "list"
"первое значение",
"второе значение",
"третье значение"
],
"regexp": "[0-9]{1,3}", // регулярное выражение, доступно
// только для полей форматов
// "string", "text", "int", "float"
"min_length": 5, // минимальная длина, доступно только
// для полей форматов "string", "text"
"max_length": 50, // максимальная длина, доступно только
// для полей форматов "string", "text"
"is_required": false, // обязательное ли поле
"default_value": "РТ, г.Казань", // значение по умолчанию, доступно для
// всех форматов полей, за исключением
// формата "geometry", значение
// задается с соответствии с форматом поля
// (текст, число, дата, булево значение)
"visible": false // видимость данного поля при отображении
// полной информации по заданию
"types": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
]
}
Если поле не существует, клиенту возвращается статус 404.
При возникновении одной из следующих ситуаций клиенту возвращается статус 400:
Передано поле
possible_values, но формат настраиваемого поля не "list";передано поле
regexp, но формат не "string", "text", "int" или "float";переданы поля
min_lengthили maxlength, но формат не "string" или "text";передано поле
default_value, но формат "geometry";значение
default_value(переданное или текущее)не соответствует формату поля (для форматов "bool", "int", "float", "date");
и/или не проходит валидацию по
regexp/min_length/max_length;и/или не является одним из
possible_values(для поля формата "list").
Если массив possible_values не будет передан, то элементы списка не изменятся. При передаче массива
possible_values все предыдущие значения списка будут удалены.
status = 200
// 2.0+
{
"id": 123, // id нового поля
"name": "Адрес филиала организации", // название поля
"translit": "string", // транслитерация названия поля
"format": "text", // формат данных поля, возможные
// значения: "int", "float", "bool",
// "geometry", "string", "text", "list", "date"
"group_name": "Информация о филиалах организации", // название группы полей
"possible_values": [ // список возможных значений, доступно
// только для поля формата "list"
"первое значение",
"второе значение",
"третье значение"
],
"regexp": "[0-9]{1,3}", // регулярное выражение, доступно только
// для полей форматов "string", "text",
// "int", "float"
"min_length": 5, // минимальная длина, доступно только
// для полей форматов "string", "text"
"max_length": 50, // максимальная длина, доступно только
// для полей форматов "string", "text"
"is_required": false, // обязательное ли поле
"default_value": "РТ, г.Казань", // значение по умолчанию, доступно для
// всех форматов полей, за исключением
// формата "geometry", значение
// задается с соответствии с форматом
// поля (текст, число, дата, булево значение)
"visible": false, // видимость данного поля при отображении
// полной информации по заданию
"is_for_all": false, // доступно ли данное поле для
// всех типов заданий (видов работ)
"type_ids": [ // массив id типов заданий, для которых
// поле доступно, если оно не доступно
// всем типам заданий
12,
14
],
"order": 10 // номер данного поля для отображения
// в списке настраиваемых полей
} DELETE /rest/fields/:id
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Удаление настраиваемого поля.
Если поле не существует, клиенту возвращается статус 404.
DELETE /rest/fields/:id/hard
Главный администратор (role_id = 8).
Служебный запрос для физического удаления настраиваемого поля.
Если поле не существует, клиенту возвращается статус 404.
/rest/files
POST /rest/files/photos
Загрузка фотографии на сервер.
Для загрузки файла необходимо выбрать Body Content Type: multipart/form-data и в теле запроса в поле "file" указать расположение файла
status = 200
// 2.0+
{
"name": "2020/04/09/16-45/c360f08c-e79f-1004-8be5-8b2398b49a74.jpg" // имя файла после загрузки
} POST /rest/files/videos
Загрузка видеофайла на сервер.
Видеофайл загружается по схеме загрузки фотографии, описанной в запросе POST /photos. Формат ответа идентичен
Запросы POST /files/upload/video, POST /upload/video выполняют тоже самое, что и запросы POST /files/upload/videos,
POST /upload/videos. Они необходимы для сохранения обратной совместимости.
POST /rest/files/files
Загрузка файла на сервер.
Файл загружается по схеме загрузки фотографии, описанной в запросе POST /photos. Формат ответа идентичен
POST /rest/files/sounds
Загрузка аудиофайла на сервер.
Аудиофайл загружается по схеме загрузки фотографии, описанной в запросе POST /photos. Формат ответа идентичен
DELETE /rest/files/:id
Права пользователей на выполнение данного запроса зависят от capability роли пользователя. Понятие capability в обозначает действие, которое можно выполнять с заданием (к которому прикреплен файл). Для того, чтобы пользователь мог выполнить данный запрос, его роль должна иметь capability со свойствами: capability_id = 1, capability_name = "show" и capability_id = 5, capability_name = "edit_files"
Удаление файла, прикрепленного к заданию; fileId - id файла.
/rest/stickers
GET /rest/stickers
Список стикеров.
Параметры
useCacheboolean defaulttrue— использовать кэш; возможно только при отсутствии сортировки и параметров фильтрации
status = 200
// 2.0+
{
"items": [
{
"id": 3, // название стикера
"title": "Показания приборов", // описание стикера
"description": "Показания приборов после выполнения работ на объекте",
"is_for_all": false, // доступность стикера для
// всех видов работ
"type_ids": [ // список id-шников
// видов работ,
// к которым прикреплен
// текущий стикер
2,
14,
3,
7,
4
],
},
{
"id": 4,
"title": "Отчетные документы",
"description": "Отчетные документы о выполнении работ на объекте",
"is_for_all": false,
"type_ids": [
2,
3,
4
],
},
{
"id": 5,
"title": "Первичные показания приборов",
"description": "Показания приборов до выполнения работ на объекте",
"is_for_all": false,
"type_ids": [
2,
14
],
}
]
} POST /rest/stickers
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Создание стикера.
Входные данные
// 2.0+
{
"title": "Показания приборов", // * название стикера
"description": "Показания приборов после выполнения работ на объекте", // описание стикера
"is_for_all": false, // доступность стикера для
// всех видов работ; по
// умолчанию true
"types": [ // массив id видов работ,
// к которым прикреплен
// текущий стикер
12,
14
]
}
В ответе выдается type_ids - список id-шников видов работ, к которым прикреплен текущий стикер.
Если is_for_all=true, то стикер доступен всем видам работ, следовательно, type_ids будет
содержать список id-шников всех видов работ.
Если is_for_all=false, то type_ids будет содержать список id-шников видов работ, которые
были явно прикреплены к стикеру.
status = 200
// 2.0+
{
"id": 6,
"title": "Показания приборов", // название стикера
"description": "Показания приборов после выполнения работ на объекте", // описание стикера
"is_for_all": false, // доступность стикера для
// всех видов работ
"type_ids": [ // список id-шников видов работ,
// к которым прикреплен текущий стикер
12,
14
]
} PUT /rest/stickers/:id
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Изменение стикера.
Если стикер не найден, 404.
Входные данные
// 2.0+
{
"title": "Показания приборов", // название стикера
"description": "Показания приборов до выполнения работ на объекте", // описание стикера
"is_for_all": true, // доступность стикера для
// всех видов работ
"types": [ // массив id видов работ,
// к которым прикреплен
// текущий стикер
12,
14
]
}
status = 200
// 2.0+
{
"id": 6,
"title": "Показания приборов", // название стикера
"description": "Показания приборов до выполнения работ на объекте", // описание стикера
"is_for_all": true, // доступность стикера для
// всех видов работ
"type_ids": [ // список id-шников видов работ,
// к которым прикреплен текущий стикер
12,
14
]
} DELETE /rest/stickers/:id
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Удаление стикера.
Если стикер не найден, 404.
Стикер будет откреплен ото всех файлов, к которым он был прикреплен.
DELETE /rest/stickers/:id/hard
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Физическое удаление стикера.
Если стикер не найден, 404. Стикер будет откреплен ото всех файлов, к которым он был прикреплен.
/rest/schedules
GET /rest/schedules/list
Описание моделей и структур хранения данных
Расписания - schedules. У расписания есть пользователь-создатель. Все задания по этому расписанию создаются от имени этого пользователя.
Если расписание созданом администратором/инспектором организации, то то оно прикрепляется к его организации. Если расписание создано главным админстратором/инспектором, то организация может быть указана при создании (но может быть и опущена).
Если расписание прикреплено к организации, то все администраторы/инспекторы этой организации получают разрешение на его изменение.
Расписания могут быть действующими (включенными) или выключенными. Если расписание выключено, задания создаваться не будут.
У расписания могут быть моменты времени, в которые оно запускается в течение дня - times. Время хранится в формате timestamp (дата не важна, во время всех операций из нее извлекается только время). Моменты времени могут быть включены и выключены; при выключении момента времени задания в это время создаваться не будут.
У расписания есть моменты запуска - launches. Момент запуска - это дата + одно из времён запуска расписания. Эта дата и время хранится явным образом.
К расписанию прикрепляются задания-шаблоны. В момент запуска на их основе создаются реальные задания. Задания-шаблоны - это обычные задания, у которых проставлена колонка is_template=true. Параметры "стадия", "этап", "срок выполнения" таких заданий игнорируются. У расписания есть поле "срок выполнения"; если это поле заполнено, то на его основе реальному создаваемому заданию назначается срок выполнения. Если не заполнено, то срок выполнения назначается на основе вида работ.
Если расписание прикреплено к организации, то к нему разрешается прикреплять шаблоны только в рамках этой же организации.
Запрос /list
Любой авторизованный пользователь.
Запрос за списком расписаний с учётом фильтров и прав доступа:
API не фиксирован и может изменяться в дальнейшем!
главный администратор: все расписания
главный инспектор: все расписания
администратор организации: все расписания, созданные в его организации; все расписания, в которых он имеет доступ хотя бы к одному шаблону.
инспектор организации: все расписания, созданные в его организации; все расписания, в которых он имеет доступ хотя бы к одному шаблону.
пользователь организации: все расписания, в которых он имеет доступ хотя бы к одному шаблону.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2.
datesFromtimestamp — дата начала временного интервала (включительно)datesTilltimestamp — дата окончания временного интервала (не включительно)Если переданы datesFrom и datesTill, то в каждое расписание в списке добавляется массив dates; это поле будет содержать все даты запуска соответствующего расписания между datesFrom и datesTill (не включая datesTill) в формате Unix Timestamp (с округлением до полуночи в меньшую сторону).
pageinteger default1— номер запрашиваемой страницыlimitinteger default25— количество записей на страницеsampleTemplatesdefaulttrue— включить вывод поля sample_template+
typeIdlong — id вида работ+
priorityIdlong — id приоритета+
assignedOrganizationIdlong — id назначенной организации+
assignedUserIdlong — id назначенного пользователя+
organizationIdlong — id организации шаблонаtaskTitlestring — текстовый поиск по заголовку задания (с начала строки)scheduleTitlestring — текстовый поиск по заголовку расписания (с начала строки)
status = 200
// 2.0+
{
"page": 1, // текущая страница
"total": 37, // всего расписаний
"limit": 25, // количество на одной странице
"items": [ // список расписаний
{
"id": 1002,
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн расписания
"on": true // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": false, // является ли расписание архивным
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
}, //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
//
"filtered_template_count": 15, // количество шаблонов,
// доступных по правам доступа и
// удовлетворяющих фильтрам
//
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
"sample_template": [ // первый из шаблонов, доступных пользователю,
// и соответствующих фильтрам
"id": 32,
"title": "Задание по расписанию",
"num_main_photo": 1, // номер главного фото
"type": { // вид работ
"id": 139,
"name": "Разукомплектованный автомобиль",
"icon": "icon_139.png"
},
"priority": { // приоритет
"id": 1,
"name": "Плановые"
},
"organization": { // организация-владелец
"id": 98,
"name": "Тестовая организация"
},
"assigned_organization": { // назначенная организация
"id": 99,
"name": "Название назначенной организации"
},
"assigned_user": { // исполнитель
"id": 599,
"fio": "Сникерсов Марс Твиксович"
}
}, //
//
"times": [ // массив моментов времени, прикрепленных к расписанию
{
"id": 10012,
"time": 1514829600, // время в формате unix timestamp
"on": true // включен момент времени или нет
},
{
"id": 10011,
"time": 1514808000,
"on": true
}
], //
//
"dates": [ // массив дат запусков расписания
// (при наличии from и till)
1609448400,
1609534800
]
}
]
} GET /rest/schedules/list/archive
Любой авторизованный пользователь.
Запрос за списком архивных расписаний с учётом фильтров и прав доступа:
главный администратор: все архивные расписания
главный инспектор: все архивные расписания
администратор организации: все архивные расписания, созданные в его организации; все архивные расписания, в которых он имеет доступ хотя бы к одному шаблону.
инспектор организации: все архивные расписания, созданные в его организации; все архивные расписания, в которых он имеет доступ хотя бы к одному шаблону.
пользователь организации: все архивные расписания, в которых он имеет доступ хотя бы к одному шаблону.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2.
fromtimestamp — дата начала временного интервала (включительно)tilltimestamp — дата окончания временного интервала (не включительно)Если переданы from и till, то в каждое расписание в списке добавляется массив dates; это поле будет содержать все даты запуска соответствующего расписания между from и till (не включая till) в формате Unix Timestamp (с округлением до полуночи в меньшую сторону).
pageinteger default1— номер запрашиваемой страницыlimitinteger default25— количество записей на страницеsampleTemplatesdefaulttrue— отключить вывод поля sample_template+
typeIdlong — id вида работ+
priorityIdlong — id приоритета+
assignedOrganizationIdlong — id назначенной организации+
assignedUserIdlong — id назначенного пользователя+
organizationIdlong — id организации шаблонаtaskTitlestring — текстовый поиск по заголовку задания (с начала строки)scheduleTitlestring — текстовый поиск по заголовку расписания (с начала строки)
status = 200
// 2.0+
{
"page": 1, // текущая страница
"total": 37, // всего расписаний
"limit": 25, // количество на одной странице
"items": [ // список расписаний
{
"id": 1002,
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн расписания
"on": true // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": true, // является ли расписание архивным
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
}, //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
//
"filtered_template_count": 15, // количество шаблонов,
// доступных по правам доступа и
// удовлетворяющих фильтрам
//
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
"sample_template": [ // первый из шаблонов, доступных пользователю,
// и соответствующих фильтрам
"id": 32,
"title": "Задание по расписанию",
"num_main_photo": 1, // номер главного фото
"type": { // вид работ
"id": 139,
"name": "Разукомплектованный автомобиль",
"icon": "icon_139.png"
},
"priority": { // приоритет
"id": 1,
"name": "Плановые"
},
"organization": { // организация-владелец
"id": 98,
"name": "Тестовая организация"
},
"assigned_organization": { // назначенная организация
"id": 99,
"name": "Название назначенной организации"
},
"assigned_user": { // исполнитель
"id": 599,
"fio": "Сникерсов Марс Твиксович"
}
}, //
//
"times": [ // массив моментов времени, прикрепленных к расписанию
{
"id": 10012,
"time": 1514829600, // время в формате unix timestamp
"on": true // включен момент времени или нет
},
{
"id": 10011,
"time": 1514808000,
"on": true
}
], //
//
"dates": [ // массив дат запусков расписания
// (при наличии from и till)
1609448400,
1609534800
]
}
]
} POST /rest/schedules
Создание нового расписания.
Главный администратор (role_id = 8), Главный инспектор (role_id = 12), Администратор кластера (role_id = 5 может создать расписание в доступных ему проектах), Администратор организации (role_id = 10 может создать расписание в доступных ему проектах), Инспектор организации (role_id = 11 может создать расписание в доступных ему проектах).
{
"title": "Расписание на май", // * название расписания
"organization": { // организация расписания; необязательно;
// для админа/инспектора организации
// по умолчанию подставится его организация
"id": 134
},
"worktime": 3600, // срок выполнения (в секундах) для заданий,
// которые будут созданы по этому расписанию;
// если не задан, в момент создания задания
// берётся из вида работ шаблонного задания
//
"on": true, // включено расписание или нет
//
//
"templates": [ // id заданий-шаблонов, по которым составляется расписание;
{
"id": 1279826
},
...
], //
//
"dates": [ // массив дней для расписания;
1526342400, // время может быть любое, оно будет отброшено
...
} //
//
"times": [ // моменты времени для расписания
{
"time": 1514829600, // для новых моментов времени нужно передать время запуска в формате timestamp;
// (дата может быть любая, она будет отброшена)
"on": true
},
...
]
}
status = 200
// 2.0+
{
"id": 1002, // id расписания
"title": "Расписание на май", // название расписания
"worktime": 3600, // срок выполнения создаваемых заданий
"on": true, // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": false, // является ли расписание архивным
"organization": { // организация
"id": 134,
"name": "Отдел разработки"
} //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
"templates": [ // информация по доступным заданиям-шаблоным
{
"id": 1279826,
"title": "Доставка оборудования" // заголовок задания
},
], //
//
"times": [ // массив моментов времени, прикрепленных к расписанию
{
"id": 10012,
"time": 1514829600, // время в формате unix timestamp
"on": true // включен момент времени или нет
},
...
],
} PATCH /rest/schedules/:id
Главный администратор (role_id = 8), Главный инспектор (role_id = 12), Администратор кластера (role_id = 5, если ему доступен проект расписания), Администратор организации (role_id = 10, если ему доступен проект расписания), Инспектор организации (role_id = 11, если ему доступен проект расписания).
Изменение расписания.
Можно изменить поля title, worktime, on, добавить/удалить дни расписания в объекте days, добавить/включить/выключить моменты времени в массиве times, добавить/удалить шаблоны.
На основании массивов days и times формируется список запусков launches для данного расписания. При удалении дней будут удалены соответствующие запуски, если по ним еще не были созданы задания.
{
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн (в секундах) для заданий по этому расписанию
"on": true, // включено расписание или нет
//
"templates": { // id заданий-шаблонов, по которым составляется расписание
"add": [
{
"id": 1279826
},
...
],
"remove": [
{
"id": 999123
},
...
],
}, //
//
"dates": { // объект дней для расписания в формате Unix Timestamp;
// время может быть любое, оно будет отброшено
"add": [
1526342400,
1526083200
],
"remove": [
1526774400
]
} //
//
"times": [ // моменты времени для расписания
// в формате Unix Timestamp
{
"id": 10012, // id момента времени (только при включении/выключении времени)
"on": true // включен момент времени или нет
},
{
"time": 1514829600, // для новых моментов времени нужно передать время запуска в формате Unix Timestamp;
// (дата может быть любая, она будет отброшена)
"on": true
}
]
}
status = 200
// 2.0+
{
"id": 1002,
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн расписания
"on": true // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": false, // является ли расписание архивным
"organization": { // организация
"id": 134,
"name": "Отдел разработки"
} //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
"templates": [ // информация по доступным заданиям-шаблоным
{
"id": 1279826,
"title": "Доставка оборудования" // заголовок задания
},
], //
//
"times": [ // массив моментов времени, прикрепленных к расписанию
{
"id": 10012,
"time": 1514829600, // время в формате unix timestamp
"on": true // включен момент времени или нет
},
{
"id": 10011,
"time": 1514808000,
"on": true
}
]
} DELETE /rest/schedules/:id
Удаление расписания.
Главный администратор (role_id = 8), Администратор кластера (role_id = 5, если ему доступен проект расписания), Администратор организации (role_id = 10, если ему доступен проект расписания)
GET /rest/schedules/stats
DONE!
Получение статистики по расписаниям за указанный период в разрезе по дням.
Запрос принимает параметр collapse, от которого зависит вид ответа:
если количество заданий в день не превышает значение
collapse, по этим дням выдается полная информация о заданиях;если количество запусков в день превышает значение
collapse, по этим дням статистическая информация.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2.
collapseinteger — см. вышеfromtimestamp — дата начала временного интервала (включительно)tilltimestamp — дата окончания временного интервала (не включительно)+
typeIdlong — id вида работ+
priorityIdlong — id приоритета+
assignedOrganizationIdlong — id назначенной организации+
assignedUserIdlong — id назначенного пользователя+
organizationIdlong — id организации шаблона+
scheduleIdlong — id расписанияtaskTitlestring — текстовый поиск по заголовку задания (с начала строки)scheduleTitlestring — текстовый поиск по заголовку расписания (с начала строки)time— время запуска; формат передачи: time=HH:mm+
statusstring — состояние задания. Возможные значения:off - выключенные задания
fail - не создано из-за ошибок
missed - создание просрочено (более 15 мин назад)
creating - создающиеся задания
planned - запланированные задания
done_expired - просроченные задания, находящиеся в стадии 2 - завершено
done_not_expired - непросроченные задания, находящиеся в стадии 2 - завершено
rejected_expired - просроченные задания, находящиеся в стадии 0 - отклонено
rejected_not_expired - непросроченные задания, находящиеся в стадии 0 - отклонено
working_expired - просроченные задания, находящиеся в стадии 1 - в работе
working_not_expired - непросроченные задания, находящиеся в стадии 1 - в работе
status = 200
2.0+
{
"stats": [
{
"date": 1518696000, // дата в формате Unix Timestamp
"on": 9, // включенные задания (planned + created + fail + missed + остальное)
"off": 2, // выключенные задания
"created": 5, // созданные задания
"done_expired": 0, // просроченные задания, находящиеся в стадии 2 - завершено
"done_not_expired": 0, // непросроченные задания, находящиеся в стадии 2 - завершено
"rejected_expired": 0, // просроченные задания, находящиеся в стадии 0 - отклонено
"rejected_not_expired": 0, // непросроченные задания, находящиеся в стадии 0 - отклонено
"working_expired": 3, // просроченные задания, находящиеся в стадии 1 - в работе
"working_not_expired": 2, // непросроченные задания, находящиеся в стадии 1 - в работе
"planned": 1, // запланированные задания
"fail": 2, // не создано из-за ошибок
"missed": 0 // создание просрочено (более 15 мин назад)
},
{
"date": 1518739200,
"on": 9,
"off": 2,
"created": 5,
"done_expired": 0,
"done_not_expired": 0,
"rejected_expired": 0,
"rejected_not_expired": 0,
"working_expired": 3,
"working_not_expired": 2,
"planned": 0,
"fail": 1,
"missed": 2
},
], //
//
"items": [ // полная информация о запусках
{ // успешно созданное задание по расписанию
"run": { // ссылка на родительский запуск
"datetime": 1514829600, // дата и время запуска
"on": true, // признак включенного запуска
"time": { // time запуска
"id": 10010,
"time": 1514829600,
"on": true
},
"schedule": { // ссылка на родительское расписание
"id": 972,
"title": "Заголовок расписания",
"worktime": 3600, // срок выполнения заданий в секундах
"on": true, // признак включённого расписания
"archive": false, // является ли расписание архивным
"user": { // пользователь-создатель
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
},
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
}
},
"task": { // созданное задание
"id": 198,
"title": "Задание по расписанию",
"date": 1514829600, // дата задания
"deadline": 1514833200, // срок выполнения
"stage": 1, // стадия
"num_main_photo": 1, // номер главного фото
"type": { // вид работ
"id": 139,
"name": "Разукомплектованный автомобиль",
"icon": "icon_139.png"
},
"priority": { // приоритет
"id": 1,
"name": "Плановые"
},
"organization": { // организация-владелец
"id": 98,
"name": "Тестовая организация"
},
"assigned_organization": { // назначенная организация
"id": 99,
"name": "Название назначенной организации"
},
"assigned_user": { // исполнитель
"id": 599,
"fio": "Сникерсов Марс Твиксович"
},
"status": { // этап
"name": "новое",
"color": "0000ff"
},
"update_date": 1514829600, // дата последнего изменения
"deleted": null // признак удалённого задания = deleted != null
}, //
//
"template": { // шаблон-основа для задания
"id": 32,
"title": "Задание по расписанию",
"num_main_photo": 1, // номер главного фото
"type": { // вид работ
"id": 139,
"name": "Разукомплектованный автомобиль",
"icon": "icon_139.png"
},
"priority": { // приоритет
"id": 1,
"name": "Плановые"
},
"organization": { // организация-владелец
"id": 98,
"name": "Тестовая организация"
},
"assigned_organization": { // назначенная организация
"id": 99,
"name": "Название назначенной организации"
},
"assigned_user": { // исполнитель
"id": 599,
"fio": "Сникерсов Марс Твиксович"
}
},
"template_deleted": false // признак того, что шаблон
// в настоящее время удалён
//
//
"fail": null // поле сообщения об ошибке пусто
},
{ // запланированное или просроченное задание
"run": {...},
"task": null,
"template": {...}, // задание-шаблон
"template_deleted": false // признак того, что шаблон
// в настоящее время удалён
"fail": null // поле сообщения об ошибке пусто
},
{ // при создании задания произошла ошибка
"run": {...},
"task": null,
"template": {...}, // задание-шаблон
"template_deleted": false // признак того, что шаблон
// в настоящее время удалён
"fail": "Текст ошибки"
},
...
]
} GET /rest/schedules/runs
Получение списка запусков расписаний в разрезе дней со статистикой по каждому запуску.
API не фиксирован и может изменяться в дальнейшем!
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2.
fromtimestamp — дата начала временного интервала (включительно)tilltimestamp — дата окончания временного интервала (не включительно)pageinteger default1— номер запрашиваемой страницыlimitinteger default25— количество записей на странице+
typeIdlong — id вида работ+
priorityIdlong — id приоритета+
assignedOrganizationIdlong — id назначенной организации+
assignedUserIdlong — id назначенного пользователя+
organizationIdlong — id организации шаблона+
scheduleIdlong — id расписанияtaskTitlestring — текстовый поиск по заголовку задания (с начала строки)scheduleTitlestring — текстовый поиск по заголовку расписания (с начала строки)time— время запуска; формат передачи: time=HH:mm+
statusstring — состояние задания. Возможные значения:off - выключенные задания
fail - не создано из-за ошибок
missed - создание просрочено (более 15 мин назад)
creating - создающиеся задания
planned - запланированные задания
done_expired - просроченные задания, находящиеся в стадии 2 - завершено
done_not_expired - непросроченные задания, находящиеся в стадии 2 - завершено
rejected_expired - просроченные задания, находящиеся в стадии 0 - отклонено
rejected_not_expired - непросроченные задания, находящиеся в стадии 0 - отклонено
working_expired - просроченные задания, находящиеся в стадии 1 - в работе
working_not_expired - непросроченные задания, находящиеся в стадии 1 - в работе
status = 200
2.0+
{
"items": [
{
"time": { // time запуска
"id": 115241,
"time": 1546311600,
"on": true
},
"schedule": { // ссылка на родительское расписание
"id": 1002,
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн расписания
"archive": false, // является ли расписание архивным
"on": true // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
}, //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
//
"filtered_template_count": 15, // количество шаблонов,
// доступных по правам доступа и
// удовлетворяющих фильтрам
//
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
"sample_template": [ // первый из шаблонов, доступных пользователю,
// и соответствующих фильтрам
"id": 32,
"title": "Задание по расписанию",
"num_main_photo": 1, // номер главного фото
"type": { // вид работ
"id": 139,
"name": "Разукомплектованный автомобиль",
"icon": "icon_139.png"
},
"priority": { // приоритет
"id": 1,
"name": "Плановые"
},
"organization": { // организация-владелец
"id": 98,
"name": "Тестовая организация"
},
"assigned_organization": { // назначенная организация
"id": 99,
"name": "Название назначенной организации"
},
"assigned_user": { // исполнитель
"id": 599,
"fio": "Сникерсов Марс Твиксович"
}
}, //
//
"times": [ // массив моментов времени, прикрепленных к расписанию
{
"id": 10012,
"time": 1514829600, // время в формате unix timestamp
"on": true // включен момент времени или нет
},
{
"id": 10011,
"time": 1514808000,
"on": true
}
]
},
"datetime": 1579489200, // дата и время
"on": true, // признак включенного запуска
"stats": { // статистика
"off": 0, // выключенные задания
"fail": 0, // не создано из-за ошибок
"missed": 0, // создание просрочено (более 15 мин назад)
"planned": 0, // запланированные задания
"created": 163, // созданные задания
"done_expired": 55, // просроченные задания, находящиеся в стадии 2 - завершено
"done_not_expired": 88, // непросроченные задания, находящиеся в стадии 2 - завершено
"rejected_expired": 0, // просроченные задания, находящиеся в стадии 0 - отклонено
"rejected_not_expired": 0, // непросроченные задания, находящиеся в стадии 0 - отклонено
"working_expired": 20, // просроченные задания, находящиеся в стадии 1 - в работе
"working_not_expired": 0, // непросроченные задания, находящиеся в стадии 1 - в работе
"on": 163 // включенные задания (planned + created + fail + missed + прочие)
}
},
...
]
} GET /rest/schedules/tasks
DONE!
Главный администратор (role_id = 8), Главный инспектор (role_id = 12), Администратор кластера (role_id = 5), Администратор организации (role_id = 10), Инспектор организации (role_id = 11)
Получение списка заданий по расписанию (созданных, запланированных, пропущенных и выключенных) за нужный период.
API не фиксирован и может изменяться в дальнейшем!
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2.
fromtimestamp — дата начала временного интервала (включительно)tilltimestamp — дата окончания временного интервала (не включительно)pageinteger default1— номер запрашиваемой страницыlimitinteger default25— количество записей на странице+
typeIdlong — id вида работ+
priorityIdlong — id приоритета+
assignedOrganizationIdlong — id назначенной организации+
assignedUserIdlong — id назначенного пользователя+
organizationIdlong — id организации шаблона+
scheduleIdlong — id расписанияtaskTitlestring — текстовый поиск по заголовку задания (с начала строки)scheduleTitlestring — текстовый поиск по заголовку расписания (с начала строки)time— время запуска; формат передачи: time=HH:mm+
statusstring — состояние задания. Возможные значения:off - выключенные задания
fail - не создано из-за ошибок
missed - создание просрочено (более 15 мин назад)
creating - создающиеся задания
planned - запланированные задания
done_expired - просроченные задания, находящиеся в стадии 2 - завершено
done_not_expired - непросроченные задания, находящиеся в стадии 2 - завершено
rejected_expired - просроченные задания, находящиеся в стадии 0 - отклонено
rejected_not_expired - непросроченные задания, находящиеся в стадии 0 - отклонено
working_expired - просроченные задания, находящиеся в стадии 1 - в работе
working_not_expired - непросроченные задания, находящиеся в стадии 1 - в работе
status = 200
2.0+
{
"items": [ //
{ // успешно созданное задание по расписанию
"run": { // ссылка на родительский запуск
"datetime": 1514829600, // дата и время запуска
"on": true, // признак включенного запуска
"time": { // time запуска
"id": 10010,
"time": 1514829600,
"on": true
},
"schedule": { // ссылка на родительское расписание
"id": 972,
"title": "Заголовок расписания",
"worktime": 3600, // срок выполнения заданий в секундах
"on": true, // признак включённого расписания
"user": { // пользователь-создатель
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": false, // является ли расписание архивным
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
},
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
}
},
"task": { // созданное задание
"id": 198,
"title": "Задание по расписанию",
"date": 1514829600, // дата задания
"deadline": 1514833200, // срок выполнения
"stage": 1, // стадия
"num_main_photo": 1, // номер главного фото
"type": { // вид работ
"id": 139,
"name": "Разукомплектованный автомобиль",
"icon": "icon_139.png"
},
"priority": { // приоритет
"id": 1,
"name": "Плановые"
},
"organization": { // организация-владелец
"id": 98,
"name": "Тестовая организация"
},
"assigned_organization": { // назначенная организация
"id": 99,
"name": "Название назначенной организации"
},
"assigned_user": { // исполнитель
"id": 599,
"fio": "Сникерсов Марс Твиксович"
},
"status": { // этап
"name": "новое",
"color": "0000ff"
},
"update_date": 1514829600, // дата последнего изменения
"deleted": null // признак удалённого задания = deleted != null
}, //
//
"template": { // шаблон-основа для задания
"id": 32,
"title": "Задание по расписанию",
"num_main_photo": 1, // номер главного фото
"type": { // вид работ
"id": 139,
"name": "Разукомплектованный автомобиль",
"icon": "icon_139.png"
},
"priority": { // приоритет
"id": 1,
"name": "Плановые"
},
"organization": { // организация-владелец
"id": 98,
"name": "Тестовая организация"
},
"assigned_organization": { // назначенная организация
"id": 99,
"name": "Название назначенной организации"
},
"assigned_user": { // исполнитель
"id": 599,
"fio": "Сникерсов Марс Твиксович"
}
},
"template_deleted": false // признак того, что шаблон
// в настоящее время удалён
//
//
"fail": null // поле сообщения об ошибке пусто
},
{ // запланированное или просроченное задание
"launch": {...},
"task": null,
"template": {...}, // задание-шаблон
"template_deleted": false // признак того, что шаблон
// в настоящее время удалён
"fail": null // поле сообщения об ошибке пусто
},
{ // при создании задания произошла ошибка
"launch": {...},
"task": null,
"template": {...}, // задание-шаблон
"template_deleted": false // признак того, что шаблон
// в настоящее время удалён
"fail": "Текст ошибки"
},
...
], //
//
"total": 117 // общее количество заданий,
// удовлетворяющих фильтрам
} GET /rest/schedules/:id
Получение информации по расписанию.
Главный администратор (role_id = 8), Главный инспектор (role_id = 12), Администратор кластера (role_id = 5, если проект расписания ему доступен), Администратор организации (role_id = 10, если проект расписания ему доступен), Инспектор организации (role_id = 11, если проект расписания ему доступен), Любой авторизованный пользователь, у которого есть права на "show" хотя бы одного шаблона, даже удаленного из расписания.
API не фиксирован и может изменяться в дальнейшем!
status = 200
{
"id": 1002,
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн расписания
"on": true // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": false, // является ли расписание архивным
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
}, //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
//
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
"templates": [ // информация по заданиям-шаблонам,
// доступным текущему пользователю
{
"id": 32,
"title": "Задание по расписанию",
"text": "Текст задания по расписанию""num_main_photo": 1, // номер главного фото
"type": { // вид работ
"id": 139,
"name": "Разукомплектованный автомобиль",
"icon": "icon_139.png"
},
"priority": { // приоритет
"id": 1,
"name": "Плановые"
},
"organization": { // организация-владелец
"id": 98,
"name": "Тестовая организация"
},
"assigned_organization": { // назначенная организация
"id": 99,
"name": "Название назначенной организации"
},
"assigned_user": { // исполнитель
"id": 599,
"fio": "Сникерсов Марс Твиксович"
}
},
], //
//
"times": [ // массив моментов времени, прикрепленных к расписанию
{
"id": 10012,
"time": 1514829600, // время в формате unix timestamp
"on": true // включен момент времени или нет
},
{
"id": 10011,
"time": 1514808000,
"on": true
}
]
} GET /rest/schedules/:id/dates
Получение списка дат запуска расписания.
Главный администратор (role_id = 8), Главный инспектор (role_id = 12), Администратор кластера (role_id = 5, если проект расписания ему доступен), Администратор организации (role_id = 10, если проект расписания ему доступен), Инспектор организации (role_id = 11, если проект расписания ему доступен), Любой авторизованный пользователь, у которого есть права на "show" хотя бы одного шаблона, даже удаленного из расписания.
Параметры запроса
обязательный
fromtimestamp — дата начала временного интервала (включительно)обязательный
tilltimestamp — дата окончания временного интервала (не включительно)pageinteger default1— номер запрашиваемой страницыlimitinteger default1000000— количество записей на странице
status = 200
// 2.0+
{
"items": [ // массив дат (время сброшено в 0)
1574456400,
1575406800,
1575666000,
1575752400,
1577826000,
1577912400,
1577998800,
1578085200
],
"total": 8, // общее количество дат
"limit": 25, // максимальное количество элементов на странице
"page": 1 // текущая страница
} GET /rest/schedules/:id/templates
Запрос возвращает список шаблонов расписания, к которым у текущего пользователя есть доступ.
Главный администратор (role_id = 8), Главный инспектор (role_id = 12), Администратор кластера (role_id = 5, если проект расписания ему доступен), Администратор организации (role_id = 10, если проект расписания ему доступен), Инспектор организации (role_id = 11, если проект расписания ему доступен), Любой авторизованный пользователь, у которого есть права на "show" хотя бы одного шаблона, даже удаленного из расписания.
Главному администратору и Главному инспектору запрос вернет все шаблоны расписания. Администратору организации и Инспектору организации запрос вернет все шаблоны расписания в рамках доступных проектов. Пользователю организации запрос вернет те шаблоны, которые на него назначены.
Параметры
Знаком + помечены поля, для которых можно указывать список значений,
разделённых запятой. Например, typeId=1,2.
fromtimestamp — дата начала временного интервала (включительно)tilltimestamp — дата окончания временного интервала (не включительно)pageinteger default1— номер запрашиваемой страницыlimitinteger default25— количество записей на странице+
organizationIdlong — id организации; если у расписания задана организация, то фильтр накладывается на расписание, иначе на шаблоны.+
typeIdlong — id вида работ+
assignedUserIdlong — id назначенного пользователяtaskTitlestring — текстовый поиск по заголовку задания (с начала строки)
status = 200
{
"page": 1, // текущая страница
"total": 37, // всего шаблонов доступно
"limit": 25, // количество на одной странице
"items": [ // информация по заданиям-шаблонам,
// доступным текущему пользователю
{
"id": 32,
"title": "Задание по расписанию",
"num_main_photo": 1, // номер главного фото
"type": { // вид работ
"id": 139,
"name": "Разукомплектованный автомобиль",
"icon": "icon_139.png"
},
"priority": { // приоритет
"id": 1,
"name": "Плановые"
},
"organization": { // организация-владелец
"id": 98,
"name": "Тестовая организация"
},
"assigned_organization": { // назначенная организация
"id": 99,
"name": "Название назначенной организации"
},
"assigned_user": { // исполнитель
"id": 599,
"fio": "Сникерсов Марс Твиксович"
}
},
]
} POST /rest/schedules/:id/archive
Главный администратор (role_id = 8), главный инспектор (role_id = 12), администратор кластера (role_id = 5, если проект расписания ему доступен), администратор организации (role_id = 10, если проект расписания ему доступен), инспектор организации (role_id = 11, если проект расписания ему доступен).
Отправить расписание в архив.
status = 200
{
"id": 1002,
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн расписания
"on": true // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": true, // является ли расписание архивным
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
}, //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
//
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
} DELETE /rest/schedules/:id/archive
Главный администратор (role_id = 8), главный инспектор (role_id = 12), администратор кластера (role_id = 5, если проект расписания ему доступен), администратор организации (role_id = 10, если проект расписания ему доступен), инспектор организации (role_id = 11, если проект расписания ему доступен).
Убрать расписание из архива.
status = 200
{
"id": 1002,
"title": "Расписание на май 2018", // название расписания
"worktime": 7200, // дедлайн расписания
"on": true // включено расписание или нет
"user": { // информация о пользователе, который создал расписание
"id": 6,
"fio": "Захаров Андрей Петрович"
},
"archive": false, // является ли расписание архивным
"organization": { // информация об организации расписания
// (может быть NULL)
"id": 76,
"name": "Тестовая организация"
}, //
//
"total_template_count": 85, // общее количество шаблонов,
// доступных по правам доступа
//
"restricted_access": true, // признак того, что текущему
// пользователю доступны не все шаблоны
//
} /rest/chats
/rest/addresses
GET /rest/addresses/search
Поиск адреса с учётом координат.
Используется поисковый движок geocoder geo4me. Выдаётся 10 первых результатов.
Результаты сортируются в порядке удаления от центра поиска.
Параметры
обязательный
qstring — строка запроса поиска адреса, напримерq=Назарбаева 27обязательный
ll— координаты центра поиска в формате широта,долгота, напримерll=55.3416,50.6909
status = 200
// 2.0+
{
"items": [
{
"lng": 49.14210192142546, // долгота
"lat": 55.77440909550581, // широта
"kind": "10",
"label": "Российская Федерация, Татарстан, Казань, улица Нурсултана Назарбаева, 27",
"formattedLabel": "Казань, улица Нурсултана Назарбаева, 27"
}
]
} /rest/logs
GET /rest/logs/list
Главный администратор (role_id = 8), главный инспектор (role_id = 12).
Возвращает информацию о действиях пользователей.
Параметры
pageinteger default1— номер запрашиваемой страницыlimitinteger default10— количество записей на страницеtable_namestring — фильтр по таблицамuser_idlong — фильтр по пользователямmethodstring — фильтр по методам HTTP запросаoperationstring — фильтр по операциям (insert/update/delete)fromtimestamp — отображаются действия, совершенные после указанной датыtilltimestamp — отображаются действия, совершенные до указанной даты
// 2.0+
{
"items": [
{
"id": 87368, // id действия
"object_id": 176853, // id объекта, над которым было совершено действие
"table_name": "issues.comments", // название таблицы
"operation": "INSERT", // операция
"date": 1573198662, // дата совершения действия
"user": { // пользователь, который совершил действие
"id": 6,
"fio": "Администратор"
},
"http_request": { // http запрос
"id": 13433,
"url": "localhost:9000/tasks/75183...",
"method": "PATCH",
"payload": { // тело запроса
"issue_date": 1573121844002,
"expired_date": 1572614941,
"parent_id": 75322,
"fields": {
"Date": {
"field_id": 13,
"value": 1548158400
}
}
},
"datetime": 1573198428,
"author": {
"id": 6,
"fio": "Администратор"
},
"ip": "0:0:0:0:0:0:0:1",
"user_agent": "PostmanRuntime/7.19.0"
}
}
... // следующие элементы списка
} /rest/
GET /rest/version
Любой пользователь.
Возвращает служебную информацию о версии приложения
status = 200
// 2.0+
{
"appname": "ActiveMap GS", // "application.name" в application.conf
"version": "1.7.7", // служебное поле для обратной совместимости с более ранними версиями протокола; сейчас не используется
"cerebellum": "0.24", // версия Cerebellum
"branch": "0.24.0", // branch, из которого была произведена сборка
"build": 1, // номер сборки
"commit": "198d389d672138f112920833459981b0b35234ee", // коммит сборки
"link": "http://ci.geo4.pro/job/cerebellum/job/dev-current/142/", // ссылка на сборку
"mapinformer_android": "1.16", // последняя выпущенная версия MapInformer Android
"mapinformer_ios": "1.11.1" // последняя выпущенная версия MapInformer iOS
}