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

Для получения доступа к другим версиям API, достаточно указать нужное значение в параметре apiVersion.

Изменения вводились постепенно, и начиная с версии 1.0 до версии 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/cache

GET /rest/tasks/stats

Получение статистики по заданиям. Количество заданий с группировкой по этапам, приоритетам, видам работ, организациям-исполнителям, организациям-создателям.

Параметры фильтрации

/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.

/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&gtUpdateDate=1440835402&ltUpdateDate=1443513802&gtCreateDate=1438157002&ltDate=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.

/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&gtUpdateDate=1440835402&ltUpdateDate=1443513802&gtCreateDate=1438157002&ltDate=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.

/tasks/distribution?withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&priority_id=1,2
/tasks/distribution?gtUpdateDate=1440835402&ltUpdateDate=1443513802&gtCreateDate=1438157002&ltDate=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

Список информации о входе/выходе пользователей в зоны действия заданий.

Параметры фильтрации

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.

/tasks?withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&priority_id=1,2
/tasks?gtUpdateDate=1440835402&ltUpdateDate=1443513802&gtCreateDate=1438157002&ltDate=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 обозначает действие, которое можно выполнять с заданием. Права пользователей на выполнения данного запроса могут быть описаны следующим образом:

Новые переданные файлы будут прикреплены к заданию и добавлены к ранее прикрепленным файлам.

Если массив "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

Список информации о входе/выходе пользователя в зону действия задания.

Параметры фильтрации

/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

Получение списка комментариев к заданию.

Параметры фильтрации

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

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

Параметры фильтрации

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

Добавление ответного комментария

Параметры запроса

// 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 так, что её стороны не будут выступать за границы прямоугольника.

Параметры запроса

/tasks/69704/photos/main/fit/w400/h300

GET /rest/tasks/:id/photos/:num/fit/w:width/h:height

Получение превью указанной фотографии задания.

Фотография будет вписана в прямоугольник WxH так, что её стороны не будут выступать за границы прямоугольника.

Параметры запроса

/tasks/69704/photos/3/fit/w400/h300

GET /rest/tasks/:id/photos/main/crop/w:width/h:height

Получение превью главной фотографии задания.

Фотография будет вписана в прямоугольник WxH так, что весь прямоугольник будет заполнен; при этом возможна обрезка фотографии по одной из сторон.

Параметры запроса

/tasks/69704/photos/main/crop/w400/h300

GET /rest/tasks/:id/photos/:num/crop/w:width/h:height

Получение превью указанной фотографии задания.

Фотография будет вписана в прямоугольник WxH так, что весь прямоугольник будет заполнен; при этом возможна обрезка фотографии по одной из сторон.

Параметры запроса

/tasks/69704/photos/3/crop/w400/h300

GET /rest/tasks/:id/photos/main

Получение главной фотографии задания.

GET /rest/tasks/:id/photos/:num

Получение указанной фотографии задания.

Параметры запроса

GET /rest/tasks/:id/sounds/:num

Получение указанной звукозаписи задания.

Параметры запроса

GET /rest/tasks/:id/videos/:num

Получение указанного видеофайла задания.

Параметры запроса

GET /rest/tasks/:id/files/:num

Получение указанного приложенного файла задания.

Параметры запроса

/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 выше (при их отсутствии возможное значение всегда допустимо).

Из допустимых возможных значений выбирается первое из них в порядке возрастания 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

Главный администратор, главный инспектор.

Позволяет полностью изменить информацию о каком-то узле дерева настроек, включая его свойства, свойства дочерних настроек, набор дочерних настроек, набор возможных значений терминальных настроек и проч.

Тело запроса должно содержать полное описание изменяемого узла, его потомков, потомков его потомков и так далее, даже если сами эти потомки не меняются.

Если для какого-то поля указано, что оно неизменяемо (без дополнительных комментариев), это означает, что заданное при создании этой настройки значение в дальнейшем не может быть изменено.

Параметры

Входные данные

Промежуточная настройка

// 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"                                 
            ]                                         
        }                                             
    ]                                                 
}                                                     

Служит для поиска по объектам обслуживания.

Параметры запроса

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.

Параметры

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 не обязательны.

Параметры

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 в запросе на загрузку пиктограмм необходимо:

Для версий 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).

Администратор кластера может создавать организации только внутри своих кластеров.

Входные данные

