REST API: описание запросов

Все запросы имеют необязательный параметр apiVersion (версия API). Пример: GET /rest/tasks/87554?apiVersion=2.0

Названия и типы полей в запросе и ответе могут отличаться в зависимости от значения параметра apiVersion. Возможные значения параметра apiVersion: 1.0, 1.1, 1.2, 1.3, 1.4, 2.0, 2.1 Значение версии API по умолчанию: apiVersion=1.0

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

Изменения вводились постепенно, и начиная с версии 1.0 до версии 2.0 было изменено:

В документации указаны названия и типы полей в запросах и ответах для актуальной apiVersion=2.0, если явно не указано иное.

В описании каждого запроса приведён список ролей, под которыми можно его выполнять. Если роли не указаны, запрос разрешён любому авторизованному пользователю.

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

Отсутствие описания ответа означает пустой json с http-кодом 200.

Обязательные поля в запросах помечены символом звездочка (*) в комментариях к ним.

/rest/auth

POST /rest/auth/by-login

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

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

// 2.0+
{                           
    "login": "login",       // логин
    "password": "password"  // пароль
}                           

http 200

// 2.0+
{                                                
    "id": 6,                                     // id пользователя
    "login": "login",                            // логин пользователя
    "fio": "ФИО",                                // имя пользователя
    "type": {                                    // тип
        "id": 1,                                 // id типа
        "title": "Пользователи"                  // название
    },                                           
    "ldap_authentication": false,                // аутентификация через LDAP
    "avatar_update_date": 1605793362,            // дата обновления аватара
    "tags": [                                    // метки пользователя
        {                                        
            "id": 1                              // id метки
        },                                       
        ...                                      // следующие элементы списка
    ],                                           
    "organization_id": null,                     // id организации
    "workgroup_ids": [                           
        132,                                     
        232                                      
    ],                                           // массив id проектов, доступных пользователю
    "role_id": 8,                                // id роли
    "info": {                                    
        "email": "t@t.ru",                       // адрес электронной почты
        "address": "Казань",                     // адрес
        "passport": "9205 999999",               // паспортные данные
        "phone": "+7 999 888 7766"               // телефон
    },                                           
    "map_extent": [                              // координаты положения карты: [min lon, min lat, max lon, max lat]
        46.0927078887718,                        
        53.9919087034184,                        
        55.2997131017069,                        
        56.6837870890742                         
    ],                                           
    "tracking": false,                           // включен ли трекинг
    "glonass_id": null,                          // ГЛОНАСС-id для трекинга
    "message_channel_id": 99,                    // канал входящих сообщений
    "token": "87e3d7ae036b752cc90bd093bbfa1634"  // token
}                                                

DELETE /rest/auth/tokens/:token

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

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

POST /rest/auth/pushes/subscribe

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

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

POST /rest/auth/pushes/unsubscribe

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

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

/rest/tasks

GET /rest/tasks/cache

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

// ws://localhost:9000/tasks/cache

Пример сообщения о создании задания

// 2.0+
{                                                                                 
    "datetime": 1626142349                                                        // timestamp момента создания задания
    "event_caller": 6                                                             // id создателя
    "issues": {                                                                   
        "insert": [                                                               
            {                                                                     
                "id": 786847,                                                     // id задания
                "title": "Ямы на дорогах",                                        // заголовок
                "user_id": 363,                                                   // id создателя задания
                "user_fio": "Иванов Иван",                                        // ФИО создателя задания
                "text": "Ямы на дорогах в центре города на ул.Профсоюзная",       // описание
                "organization_id": 1,                                             // id организации создателя (для создателей без организации это значение указывается явно при создании задания)
                "organization_name": "Население",                                 // название назначенной организации
                "organization_logo": "logo_3.png",                                // логотип организации
                "workgroup_id": 188,                                              // id проекта
                "date": 1543312469,                                               // дата создания задания
                "deadline": 1541581662,                                           // дедлайн
                "expired_date": 1541581662                                        // момент, когда задание было просрочено
                "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
                "service_object_layer_id": 1493,                                  // id слоя объекта обслуживания
                "service_object_id": 7,                                           // id объекта обслуживания
                "service_object_layer_title": "Название слоя",                    // название слоя
                "service_object_title": "Наименование объекта",                   // наименование объекта
                "fields": {                                                       // json-объект, хранящий значения настраиваемых полей в формате:
                    "Dop_pole_dlya_testov": {                                     // {"транслит русского названия поля": {
                        "field_id": 19,                                           //     "field_id": <ID>,
                        "value": 12345                                            //     "value": <значение>
                    }                                                             // }}
                },                                                                
                "parent": {                                                       // родительское задание
                    "id": 2,                                                      
                    "title": "Ямы",                                               
                    "organization_id": 3,                                         
                    "organization_name": "Контроль дорог",                        
                    "organization_logo": null,                                    
                    "stage": 1,                                                   
                    "type_id": 1,                                                 
                    "type_name": "Аварии",                                        
                    "type_icon": "2.png",                                         
                    "priority_id": 1,                                             
                    "priority_name": "Плановые",                                  
                    "status_id": 2,                                               
                    "status_name": "назначено",                                   
                    "assigned_user_id": 95,                                       
                    "assigned_user_fio": "Петров Иван",                           
                    "assigned_organization_id": 101,                              
                    "assigned_organization_name": "Ремонт дорог",                 
                    "date": 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 задания
                    }                                                             
                ]                                                                 
            }                                                                     
        ]                                                                         
    }                                                                             
}                                                                                 

Формат сообщения об изменении задания такой же, но вместо ключа insert в JSON используется ключ update.

Пример сообщения о создании комментария

// 2.0+
{                                                                                      
    "datetime": 1626142349                                                             // timestamp момента создания комментария
    "event_caller": 6                                                                  // id создателя
    "issues": {                                                                        
        "commentInsert": [                                                             
            {                                                                          
                "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,                                             // номер сообщения в чате задания
                "chat_id": 123,                                                        // системный номер канала сообщений
                "system_message_code": null                                            // код системного сообщения
            }                                                                          
        ]                                                                              
    }                                                                                  
}                                                                                      

Пример сообщения о создании пользователя

// 2.0+
{                                                                    
    "datetime": 1626142349                                           // timestamp момента создания пользователя
    "event_caller": 6                                                // id создателя
    "users": {                                                       
        "insert": [                                                  
            {                                                        
                "id": 6,                                             // id пользователя
                "login": "ivanov",                                   // логин
                "fio": "Иванов Иван Иванович",                       // ФИО
                "type": {                                            // тип
                    "id": 1,                                         // id типа
                    "title": "Пользователи"                          // название
                },                                                   
                "ldap_authentication": false,                        // аутентификация через LDAP
                "blocked": false,                                    // признак заблокированного пользователя
                "avatar_update_date": 1605793362,                    // дата обновления аватара
                "tags": [                                            // метки пользователя
                    {                                                
                        "id": 1                                      // id метки
                    },                                               
                    ...                                              // следующие элементы списка
                ],                                                   
                "organization_id": 1,                                // id организации
                "workgroup_ids": [                                   // массив id проектов, доступных пользователю
                    132,                                             
                    232                                              
                ],                                                   
                "role_id": 8,                                        // id роли
                "email": "test@gmail.com",                           // адрес электронной почты
                "address": "г.Казань, ул.Назарбаева, д.25, кв.125",  // адрес
                "passport": "9205 999999",                           // паспортные данные
                "phone": "+7 999 888 7766",                          // телефон
                "tracking": true,                                    // включен ли трекинг
                "glonass_id": null,                                  // ГЛОНАСС-id для трекинга
                "message_channel_id": 99                             // канал входящих сообщений
            }                                                        
        ]                                                            
    }                                                                
}                                                                    

Формат сообщения об изменении пользователя такой же, но вместо ключа insert в JSON используется ключ update.

Пример сообщения о создании организации

// 2.0+
{                                                                                      
    "datetime": 1626142349                                                             // timestamp момента создания организации
    "event_caller": 6                                                                  // id создателя
    "organizations": {                                                                 
        "insert": [                                                                    
            {                                                                          
                "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                                                       // идентификатор канала уведомлений
            }                                                                          
        ]                                                                              
    }                                                                                  
}                                                                                      

Формат сообщения об изменении пользователя такой же, но вместо ключа insert в JSON используется ключ update.

GET /rest/tasks/stats

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

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

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

