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, если явно не указано иное.

/rest/auth

POST /rest/auth/by-login

Неавторизованный пользователь (guest, role_id = 13), авторизованный пользователь.

Запрос на авторизацию.

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

// 2.0+
{                            
    "action": "post",        // необходимо явно указать тип запроса
                             // "post" для соответствия с более ранними версиями
    "login": "login",        // логин
    "password": "password",  // пароль
    "rememberme": 1          // настройка сохранения параметров авторизации:
                             // 1 - сохранить, 0 - не сохранять
}                            

status = 200

// 2.0+
{                                                
    "id": 6,                                     // id пользователя
    "login": "login",                            // логин пользователя
    "fio": "ФИО",                                // имя пользователя
    "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).

Удаление пользовательской сессии (токена).

status = 200

// 2.0+
{  
}  

POST /rest/auth/pushes/subscribe

Авторизованный пользователь.

Запрос на регистрацию для получения PUSH-сообщений. Запрос поступает с мобильного устройства.

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

// 2.0+
{                                                                                                                                                             
    "regId": "APA91bGmD0VObEd-KKuJ9J826c4o4VaxKL9VhvBQaecj3bY0RmrSp2aVmpsujTRPvYRDTvZDhVB9kxke4Q0pcivIM61PsPDd_Eh3k-0DUVdSSpXmgFAM4lsvxpuW1Re9dfQ2mSWMLiCr",  // уникальный адрес устройства для получения
                                                                                                                                                              // PUSH-сообщений, генерируется при установке приложения
    "fqn": "android://ru.gs.mapmobile"                                                                                                                        // полное имя приложения
}                                                                                                                                                             

status = 200

// 2.0+
{  
}  

POST /rest/auth/pushes/unsubscribe

Авторизованный пользователь.

Запрос на отмену регистрации для получения PUSH-сообщений. Запрос поступает с мобильного устройства.

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

// 2.0+
{                                                                                                                                                             
    "regId": "APA91bGmD0VObEd-KKuJ9J826c4o4VaxKL9VhvBQaecj3bY0RmrSp2aVmpsujTRPvYRDTvZDhVB9kxke4Q0pcivIM61PsPDd_Eh3k-0DUVdSSpXmgFAM4lsvxpuW1Re9dfQ2mSWMLiCr",  // уникальный адрес устройства для получения PUSH-сообщений,
                                                                                                                                                              // генерируется при установке приложения
    "fqn": "android://ru.gs.mapmobile"                                                                                                                        // полное имя приложения
}                                                                                                                                                             

status = 200

// 2.0+
{  
}  

/rest/tasks

GET /rest/tasks/cache

Авторизованный пользователь

Запрос на создание WebSocketChannel для возможности получения оповещений об операциях с заданиями (создание, обновление, удаление, добавление комментариев, ответов на комментарии) в формате JSON.

// 2.0+
// ws://localhost:9000/tasks/cache

GET /rest/tasks/stats

Авторизованный пользователь

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

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

// 2.0+
// /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

Авторизованный пользователь

Быстрый запрос для получения списка заданий и точек.

Параметры фильтрации для списка заданий:

Более подробно фильтрация по настраиваемым полям описана в разделе Фильтрация заданий по настраиваемым полям

// 2.0+
// /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

Авторизованный пользователь

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

Параметры фильтрации для списка заданий:

Более подробно фильтрация по настраиваемым полям описана в разделе Фильтрация заданий по настраиваемым полям

// 2.0+
// /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

Авторизованный пользователь

Статистика по количеству заданий в разрезе видов работ, приоритетов, этапов.

Параметры фильтрации для списка заданий:

Более подробно фильтрация по настраиваемым полям описана в разделе Фильтрация заданий по настраиваемым полям

// 2.0+
// /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

Авторизованный пользователь

Список всех возможных состояний заданий.

// 2.0+
{  
}  

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

// 2.0+
{  
}  

status = 200

// 2.0+
{                                   
    "items": [                      
        {                           
            "id": 2,                // id действия
            "name": "delete",       // название действия
            "default": false        // служебное поле
        },                          
        {                           
            "id": 3,                
            "name": "edit",         
            "default": false        
        },                          
        {                           
            "id": 8,                
            "name": "assign_user",  
            "default": false        
        },                          
        ...                         // следующие элементы списка действий
    ]                               
}                                   

GET /rest/tasks/allowed

Авторизованный пользователь

Получение списка правил, доступных роли текущего пользователя. Правила описывают состояния (states), в которых должно находиться задание, чтобы определенное действие (capability) было доступно роли (role) пользователя. Если для роли не прописано какое-то действие, оно для нее не доступно. Если в поле состояний (states) стоит null, действие доступно роли при любых состояниях.

// 2.0+
{  
}  

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

Авторизованный пользователь.

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

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

// 2.0+
{  
}  

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), в ответе отобразятся все задания его организации. Для пользователя без организации (например, главного администратора) в ответе отобразятся все задания всех организаций.

Список всех заданий, доступных пользователю.

Параметры фильтрации для списка заданий:

// 2.0+
// /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":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon__int__88432000555__","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",                                // логотип организации
            "date": 1543312469,                                               // дата создания задания
            "deadline": 1541581662557,                                        // дедлайн
            "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": 1547311229,                                        // дата изменение задания
            "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": 1541581403357,                                            // дата создания задания
            "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": <значение>}}
                    "value": 12345                                            
                }                                                             
            },                                                                
            "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": 1542949580                                            
            },                                                                
            "attachments": [                                                  // прикрепленные файлы
                {                                                             
                    "id": 54666,                                              // id файла
                    "num": 1,                                                 // порядковый номер файла
                    "name": "Nature.jpg",                                     // исходное название файла
                    "description": "New photo",                               // описание файла
                    "extension": "jpg",                                       // расширение файла
                    "file_name": "8ce1c640-e2c6-1004-8171-1dcd61b183b4.jpg",  // название файла на сервере
                    "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": 1533286296,                                               // * дата задания
    "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+ организация исполнителя при её наличии;
                                                                      // также можно указать только организацию
                                                                      // без указания конкретного исполнителя;
                                                                      // организации должен быть доступен вид работ задания
                                                                      //
    "deadline": 1533545495,                                           // дедлайн;
                                                                      // если не передан, то может быть проставлен
                                                                      // на основе поля 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": "Второстепенное фото",                     // описание файла
            "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": 1533111159,                                   // время
                "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": 1533113954,                                   // время
                "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,                                        // логотип организации
    "deadline": 1542969580,                                           // дедлайн
    "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": 1542969580,                                        // дата обновления задания
    "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": 1542969580,                                               // дата создания задания
    "service_object_layer_id": 1493,                                  // id слоя объекта обслуживания
    "service_object_id": 7,                                           // id объекта обслуживания
    "fields": {                                                       // json-объект, хранящий значения настраиваемых полей
        "Dop_pole_dlya_testov": {                                     // в формате:
            "field_id": 19,                                           // {"название поля": {"field_id": <ID>, "value": <значение>}}
            "value": 12345                                            
        }                                                             
    },                                                                
    "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": 1542949580                                            
    },                                                                
    "attachments": [                                                  // прикрепленные файлы
        {                                                             
            "id": 54666,                                              // id файла
            ...                                                       // следующие элементы
        }                                                             
    ],                                                                
}                                                                     