// 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.

Параметры

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.

Параметры

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.

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 Если трекинг для пользователя не включен, то информация о местоположении пользователя отсутствует.

Параметры запроса

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).

Пользователям с ролью Клиент недоступны данные других пользователей с ролью Клиент.

Параметры запроса

// 2.0+
{                                                                                                   
    "items": [                                                                                      
        {                                                                                           
            "data": 1516709271,                                                                     // дата
            "lat": 55.01,                                                                           // координаты точки, широта
            "lon": 50.02,                                                                           // координаты точки, долгота
            "control": true,                                                                        // является ли точка контрольной
            "address": "Российская Федерация, Татарстан, Казань, улица Нурсултана Назарбаева, 27",  // адрес точки
            "distance": 18644                                                                       // пройденная дистанция от начала пути
        },                                                                                          // ... другие точки
    ]                                                                                               
}                                                                                                   

Примечания:

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), текущий пользователь.

Получить историю значений датчиков за указанный период.

Параметры запроса

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.

Параметры

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.

Параметры

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.

/types
/types?search=доставка&defaultType=true&ltPeriodOfReviewInSec=172800
/types?search=доставка&defaultType=false&gtPeriodOfReviewInSec=86400&deadlineType=1&groupId=1,2
/types?defaultType=false&deadlineType=1&groupId=1,2&sortBy=order_key&sortDirecton=DESC
/types?defaultType=false&deadlineType=1&gtPeriodOfReviewInSec=86400&ltPeriodOfReviewInSec=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

Получение списка доступных текущему пользователю видов работ с учетом доступности вида работ организациям:

Главному администратору отдаются все виды работ.

Параметры

Знаком + помечены поля, для которых можно указывать список значений, разделённых запятой. Например, groupId=1,2.

Примечания:

В независимости от значения настройки 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&ltPeriodOfReviewInSec=172800
/types/compressed?search=доставка&defaultType=false&gtPeriodOfReviewInSec=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&gtPeriodOfReviewInSec=86400&ltPeriodOfReviewInSec=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).

Загрузить иконку вида работ.

Параметры запроса

Для версий Cerebellum до 0.16 в запросе необходимо:

Для версий 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

Получение списка видимых этапов заданий.

Параметры

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).

Получение списка этапов заданий.

Параметры запросов:

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

Получение списка приоритетов заданий.

Параметры запроса

/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).

Создать приоритет.

  1. Поле icon будет заполнено автоматически, путем связывания стандартной иконки default_priority_icon.png, которая лежит в CEREBELLUM_HOME/conf/resources/files/default_priority_icon.png.

  2. Поле 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.

/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).

  1. Сортировка ведется по полю order типа integer.

  2. Для ручной сортировки будет добавлен POST-запрос /fields/sort, который можно будет выполнить неоднократно.

  3. В теле POST-запроса /fields/sort клиент должен будет передать id-шники настраиваемых полей в отсортированном им порядке. Если переданный список id-шников будет некорректным, в ответе будет выдан BadRequest. Корректность списка id-шников проверяется по следующим пунктам:

    • неверный формат переданных данных,

    • передача несуществующих id-шников,

    • передача дублирующихся id-шников,

    • передача id-шников удаленных настраиваемых полей,

    • передача неверного количества id-шников (должны быть переданы все существующие в БД id-шники).

  4. В БД будет произведен UPDATE: порядок полученных id-шников будет занесен в таблицу issues.custom_fields в столбец order.

  5. Пользователю в ответ на POST-запрос /fields/sort, а также в ответ на GET-запрос /fields будет выдаваться список настраиваемых полей, отсортированный в указанном порядке.

  6. Для новых настраиваемых полей 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:

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 не будет передан, то элементы списка не изменятся. При передаче массива 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

Список стикеров.

Параметры

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.

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.

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, от которого зависит вид ответа:

Параметры

Знаком + помечены поля, для которых можно указывать список значений, разделённых запятой. Например, typeId=1,2.

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.

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.

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" хотя бы одного шаблона, даже удаленного из расписания.

Параметры запроса

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.

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

Поиск адреса с учётом координат.

Используется поисковый движок geocoder geo4me. Выдаётся 10 первых результатов.

Результаты сортируются в порядке удаления от центра поиска.

Параметры

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).

Возвращает информацию о действиях пользователей.

Параметры

// 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
}