/tasks/stats?date_from=1445845360&date_till=1448523760`

http 200

// 2.0+
{                                           
    "statuses": [                           // по этапам
        {                                   
            "status_id": 1,                 
            "count": 3                      
        },                                  
        {                                   
            "status_id": 2,                 
            "count": 2                      
        },                                  
        {                                   
            "status_id": 3,                 
            "count": 0                      
        }                                   
    ],                                      
    "priorities": [                         // по приоритетам
        {                                   
            "priority_id": 1,               
            "statuses": [                   
                {                           
                    "status_id": 1,         
                    "count": 1              
                },                          
                {                           
                    "status_id": 2,         
                    "count": 0              
                },                          
                {                           
                    "status_id": 3,         
                    "count": 2              
                }                           
            ]                               
        }                                   
    ],                                      
    "types": [                              // по видам работ
        {                                   
            "type_id": 1,                   
            "statuses": [                   
                {                           
                    "status_id": 1,         
                    "count": 2              
                },                          
                {                           
                    "status_id": 2,         
                    "count": 2              
                },                          
                {                           
                    "status_id": 3,         
                    "count": 2              
                }                           
            ]                               
        }                                   
    ],                                      
    "organizations": [                      // по организациям-создателям
        {                                   
            "organization_id": 1,           
            "statuses": [                   
                {                           
                    "status_id": 1,         
                    "count": 0              
                },                          
                {                           
                    "status_id": 2,         
                    "count": 2              
                },                          
                {                           
                    "status_id": 3,         
                    "count": 2              
                }                           
            ]                               
        }                                   
    ],                                      
    "assignedOrganizations": [              // по назначенным организациям
        {                                   
            "assigned_organization_id": 1,  
            "statuses": [                   
                {                           
                    "status_id": 1,         
                    "count": 2              
                },                          
                {                           
                    "status_id": 2,         
                    "count": 3              
                },                          
                {                           
                    "status_id": 3,         
                    "count": 4              
                }                           
            ]                               
        }                                   
    ]                                       
}                                           

GET /rest/tasks/points

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

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

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

/tasks/points
/tasks/points?limit=10&page=1&withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&priority_id=1,2
/tasks/points?limit=10&page=1&gtUpdateDate=1440835402&ltUpdateDate=1443513802&gtCreateDate=1438157002&ltDate=1443513802&expired=false
/tasks/points?limit=10&page=1&assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&stage=1
/tasks/points?limit=10&page=1&search=тест&fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}]

http 200

// 2.0+
{                                 
    "items": [                    
        {                         
            "id": 789238,         // id задания
            "title": "тест",      // текст задания
            "lon": 49.1425763,    // координаты точки - lat
            "lat": 55.774754,     // координаты точки - lon
            "assigned_status": 1  // этап: 1 - новый, 2 - назначено, 3 - обратная связь, 4 - выполнено
        },                        
        ...                       // следующие элементы списка
    ]                             
}                                 

GET /rest/tasks/geometry

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

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

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

/tasks/geometry?limit=10&page=1&withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&priority_id=1,2
/tasks/geometry?limit=10&page=1&gtUpdateDate=1440835402&ltUpdateDate=1443513802&gtCreateDate=1438157002&ltDate=1443513802&expired=false
/tasks/geometry?limit=10&page=1&assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&stage=1
/tasks/geometry?limit=10&page=1&search=тест&fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}]

http 200

// 2.0+
{                                                                      
    "items": [                                                         
        {                                                              
            "id": 789238,                                              // id задания
            "title": "тест",                                           // текст задания
            "lon": 49.1425763,                                         // координаты точки - lat
            "lat": 55.774754,                                          // координаты точки - lon
            "assigned_status": 1,                                      // этап: 1 - новый, 2 - назначено, 3 - обратная связь, 4 - выполнено
            "fields": {                                                // json-объект, хранящий значения настраиваемых полей тпа "геометрия" в формате:
                "Geometrija": {                                        // {"транслит русского названия поля": {
                    "field_id": 8,                                     //      "field_id": <ID>,
                    "value": {                                         //      "value": <значение>
                        "coordinates": [                               // }}
                            [                                          
                                37.54096936955436,                     
                                55.9499035987994                       
                            ],                                         
                            [                                          
                                37.558478490656356,                    
                                55.95202252412895                      
                            ],                                         
                            [                                          
                                37.58148066935899,                     
                                55.95914896382962                      
                            ]                                          
                        ],                                             
                        "distance": 6.484990692549826,                 
                        "type": "LineString",                          
                        "description": "Маршрут до места назначения",  
                        "name": "Маршрут",                             
                        "pointsCount": 3                               
                    }                                                  
                }                                                      
            }                                                          
        },                                                             
        ...                                                            // следующие элементы списка
    ]                                                                  
}                                                                      

GET /rest/tasks/distribution

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

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

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

/tasks/distribution?withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&priority_id=1,2
/tasks/distribution?gtUpdateDate=1440835402&ltUpdateDate=1443513802&gtCreateDate=1438157002&ltDate=1443513802&expired=false
/tasks/distribution?assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&stage=1
/tasks/distribution?search=тест&fields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"done"},{"name":"Telefon_int_88432000555_","op":"NOT NULL"}]

http 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

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

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

http 200

// 2.0+
{                                       
    "items": [                          
        {                               
            "id": 2,                    // id действия
            "label": "Удалить задание"  // название действия
            "name": "delete",           // кодовое название действия
            "default": false            // разрешеное ли действие по умолчанию
        },                              
        ...                             // следующие элементы списка действий
    ]                                   
}                                       

GET /rest/tasks/allowed

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

http 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

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

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

http 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

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

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

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

/tasks?withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&priority_id=1,2
/tasks?gtUpdateDate=1440835402&ltUpdateDate=1443513802&gtCreateDate=1438157002&ltDate=1443513802&expired=false
/tasks?assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&stage=1
/tasks?search=тест&fields=[{"name":"gorod","op":"EQ","value":"Казань"},{"name":"Telefon","op":"NOT NULL"}]

http 200

// 2.0+
{                                                                             
    "items": [                                                                
        {                                                                     
            "id": 786847,                                                     // id задания
            "title": "Ямы на дорогах",                                        // заголовок
            "user_id": 363,                                                   // id создателя задания
            "user_fio": "Иванов Иван",                                        // ФИО создателя задания
            "text": "Ямы на дорогах в центре города на ул.Профсоюзная",       // описание
            "organization_id": 1,                                             // id организации создателя (для создателей без организации это значение указывается явно при создании задания)
            "organization_name": "Население",                                 // название назначенной организации
            "organization_logo": "logo_3.png",                                // логотип организации
            "workgroup_id": 188,                                              // id проекта
            "date": 1543312469,                                               // дата создания задания
            "deadline": 1541581662,                                           // дедлайн
            "expired_date": 1541581662                                        // момент, когда задание было просрочено
            "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
            "unread_message_count": 3,                                        // количество непрочитанных комментариев
            "service_object_layer_id": 1493,                                  // id слоя объекта обслуживания
            "service_object_id": 7,                                           // id объекта обслуживания
            "service_object_layer_title": "Название слоя",                    // название слоя
            "service_object_title": "Наименование объекта",                   // наименование объекта
            "fields": {                                                       // json-объект, хранящий значения настраиваемых полей в формате:
                "Dop_pole_dlya_testov": {                                     // {"транслит русского названия поля": {
                    "field_id": 19,                                           //     "field_id": <ID>,
                    "value": 12345                                            //     "value": <значение>
                }                                                             // }}
            },                                                                
            "parent": {                                                       // родительское задание
                "id": 2,                                                      
                "title": "Ямы",                                               
                "organization_id": 3,                                         
                "organization_name": "Контроль дорог",                        
                "organization_logo": null,                                    
                "stage": 1,                                                   
                "type_id": 1,                                                 
                "type_name": "Аварии",                                        
                "type_icon": "2.png",                                         
                "priority_id": 1,                                             
                "priority_name": "Плановые",                                  
                "status_id": 2,                                               
                "status_name": "назначено",                                   
                "assigned_user_id": 95,                                       
                "assigned_user_fio": "Петров Иван",                           
                "assigned_organization_id": 101,                              
                "assigned_organization_name": "Ремонт дорог",                 
                "date": 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+ организация исполнителя при её наличии;
                                                                      // также можно указать только организацию
                                                                      // без указания конкретного исполнителя;
                                                                      // организации должен быть доступен вид работ задания
                                                                      //
    "workgroup_id": 188,                                              // id проекта
    "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 объекта обслуживания
    "service_object_layer_id": 5                                      // 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"                          // версия приложения
            }                                                         
        },                                                            
        ...                                                           // следующие элементы списка файлов
    ]                                                                 
}                                                                     

http 200

// 2.0
{                                                                     
    "id": 789249,                                                     // id созданного задания
    "user_id": 6,                                                     // id создателя задания
    "user_fio": "Главный Администратор",                              // ФИО создателя
    "title": "Яма на дороге",                                         // заголовок
    "text": "Яма на дороге, перекресток ул Пушкина/Университетская",  // описание
    "organization_id": 3,                                             // id организации создателя (для создателей без организации
                                                                      // это значение указывается явно при создании задания)
    "organization_name": "Контроль дорог",                            // название организации создателя задания
    "organization_logo": null,                                        // логотип организации
    "workgroup_id": 188,                                              // id проекта
    "date": 1542969580,                                               // дата создания задания
    "deadline": 1542969580,                                           // дедлайн
    "expired_date": 1541581662                                        // момент, когда задание было просрочено
    "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,                                                 // архивное задание
    "system_data": "версия: 1.1.1",                                   
    "update_date": 1542969580,                                        // дата обновления задания
    "workgroup_id": 188,                                              // id проекта
    "assigned_organization_id": 101,                                  // id назначенной организации
    "assigned_organization_name": "Ремонт дорог",                     // название назначенной организации
    "assigned_user_id": 95,                                           // id назначенного пользователя
    "assigned_user_fio": "Петров Иван",                               // ФИО назначенного пользователя
    "is_template": false,                                             // шаблонное задание
    "lat": 46.67,                                                     // координаты точки - lat
    "lon": 55.56,                                                     // координаты точки - lon
    "unread_message_count": 3,                                        // количество непрочитанных комментариев
    "service_object_layer_id": 1493,                                  // id слоя объекта обслуживания
    "service_object_id": 7,                                           // id объекта обслуживания
    "service_object_layer_title": "Название слоя",                    // название слоя
    "service_object_title": "Наименование объекта",                   // наименование объекта
    "fields": {                                                       // json-объект, хранящий значения настраиваемых полей в формате:
        "Dop_pole_dlya_testov": {                                     // {"транслит русского названия поля": {
            "field_id": 19,                                           //    "field_id": <ID>,
            "value": 12345                                            //    "value": <значение>
        }                                                             // }}
    },                                                                
    "parent": {                                                       // родительское задание
        "id": 2,                                                      
        "title": "Ямы",                                               
        "organization_id": 3,                                         
        "organization_name": "Контроль дорог",                        
        "organization_logo": null,                                    
        "stage": 1,                                                   
        "type_id": 1,                                                 
        "type_name": "Аварии",                                        
        "type_icon": "2.png",                                         
        "priority_id": 1,                                             
        "priority_name": "Плановые",                                  
        "status_id": 2,                                               
        "status_name": "назначено",                                   
        "assigned_user_id": 95,                                       
        "assigned_user_fio": "Петров Иван",                           
        "assigned_organization_id": 101,                              
        "assigned_organization_name": "Ремонт дорог",                 
        "date": 1542949580                                            
    },                                                                
    "attachments": [                                                  // прикрепленные файлы
        {                                                             
            "id": 54666,                                              // id файла
            ...                                                       // следующие элементы
        }                                                             
    ],                                                                
}                                                                     

GET /rest/tasks/:id

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

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

http 200

// 2.0
{                                                                         
    "task": {                                                             
        "id": 789249,                                                     // id созданного задания
        "user_id": 6,                                                     // id создателя задания
        "user_fio": "Главный Администратор",                              // ФИО создателя
        "title": "Яма на дороге",                                         // заголовок
        "text": "Яма на дороге, перекресток ул Пушкина/Университетская",  // описание
        "organization_id": 3,                                             // id организации создателя (для создателей без организации
                                                                          // это значение указывается явно при создании задания)
        "organization_name": "Контроль дорог",                            // название организации создателя
        "organization_logo": null,                                        // логотип организации
        "workgroup_id": 188,                                              // id проекта
        "date": 1542969580,                                               // дата создания задания
        "deadline": 1542969580,                                           // дедлайн
        "expired_date": 1541581662                                        // момент, когда задание было просрочено
        "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
        "is_template": false,                                             // шаблонное задание
        "date": 1542969580,                                               // дата создания задания
        "unread_message_count": 3,                                        // количество непрочитанных комментариев
        "service_object_layer_id": 1493,                                  // id слоя объекта обслуживания
        "service_object_id": 7,                                           // id объекта обслуживания
        "service_object_layer_title": "Название слоя",                    // название слоя
        "service_object_title": "Наименование объекта",                   // наименование объекта
        "fields": {                                                       // json-объект, хранящий значения настраиваемых полей в формате:
            "Dop_pole_dlya_testov": {                                     // {"транслит русского названия поля": {
                "field_id": 19,                                           //    "field_id": <ID>,
                "value": 12345                                            //    "value": <значение>
            }                                                             // }}
        },                                                                
        "parent": {                                                       // родительское задание
            "id": 2,                                                      
            "title": "Ямы",                                               
            "organization_id": 3,                                         
            "organization_name": "Контроль дорог",                        
            "organization_logo": null,                                    
            "stage": 1,                                                   
            "type_id": 1,                                                 
            "type_name": "Аварии",                                        
            "type_icon": "2.png",                                         
            "priority_id": 1,                                             
            "priority_name": "Плановые",                                  
            "status_id": 2,                                               
            "status_name": "назначено",                                   
            "assigned_user_id": 95,                                       
            "assigned_user_fio": "Петров Иван",                           
            "assigned_organization_id": 101,                              
            "assigned_organization_name": "Ремонт дорог",                 
            "date": 1542949580                                            
        },                                                                
        "attachments": [                                                  // прикрепленные файлы
            {                                                             
                "id": 54666,                                              // id файла
                ...                                                       // следующие элементы
            }                                                             
        ],                                                                
    },                                                                    
    "configuration": {}                                                   
}                                                                         

PATCH /rest/tasks/:id

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

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

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

Если массив "attachments" содержит файл с "main_photo":true, информацию по номеру главного фото берем из него. Независимо от того, было ли передано поле "photo_main" в основном JSON-объекте, оно будет проигнорировано. Если массив "attachments" не будет передан, или в нем не будет информации по номеру главного фото, информацию по номеру главного фото берем из поля "photo_main" в основном JSON-объекте. Если поле "photo_main" в основном JSON-объекте тоже не было передано, оставляем номер главного фото без изменений.

В массив "attachments" закладывается возможность прикрепления стикеров к файлам при изменении задания (поле "sticker_id"). При прикреплении стикеров производим проверку доступности указанных стикеров виду работ. При проверке учитываем свойство стикеров "is_for_all" (доступно всем видам работ). Если хотя бы один из указанных стикеров не соответствуют виду работ, выдаем 403. При передаче "sticker_id": null полагаем, что к файлу не прикреплен никакой стикер. Если поле "sticker_id" не было передано, полагаем, что к файлу не прикреплен никакой стикер.

При передаче поля "fields" происходит частичное изменение настраиваемых полей:

Для открепления всех настраиваемых полей необходимо передать null.

// 2.0+
{                                                                     
    "title": "Яма на дороге",                                         // заголовок
    "text": "Яма на дороге, перекресток ул Пушкина/Университетская",  // описание
    "status_id": 1,                                                   // id этапа
    "assigned_organization_id": 3,                                    // id назначенной организации
    "assigned_user_id": 613,                                          // id назначенной пользователя
    "type_id": 1,                                                     // id вида работ
    "stage": 1,                                                       // стадия задания: 1 - в работе, 2 - завершено
    "priority_id": 1,                                                 // id приоритета
    "parent_id": 2,                                                   // id родительского задания
    "deadline": 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                                            // информация о приложении и платформе
        },                                                            
        ...                                                           // следующие элементы списка файлов
    ]                                                                 
}                                                                     

http 200

// 2.0
{                                                                     
    "id": 789249,                                                     // id созданного задания
    "user_id": 6,                                                     // id создателя задания
    "user_fio": "Главный Администратор",                              // ФИО создателя
    "title": "Яма на дороге",                                         // заголовок
    "text": "Яма на дороге, перекресток ул Пушкина/Университетская",  // описание
    "organization_id": 3,                                             // id организации создателя
    "organization_name": "Контроль дорог",                            // название организации создателя
    "organization_logo": null,                                        // логотип организации
    "workgroup_id": 188,                                              // id проекта
    "date": 1542969580,                                               // дата создания задания
    "deadline": 1542969580,                                           // дедлайн
    "expired_date": 1541581662                                        // момент, когда задание было просрочено
    "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": "Петров Иван",                               // ФИО назначенного пользователя
    "is_template": false,                                             // шаблонное задание
    "lat": 46.67,                                                     // координаты точки - lat
    "lon": 55.56,                                                     // координаты точки - lon
    "unread_message_count": 3,                                        // количество непрочитанных комментариев
    "service_object_layer_id": 1493,                                  // id слоя объекта обслуживания
    "service_object_id": 7,                                           // id объекта обслуживания
    "service_object_layer_title": "Название слоя",                    // название слоя
    "service_object_title": "Наименование объекта",                   // наименование объекта
    "fields": {                                                       // json-объект, хранящий значения настраиваемых полей в формате:
        "Dop_pole_dlya_testov": {                                     // {"транслит русского названия поля": {
            "field_id": 19,                                           //    "field_id": <ID>,
            "value": 12345                                            //    "value": <значение>
        }                                                             // }}
    },                                                                
    "parent": {                                                       // родительское задание
        "id": 2,                                                      
        "title": "Ямы",                                               
        "organization_id": 3,                                         
        "organization_name": "Контроль дорог",                        
        "organization_logo": null,                                    
        "stage": 1,                                                   
        "type_id": 1,                                                 
        "type_name": "Аварии",                                        
        "type_icon": "2.png",                                         
        "priority_id": 1,                                             
        "priority_name": "Плановые",                                  
        "status_id": 2,                                               
        "status_name": "назначено",                                   
        "assigned_user_id": 95,                                       
        "assigned_user_fio": "Петров Иван",                           
        "assigned_organization_id": 101,                              
        "assigned_organization_name": "Ремонт дорог",                 
        "date": 1542949580                                            
    },                                                                
    "attachments": [                                                  // прикрепленные файлы
        {                                                             
            "id": 54666,                                              // id файла
            ...                                                       // следующие элементы
        }                                                             
    ],                                                                
}                                                                     

DELETE /rest/tasks/:id

Удаление задания.

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

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

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

/tasks/123/can/show,delete

http 200

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

GET /rest/tasks/:id/track

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

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

/tasks/123/track?page=2&limit=5

http 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": "Все отлично"  
}                             

http 200

// 2.0+
{                              
    "rating": 5,               // Оценка, Int от 1 до 5
    "comment": "Все отлично",  
    "datetime": 1234567890,    // время проставления оценки, Timestamp
    "last_update": 1234567890  // время последнего изменения, Timestamp
    "author": {                // пользователь, который поставил оценку
        "id": 6,               
        "fio": "Иванов Петр"   
    }                          
}                              

http 400

// 2.0+
{                                                      
    "error_description": "rating: Обязательное поле."  
}                                                      

http 403

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

http 403

// 2.0+
{                                                       
    "error_description": "Оценка уже была поставлена."  
}                                                       

GET /rest/tasks/:id/rating

Клиент-создатель задания, главный администратор, главный инспектор, администратор организации, инспектор организации.

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

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

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

http 200

// 2.0+
{                              
    "rating": 5,               // Оценка, Int от 1 до 5
    "comment": "Все отлично",  
    "datetime": 1234567890,    // время проставления оценки, Timestamp
    "last_update": 1234567890  // время последнего изменения, Timestamp
    "author": {                // пользователь, который поставил оценку
        "id": 6,               
        "fio": "Иванов Петр"   
    }                          
}                              

http 403

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

http 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+
{  // Не вызывает изменений в БД
}  

http 200

// 2.0+
{                              
    "rating": 5,               // Оценка, Int от 1 до 5
    "comment": "Все отлично",  
    "datetime": 1234567890,    // время проставления оценки, Timestamp
    "last_update": 1543312469  // время последнего изменения, Timestamp
    "author": {                // пользователь, который поставил оценку
        "id": 6,               
        "fio": "Иванов Петр"   
    }                          
}                              

http 200

// 2.0+
{                                      
    "rating": 4,                       // Оценка, Int от 1 до 5
    "comment": "Не уложились в срок",  
    "datetime": 1234567890,            // время проставления оценки, Timestamp
    "last_update": 1543312469          // время последнего изменения, Timestamp
    "author": {                        // пользователь, который поставил оценку
        "id": 6,                       
        "fio": "Иванов Петр"           
    }                                  
}                                      

http 400

// 2.0+
{                                                      
    "error_description": "rating: Обязательное поле."  
}                                                      

http 403

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

http 404

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

DELETE /rest/tasks/:id/rating

Клиент-создатель задания.

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

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

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

http 403

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

http 404

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

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

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

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

http 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,                                             // номер сообщения в чате задания
            "chat_id": 123,                                                        // системный номер канала сообщений
            "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,                                            // номер сообщения в чате задания
            "chat_id": 123,                                                        // системный номер канала сообщений
            "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,                                            // номер сообщения в чате задания
            "chat_id": 123,                                                        // системный номер канала сообщений
            "system_message_code": null                                            // код системного сообщения
        }                                                                          
    ]                                                                              
}                                                                                  

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

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

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

http 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,                                             // номер сообщения в чате задания
            "chat_id": 123,                                                        // системный номер канала сообщений
            "system_message_code": null                                            // код системного сообщения
        },                                                                         
        {                                                                          
            "id": 50028,                                                           //id комментария
            "uuid": "b95268a0-41d8-4c91-b758-aa822782c181",                        
            "date": 1533289352,                                                    //дата создания комментария
            "update_text": "Вид работы изменен с \"Ямы\" на \"Аварии\"",           //текст обновления (для комментария об обновлении задания)
            "comment": "",                                                         // текст комментария
            "type": 2,                                                             // тип комментария: 1 - обычный, 2 - системный
            "diff": null,                                                          // информация по внесенным в задание изменениям
            "parent": null,                                                        // родительский комментарий
            "fio": "Администратор",                                                // ФИО пользователя, который сделал изменение
            "user_id": 6,                                                          // id пользователя, который сделал изменение
            "task_id": 60530,                                                      // id задания
            "chat_message_number": 1,                                              // номер сообщения в чате задания
            "chat_id": 123,                                                        // системный номер канала сообщений
            "system_message_code": null                                            // код системного сообщения
        },                                                                         
        {                                                                          
            "id": 50026,                                                           // id комментария
            "uuid": "df11d7d7-1e36-4e2a-8343-dbd5b7e94058",                        
            "date": 1533289350,                                                    // дата создания комментария
            "update_text": "Были добавлены новые файлы. Файлы были изменены.",     //текст обновления (для комментария об обновлении задания)
            "comment": "",                                                         // текст комментария
            "type": 2,                                                             // тип комментария: 1 - обычный, 2 - системный
            "diff": null,                                                          // информация по внесенным в задание изменениям
            "parent": null,                                                        // родительский комментарий
            "fio": "Администратор",                                                // ФИО пользователя, который сделал изменение
            "user_id": 6,                                                          // id пользователя, который сделал изменение
            "task_id": 60529,                                                      // id задания
            "chat_message_number": 98,                                             // номер сообщения в чате задания
            "chat_id": 123,                                                        // системный номер канала сообщений
            "system_message_code": null                                            // код системного сообщения
        }                                                                          
    ],                                                                             
    "total": 3,                                                                    // общее количество комментариев
    "page": 1,                                                                     // текущая страница
    "limit": 25                                                                    // максимальное количество элементов на странице
}                                                                                  

POST /rest/tasks/:id/comments

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

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

http 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,  // номер сообщения в чате задания
    "chat_id": 123,              // системный номер канала сообщений
    "system_message_code": null  // код системного сообщения
}                                

POST /rest/tasks/:id/comments/:referenceId

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

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

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

http 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,                     // номер сообщения в чате задания
    "chat_id": 123,                                 // системный номер канала сообщений
    "system_message_code": null                     // код системного сообщения
}                                                   

PUT /rest/tasks/:id/stickers

Прикрепление стикеров к файлам задания. При прикреплении производится проверка доступности указанных стикеров виду работ. При проверке учитывается свойство стикеров is_for_all (доступно всем видам работ). Если хотя бы один из указанных стикеров не соответствуют виду работ, будет выдана ошибка 403. Если пара {file_id, sticker_id} не передана, полагаем, что к файлу никакой стикер не прикрепляется.

// 2.0+
{                             
    "files": [                
        {                     
            "file_id": 123,   
            "sticker_id": 12  
        },                    
        {                     
            "file_id": 124,   
            "sticker_id": 14  
        }                     
    ]                         
}                             

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/rest/configuration

GET /rest/configuration/tree-nodes

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

Отдаёт метаинформацию обо всем дереве настроек.

Настройки хранятся в базе в виде дерева, в котором одни из них вложены в другие. Промежуточные настройки являются "папками", а терминальные настройки (листья) - это, собственно, сами настройки, в которые ещё могут быть вложены их возможные значения, различные для разных пользователей и/или ролей, организаций, состояний заданий. Формат представления этих сущностей в JSON разный.

Каждая из настроек помимо id имеет поля name и label. Первое из них используется как имя настройки при вызове /props. Рекомендуется использовать в нём только латинские буквы, цифры, знаки - и _. Второе поле используется как имя настройки, отображаемое в интерфейсе.

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

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

Терминальная настройка имеет тип данных type и четыре поля для значения по умолчанию, из которых заполненным может быть только одно (какое именно - зависит от типа данных): default_bool_value, default_double_value, default_int_value, default_string_value.

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

Все эти поля необязательны.

При вычислении значения настройки сначала определяется список допустимых возможных значений в соответствии с описанием полей user, role, organization, state_rule выше (при их отсутствии возможное значение всегда допустимо).

Из допустимых возможных значений выбирается первое из них в порядке возрастания order_index. Из него в зависимости от типа настройки выбирается одно из полей bool_value, double_value, int_value string_value. Если допустимых значений нет, то берётся значение по умолчанию.

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

// 2.0+
{                                              
    "id": 1,                                   // * ID настройки
    "name": "intermediate_node",               // * название для выдачи в JSON в /configuration/props
    "label": "Некая промежуточная настройка",  // * имя настройки для отображения в интерфейсе
    "is_terminal": false,                      // * false для промежуточной настройки
    "is_system": true/false,                   // * признак системной настройки
    "array_index": 0,                          // * задаёт индекс в массиве, если настройка входит в массив
                                               //
    "children": [...]                          // Массив дочерних настроек.
                                               // Может содержать оба типа настроек - и промежуточные,
                                               // и терминальные.
}                                              

Терминальная настройка

// 2.0+
{                                             
    "id": 2,                                  // * ID настройки
    "name": "terminal_node",                  // * название для выдачи в JSON в /configuration/props
    "label": "Некая терминальная настройка",  // * имя настройки для отображения в интерфейсе
    "is_terminal": true,                      // * true для терминальной настройки
    "is_system": true/false,                  // * признак системной настройки
                                              //
    "type": "INTEGER",                        // * тип данных терминальной настройки, один из
                                              //   {BOOLEAN, INTEGER, DOUBLE, STRING}
                                              //
    "default_bool_value": null,               // значение по умолчанию будет
    "default_double_value": null,             // находиться в одном из четырёх полей
    "default_int_value": 1,                   //
    "default_string_value": null,             //
                                              //
    "possible_values": [...]                  // Массив возможных значений настройки
}                                             

Возможное значение настройки

// 2.0+
{                                                
    "id": 1,                                     // * ID возможного значения
    "order_index": 0,                            // * задаёт порядок этого возможного значения среди прочих
                                                 //
    "bool_value": null,                          // в зависимости от типа настройки, её значение
    "double_value": null,                        // будет содержаться в одном из этих полей
    "int_value": 2,                              //
    "string_value": null,                        //
                                                 //
    "access_rule": {                             // правило срабатывания
        "role": {                                // роль пользователя
            "id": 7,                             
            "name": "Пользователь ведомства"     
        },                                       
        "organization": {                        // организация пользователя
            "id": 188,                           
            "name": "Информационные технологии"  
        },                                       
        "user": {                                // пользователь
            "id": 1230,                          
            "fio": "Иванов Сергей Петрович"      
        },                                       
        "state_rule": {                          // состояния задания
            "states": [                          
                1,                               
                2,                               
                3                                
            ]                                    
        }                                        
    }                                            
}                                                

http 200

// 2.0+
{                          
    "rootProperty": {...}  // корневой узел - всегда промежуточный
}                          

PUT /rest/configuration/tree-nodes/:id

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

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

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

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

Параметры

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

// 2.0+
{                          
    "id",                  // не изменяемо; для новых настроек не передаётся
    "name",                // * название; для системных настроек неизменяемо
    "label",               // * отображаемое имя; для системных настроек неизменяемо
    "is_terminal": false,  // * false для промежуточных настроек; неизменяемо
    "array_index": 0,      // * индекс в массиве
    "children": [...]      // дочерние настройки
}                          

Терминальная настройка

// 2.0+
{                             
    "id",                     // неизменяемо; для новых настроек не передаётся
    "name",                   // * название; для системных настроек неизменяемо
    "label",                  // * отображаемое имя; для системных настроек неизменяемо
    "is_terminal": true,      // * true для терминальных настроек; неизменяемо
    "type": "INTEGER",        // * тип; неизменяемо
    "possible_values": [...]  // возможные значения
}                             

Возможное значение настройки

// 2.0+
{                          
    "id",                  // неизменяемо; для новых настроек не передаётся
    "order_index",         // * порядок в списке возможных значений
    "bool_value",          // поля для хранения значения; должно быть заполнено
    "double_value",        // только одно в зависимости от типа настройки
    "int_value",           
    "string_value",        
    "access_rule": {       // правило доступности возможного значения
        "role": {          // для роли
            "id": 7        
        },                 
        "user": {          // для пользователя
            "id": 1230     
        },                 
        "organization": {  // для организации
            "id": 188      
        },                 
        "state_rule": {    // в состояниях
            "states": [    
                1,         
                2,         
                3          
            ]              
        }                  
    }                      
}                          

http 200

// 2.0+
{                      
    "property": {...}  // изменённый узел
}                      

GET /rest/configuration/props

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

http 200

// 2.0+
{  // Содержатся все настройки в виде JSON-объекта
   // с названиями полей, соответствующими "name" настроек.
   // Значения настроек уже рассчитаны в соответствии
   // с заведёнными для них правилами и с учетом
   // переданного токена (или его отсутствия).
}  

GET /rest/configuration/backward-compatible

Получение некоторых настроек для сохранения обратной совместимости со старыми версиями клиентских приложений. Ранее запрос назывался /files/settings; он и сейчас работает, т.к. на nginx сделан проброс.

Т.к. ранее /files/settings был просто запросом к файлу, и потому выполнялся без токена, то в /backward-compatible сохранено такое поведение. Все настройки вычисляются так, как если бы токен не передавался.

http 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/java-options

Получение информации о настройках конфигурации.

http 200

// 2.0+
{                                           
    "onlyMyOrganization": false,            // в системе отображается только организация текущего пользователя
                                            // (значение параметра берется из конфигурационного файла application.conf)
    "-Dfiles.localStorage": "c:/work/tmp",  // локальное хранилище для загружаемых файлов
                                            // (значение параметра берется из "VM Options")
    "filesLocalStorage": "c:/work/tmp",     // локальное хранилище для загружаемых файлов
                                            // (если значение параметра не прописано в "VM Options",
                                            // тогда оно берется из конфигурационного файла application.conf)
    "issueZoneTrackingOn": false            // включать отслеживание местоположения исполнителя
                                            // по умолчанию для всех заданий
}                                           

PUT /rest/configuration/locale/*code

Главный администратор.

Изменить локаль сервера.

GET /rest/configuration/system/ldap

Получить значения настроек аутентификаци через LDAP.

http 200

// 2.0+
{                                    
    "host": "ldap.example.com",      // хост
    "port": 389,                     // порт
    "admin_login": "login",          // логин администратора
    "admin_password": "password",    // пароль администратора
    "attributes": {                  // основные атрибуты Active Directory
        "phone": "telephoneNumber",  // телефон
        "name": "displayName",       // фио
        "login": "sAMAccountName",   // логин
        "email": "mail"              // email
    },                               
    "automatic_user_creation": {     // автоматическое создание пользователей
        "role_id": 7,                // идентификатор роли пользователя
        "organization_id": 7,        // идентификатор организации пользователя
        "enabled": false             // включено
    }                                
}                                    

PUT /rest/configuration/system/ldap

Главный администратор.

Изменить значения настроек аутентификаци через LDAP.

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

// 2.0+
{                                    
    "host": "ldap.example.com",      // хост
    "port": 389,                     // порт
    "admin_login": "login",          // логин администратора
    "admin_password": "password",    // пароль администратора
    "attributes": {                  // основные атрибуты Active Directory
        "phone": "telephoneNumber",  // телефон
        "name": "displayName",       // фио
        "login": "sAMAccountName",   // логин
        "email": "mail"              // email
    },                               
    "automatic_user_creation": {     // автоматическое создание пользователей
        "role_id": 7,                // идентификатор роли пользователя
        "organization_id": 7,        // идентификатор организации пользователя
        "enabled": false             // включено
    }                                
}                                    

http 200

// 2.0+
{                                    
    "host": "ldap.example.com",      // хост
    "port": 389,                     // порт
    "admin_login": "login",          // логин администратора
    "admin_password": "password",    // пароль администратора
    "attributes": {                  // основные атрибуты Active Directory
        "phone": "telephoneNumber",  // телефон
        "name": "displayName",       // фио
        "login": "sAMAccountName",   // логин
        "email": "mail"              // email
    },                               
    "automatic_user_creation": {     // автоматическое создание пользователей
        "role_id": 7,                // идентификатор роли пользователя
        "organization_id": 7,        // идентификатор организации пользователя
        "enabled": false             // включено
    }                                
}                                    

/rest/clusters

GET /rest/clusters/list

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

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

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

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

Параметры

http 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

Получение информации по кластеру (если данный кластер доступен текущему пользователю).

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

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

http 200

// 2.0+
  {                                            
    "id": 10,                                  // id кластера
    "title": "Организации Кировского района",  // название кластера
    "defaults": false,                         // отметка: является ли данный кластер кластером по умолчанию
    "creation_date": 1585045830,               // дата создания кластера
    "created_by": {                            // информация о пользователе, который создал кластер
        "id": 6,                               // id пользователя
        "fio": "Администратор"                 // ФИО пользователя
    }                                          
}                                              

POST /rest/clusters

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

Добавление нового кластера.

// 2.0+
{                                             
    "title": "Организации Кировского района"  // * название кластера
}                                             

http 200

// 2.0+
  {                                            
    "id": 10,                                  // id кластера
    "title": "Организации Кировского района",  // название кластера
    "defaults": false,                         // отметка: является ли данный кластер кластером по умолчанию
    "creation_date": 1585045830,               // дата создания кластера
    "created_by": {                            // информация о пользователе, который создал кластер
        "id": 6,                               // id пользователя
        "fio": "Администратор"                 // ФИО пользователя
    }                                          
}                                              

PATCH /rest/clusters/:id

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

Администратор кластера может редактировать только свой кластер.

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

// 2.0+
{                                               
    "title": "Организации Приволжского района"  // * название кластера
}                                               

http 200

// 2.0+
  {                                              
    "id": 10,                                    // id кластера
    "title": "Организации Приволжского района",  // название кластера
    "defaults": false,                           // отметка: является ли данный кластер кластером по умолчанию
    "creation_date": 1585045830,                 // дата создания кластера
    "created_by": {                              // информация о пользователе, который создал кластер
        "id": 6,                                 // id пользователя
        "fio": "Администратор"                   // ФИО пользователя
    }                                            
}                                                

DELETE /rest/clusters/:id

Главный администратор.

Удаление кластера.

При попытке удаления кластера "По умолчанию" или кластера, в котором есть организации, получим ошибку (400 BadRequest).

/rest/organizations

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

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

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

Параметры limit, offset не обязательны.

Параметры

http 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

Получение списка публичных (клиентских) организаций.

http 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

http 200

// 2.0+
{                                                       
    "name": "ebb453e8-db16-1004-8f9e-3e07628b8015.jpg"  // имя файла, преобразованное с помощью
                                                        // UUID-стандарта идентификации
}                                                       

GET /rest/organizations/:id

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

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

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

http 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

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

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

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

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

// 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 организации-исполнителя (если она не
                                                                           // указана в теле запроса на создание задания).
        }                                                                  
    }                                                                      
}                                                                          

http 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

Изменение информации об организации.

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

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

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

Файл с логотипом к моменту запроса должен находиться в папке {FILES_ROOT}/department_logo

Перенос организации в другой кластер (cluster_id) разрешен только пользователю с ролью Главный администратор.

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

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

http 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

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

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

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

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

Файл с логотипом к моменту запроса должен находиться в папке {FILES_ROOT}/department_logo

Перенос организации в другой кластер clusterid) разрешен только пользователю с ролью Главный администратор.

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

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

http 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

Удаление организации.

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

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

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

GET /rest/organizations/:id/users

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

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

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

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

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

http 200

// 2.0+
{                                              
    "items": [                                 
        {                                      
            "id": 3011,                        // id пользователя
            "login": "admin1439218241106",     // логин пользователя
            "fio": "Иванов И.И.",              // ФИО пользователя
            "type": {                          // тип
                "id": 1,                       // id типа
                "title": "Пользователи"        // название
            },                                 
            "ldap_authentication": false,      // аутентификация через LDAP
            "blocked": false,                  // признак заблокированного пользователя
            "avatar_update_date": 1605793362,  // дата обновления аватара
            "tags": [                          // метки пользователя
                {                              
                    "id": 1                    // id метки
                },                             
                ...                            // следующие элементы списка
            ],                                 
            "organization_id": 2,              // id организации, либо null, если пользователь
                                               // не относится ни к какой организации
            "workgroup_ids": [                 // массив id проектов, доступных пользователю
                132,                           
                232                            
            ],                                 
            "role_id": 10,                     // id роли пользователя: 6, 7 - обычный пользователь,
                                               // 10 - админ организации, 8 - администратор всех организаций
            "task_count": 17,                  // начиная с 0.16.0: количество назначенных на
                                               // пользователя заданий в статии "В работе"
            "message_channel_id": 99           // канал входящих сообщений
        },                                     
        ...                                    // следующие элементы списка
                                               // пользователей организации
    ]                                          
}                                              

GET /rest/organizations/:id/workgroups

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

Главному администратору и Главному инспектору доступны все проекты. Другим пользователям доступны:

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

Параметры

http 200

// 2.0+
{                                                                              
    "items": [                                                                 // список доступных проектов
        {                                                                      
            "id": 2,                                                           // id проекта
            "title": "Настольная система по работе с обращениями граждан",     // название проекта
            "open": true,                                                      // отметка: является ли данный проект открытым
            "defaults": false,                                                 // отметка: является ли данный проект проектом по умолчанию для организации
            "creation_date": 1590578653,                                       // дата создания проекта
            "created_by": {                                                    // информация о пользователе, который создал проект
                "id": 6,                                                       // id пользователя
                "fio": "Администратор"                                         // ФИО пользователя
            },                                                                 
            "organization": {                                                  // информация об организации, к которой относится проект
                "id": 189,                                                     // id организации
                "name": "Отдел разработки ПО"                                  // название организации
            },                                                                 
        },                                                                     
        {                                                                      
            "id": 3,                                                           
            "title": "Мобильное приложение для работы с обращениями граждан",  
            "open": false,                                                     
            "defaults": false,                                                 
            "creation_date": 1590578653,                                       
            "created_by": {                                                    
                "id": 6,                                                       
                "fio": "Администратор"                                         
            },                                                                 
            "organization": {                                                  
                "id": 189,                                                     
                "name": "Отдел разработки ПО"                                  
            }                                                                  
        },                                                                     
        {                                                                      
            "id": 1,                                                           
            "title": "По умолчанию",                                           
            "open": true,                                                      
            "defaults": true,                                                  
            "creation_date": 1590578653,                                       
            "created_by": {                                                    
                "id": 6,                                                       
                "fio": "Администратор"                                         
            },                                                                 
            "organization": {                                                  
                "id": 189,                                                     
                "name": "Отдел разработки ПО"                                  
            }                                                                  
        }                                                                      
    ],                                                                         
}                                                                              

POST /rest/organizations/:id/types/:typeId

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

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

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

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

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

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

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

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

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

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

Если связи не существует, получаем ошибку 400.

GET /rest/organizations/:id/stamp

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

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

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

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

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

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

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

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

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

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

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

/rest/workgroups

GET /rest/workgroups/list

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

Главному администратору и Главному инспектору доступны все проекты. Другим пользователям доступны:

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

Параметры

http 200

// 2.0+
{                                                                              
    "items": [                                                                 // список доступных проектов
        {                                                                      
            "id": 2,                                                           // id проекта
            "title": "Настольная система по работе с обращениями граждан",     // название проекта
            "open": true,                                                      // отметка: является ли данный проект открытым
            "defaults": false,                                                 // отметка: является ли данный проект проектом по умолчанию для организации
            "creation_date": 1590577589,                                       // дата создания проекта
            "created_by": {                                                    // информация о пользователе, который создал проект
                "id": 6,                                                       // id пользователя
                "fio": "Администратор"                                         // ФИО пользователя
            },                                                                 
            "organization": {                                                  // информация об организации, к которой относится проект
                "id": 189,                                                     // id организации
                "name": "Отдел разработки ПО"                                  // название организации
            },                                                                 
        },                                                                     
        {                                                                      
            "id": 3,                                                           
            "title": "Мобильное приложение для работы с обращениями граждан",  
            "open": false,                                                     
            "defaults": false,                                                 
            "creation_date": 1590577589,                                       
            "created_by": {                                                    
                "id": 6,                                                       
                "fio": "Администратор"                                         
            },                                                                 
            "organization": {                                                  
                "id": 188,                                                     
                "name": "Отдел технической поддержки"                          
            },                                                                 
        },                                                                     
        {                                                                      
            "id": 1,                                                           
            "title": "По умолчанию",                                           
            "open": true,                                                      
            "defaults": true,                                                  
            "creation_date": 1590577589,                                       
            "created_by": {                                                    
                "id": 6,                                                       
                "fio": "Администратор"                                         
            },                                                                 
            "organization": {                                                  
                "id": 188,                                                     
                "name": "Отдел системного администрирования"                   
            }                                                                  
        }                                                                      
    ]                                                                          
}                                                                              

GET /rest/workgroups/:id

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

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

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

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

http 200

// 2.0+
  {                                                                 
    "id": 10,                                                       // id проекта
    "title": "Настольная система по работе с обращениями граждан",  // название проекта
    "open": false,                                                  // отметка: является ли данный проект открытым
    "defaults": false,                                              // отметка: является ли данный проект проектом по умолчанию для организации
    "creation_date": 1590577589,                                    // дата создания проекта
    "created_by": {                                                 // информация о пользователе, который создал проект
        "id": 6,                                                    // id пользователя
        "fio": "Администратор"                                      // ФИО пользователя
    },                                                              
    "organization": {                                               // информация об организации, к которой относится проект
        "id": 189,                                                  // id организации
        "name": "Отдел разработки ПО"                               // название организации
    }                                                               
}                                                                   

GET /rest/workgroups/:id/users

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

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

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

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

http 200

// 2.0+
{                                              
    "items": [                                 
        {                                      
            "id": 3011,                        // id пользователя
            "login": "admin1439218241106",     // логин пользователя
            "fio": "Иванов И.И.",              // ФИО пользователя
            "type": {                          // тип
                "id": 1,                       // id типа
                "title": "Пользователи"        // название
            },                                 
            "ldap_authentication": false,      // аутентификация через LDAP
            "blocked": false,                  // признак заблокированного пользователя
            "avatar_update_date": 1605793362,  // дата обновления аватара
            "tags": [                          // метки пользователя
                {                              
                    "id": 1                    // id метки
                },                             
                ...                            // следующие элементы списка
            ],                                 
            "organization_id": 2,              // id организации, либо null, если пользователь
                                               // не относится ни к какой организации
            "workgroup_ids": [                 // массив id проектов, доступных пользователю
                132,                           
                232                            
            ],                                 
            "role_id": 10,                     // id роли пользователя: 6, 7 - обычный пользователь,
                                               // 10 - админ организации, 8 - администратор всех организаций
            "task_count": 17,                  // начиная с 0.16.0: количество назначенных на
                                               // пользователя заданий в статии "В работе"
            "message_channel_id": 99           // канал входящих сообщений
        },                                     
        ...                                    // следующие элементы списка
                                               // пользователей организации
    ]                                          
}                                              

POST /rest/workgroups

Добавление нового проекта.

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

Главный администратор и Главный инспектор могут создать проект в любой организации.

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

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

// 2.0+
{                                                                   
    "title": "Настольная система по работе с обращениями граждан",  // * название проекта
    "organization": {                                               
        "id": 189                                                   
    },                                                              // * id организации проекта
    "open": false                                                   // отметка: является ли данный проект открытым; значение по умолчанию - true
}                                                                   

http 200

// 2.0+
  {                                                                 
    "id": 10,                                                       // id проекта
    "title": "Настольная система по работе с обращениями граждан",  // название проекта
    "open": false,                                                  // отметка: является ли данный проект открытым
    "defaults": false,                                              // отметка: является ли данный проект проектом по умолчанию для организации
    "creation_date": 1590577589,                                    // дата создания проекта
    "created_by": {                                                 // информация о пользователе, который создал проект
        "id": 6,                                                    // id пользователя
        "fio": "Администратор"                                      // ФИО пользователя
    },                                                              
    "organization": {                                               // информация об организации, к которой относится проект
        "id": 189,                                                  // id организации
        "name": "Отдел разработки ПО"                               // название организации
    }                                                               
}                                                                   

PATCH /rest/workgroups/:id

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

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

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

Администратору организации и Инспектору организации для редактирования доступны проекты своих организаций, а также другие проекты, в которые их включили явно.

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

При попытке изменения проекта "По умолчанию" получим ошибку (400 BadRequest).

// 2.0+
{                                                               
    "title": "Настольная система по работе с жалобами граждан"  // * название проекта
}                                                               

http 200

// 2.0+
  {                                                              
    "id": 10,                                                    // id проекта
    "title": "Настольная система по работе с жалобами граждан",  // название проекта
    "open": false,                                               // отметка: является ли данный проект открытым
    "defaults": false,                                           // отметка: является ли данный проект проектом по умолчанию для организации
    "creation_date": 1590577589,                                 // дата создания проекта
    "created_by": {                                              // информация о пользователе, который создал проект
        "id": 6,                                                 // id пользователя
        "fio": "Администратор"                                   // ФИО пользователя
    },                                                           
    "organization": {                                            // информация об организации, к которой относится проект
        "id": 189,                                               // id организации
        "name": "Отдел разработки ПО"                            // название организации
    }                                                            
}                                                                

DELETE /rest/workgroups/:id

Удаление проекта.

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

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

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

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

При попытке удаления проекта "По умолчанию" получим ошибку (400 BadRequest).

POST /rest/workgroups/:id/users/:userId

Добавление пользователя в проект

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

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

Администратору организации и Инспектору организации доступны проекты своих организаций, а также другие проекты, в которые их включили явно.

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

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

DELETE /rest/workgroups/:id/users/:userId

Удаление пользователя из проекта

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

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

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

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

Если проект открытый, и пользователь состоит в его организации, то ничего не происходит, а запрос возвращает 403 Forbidden.

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

/rest/users

GET /rest/users/current

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

http 200

// 2.0+
{                                                        
    "id": 6,                                             // id пользователя
    "login": "ivanov",                                   // логин
    "fio": "Иванов Иван Иванович",                       // ФИО
    "type": {                                            // тип
        "id": 1,                                         // id типа
        "title": "Пользователи"                          // название
    },                                                   
    "ldap_authentication": false,                        // аутентификация через LDAP
    "blocked": false,                                    // признак заблокированного пользователя
    "avatar_update_date": 1605793362,                    // дата обновления аватара
    "tags": [                                            // метки пользователя
        {                                                
            "id": 1                                      // id метки
        },                                               
        ...                                              // следующие элементы списка
    ],                                                   
    "organization_id": 1,                                // id организации
    "workgroup_ids": [                                   // массив id проектов, доступных пользователю
        132,                                             
        232                                              
    ],                                                   
    "role_id": 8,                                        // id роли
    "email": "test@gmail.com",                           // адрес электронной почты
    "address": "г.Казань, ул.Назарбаева, д.25, кв.125",  // адрес
    "passport": "9205 999999",                           // паспортные данные
    "phone": "+7 999 888 7766",                          // телефон
    "tracking": true,                                    // включен ли трекинг
    "glonass_id": null,                                  // ГЛОНАСС-id для трекинга
    "message_channel_id": 99,                            // канал входящих сообщений
    "task_defaults": {                                   
        "assigned_organization": {                       // организация-исполнитель по умолчанию, если она есть
            "id": 99,                                    
            "Тестовая организация"                       
        }                                                
    }                                                    
}                                                        

POST /rest/users/register

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

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

// 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"                            // паспортные данные
}                                                        

http 200

// 2.0+
{                                                        
    "id": 6923,                                          // id пользователя
    "login": "login",                                    // логин
    "fio": "Иванов И.И.",                                // ФИО
    "type": {                                            // тип
        "id": 1,                                         // id типа
        "title": "Пользователи"                          // название
    },                                                   
    "ldap_authentication": false,                        // аутентификация через LDAP
    "avatar_update_date": 1605793362,                    // дата обновления аватара
    "tags": [],                                          // список меток пользователя
    "organization_id": 514,                              // id организации
    "role_id": 6,                                        // id роли
    "email": "test@gmail.com",                           // адрес электронной почты
    "address": "г.Казань, ул.Назарбаева, д.25, кв.125",  // адрес
    "passport": "9205 999999",                           // паспортные данные
    "phone": "+7 999 888 7766",                          // телефон
    "tracking": false,                                   // включить трекинг
    "glonass_id": null,                                  // ГЛОНАСС-id для трекинга
    "message_channel_id": 99                             // канал входящих сообщений
}                                                        

POST /rest/users/check-login

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

Проверка логина на существование в системе.

// 2.0+
{                         
    "login": "user_test"  // логин пользователя
}                         

http 200

// 2.0+
{                   
    "check": false  // true - логин не существует в системе,
                    // и он доступен для использования;
                    // false - логин существует в системе,
                    // и он не доступен для использования;
}                   

GET /rest/users

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

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

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

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

http 200

// 2.0+
{                                                                
    "items": [                                                   
        {                                                        
            "id": 3011,                                          // id пользователя
            "login": "admin1439218241106",                       // логин пользователя
            "fio": "Иванов И.И.",                                // ФИО
            "organization_id": 2,                                // id организации
            "type": {                                            // тип
                "id": 1,                                         // id типа
                "title": "Пользователи"                          // название
            },                                                   
            "ldap_authentication": false,                        // аутентификация через LDAP
            "blocked": false,                                    // признак заблокированного пользователя
            "avatar_update_date": 1605793362,                    // дата обновления аватара
            "tags": [                                            // метки пользователя
                {                                                
                    "id": 1                                      // id метки
                },                                               
                ...                                              // следующие элементы списка
            ],                                                   
            "workgroup_ids": [                                   // массив id проектов, доступных пользователю
                132,                                             
                232                                              
            ],                                                   
            "role_id": 10,                                       // id роли
            "email": "test@gmail.com",                           // адрес электронной почты
            "address": "г.Казань, ул.Назарбаева, д.25, кв.125",  // адрес
            "passport": "9205 999999",                           // паспортные данные
            "phone": "+7 999 888 7766",                          // телефон
            "task_count": 17,                                    // начиная с 0.16.0: количество назначенных на
                                                                 // пользователя заданий в стадии "В работе"
            "tracking": false,                                   // включен ли трекинг
            "glonass_id": null,                                  // ГЛОНАСС-id для трекинга
            "message_channel_id": 99                             // канал входящих сообщений
        },                                                       
        ...                                                      // следующие элементы списка пользователей
    ]                                                            
}                                                                

GET /rest/users/by-distance

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

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

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

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

http 200

// 2.0+
{                                                  
    "items": [                                     
        {                                          
            "user": {                              
                "id": 614,                         // id пользователя
                "fio": "Иванов Иван Иванович",     // ФИО пользователя
                "type": {                          // тип
                    "id": 1,                       // id типа
                    "title": "Пользователи"        // название
                },                                 
                "ldap_authentication": false,      // аутентификация через LDAP
                "blocked": false,                  // признак заблокированного пользователя
                "avatar_update_date": 1605793362,  // дата обновления аватара
                "tags": [                          // метки пользователя
                    {                              
                        "id": 1                    // id метки
                    },                             
                    ...                            // следующие элементы списка
                ],                                 
                "organization_id": 3               // id организации пользователя
            },                                     
            "glonass_id": 225,                     // ГЛОНАСС-id
            "lon": 49.1416784,                     // координата долготы местоположения пользователя
            "lat": 55.7745002,                     // координата широты местоположения пользователя
            "date": 1501844904,                    // дата последней активности пользователя
            "active": true                         // активность пользователя за последние сутки от
                                                   // текущего времени: активность рассчитывается
                                                   // исходя из даты последнего обновления точки
                                                   // пользователя; null, если нет даты
                                                   // обновления, или мы не имеем данных о
                                                   // местоположении пользователя;
            "distance": 34.7971366515358           // расстояние от пользователя до указанной
                                                   // в параметрах запроса точки (в км.),
                                                   // либо null, в случаях, если точка не была
                                                   // указана в параметрах запроса, или мы не
                                                   // имеем данных о местоположении пользователя;
        },                                         
        ...                                        // следующие элементы списка
    ]                                              
}                                                  

GET /rest/users/count

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

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

http 200

// 2.0+
{                 
    "count": 970  // количество пользователей
}                 

GET /rest/users/locations

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

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

http 200

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

GET /rest/users/monitoring

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

Запрос выдает данные, доступные текущему пользователю:

Пример сообщения по WS

// 2.0+
{                                     
    "gauges": [                       
        {                             
            "user_id": 131,           // id пользователя
            "port": 54,               // порт, по которому приходят данные
            "analog_value": 2.0,      // текущее значение аналогового датчика
            "date": 1605100717        // дата обновления
        },                            
        ...                           // следующие элементы списка
    ]                                 
}                                     
{                                     
    "points": [                       
        {                             
            "user": {                 
                "id": 609,            // id пользователя
                "department_id": 609  // id организации
            },                        
            "location": {             
                "user_id": 1510,      // ГЛОНАСС-id
                "lon": 49.4513218,    // координата долготы
                "lat": 56.2500685,    // координата широты
                "date": 1490987230,   // дата последней активности пользователя
                "direction": 96,      // направление
                "speed": 1.0,         // скорость
                "active": false       // активность пользователя (временной интервал
                                      // для проверки активности пользователя задается
                                      // в настройках, по умолчанию это 30 минут);
                                      // null, если нет данных о местоположении пользователя
            }                         
        }                             
    ]                                 
}                                     

GET /rest/users/locations/live

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

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

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

PATCH /rest/users/tags-batch

Главный администратор.

Массовый запрос на редактирование меток пользователей: всем пользователям, id которых указаны в users, будут добавлены метки из added и удалены метки из remove.

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

// 2.0+
{                        
    "users": [           // пользователи, метки которых необходимо отредактировать
        {                
            "id": 121    // id пользователя
        },               
        ...              // следующие элементы списка пользователей
    ],                   
    "tags": {            // метки пользователей
        "add": [         // метки, которые необходимо добавить
            {            
                "id": 1  // id метки
            },           
            ...          // следующие элементы списка меток
        ],               
        "remove": [      // метки, которые необходимо удалить
            {            
                "id": 2  // id метки
            },           
            ...          // следующие элементы списка меток
        ]                
    }                    
}                        

POST /rest/users

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

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

Администратор организации может добавить пользователя только в свою организацию.

Администратор кластера может добавить пользователя только в организацию своего кластера.

При добавлении аватара к началу выполнения запроса файл должен быть загружен на сервер запросом POST /files/upload. Полученный name нужно подставить в поле avatar_file_name при выполнении основного запроса.

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

// 2.0+
{                                                                   
    "id": 123,                                                      // id пользователя
    "login": "ivanov_ivan",                                         // * логин
    "paswd": "qwerty123",                                           // * пароль
    "fio": "Иванов И.И.",                                           // * ФИО пользователя
    "organization_id": 1,                                           // * id организации
    "workgroup_ids": [                                              // массив id проектов, доступных пользователю
        132,                                                        
        232                                                         
    ],                                                              
    "role_id": 7,                                                   // id роли, по умолчанию 6 - Клиент
    "type": {                                                       // тип
        "id": 1                                                     // id типа
    },                                                              
    "blocked": false,                                               // признак заблокированного пользователя
    "ldap_authentication": false,                                   // аутентификация через LDAP
    "avatar_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.jpg"  // имя файла после загрузки на сервер
                                                                    // (jpg | jpeg)
    "tags": [                                                       // метки пользователя
        {                                                           
            "id": 1                                                 // id метки
        },                                                          
        {                                                           
            "id": 22                                                
        },                                                          
        ...                                                         // следующие элементы списка
    ],                                                              
    "email": "test@gmail.com",                                      // email
    "phone": "+7 999 888 7766",                                     // телефон
    "address": "г.Казань, ул.Назарбаева, д.25, кв.125",             // адрес
    "passport": "9205 999999",                                      // паспортные данные
    "tracking": true                                                // включить трекинг
}                                                                   

http 200

// 2.0+
{                                                        
    "id": 123,                                           
    "login": "ivanov_ivan",                              
    "fio": "Иванов И.И.",                                
    "type": {                                            // тип
        "id": 1,                                         // id типа
        "title": "Пользователи"                          // название
    },                                                   
    "ldap_authentication": false,                        // аутентификация через LDAP
    "blocked": false,                                    // признак заблокированного пользователя
    "avatar_update_date": 1605793362,                    // дата обновления аватара
    "tags": [                                            // метки пользователя
        {                                                
            "id": 1                                      // id метки
        },                                               
        {                                                
            "id": 22                                     
        },                                               
        ...                                              // следующие элементы списка
    ],                                                   
    "organization_id": 1,                                // id организации
    "workgroup_ids": [                                   // массив id проектов, доступных пользователю
        132,                                             
        232                                              
    ],                                                   
    "role_id": 7,                                        // id роли
    "email": "test@gmail.com",                           // адрес электронной почты
    "address": "г.Казань, ул.Назарбаева, д.25, кв.125",  // адрес
    "passport": "9205 999999",                           // паспортные данные
    "phone": "+7 999 888 7766",                          // телефон
    "tracking": true,                                    // включен ли трекинг
    "glonass_id": 1450,                                  // ГЛОНАСС-id для трекинга
    "message_channel_id": 99                             // канал входящих сообщений
}                                                        

PATCH /rest/users/:id

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

Текущий пользователь, Главный администратор, Администратор организации, Администратор кластера.

Текущий пользователь может редактировать свою учетную запись.

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

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

При organizationIds = [] и не-передаче organizationId ("оставить главную организацию как есть") будет осуществлена попытка стереть как organizationId, так и organizationIds. Такая попытка пройдёт только если одновременно меняется роль на главного администратора/инспектора.

При передаче organizationIds = [] и передаче organizationId = X ("установить главную организацию") будет сделана замена organizationIds = [X], чтобы привести передаваемые данные к согласованности.

Имеем два случая и разное поведение в каждом из них. Так сделано потому, что оба приведённых выше запроса — некорректные, и мы "исправляем" каждый из них наиболее удобным для нас способом, чтобы минимизировать изменения в клиентах, которые на данный момент отправляют (или могут отправлять) неверные данные.

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

// 2.0+
{                                                                   
    "login": "ivanov_ivan",                                         // логин
    "fio": "Иванов Иван Иванович",                                  // ФИО
    "paswd": "123123",                                              // новый пароль
    "role_id": 7,                                                   // id роли; пользователь не может сам поменять свою роль
    "organization_id": 517,                                         // id организации, права на изменения
                                                                    // есть только у главного администратора
    "workgroup_ids": [                                              // массив id проектов, доступных пользователю
        132,                                                        
        232                                                         
    ],                                                              
    "type": {                                                       // тип
        "id": 1                                                     // id типа
    },                                                              
    "ldap_authentication": false,                                   // аутентификация через LDAP
    "blocked": false,                                               // признак заблокированного пользователя
    "avatar_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.jpg"  // имя файла после загрузки на сервер
                                                                    // (jpg | jpeg)
    "tags": {                                                       // метки пользователя
        "add": [                                                    // метки, которые необходимо добавить
            {                                                       
                "id": 21                                            // id метки
            }                                                       
        ],                                                          
        "remove": [                                                 // метки, которые необходимо удалить
            {                                                       
                "id": 22                                            // id метки
            }                                                       
        ]                                                           
    }                                                               
    "email": "test@gmail.com",                                      // адрес электронной почты
    "address": "г.Казань, ул.Назарбаева, д.25, кв.125",             // адрес
    "phone": "+7 999 888 7766",                                     // телефон
    "passport": "9205 999999",                                      // паспортные данные
    "tracking": true                                                // включить трекинг
}                                                                   

http 200

// 2.0+
{                                                        
    "id": 6935,                                          // id пользователя
    "login": "ivanov_ivan",                              // логин пользователя
    "fio": "Иванов Иван Иванович",                       // ФИО
    "type": {                                            // тип
        "id": 1,                                         // id типа
        "title": "Пользователи"                          // название
    },                                                   
    "ldap_authentication": false,                        // аутентификация через LDAP
    "blocked": false,                                    // признак заблокированного пользователя
    "avatar_update_date": 1605793362,                    // дата обновления аватара
    "tags": [                                            // метки пользователя
        {                                                
            "id": 1                                      // id метки
        },                                               
        {                                                
            "id": 21                                     
        },                                               
        ...                                              // следующие элементы списка
    ],                                                   
    "organization_id": 517,                              // id организации
    "workgroup_ids": [                                   // массив id проектов, доступных пользователю
        132,                                             
        232                                              
    ],                                                   
    "role_id": 10,                                       // id роли
    "email": "test@gmail.com",                           // адрес электронной почты
    "address": "г.Казань, ул.Назарбаева, д.25, кв.125",  // адрес
    "passport": "9205 999999",                           // паспортные данные
    "phone": "+7 999 888 7766",                          // телефон
    "tracking": true,                                    // включен ли трекинг
    "glonass_id": 1450                                   // ГЛОНАСС-id для трекинга
    "message_channel_id": 99,                            // канал входящих сообщений
}                                                        

DELETE /rest/users/:id

Удаление учетной записи пользователя.

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

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

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

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

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

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

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

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

Примечания:

GET /rest/users/:id/avatar

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

GET /rest/users/:id/avatar/crop/w:width/h:height

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

Аватар отдается указанных размеров (возможна обрезка изображения вдоль одной из сторон).

GET /rest/users/:id/avatar/fit/w:width/h:height

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

Аватар отдается указанных размеров (возможно появление пустого поля вдоль одной из сторон).

DELETE /rest/users/:id/avatar

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

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

GET /rest/users/gauges/values

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

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

http 200

// 2.0+
{                                         
    "items": [                            
        {                                 
            "user_id": 131,               // id пользователя
            "port": 54,                   // порт, по которому приходят данные
            "name": "Наличие интернета",  // название типа датчика
            "analog_value": 2.0,          // текущее значение аналогового датчика
            "date": 1605100717            // дата обновления
        },                                
        ...                               // следующие элементы списка
    ]                                     
}                                         

GET /rest/users/:id/gauges/history

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

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

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

http 200

// 2.0+
{                                         
    "items": [                            
        {                                 
            "user_id": 131,               // id пользователя
            "port": 54,                   // порт, по которому приходят данные
            "name": "Наличие интернета",  // название типа датчика
            "analog_value": 2.0,          // текущее значение аналогового датчика
            "date": 1605100717            // дата обновления
        },                                
        ...                               // следующие элементы списка
    ]                                     
}                                         

GET /rest/users/gauges/live

Соединение по web-socket для получения значений датчиков пользователей.

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

Пример сообщения по WS

// 2.0+
{                                 
    "gauges": [                   
        {                         
            "user_id": 131,       // id пользователя
            "port": 54,           // порт, по которому приходят данные
            "analog_value": 2.0,  // текущее значение аналогового датчика
            "date": 1605100717    // дата обновления
        },                        
        ...                       // следующие элементы списка
    ]                             
}                                 

POST /rest/users/types

Главный администратор.

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

Пиктограмма является обязательным полем, поэтому к началу выполнения запроса файл пиктограммы уже должен быть загружен на сервер запросом POST /files/upload. Полученный name нужно подставить в поле icon_file_name при выполнении основного запроса.

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

// 2.0+
{                                                                  
    "title": "Название типа",                                      // * название
    "icon_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.PNG",  // * имя файла после загрузки на сервер
                                                                   //   (png)
    "use_initials": true,                                          // признак того, что нужно использовать инициалы
                                                                   // пользователя в маркере на карте (вместо пиктограммы)
    "use_avatar": true                                             // признак того, что нужно использовать аватар пользователя
                                                                   // (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
}                                                                  

http 200

// 2.0+
{                                    
    "id": 184,                       // id типа
    "title": "Название типа",        // название
    "icon_update_date": 1605699953,  // дата последнего изменения пиктограммы
    "use_initials": false,           // признак того, что нужно использовать инициалы пользователя
                                     // в маркере на карте (вместо пиктограммы)
    "use_avatar": false,             // признак того, что нужно использовать аватар пользователя
                                     // (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
    "is_default": false              // признак типа по умолчанию
}                                    

PATCH /rest/users/types/:id

Главный администратор.

Изменение информации о типе пользователей.

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

// 2.0+
{                                                                  
    "title": "Название типа",                                      // название
    "icon_file_name": "f71adbab-724f-47a1-996d-0e62062b006b.PNG",  // имя файла после загрузки на сервер
                                                                   // (png)
    "use_initials": true,                                          // признак того, что нужно использовать инициалы
                                                                   // пользователя в маркере на карте (вместо пиктограммы)
    "use_avatar": true                                             // признак того, что нужно использовать аватар пользователя
                                                                   // (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
}                                                                  

http 200

// 2.0+
{                                    
    "id": 184,                       // id типа
    "title": "Название типа",        // название
    "icon_update_date": 1605699953,  // дата последнего изменения пиктограммы
    "use_initials": false,           // признак того, что нужно использовать инициалы пользователя
                                     // в маркере на карте (вместо пиктограммы)
    "use_avatar": false,             // признак того, что нужно использовать аватар пользователя
                                     // (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
    "is_default": false              // признак типа по умолчанию
}                                    

DELETE /rest/users/types/:id

Главный администратор.

Удаление типа пользователей.

Нельзя удалить тип пользователей по умолчанию - будет получена 403.

Нельзя удалить тип пользователей, если существуют (неудалённые) пользователи с этим типом - будет получена 403.

GET /rest/users/types/list

Список типов пользователей.

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

Параметры

http 200

// 2.0+
{                                            
    "items": [                               
        {                                    
            "id": 184,                       // id типа
            "title": "Название типа",        // название
            "icon_update_date": 1605699953,  // дата последнего изменения пиктограммы
            "use_initials": false,           // признак того, что нужно использовать инициалы пользователя
                                             // в маркере на карте (вместо пиктограммы)
            "use_avatar": false,             // признак того, что нужно использовать аватар пользователя
                                             // (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
            "is_default": false              // признак типа по умолчанию
        },                                   
        ...                                  // следующие элементы списка
    ],                                       
    "total": 3,                              // общее количество элементов
    "limit": 25,                             // максимальное количество элементов на странице
    "page": 1                                // текущая страница
}                                            

GET /rest/users/types/:id

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

http 200

// 2.0+
{                                    
    "id": 184,                       // id типа
    "title": "Название типа",        // название
    "icon_update_date": 1605699953,  // дата последнего изменения пиктограммы
    "use_initials": false,           // признак того, что нужно использовать инициалы пользователя
                                     // в маркере на карте (вместо пиктограммы)
    "use_avatar": false,             // признак того, что нужно использовать аватар пользователя
                                     // (при наличии) в маркере на карте (вместо пиктограммы и инициалов)
    "is_default": false              // признак типа по умолчанию
}                                    

GET /rest/users/types/:id/icon

Любой пользователь.

Получение пиктограммы (файла) типа пользователей.

POST /rest/users/tags

Главный администратор.

Добавление новой метки пользователей.

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

// 2.0+
{                       
    "title": "Курьер",  // * название метки
    "color": "ff0000"   // цвет метки для отображения на карте (HEX код)
}                       

http 200

// 2.0+
{                       
    "id": 11,           // id метки
    "title": "Курьер",  // название метки
    "color": "ff0000"   // цвет метки
}                       

PATCH /rest/users/tags/:id

Главный администратор.

Изменение информации о метке пользователей.

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

// 2.0+
{                                   
    "title": "Курьер Подмосковье",  // название метки
    "color": "008000"               // цвет метки для отображения на карте (HEX код)
}                                   

http 200

// 2.0+
{                                   
    "id": 11,                       // id метки
    "title": "Курьер Подмосковье",  // название метки
    "color": "008000"               // цвет метки
}                                   

GET /rest/users/tags/list

Список меток пользователей.

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

Параметры

http 200

// 2.0+
{                               
    "items": [                  
        {                       
            "id": 11,           // id метки
            "title": "Курьер",  // название метки
            "color": "ff0000"   // цвет метки
        },                      
        ...                     // следующие элементы списка
    ],                          
    "total": 3,                 // общее количество элементов
    "limit": 25,                // максимальное количество элементов на странице
    "page": 1                   // текущая страница
}                               

GET /rest/users/tags/:id

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

http 200

// 2.0+
{                       
    "id": 11,           // id метки
    "title": "Курьер",  // название метки
    "color": "ff0000"   // цвет метки
}                       

DELETE /rest/users/tags/:id

Главный администратор.

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

GET /rest/users/roles

Список ролей пользователей.

http 200

{                               
    "items": [                  
        {                       
            "id": 6,            // id роли
            "name": "Клиент",   // название роли
            "code": "CUSTOMER"  // код роли
        },                      
        ...                     // следующие элементы списка
    ]                           
}                               

PATCH /rest/users/roles/:id

Главный администратор.

Изменение роли пользователя.

{                     
    "name": "Клиент"  // * название роли
}                     

http 200

{                       
    "id": 6,            // id роли
    "name": "Клиент",   // название роли
    "code": "CUSTOMER"  // код роли
}                       

POST /rest/users/roles/sort

Главный администратор.

Сортировка ролей в порядке, заданном в теле запроса.

{             
    "ids": [  // id всех ролей в нужном порядке
        6,    
        1,    
        3,    
        2,    
        5,    
        4     
    ]         
}             

http 200

{                               
    "items": [                  
        {                       
            "id": 6,            // id роли
            "name": "Клиент",   // название роли
            "code": "CUSTOMER"  // код роли
        },                      
        ...                     // следующие элементы списка ролей
                                // в заданном порядке сортировки
    ]                           
}                               

/rest/types

GET /rest/types

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

Параметры

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

/types
/types?search=доставка&defaultType=true&ltPeriodOfReviewInSec=172800
/types?search=доставка&defaultType=false&gtPeriodOfReviewInSec=86400&deadlineType=1&groupId=1,2
/types?defaultType=false&deadlineType=1&groupId=1,2&sortBy=order_key&sortDirecton=DESC
/types?defaultType=false&deadlineType=1&gtPeriodOfReviewInSec=86400&ltPeriodOfReviewInSec=172800&groupId=1,2

http 200

// 2.0+
{                                             
    "count": 20,                              // количество видов работ, удовлетворяющих
                                              // условиям поиска и фильтрации
    "items": [                                
        {                                     
            "id": 12,                         // id вида работ
            "name": "Обрушение конструкции",  // название вида работ
            "icon": "icon_12.png",            // файл пиктограммы
            "default": true,                  // является ли данный вид
                                              // видом по умолчанию
            "period_of_review": null,         // период исполнения работ
                                              // данного вида работ
            "period_of_review_in_sec": null,  // величина срока исполнения работ данного
                                              // вида работ по умолчанию (в секундах)
            "deadline_type": "AT_CREATE",     // поле для расчета срока исполнения
                                              // работ данного вида:
                                              // null,
                                              // от даты создания "AT_CREATE",
                                              // от даты назначения на исполнителя
                                              // "AT_UPDATE".
            "organizations": [                // массив id организаций,
                                              // которым доступен вид работ
                1,                            
                2,                            
                3                             
            ],                                
            "order_key": 3,                   // порядковый номер вида работ
                                              // в отсортированном списке
            "group_id": null                  // id группы, которой принадлежит
                                              // вид работ, и null,
                                              // если он не принадлежит никакой группе
        },                                    
        ...                                   // следующие элементы списка видов работ
    ]                                         
}                                             

Более подробно о времени истечения срока исполнения видов работ можно прочитать здесь: Время истечения срока в часах

Более подробно о сортировке видов работ можно прочитать здесь: Сортировка видов работ

Более подробно о группировке видов работ можно прочитать здесь: Группировка видов работ

GET /rest/types/compressed

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

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

Параметры

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

Примечания:

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

/types/compressed
/types/compressed?search=доставка&defaultType=true&ltPeriodOfReviewInSec=172800
/types/compressed?search=доставка&defaultType=false&gtPeriodOfReviewInSec=86400&deadlineType=1&groupId=1,2
/types/compressed?defaultType=false&deadlineType=1&groupId=1,2&sortBy=order_key&sortDirecton=DESC

/types/compressed?defaultType=false&deadlineType=1&gtPeriodOfReviewInSec=86400&ltPeriodOfReviewInSec=172800&groupId=1,2

http 200

// 2.0+
{                                             
    "count": 20,                              // количество видов работ, удовлетворяющих
                                              // условиям поиска и фильтрации
    "items": [                                
        {                                     
            "id": 12,                         // id вида работ
            "name": "Обрушение конструкции",  // название вида работ
            "icon": "icon_12.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

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

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

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

// 2.0+
{             
    "ids": [  // id видов работ в отсортированном порядке
        12,   
        1,    
        3,    
        6,    
        2,    
        5     
    ]         
}             

http 200

// 2.0+
{                                                    
    "items": [                                       
        {                                            
            "id": 12,                                // id вида
            "name": "Обрушение конструкции",         // название вида
            "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

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

Получить список всех групп видов работ.

http 200

// 2.0+
{                                      
    "items": [                         
        {                              
            "id": 41,                  // id группы
            "name": "название группы"  // название группы
        },                             
        ...                            // следующие элементы списка групп
    ]                                  
}                                      

POST /rest/types/groups

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

Создание новой группы видов работ.

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

// 2.0+
{                              
    "name": "название группы"  // * название группы
}                              

http 200

// 2.0+
{                              
    "id": 208,                 // id группы
    "name": "название группы"  // название группы
}                              

GET /rest/types/groups/:id

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

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

http 200

// 2.0+
{                              
    "id": 208,                 // id группы
    "name": "название группы"  // название группы
}                              

PUT /rest/types/groups/:id

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

Изменение группы видов работ.

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

// 2.0+
{                                         
    "name": "измененное название группы"  // название группы
}                                         

http 200

// 2.0+
{                                         
    "id": 208,                            // id группы
    "name": "измененное название группы"  // название группы
}                                         

DELETE /rest/types/groups/:id

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

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

POST /rest/types

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

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

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

// 2.0+
{                                                           
    "name": "Доставка техники",                             // * название вида работ
    "icon": "icon_158.png",                                 // * название двумерной иконки, иконка
                                                            // по умолчанию - "default_icon.png"
    "map_icon": "default_iconmap.png",                      // * название иконки для карты, иконка
                                                            // по умолчанию - "default_iconmap.png"
    "map_icon_highlight": "default_iconmap_highlight.png",  // * название увеличенной иконки для карты,
                                                            // иконка по умолчанию -
                                                            // "default_iconmap_highlight.png"
    "type_default": false,                                  // * является ли данный вид видом
                                                            // по умолчанию
    "period_of_review": 2,                                  // период исполнения работ данного вида
    "period_of_review_in_sec": 172800,                      // величина срока исполнения работ
                                                            // данного вида по умолчанию (в секундах)
    "deadline_type": "AT_CREATE",                           // * поле для расчета срока исполнения
                                                            // работ данного вида: от даты
                                                            // создания "AT_CREATE", от даты
                                                            // назначения на исполнителя "AT_UPDATE".
    "organizations": [                                      // массив id организаций,
                                                            // которым доступен вид
        2,                                                  
        3                                                   
    ],                                                      
    "group_id": 22                                          // id группы, которой принадлежит вид,
                                                            // и null, если вид не принадлежит
                                                            // никакой группе
}                                                           

http 200

// 2.0+
{                                       
    "id": 1325,                         // id вида
    "name": "Доставка оборудования",    // название вида
    "order_key": null,                  // порядок сортировки
    "icon": "icon_158.png",             // файл пиктограммы
    "default": false,                   // является ли данный вид
                                        // видом по умолчанию
    "period_of_review": 2,              // период исполнения работ
                                        // данного вида
    "period_of_review_in_sec": 172800,  // величина срока исполнения работ
                                        // данного вида по умолчанию
                                        // (в секундах)
    "deadline_type": "AT_CREATE",       // поле для расчета срока исполнения
                                        // работ данного вида: от даты
                                        // создания "AT_CREATE", от даты
                                        // назначения на исполнителя
                                        // "AT_UPDATE".
    "organizations": [                  // массив id организаций,
                                        // которым доступен вид
        2,                              
        3                               
    ],                                  
    "group_id": 22                      // id группы, которой принадлежит
                                        // вид, или null, если вид не
                                        // принадлежит никакой группе
}                                       

GET /rest/types/:id

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

http 200

// 2.0+
{                                       
    "id": 1325,                         // id вида
    "name": "Доставка оборудования",    // название вида работ
    "order_key": null,                  // порядок сортировки
    "icon": "icon_158.png",             // файл пиктограммы
    "default": false,                   // является ли данный вид видом
                                        // по умолчанию
    "period_of_review": 2,              // период исполнения работ
                                        // данного вида
    "period_of_review_in_sec": 172800,  // величина срока исполнения работ
                                        // данного вида по умолчанию
                                        // (в секундах)
    "deadline_type": "AT_CREATE",       // поле для расчета срока исполнения
                                        // работ данного вида: от даты
                                        // создания "AT_CREATE", от даты
                                        // назначения на исполнителя
                                        // "AT_UPDATE".
    "organizations": [                  // массив id организаций,
                                        // которым доступен вид
        2,                              
        3                               
    ],                                  
    "group_id": 22                      // id группы, которой принадлежит
                                        // вид, или null, если вид не
                                        // принадлежит никакой группе
}                                       

PATCH /rest/types/:id

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

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

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

// 2.0+
{                                                           
    "name": "Доставка оборудования",                        // название вида
    "icon": "icon_158.png",                                 // название двумерной иконки
    "map_icon": "default_iconmap.png",                      // название иконки для карты
    "map_icon_highlight": "default_iconmap_highlight.png",  // название увеличенной иконки для карты
    "type_default": false,                                  // является ли данный вид работ видом
                                                            // по умолчанию
    "period_of_review": 2,                                  // период исполнения работ данного вида
    "period_of_review_in_sec": 172800,                      // величина срока исполнения работ
                                                            // данного вида по умолчанию (в секундах)
    "deadline_type": "AT_CREATE",                           // поле для расчета срока исполнения
                                                            // работ данного вида: от даты
                                                            // создания "AT_CREATE", от даты
                                                            // назначения на исполнителя
                                                            // "AT_UPDATE".
    "organizations": [                                      // массив id организаций,
                                                            // которым доступен вид
        2,                                                  
        3                                                   
    ],                                                      
    "group_id": 22                                          // id группы, которой принадлежит
                                                            // вид, или null (либо 0), если вид не
                                                            // принадлежит никакой группе
}                                                           

http 200

// 2.0+
{                                                           
    "id": 1325,                                             // id вида
    "name": "Доставка оборудования",                        // название вида
    "order_key": null,                                      // порядок сортировки
    "icon": "icon_158.png",                                 // название двумерной иконки
    "map_icon": "default_iconmap.png",                      // название иконки для карты
    "map_icon_highlight": "default_iconmap_highlight.png",  // название увеличенной иконки
                                                            // для карты
    "default": false,                                       // является ли данный вид
                                                            // видом по умолчанию
    "period_of_review": 2,                                  // период исполнения работ
                                                            // данного вида
    "period_of_review_in_sec": 172800,                      // величина срока исполнения работ
                                                            // данного вида по умолчанию
                                                            // (в секундах)
    "deadline_type": "AT_CREATE",                           // поле для расчета срока исполнения
                                                            // работ данного вида:
                                                            // от даты создания "AT_CREATE",
                                                            // от даты назначения на исполнителя
                                                            // "AT_UPDATE".
    "organizations": [                                      // массив id организаций,
                                                            // которым доступен вид
        2,                                                  
        3                                                   
    ],                                                      
    "group_id": 22                                          // id группы, которой принадлежит
                                                            // вид, или null, если вид не
                                                            // принадлежит никакой группе
}                                                           

DELETE /rest/types/:id

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

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

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

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

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

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

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

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

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

Если связи не существует, получаем ошибку 400.

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

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

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

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

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

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

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

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

/rest/statuses

POST /rest/statuses

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

Создать этап.

// 2.0+
{                            
    "name": "рассмотрение",  // * название этапа
    "visible": true,         // * видимость этапа пользователям в списке этапов
    "default": false,        // * является ли данный этап этапом по умолчанию
    "closed": false,         // * является ли данный этап этапом выполнено
    "color": "000000"        // цвет этапа
}                            

http 200

// 2.0+
{                            
    "id": 1,                 // id этапа
    "name": "рассмотрение",  // название этапа
    "visible": true,         // видимость этапа пользователям в списке этапов
    "default": false,        // является ли данный этап этапом по умолчанию
    "closed": false,         // является ли данный этап этапом выполнено
    "color": "000000"        // цвет этапа
}                            

GET /rest/statuses

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

Параметры

http 200

// 2.0+
{                                    
    "count": 10,                     // количество этапов, удовлетворяющих заданным
                                     // условиям поиска и фильтрации
    "items": [                       
        {                            
            "id": 1,                 // id этапа
            "name": "рассмотрение",  // название этапа
            "visible": true,         // видимость этапа пользователям в списке этапов
            "default": true,         // является ли данный этап этапом по умолчанию
            "closed": false,         // является ли данный этап этапом выполнено
            "color": "000000"        // цвет этапа
        },                           
        ...                          // следующие элементы списка этапов
    ]                                
}                                    

GET /rest/statuses/list/all

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

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

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

http 200

// 2.0+
{                                    
    "count": 10,                     // количество этапов, удовлетворяющих заданным
                                     // условиям поиска и фильтрации
    "items": [                       
        {                            
            "id": 1,                 // id этапа
            "name": "рассмотрение",  // название этапа
            "visible": true,         // видимость этапа пользователям в списке этапов
            "default": true,         // является ли данный этап этапом по умолчанию
            "closed": false,         // является ли данный этап этапом выполнено
            "color": "000000"        // цвет этапа
        },                           
        ...                          // следующие элементы списка этапов
    ]                                
}                                    

POST /rest/statuses/sort

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

Ручная сортировка этапов.

// 2.0+
{             
    "ids": [  // id этапов в отсортированном порядке
        12,   
        1,    
        3,    
        6,    
        2,    
        5     
    ]         
}             

http 200

// 2.0+
{                                    
    "items": [                       
        {                            
            "id": 12,                // id этапа
            "name": "рассмотрение",  // название этапа
            "visible": true,         // видимость этапа пользователям в списке этапов
            "default": true,         // является ли данный этап этапом по умолчанию
            "closed": false,         // является ли данный этап этапом выполнено
            "color": "000000"        // цвет этапа
        },                           
        ...                          // следующие элементы списка этапов
                                     // в заданном порядке сортировки
    ]                                
}                                    

PUT /rest/statuses/:id

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

Изменить этап.

// 2.0+
{                                      
    "name": "подробное рассмотрение",  // название этапа
    "visible": false,                  // видимость этапа пользователям в списке этапов
    "default": false,                  // является ли данный этап этапом по умолчанию
    "closed": true,                    // является ли данный этап этапом выполнено
    "color": "000000"                  // цвет этапа
}                                      

http 200

// 2.0+
{                                      
    "id": 1,                           // id этапа
    "name": "подробное рассмотрение",  // название этапа
    "visible": false,                  // видимость этапа пользователям в списке этапов
    "default": false,                  // является ли данный этап этапом по умолчанию
    "closed": true,                    // является ли данный этап этапом выполнено
    "color": "000000"                  // цвет этапа
}                                      

DELETE /rest/statuses/:id

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

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

/rest/priorities

GET /rest/priorities

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

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

/priorities
/priorities?search=test
/priorities?search=test&sortBy=name&sortDirection=ASC

http 200

// 2.0+
{                                      
    "count": 10,                       // количество приоритетов заданий,
                                       // удовлетворяющих заданным условиям поиска и сортировки
    "items": [                         
        {                              
            "id": 1,                   // id приоритета
            "name": "Плановые",        // название
            "icon": "priority_1.png",  // имя файла пиктограммы
            "order_important": 7       // порядковый номер для сортировки
        },                             
        ...                            // следующие элементы списка приоритетов
    ]                                  
}                                      

POST /rest/priorities/sort

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

Сортировка приоритетов (по полю order_important).

// 2.0+
{             
    "ids": [  // список всех существующих id приоритетов
        39,   
        1,    
        2,    
        3     
    ]         
}             

http 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

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

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

Поле icon имеет значение по умолчанию default_category.png.

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

// 2.0+
{                                                   
    "name": "Плановые",                             // * название приоритета
    "icon": "csnkjnvkd-vjskdnf-vdfnk-vndkjnkl.png"  // имя файла пиктограммы
                                                    // после загрузки на сервер
                                                    // через POST /files
}                                                   

http 200

// 2.0+
{                                                    
    "id": 1,                                         // id приоритета
    "name": "Плановые",                              // название
    "icon": "csnkjnvkd-vjskdnf-vdfnk-vndkjnkl.png",  // имя файла пиктограммы
    "order_important": 7                             // порядковый номер для сортировки
}                                                    

PATCH /rest/priorities/:id

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

Изменить приоритет.

// 2.0+
{                                                   
    "name": "Внеплановые",                          // название приоритета
    "icon": "csnkjnvkd-vjskdnf-vdfnk-vndkjnkl.png"  // имя файла пиктограммы
                                                    // после загрузки на сервер
                                                    // через POST /files
}                                                   

http 200

// 2.0+
{                                                    
    "id": 1,                                         // id приоритета
    "name": "Внеплановые",                           // название
    "icon": "csnkjnvkd-vjskdnf-vdfnk-vndkjnkl.png",  // имя файла пиктограммы
    "order_important": 8                             // порядковый номер для сортировки
}                                                    

DELETE /rest/priorities/:id

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

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

/rest/fields

GET /rest/fields

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

Параметры

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

/fields
/fields?search=test
/fields?search=test&isRequired=false&deleted=false
/fields?isForAll=true&minLength=1&maxLength=10
/fields?sortBy=id&sortDirection=DESC

http 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

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

Ручная сортировка настраиваемых полей.

Сортировке подлежат только неудаленные настраиваемые поля. Отсортированный список будет сохраняться в БД и отдаваться клиентам при последующих запросах списка (в ответе к данному запросу, а также в ответе на 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     
    ]         
}             

http 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

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

Создание нового настраиваемого поля.

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

// 2.0+
{                                               
    "name": "Фактический адрес организации",    // * название нового поля
    "format": "text",                           // * формат данных поля, возможные значения:
                                                // "int", "float", "bool", "geometry",
                                                // "string", "text", "list", "date";
    "group_name": "Информация об организации",  // название группы полей,
                                                // при указании несуществующей
                                                // группы полей в таблицу
                                                // будет добавлена запись.
    "possible_values": [                        // список возможных значений, доступно
                                                // только для поля формата "list", и является
                                                // обязательным параметром для поля формата "list"
        "первое значение",                      
        "второе значение"                       
    ],                                          
    "regexp": "[0-9]{1,3}",                     // регулярное выражение, доступно
                                                // только для полей форматов "string",
                                                // "text", "int", "float"
    "min_length": 2,                            // минимальная длина, доступно только
                                                // для полей форматов "string", "text"
    "max_length": 25,                           // максимальная длина, доступно только
                                                // для полей форматов "string", "text"
    "is_required": true,                        // обязательное ли поле, по умолчанию false
    "default_value": "г.Москва",                // значение по умолчанию, доступно
                                                // для всех форматов полей, за
                                                // исключением формата "geometry",
                                                // значение задается с соответствии
                                                // с форматом поля (текст, число,
                                                // дата, булево значение)
    "visible": true                             // видимость данного поля при отображении
                                                // полной информации по заданию, по умолчанию true
    "types": [                                  // массив id типов заданий, для которых
                                                // поле доступно, если оно не доступно
                                                // всем типам заданий
        12,                                     
        14                                      
    ]                                           
}                                               

При возникновении одной из следующих ситуаций клиенту возвращается статус 400:

http 200

// 2.0+
{                                                  
    "id": 123,                                     // id нового поля
    "name": "Фактический адрес организации",       // название нового поля
    "translit": "Fakticheskiy_adres_organizatsi",  // транслитерация названия поля
    "format": "text",                              // формат данных поля, возможные значения:
                                                   // "int", "float", "bool", "geometry", "string",
                                                   // "text", "list", "date"
    "group_name": "Информация об организации",     // название группы полей, при указании
                                                   // несуществующей группы полей в таблицу
                                                   // будет добавлена запись.
    "possible_values": [                           // список возможных значений, доступно только
                                                   // для поля формата "list"
        "первое значение",                         
        "второе значение"                          
    ],                                             
    "regexp": "[0-9]{1,3}",                        // регулярное выражение, доступно только
                                                   // для полей форматов "string", "text",
                                                   // "int", "float"
    "min_length": 2,                               // минимальная длина, доступно только для
                                                   // полей форматов "string", "text"
    "max_length": 25,                              // максимальная длина, доступно только
                                                   // для полей форматов "string", "text"
    "is_required": true,                           // обязательное ли поле
    "default_value": "РТ, г.Москва",               // значение по умолчанию, доступно для всех
                                                   // форматов полей, за исключением формата "geometry",
                                                   // значение задается с соответствии с форматом
                                                   // поля (текст, число, дата, булево значение)
    "visible": true,                               // видимость данного поля при отображении
                                                   // полной информации по заданию
    "is_for_all": false,                           // доступно ли данное поле для
                                                   // всех типов заданий (видов работ)
    "type_ids": [                                  // массив id типов заданий, для которых
                                                   // поле доступно, если оно не доступно
                                                   // всем типам заданий
        12,                                        
        14                                         
    ],                                             
    "order": 10                                    // номер данного поля для отображения
                                                   // в списке настраиваемых полей
}                                                  

GET /rest/fields/:id

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

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

http 200

// 2.0+
{                                                       
    "id": 123,                                          // id нового поля
    "name": "Адрес филиала организации",                // название поля
    "translit": "string",                               // транслитерация названия поля
    "format": "text",                                   // формат данных поля, возможные значения:
                                                        // "int", "float", "bool", "geometry",
                                                        // "string", "text", "list", "date"
    "group_name": "Информация о филиалах организации",  // название группы полей
    "possible_values": [                                // список возможных значений, доступно
                                                        // только для поля формата "list"
        "первое значение",                              
        "второе значение",                              
        "третье значение"                               
    ],                                                  
    "regexp": "[0-9]{1,3}",                             // регулярное выражение, доступно
                                                        // только для полей форматов
                                                        // "string", "text", "int", "float"
    "min_length": 5,                                    // минимальная длина, доступно только для
                                                        // полей форматов "string", "text"
    "max_length": 50,                                   // максимальная длина, доступно только
                                                        // для полей форматов "string", "text"
    "is_required": false,                               // обязательное ли поле
    "default_value": "РТ, г.Казань",                    // значение по умолчанию, доступно для
                                                        // всех форматов полей, за исключением
                                                        // формата "geometry", значение
                                                        // задается с соответствии с форматом поля
                                                        // (текст, число, дата, булево значение)
    "visible": false,                                   // видимость данного поля при отображении
                                                        // полной информации по заданию
    "is_for_all": false,                                // доступно ли данное поле для
                                                        // всех типов заданий (видов работ)
    "type_ids": [                                       // массив id типов заданий, для которых
                                                        // поле доступно, если оно не доступно
                                                        // всем типам заданий
        12,                                             
        14                                              
    ],                                                  
    "order": 10                                         // номер данного поля для отображения
                                                        // в списке настраиваемых полей
}                                                       

PUT /rest/fields/:id

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

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

Формат поля изменить нельзя, т.к. это может вызвать массовую некорректность данных настраиваемых полей в заданиях.

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

// 2.0+
{                                                       
    "name": "Адрес филиала организации",                // измененное название поля
    "group_name": "Информация о филиалах организации",  // измененное название группы полей
    "possible_values": [                                // список возможных значений,
                                                        // доступно только для поля
                                                        // формата "list"
        "первое значение",                              
        "второе значение",                              
        "третье значение"                               
    ],                                                  
    "regexp": "[0-9]{1,3}",                             // регулярное выражение, доступно
                                                        // только для полей форматов
                                                        // "string", "text", "int", "float"
    "min_length": 5,                                    // минимальная длина, доступно только
                                                        // для полей форматов "string", "text"
    "max_length": 50,                                   // максимальная длина, доступно только
                                                        // для полей форматов "string", "text"
    "is_required": false,                               // обязательное ли поле
    "default_value": "РТ, г.Казань",                    // значение по умолчанию, доступно для
                                                        // всех форматов полей, за исключением
                                                        // формата "geometry", значение
                                                        // задается с соответствии с форматом поля
                                                        // (текст, число, дата, булево значение)
    "visible": false                                    // видимость данного поля при отображении
                                                        // полной информации по заданию
    "types": [                                          // массив id типов заданий, для которых
                                                        // поле доступно, если оно не доступно
                                                        // всем типам заданий
        12,                                             
        14                                              
    ]                                                   
}                                                       

При возникновении одной из следующих ситуаций клиенту возвращается статус 400:

Если массив possible_values не будет передан, то элементы списка не изменятся. При передаче массива possible_values все предыдущие значения списка будут удалены.

http 200

// 2.0+
{                                                       
    "id": 123,                                          // id нового поля
    "name": "Адрес филиала организации",                // название поля
    "translit": "string",                               // транслитерация названия поля
    "format": "text",                                   // формат данных поля, возможные
                                                        // значения: "int", "float", "bool",
                                                        // "geometry", "string", "text", "list", "date"
    "group_name": "Информация о филиалах организации",  // название группы полей
    "possible_values": [                                // список возможных значений, доступно
                                                        // только для поля формата "list"
        "первое значение",                              
        "второе значение",                              
        "третье значение"                               
    ],                                                  
    "regexp": "[0-9]{1,3}",                             // регулярное выражение, доступно только
                                                        // для полей форматов "string", "text",
                                                        // "int", "float"
    "min_length": 5,                                    // минимальная длина, доступно только
                                                        // для полей форматов "string", "text"
    "max_length": 50,                                   // максимальная длина, доступно только
                                                        // для полей форматов "string", "text"
    "is_required": false,                               // обязательное ли поле
    "default_value": "РТ, г.Казань",                    // значение по умолчанию, доступно для
                                                        // всех форматов полей, за исключением
                                                        // формата "geometry", значение
                                                        // задается с соответствии с форматом
                                                        // поля (текст, число, дата, булево значение)
    "visible": false,                                   // видимость данного поля при отображении
                                                        // полной информации по заданию
    "is_for_all": false,                                // доступно ли данное поле для
                                                        // всех типов заданий (видов работ)
    "type_ids": [                                       // массив id типов заданий, для которых
                                                        // поле доступно, если оно не доступно
                                                        // всем типам заданий
        12,                                             
        14                                              
    ],                                                  
    "order": 10                                         // номер данного поля для отображения
                                                        // в списке настраиваемых полей
}                                                       

DELETE /rest/fields/:id

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

Удаление настраиваемого поля.

/rest/files

POST /rest/files

Загрузка файла во временный каталог хранения. Полученное в ответе имя необходимо передать в запрос, в котором файл будет прикрепляться к сущности (например, пиктограмма вида работ - к виду работ, пиктограмма приоритета - к приоритету и т.п.) При этом файл будет перемещён из временного каталога хранения в постоянный (каталог пиктограмм видов работ, каталог пиктограмм приоритетов и т.п.)

Для загрузки файла необходимо указать http-заголовок Body Content Type: multipart/form-data и в теле запроса в поле file указать расположение.

Запрос POST /files можно использовать в паре со всеми запросами на изменение сущности (вида работ, приоритета и т.п.) Но можно загружать файлы сразу в нужный каталог хранения, минуя временный. Для этого следует использовать один из роутов, перечисленных ниже (POST /files/type-icons для пиктограмм видов работ и т.п.)

Исключение составляют файлы, которые нужно будет прикреплять к заданиям (фото, видео, аудио и прочие файлы заданий), потому, что для них помимо помещения в каталог следует выполнить специализированные действия. Здесь следует использовать один из специализированных запросов (POST /files/photos, POST /files/videos, POST /files/sounds, POST /files/files).

http 200

// 2.0+
{                                                       
    "name": "c360f08c-e79f-1004-8be5-8b2398b49a74.jpg"  // имя файла во временном каталоге хранения
}                                                       

POST /rest/files/type-icons

Загрузка файла в каталог пиктограмм видов работ.

POST /rest/files/priority-icons

Загрузка файла в каталог пиктограмм приоритетов.

POST /rest/files/photos

Загрузка фотографии в каталог фотографий задания.

POST /rest/files/videos

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

POST /rest/files/files

Загрузка файла в каталог прочих файлов задания.

POST /rest/files/sounds

Загрузка аудиофайла в каталог аудиофайлов задания.

DELETE /rest/files/:id

Права пользователей на выполнение данного запроса зависят от capability роли пользователя. Понятие capability в обозначает действие, которое можно выполнять с заданием (к которому прикреплен файл). Для того, чтобы пользователь мог выполнить данный запрос, его роль должна иметь capability со свойствами: capability_id = 1, capability_name = "show" и capability_id = 5, capability_name = "edit_files"

Удаление файла, прикрепленного к заданию; fileId - id файла.

/rest/stickers

GET /rest/stickers

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

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

Параметры

http 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

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

Создание стикера.

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

// 2.0+
{                                                                           
    "title": "Показания приборов",                                          // * название стикера
    "description": "Показания приборов после выполнения работ на объекте",  // описание стикера
    "is_for_all": false,                                                    // доступность стикера для
                                                                            // всех видов работ; по
                                                                            // умолчанию true
    "types": [                                                              // массив id видов работ,
                                                                            // к которым прикреплен
                                                                            // текущий стикер
        12,                                                                 
        14                                                                  
    ]                                                                       
}                                                                           

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

http 200

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

PUT /rest/stickers/:id

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

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

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

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

http 200

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

DELETE /rest/stickers/:id

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

Удаление стикера.

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

/rest/schedules

GET /rest/schedules/list

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

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

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

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

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

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

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

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

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

Запрос /list

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

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

Параметры

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

http 200

// 2.0+
  {                                                             
    "page": 1,                                                  // текущая страница
    "total": 37,                                                // всего расписаний
    "limit": 25,                                                // количество на одной странице
    "items": [                                                  // список расписаний
        {                                                       
            "id": 1002,                                         
            "title": "Расписание на май 2018",                  // название расписания
            "worktime": 7200,                                   // дедлайн расписания
            "on": true                                          // включено расписание или нет
            "user": {                                           // информация о пользователе, который создал расписание
                "id": 6,                                        
                "fio": "Захаров Андрей Петрович"                
            },                                                  
            "archive": false,                                   // является ли расписание архивным
            "organization": {                                   // информация об организации расписания
                                                                // (может быть NULL)
                "id": 76,                                       
                "name": "Тестовая организация"                  
            },                                                  //
                                                                //
            "total_template_count": 85,                         // общее количество шаблонов,
                                                                // доступных по правам доступа
                                                                //
            "filtered_template_count": 15,                      // количество шаблонов,
                                                                // доступных по правам доступа и
                                                                // удовлетворяющих фильтрам
                                                                //
            "restricted_access": true,                          // признак того, что текущему
                                                                // пользователю доступны не все шаблоны
                                                                //
            "sample_template": [                                // первый из шаблонов, доступных пользователю,
                                                                // и соответствующих фильтрам
                "id": 32,                                       
                "title": "Задание по расписанию",               
                "num_main_photo": 1,                            // номер главного фото
                "type": {                                       // вид работ
                    "id": 139,                                  
                    "name": "Разукомплектованный автомобиль",   
                    "icon": "icon_139.png"                      
                },                                              
                "priority": {                                   // приоритет
                    "id": 1,                                    
                    "name": "Плановые"                          
                },                                              
                "organization": {                               // организация-владелец
                    "id": 98,                                   
                    "name": "Тестовая организация"              
                },                                              
                "assigned_organization": {                      // назначенная организация
                    "id": 99,                                   
                    "name": "Название назначенной организации"  
                },                                              
                "assigned_user": {                              // исполнитель
                    "id": 599,                                  
                    "fio": "Сникерсов Марс Твиксович"           
                }                                               
            },                                                  //
                                                                //
            "times": [                                          // массив моментов времени, прикрепленных к расписанию
                {                                               
                    "id": 10012,                                
                    "time": 1514829600,                         // время в формате unix timestamp
                    "on": true                                  // включен момент времени или нет
                },                                              
                {                                               
                    "id": 10011,                                
                    "time": 1514808000,                         
                    "on": true                                  
                }                                               
            ],                                                  //
                                                                //
            "dates": [                                          // массив дат запусков расписания
                                                                // (при наличии from и till)
                1609448400,                                     
                1609534800                                      
            ]                                                   
        }                                                       
    ]                                                           
}                                                               

GET /rest/schedules/list/archive

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

Параметры

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

http 200

// 2.0+
  {                                                             
    "page": 1,                                                  // текущая страница
    "total": 37,                                                // всего расписаний
    "limit": 25,                                                // количество на одной странице
    "items": [                                                  // список расписаний
        {                                                       
            "id": 1002,                                         
            "title": "Расписание на май 2018",                  // название расписания
            "worktime": 7200,                                   // дедлайн расписания
            "on": true                                          // включено расписание или нет
            "user": {                                           // информация о пользователе, который создал расписание
                "id": 6,                                        
                "fio": "Захаров Андрей Петрович"                
            },                                                  
            "archive": true,                                    // является ли расписание архивным
            "organization": {                                   // информация об организации расписания
                                                                // (может быть NULL)
                "id": 76,                                       
                "name": "Тестовая организация"                  
            },                                                  //
                                                                //
            "total_template_count": 85,                         // общее количество шаблонов,
                                                                // доступных по правам доступа
                                                                //
            "filtered_template_count": 15,                      // количество шаблонов,
                                                                // доступных по правам доступа и
                                                                // удовлетворяющих фильтрам
                                                                //
            "restricted_access": true,                          // признак того, что текущему
                                                                // пользователю доступны не все шаблоны
                                                                //
            "sample_template": [                                // первый из шаблонов, доступных пользователю,
                                                                // и соответствующих фильтрам
                "id": 32,                                       
                "title": "Задание по расписанию",               
                "num_main_photo": 1,                            // номер главного фото
                "type": {                                       // вид работ
                    "id": 139,                                  
                    "name": "Разукомплектованный автомобиль",   
                    "icon": "icon_139.png"                      
                },                                              
                "priority": {                                   // приоритет
                    "id": 1,                                    
                    "name": "Плановые"                          
                },                                              
                "organization": {                               // организация-владелец
                    "id": 98,                                   
                    "name": "Тестовая организация"              
                },                                              
                "assigned_organization": {                      // назначенная организация
                    "id": 99,                                   
                    "name": "Название назначенной организации"  
                },                                              
                "assigned_user": {                              // исполнитель
                    "id": 599,                                  
                    "fio": "Сникерсов Марс Твиксович"           
                }                                               
            },                                                  //
                                                                //
            "times": [                                          // массив моментов времени, прикрепленных к расписанию
                {                                               
                    "id": 10012,                                
                    "time": 1514829600,                         // время в формате unix timestamp
                    "on": true                                  // включен момент времени или нет
                },                                              
                {                                               
                    "id": 10011,                                
                    "time": 1514808000,                         
                    "on": true                                  
                }                                               
            ],                                                  //
                                                                //
            "dates": [                                          // массив дат запусков расписания
                                                                // (при наличии from и till)
                1609448400,                                     
                1609534800                                      
            ]                                                   
        }                                                       
    ]                                                           
}                                                               

POST /rest/schedules

Создание нового расписания.

Главный администратор, Главный инспектор, Администратор кластера (может создать расписание в доступных ему проектах), Администратор организации (может создать расписание в доступных ему проектах), Инспектор организации (может создать расписание в доступных ему проектах).

{                                  
    "title": "Расписание на май",  // * название расписания
    "organization": {              // организация расписания; необязательно;
                                   // для админа/инспектора организации
                                   // по умолчанию подставится его организация
        "id": 134                  
    },                             
    "worktime": 3600,              // срок выполнения (в секундах) для заданий,
                                   // которые будут созданы по этому расписанию;
                                   // если не задан, в момент создания задания
                                   // берётся из вида работ шаблонного задания
                                   //
    "on": true,                    // включено расписание или нет
                                   //
                                   //
    "templates": [                 // id заданий-шаблонов, по которым составляется расписание;
        {                          
            "id": 1279826          
        },                         
        ...                        
    ],                             //
                                   //
    "dates": [                     // массив дней для расписания;
        1526342400,                // время может быть любое, оно будет отброшено
        ...                        
    }                              //
                                   //
    "times": [                     // моменты времени для расписания
        {                          
            "time": 1514829600,    // для новых моментов времени нужно передать время запуска в формате timestamp;
                                   // (дата может быть любая, она будет отброшена)
            "on": true             
        },                         
        ...                        
    ]                              
}                                  

http 200

// 2.0+
  {                                           
    "id": 1002,                               // id расписания
    "title": "Расписание на май",             // название расписания
    "worktime": 3600,                         // срок выполнения создаваемых заданий
    "on": true,                               // включено расписание или нет
    "user": {                                 // информация о пользователе, который создал расписание
        "id": 6,                              
        "fio": "Захаров Андрей Петрович"      
    },                                        
    "archive": false,                         // является ли расписание архивным
    "organization": {                         // организация
        "id": 134,                            
        "name": "Отдел разработки"            
    }                                         //
                                              //
    "total_template_count": 85,               // общее количество шаблонов,
                                              // доступных по правам доступа
    "restricted_access": true,                // признак того, что текущему
                                              // пользователю доступны не все шаблоны
                                              //
    "templates": [                            // информация по доступным заданиям-шаблоным
        {                                     
            "id": 1279826,                    
            "title": "Доставка оборудования"  // заголовок задания
        },                                    
    ],                                        //
                                              //
    "times": [                                // массив моментов времени, прикрепленных к расписанию
        {                                     
            "id": 10012,                      
            "time": 1514829600,               // время в формате unix timestamp
            "on": true                        // включен момент времени или нет
        },                                    
        ...                                   
    ],                                        
}                                             

PATCH /rest/schedules/:id

Главный администратор, Главный инспектор, Администратор кластера (если ему доступен проект расписания), Администратор организации (если ему доступен проект расписания), Инспектор организации (если ему доступен проект расписания).

Изменение расписания.

Можно изменить поля 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                  
        }                               
    ]                                   
}                                       

http 200

// 2.0+
  {                                           
    "id": 1002,                               
    "title": "Расписание на май 2018",        // название расписания
    "worktime": 7200,                         // дедлайн расписания
    "on": true                                // включено расписание или нет
    "user": {                                 // информация о пользователе, который создал расписание
        "id": 6,                              
        "fio": "Захаров Андрей Петрович"      
    },                                        
    "archive": false,                         // является ли расписание архивным
    "organization": {                         // организация
        "id": 134,                            
        "name": "Отдел разработки"            
    }                                         //
                                              //
    "total_template_count": 85,               // общее количество шаблонов,
                                              // доступных по правам доступа
    "restricted_access": true,                // признак того, что текущему
                                              // пользователю доступны не все шаблоны
                                              //
    "templates": [                            // информация по доступным заданиям-шаблоным
        {                                     
            "id": 1279826,                    
            "title": "Доставка оборудования"  // заголовок задания
        },                                    
    ],                                        //
                                              //
    "times": [                                // массив моментов времени, прикрепленных к расписанию
        {                                     
            "id": 10012,                      
            "time": 1514829600,               // время в формате unix timestamp
            "on": true                        // включен момент времени или нет
        },                                    
        {                                     
            "id": 10011,                      
            "time": 1514808000,               
            "on": true                        
        }                                     
    ]                                         
}                                             

DELETE /rest/schedules/:id

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

Главный администратор, Администратор кластера (если ему доступен проект расписания), Администратор организации (если ему доступен проект расписания)

GET /rest/schedules/stats

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

Параметры

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

http 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                 
        }                               
    ]                                   
}                                       

GET /rest/schedules/runs

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

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

Параметры

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

http 200

2.0+
{                                                                   
    "items": [                                                      
        {                                                           
            "time": {                                               // time запуска
                "id": 115241,                                       
                "time": 1546311600,                                 
                "on": true                                          
            },                                                      
            "schedule": {                                           // ссылка на родительское расписание
                "id": 1002,                                         
                "title": "Расписание на май 2018",                  // название расписания
                "worktime": 7200,                                   // дедлайн расписания
                "archive": false,                                   // является ли расписание архивным
                "on": true                                          // включено расписание или нет
                "user": {                                           // информация о пользователе, который создал расписание
                    "id": 6,                                        
                    "fio": "Захаров Андрей Петрович"                
                },                                                  
                "organization": {                                   // информация об организации расписания
                                                                    // (может быть NULL)
                    "id": 76,                                       
                    "name": "Тестовая организация"                  
                },                                                  //
                                                                    //
                "total_template_count": 85,                         // общее количество шаблонов,
                                                                    // доступных по правам доступа
                                                                    //
                "filtered_template_count": 15,                      // количество шаблонов,
                                                                    // доступных по правам доступа и
                                                                    // удовлетворяющих фильтрам
                                                                    //
                "restricted_access": true,                          // признак того, что текущему
                                                                    // пользователю доступны не все шаблоны
                                                                    //
                "sample_template": [                                // первый из шаблонов, доступных пользователю,
                                                                    // и соответствующих фильтрам
                    "id": 32,                                       
                    "title": "Задание по расписанию",               
                    "num_main_photo": 1,                            // номер главного фото
                    "type": {                                       // вид работ
                        "id": 139,                                  
                        "name": "Разукомплектованный автомобиль",   
                        "icon": "icon_139.png"                      
                    },                                              
                    "priority": {                                   // приоритет
                        "id": 1,                                    
                        "name": "Плановые"                          
                    },                                              
                    "organization": {                               // организация-владелец
                        "id": 98,                                   
                        "name": "Тестовая организация"              
                    },                                              
                    "assigned_organization": {                      // назначенная организация
                        "id": 99,                                   
                        "name": "Название назначенной организации"  
                    },                                              
                    "assigned_user": {                              // исполнитель
                        "id": 599,                                  
                        "fio": "Сникерсов Марс Твиксович"           
                    }                                               
                },                                                  //
                                                                    //
                "times": [                                          // массив моментов времени, прикрепленных к расписанию
                    {                                               
                        "id": 10012,                                
                        "time": 1514829600,                         // время в формате unix timestamp
                        "on": true                                  // включен момент времени или нет
                    },                                              
                    {                                               
                        "id": 10011,                                
                        "time": 1514808000,                         
                        "on": true                                  
                    }                                               
                ]                                                   
            },                                                      
            "datetime": 1579489200,                                 // дата и время
            "on": true,                                             // признак включенного запуска
            "stats": {                                              // статистика
                "off": 0,                                           // выключенные задания
                "fail": 0,                                          // не создано из-за ошибок
                "missed": 0,                                        // создание просрочено (более 15 мин назад)
                "planned": 0,                                       // запланированные задания
                "created": 163,                                     // созданные задания
                "done_expired": 55,                                 // просроченные задания, находящиеся в стадии 2 - завершено
                "done_not_expired": 88,                             // непросроченные задания, находящиеся в стадии 2 - завершено
                "rejected_expired": 0,                              // просроченные задания, находящиеся в стадии 0 - отклонено
                "rejected_not_expired": 0,                          // непросроченные задания, находящиеся в стадии 0 - отклонено
                "working_expired": 20,                              // просроченные задания, находящиеся в стадии 1 - в работе
                "working_not_expired": 0,                           // непросроченные задания, находящиеся в стадии 1 - в работе
                "on": 163                                           // включенные задания (planned + created + fail + missed + прочие)
            }                                                       
        },                                                          
        ...                                                         
    ]                                                               
}                                                                   

GET /rest/schedules/tasks

DONE!

Главный администратор, Главный инспектор, Администратор кластера, Администратор организации, Инспектор организации

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

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

Параметры

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

http 200

2.0+
 {                                                              
    "items": [                                                  //
        {                                                       // успешно созданное задание по расписанию
            "run": {                                            // ссылка на родительский запуск
                "datetime": 1514829600,                         // дата и время запуска
                "on": true,                                     // признак включенного запуска
                "time": {                                       // time запуска
                    "id": 10010,                                
                    "time": 1514829600,                         
                    "on": true                                  
                },                                              
                "schedule": {                                   // ссылка на родительское расписание
                    "id": 972,                                  
                    "title": "Заголовок расписания",            
                    "worktime": 3600,                           // срок выполнения заданий в секундах
                    "on": true,                                 // признак включённого расписания
                    "user": {                                   // пользователь-создатель
                        "id": 6,                                
                        "fio": "Захаров Андрей Петрович"        
                    },                                          
                    "archive": false,                           // является ли расписание архивным
                    "organization": {                           // информация об организации расписания
                                                                // (может быть NULL)
                        "id": 76,                               
                        "name": "Тестовая организация"          
                    },                                          
                    "total_template_count": 85,                 // общее количество шаблонов,
                                                                // доступных по правам доступа
                    "restricted_access": true,                  // признак того, что текущему
                                                                // пользователю доступны не все шаблоны
                }                                               
            },                                                  
            "task": {                                           // созданное задание
                "id": 198,                                      
                "title": "Задание по расписанию",               
                "date": 1514829600,                             // дата задания
                "deadline": 1514833200,                         // срок выполнения
                "stage": 1,                                     // стадия
                "num_main_photo": 1,                            // номер главного фото
                "type": {                                       // вид работ
                    "id": 139,                                  
                    "name": "Разукомплектованный автомобиль",   
                    "icon": "icon_139.png"                      
                },                                              
                "priority": {                                   // приоритет
                    "id": 1,                                    
                    "name": "Плановые"                          
                },                                              
                "organization": {                               // организация-владелец
                    "id": 98,                                   
                    "name": "Тестовая организация"              
                },                                              
                "assigned_organization": {                      // назначенная организация
                    "id": 99,                                   
                    "name": "Название назначенной организации"  
                },                                              
                "assigned_user": {                              // исполнитель
                    "id": 599,                                  
                    "fio": "Сникерсов Марс Твиксович"           
                },                                              
                "status": {                                     // этап
                    "name": "новое",                            
                    "color": "0000ff"                           
                },                                              
                "update_date": 1514829600,                      // дата последнего изменения
                "deleted": null                                 // признак удалённого задания = deleted != null
            },                                                  //
                                                                //
            "template": {                                       // шаблон-основа для задания
                "id": 32,                                       
                "title": "Задание по расписанию",               
                "num_main_photo": 1,                            // номер главного фото
                "type": {                                       // вид работ
                    "id": 139,                                  
                    "name": "Разукомплектованный автомобиль",   
                    "icon": "icon_139.png"                      
                },                                              
                "priority": {                                   // приоритет
                    "id": 1,                                    
                    "name": "Плановые"                          
                },                                              
                "organization": {                               // организация-владелец
                    "id": 98,                                   
                    "name": "Тестовая организация"              
                },                                              
                "assigned_organization": {                      // назначенная организация
                    "id": 99,                                   
                    "name": "Название назначенной организации"  
                },                                              
                "assigned_user": {                              // исполнитель
                    "id": 599,                                  
                    "fio": "Сникерсов Марс Твиксович"           
                }                                               
            },                                                  
            "template_deleted": false                           // признак того, что шаблон
                                                                // в настоящее время удалён
                                                                //
                                                                //
            "fail": null                                        // поле сообщения об ошибке пусто
        },                                                      
        {                                                       // запланированное или просроченное задание
            "launch": {...},                                    
            "task": null,                                       
            "template": {...},                                  // задание-шаблон
            "template_deleted": false                           // признак того, что шаблон
                                                                // в настоящее время удалён
            "fail": null                                        // поле сообщения об ошибке пусто
        },                                                      
        {                                                       // при создании задания произошла ошибка
            "launch": {...},                                    
            "task": null,                                       
            "template": {...},                                  // задание-шаблон
            "template_deleted": false                           // признак того, что шаблон
                                                                // в настоящее время удалён
            "fail": "Текст ошибки"                              
        },                                                      
        ...                                                     
    ],                                                          //
                                                                //
    "total": 117                                                // общее количество заданий,
                                                                // удовлетворяющих фильтрам
}                                                               

GET /rest/schedules/:id

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

Главный администратор, Главный инспектор, Администратор кластера (если проект расписания ему доступен), Администратор организации (если проект расписания ему доступен), Инспектор организации (если проект расписания ему доступен), Любой авторизованный пользователь, у которого есть права на "show" хотя бы одного шаблона, даже удаленного из расписания.

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

http 200

{                                                                      
    "id": 1002,                                                        
    "title": "Расписание на май 2018",                                 // название расписания
    "worktime": 7200,                                                  // дедлайн расписания
    "on": true                                                         // включено расписание или нет
    "user": {                                                          // информация о пользователе, который создал расписание
        "id": 6,                                                       
        "fio": "Захаров Андрей Петрович"                               
    },                                                                 
    "archive": false,                                                  // является ли расписание архивным
    "organization": {                                                  // информация об организации расписания
                                                                       // (может быть NULL)
        "id": 76,                                                      
        "name": "Тестовая организация"                                 
    },                                                                 //
                                                                       //
    "total_template_count": 85,                                        // общее количество шаблонов,
                                                                       // доступных по правам доступа
                                                                       //
    "restricted_access": true,                                         // признак того, что текущему
                                                                       // пользователю доступны не все шаблоны
                                                                       //
    "templates": [                                                     // информация по заданиям-шаблонам,
                                                                       // доступным текущему пользователю
        {                                                              
            "id": 32,                                                  
            "title": "Задание по расписанию",                          
            "text": "Текст задания по расписанию""num_main_photo": 1,  // номер главного фото
            "type": {                                                  // вид работ
                "id": 139,                                             
                "name": "Разукомплектованный автомобиль",              
                "icon": "icon_139.png"                                 
            },                                                         
            "priority": {                                              // приоритет
                "id": 1,                                               
                "name": "Плановые"                                     
            },                                                         
            "organization": {                                          // организация-владелец
                "id": 98,                                              
                "name": "Тестовая организация"                         
            },                                                         
            "assigned_organization": {                                 // назначенная организация
                "id": 99,                                              
                "name": "Название назначенной организации"             
            },                                                         
            "assigned_user": {                                         // исполнитель
                "id": 599,                                             
                "fio": "Сникерсов Марс Твиксович"                      
            }                                                          
        },                                                             
    ],                                                                 //
                                                                       //
    "times": [                                                         // массив моментов времени, прикрепленных к расписанию
        {                                                              
            "id": 10012,                                               
            "time": 1514829600,                                        // время в формате unix timestamp
            "on": true                                                 // включен момент времени или нет
        },                                                             
        {                                                              
            "id": 10011,                                               
            "time": 1514808000,                                        
            "on": true                                                 
        }                                                              
    ]                                                                  
}                                                                      

GET /rest/schedules/:id/dates

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

Главный администратор, Главный инспектор, Администратор кластера (если проект расписания ему доступен), Администратор организации (если проект расписания ему доступен), Инспектор организации (если проект расписания ему доступен), Любой авторизованный пользователь, у которого есть права на "show" хотя бы одного шаблона, даже удаленного из расписания.

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

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

http 200

{                                                           
    "page": 1,                                              // текущая страница
    "total": 37,                                            // всего шаблонов доступно
    "limit": 25,                                            // количество на одной странице
    "items": [                                              // информация по заданиям-шаблонам,
                                                            // доступным текущему пользователю
        {                                                   
            "id": 32,                                       
            "title": "Задание по расписанию",               
            "num_main_photo": 1,                            // номер главного фото
            "type": {                                       // вид работ
                "id": 139,                                  
                "name": "Разукомплектованный автомобиль",   
                "icon": "icon_139.png"                      
            },                                              
            "priority": {                                   // приоритет
                "id": 1,                                    
                "name": "Плановые"                          
            },                                              
            "organization": {                               // организация-владелец
                "id": 98,                                   
                "name": "Тестовая организация"              
            },                                              
            "assigned_organization": {                      // назначенная организация
                "id": 99,                                   
                "name": "Название назначенной организации"  
            },                                              
            "assigned_user": {                              // исполнитель
                "id": 599,                                  
                "fio": "Сникерсов Марс Твиксович"           
            }                                               
        },                                                  
    ]                                                       
}                                                           

POST /rest/schedules/:id/archive

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

Отправить расписание в архив.

http 200

{                                         
    "id": 1002,                           
    "title": "Расписание на май 2018",    // название расписания
    "worktime": 7200,                     // дедлайн расписания
    "on": true                            // включено расписание или нет
    "user": {                             // информация о пользователе, который создал расписание
        "id": 6,                          
        "fio": "Захаров Андрей Петрович"  
    },                                    
    "archive": true,                      // является ли расписание архивным
    "organization": {                     // информация об организации расписания
                                          // (может быть NULL)
        "id": 76,                         
        "name": "Тестовая организация"    
    },                                    //
                                          //
    "total_template_count": 85,           // общее количество шаблонов,
                                          // доступных по правам доступа
                                          //
    "restricted_access": true,            // признак того, что текущему
                                          // пользователю доступны не все шаблоны
                                          //
}                                         

DELETE /rest/schedules/:id/archive

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

Убрать расписание из архива.

http 200

{                                         
    "id": 1002,                           
    "title": "Расписание на май 2018",    // название расписания
    "worktime": 7200,                     // дедлайн расписания
    "on": true                            // включено расписание или нет
    "user": {                             // информация о пользователе, который создал расписание
        "id": 6,                          
        "fio": "Захаров Андрей Петрович"  
    },                                    
    "archive": false,                     // является ли расписание архивным
    "organization": {                     // информация об организации расписания
                                          // (может быть NULL)
        "id": 76,                         
        "name": "Тестовая организация"    
    },                                    //
                                          //
    "total_template_count": 85,           // общее количество шаблонов,
                                          // доступных по правам доступа
                                          //
    "restricted_access": true,            // признак того, что текущему
                                          // пользователю доступны не все шаблоны
                                          //
}                                         

/rest/chats

/rest/addresses

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

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

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

Параметры

http 200

// 2.0+
{                                                                                                 
    "items": [                                                                                    
        {                                                                                         
            "lng": 49.14210192142546,                                                             // долгота
            "lat": 55.77440909550581,                                                             // широта
            "kind": "10",                                                                         
            "label": "Российская Федерация, Татарстан, Казань, улица Нурсултана Назарбаева, 27",  
            "formattedLabel": "Казань, улица Нурсултана Назарбаева, 27"                           
        }                                                                                         
    ]                                                                                             
}                                                                                                 

/rest/scripts

GET /rest/scripts/status

Любой пользователь.

Проверить наличие JEP.

http 200

// 2.0+
{                    
    "started": true  // установлена ли JEP-библиотека
}                    

GET /rest/scripts/list

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

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

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

Параметры

http 200

// 2.0+
{                                                     
    "items": [                                        
        {                                             
            "id": 1,                                  // id скрипта
            "script": "return valid()",               // скрипт
            "title": "test 1",                        // название
            "description": "description",             // описание
            "on": false,                              // включен скрипт или нет
            "created_by": {                           // создатель
                "id": 6,                              
                "fio": "Администратор"                
            },                                        
            "create_date": 1618388512,                // дата создания
            "workgroups": [                           // привязка к проектам
                                                      // (разрешено несколько значений; ни одного значения означает любое значения)
                {                                     
                    "id": 188,                        
                    "title": "По умолчанию"           
                }                                     
            ],                                        
            "types": [                                // привязка к видам работ
                                                      // (разрешено несколько значений; ни одного значения означает любое значения)
                {                                     
                    "id": 139,                        
                    "name": "Брошенный автомобиль",   
                    "icon": "icon_139.png"            
                }                                     
            ],                                        
            "priorities": [                           // привязка к приоритетам
                                                      // (разрешено несколько значений; ни одного значения означает любое значения)
                {                                     
                    "id": 167,                        
                    "name": "Дополнительные"          
                }                                     
            ],                                        
            "roles": [                                // привязка к ролям
                                                      // (разрешено несколько значений; ни одного значения означает любое значения)
                {                                     
                    "id": 11,                         
                    "name": "Инспектор организации",  
                    "code": "ORG_INSPECTOR"           
                }                                     
            ],                                        
            "statuses_before": [                      // этап задания до изменения
                                                      // (разрешено несколько значений; ни одного значения означает любое значения)
                {                                     
                    "id": 1,                          
                    "name": "new"                     
                }                                     
            ],                                        
            "statuses_after": [                       // этап задания после изменения
                                                      // (разрешено несколько значений; ни одного значения означает любое значения)
                {                                     
                    "id": 2,                          
                    "name": "назначено"               
                }                                     
            ],                                        
            "stages_before": [                        // стадия задания до изменения
                                                      // возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
                                                      // (разрешено несколько значений; ни одного значения означает любое значения)
                1                                     
            ],                                        
            "stages_after": [                         // стадия задания после изменения
                                                      // возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
                                                      // (разрешено несколько значений; ни одного значения означает любое значения)
                0                                     
            ],                                        
            "type": "VALIDATION",                     // тип плагина. Возможные значения - VALIDATION, REACTION
            "operation": "UPDATE"                     // операция над заданием. Возможные значения - INSERT, UPDATE
        }                                             
    ],                                                
    "total": 1,                                       // общее количество элементов
    "limit": 25,                                      // максимальное количество элементов на странице
    "page": 1                                         // текущая страница
}                                                     

GET /rest/scripts/:id

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

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

http 200

// 2.0+
{                                             
    "id": 1,                                  // id скрипта
    "script": "return valid()",               // скрипт
    "title": "test 1",                        // название
    "description": "description",             // описание
    "on": false,                              // включен скрипт или нет
    "created_by": {                           // создатель
        "id": 6,                              
        "fio": "Администратор"                
    },                                        
    "create_date": 1618388512,                // дата создания
    "workgroups": [                           // привязка к проектам
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 188,                        
            "title": "По умолчанию"           
        }                                     
    ],                                        
    "types": [                                // привязка к видам работ
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 139,                        
            "name": "Брошенный автомобиль",   
            "icon": "icon_139.png"            
        }                                     
    ],                                        
    "priorities": [                           // привязка к приоритетам
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 167,                        
            "name": "Дополнительные"          
        }                                     
    ],                                        
    "roles": [                                // привязка к ролям
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 11,                         
            "name": "Инспектор организации",  
            "code": "ORG_INSPECTOR"           
        }                                     
    ],                                        
    "statuses_before": [                      // этап задания до изменения
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 1,                          
            "name": "new"                     
        }                                     
    ],                                        
    "statuses_after": [                       // этап задания после изменения
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 2,                          
            "name": "назначено"               
        }                                     
    ],                                        
    "stages_before": [                        // стадия задания до изменения
                                              // возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        1                                     
    ],                                        
    "stages_after": [                         // стадия задания после изменения
                                              // возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        0                                     
    ],                                        
    "type": "VALIDATION",                     // тип плагина. Возможные значения - VALIDATION, REACTION
    "operation": "UPDATE"                     // операция над заданием. Возможные значения - INSERT, UPDATE
}                                             

POST /rest/scripts

Главный администратор.

Добавление нового скрипта.

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

// 2.0+
{                                  
    "script": "return valid()",    // * скрипт
    "title": "test 1",             // * название скрипта
    "operation": "UPDATE",         // * операция над заданием. Возможные значения - INSERT, UPDATE
    "type": "VALIDATION",          // * тип плагина. Возможные значения - VALIDATION, REACTION
    "description": "description",  // описание
    "on": true,                    // включен скрипт или нет (по умолчанию - true)
    "workgroups": [                // привязка к проектам
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        {                          
            "id": 188              
        }                          
    ],                             
    "types": [                     // привязка к видам работ
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        {                          
            "id": 139              
        }                          
    ],                             
    "priorities": [                // привязка к приоритетам
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        {                          
            "id": 167              
        }                          
    ],                             
    "roles": [                     // привязка к ролям
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        {                          
            "id": 11               
        }                          
    ],                             
    "statuses_before": [           // этап задания до изменения
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        {                          
            "id": 2                
        }                          
    ],                             
    "statuses_after": [            // этап задания после изменения
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        {                          
            "id": 3                
        }                          
    ],                             
    "stages_before": [             // стадия задания до изменения
                                   // возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        1                          
    ],                             
    "stages_after": [              // стадия задания после изменения
                                   // возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        0                          
    ]                              
}                                  

http 200

// 2.0+
{                                             
    "id": 1,                                  // id скрипта
    "script": "return valid()",               // скрипт
    "title": "test 1",                        // название
    "description": "description",             // описание
    "on": false,                              // включен скрипт или нет
    "created_by": {                           // создатель
        "id": 6,                              
        "fio": "Администратор"                
    },                                        
    "create_date": 1618388512,                // дата создания
    "workgroups": [                           // привязка к проектам
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 188,                        
            "title": "По умолчанию"           
        }                                     
    ],                                        
    "types": [                                // привязка к видам работ
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 139,                        
            "name": "Брошенный автомобиль",   
            "icon": "icon_139.png"            
        }                                     
    ],                                        
    "priorities": [                           // привязка к приоритетам
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 167,                        
            "name": "Дополнительные"          
        }                                     
    ],                                        
    "roles": [                                // привязка к ролям
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 11,                         
            "name": "Инспектор организации",  
            "code": "ORG_INSPECTOR"           
        }                                     
    ],                                        
    "statuses_before": [                      // этап задания до изменения
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 1,                          
            "name": "new"                     
        }                                     
    ],                                        
    "statuses_after": [                       // этап задания после изменения
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 2,                          
            "name": "назначено"               
        }                                     
    ],                                        
    "stages_before": [                        // стадия задания до изменения
                                              // возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        1                                     
    ],                                        
    "stages_after": [                         // стадия задания после изменения
                                              // возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        0                                     
    ],                                        
    "type": "VALIDATION",                     // тип плагина. Возможные значения - VALIDATION, REACTION
    "operation": "UPDATE"                     // операция над заданием. Возможные значения - INSERT, UPDATE
}                                             

PATCH /rest/scripts/:id

Главный администратор.

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

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

// 2.0+
{                                  
    "script": "return valid()",    // скрипт
    "title": "test 1",             // название скрипта
    "description": "description",  // описание
    "on": true,                    // включен скрипт или нет (по умолчанию - true)
    "workgroups": [                // привязка к проектам
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        {                          
            "id": 188              
        }                          
    ],                             
    "types": [                     // привязка к видам работ
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        {                          
            "id": 139              
        }                          
    ],                             
    "priorities": [                // привязка к приоритетам
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        {                          
            "id": 167              
        }                          
    ],                             
    "roles": [                     // привязка к ролям
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        {                          
            "id": 11               
        }                          
    ],                             
    "statuses_before": [           // этап задания до изменения
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        {                          
            "id": 2                
        }                          
    ],                             
    "statuses_after": [            // этап задания после изменения
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        {                          
            "id": 3                
        }                          
    ],                             
    "stages_before": [             // стадия задания до изменения
                                   // возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        1                          
    ],                             
    "stages_after": [              // стадия задания после изменения
                                   // возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
                                   // (разрешено несколько значений; ни одного значения означает любое значения)
        0                          
    ],                             
    "type": "VALIDATION",          // тип плагина. Возможные значения - VALIDATION, REACTION
    "operation": "UPDATE"          // операция над заданием. Возможные значения - INSERT, UPDATE
}                                  

http 200

// 2.0+
{                                             
    "id": 1,                                  // id скрипта
    "script": "return valid()",               // скрипт
    "title": "test 1",                        // название
    "description": "description",             // описание
    "on": false,                              // включен скрипт или нет
    "created_by": {                           // создатель
        "id": 6,                              
        "fio": "Администратор"                
    },                                        
    "create_date": 1618388512,                // дата создания
    "workgroups": [                           // привязка к проектам
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 188,                        
            "title": "По умолчанию"           
        }                                     
    ],                                        
    "types": [                                // привязка к видам работ
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 139,                        
            "name": "Брошенный автомобиль",   
            "icon": "icon_139.png"            
        }                                     
    ],                                        
    "priorities": [                           // привязка к приоритетам
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 167,                        
            "name": "Дополнительные"          
        }                                     
    ],                                        
    "roles": [                                // привязка к ролям
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 11,                         
            "name": "Инспектор организации",  
            "code": "ORG_INSPECTOR"           
        }                                     
    ],                                        
    "statuses_before": [                      // этап задания до изменения
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 1,                          
            "name": "new"                     
        }                                     
    ],                                        
    "statuses_after": [                       // этап задания после изменения
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        {                                     
            "id": 2,                          
            "name": "назначено"               
        }                                     
    ],                                        
    "stages_before": [                        // стадия задания до изменения
                                              // возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        1                                     
    ],                                        
    "stages_after": [                         // стадия задания после изменения
                                              // возможные значения: 0 - отказано, 1 - в работе, 2 - завершено
                                              // (разрешено несколько значений; ни одного значения означает любое значения)
        0                                     
    ],                                        
    "type": "VALIDATION",                     // тип плагина. Возможные значения - VALIDATION, REACTION
    "operation": "UPDATE"                     // операция над заданием. Возможные значения - INSERT, UPDATE
}                                             

DELETE /rest/scripts/:id

Главный администратор.

Удаление скрипта.

/rest/logs

GET /rest/logs/list

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

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

Параметры

// 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/service-objects

GET /rest/service-objects/mappings/list

Список маппингов.

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

Параметры

http 200

// 2.0+
{                                                             
    "items": [                                                
        {                                                     
            "id": 63,                                         // id
            "search_params": "size=20&default_operator=AND",  // параметры поиска
            "search_field": "adress",                         // атрибут поиска
            "sort": "adress:desc",                            // атрибут и направление сортировки
            "layer": {                                        // слой
                "id": 5                                       // id слоя
                "title": "Сервисные объекты",                 // название
                "name": "service_objects_vw"                  // название индекса
            },                                                
            "geo_json_field": "the_geom.coordinates",         // атрибут с координатами
            "title_format": "{0}",                            // формат названия
            "title_fields": [                                 // атрибуты названия
                "address"                                     
            ],                                                
            "fields": [                                       // атрибуты
                "fid",                                        
                "address",                                    
                "the_geom.coordinates"                        
            ],                                                
            "field_mappings": [                               // соответствие атрибутов и полей
                {                                             
                    "format": "{0}-{1}",                      // формат
                    "type": "CustomField",                    // тип. Возможные значения: CustomField, Title, Description
                    "fields": [                               // атрибуты формата
                        "fid",                                
                        "address"                             
                    ],                                        
                    "field_id": 2                             // id настраиваемого поля
                },                                            
                {                                             
                    "format": "{0}-title-{1}",                
                    "type": "Title",                          
                    "fields": [                               
                        "address",                            
                        "fid"                                 
                    ]                                         
                },                                            
                {                                             
                    "format": "{0}-desc-{1}",                 
                    "type": "Description",                    
                    "fields": [                               
                        "address",                            
                        "fid"                                 
                    ]                                         
                }                                             
            ]                                                 
        }                                                     
    ],                                                        
    "total": 1,                                               // общее количество элементов
    "limit": 25,                                              // максимальное количество элементов на странице
    "page": 1                                                 // текущая страница
}                                                             

GET /rest/service-objects/mappings/:id

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

http 200

// 2.0+
{                                                     
    "id": 63,                                         // id
    "search_params": "size=20&default_operator=AND",  // параметры поиска
    "search_field": "adress",                         // атрибут поиска
    "sort": "adress:desc",                            // атрибут и направление сортировки
    "layer": {                                        // слой
        "id": 5                                       // id слоя
        "title": "Сервисные объекты",                 // название
        "name": "service_objects_vw"                  // название индекса
    },                                                
    "geo_json_field": "the_geom.coordinates",         // атрибут с координатами
    "title_format": "{0}",                            // формат названия
    "title_fields": [                                 // атрибуты названия
        "address"                                     
    ],                                                
    "fields": [                                       // атрибуты
        "fid",                                        
        "address",                                    
        "the_geom.coordinates"                        
    ],                                                
    "field_mappings": [                               // соответствие атрибутов и полей
        {                                             
            "format": "{0}-{1}",                      // формат
            "type": "CustomField",                    // тип. Возможные значения: CustomField, Title, Description
            "fields": [                               // атрибуты формата
                "fid",                                
                "address"                             
            ],                                        
            "field_id": 2                             // id настраиваемого поля
        },                                            
        {                                             
            "format": "{0}-title-{1}",                
            "type": "Title",                          
            "fields": [                               
                "address",                            
                "fid"                                 
            ]                                         
        },                                            
        {                                             
            "format": "{0}-desc-{1}",                 
            "type": "Description",                    
            "fields": [                               
                "address",                            
                "fid"                                 
            ]                                         
        }                                             
    ]                                                 
}                                                     

POST /rest/service-objects/mappings

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

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

// 2.0+
{                                                     
    "search_params": "size=20&default_operator=AND",  // параметры поиска
    "search_field": "adress",                         // * атрибут поиска
    "sort": "adress:desc",                            // * атрибут и направление сортировки
    "layer": {                                        // * слой
        "id": 5                                       // id слоя
    },                                                
    "geo_json_field": "the_geom.coordinates",         // атрибут с координатами
    "title_format": "{0}",                            // * формат названия
    "title_fields": [                                 // * атрибуты названия
        "address"                                     
    ],                                                
    "fields": [                                       // * атрибуты
        "fid",                                        
        "address",                                    
        "the_geom.coordinates"                        
    ],                                                
    "field_mappings": [                               // соответствие атрибутов и полей
        {                                             
            "type": "CustomField",                    // * тип. Возможные значения: CustomField, Title, Description
            "field_id": 2,                            // id настраиваемого поля
            "format": "{0}-{1}",                      // * формат
            "fields": [                               // * атрибуты формата
                "fid",                                
                "address"                             
            ]                                         
        },                                            
        {                                             
            "type": "Title",                          
            "format": "{0}-title-{1}",                
            "fields": [                               
                "address",                            
                "fid"                                 
            ]                                         
        },                                            
        {                                             
            "type": "Description",                    
            "format": "{0}-desc-{1}",                 
            "fields": [                               
                "address",                            
                "fid"                                 
            ]                                         
        }                                             
    ]                                                 
}                                                     

http 200

// 2.0+
{                                                     
    "id": 63,                                         // id
    "search_params": "size=20&default_operator=AND",  // параметры поиска
    "search_field": "adress",                         // атрибут поиска
    "sort": "adress:desc",                            // атрибут и направление сортировки
    "layer": {                                        // слой
        "id": 5                                       // id слоя
        "title": "Сервисные объекты",                 // название
        "name": "service_objects_vw"                  // название индекса
    },                                                
    "geo_json_field": "the_geom.coordinates",         // атрибут с координатами
    "title_format": "{0}",                            // формат названия
    "title_fields": [                                 // атрибуты названия
        "address"                                     
    ],                                                
    "fields": [                                       // атрибуты
        "fid",                                        
        "address",                                    
        "the_geom.coordinates"                        
    ],                                                
    "field_mappings": [                               // соответствие атрибутов и полей
        {                                             
            "format": "{0}-{1}",                      // формат
            "type": "CustomField",                    // тип. Возможные значения: CustomField, Title, Description
            "fields": [                               // атрибуты формата
                "fid",                                
                "address"                             
            ],                                        
            "field_id": 2                             // id настраиваемого поля
        },                                            
        {                                             
            "format": "{0}-title-{1}",                
            "type": "Title",                          
            "fields": [                               
                "address",                            
                "fid"                                 
            ]                                         
        },                                            
        {                                             
            "format": "{0}-desc-{1}",                 
            "type": "Description",                    
            "fields": [                               
                "address",                            
                "fid"                                 
            ]                                         
        }                                             
    ]                                                 
}                                                     

PUT /rest/service-objects/mappings/:id

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

Запрос на редактирование маппинга из атрибутов слоя объектов обслуживания в поля задания. Работает по принципу полной замены.

// 2.0+
{                                                     
    "search_params": "size=20&default_operator=AND",  // параметры поиска
    "search_field": "adress",                         // * атрибут поиска
    "sort": "adress:desc",                            // * атрибут и направление сортировки
    "layer": {                                        // * слой
        "id": 5                                       // id слоя
    },                                                
    "geo_json_field": "the_geom.coordinates",         // атрибут с координатами
    "title_format": "{0}",                            // * формат названия
    "title_fields": [                                 // * атрибуты названия
        "address"                                     
    ],                                                
    "fields": [                                       // * атрибуты
        "fid",                                        
        "address",                                    
        "the_geom.coordinates"                        
    ],                                                
    "field_mappings": [                               // соответствие атрибутов и полей
        {                                             
            "type": "CustomField",                    // * тип. Возможные значения: CustomField, Title, Description
            "field_id": 2,                            // id настраиваемого поля
            "format": "{0}-{1}",                      // * формат
            "fields": [                               // * атрибуты формата
                "fid",                                
                "address"                             
            ]                                         
        },                                            
        {                                             
            "type": "Title",                          
            "format": "{0}-title-{1}",                
            "fields": [                               
                "address",                            
                "fid"                                 
            ]                                         
        },                                            
        {                                             
            "type": "Description",                    
            "format": "{0}-desc-{1}",                 
            "fields": [                               
                "address",                            
                "fid"                                 
            ]                                         
        }                                             
    ]                                                 
}                                                     

http 200

// 2.0+
{                                                     
    "id": 63,                                         // id
    "search_params": "size=20&default_operator=AND",  // параметры поиска
    "search_field": "adress",                         // атрибут поиска
    "sort": "adress:desc",                            // атрибут и направление сортировки
    "layer": {                                        // слой
        "id": 5                                       // id слоя
        "title": "Сервисные объекты",                 // название
        "name": "service_objects_vw"                  // название индекса
    },                                                
    "geo_json_field": "the_geom.coordinates",         // атрибут с координатами
    "title_format": "{0}",                            // формат названия
    "title_fields": [                                 // атрибуты названия
        "address"                                     
    ],                                                
    "fields": [                                       // атрибуты
        "fid",                                        
        "address",                                    
        "the_geom.coordinates"                        
    ],                                                
    "field_mappings": [                               // соответствие атрибутов и полей
        {                                             
            "format": "{0}-{1}",                      // формат
            "type": "CustomField",                    // тип. Возможные значения: CustomField, Title, Description
            "fields": [                               // атрибуты формата
                "fid",                                
                "address"                             
            ],                                        
            "field_id": 2                             // id настраиваемого поля
        },                                            
        {                                             
            "format": "{0}-title-{1}",                
            "type": "Title",                          
            "fields": [                               
                "address",                            
                "fid"                                 
            ]                                         
        },                                            
        {                                             
            "format": "{0}-desc-{1}",                 
            "type": "Description",                    
            "fields": [                               
                "address",                            
                "fid"                                 
            ]                                         
        }                                             
    ]                                                 
}                                                     

DELETE /rest/service-objects/mappings/:id

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

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

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

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

http 200

// 2.0+
{                                                               
    "items": {                                                  
        "hits": [                                               
            {                                                   
                "_id": 123,                                     // ID объекта помещается в выделенное поле
                "fid": 123,                                     // остальные поля
                "address": "Москва, улица Никольская, дом 11",  
                "the_geom": {                                   
                    "coordinates": [                            
                        [                                       
                            37.605677,                          
                            55.763433                           
                        ],                                      
                    ],                                          
                }                                               
            }                                                   
        ],                                                      
        "total": 1                                              
    }                                                           
}                                                               

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