Более подробное описание прикрепленных файлов см. в GET /tasks

GET /rest/tasks/:id

Авторизованный пользователь

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

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

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,                                        // логотип организации
        "deadline": 1542969580,                                           // дедлайн
        "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": 1542969580,                                        // дата обновления задания
        "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": 1542969580,                                               // дата создания задания
        "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": <значение>}}
                "value": 12345                                            
            }                                                             
        },                                                                
        "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": 1542949580                                            
        },                                                                
        "attachments": [                                                  // прикрепленные файлы
            {                                                             
                "id": 54666,                                              // id файла
                ...                                                       // следующие элементы
            }                                                             
        ],                                                                
    },                                                                    
    "configuration": {}                                                   
}                                                                         

Более подробное описание прикрепленных файлов см. в GET /tasks

PATCH /rest/tasks/:id

Обновление задания.

Авторизованный пользователь

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

Для версий Cerebellum, начиная с 0.16 и старше, добавляем в запрос следующие возможности:

Для совместимости с более ранними версиями оставляем возможность отправки информации по файлам в массивах "photos","videos","files","sounds".

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

Если будет передан массив "attachments" (в том числе, если он будет передан пустой или null), информацию по файлам берем из него. Независимо от того, были ли переданы вышеперечисленные массивы файлов, они будут проигнорированы. Если массив "attachments" не будет передан, информацию по файлам берем из вышеперечисленных массивов.

Если массив "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" не было передано, полагаем, что к файлу не прикреплен никакой стикер.

Для версий Cerebellum, начиная с 0.18 и старше, добавляем в тело запроса новые поля "tracking_on" (для настройки включения/выключения оповещений о входе/выходе исполнителя в зону/из зоны задания) и "zoneradius" (для настройки размера зоны задания для оповещений о входе/выходе исполнителя в зону/из зоны задания).

Для версий Cerebellum, начиная с 0.21 и старше, добавляем в массив "attachments" новые поля для передачи информации по файлам:

При передаче поля "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": 1533286296,                                           // дедлайн
    "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": "Второстепенное фото",                     // описание файла
            "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": 1533111159,                                   // время прикрепления файла
                "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": 1533113954,                                   // время записи файла
                "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": 1533111159,                                   // время прикрепления файла
                "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": 1533113954,                                   // время записи файла
                "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": 1533111159,                                   // время прикрепления файла
                "time_provider": "gps",                               // источник времени прикрепления, тип String, возможные значения: "ntp"/"gps"/"system"
                "location": null                                      // информация по месту прикрепления
            },                                                        
            "origin": {                                               // информация по времени и месту записи файла
                "time": 1533113954,                                   // время записи файла
                "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": 1533111159,                                   // время прикрепления файла
                "time_provider": "gps",                               // источник времени прикрепления, тип String, возможные значения: "ntp"/"gps"/"system"
                "location": null                                      // информация по месту прикрепления
            },                                                        
            "origin": {                                               // информация по времени и месту записи файла
                "time": 1533113954,                                   // время записи файла
                "time_provider": "system",                            // источник времени записи, тип String, возможные значения: "ntp"/"gps"/"system"
                "location": null                                      // информация по месту записи
            },                                                        
            "author": null                                            // информация о приложении и платформе
        },                                                            
        ...                                                           // следующие элементы списка файлов
    ],                                                                // передача файлов в массиве для версий Cerebellum до 0.16
    "photos": [                                                       // массив прикрепленных фотографий
        {                                                             
            "file": "naaethsde56gh.jpg",                              
            "file_name": "photo1.jpg"                                 
        },                                                            
        {                                                             
            "file": "sdbvr54456fc4.png",                              
            "file_name": "photo2.png"                                 
        }                                                             
    ],                                                                
    "videos": [                                                       // массив прикрепленных видео файлов
        {                                                             
            "file": "naaethsde56gh.3gp",                              
            "file_name": "video1.3gp"                                 
        },                                                            
        {                                                             
            "file": "sdbvr54456fc4.3gp",                              
            "file_name": "video2.3gp"                                 
        }                                                             
    ],                                                                
    "files": [                                                        // массив прикрепленных файлов
        {                                                             
            "file": "naaethsde56gh.txt",                              
            "file_name": "file1.txt"                                  
        },                                                            
        {                                                             
            "file": "sdbvr54456fc4.txt",                              
            "file_name": "file2.txt"                                  
        }                                                             
    ],                                                                
    "sounds": [                                                       // массив прикрепленных аудио файлов
        {                                                             
            "file": "naaethsde56gh.m4a",                              
            "file_name": "sound1.m4a"                                 
        },                                                            
        {                                                             
            "file": "sdbvr54456fc4.m4a",                              
            "file_name": "sound2.m4a"                                 
        }                                                             
    ]                                                                 
}                                                                     

status = 200

// 2.0+
{                                                                     
    "id": 789249,                                                     // id созданного задания
    "user_id": 6,                                                     // id создателя задания
    "user_fio": "Главный Администратор",                              // ФИО создателя
    "title": "Яма на дороге",                                         // заголовок
    "text": "Яма на дороге, перекресток ул Пушкина/Университетская",  // описание
    "organization_id": 3,                                             // id организации создателя
    "organization_name": "Контроль дорог",                            // название организации создателя
    "organization_logo": null,                                        // логотип организации
    "deadline": 1542969580,                                           // дедлайн
    "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": 1542969580,                                        // дата обновления задания
    "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": 1542969580,                                               // дата создания задания
    "service_object_layer_id": 1493,                                  // id слоя объекта обслуживания
    "service_object_id": 7,                                           // id объекта обслуживания
    "fields": {                                                       // json-объект, хранящий значения настраиваемых полей
        "Dop_pole_dlya_testov": {                                     // в формате:
            "field_id": 19,                                           // {"название поля": {"field_id": <ID>, "value": <значение>}}
            "value": 12345                                            
        }                                                             
    },                                                                
    "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": 1542949580                                            
    },                                                                
    "attachments": [                                                  // прикрепленные файлы
        {                                                             
            "id": 54666,                                              // id файла
            ...                                                       // следующие элементы
        }                                                             
    ],                                                                
}                                                                     

Более подробное описание прикрепленных файлов см. в GET /tasks

POST /rest/tasks/:id/update

Обновление задания.

Авторизованный пользователь

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

Для версий Cerebellum, начиная с 0.16 и старше, добавляем в запрос следующие возможности:

Для совместимости с более ранними версиями оставляем возможность отправки информации по файлам в массивах "photos","videos","files","sounds".

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

Если будет передан массив "attachments" (в том числе, если он будет передан пустой или null), информацию по файлам берем из него. Независимо от того, были ли переданы вышеперечисленные массивы файлов, они будут проигнорированы. Если массив "attachments" не будет передан, информацию по файлам берем из вышеперечисленных массивов.

Если массив "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" не было передано, полагаем, что к файлу не прикреплен никакой стикер.

Для версий Cerebellum, начиная с 0.18 и старше, добавляем в тело запроса новые поля "tracking_on" (для настройки включения/выключения оповещений о входе/выходе исполнителя в зону/из зоны задания) и "zoneradius" (для настройки размера зоны задания для оповещений о входе/выходе исполнителя в зону/из зоны задания).

Для версий Cerebellum, начиная с 0.21 и старше, добавляем в массив "attachments" новые поля для передачи дополнительной информации по файлам:

// 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": 1533286296,                                           // дедлайн
    "system_data": "версия: 1.1.1",                                   
    "restricted": false,                                              // ограничение доступа
    "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": "Второстепенное фото",                     // описание файла
            "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": 1533111159,                                   // время прикрепления файла
                "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": 1533113954,                                   // время записи файла
                "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": 1533111159,                                   // время прикрепления файла
                "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": 1533113954,                                   // время записи файла
                "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": 1533111159,                                   // время прикрепления файла
                "time_provider": "gps",                               // источник времени прикрепления, тип String, возможные значения: "ntp"/"gps"/"system"
                "location": null                                      // информация по месту прикрепления
            },                                                        
            "origin": {                                               // информация по времени и месту записи файла
                "time": 1533113954,                                   // время записи файла
                "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": 1533111159,                                   // время прикрепления файла
                "time_provider": "gps",                               // источник времени прикрепления, тип String, возможные значения: "ntp"/"gps"/"system"
                "location": null                                      // информация по месту прикрепления
            },                                                        
            "origin": {                                               // информация по времени и месту записи файла
                "time": 1533113954,                                   // время записи файла
                "time_provider": "system",                            // источник времени записи, тип String, возможные значения: "ntp"/"gps"/"system"
                "location": null                                      // информация по месту записи
            },                                                        
            "author": null                                            // информация о приложении и платформе
        },                                                            
        ...                                                           // следующие элементы списка файлов
    ],                                                                // передача файлов в массиве для версий Cerebellum до 0.16
    "photos": [                                                       // массив прикрепленных фотографий
        {                                                             
            "file": "naaethsde56gh.jpg",                              
            "file_name": "photo1.jpg"                                 
        },                                                            
        {                                                             
            "file": "sdbvr54456fc4.png",                              
            "file_name": "photo2.png"                                 
        }                                                             
    ],                                                                
    "videos": [                                                       // массив прикрепленных видео файлов
        {                                                             
            "file": "naaethsde56gh.3gp",                              
            "file_name": "video1.3gp"                                 
        },                                                            
        {                                                             
            "file": "sdbvr54456fc4.3gp",                              
            "file_name": "video2.3gp"                                 
        }                                                             
    ],                                                                
    "files": [                                                        // массив прикрепленных файлов
        {                                                             
            "file": "naaethsde56gh.txt",                              
            "file_name": "file1.txt"                                  
        },                                                            
        {                                                             
            "file": "sdbvr54456fc4.txt",                              
            "file_name": "file2.txt"                                  
        }                                                             
    ],                                                                
    "sounds": [                                                       // массив прикрепленных аудио файлов
        {                                                             
            "file": "naaethsde56gh.m4a",                              
            "file_name": "sound1.m4a"                                 
        },                                                            
        {                                                             
            "file": "sdbvr54456fc4.m4a",                              
            "file_name": "sound2.m4a"                                 
        }                                                             
    ]                                                                 
}                                                                     

status = 200

// 2.0+
{                                                                     
    "id": 789249,                                                     // id созданного задания
    "user_id": 6,                                                     // id создателя задания
    "user_fio": "Главный Администратор",                              // ФИО создателя
    "title": "Яма на дороге",                                         // заголовок
    "text": "Яма на дороге, перекресток ул Пушкина/Университетская",  // описание
    "organization_id": 3,                                             // id организации создателя (для создателей без организации
                                                                      // это значение указывается явно при создании задания)
    "organization_name": "Контроль дорог",                            // название организации создателя
    "organization_logo": null,                                        // логотип организации
    "deadline": 1542969580,                                           // дедлайн
    "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": "рассмотрение",                                    // название этапа
    "restricted": false,                                              // ограничение доступа
    "num_main_photo": null,                                           // порядковый номер фотографии,
                                                                      // которая будет в заголовке.
    "archive": false,                                                 // архивное задание
    "system_data": "версия: 1.1.1",                                   
    "update_date": 1542969580,                                        // дата обновления задания
    "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": 1542969580,                                               // дата создания задания
    "service_object_layer_id": 1493,                                  // id слоя объекта обслуживания
    "service_object_id": 7,                                           // id объекта обслуживания
    "fields": {                                                       // json-объект, хранящий значения настраиваемых полей
        "Dop_pole_dlya_testov": {                                     // в формате:
            "field_id": 19,                                           // {"название поля": {"field_id": <ID>, "value": <значение>}}
            "value": 12345                                            
        }                                                             
    },                                                                
    "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": 1542949580                                            
    },                                                                
    "attachments": [                                                  // прикрепленные файлы
        {                                                             
            "id": 54666,                                              // id файла
            ...                                                       // следующие элементы
        }                                                             
    ],                                                                
}                                                                     

Более подробное описание прикрепленных файлов см. в GET /tasks

POST /rest/tasks/:id

Логическое удаление задания.

Авторизованный пользователь

Права пользователей на выполнение этого запроса зависят от capability роли пользователя.

Понятие capability обозначает действие, которое можно выполнять с заданием. Для того, чтобы пользователь мог удалить задание, его роль должна иметь capability со свойствами: capability_id = 2, capability_name = "delete".

// 2.0+
{                       
    "action": "delete"  // необходимо явно указать тип запроса "delete" для совместимости с более ранними версиями
}                       

status = 200

// 2.0+
{  
}  

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

Авторизованный пользователь.

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

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

// 2.0+
// Пример запроса: /tasks/69704/thumb/1/700x900
{  
}  

GET /rest/tasks/:id/thumb

Авторизованный пользователь.

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

// 2.0+
{  
}  

GET /rest/tasks/:id/can/*capabilities

Авторизованный пользователь.

Проверка прав пользователя на задание: имеет ли пользователь право выполнять указанные действия (capabilities) с заданием. Действия (capabilities) перечисляются через запятую в строке запроса.

// 2.0+
// Пример запроса: /tasks/123/can/show,delete
{  
}  

status = 200

// 2.0+
{                   
    "show": true,   // действие, доступно или нет
    "delete": true  // действие, доступно или нет
}                   

GET /rest/tasks/:id/track

Авторизованный пользователь.

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

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

// 2.0+
// /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".

Получить оценку, поставленную заданию.

// 2.0+
{  
}  

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

Удалить оценку, поставленную заданию.

// 2.0+
{  
}  

status = 403

// 2.0+
{                                            
    "error_description": "Нет прав доступа"  
}                                            

status = 404

// 2.0+
{                                                         
    "error_description": "Такого задания не существует!"  
}                                                         

status = 404

// 2.0+
{                                                       
    "error_description": "Такой оценки не существует!"  
}                                                       

GET /rest/tasks/:id/comments/list

Авторизованный пользователь

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

Для версий Cerebellum, начиная с 0.21 и старше, добавляем в массивы "file_added", "files_deleted" новые поля для отображения дополнительной информации по файлам:

// 2.0+
{  
}  

status = 200

// 2.0+
{                                                                                  
    "items": [                                                                     
        {                                                                          
            "id": 50029,                                                           // id комментария
            "uuid": "1454bd95-3653-4499-ab39-9733af031312",                        
            "date": 1533289354,                                                    // дата создания комментария
            "update_text": "Заданию назначили организацию: \"Отдел разработки\"",  //текст обновления (для комментария об обновлении задания)
            "comment": "",                                                         // текст комментария
            "type": 2,                                                             // тип комментария: 1 - обычный, 2 - системный
            "diff": {                                                              // информация по внесенным в задание изменениям
                "id": 39983,                                                       // id изменения
                "date": 1533289354,                                                // дата изменения
                "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": 1533289321,                                                    //дата создания комментария
            "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": 1533215336,                                                    // дата создания комментария
            "update_text": "Были добавлены новые файлы. Файлы были изменены.",     //текст обновления (для комментария об обновлении задания)
            "comment": "",                                                         // текст комментария
            "type": 2,                                                             // тип комментария: 1 - обычный, 2 - системный
            "diff": {                                                              // информация по внесенным в задание изменениям
                "id": 39981,                                                       // id изменения
                "date": 1533215336,                                                // дата изменения
                "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)
                "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": 1533215334,                                 
                        "deleted": false,                                          // был файл удален или нет
                        "file_source": "device_camera",                            // источник файла
                        "size": 1288395,                                           // размер файла в байтах
                        "attachment": {                                            // информация по времени и месту прикрепления файла
                            "time": 1533111159,                                    // время прикрепления файла
                            "time_provider": "system",                             // источник времени прикрепления файла
                            "location": {                                          // информация по месту прикрепления файла
                                "location": [                                      
                                    55.56,                                         
                                    46.67                                          
                                ],                                                 // координаты места прикреплени файла
                                "provider": "gps",                                 // источник координат места прикрепления файла
                                "accuracy": 12.5,                                  // точность координат места прикрепления файла
                                "distance_to_task": 25.85713665489607,             // расстояние от точки задания до места прикрепления файла (в метрах)
                            }                                                      
                        },                                                         
                        "origin": {                                                // информация по времени и месту создания файла
                            "time": 1533113954,                                    // время создания файла
                            "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                                            // код системного сообщения
        }                                                                          
    ]                                                                              
}                                                                                  

POST /rest/tasks/:id/comments

Авторизованный пользователь

Добавление комментария к заданию.

// 2.0+
{                             
    "action": "post",         // необходимо явно указать тип запроса "post" для совместимости с более ранними версиями
    "uuid": "Работы начаты",  // UUID4, необязательное поле
    "comment": "Комментарий"  // текст комментария
}                             

status = 200

// 2.0+
{                                
    "id": 9145,                  // id комментария
    "uuid": "cdnjskcnkjdancfk",  // UUID4, необязательное поле
    "parent": null,              // родительский комментарий
    "date": 1542969580,          // дата создания комментария
    "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

Авторизованный пользователь

Добавление ответного комментария: id - id задания, referenceId - id существующего комментария.

// 2.0+
{                                                  
    "action": "post",                              // необходимо явно указать тип запроса "post" для совместимости с более ранними версиями
    "uuid": "vfjdnvkjlsdnfvkj"                     // UUID4, необязательное поле
    "comment": "Работы начали. Прибыли на объект"  // текст комментария
}                                                  

status = 200

// 2.0+
{                                                   
    "id": 9146,                                     // id комментария
    "uuid": "cdnjskcnkjdancfk",                     // UUID4, необязательное поле
    "parent": {...},                                // родительский комментарий в том же формате,
                                                    // но без вложенного родительского
    "date": 1542969580,                             // дата создания комментария
    "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  
        }                     
    ]                         
}                             

status = 200

// 2.0+
{  
}  

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

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

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",          
            "name"         
        },                 
        "organization": {  // организация пользователя
            "id",          
            "name"         
        },                 
        "user": {          // пользователь
            "id",          
            "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"           
        },                 
        "user": {          // для пользователя
            "id"           
        },                 
        "organization": {  // для организации
            "id"           
        },                 
        "state_rule": {    // в состояниях
            "states": []   
        }                  
    }                      
}                          

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            // включать отслеживание местоположения исполнителя
                                            // по умолчанию для всех заданий
}                                           

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

Изменение информации о кластере.

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

status = 200

// 2.0+
{  
}  

/rest/organizations

GET /rest/organizations/list/:limit/:offset

Авторизованный пользователь.

Получение списка организаций, где offset - номер первой выводимой в ответе организации, limit - количество выводимых в ответе организаций.

Главный инспектор и главный администратор видят все организации, прочие пользователи - в соответствии со своими рабочими группами, если behavior.can.see.my.organization.only=false. Если эта настройка выставлена в true, то пользователь будет видеть только свою организацию.

Параметры 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).

Добавление новой организации.

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

// 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) (может изменять данные только своей организации).

На данный момент позволяет задать организацию-исполнитель по умолчанию.

Параметры

:id - идентификатор организации, для заданий которой устанавливается организация-исполнитель по умолчанию.

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

// 2.0+
{                                   
    "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) (может изменять данные только своей организации).

Изменение существующей организации.

В версиях 0.17-0.18 запрос содержал поля geo4me, geo4me_login, geo4me_password для создания соответствующий организации в Geo4me. Начиная с версии 0.19.0, эта возможность не поддерживается. Более подробно можно прочитать здесь:

Перенос организации в другой кластер 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).

Логическое удаление организации.

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

status = 200

// 2.0+
{  
}  

GET /rest/organizations/:id/users

Главный администратор (role_id = 8), администратор организации (role_id = 10), главный инспектор (role_id = 12), инспектор организации (role_id = 11), авторизованный пользователь.

Получение списка пользователей организации, где id - id организации.

Права доступа на выполнение данного запроса для ролей A, I есть всегда.

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

Данные пользователей с ролью Клиент (role_id = 6) недоступны никому, кроме самих себя.

status = 200

// 2.0+
{                                           
    "items": [                              
        {                                   
            "id": 3011,                     // id пользователя
            "login": "admin1439218241106",  // логин пользователя
            "fio": "Иванов И.И.",           // ФИО пользователя
            "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/organizations/:id/types/:typeId

Главный администратор (role_id = 8), администратор организации (role_id = 10) (может привязать вид работ только к своей организации).

Привязка вида работ к организации.

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

status = 200

// 2.0+
{  
}  

DELETE /rest/organizations/:id/types/:typeId

Главный администратор (role_id = 8), администратор организации (role_id = 10) (может удалить связь между видом работ и своей организацией).

Удаление связи между видом работ и организацией.

Если указанных вида работ или организации не существует, получаем ошибку 404. Если связи не существует, получаем ошибку 400.

status = 200

// 2.0+
{  
}  

GET /rest/organizations/:id/stamp

Получить изображение печати организации.

Авторизованный пользователь

Для пользователей с ролями Главный администратор (role_id = 8), Главный инспектор (role_id = 12) доступные все организации.

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

// 2.0+
{  
}  

GET /rest/organizations/:id/head-signature

Получить изображение подписи руководителя организации.

Авторизованный пользователь

Для пользователей с ролями Главный администратор (role_id = 8), Главный инспектор (role_id = 12) доступные все организации.

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

// 2.0+
{  
}  

GET /rest/organizations/:id/accountant-signature

Получить изображение подписи бухгалтера организации.

Авторизованный пользователь

Для пользователей с ролями Главный администратор (role_id = 8), Главный инспектор (role_id = 12) доступные все организации.

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

// 2.0+
{  
}  

/rest/users

GET /rest/users/current

Авторизованный пользователь.

Получение информации о текущем пользователе.

status = 200

// 2.0+
{                                                        
    "id": 6,                                             // id пользователя
    "login": "ivanov",                                   // логин
    "fio": "Иванов Иван Иванович",                       // ФИО
    "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

Неавторизованный пользователь.

Регистрация нового пользователя.

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

// 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": "Иванов И.И.",                                // ФИО
    "organization_id": 514,                              // id организации
    "role_id": 10,                                       // 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

Авторизованный пользователь.

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

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

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

status = 200

// 2.0+
{                                                                
    "items": [                                                   
        {                                                        
            "id": 3011,                                          // id пользователя
            "login": "admin1439218241106",                       // логин пользователя
            "fio": "Иванов И.И.",                                // ФИО
            "organization_id": 2,                                // 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

Запрос выдает список пользователей ActiveMap с информацией об их местоположении.

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

Если трекинг для пользователя не включен, то информация о местоположении пользователя отсутствует.

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

status = 200

// 2.0+
{                                               
    "items": [                                  
        {                                       
            "user": {                           
                "id": 614,                      // id пользователя
                "fio": "Иванов Иван Иванович",  // ФИО пользователя
                "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

Авторизованный пользователь.

Начиная с версии 0.19.0 запрос выдает точки всех пользователей, которые доступны текущему пользователю:

Примечание: Для более ранних версий (до 0.19.0) запрос выдавал:

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

status = 200

// 2.0+
{                                    
    "items": [                       
        {                            
            "id": 999,               // id пользователя ActiveMap
            "point": {               // координаты местоположения пользователя
                "user_id": 225,      // ГЛОНАСС-id
                "lon": 50.0001,      // координата longitude (долгота)
                "lat": 50.0002,      // координата latitude (широта),
                "date": 1526314368,  // время последней активности пользователя
                "active": false      // активность пользователя в заданный временной интервал
                                     // (интервал задается в переменной geo4me.user.activity.interval
                                     // в файле app.conf, по умолчанию, 30 минут)
            }                        
        }                            
    ]                                
}                                    

GET /rest/users/locations/live

Авторизованный пользователь.

Соединение по web-socket для получения актуальной информации о местоположении пользователей.

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

// 2.0+
{                                       
    "points": [                         
        {                               
            "user": {                   
                "id": 609,              // id пользователя ActiveMap
                "organization_id": 609  // id организации пользователя ActiveMap
            },                          
            "location": {               
                "user_id": 1510,        // ГЛОНАСС-id
                "lon": 49.4513218,      // координата долготы
                "lat": 56.2500685,      // координата широты
                "date": 1490987230,     // дата последней активности пользователя
                "active": false         // активность пользователя (временной интервал
                                        // для проверки активности пользователя задается
                                        // в настройках, по умолчанию это 30 минут);
                                        // null, если нет данных о местоположении пользователя
            }                           
        },                              
        {                               
            "user": {                   
                "id": 622,              
                "organization_id": 622  
            },                          
            "location": {               
                "user_id": 1511,        
                "lon": 0.0,             
                "lat": 0.0,             
                "date": null,           
                "active": false         
            }                           
        }                               
    ]                                   
}                                       

POST /rest/users

Добавление нового пользователя.

Главный администратор (role_id = 8), Администратор организации (role_id = 3) (может добавить пользователя только в свою организацию).

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

// 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 - Клиент
    "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": "Иванов И.И.",                                
    "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) (может редактировать учетные записи пользователей только своей организации).

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

// 2.0+
{                                                        
    "login": "ivanov_ivan",                              // логин
    "fio": "Иванов Иван Иванович",                       // ФИО
    "role_id": 7,                                        // id роли; пользователь не может сам поменять свою роль
    "organization_id": 517,                              // id организации, права на изменения
                                                         // есть только у главного администратора
    "workgroup_ids": [                                   // массив id рабочих групп, к которым относится пользователь
        132,                                             
        232                                              
    ],                                                   
    "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": "Иванов Иван Иванович",                       // ФИО
    "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,                            // канал входящих сообщений
}                                                        

PUT /rest/users/:id

Редактирование учетной записи пользователя по id.

Текущий пользователь (может редактировать свою учетную запись), Главный администратор (role_id = 8), Администратор организации (role_id = 3) (может редактировать учетные записи пользователей только своей организации).

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

// 2.0+
{                                                        
    "login": "ivanov_ivan",                              // * логин
    "fio": "Иванов Иван Иванович",                       // * ФИО
    "role_id": 7,                                        // * id роли; пользователь не может сам поменять свою роль
    "organization_id": 517,                              // id организации, права на изменения
                                                         // есть только у главного администратора
    "workgroup_ids": [                                   // массив id рабочих групп, к которым относится пользователь
        132,                                             
        232                                              
    ],                                                   
    "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": "Иванов Иван Иванович",                       // ФИО
    "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

Удаление учетной записи пользователя по id (логическое удаление).

Главный администратор (role_id = 8), Администратор организации (role_id = 3) (может удалять учетные записи пользователей только своей организации).

status = 200

// 2.0+
{  
}  

GET /rest/users/:activeMapUserId/geo4me/track

Главный администратор (role_id = 8), администратор организации (role_id = 10), главный инспектор (role_id = 12), инспектор организации (role_id = 11).

Получение трека пользователя за указанный временной интервал (dateFrom, dateTo).

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

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

Примечания:

/rest/types

GET /rest/types

Авторизованный пользователь.

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

Параметры

Примечания:

В независимости от значения настройки behavior.use.custom.work.types.sort=true/false в application.conf, если параметры сортировки sortBy, sortDirection переданы, то сортировка ведется по ним. Если параметры sortBy, sortDirection не переданы и behavior.use.custom.work.types.sort=true, то сортировка будет вестись по полю order_key с направлением ASC. Если параметры sortBy, sortDirection не переданы и behavior.use.custom.work.types.sort=false, то сортировка будет вестись по полю id с направлением ASC.

Примеры запросов

/types

/types?search=доставка&defaultType=true&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

Авторизованный пользователь.

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

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

Параметры

Примечания:

В независимости от значения настройки 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 = 10), главный инспектор (role_id = 12), инспектор организации (role_id = 11).

Ручная сортировка видов работ в порядке, заданном в теле запроса.

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

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

Удаление группы видов работ.

status = 200

// 2.0+
{  
}  

POST /rest/types

Главный администратор (role_id = 8), администратор организации (role_id = 10), главный инспектор (role_id = 12), инспектор организации (role_id = 11).

Создание вида работ.

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

// 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",                           // поле для расчета срока исполнения
                                                            // работ данного вида: null, от даты
                                                            // создания "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",                           // поле для расчета срока исполнения
                                                            // работ данного вида: null, от даты
                                                            // создания "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",                           // поле для расчета срока исполнения
                                                            // работ данного вида: null, от даты
                                                            // создания "AT_CREATE", от даты
                                                            // назначения на исполнителя
                                                            // "AT_UPDATE".
    "organizations": [                                      // массив id организаций,
                                                            // которым доступен вид
        2,                                                  
        3                                                   
    ],                                                      
    "group_id": 22                                          // id группы, которой принадлежит
                                                            // вид, или null, если вид не
                                                            // принадлежит никакой группе
}                                                           

PUT /rest/types/:id

Главный администратор (role_id = 8), администратор организации (role_id = 10), главный инспектор (role_id = 12), инспектор организации (role_id = 11).

Изменение вида работ.

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

// 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",                           // поле для расчета срока исполнения
                                                            // работ данного вида: null, от даты
                                                            // создания "AT_CREATE", от даты
                                                            // назначения на исполнителя
                                                            // "AT_UPDATE".
    "organizations": [                                      // массив id организаций,
                                                            // которым доступен вид
        2,                                                  
        3                                                   
    ],                                                      
    "group_id": 22                                          // необязательное поле: значение null
                                                            // (либо отсутствие поля в JSON)
                                                            // означает, что нужно оставить текущее
                                                            // значение; значение 0 означает, что
                                                            // нужно удалить этот вид работ из
                                                            // текущей группы; положительные значения
                                                            // трактуется как 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",                           // поле для расчета срока исполнения
                                                            // работ данного вида: null,
                                                            // от даты создания "AT_CREATE",
                                                            // от даты назначения на исполнителя
                                                            // "AT_UPDATE".
    "organizations": [                                      // массив id организаций,
                                                            // которым доступен вид
        2,                                                  
        3                                                   
    ],                                                      
    "group_id": 22                                          // id группы, которой принадлежит
                                                            // вид, или null, если вид не
                                                            // принадлежит никакой группе
}                                                           

DELETE /rest/types/:id

Главный администратор (role_id = 8), администратор организации (role_id = 10), главный инспектор (role_id = 12), инспектор организации (role_id = 11).

Удаление вида работ.

status = 200

// 2.0+
{  
}  

POST /rest/types/:id/fields/:fieldId

Главный администратор (role_id = 8), администратор организации (role_id = 10), главный инспектор (role_id = 12), инспектор организации (role_id = 11).

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

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

status = 200

// 2.0+
{  
}  

DELETE /rest/types/:id/fields/:fieldId

Главный администратор (role_id = 8), администратор организации (role_id = 10), главный инспектор (role_id = 12), инспектор организации (role_id = 11).

Удаление связи между видом работ и настраиваемым полем, отвязка поля от вида работ.

Если указанных вида работ или настраиваемого поля не существует, получаем ошибку 404. Если связи не существует, получаем ошибку 400.

status = 200

// 2.0+
{  
}  

POST /rest/types/:id/stickers/:stickerId

Главный администратор (role_id = 8), главный инспектор (role_id = 12).

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

Если указанных вида работ или стикера не существует, получаем ошибку 404. Если стикер доступен для всех видов работ (is_for_all=true), получаем 403. Если связь уже существует, то есть, стикер был явно прикреплен к виду работ, ошибку не получаем (INSERT в таблицу повторно не выполняется).

status = 200

// 2.0+
{  
}  

DELETE /rest/types/:id/stickers/:stickerId

Главный администратор (role_id = 8), главный инспектор (role_id = 12).

Открепление стикера от вида работ.

Если указанных вида работ или настраиваемого поля не существует, получаем ошибку 404. Если стикер доступен для всех видов работ (is_for_all=true), получаем 403. Если связи не существует, то есть, стикер не был явно прикреплен к виду работ, получаем ошибку 400.

status = 200

// 2.0+
{  
}  

PUT /rest/types/:id/:iconType

Главный администратор (role_id = 8), администратор организации (role_id = 10), главный инспектор (role_id = 12), инспектор организации (role_id = 11).

Загрузить иконку вида работ. id - id вида работ, iconType - тип загружаемой иконки, возможные значения:

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

Удалить этап.

status = 200

// 2.0+
{  
}  

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

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

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

// 2.0+
{                       
    "name": "Плановые"  // название приоритета
}                       

status = 200

// 2.0+
{                                    
    "id": 1,                         // id приоритет
    "name": "Плановые",              // название приоритета
    "icon": "default_priority.png",  // название иконки
    "order_important": 7             // cтепень значимости приоритета
}                                    

Примечания:

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

  2. Поле order_important будет заполнено автоматически, путем вычисления следующего, наибольшего числового значения.

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

Удалить приоритет.

status = 200

// 2.0+
{  
}  

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

Авторизованный пользователь.

Список настраиваемых полей и их возможных типов.

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

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

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

При возникновении одной из следующих ситуаций клиенту возвращается статус 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 типов заданий, для которых
                                                   // поле доступно, если оно не доступно
                                                   // всем типам заданий
    "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": "[1, 2]",                               // массив id типов заданий,
                                                        // для которых поле доступно,
                                                        // если оно не доступно всем
                                                        // типам заданий
    "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                                    // видимость данного поля при отображении
                                                        // полной информации по заданию
}                                                       

Если поле не существует или логически удалено, клиенту возвращается статус 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": "[1, 2]",                               // массив id типов заданий, для которых
                                                        // поле доступно, если оно не доступно
                                                        // всем типам заданий
    "order": 10                                         // номер данного поля для отображения
                                                        // в списке настраиваемых полей
}                                                       

DELETE /rest/fields/:id

Главный администратор (role_id = 8), главный инспектор (role_id = 12).

Логическое удаление настраиваемого поля.

Если поле не существует или логически удалено, клиенту возвращается статус 404.

status = 200

// 2.0+
{  
}  

DELETE /rest/fields/:id/hard

Главный администратор (role_id = 8).

Служебный запрос для физического удаления настраиваемого поля.

Если поле не существует, клиенту возвращается статус 404.

status = 200

// 2.0+
{  
}  

/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 файла.

// 2.0+
{  
}  

status = 200

// 2.0+
{  
}  

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

В ответе выдается type_ids - список id-шников видов работ, к которым прикреплен текущий стикер. Если is_for_all=true, то стикер доступен всем видам работ, следовательно, type_ids будет содержать список id-шников всех видов работ. Если is_for_all=false, то type_ids будет содержать список id-шников видов работ, которые были явно прикреплены к стикеру запросом POST /types/:id/stickers/:stickerId

status = 200

// 2.0+
{                                                                           
    "id": 6,                                                                
    "title": "Показания приборов",                                          // название стикера
    "description": "Показания приборов после выполнения работ на объекте",  // описание стикера
    "is_for_all": false,                                                    // доступность стикера для
                                                                            // всех видов работ
    "type_ids": []                                                          // список id-шников видов работ,
                                                                            // к которым прикреплен
                                                                            // текущий стикер
}                                                                           

PUT /rest/stickers/:id

Главный администратор (role_id = 8), главный инспектор (role_id = 12).

Изменение стикера.

Если стикер не найден, 404.

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

// 2.0+
{                                                                        
    "title": "Показания приборов",                                       // название стикера
    "description": "Показания приборов до выполнения работ на объекте",  // описание стикера
    "is_for_all": true                                                   // доступность стикера для
                                                                         // всех видов работ
}                                                                        

status = 200

// 2.0+
{                                                                        
    "id": 6,                                                             
    "title": "Показания приборов",                                       // название стикера
    "description": "Показания приборов до выполнения работ на объекте",  // описание стикера
    "is_for_all": true,                                                  // доступность стикера для
                                                                         // всех видов работ
    "type_ids": [                                                        // список id-шников видов работ,
                                                                         // к которым прикреплен текущий стикер
        2,                                                               
        14,                                                              
        3,                                                               
        7,                                                               
        4                                                                
    ],                                                                   
}                                                                        

DELETE /rest/stickers/:id

Главный администратор (role_id = 8), главный инспектор (role_id = 12).

Логическое удаление стикера.

Если стикер не найден, 404. Стикер будет откреплен ото всех файлов, к которым он был прикреплен.

status = 200

// 2.0+
{  
}  

DELETE /rest/stickers/:id/hard

Главный администратор (role_id = 8), главный инспектор (role_id = 12).

Физическое удаление стикера.

Если стикер не найден, 404. Стикер будет откреплен ото всех файлов, к которым он был прикреплен.

status = 200

// 2.0+
{  
}  

/rest/schedules

GET /rest/schedules/list

Описание моделей и структур хранения данных

Расписания - schedules. У расписания есть пользователь-создатель. Все задания по этому расписанию создаются от имени этого пользователя.

Если расписание созданом администратором/инспектором организации, то то оно прикрепляется к его организации. Если расписание создано главным админстратором/инспектором, то организация может быть указана при создании (но может быть и опущена).

Если расписание прикреплено к организации, то все администраторы/инспекторы этой организации получают разрешение на его изменение.

Расписания могут быть действующими (включенными) или выключенными. Если расписание выключено, задания создаваться не будут.

У расписания могут быть моменты времени, в которые оно запускается в течение дня - times. Время хранится в формате timestamp (дата не важна, во время всех операций из нее извлекается только время). Моменты времени могут быть включены и выключены; при выключении момента времени задания в это время создаваться не будут.

У расписания есть моменты запуска - launches. Момент запуска - это дата + одно из времён запуска расписания. Эта дата и время хранится явным образом.

К расписанию прикрепляются задания-шаблоны. В момент запуска на их основе создаются реальные задания. Задания-шаблоны - это обычные задания, у которых проставлена колонка is_template=true. Параметры "стадия", "этап", "срок выполнения" таких заданий игнорируются. У расписания есть поле "срок выполнения"; если это поле заполнено, то на его основе реальному создаваемому заданию назначается срок выполнения. Если не заполнено, то срок выполнения назначается на основе вида работ.

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

Запрос /list

Любой авторизованный пользователь.

Запрос за списком расписаний с учётом фильтров и прав доступа:

API не фиксирован и может изменяться в дальнейшем!

Параметры

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

Если переданы from и till, то в каждое расписание в списке добавляется массив dates; это поле будет содержать все даты запуска соответствующего расписания между from и till (не включая till) в формате Unix Timestamp (с округлением до полуночи в меньшую сторону).

status = 200

// 2.0+
  {                                                             
    "page": 1,                                                  // текущая страница
    "total": 37,                                                // всего расписаний
    "limit": 25,                                                // количество на одной странице
    "items": [                                                  // список расписаний
        {                                                       
            "id": 1002,                                         
            "title": "Расписание на май 2018",                  // название расписания
            "worktime": 7200,                                   // дедлайн расписания
            "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                                  
                }                                               
            ],                                                  //
                                                                //
            "dates": [                                          // массив дат запусков расписания
                                                                // (при наличии from и till)
                1609448400,                                     
                1609534800                                      
            ]                                                   
        }                                                       
    ]                                                           
}                                                               

POST /rest/schedules

DONE! Главный администратор (role_id = 8), Главный инспектор (role_id = 12), Администратор организации (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": "Захаров Андрей Петрович"      
    },                                        
    "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

DONE! Главный администратор (role_id = 8), Главный инспектор (role_id = 12), Администратор организации (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": "Захаров Андрей Петрович"      
    },                                        
    "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

DONE! Главный администратор (role_id = 8), Администратор организации (role_id = 10, если входит в организацию расписания).

Удаление расписания.

GET /rest/schedules/stats

DONE!

Любой авторизованный пользователь.

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

Запрос принимает параметр collapse, от которого зависит вид ответа:

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

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

Возможные значения для параметра status:

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,                                 // признак включённого расписания
                    "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:

status = 200

2.0+
{                                                                   
    "items": [                                                      
        {                                                           
            "time": {                                               // time запуска
                "id": 115241,                                       
                "time": 1546311600,                                 
                "on": true                                          
            },                                                      
            "schedule": {                                           // ссылка на родительское расписание
                "id": 1002,                                         
                "title": "Расписание на май 2018",                  // название расписания
                "worktime": 7200,                                   // дедлайн расписания
                "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 = 10), Инспектор организации (role_id = 11)

Получение списка заданий по расписанию (созданных, запланированных, пропущенных и выключенных) за нужный период.

API не фиксирован и может изменяться в дальнейшем!

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

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

Возможные значения для параметра status:

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": "Захаров Андрей Петрович"        
                    },                                          
                    "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

DONE!

Любой авторизованный пользователь, у которого есть права на "show" хотя бы одного шаблона.

API не фиксирован и может изменяться в дальнейшем!

Получение расписания.

status = 200

{                                                                      
    "id": 1002,                                                        
    "title": "Расписание на май 2018",                                 // название расписания
    "worktime": 7200,                                                  // дедлайн расписания
    "on": true                                                         // включено расписание или нет
    "user": {                                                          // информация о пользователе, который создал расписание
        "id": 6,                                                       
        "fio": "Захаров Андрей Петрович"                               
    },                                                                 
    "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

Любой авторизованный пользователь, у которого есть права на "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

Любой авторизованный пользователь, у которого есть права на "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": "Сникерсов Марс Твиксович"           
            }                                               
        },                                                  
    ]                                                       
}                                                           

/rest/chats

GET /rest/chats/list

Авторизованный пользователь.

Получить список неудалённых чатов, доступных текущему пользователю. Главному администратору и главному инспектору отдаются все неудаленные чаты.

Сортировка осуществляется по полю id.

Параметры:

Все даты указываются в Timestamp, например, gtCreationDate=1440835402.

status = 200

// 2.0+
{                                         
    "items": [                            
        {                                 
            "id": 2,                      // id
            "creation_date": 1491905496,  // дата создания чата
            "created_by": {               // пользователь, создавший чат
                "id": 711,                
                "fio": "Иванов И.И."      
            }                             
            "update_date": 1491905471,    // дата изменения чата
            "unread_message_count": 5     // количество непрочитанных сообщений
        },                                
        ...                               // следующие элементы списка
    ],                                    
    "total": 999,                         // общее количество чатов
    "page": 1,                            // текущая страница
    "total": 25                           // максимальное количество элементов на странице
}                                         

GET /rest/chats/:id

Главный администратор (role_id = 8), главный инспектор (role_id = 12), участник чата, пользователь, имеющий доступ к заданию по capability (для чатов заданий).

Получить информацию по конкретному чату.

status = 200

// 2.0+
{                                 
    "id": 2,                      // id
    "creation_date": 1491905496,  // дата создания чата
    "created_by": {               // пользователь, создавший чат
        "id": 711,                
        "fio": "Иванов И.И."      
    }                             
    "update_date": 1491905471,    // дата изменения чата
    "unread_message_count": 5     // количество непрочитанных сообщений
}                                 

GET /rest/chats/:id/members

Главный администратор (role_id = 8), главный инспектор (role_id = 12), участник чата, пользователь, имеющий доступ к заданию по capability (для чатов заданий).

Получить список участников чата.

Сортировка осуществляется по полю fio.

Параметры:

Все даты указываются в Timestamp, например, ltAdditionDate=1440835402.

status = 200

// 2.0+
{                                              
    "items": [                                 
        {                                      
            "user": {                          // пользователь
                "id": 3,                       // id пользователя
                "fio": "Иванов Иван Иванович"  // ФИО пользователя
            },                                 
            "has_post_permission": true,       // имеет ли пользовать возможность отправлять сообщения в чат
            "addition_date": 1491905496,       // первая дата добавления пользователя в чат
        },                                     
        ...                                    // следующие элементы списка
    ],                                         
    "total": 999,                              // общее количество участников чата
    "page": 1,                                 // текущая страница
    "total": 25                                // максимальное количество элементов на странице
}                                              

GET /rest/chats/:id/users/:userId/history

Главный администратор (role_id = 8), главный инспектор (role_id = 12), участник чата, пользователь, имеющий доступ к заданию по capability (для чатов заданий).

Получить историю пользователя в чате.

Параметры:

status = 200

// 2.0+
{                                              
    "items": [                                 
        {                                      
            "added_by": {                      // пользователь, открывший членство
                "id": 3,                       // id
                "fio": "Иванов Иван Иванович"  // ФИО
            },                                 
            "closed_by": {                     // пользователь, закрывший членство
                "id": 3,                       // id
                "fio": "Иванов Иван Иванович"  // ФИО
            },                                 
            "from": 1491905496,                // дата открытия членства
            "till": 1491905543,                // дата закрытия членства
            "has_post_permission": true,       // имел ли пользователь возможность отправлять сообщения
                                               // в чат во время членства
            "is_active": true                  // был ли пользователь активен во время членства
        }                                      
        ...                                    // следующие элементы списка
    ],                                         
    "total": 999,                              // общее количество элементов истории
    "page": 1,                                 // текущая страница
    "total": 25                                // максимальное количество элементов на странице
}                                              

GET /rest/chats/:id/messages

Главный администратор (role_id = 8), главный инспектор (role_id = 12), участник чата, пользователь, имеющий доступ к заданию по capability (для чатов заданий).

Получить список всех сообщений чата.

Сортировка осуществляется по полю chat_message_number, что практически во всех случаях соответствует сортировке по полю date.

Параметры:

Все даты указываются в Timestamp, например, ltDate=1440835402.

status = 200

// 2.0+
{                                                                 
    "items": [                                                    
        {                                                         
            "id": 2,                                              // id
            "user_id": 3,                                         // id пользователя
            "fio": "Иванов Иван Иванович",                        // ФИО пользователя
            "uuid": "cncvdjsnv-vfnsjkln-vfnlvfd-vsdfnvfsdjklnv",  // уникальный строковый идентификатор
            "date": 1491905496,                                   // дата сообщения
            "comment": "messages",                                // сообщение
            "chat_message_number": 6                              // порядковый номер сообщения в чате
        },                                                        
        ...                                                       // следующие элементы списка
    ],                                                            
    "total": 999,                                                 // общее количество сообщений
    "page": 1,                                                    // текущая страница
    "total": 25                                                   // максимальное количество элементов на странице
}                                                                 

POST /rest/chats/:id/messages

Главный администратор (role_id = 8), главный инспектор (role_id = 12), участник чата, имеющий возможность отправлять сообщения, пользователь, имеющий доступ к заданию по capability (для чатов заданий).

Добавить сообщение в чат.

// 2.0+
{                                                        
    "date": 1491905496,                                  // дата сообщения, необязательное поле
    "comment": "messages",                               // сообщение
    "uuid": "cncvdjsnv-vfnsjkln-vfnlvfd-vsdfnvfsdjklnv"  // уникальный строковый идентификатор, необязательное поле
}                                                        

status = 200

// 2.0+
{                                                         
    "id": 2,                                              // id
    "user_id": 3,                                         // id пользователя
    "fio": "Иванов Иван Иванович",                        // ФИО пользователя
    "date": 1491905496,                                   // дата сообщения
    "comment": "messages",                                // сообщение
    "uuid": "cncvdjsnv-vfnsjkln-vfnlvfd-vsdfnvfsdjklnv",  // уникальный строковый идентификатор
    "chat_message_number": 6,                             // порядковый номер сообщения в чате
    "system_message_code": null                           // код системного сообщения
}                                                         

POST /rest/chats/:id/messages/:num/read

Главный администратор (role_id = 8), главный инспектор (role_id = 12), участник чата, пользователь, имеющий доступ к заданию по capability (для чатов заданий).

Обновить номер последнего прочитанного сообщения.

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

status = 200

// 2.0+
{  
}  

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

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

Параметры:

Все даты указываются в Timestamp, например, from=1440835402

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