cerebellum-rest-files
Загрузка файлов: /files
Во всех POST-запросах на загрузку файлов необходимо:
- указать Content-Disposition: name=»Filedata»,
- передать файл в переменной «Filedata».
Пример передачи файла через REST-клиент POSTMAN
Формат ответа при успешной загрузке файлов:
// OUT <---
{
"res": 1,
"resText": "",
"name": "dbf5bc90-db10-1004-87cc-d22e9fcfea25.jpg" //имя файла, преобразованное с помощью UUID-стандарта идентификации
}
[t] POST /files/upload/photos, [t] POST /upload/photos
Загрузка фотографий.
[t] POST /files/upload/video, [t] POST /upload/video
Загрузка видеофайлов.
[t] POST /files/upload/videos, [t] POST /upload/videos
Загрузка видеофайлов.
[t] POST /files/upload/files, [t] POST /upload/files
Загрузка файлов.
[t] POST /files/upload/sounds, [t] POST /upload/sounds
Загрузка аудиофайлов.
cerebellum-rest-departments_users
Запросы по организациям и пользователям: /departments, /users
/departments
Запросы по организациям.
[AI] GET /departments/count
Получение количества организаций.
// OUT <---
{
"res": 1,
"resText": "",
"count": "22" //количество организаций
}
[t] GET /departments
Получение списка организаций (для которых arm_view = true).
// OUT <---
{
"res": 1,
"resText": "",
"departments": [
{
"id": "3",//id организации
"name": "Власть народу", //название организации
"logo": null, //логотип организации
"arm_view": "t", //отображение ведомства в АРМ губернатора: "t", "f"
"map_extent_id": "268", //id положения карты
"right_id": "0", //служебное значение для MapAdmin, всегда "0"
"users_count": "6", //количество пользователей
"people_dep": "f" //является ли ведомство, ведомством населения: "t", "f"
},
... //следующие элементы списка организаций
]
}
[t] GET /departments/all/{:limit}/{:offset}
Получение списка организаций, где offset — номер первой выводимой в ответе организации, limit — количество выводимых в ответе организаций.
Параметры limit, offset не обязательны.
// OUT <---
{
"res": 1,
"resText": "",
"departments": [
{
"id": "2", //id ведомства/организации
"name": "Отдел Тестирования T", //название ведомства/организации
"logo": "logo_291.jpg", //название файла логотипа
"arm_view": "f", //отображение ведомства в АРМ губернатора: "t", "f"
"map_extent_id": "2", //id положения карты
"right_id": "0", //служебное значение для MapAdmin, всегда "0"
"users_count": "37", //количество пользователей
"people_dep": "f" //является ли ведомство, ведомством населения: "t", "f"
},
... //следующие элементы списка организаций
]
}
[t] GET /departments/arm/{:limit}/{:offset}
Получение списка организаций, видимых в АРМ Губернатора, где offset — номер первой выводимой в ответе организации, limit — количество выводимых в ответе организаций.
Параметры limit, offset не обязательны.
// OUT <---
{
"res": 1,
"resText": "",
"departments": [
{
"id": "2", //id ведомства/организации
"name": "Отдел Тестирования T", //название ведомства/организации
"logo": "logo_291.jpg", //название файла логотипа
"arm_view": "f", //отображение ведомства в АРМ губернатора: "t", "f"
"map_extent_id": "2", //id положения карты
"right_id": "0", //служебное значение для MapAdmin, всегда "0"
"users_count": "37", //количество пользователей
"people_dep": "f" //является ли ведомство, ведомством населения: "t", "f"
},
... //следующие элементы списка организаций
]
}
[AI] GET /departments/:id/name
Получение названия организации по id.
// OUT <---
{
"res": 1,
"resText": "",
"department_name": "Отдел Тестирования" //название организации
}
[AIait*] GET /departments/:id/users
Получение списка пользователей организации, где id — id организации.
// OUT <---
{
"res": 1,
"resText": "",
"users": [
{
"id": "3011", //id пользователя
"login": "admin1439218241106", //логин пользователя
"fio": "Иванов И.И.", //ФИО пользователя
"department_id": "2", //id ведомства, либо null, если пользователь не относится ни к какой организации
"role_id": "10" //id роли пользователя: "6", "7" - обычный пользователь, "10" - админ ведомства, "8" - администратор всех ведомств
},
... //следующие элементы списка пользователей организации
]
}
* Права доступа на выполнение данного запроса для ролей a, i, t зависят от настроек безопасности, прописанных в конфигурационном файле application.conf.
Права доступа на выполнение данного запроса для ролей A, I есть всегда, независимо от настроек. Для роли a (администратора организации):
- доступ есть, если указанный в запросе id организации совпадает с id организации пользователя и в конфигурационном файле application.conf
security.see.users.self.dep.allow.org.admin=true или security.see.users.self.dep.allow.org.user=true, - доступ есть, если указанный в запросе id организации не совпадает с id организации пользователя и в конфигурационном файле application.conf
security.see.users.other.dep.allow.org.admin=true или security.see.users.other.dep.allow.org.user=true, - в остальных случаях для роли a (администратора организации) доступа нет.
Для роли i (инспектора организации):
- доступ есть, если указанный в запросе id организации совпадает с id организации пользователя и в конфигурационном файле application.conf
security.see.users.self.dep.allow.org.inspector=true или security.see.users.self.dep.allow.org.user=true, - доступ есть, если указанный в запросе id организации не совпадает с id организации пользователя и в конфигурационном файле application.conf
security.see.users.other.dep.allow.org.inspector=true или security.see.users.other.dep.allow.org.user=true, - в остальных случаях для роли i (инспектора организации) доступа нет.
Для роли t (авторизованного пользователя, с ролью, отличной от ролей A, I, a, i):
- доступ есть, если указанный в запросе id организации совпадает с id организации пользователя и в конфигурационном файле application.conf
security.see.users.self.dep.allow.org.user=true, - доступ есть, если указанный в запросе id организации не совпадает с id организации пользователя и в конфигурационном файле application.conf
security.see.users.other.dep.allow.org.user=true, - в остальных случаях для роли t (авторизованного пользователя, с ролью, отличной от ролей A, I, a, i) доступа нет.
Связи между организациями и видами работ
[AIai] POST /departments/:id/newstype/:id
Привязка вида работ к организации.
Если указанных вида работ или организации не существует, получаем ошибку 404.
Если связь уже существует, ошибку не получаем (INSERT в таблицу повторно не выполняется).
// OUT <---
{
"res": 1,
"resText": ""
}
[AIai] DELETE /departments/:id/newstype/:id
Удаление связи между видом работ и организацией.
Если указанных вида работ или организации не существует, получаем ошибку 404.
Если связи не существует, получаем ошибку 400.
// OUT <---
{
"res": 1,
"resText": ""
}
/upload/departmentIcons
[t] POST /upload/departmentIcons
Загрузка файлов иконок для организаций.
В запросе на загрузку иконок необходимо:
- указать Content-Disposition: name=»Filedata»,
- передать файл в переменной «Filedata».
Пример загрузки иконки через REST-клиент POSTMAN
Формат ответа при успешной загрузке иконки:
// OUT <---
{
"res": 1,
"resText": "",
"name": "ebb453e8-db16-1004-8f9e-3e07628b8015.jpg" //имя файла, преобразованное с помощью UUID-стандарта идентификации
}
/users
Запросы по пользователям.
[AI] GET /users
Получение списка всех пользователей.
// OUT <---
{
"res": 1,
"resText": "",
"users": [
{
"id": "3011", //id пользователя
"login": "admin1439218241106", //логин пользователя
"fio": "Иванов И.И.", //ФИО пользователя
"department_id": "2", //id ведомства, либо null, если пользователь не относится ни к какой организации
"role_id": "10" //id роли пользователя: "6", "7" - обычный пользователь, "10" - админ ведомства, "8" - администратор всех ведомств
},
... //следующие элементы списка пользователей
]
}
[t] GET /users/current
Получение информации о текущем пользователе.
// OUT <---
{
"res": 1,
"resText": "",
"id": "6", //id пользователя
"login": "ivanov", //логин пользователя
"fio": "Иванов Иван Иванович", //ФИО пользователя
"uvd_department_id": "62", //id ведомства, задания которого будут отображаться в интерфейсе map3d_mcs для AРМ Губернатора
"users_site_type": "2", //принадлежность пользователя ведомству ("1") или организации ("2")
"satellites_view": "t", //видимость спутников в АРМ Губернатора: "t" или "f"
"role_id": "8", //id роли пользователя
"email": "ivanov@gmail.com", //email пользователя
"matrix": "(-0.756602,0.653875,0.00069758),(0.21426,0.246913,0.945054),(0.617775,0.715179,-0.326914),(2.34475e+06,2.7075e+06,5.26909e+06)", //матрица перелета для АРМ Губернатора
"department_id": "1" //id организации пользователя
}
[AI] GET /users/count
Получение количества пользователей.
// OUT <---
{
"res": 1,
"resText": "",
"count": "970" //количество пользователей
}
>
[t] GET /users/standartStore
Получение стандартного хранилища данных для организации, которой принадлежит текущий пользователь. У организации стандартное хранилище данных может отсутствовать.
// OUT <---
{
"res": 1,
"resText": "",
"store": {
"id": "3", //id хранилища данных
"host": "trust.geo4.me", //хост
"port": "5432", //порт
"database": "inf_region" //база данных
}
}
[t] GET /users/standartStore
Получение стандартного хранилища данных для организации, которой принадлежит текущий пользователь. У организации стандартное хранилище данных может отсутствовать.
// OUT <---
{
"res": 1,
"resText": "",
"store": {
"id": "3", //id хранилища данных
"host": "trust.geo4.me", //хост
"port": "5432", //порт
"database": "inf_region" //база данных
}
}
[tA] PATCH/users/:id
Редактирование учетной записи пользователя по id.
// IN --->
{
"email": "test@gmail.com",
"address": "г.Казань, ул.Назарбаева, д.27",
"fio": "Иванов Иван Иванович",
"phone": "8432000555",
"fax": "8432000555",
"inn": "123456789012"
}
// OUT <---
{
"res": 1,
"resText": "",
"id": "6935", //id пользователя
"login": "ivanov_ivan", //логин пользователя
"fio": "Иванов Иван Иванович", //ФИО физического лица или название организации (юридического лица)
"uvd_department_id": "62", //id ведомства, задания которого будут отображаться в интерфейсе map3d_mcs для AРМ Губернатора
"users_site_type": "2", //принадлежность пользователя ведомству ("1") или организации ("2")
"satellites_view": "t", //видимость спутников в АРМ Губернатора: "t" или "f"
"email": "test@gmail.com", //email
"role_id": "10", //id роли пользователя
"matrix": "(-0.756602,0.653875,0.00069758),(0.21426,0.246913,0.945054),(0.617775,0.715179,-0.326914),(2.34475e+06,2.7075e+06,5.26909e+06)", //матрица перелета для АРМ Губернатора
"department_id": "517" //id ведомства/организации
}
[tA] PUT/users/:id
Редактирование учетной записи пользователя по id.
// IN --->
{
"email": "test@gmail.com", //обязательный параметр
"address": "г.Казань, ул.Назарбаева, д.27", //обязательный параметр
"fio": "Иванов Иван Иванович",
"phone": "8432000555",
"fax": "8432000555",
"inn": "123456789012"
}
// OUT <---
{
"res": 1,
"resText": "",
"id": "6935", //id пользователя
"login": "ivanov_ivan", //логин пользователя
"fio": "Иванов Иван Иванович", //ФИО физического лица или название организации (юридического лица)
"uvd_department_id": "62", //id ведомства, задания которого будут отображаться в интерфейсе map3d_mcs для AРМ Губернатора
"users_site_type": "2", //принадлежность пользователя ведомству ("1") или организации ("2")
"satellites_view": "t", //видимость спутников в АРМ Губернатора: "t" или "f"
"email": "test@gmail.com", //email
"role_id": "10", //id роли пользователя
"matrix": "(-0.756602,0.653875,0.00069758),(0.21426,0.246913,0.945054),(0.617775,0.715179,-0.326914),(2.34475e+06,2.7075e+06,5.26909e+06)", //матрица перелета для АРМ Губернатора
"department_id": "517" //id ведомства/организации
}
[A] POST /users
Служебный запрос. Упрощенная схема регистрации пользователей для тестов.
// IN --->
{
"login": "login", //логин
"paswd": "12345", //пароль
"email" : "test@gradoservice.ru", //email, необязательный параметр
"phone": "8432000555", //телефон, необязательный параметр
"ur_fio": "Иванов и КО", //название юр.лица, , необязательный параметр
"ur_address": "Казань", //адрес юр.лица, необязательный параметр
"status": 2, //правовой статус: "1" - юридическое лицо, "2" - физическое лицо, необязательный параметр
"organization_id": 1, //id организации, необязательный параметр
"role_id": 7, //id роли пользователя, необязательный параметр: "6", "7" - обычный пользователь, "10" - админ ведомства, "8" - администратор всех ведомств
"fio": "Иванов И.И." //ФИО пользователя, необязательный параметр
}
// OUT <---
{
"res": 1,
"resText": "",
"user": {
"id": "6391",
"login": "login",
"fio": "Иванов И.И.",
"uvd_department_id": "62", //id ведомства, задания которого будут отображаться в интерфейсе map3d_mcs для AРМ Губернатора
"users_site_type": "2", //принадлежность пользователя ведомству ("1") или организации ("2")
"satellites_view": "t", //видимость спутников в АРМ Губернатора: "t" или "f"
"role_id": "7", //id роли пользователя: "6", "7" - обычный пользователь, "10" - админ ведомства, "8" - администратор всех ведомств
"matrix": "(-0.756602,0.653875,0.00069758),(0.21426,0.246913,0.945054),(0.617775,0.715179,-0.326914),(2.34475e+06,2.7075e+06,5.26909e+06)",//матрица перелета для АРМ Губернатора
"department_id": "1" //id ведомства/организации
}
}
[A] DELETE /users/:id
Удаление пользователя (логическое удаление).
// OUT <---
{
"res": 1,
"resText": ""
}
[A] DELETE /users/:id/hard
Удаление пользователя (физическое удаление для тестов).
// OUT <---
{
"res": 1,
"resText": ""
}
cerebellum-rest-geodata
Получение геоинформационных данных
/layers
[t] GET /layers
Получение списка слоев.
// OUT <---
{
"res": 1,
"resText": "",
"layers": [
{
"layer_id": "1375", //id слоя
"name": "Дороги", //название слоя на русском
"url": "http://trust.geo4.me/geoserver/wms", //url слоя
"type_name": "workspace:r63_k100_dorogi_l", //название слоя на геосервере
"style": "baselayer_dorogi_l", //название стиля
"have_legend": "f", //сохранена ли в базе легенда слоя: "t", "f"
"service": "WMS", //тип слоя: "WMS" или "WFS"
"poly": "f", //является ли слой полигональным: "t", "f"
"server_id": "6", //id геосервера
"group_id": "351", //id группы слоев
"from_infrastructure": "t", //находится ли слой в базе с Инфраструктурой: "t", "f"
"user_id": "6", //id пользователя, создавшего слой
"group_name": "Базовые слои Самарской области", //название группы слоев
"read": "t", //может ли данный пользователь видеть слой: "t", "f"
"write": "t", //может ли данный пользователь изменять объекты слоя: "t", "f"
"edit": "t" //может ли данный пользователь администрировать слой: "t", "f"
},
... //следующие элементы списка слоев
]
}
[h] GET /layers/:id
Получение данных по слою.
// OUT <---
{
"res": 1,
"resText": "",
"layer": {
"name": "Дороги", //название слоя на русском
"url": "http://trust.geo4.me/geoserver/wms", //url слоя
"type_name": "workspace:r63_k100_dorogi_l", //название слоя на геосервере формата "namespace:layerName"
"style": "baselayer_dorogi_l", //название стиля
"service": "WMS", //тип слоя: "WMS" или "WFS"
"read": "t", //может ли данный пользователь видеть слой: "t", "f"
"write": "t", //может ли данный пользователь изменять объекты слоя: "t", "f"
"edit": "t", //может ли данный пользователь администрировать слой: "t", "f"
"id": "1375", //id слоя
"namespace": "workspace", //получаем "namespace" из "type_name"
"server": "http://trust.geo4.me/geoserver/", //геосервер
"lname": "r63_k100_dorogi_l", //получаем "layerName" из "type_name"
"legend_url": "http://trust.geo4.me/geoserver/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=r63_k100_dorogi_l&style=baselayer_dorogi_l" //url легенды слоя
}
}
/groups
[t] GET /groups
Получение списка групп слоев.
// OUT <---
{
"res": 1,
"resText": "",
"groups": [
{
"id": "2", //id группы слоев
"name": "Задачи", //название группы
"order": "2", //порядок отображения группы
"department_id_create": "1" //id ведомства, которым была создана группа
},
... //следующие элементы списка групп
]
}
/geoservers
[t] GET /geoservers
Получить список геосерверов.
// OUT <---
{
"res": 1,
"resText": "",
"geoservers": [
{
"id": "6", // id геосервера
"name": "geoserver", // название
"link": "http://server.name/geoserver/" //url
}
]
}
/datastores
[AI] GET /datastores/saved
Получение списка сохраненных хранилищ данных.
// OUT <---
{
"res": 1,
"resText": "",
"saved_datastores": [
{
"id": "3", // id хранилища
"name": "store_name", // название
"host": "server.name", // хост
"port": "5432", // порт
"database": "database_name", // название базы данных
"have_infrastructure": "t" // есть ли "Инфраструктура": "t" или "f"
},
... // следующие элементы списка сохраненных хранилищ данных
]
}
/map/default
[t] GET /map/default
Получение положения карты по умолчанию.
// OUT <---
{
"res": 1,
"resText": "",
"map": {
"center": {
"lon": "37.672462463379", // координата lon центра положения карты по умолчанию
"lat": "55.768051898362" // координата lat центра положения карты по умолчанию
},
"zoom": "14" // зум карты
}
}
/city
[t] GET /city
Получение списка городов.
// OUT <---
{
"res": 1,
"resText": "",
"cities": [
{
"id": "2", //id города
"name": "Салемал", //название города
"photo": "salemal.png", //название фотографии города
"matrix": "(-0.935185,0.35416,0.000667788),(-0.33804,-0.893178,0.296583),(0.105634,0.277134,0.955007),(894018,2.34968e+06,5.85466e+06)", //матрица перелета
"order": "2" //порядковый номер города для отображения в списке
},
... //следующие элементы списка городов
]
}
cerebellum-rest-polls
Опросы
Примечание
Данное описание актуально для версий Cerebellum от 1.14 и старше.
CRUD-операции с опросами
[AaIi] POST /poll
Создание опроса.
// IN --->
{ "title": "Заголовок опроса", //заголовок опроса
"text": "Поясняющий текст", //описание опроса
"organization_ids": [1, 2], //список id организаций-получателей опроса, необязательное поле
"deadline": "2015-12-12 12:10:00"//срок истечения опроса, по умолчанию - одни сутки, необязательное поле
}
// OUT <---
{
"res": 1,
"resText": "",
"poll": {
"id": "16200", // id опроса
"title": "Опрос", //заголовок опроса
"text": "Описание", //описание опроса
"deadline": "2015-12-12 12:10:00", //дедлайн
"user": { // информация о пользователе, создавшем опрос
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-27 16:15:50.608", //дата создания
"last_update_date": "2015-11-27 16:15:50.608", //дата и время последнего изменения
"last_activity_date": "2015-11-27 16:15:51.246", //дата и время последней активности (любые запросы на добавление/изменение/удаление по комментариям, списку участников, голосованиям, связям)
"done": "ACCEPTED", //"ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала И я администратор или инспектор организаций-участников или участник. Иначе - null.
"voted": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал И я администратор или инспектор организаций-участников или участник. Иначе - null.
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"responded": "NONE", // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех организаций-участников, то ответ - "ALL"; если есть подтвержденный ответ хотя бы от одной - ответ "ANY";
//иначе - ответ "NONE". Значение проставляется ТОЛЬКО ЕСЛИ текущий пользователь создатель опроса, главный администратор или главный инспектор. Иначе - null.
"expired": "f" //"t" или "f", в зависимости от того, прошел ли deadline, или еще нет
}
}
[CAI] PUT /poll/:id
Изменение опроса.
Запрос также изменяет значение колонки last_update_date на текущую дату и время.
// IN --->
{ "title": "Измененное название", //заголовок опроса
"text": "Измененное описание", //описание опроса
"deadline": "2015-11-12 18:00:00" //дедлайн
}
// OUT <---
{
"res": 1,
"resText": "",
"poll": {
"id": "16200", // id опроса
"title": "Измененное название", //заголовок опроса
"text": "Измененное описание", //описание опроса
"deadline": "2015-11-12 18:00:00", //дедлайн
"user": { // информация о пользователе, создавшем опрос
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-27 16:15:50.608", //дата создания
"last_update_date": "2015-11-27 16:15:50.608", //дата и время последнего изменения
"last_activity_date": "2015-11-27 16:15:51.246", //дата и время последней активности (любые запросы на добавление/изменение/удаление по комментариям, списку участников, голосованиям, связям)
"done": "ACCEPTED", //"ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала И я администратор или инспектор организаций-участников или участник. Иначе - null.
"voted": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал И я администратор или инспектор организаций-участников или участник. Иначе - null.
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"responded": "NONE", // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех организаций-участников, то ответ - "ALL"; если есть подтвержденный ответ хотя бы от одной - ответ "ANY";
//иначе - ответ "NONE". Значение проставляется ТОЛЬКО ЕСЛИ текущий пользователь создатель опроса, главный администратор или главный инспектор. Иначе - null.
"expired": "f" //"t" или "f", в зависимости от того, прошел ли deadline, или еще нет
}
}
[CAI] DELETE /poll/:id
Логическое удаление опроса.
// OUT <---
{ "res": "1",
"resText": ""
}
[A] DELETE /poll/:id/hard
Служебный запрос для физического удаления опроса.
// OUT <---
{ "res": "1",
"resText": ""
}
[CAIu] GET /poll/:id
Получение информации по опросу.
// OUT <---
{
"res": 1,
"resText": "",
"poll": {
"id": "16200", // id опроса
"title": "Опрос", //заголовок опроса
"text": "Описание опроса", //описание опроса
"deadline": "2015-11-12 18:00:00", //дедлайн
"user": { // информация о пользователе, создавшем опрос
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-27 16:15:50.608", //дата создания
"last_update_date": "2015-11-27 16:15:50.608", //дата и время последнего изменения
"last_activity_date": "2015-11-27 16:15:51.246", //дата и время последней активности (любые запросы на добавление/изменение/удаление по комментариям, списку участников, голосованиям, связям)
"done": "ACCEPTED", //"ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала И я администратор или инспектор организаций-участников или участник. Иначе - null.
"voted": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал И я администратор или инспектор организаций-участников или участник. Иначе - null.
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"responded": "NONE", // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех организаций-участников, то ответ - "ALL"; если есть подтвержденный ответ хотя бы от одной - ответ "ANY";
//иначе - ответ "NONE". Значение проставляется ТОЛЬКО ЕСЛИ текущий пользователь создатель опроса, главный администратор или главный инспектор. Иначе - null.
"expired": "f" //"t" или "f", в зависимости от того, прошел ли deadline, или еще нет
}
}
[CAIu] GET /extended-poll/:id
Получение расширенной информации по опросу.
// OUT <---
{
"res": 1,
"resText": "",
"extended-poll": {
"poll": {
"id": "16200", // id опроса
"title": "Опрос", //заголовок опроса
"text": "Описание опроса", //описание опроса
"deadline": "2015-11-12 18:00:00", //дедлайн
"user": { // информация о пользователе, создавшем опрос
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-27 16:15:50.608", //дата создания
"last_update_date": "2015-11-27 16:15:50.608", //дата и время последнего изменения
"last_activity_date": "2015-11-27 16:15:51.246", //дата и время последней активности (любые запросы на добавление/изменение/удаление по комментариям, списку участников, голосованиям, связям)
"responded": "NONE", // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех организаций-участников, то ответ - "ALL"; если есть подтвержденный ответ хотя бы от одной - ответ "ANY";
//иначе - ответ "NONE". Значение проставляется ТОЛЬКО ЕСЛИ текущий пользователь создатель опроса, главный администратор или главный инспектор. Иначе - null.
"expired": "f" //"t" или "f", в зависимости от того, прошел ли deadline, или еще нет
},
"context": {
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"voted": { // Значение "voted" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал. Иначе - null.
"comment": "Комментарий при моем голосовании", // или null, если комментарий отсутствует, или я не голосовал
},
"done": { // Значение "done" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала. Иначе - null.
"comment": "Комментарий при голосовании организации" // или null, если комментарий отсутствует, или организация не голосовала
}
},
"issues": [
{
"id": "789249", //id задания
"user_id": "6", //id создателя задания
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Название", //заголовок
"text": "Описание", //описание
"department_id": "3", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Власть народу", //название назначенной организации
"department_logo": null, //логотип организации
"deadline": "2015-11-24 16:38:21", //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_logo": "2.png", //логотип типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-11-25 15:42:48.907", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задание: "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-11-25 15:42:49.529", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"assigned_department_name": "Власть народу", //название назначенной организации
"assigned_to_user": "613", //id назначенного пользователя
"assigned_user_fio": "Борисова Алина", //ФИО назначенного пользователя
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to": "3", //id назначенной организации
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"lon": "55.56", //координаты точки - lon
"news_date": "2015-12-21 13:05:00" //дата создания задания
},
... //следующие элементы списка связанных задач
]
}
}
[t] GET /poll/inbox
Получение списка входящих опросов (текущий пользователь является администратором или инспектором организации-получателя опроса, либо назначенным участником опроса).
Параметры фильтрации:
- done — список опросов, в зависимости от утвержденного голоса моей организации (ACCEPTED, REJECTED, NOT_VOTED — моя организация проголосовала положительно, отрицательно или не проголосовала).
- expired — список опросов, для которых текущее время больше deadline (expired=true), текущее время меньше deadline (expired=false).
- voted — список опросов, в зависимости от моего голоса (ACCEPTED, REJECTED, NOT_VOTED — я проголосовал положительно, отрицательно или не проголосовал).
- ltDeadline — список опросов, для которых значение deadline меньше переданного значения, формат timestamp.
- gtDeadline — список опросов, для которых значение deadline больше переданного значения, формат timestamp.
- ltUpdateDate — список опросов, для которых значение last_update_date меньше переданного значения, формат timestamp.
- gtUpdateDate — список опросов, для которых значение last_update_date больше переданного значения, формат timestamp.
- ltActivityDate — список опросов, для которых значение last_activity_date меньше переданного значения, формат timestamp.
- gtActivityDate — список опросов, для которых значение last_activity_date больше переданного значения, формат timestamp.
- page — номер страницы с опросами (по умолчанию page=1).
- limit — количество выгружаемых опросов на одной странице (по умолчанию limit=25).
- offset — номер опроса, начиная с которого необходимо загрузить список опросов.
- sortBy — задает сортировку опросов по указанному полю. По умолчанию сортировка ведется по полю id
- sortDirection — задает порядок сортировки опросов ASC/DESC. По умолчанию сортировка ведется по убыванию (DESC)
//Примеры запросов:
/poll/inbox?expired=true>Deadline=1448632498&responded=ANY
/poll/inbox?ltActivityDate=1448632498&done=REJECTED&voted=ACCEPTED&page=2
/poll/inbox?expired=true<UpdateDate=1448632498&page=2&limit=10
/poll/inbox?ltActivityDate=1448632498&page=2&offset=10&sortBy=title&orderBy=ASC
{ "res": "1",
"resText": "",
"polls": [// массив опросов
{
"id": "16200", // id опроса
"title": "Опрос", //заголовок опроса
"text": "Описание опроса", //описание опроса
"deadline": "2015-11-12 18:00:00", //дедлайн
"user": { // информация о пользователе, создавшем опрос
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-27 16:15:50.608", //дата создания
"last_update_date": "2015-11-27 16:15:50.608", //дата и время последнего изменения
"last_activity_date": "2015-11-27 16:15:51.246", //дата и время последней активности (любые запросы на добавление/изменение/удаление по комментариям, списку участников, голосованиям, связям)
"done": "ACCEPTED", //"ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала И я администратор или инспектор организаций-участников или участник. Иначе - null.
"voted": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал И я администратор или инспектор организаций-участников или участник. Иначе - null.
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"responded": "NONE", // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех организаций-участников, то ответ - "ALL"; если есть подтвержденный ответ хотя бы от одной - ответ "ANY";
//иначе - ответ "NONE". Значение проставляется ТОЛЬКО ЕСЛИ текущий пользователь создатель опроса, главный администратор или главный инспектор. Иначе - null.
"expired": "f" //"t" или "f", в зависимости от того, прошел ли deadline, или еще нет
},
],
"pages": "13" // общее количество страниц опросов (количество опросов, делённое на количество опросов на одной странице).
}
[t] GET /extended-poll/inbox
Получение списка c расширенной информацией по входящим опросам (текущий пользователь является администратором или инспектором организации-получателя опроса, либо назначенным участником опроса).
Параметры фильтрации:
- done — список опросов, в зависимости от голоса моей организации (ACCEPTED, REJECTED, NOT_VOTED — моя организация проголосовала положительно, отрицательно или не проголосовала).
- expired — список опросов, для которых текущее время больше deadline (expired=true), текущее время меньше deadline (expired=false).
- voted — список опросов, в зависимости от моего голоса (ACCEPTED, REJECTED, NOT_VOTED — я проголосовал положительно, отрицательно или не проголосовал).
- ltDeadline — список опросов, для которых значение deadline меньше переданного значения, формат timestamp.
- gtDeadline — список опросов, для которых значение deadline больше переданного значения, формат timestamp.
- ltUpdateDate — список опросов, для которых значение last_update_date меньше переданного значения, формат timestamp.
- gtUpdateDate — список опросов, для которых значение last_update_date больше переданного значения, формат timestamp.
- ltActivityDate — список опросов, для которых значение last_activity_date меньше переданного значения, формат timestamp.
- gtActivityDate — список опросов, для которых значение last_activity_date больше переданного значения, формат timestamp.
- page — номер страницы с опросами (по умолчанию page=1).
- limit — количество выгружаемых опросов на одной странице (по умолчанию limit=25).
- offset — номер опроса, начиная с которого необходимо загрузить список опросов.
- sortBy — задает сортировку опросов по указанному полю. По умолчанию сортировка ведется по полю id
- sortDirection — задает порядок сортировки опросов ASC/DESC. По умолчанию сортировка ведется по убыванию (DESC)
//Примеры запросов:
/extended-poll/inbox?expired=true>Deadline=1448632498&responded=ANY
/extended-poll/inbox?ltActivityDate=1448632498&done=REJECTED&voted=ACCEPTED&page=2
/extended-poll/inbox?expired=true<UpdateDate=1448632498&page=2&limit=10
/extended-poll/inbox?ltActivityDate=1448632498&page=2&offset=10&sortBy=title&orderBy=ASC
{ "res": "1",
"resText": "",
"extended-polls": [ // массив опросов
{
"poll": {
"id": "1", // id опроса
"title": "Заголовок опроса",
"text": "Поясняющий текст",
"deadline": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",
"date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС", // дата создания
"user": { // информация о пользователе, создавшем опрос
"id": "23",
"fio": "Абрикосов Апельсин Яблокович"
},
"expired": "t", // "t" или "f", в зависимости от того, прошел ли deadline, или еще нет
"last_update_date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС", // дата и время последнего изменения
// (т.е. POST /poll либо PUT /poll/:id)
"last_activity_date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",// дата и время последней активности
// (любые запросы на добавление/изменение/удаление
// по комментариям, списку участников,
// голосованиям, связям)
"responded": "ANY" // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех
// организаций-участников, то ответ - "ALL"; если есть
// подтвержденный ответ хотя бы от одной - ответ "ANY";
// иначе - ответ "NONE".
// Значение проставляется ТОЛЬКО ЕСЛИ я создатель опроса,
// главный администратор или главный инспектор. Иначе - null.
},
"context": {
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"voted": { // Значение "voted" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал. Иначе - null.
"comment": "Комментарий при моем голосовании" // или null, если комментарий отсутствует, или я не голосовал
},
"done": { // Значение "done" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала. Иначе - null.
"comment": "Комментарий при голосовании организации" // или null, если комментарий отсутствует, или организация не голосовала
}
},
"issues": [
{
"id": "789249", //id задания
"user_id": "6", //id создателя задания
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Название", //заголовок
"text": "Описание", //описание
"department_id": "3", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Власть народу", //название назначенной организации
"department_logo": null, //логотип организации
"deadline": "2015-11-24 16:38:21", //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_logo": "2.png", //логотип типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-11-25 15:42:48.907", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задание: "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-11-25 15:42:49.529", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"assigned_department_name": "Власть народу", //название назначенной организации
"assigned_to_user": "613", //id назначенного пользователя
"assigned_user_fio": "Борисова Алина", //ФИО назначенного пользователя
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to": "3", //id назначенной организации
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"lon": "55.56", //координаты точки - lon
"news_date": "2015-12-21 13:05:00" //дата создания задания
},
... //следующие элементы списка связанных задач
]
},
...
],
"pages": "13" // общее количество страниц опросов (количество опросов, делённое на количество опросов на одной странице, т.е. 25).
}
[t] GET /poll/outbox
Получение списка исходящих опросов (созданных текущим пользователем).
Параметры фильтрации:
- expired — список опросов, для которых текущее время больше deadline (expired=true), текущее время меньше deadline (expired=false).
- ltDeadline — список опросов, для которых значение deadline меньше переданного значения, формат timestamp.
- gtDeadline — список опросов, для которых значение deadline больше переданного значения, формат timestamp.
- ltUpdateDate — список опросов, для которых значение last_update_date меньше переданного значения, формат timestamp.
- gtUpdateDate — список опросов, для которых значение last_update_date больше переданного значения, формат timestamp.
- ltActivityDate — список опросов, для которых значение last_activity_date меньше переданного значения, формат timestamp.
- gtActivityDate — список опросов, для которых значение last_activity_date больше переданного значения, формат timestamp.
- responded — список опросов, для которых ото всех организаций-участников есть подтвержденный ответ (responded=ALL),
есть подтвержденный ответ хотя бы для одной организации-участника (responded=ANY), нет подтвержденного ответа ни от одной организации-участника (responded=NONE). - page — номер страницы с опросами (по умолчанию page=1).
- limit — количество выгружаемых опросов на одной странице (по умолчанию limit=25).
- offset — номер опроса, начиная с которого необходимо загрузить список опросов.
- sortBy — задает сортировку опросов по указанному полю. По умолчанию сортировка ведется по полю id
- sortDirection — задает порядок сортировки опросов ASC/DESC. По умолчанию сортировка ведется по убыванию (DESC)
//Примеры запросов:
/poll/outbox?expired=true>Deadline=1448632498&responded=ANY
/poll/outbox?expired=true<UpdateDate=1448632498&page=2&limit=10
/poll/outbox?ltActivityDate=1448632498&page=2&offset=10&sortBy=title&orderBy=ASC
{ "res": "1",
"resText": "",
"polls": [// массив опросов
{
"id": "16200", // id опроса
"title": "Опрос", //заголовок опроса
"text": "Описание опроса", //описание опроса
"deadline": "2015-11-12 18:00:00", //дедлайн
"user": { // информация о пользователе, создавшем опрос
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-27 16:15:50.608", //дата создания
"last_update_date": "2015-11-27 16:15:50.608", //дата и время последнего изменения
"last_activity_date": "2015-11-27 16:15:51.246", //дата и время последней активности (любые запросы на добавление/изменение/удаление по комментариям, списку участников, голосованиям, связям)
"done": "ACCEPTED", //"ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала И я администратор или инспектор организаций-участников или участник. Иначе - null.
"voted": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал И я администратор или инспектор организаций-участников или участник. Иначе - null.
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"responded": "NONE", // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех организаций-участников, то ответ - "ALL"; если есть подтвержденный ответ хотя бы от одной - ответ "ANY";
//иначе - ответ "NONE". Значение проставляется ТОЛЬКО ЕСЛИ текущий пользователь создатель опроса, главный администратор или главный инспектор. Иначе - null.
"expired": "f" //"t" или "f", в зависимости от того, прошел ли deadline, или еще нет
},
],
"pages": "13" // общее количество страниц опросов (количество опросов, делённое на количество опросов на одной странице).
}
[t] GET /extended-poll/outbox
Получение списка с расширенной информацией по исходящим опросам (созданным текущим пользователем).
Параметры фильтрации:
- expired — список опросов, для которых текущее время больше deadline (expired=true), текущее время меньше deadline (expired=false).
- ltDeadline — список опросов, для которых значение deadline меньше переданного значения, формат timestamp.
- gtDeadline — список опросов, для которых значение deadline больше переданного значения, формат timestamp.
- ltUpdateDate — список опросов, для которых значение last_update_date меньше переданного значения, формат timestamp.
- gtUpdateDate — список опросов, для которых значение last_update_date больше переданного значения, формат timestamp.
- ltActivityDate — список опросов, для которых значение last_activity_date меньше переданного значения, формат timestamp.
- gtActivityDate — список опросов, для которых значение last_activity_date больше переданного значения, формат timestamp.
- responded — список опросов, для которых ото всех организаций-участников есть подтвержденный ответ (responded=ALL),
есть подтвержденный ответ хотя бы для одной организации-участника (responded=ANY), нет подтвержденного ответа ни от одной организации-участника (responded=NONE). - page — номер страницы с опросами (по умолчанию page=1).
- limit — количество выгружаемых опросов на одной странице (по умолчанию limit=25).
- offset — номер опроса, начиная с которого необходимо загрузить список опросов.
- sortBy — задает сортировку опросов по указанному полю. По умолчанию сортировка ведется по полю id
- sortDirection — задает порядок сортировки опросов ASC/DESC. По умолчанию сортировка ведется по убыванию (DESC)
//Примеры запросов:
/extended-poll/outbox?expired=true>Deadline=1448632498&responded=ANY
/extended-poll/outbox?expired=true<UpdateDate=1448632498&page=2&limit=10
/extended-poll/outbox?ltActivityDate=1448632498&page=2&offset=10&sortBy=title&orderBy=ASC
{ "res": "1",
"resText": "",
"extended-polls": [ // массив опросов
{
"poll": {
"id": "1", // id опроса
"title": "Заголовок опроса",
"text": "Поясняющий текст",
"deadline": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",
"date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС", // дата создания
"user": { // информация о пользователе, создавшем опрос
"id": "23",
"fio": "Абрикосов Апельсин Яблокович"
},
"expired": "t", // "t" или "f", в зависимости от того, прошел ли deadline, или еще нет
"last_update_date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС", // дата и время последнего изменения
// (т.е. POST /poll либо PUT /poll/:id)
"last_activity_date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",// дата и время последней активности
// (любые запросы на добавление/изменение/удаление
// по комментариям, списку участников,
// голосованиям, связям)
"responded": "ANY" // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех
// организаций-участников, то ответ - "ALL"; если есть
// подтвержденный ответ хотя бы от одной - ответ "ANY";
// иначе - ответ "NONE".
// Значение проставляется ТОЛЬКО ЕСЛИ я создатель опроса,
// главный администратор или главный инспектор. Иначе - null.
},
"context": {
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"voted": { // Значение "voted" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал. Иначе - null.
"comment": "Комментарий при моем голосовании" // или null, если комментарий отсутствует, или я не голосовал
},
"done": { // Значение "done" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала. Иначе - null.
"comment": "Комментарий при голосовании организации" // или null, если комментарий отсутствует, или организация не голосовала
}
},
"issues": [
{
"id": "789249", //id задания
"user_id": "6", //id создателя задания
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Название", //заголовок
"text": "Описание", //описание
"department_id": "3", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Власть народу", //название назначенной организации
"department_logo": null, //логотип организации
"deadline": "2015-11-24 16:38:21", //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_logo": "2.png", //логотип типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-11-25 15:42:48.907", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задание: "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-11-25 15:42:49.529", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"assigned_department_name": "Власть народу", //название назначенной организации
"assigned_to_user": "613", //id назначенного пользователя
"assigned_user_fio": "Борисова Алина", //ФИО назначенного пользователя
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to": "3", //id назначенной организации
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"lon": "55.56", //координаты точки - lon
"news_date": "2015-12-21 13:05:00" //дата создания задания
},
... //следующие элементы списка связанных задач
]
},
...
],
"pages": "13" // общее количество страниц опросов (количество опросов, делённое на количество опросов на одной странице, т.е. 25).
}
[AI] GET /poll/list
Получение списка всех опросов.
Параметры фильтрации:
- expired — список опросов, для которых текущее время больше deadline (expired=true), текущее время меньше deadline (expired=false).
- ltDeadline — список опросов, для которых значение deadline меньше переданного значения, формат timestamp.
- gtDeadline — список опросов, для которых значение deadline больше переданного значения, формат timestamp.
- ltUpdateDate — список опросов, для которых значение last_update_date меньше переданного значения, формат timestamp.
- gtUpdateDate — список опросов, для которых значение last_update_date больше переданного значения, формат timestamp.
- ltActivityDate — список опросов, для которых значение last_activity_date меньше переданного значения, формат timestamp.
- gtActivityDate — список опросов, для которых значение last_activity_date больше переданного значения, формат timestamp.
- responded — список опросов, для которых ото всех организаций-участников есть подтвержденный ответ (responded=ALL),
есть подтвержденный ответ хотя бы для одной организации-участника (responded=ANY), нет подтвержденного ответа ни от одной организации-участника (responded=NONE). - page — номер страницы с опросами (по умолчанию page=1).
- limit — количество выгружаемых опросов на одной странице (по умолчанию limit=25).
- offset — номер опроса, начиная с которого необходимо загрузить список опросов.
- sortBy — задает сортировку опросов по указанному полю. По умолчанию сортировка ведется по полю id
- sortDirection — задает порядок сортировки опросов ASC/DESC. По умолчанию сортировка ведется по убыванию (DESC)
//Примеры запросов:
/poll/list?expired=true>Deadline=1448632498&responded=ANY
/poll/list?ltActivityDate=144863249&page=2
/poll/list?expired=true<UpdateDate=1448632498&page=2&limit=10
/poll/list?ltActivityDate=1448632498&page=2&offset=10&sortBy=title&orderBy=ASC
{ "res": "1",
"resText": "",
"polls": [// массив опросов
{
"id": "16200", // id опроса
"title": "Опрос", //заголовок опроса
"text": "Описание опроса", //описание опроса
"deadline": "2015-11-12 18:00:00", //дедлайн
"user": { // информация о пользователе, создавшем опрос
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-27 16:15:50.608", //дата создания
"last_update_date": "2015-11-27 16:15:50.608", //дата и время последнего изменения
"last_activity_date": "2015-11-27 16:15:51.246", //дата и время последней активности (любые запросы на добавление/изменение/удаление по комментариям, списку участников, голосованиям, связям)
"done": "ACCEPTED", //"ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала И я администратор или инспектор организаций-участников или участник. Иначе - null.
"voted": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал И я администратор или инспектор организаций-участников или участник. Иначе - null.
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"responded": "NONE", // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех организаций-участников, то ответ - "ALL"; если есть подтвержденный ответ хотя бы от одной - ответ "ANY";
//иначе - ответ "NONE". Значение проставляется ТОЛЬКО ЕСЛИ текущий пользователь создатель опроса, главный администратор или главный инспектор. Иначе - null.
"expired": "f" //"t" или "f", в зависимости от того, прошел ли deadline, или еще нет
},
],
"pages": "13" // общее количество страниц опросов (количество опросов, делённое на количество опросов на одной странице).
}
[AI] GET /extended-poll/list
Получение списка с расширенной информацией по всем опросам.
Параметры фильтрации:
- expired — список опросов, для которых текущее время больше deadline (expired=true), текущее время меньше deadline (expired=false).
- ltDeadline — список опросов, для которых значение deadline меньше переданного значения, формат timestamp.
- gtDeadline — список опросов, для которых значение deadline больше переданного значения, формат timestamp.
- ltUpdateDate — список опросов, для которых значение last_update_date меньше переданного значения, формат timestamp.
- gtUpdateDate — список опросов, для которых значение last_update_date больше переданного значения, формат timestamp.
- ltActivityDate — список опросов, для которых значение last_activity_date меньше переданного значения, формат timestamp.
- gtActivityDate — список опросов, для которых значение last_activity_date больше переданного значения, формат timestamp.
- responded — список опросов, для которых ото всех организаций-участников есть подтвержденный ответ (responded=ALL),
есть подтвержденный ответ хотя бы для одной организации-участника (responded=ANY), нет подтвержденного ответа ни от одной организации-участника (responded=NONE). - page — номер страницы с опросами (по умолчанию page=1).
- limit — количество выгружаемых опросов на одной странице (по умолчанию limit=25).
- offset — номер опроса, начиная с которого необходимо загрузить список опросов.
- sortBy — задает сортировку опросов по указанному полю. По умолчанию сортировка ведется по полю id
- sortDirection — задает порядок сортировки опросов ASC/DESC. По умолчанию сортировка ведется по убыванию (DESC)
//Примеры запросов:
/extended-poll/list?expired=true>Deadline=1448632498&responded=ANY
/extended-poll/list?ltActivityDate=144863249&page=2
/extended-poll/list?expired=true<UpdateDate=1448632498&page=2&limit=10
/extended-poll/list?ltActivityDate=1448632498&page=2&offset=10&sortBy=title&orderBy=ASC
{ "res": "1",
"resText": "",
"extended-polls": [ // массив опросов
{
"poll": {
"id": "1", // id опроса
"title": "Заголовок опроса",
"text": "Поясняющий текст",
"deadline": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",
"date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС", // дата создания
"user": { // информация о пользователе, создавшем опрос
"id": "23",
"fio": "Абрикосов Апельсин Яблокович"
},
"expired": "t", // "t" или "f", в зависимости от того, прошел ли deadline, или еще нет
"last_update_date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС", // дата и время последнего изменения
// (т.е. POST /poll либо PUT /poll/:id)
"last_activity_date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",// дата и время последней активности
// (любые запросы на добавление/изменение/удаление
// по комментариям, списку участников,
// голосованиям, связям)
"responded": "ANY" // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех
// организаций-участников, то ответ - "ALL"; если есть
// подтвержденный ответ хотя бы от одной - ответ "ANY";
// иначе - ответ "NONE".
// Значение проставляется ТОЛЬКО ЕСЛИ я создатель опроса,
// главный администратор или главный инспектор. Иначе - null.
},
"context": {
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"voted": { // Значение "voted" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал. Иначе - null.
"comment": "Комментарий при моем голосовании" // или null, если комментарий отсутствует, или я не голосовал
},
"done": { // Значение "done" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала. Иначе - null.
"comment": "Комментарий при голосовании организации" // или null, если комментарий отсутствует, или организация не голосовала
}
},
"issues": [
{
"id": "789249", //id задания
"user_id": "6", //id создателя задания
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Название", //заголовок
"text": "Описание", //описание
"department_id": "3", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Власть народу", //название назначенной организации
"department_logo": null, //логотип организации
"deadline": "2015-11-24 16:38:21", //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_logo": "2.png", //логотип типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-11-25 15:42:48.907", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задание: "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-11-25 15:42:49.529", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"assigned_department_name": "Власть народу", //название назначенной организации
"assigned_to_user": "613", //id назначенного пользователя
"assigned_user_fio": "Борисова Алина", //ФИО назначенного пользователя
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to": "3", //id назначенной организации
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"lon": "55.56", //координаты точки - lon
"news_date": "2015-12-21 13:05:00" //дата создания задания
},
... //следующие элементы списка связанных задач
]
},
...
],
"pages": "13" // общее количество страниц опросов (количество опросов, делённое на количество опросов на одной странице, т.е. 25).
}
Операции назначения опросов
Назначение опросов на организации и пользователей организаций.
Во всех запросах по назначению организаций невозможно убрать одну из организаций-получателей, если по ней есть назначенные участники или комментарии.
[CAI] GET /poll/:id/organization
Получить список организаций-получателей опроса.
// OUT <---
{ "res": "1",
"resText": "",
// список id организаций-получателей опроса
"organizations": [
{
"id": "2", //id организации
"name": "Отдел тестирования" //название организации
},
... //следующие элементы списка организаций
]
}
[CAI] PUT /poll/:id/organization
Изменить список организаций-получателей опроса. Организации, не указанные в списке, удаляются.
// IN --->
{
"organization_ids": ["1", "2", "292"] //новый список организаций
}
// OUT <---
{
"res": 1,
"resText": "",
"organizations": [
{
"id": "1", //id организации
"name": "Население" //название организации
},
... //следующие элементы списка организаций
]
}
[CAIu] GET /poll/:id/organization/:id/user
Получить список пользователей-участников опроса (а также администраторов/инспекторов) внутри организации вместе с их ответами.
Если указанная организация не является организацией пользователя, от имени которого выполняется запрос (и это не главный Администратор/Инспектор), получаем 403.
// OUT <---
{
"res": 1,
"resText": "",
"users": [
{
"user": {
"id": "618", //id пользователя
"fio": "Пользователь Отдела Тестирования" //ФИО пользователя
},
"confirmed_date": "2015-11-30 10:57:58.949", // дата и время окончательного ответа от организации: если пользователь не имеет флага (confirmed), то null;
//если пользователь сначала проголосовал, затем получил флаг, то проставляется дата выдачи флага; если пользователь сначала получил флаг, затем проголосовал, то проставляется дата голосования;
"comment": "Опциональный комментарий", //комментарий при голосовании
"confirmed": "t", //признак подтвержденного ответа: "t", "f"
"organization": {
"id": "2", //id организации
"name": "Отдел Тестирования T" //название организации
},
"accepted": "t", //ответ пользователя: "t" - положительный ответ, "f" - отрицательный ответ, null - нет ответа.
"dismiss_allowed": "t", //"f" - пользователь - администратор или инспектор, "t" - обычный пользователь
"date": "2015-11-30 10:57:58.892" //дата и время ответа
},
... //следующие элементы списка участников опроса
]
}
[CAIU] POST /poll/:id/organization/:id/user/:id
Добавить пользователя в список участников опроса. Добавляет системный комментарий в ветку организации.
Если указанная организация не является организацией пользователя, от имени которого выполняется запрос (и это не главный Администратор/Инспектор), получаем 403.
Если организация указанного пользователя не входит в число организаций-получателей опроса, либо её id не совпадает с переданным id, получаем 400.
Если указанный пользователь является администратором или инспектором организации, получаем 400.
Выполнение запроса создает запись для указанного пользователя и его организации в таблице голосов, если это не было сделано ранее.
// OUT <---
{
"res": 1,
"resText": "",
"users": [
//список пользователей-участников опроса в указанной организации
{
"id": "618", //id пользователя
"fio": "Пользователь Отдела Тестирования" //ФИО пользователя
},
{
"id": "619",
"fio": "Пользователь Отдела Тестирования T 2"
}
]
}
[CAIU] DELETE /poll/:id/organization/:id/user/:id
Удалить пользователя из списка участников опроса. Добавляет системный комментарий в ветку организации.
Пользователя невозможно удалить, если он уже проголосовал, либо имеет флаг подтверждения.
Если указанная организация не является организацией пользователя, от имени которого выполняется запрос (и это не главный Администратор/Инспектор), получаем 403.
Если указанный пользователь не является участником опроса, получаем 400.
Если указанный пользователь является администратором или инспектором организации, получаем 400.
Выполнение запроса удаляет запись для указанного пользователя и его организации в таблице голосов.
// OUT <---
{
"res": 1,
"resText": "",
"users": [
//список пользователей-участников опроса в указанной организации
{
"id": "618",
"fio": "Пользователь Отдела Тестирования"
}
]
}
[CAIU] PUT/poll/:id/organization/:id/user
Изменить список пользователей участников опроса. Справедливы все пункты, которые перечислены выше для добавления/удаления пользователей.
// IN --->
{ // список id пользователей-участников опроса
"user_ids": ["618", "619"]
}
// OUT <---
{
"res": 1,
"resText": "",
"users": [
//список пользователей-участников опроса в указанной организации
{
"id": "618", //id пользователя
"fio": "Пользователь Отдела Тестирования" //ФИО пользователя
},
{
"id": "619",
"fio": "Пользователь Отдела Тестирования T 2"
}
]
}
Операции голосования и подтверждения
[u] GET /poll/:id/vote
Узнать ответ текущего пользователя на опрос.
Если текущий пользователь не является администратором/инспектором организации-получателя или участником опроса, то получаем 403.
// OUT <---
{
"res": 1,
"resText": "",
"user": {
"id": "618", //id пользователя
"fio": "Пользователь Отдела Тестирования" //ФИО пользователя
},
"confirmed_date": "2015-11-30 10:57:58.949", //дата и время окончательного ответа от организации: если пользователь не имеет флага (confirmed), то null;
//если пользователь сначала проголосовал, затем получил флаг, то проставляется дата выдачи флага; если пользователь сначала получил флаг, затем проголосовал, то проставляется дата голосования;
"comment": "Комментарий", //комментарий при голосовании
"confirmed": "t", //признак подтвержденного ответа: "t", "f"
"organization": {
"id": "2", //id организации
"name": "Отдел Тестирования T" //название организации
},
"accepted": "t", //ответ пользователя: "t" - положительный ответ, "f" - отрицательный ответ, null - нет ответа.
"dismiss_allowed": "t", //"f" - пользователь - администратор или инспектор, "t" - обычный пользователь
"date": "2015-11-30 10:57:58.892" //дата и время ответа
}
[u] POST /poll/:id/vote
Ответить на опрос.
Добавляет системный комментарий в ветку организации:
- Если пользователь не имеет флага подтверждения, при его голосовании в ветку организации добавляется комментарий вида: «Пользователь user дал предварительный отрицательный ответ на опрос».
- Если пользователь имеет флаг подтверждения, при его голосовании в ветку организации добавляется комментарий вида: «Пользователь user дал окончательный отрицательный ответ на опрос».
Если текущий пользователь не является администратором/инспектором организации-получателя или участником опроса, то получаем 403.
Если опрос просрочен, подтвержден, ответ уже был дан нами, получаем 400.
Проставляет голос в таблицу голосов для текущего пользователя. Если пользователь является администратором или инспектором организации, предварительно эта запись создается.
Если пользователь имеет флаг подтверждения, то поле confirmed_date его голоса обновляется в момент голосования.
Комментарий при голосовании не обязателен. Если он есть, то он добавляется в ветку организации. Если комментарий не передан (или передан пустой комментарий), то он не добавляется в ветку организации.
// IN --->
{ "accepted": "t", // "t" в случае положительного ответа, "f" в случае отрицательного
"comment": "Комментарий при голосовании" //комментарий при голосовании, необязательный параметр
}
// OUT <---
{
"res": 1,
"resText": "",
"user": { //данные текущего пользователя
"id": "618", //id пользователя
"fio": "Пользователь Отдела Тестирования" //ФИО пользователя
},
"confirmed_date": "2015-11-30 10:57:58.949", //дата и время окончательного ответа от организации: если пользователь не имеет флага (confirmed), то null;
//если пользователь сначала проголосовал, затем получил флаг, то проставляется дата выдачи флага; если пользователь сначала получил флаг, затем проголосовал, то проставляется дата голосования;
"comment": "Комментарий", //комментарий при голосовании
"confirmed": "t", //признак подтвержденного ответа: "t", "f"
"organization": {
"id": "2", //id организации
"name": "Отдел Тестирования T" //название организации
},
"accepted": "t", //ответ пользователя: "t" - положительный ответ, "f" - отрицательный ответ, null - нет ответа.
"dismiss_allowed": "t", //"f" - пользователь - администратор или инспектор, "t" - обычный пользователь
"date": "2015-11-30 10:57:58.892" //дата и время ответа
}
[U] POST /poll/:id/user/:id/confirm
Подтвердить ответ указанного пользователя. Добавляет системный комментарий в ветку организации.
Если указанный пользователь является администратором или инспектором организации, то получаем 400 для него создается запись в таблице голосов. Иначе (т.е. имеем дело с обычным пользователем), и записи в таблице голосов для него нет (т.е. он не приглашен), то получаем 400.
Проставляет «флаг подтверждения» для указанного пользователя в таблице голосов. Если от указанного пользователя еще не поступало голоса, то флаг подтверждения передается ему «авансом». Флаг подтверждения можно выставить только один раз. При повторной попытке выставить флаг подтверждения получаем 400.
Ответы на опрос от пользователей внутри организации больше не принимаются, если есть подтвержденный голос от пользователя. При этом неважно, какое из двух событий произошло первым: голосование или его подтверждение. Этот голос считается голосом от организации.
В момент выдачи флага подтверждения проставляется confirmed_date у голоса (независимо от того, проголосовал пользователь или нет):
- Если пользователь проголосовал до выдачи флага, то confirmed_date голоса не меняется (остается такой же, как в момент выдачи флага).
- Если пользователь проголосовал после выдачи флага, то confirmed_date голоса обновляется в момент голосования.
// OUT <---
{
"res": 1,
"resText": ""
}
[CAI] GET /poll/:id/responses
Получить ответы организаций на опрос. Выгружаются только подтвержденные ответы.
// OUT <---
{
"res": 1,
"resText": "",
"responses": [
{
"user": {
"id": "618", //id пользователя
"fio": "Пользователь Отдела Тестирования" //ФИО пользователя
},
"confirmed_date": "2015-11-30 10:57:58.949", //дата и время окончательного ответа от организации: если пользователь не имеет флага (confirmed), то null;
//если пользователь сначала проголосовал, затем получил флаг, то проставляется дата выдачи флага; если пользователь сначала получил флаг, затем проголосовал, то проставляется дата голосования;
"comment": "Опциональный комментарий", //комментарий при голосовании
"confirmed": "t", //признак подтвержденного ответа: "t", "f"
"organization": {
"id": "2", //id организации
"name": "Отдел Тестирования T" //название организации
},
"accepted": "t", //ответ пользователя: "t" - положительный ответ, "f" - отрицательный ответ, null - нет ответа.
"dismiss_allowed": "t", //"f" - пользователь - администратор или инспектор, "t" - обычный пользователь
"date": "2015-11-30 10:57:58.892" //дата и время ответа
},
...//следующие ответы
]
}
[CAI] GET /poll/:id/organization-responses
Получить список организаций-получателей опроса и их ответов.
Выгружаются только подтвержденные ответы. Если от организации нет подтвержденного ответа, выгружается — «response»: null
// OUT <---
{
"res": 1,
"resText": "",
"organizations": [
{
"organization": {
"id": "2", //id организации
"name": "Отдел Тестирования T" //название организации
},
"response": {
"user": {
"id": "618", //id пользователя
"fio": "Пользователь Отдела Тестирования" //ФИО пользователя
},
"confirmed_date": "2015-11-30 10:57:58.949", //дата и время окончательного ответа от организации: если пользователь не имеет флага (confirmed), то null;
//если пользователь сначала проголосовал, затем получил флаг, то проставляется дата выдачи флага; если пользователь сначала получил флаг, затем проголосовал, то проставляется дата голосования;
"comment": "Опциональный комментарий", //комментарий при голосовании
"confirmed": "t", //признак подтвержденного ответа: "t", "f"
"accepted": "t", //ответ пользователя: "t" - положительный ответ, "f" - отрицательный ответ, null - нет ответа.
"dismiss_allowed": "t", //"f" - пользователь - администратор или инспектор, "t" - обычный пользователь
"date": "2015-11-30 10:57:58.892" //дата и время ответа
}
},
{
"organization": {
"id": "3", //id организации
"name": "Отдел Тестирования 2" //название организации
},
"response": null
},
...//следующие организации с их ответами
]
}
Комментарии к опросам
[CAIu] POST /poll/:id/comment
Добавить новый публичный комментарий (такой, для которого thread_id в таблице comments равен NULL).
// IN --->
{
"text": "Комментарий к опросу"
//Он может быть произвольной длины, содержать спецсимволы и переносы строк. Текст комментария не может быть пустым.
}
// OUT <---
{
"res": 1,
"resText": "",
"comment": {
"id": "9513", //id созданного комментария
"user": {
"id": "6", //id создателя комментария
"fio": "Главный Администратор" //ФИО создателя комментария
},
"date": "2015-11-30 11:48:20.657", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": null //id родительского комментария или null
}
}
[CAIu] POST /poll/:id/comment/:id/reply
Ответить на существующий публичный комментарий.
Если комментарий, на который мы пытаемся ответить, не является публичным, получаем 400.
// IN --->
{
"text": "Комментарий к опросу"
//Он может быть произвольной длины, содержать спецсимволы и переносы строк. Текст комментария не может быть пустым.
}
// OUT <---
{
"res": 1,
"resText": "",
"comment": {
"id": "9514", //id созданного комментария
"user": {
"id": "6", //id создателя комментария
"fio": "Главный Администратор" //ФИО создателя комментария
},
"date": "2015-11-30 11:48:20.657", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": 9513 //id родительского комментария или null
}
}
[CAIu] GET /poll/:id/comment/:id/reply
Получить список всех ответов на существующий публичный комментарий.
Если указанный комментарий не является публичным, получаем 400.
// OUT <---
{
"res": 1,
"resText": "",
"comments": [
{
"id": "9514", //id комментария
"user": {
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-30 11:51:46.704", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": "9513" //id родительского комментария или null
},
... //следующие элементы списка ответных комментариев
]
}
[CAIu] GET /poll/:id/comment
Получить список всех публичных комментариев. Сортировка по убыванию поля id.
// OUT <---
{
"res": 1,
"resText": "",
"comments": [
{
"id": "9513", //id комментария
"user": {
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-30 11:51:46.704", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": "9513" //id родительского комментария или null
},
... //следующие элементы списка комментариев
]
}
[AIu] POST /poll/:id/organization/:id/comment
Добавить новый комментарий в ветке определенной организации.
// IN --->
{
"text": "Комментарий к опросу"
//Он может быть произвольной длины, содержать спецсимволы и переносы строк. Текст комментария не может быть пустым.
}
// OUT <---
{
"res": 1,
"resText": "",
"comment": {
"id": "9515", //id созданного комментария
"user": {
"id": "6", //id создателя комментария
"fio": "Главный Администратор" //ФИО создателя комментария
},
"date": "2015-11-30 11:49:27.657", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": null //id родительского комментария или null
}
}
[AIu] POST /poll/:id/organization/:id/comment/:id/reply
Ответить на существующий комментарий в ветке определенной организации.
Если текущий пользователь — не главный Администратор/Инспектор, и его организация не совпадает с указанной организацией, получаем 403.
Если комментарий, на который мы пытаемся ответить, находится в ветке не той организации, которую мы указываем, либо является публичным, получаем 400.
// IN --->
{
"text": "Комментарий к опросу"
//Он может быть произвольной длины, содержать спецсимволы и переносы строк. Текст комментария не может быть пустым.
}
// OUT <---
{
"res": 1,
"resText": "",
"comment": {
"id": "9515", //id созданного комментария
"user": {
"id": "6", //id создателя комментария
"fio": "Главный Администратор" //ФИО создателя комментария
},
"date": "2015-11-30 11:49:27.657", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": null //id родительского комментария или null
}
}
[AIu] GET /poll/:id/organization/:id/comment/:id/reply
Получить список всех ответов на существующий в ветке определенной организации комментарий .
Если текущий пользователь — не главный Администратор/Инспектор, и его организация не совпадает с указанной организацией, получаем 403.
Если указанный комментарий находится в ветке не той организации, которую мы указываем, либо является публичным, получаем 400.
// OUT <---
{
"res": 1,
"resText": "",
"comments": [
{
"id": "9516", //id комментария
"user": {
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-30 11:51:46.704", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": "9515" //id родительского комментария или null
},
... //следующие элементы списка ответных комментариев
]
}
[AIu] GET /poll/:id/organization/:id/comment
Получить список всех комментариев в ветке определенной организации (если мы имеем к ней доступ). Сортировка по убыванию поля id.
// OUT <---
{
"res": 1,
"resText": "",
"comments": [
{
"id": "9515", //id комментария
"user": {
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-30 11:51:46.704", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": null //id родительского комментария или null
},
... //следующие элементы списка ответных комментариев
]
}
Связи с задачами
[CAI] POST /poll/:id/link/issue/:id
Связать с опросом указанную задачу.
// OUT <---
{ "res": "1",
"resText": ""
}
[CAI] DELETE /poll/:id/link/issue/:id
Удалить связь между опросом и указанной задачей. Если связи не существует, пользователь получает 400.
// OUT <---
{ "res": "1",
"resText": ""
}
[CAIu] GET /poll/:id/link/issue
Получить список связанных с опросом задач.
// OUT <---
{
"res": 1,
"resText": "",
"issues": [
{
"id": "789249", //id задания
"user_id": "6", //id создателя задания
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Название", //заголовок
"text": "Описание", //описание
"department_id": "3", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Власть народу", //название назначенной организации
"department_logo": null, //логотип организации
"deadline": "2015-11-24 16:38:21", //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_logo": "2.png", //логотип типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-11-25 15:42:48.907", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задание: "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-11-25 15:42:49.529", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"confirmed_comment": null, //комментарий для неутвержденных заданий
"assigned_department_name": "Власть народу", //название назначенной организации
"assigned_to_user": "613", //id назначенного пользователя
"assigned_user_fio": "Борисова Алина", //ФИО назначенного пользователя
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to": "3", //id назначенной организации
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"lon": "55.56", //координаты точки - lon
"news_date": "2015-12-21 13:05:00" //дата создания задания
},
... //следующие элементы списка связанных задач
]
}
[CAIu] GET /poll/:id/link/issue/:id
Получить связанную с опросом задачу.
// OUT <---
{ "res": "1",
"resText": "",
"issue": {
"id": "789249", //id задания
"user_id": "6", //id создателя задания
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Название", //заголовок
"text": "Описание", //описание
"department_id": "3", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Власть народу", //название назначенной организации
"department_logo": null, //логотип организации
"deadline": "2015-11-24 16:38:21", //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_logo": "2.png", //логотип типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-11-25 15:42:48.907", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задание: "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-11-25 15:42:49.529", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"confirmed_comment": null, //комментарий для неутвержденных задания
"assigned_department_name": "Власть народу", //название назначенной организации
"assigned_to_user": "613", //id назначенного пользователя
"assigned_user_fio": "Борисова Алина", //ФИО назначенного пользователя
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to": "3", //id назначенной организации
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"lon": "55.56", //координаты точки - lon
"news_date": "2015-12-21 13:05:00" //дата создания задания
}
}
[CAIu] GET /poll/:id/link/issue/:id/comment
Получить список комментариев связанной с опросом задачи.
// OUT <---
{
"res": 1,
"resText": "",
"comments": [
{
"id": "9145", //id комментария
"reference_id": null, //id родительского комментария
"level": "0", //уровень комментария
"date": "2015-11-26 16:01:34.053", //дата создания комментария
"update_text": "Заданию назначили исполнителя: У задания изменился этап работы с рассмотрение на исполнение", //текст обновления (для комментария об обновлении задания)
"comment": "Исполнитель назначен, задача в процессе выполнения", //текст комментария
"visible": "6", //служебное поле для обозначения видимости комментария
"type": "2", //тип комментария: "1" - обычный, "2" - системный
"user_id": "6", //id создателя комментария
"fio": "Главный Администратор", //ФИО создателя комментария
"news_id": "789237" //id задания
}
]
}
[CAIu] GET /poll/:id/link/issue/:id/attachment
Получить список файлов, прикрепленных к задаче, связанной с опросом.
{
"res": 1,
"resText": "",
"sounds": [ //массив JSON-описаний связанных аудио файлов
{
"id": "6231", //id аудио файла
"num": "1", //порядковый номер аудио файла
"name": "Интервью.mp3", //исходное название аудио файла
"description": "", //описание аудио файла
"extension": "mp3", //расширение аудио файла
"file_name": "sounds_306_789237_1.mp3", //название аудио файла на сервере
"link": null //служебное поле, для аудио файлов всегда null
}
... //следующие элементы списка аудио файлов
],
"difvideo": [], //массив JSON-описаний связанных видео файлов (отличных от *.flv форматов)
"files": [ //массив JSON-описаний связанных файлов
{
"id": "6230", //id файла
"num": "1", //порядковый номер файла
"name": "Selenium.txt", //исходное название файла
"description": "", //описание файла
"extension": "txt", //расширение файла
"file_name": "files_306_789237_1.txt", //название файла на сервере
"link": null //служебное поле, для файлов всегда null
},
... //следующие элементы списка видео файлов
],
"videos": [ //массив JSON-описаний связанных видео файлов формата *.flv
{
"id": "6232", //id видео файла
"num": "0", //порядковый номер видео файла
"name": "", //исходное название видео файла
"description": "видео", //описание видео файла
"extension": "flv", //расширение видео файла
"file_name": null, //название видео файла на сервере
"link": "http://www.youtube.com/watch?v=y6ienqB7avY" //ссылка, если видео файл находится не на сервере, или null
},
... //следующие элементы списка видео файлов
],
"photos": [ //массив JSON-описаний связанных фотографий
{
"id": "6229", //id фотографии
"num": "1", //порядковый номер фотографии
"name": "photo_test.jpg", //исходное название фотографии
"description": "", //описание фотографии
"extension": "jpg", //расширение файла фотографии
"file_name": "photo_306_789237_1.jpg", //название файла фотографии на сервере
"link": null //служебное поле, для фотографий всегда null
},
... //следующие элементы списка фотографий
]
}
cerebellum-rest-issues
Запросы по задачам, статусам и категориям задач: /news, /status, /category, /newstype, /custom_field
/news
CRUD-операции с заданиями
[t] POST /news
Добавление задания.
// IN --->
{
"action": "put", //необходимо явно указать тип запроса "put" для соответствия с MapAdmin
"values": {
"news_date": "21.12.2015", //дата
"news_hour": "13", //часы
"news_minute": "05", //минуты
"title": "Название", //заголовок
"text": "Описание", //описание
"news_type_id": "1", //id типа задания
"category": "1", //id категории
"department_id": "3", //id организации-создателя, параметр необходим, если задание создает пользователь без организации (для пользователей с организаций автоматически проставляется id их организации)
"deadline": "2015-11-24 16:38:21", //дедлайн
"system_data": "версия: 1.1.1", //
"photo_main": "1", //порядковый номер фотографии, которая будет в заголовке.
//Если отправляется параметр photos, то это порядковый номер фотографии в нем, начиная с 0, иначе данный параметр можно не отсылать, либо отсылать = -1
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
},
"point": [55.56,46.67], //координаты точки в формате [lon, lat]
"photos": ["dN2k9B9r42YbfDyz.jpg", "tAFEAB5Aftt8ybta.png"], //массив названий фотографий, после загрузки
"photos_name": ["1313410929241.jpg", "131341095.png"], //массив исходных названий фотографий
"photos_desc": ["Главное фото", "Второстепенное фото"], //массив описаний фотографий
"video": ["dN2k9B9r42YbreDyz.3gp", "dN2k9B9r42YrtDyz.3gp"], //массив названий видео файлов, после загрузки
"video_name": ["1313910929241.3gp", "131349095.3gp"], //массив исходных названий видео файлов
"video_desc": ["Первая запись", "Вторая запись"], //массив описаний видео файлов
"files": ["dN2k9B9r42YbfDtz.txt", "tAFEAB5Aftt8ybtr.txt"], //массив названий файлов, после загрузки
"files_name": ["1313410926241.txt", "131341096.txt"], //массив исходных названий файлов
"files_desc": ["Первая запись", "Вторая запись"], //массив описаний файлов
"sounds": ["dN2k9B9r42YbtDtz.m4a", "tAFEAB5Aftt9ybtr.m4a"], //массив названий звуковых файлов, после загрузки
"sounds_name": ["1313410926541.m4a", "131341099.m4a"], //массив исходных названий звуковых файлов
"sounds_desc": ["Первая запись", "Вторая запись"] //массив описаний звуковых файлов
}
// OUT <---
{
"res": 1,
"resText": "",
"newsId": 789249 //id созданного задания
}
[t*] POST /news/:id/update
Обновление задания.
// IN --->
{
"title": "Название", //заголовок
"text": "Описание", //описание
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_organization_id": "3", //id назначенной организации
"assigned_user_id": "613", //id назначенной пользователя
"news_type_id": "1", //id типа задания
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"category_id": "1", //id категории (приоритета)
"deadline": "2015-11-24 16:38:21", //дедлайн
"system_data": "версия: 1.1.1",
"restricted": "false", //ограничение доступа: "t", "f"
"archive": "false", //архивное задание: "t", "f"
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"point": [55.56,46.67], //координаты точки в формате [lon, lat]
"pointZoom": 14, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"update_comments": "Задание было назначено", //комментарии при обновлении
"updatecomment_visible_all": "f", //видимость всем: "t", "f"
"updatecomment_visible_user": "t", //видимость только автору задания: "t", "f"
"updatecomment_visible_assigned_to": "t", //видимость администраторам назначенного ведомства: "t", "f"
"updatecomment_visible_assigned_to_user": "t", //видимость назначенному пользователю: "t", "f"
"photos": [ //массив прикрепленных фотографий
{"file":"naaethsde56gh.jpg","fileName":"photo1.jpg"},
{"file":"sdbvr54456fc4.png","fileName":"photo2.png"}
],
"videos": [//массив прикрепленных видео файлов
{"file":"naaethsde56gh.3gp","fileName":"video1.3gp"},
{"file":"sdbvr54456fc4.3gp","fileName":"video2.3gp"}
],
"files": [//массив прикрепленных файлов
{"file":"naaethsde56gh.txt","fileName":"file1.txt"},
{"file":"sdbvr54456fc4.txt","fileName":"file2.txt"}
],
"sounds": [//массив прикрепленных аудио файлов
{"file":"naaethsde56gh.m4a","fileName":"sound1.m4a"},
{"file":"sdbvr54456fc4.m4a","fileName":"sound2.m4a"}
]
}
// OUT <---
{
"res": 1,
"resText": ""
}
*Права пользователей на выполнение данного запроса зависят от capability роли пользователя.
Понятие capability в терминологии MapAdmin обозначает действие, которое можно выполнять с заданием.
Права пользователей на выполнения данного запроса могут быть описаны следующим образом:
- для изменения значения поля confirmed роль пользователя должна иметь capability со свойствами: capability_id = 6, capability_name = «confirm»,
- для изменения значения поля assigned_organization_id роль пользователя должна иметь capability со свойствами: capability_id = 7, capability_name = «assign_department»,
- для изменения значения поля assigned_user_id роль пользователя должна иметь capability со свойствами: capability_id = 8, capability_name = «assign_user»,
- для изменения значения поля assigned_status роль пользователя должна иметь capability со свойствами: capability_id = 9, capability_name = «assign_status»,
- для изменения значения поля text роль пользователя должна иметь capability со свойствами: capability_id = 3, capability_name = «edit».
[t*] GET /news/:id
Получение данных по конкретному заданию.
// OUT <---
{
"res": 1,
"resText": "",
"news_data": {
"id": "789249", //id созданного задания
"user_id": "6", //id создателя задания
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Название", //заголовок
"text": "Описание", //описание
"department_id": "3", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Власть народу", //название назначенной организации
"department_logo": null, //логотип организации
"deadline": "2015-11-24 16:38:21", //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_logo": "2.png", //логотип типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-11-25 15:42:48.907", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задание: "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-11-25 15:42:49.529", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"confirmed_comment": null, //комментарий для неутвержденных заданий
"assigned_department_name": "Власть народу", //название назначенной организации
"assigned_to_user": "613", //id назначенного пользователя
"assigned_user_fio": "Борисова Алина", //ФИО назначенного пользователя
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to": "3", //id назначенной организации
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"lon": "55.56", //координаты точки - lon
"news_date": "2015-12-21 13:05:00" //дата создания задания
}
}
*Права пользователей на выполнение данного запроса зависят от capability роли пользователя.
Понятие capability в терминологии MapAdmin обозначает действие, которое можно выполнять с заданием.
Для того, чтобы пользователь мог просмотреть задание, должно выполняться по крайней мере одно из двух условий:
- пользователь должен иметь роль h (руководитель),
- роль должна иметь capability со свойствами: capability_id = 1, capability_name = «show».
[t*] POST /news/:id
Логическое удаление задания.
// IN --->
{
"action": "delete" //необходимо явно указать тип запроса "delete" для соответствия с MapAdmin
}
// OUT <---
{
"res": 1,
"resText": ""
}
*Права пользователей на выполнение этого запроса зависят от capability роли пользователя.
Понятие capability в терминологии MapAdmin обозначает действие, которое можно выполнять с заданием.
Для того, чтобы пользователь мог удалить задание, его роль должна иметь capability со свойствами: capability_id = 2, capability_name = «delete».
[A] DELETE /news/:id/hard
Физическое удаление задания.
// OUT <---
{
"res": 1,
"resText": ""
}
/status
CRUD-операции со статусами заданий.
[AI] POST /status
Создать статус.
// IN --->
{
"name": "рассмотрение", //название статуса
"visible": "t", //видимость статуса пользователям в списке статусов: 't', 'f'
"default": "f", //является ли данный статус статусом по умолчанию: 't', 'f'
"isclosed": "f" //является ли данный статус статусом выполнено: 't', 'f'
}
// OUT <---
{ "res": "1",
"resText": "",
"status":
{
"id": "1", //id статуса
"name": "рассмотрение", //название статуса
"visible": "t", //видимость статуса пользователям в списке статусов: 't', 'f'
"default": "f", //является ли данный статус статусом по умолчанию: 't', 'f'
"isclosed": "f" //является ли данный статус статусом выполнено: 't', 'f'
}
}
[AI] PUT /status/:id
Изменить статус.
// IN --->
{
"name": "подробное рассмотрение", //название статуса
"visible": "f", //видимость статуса пользователям в списке статусов: 't', 'f'
"default": "f", //является ли данный статус статусом по умолчанию: 't', 'f'
"isclosed": "t" //является ли данный статус статусом выполнено: 't', 'f'
}
// OUT <---
{ "res": "1",
"resText": "",
"status":
{
"id": "1", //id статуса
"name": "подробное рассмотрение", //название статуса
"visible": "f", //видимость статуса пользователям в списке статусов: 't', 'f'
"default": "f", //является ли данный статус статусом по умолчанию: 't', 'f'
"isclosed": "t" //является ли данный статус статусом выполнено: 't', 'f'
}
}
[t] GET /status
Получение списка статусов заданий.
Параметры фильтрации для этапов (статусов)
- search — текстовый поиск этапов(статусов) по значениям параметров id, name;
- name — текстовый поиск этапов(статусов) по значению параметра name;
- default — при значении default=true или default=t отображаются статусы, которые являются статусами по умолчанию; возможные значения: true, false, t, f;
- visible — при значении visible=true или visible=t отображаются статусы, видимые пользователям в списке статусов; возможные значения: true, false, t, f;
- isClosed — при значении isClosed=true или isClosed=t отображаются статусы, относящиеся к выполненным; возможные значения: true, false, t, f;
- sortBy — поле, по которому ведется сортировка. По умолчанию — id;
- sortDirection — направление сортировки (ASC, DESC). По умолчанию — ASC.
//Примеры запросов:
/status
/status?visible=true
/status?search=проверка
/status?visible=true&default=false&isClosed=false
/status?visible=true&default=false&isClosed=false&sortBy=name&sortDirection=DESC
// OUT <---
{
"res": 1,
"resText": "",
"count": "10", //количество статусов, удовлетворяющих заданным условиям поиска и фильтрации
"status": [
{
"id": "1", //id статуса
"name": "рассмотрение", //название статуса
"visible": "t", //видимость статуса пользователям в списке статусов: 't', 'f'
"default": "t", //является ли данный статус статусом по умолчанию: 't', 'f'
"isclosed": "f" //является ли данный статус статусом выполнено: 't', 'f'
},
... // следующие элементы списка статусов
]
}
[AI] DELETE /status/:id
Удалить статус.
// OUT <---
{ "res": "1",
"resText": ""
}
/category
CRUD-операции с категориями (приоритетами) заданий.
[AI] POST /category
Создать категорию.
// IN --->
{
"name": "Плановые" //название категории
}
// OUT <---
{
"res": "1",
"resText": "",
"category": {
"id": "1", //id категории
"name": "Плановые", //название категории
"icon": "default_category.png", //название иконки
"order_important": "7" //степень значимости категории
}
}
Примечания:
- Поле «icon» будет заполнено автоматически, путем связывания стандартной иконки «default_category_icon.png», которая лежит в CEREBELLUM_HOME/conf/resources/files/default_category_icon.png.
- Поле «order_important» будет заполнено автоматически, путем вычисления следующего, наибольшего числового значения.
[AI] PUT /category/:id
Изменить категорию.
// IN --->
{
"name": "Внеплановые" //название категории
}
// OUT <---
{
"res": "1",
"resText": "",
"category": {
"id": "1", //id категории
"name": "Внеплановые", //название категории
"icon": "category_2.png", //название иконки
"order_important": "8" //степень значимости категории
}
}
[t] GET /category
Получение списка категорий (приоритетов) заданий.
Параметры фильтрации для категорий (приоритетов) заданий
- search — текстовый поиск приоритетов по значениям параметров id, name;
- name — текстовый поиск приоритетов по значению параметра name;
- sortBy — поле, по которому ведется сортировка. По умолчанию — order_important;
- sortDirection — направление сортировки (ASC, DESC). По умолчанию — ASC.
//Примеры запросов:
/category
/category?search=test
/category?search=test&sortBy=name&sortDirection=ASC
// OUT <---
{
"res": 1,
"resText": "",
"count": "10", //количество приоритетов (категорий) заданий, удовлетворяющих заданным условиям поиска и сортировки
"category": [
{
"id": "1", //id
"name": "Плановые", //название категории
"icon": "category_1.png", //название иконки
"order_important": "7" //степень значимости категории
},
... // следующие элементы списка категорий (приоритетов)
]
}
[AI] DELETE /category/:id
Удалить категорию.
// OUT <---
{
"res": "1",
"resText": ""
}
[AI] POST /category/:id/uploadicon
Загрузка и прикрепление иконки к категории.
// OUT <---
{
"res": 1,
"resText": "",
"category": {
"id": "450",
"name": "test",
"icon": "f2761b20-db3a-1004-86b0-68c8f55ace7c.png", //имя файла, преобразованное с помощью UUID-стандарта идентификации
"order_important": "14"
}
}
[AI] POST /category/sort
Сортировка категорий (по полю order_important).
// IN --->
{
"ids":[39,1,2,3] // список всех существующих id категорий
}
// OUT <---
{
"res": 1,
"resText": "",
"category": [{ //отсортированный список категорий
"id": "39",
"name": "test",
"icon": "f2761b20-db3a-1004-86b0-68c8f55ace7c.png",
"order_important": "4"
}, {
"id": "1",
"name": "Плановые",
"icon": "category_9_20140327111133.png",
"order_important": "1"
}, {
"id": "2",
"name": "Дополнительные",
"icon": "category_10_20140327111111.png",
"order_important": "2"
}, {
"id": "3",
"name": "Сверх норматива\t",
"icon": "category_12.png",
"order_important": "3"
}]
}
/news/:id
[t] POST /news/:id/comments
Добавление комментария к заданию.
// IN --->
{
"action": "post", //необходимо явно указать тип запроса "post" для соответствия с MapAdmin
"comment": "Комментарий" //текст комментария
}
// OUT <---
{
"res": 1,
"resText": ""
}
[t] POST /news/:id/comments/:referenceId
Добавление ответного комментария: id — id задания, referenceId — id существующего комментария.
// IN --->
{
"action": "post", //необходимо явно указать тип запроса "post" для соответствия с MapAdmin
"comment": "Комментарий" //текст комментария
}
// OUT <---
{
"res": 1,
"resText": ""
}
[t] GET /news/:id/comments
Список комментариев к заданию.
// OUT <---
{
"res": 1,
"resText": "",
"comments": [
{
"id": "9145", //id комментария
"reference_id": null, //id комментария, на который данный комментарий является ответом
"level": "0", //уровень комментария
"date": "2015-11-26 16:01:34.053", //дата создания комментария
"update_text": "Работы начаты", //текст обновления (для комментария об обновлении задания)
"comment": "", //текст комментария
"visible": "6", //служебное поле для обозначения видимости комментария
"type": "2", //тип комментария: "1" - обычный, "2" - системный
"fio": "Главный Администратор", //ФИО создателя комментария
"user_id": "6", //id создателя комментария
"news_id": "789237" //id задания
},
... //следующие элементы списка комментариев
]
}
[t] GET /news/:id/point
Координаты точки, привязанной к заданию.
// OUT <---
{
"res": 1,
"resText": "",
"point": [ //координаты точки
"55.7576077716846", //широта (latitude)
"37.6749150732857" //долгота (longitude)
]
}
[t] GET /news/:id/text
Текст задания.
// OUT <---
{
"res": 1,
"resText": "",
"text": "На спортивной площадке и на детской площадке нет освещения, поэтому дети не могут гулять там вечером, так как рано темнеет.
В темноте дети играют в футбол. Причем фонари сделаны, но не работают." //текст задания
}
[t] GET /news/:id/shortdata
Краткая информация по заданию.
// OUT <---
{
"res": 1,
"resText": "",
"news": {
"id": "824786", // id задания
"title": "14060143 Неисправность элементов освещения", //заголовок задания
"news_date": "2016-04-13 10:38:00", //дата задания в формате YYYY-MM-DD hh:mm:ss
"num_main_photo": null, //номер основной фотографии
"archive": "f", //находится ли задание в архиве - true или false
"system_data": "14060143 Неисправность элементов освещения", //системные данные по заданию
"photos": "2", //количество фотографий
"video": "1", //количество видеофайлов
"difvideo": "0", //количество видеофайлов
"sounds": "1", //количество аудиофайлов
"files": "1", //количество файлов
"shorttext": "На спортивной площадке и на детской площадке нет освещения, поэтому дети не могут гулять там вечером, так как рано темнеет.
В темноте дети играют в футбол. Причем фонари сделаны, но не ", // текст задания (первые 45 символов)
"point": "0", //точка, прикрепленная к заданию
"date": "13.04.2016 10:38" //дата задания в формате DD.MM.YYYY hh:mm
}
}
[g] GET /download/newsPhoto/:id
Получение главной фотографии задания (если она имеется) в виде файла.
В теле ответа отобразится главная фотография задания.
[t] GET /news/:id/photos
Получение списка фотографий заданий.
// OUT <---
{
"res": 1,
"resText": "",
"photos": [
{
"id": "6195", //id фотографии
"num": "1", //порядковый номер фотографии
"name": "photo_test.jpg", //исходное название фотографии
"description": "фото для задания", //описание фотографии
"extension": "jpg", //расширение файла фотографии
"file_name": "photo_1_789146_1.jpg", //название файла фотографии на сервере
"link": null //служебное поле, для фотографий всегда null
},
... //следующие элементы списка фотографий
]
}
[t] GET /news/:id/video
Получение списка видео файлов задания.
// OUT <---
{
"res": 1,
"resText": "",
"video": [
{
"id": "6196", //id видео файла
"num": "0", //порядковый номер видео файла
"name": "video_test.flv", //исходное название видео файла
"description": "видео для задания", //описание видео файла
"extension": "flv", //расширение видео файла
"file_name": "video_1.flv", //название видео файла на сервере
"link": "https://www.youtube.com/watch?v=W3OamroyHQQ" //ссылка, если видео файл находится не на сервере, или null
},
... //следующие элементы списка видео файлов
]
}
[t] GET /news/:id/difvideo
Получение списка видео файлов задания (форматов, отличных от *.flv).
// OUT <---
{
"res": 1,
"resText": "",
"difvideo": [
{
"id": "6197", //id видео файла
"num": "1", //порядковый номер видео файла
"name": "video_test.3gp", //исходное название видео файла
"description": "видео для задания", //описание видео файла
"extension": "3gp", //расширение видео файла
"file_name": "video_1.3gp", //название видео файла на сервере
"link": null //ссылка, если видео файл находится не на сервере, - для данного типа видео всегда null
},
... //следующие элементы списка видео файлов
],
"difvideo_converted": [""] //массив названий сконвертированных видео файлов
}
[t] GET /news/:id/files
Получение списка файлов задания.
// OUT <---
{
"res": 1,
"resText": "",
"files": [
{
"id": "6198", //id файла
"num": "1", //порядковый номер файла
"name": "test.txt", //исходное название файла
"description": "файл для задания", //описание файла
"extension": "txt", //расширение файла
"file_name": "test_1.txt", //название файла на сервере
"link": null //служебное поле, для файлов всегда null
},
... //следующие элементы списка файлов
]
}
[t] GET /news/:id/sounds
Получение списка аудио файлов задания.
// OUT <---
{
"res": 1,
"resText": "",
"sounds": [
{
"id": "6199", //id аудио файла
"num": "1", //порядковый номер аудио файла
"name": "test.mp3", //исходное название аудио файла
"description": "аудио файл для задания", //описание аудио файла
"extension": "mp3", //расширение аудио файла
"file_name": "test_1.mp3", //название видео аудио файла на сервере
"link": null //служебное поле, для аудио файлов всегда null
},
... //следующие элементы списка файлов
],
"sounds_converted": [""] //массив названий сконвертированных аудио файлов
}
[t*] POST /news/:id/photos/:fileId
Удаление фотографии задания, id — id задания, fileId — id фотографии.
// IN --->
{
"action": "delete" //необходимо явно указать тип запроса "delete" для соответствия с MapAdmin
}
// OUT <---
{
"res": 1,
"resText": ""
}
*Права пользователей на выполнение данного запроса зависят от capability роли пользователя.
Понятие capability в терминологии MapAdmin обозначает действие, которое можно выполнять с заданием.
Для того, чтобы пользователь мог выполнить данный запрос, его роль должна иметь capability со свойствами: capability_id = 5, capability_name = «edit_files».
[t*] POST /news/:id/video/:fileId
Удаление видео файла задания, id — id задания, fileId — id видео файла.
// IN --->
{
"action": "delete" //необходимо явно указать тип запроса "delete" для соответствия с MapAdmin
}
// OUT <---
{
"res": 1,
"resText": ""
}
*Права пользователей на выполнение данного запроса зависят от capability роли пользователя.
Понятие capability в терминологии MapAdmin обозначает действие, которое можно выполнять с заданием.
Для того, чтобы пользователь мог выполнить данный запрос, его роль должна иметь capability со свойствами: capability_id = 5, capability_name = «edit_files».
[t*] POST /news/:id/difvideo/:fileId
Удаление видео файла задания, id — id задания, fileId — id видео файла.
// IN --->
{
"action": "delete" //необходимо явно указать тип запроса "delete" для соответствия с MapAdmin
}
// OUT <---
{
"res": 1,
"resText": ""
}
*Права пользователей на выполнение данного запроса зависят от capability роли пользователя.
Понятие capability в терминологии MapAdmin обозначает действие, которое можно выполнять с заданием.
Для того, чтобы пользователь мог выполнить данный запрос, его роль должна иметь capability со свойствами: capability_id = 5, capability_name = «edit_files».
[t*] POST /news/:id/files/:fileId
Удаление файла задания, id — id задания, fileId — id файла.
// IN --->
{
"action": "delete" //необходимо явно указать тип запроса "delete" для соответствия с MapAdmin
}
// OUT <---
{
"res": 1,
"resText": ""
}
*Права пользователей на выполнение данного запроса зависят от capability роли пользователя.
Понятие capability в терминологии MapAdmin обозначает действие, которое можно выполнять с заданием.
Для того, чтобы пользователь мог выполнить данный запрос, его роль должна иметь capability со свойствами: capability_id = 5, capability_name = «edit_files».
[t*] POST /news/:id/sounds/:fileId
Удаление аудио файла задания, id — id задания, fileId — id файла.
// IN --->
{
"action": "delete" //необходимо явно указать тип запроса "delete" для соответствия с MapAdmin
}
// OUT <---
{
"res": 1,
"resText": ""
}
*Права пользователей на выполнение данного запроса зависят от capability роли пользователя.
Понятие capability в терминологии MapAdmin обозначает действие, которое можно выполнять с заданием.
Для того, чтобы пользователь мог выполнить данный запрос, его роль должна иметь capability со свойствами: capability_id = 5, capability_name = «edit_files».
/news
Операции со списком заданий
[t] GET /news/listAfterId/:newsId/:limit/{:confirmed}
newsId — id задания, после которой надо получить список заданий, по умолчанию 0,
limit — количество заданий в запросе, по умолчанию 1000,
confirmed — значение поля «confirmed»: «1» — утверждено, «2» — не утверждено, «0» — новое; необязательный параметр.
Параметры фильтрации для списка заданий
- confirmed — значение поля «confirmed»: «1» — утверждено, «2» — не утверждено, «0» — новое. Значение GET-параметра запроса (?confirmed или &confirmed) перекроет значение PATH-параметра «confirmed» (/:confirmed) для запроса GET /news/listAfterId/:newsId/:limit/{:confirmed}.
- withAssigned — при значении withAssigned=true в список добавляются не новые и не закрытые задания, назначенные пользователю, либо его ведомству (если он админ) задания
- withClosed — при значении withClosed=true в список добавляются задания со статусом выполнено, назначенные пользователю, либо его ведомству (если он админ)
- withArchive — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)
- onlyMy — при значении onlyMy=true, в списке отображаются только задания, созданные пользователем. Параметры withAssigned, withClosed, onlyStatus при этом игнорируются
- onlyStatus — отображаются задания с соответствующими статусами. Id статусов передаются через запятую. Например, onlyStatus=2,3
- onlyStates — отображаются задания, которые находятся в соответствующих состояниях. Id статусов передаются через запятую. Например, onlyStates=6,11
- onlyAssigned — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначены.
- category_id — фильтр по категориям заданий. Id категорий передаются через запятую. Например, category_id=1,2
- type_id — фильтр по типам заданий. Id типов передаются через запятую. Например, type_id=3,4,5
- gtUpdateDate — отображаются задания, дата обновления которых больше указанной даты (дата указывается в Timestamp, например, gtUpdateDate=1440835402).
- ltUpdateDate — отображаются задания, дата обновления которых меньше указанной даты (дата указывается в Timestamp, например, ltUpdateDate=1440835402).
- gtCreateDate — отображаются задания, дата создания которых больше указанной даты (дата указывается в Timestamp, например, gtCreateDate=1440835402).
- ltCreateDate — отображаются задания, дата создания которых меньше указанной даты (дата указывается в Timestamp, например, ltCreateDate=1440835402).
- gtDeadline — отображаются задания, параметр deadline которых больше указанной даты (дата указывается в Timestamp, например, gtDeadline =1440835402).
- ltDeadline — отображаются задания, параметр deadline которых меньше указанной даты (дата указывается в Timestamp, например, ltDeadline =1440835402).
- assigned_organization_id — отображаются задания, которые назначены на указанные организации. Id организаций передаются через запятую. Например, assigned_organization_id=1,2,292
- assigned_user_id — отображаются задания, которые назначены на указанных пользователей. Id пользователей передаются через запятую. Например, assigned_user_id=616,618
- user_id — отображаются задания, созданные указанными пользователями. Id пользователей передаются через запятую. Например, user_id=616,618
- search — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, text, title. Например, search=7891
- customFields — отображаются задания, отфильтрованные по значениям кастомных полей. Например, customFields=[{«name»:»Dop_pole_dlya_testov»,»op»:»EQ»,»value»:»12345″},{«name»:»Telefon__int__88432000555__»,»op»:»NOT NULL»}].
Более подробно фильтрация по кастомным полям описана в разделе Фильтрация задач по custom-полям - expired — при значении expired=true отображаются непросроченные задания(значение параметра deadline меньше текущей даты и параметр confirmed=1), при значении expired=false отображаются просроченные задания(значение параметра deadline больше текущей даты или значение параметра confirmed отлично от 1)
- sortBy — поле, по которому осуществляется сортировка. По умолчанию — news_date.
- sortDirection — направление сортировки (ASC, DESC). По умолчанию — DESC.
//Примеры запросов:
/news/listAfterId/0/10/1?withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&category_id=1,2
/news/listAfterId/0/10/1?gtUpdateDate=1440835402<UpdateDate=1443513802>CreateDate=1438157002<CreateDate=1443513802&expired=false
/news/listAfterId/0/10/2?assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&confirmed=1
/news/listAfterId/0/10/0?search=тест&customFields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"12345"},{"name":"Telefon__int__88432000555__","op":"NOT NULL"}]
// OUT <---
{
"res": 1,
"resText": "",
"news_list": [
{
"id": "788576", //id задания
"user_id": "6", //id создателя
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Заголовок", //заголовок
"text": "Текст", //Описание
"department_id": "1", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Население", //название организации создателя
"department_logo": "logo_3.png", //логотип организации создателя
"deadline": null, //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-07-08 10:34:15.32", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задания : "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-07-08 10:34:17.878", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"assigned_to": null, //id назначенной организации
"lon": "55.56", //координаты точки - lon
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"assigned_department_name": null, //название назначенной организации
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to_user": null, //id назначенного пользователя
"assigned_user_fio": null, //ФИО назначенного пользователя
"news_date": "2012-05-21 13:41:00" //дата создания задания
},
... //следующие элементы списка заданий
]
}
[t] GET /news/list
Список всех заданий.
Параметры фильтрации для списка заданий
- confirmed — значение поля «confirmed»: «1» — утверждено, «2» — не утверждено, «0» — новое. Значение GET-параметра запроса (?confirmed или &confirmed) перекроет значение PATH-параметра «confirmed» (/:confirmed) для запроса GET /news/listAfterId/:newsId/:limit/{:confirmed}.
- withAssigned — при значении withAssigned=true в список добавляются не новые и не закрытые задания, назначенные пользователю, либо его ведомству (если он админ) задания
- withClosed — при значении withClosed=true в список добавляются задания со статусом выполнено, назначенные пользователю, либо его ведомству (если он админ)
- withArchive — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)
- onlyMy — при значении onlyMy=true, в списке отображаются только задания, созданные пользователем. Параметры withAssigned, withClosed, onlyStatus при этом игнорируются
- onlyStatus — отображаются задания с соответствующими статусами. Id статусов передаются через запятую. Например, onlyStatus=2,3
- onlyStates — отображаются задания, которые находятся в соответствующих состояниях. Id статусов передаются через запятую. Например, onlyStates=6,11
- onlyAssigned — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначены.
- category_id — фильтр по категориям заданий. Id категорий передаются через запятую. Например, category_id=1,2
- type_id — фильтр по типам заданий. Id типов передаются через запятую. Например, type_id=3,4,5
- gtUpdateDate — отображаются задания, дата обновления которых больше указанной даты (дата указывается в Timestamp, например, gtUpdateDate=1440835402).
- ltUpdateDate — отображаются задания, дата обновления которых меньше указанной даты (дата указывается в Timestamp, например, ltUpdateDate=1440835402).
- gtCreateDate — отображаются задания, дата создания которых больше указанной даты (дата указывается в Timestamp, например, gtCreateDate=1440835402).
- ltCreateDate — отображаются задания, дата создания которых меньше указанной даты (дата указывается в Timestamp, например, ltCreateDate=1440835402).
- gtDeadline — отображаются задания, параметр deadline которых больше указанной даты (дата указывается в Timestamp, например, gtDeadline =1440835402).
- ltDeadline — отображаются задания, параметр deadline которых меньше указанной даты (дата указывается в Timestamp, например, ltDeadline =1440835402).
- assigned_organization_id — отображаются задания, которые назначены на указанные организации. Id организаций передаются через запятую. Например, assigned_organization_id=1,2,292
- assigned_user_id — отображаются задания, которые назначены на указанных пользователей. Id пользователей передаются через запятую. Например, assigned_user_id=616,618
- user_id — отображаются задания, созданные указанными пользователями. Id пользователей передаются через запятую. Например, user_id=616,618
- search — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, text, title. Например, search=7891
- customFields — отображаются задания, отфильтрованные по значениям кастомных полей. Например, customFields=[{«name»:»Dop_pole_dlya_testov»,»op»:»EQ»,»value»:»12345″},{«name»:»Telefon__int__88432000555__»,»op»:»NOT NULL»}].
Более подробно фильтрация по кастомным полям описана в разделе Фильтрация задач по custom-полям - expired — при значении expired=true отображаются непросроченные задания(значение параметра deadline меньше текущей даты и параметр confirmed=1), при значении expired=false отображаются просроченные задания(значение параметра deadline больше текущей даты или значение параметра confirmed отлично от 1)
- sortBy — поле, по которому осуществляется сортировка. По умолчанию — news_date.
- sortDirection — направление сортировки (ASC, DESC). По умолчанию — DESC.
//Примеры запросов:
/news/list?withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&category_id=1,2
/news/list?gtUpdateDate=1440835402<UpdateDate=1443513802>CreateDate=1438157002<CreateDate=1443513802&expired=false
/news/list?assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&confirmed=1
/news/list?search=тест&customFields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"12345"},{"name":"Telefon__int__88432000555__","op":"NOT NULL"}]
// OUT <---
{
"res": 1,
"resText": "",
"news_list": [
{
"id": "788576", //id задания
"user_id": "6", //id создателя
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Заголовок", //заголовок
"text": "Текст", //Описание
"department_id": "1", //id организации создателя (для создателей без организации это значение указывается явно при создании задания )
"department_title": "Население", //название организации создателя
"department_logo": "logo_3.png", //логотип организации создателя
"deadline": null, //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-07-08 10:34:15.32", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задания : "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-07-08 10:34:17.878", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"assigned_to": null, //id назначенной организации
"lon": "55.56", //координаты точки - lon
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"assigned_department_name": null, //название назначенной организации
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to_user": null, //id назначенного пользователя
"assigned_user_fio": null, //ФИО назначенного пользователя
"news_date": "2012-05-21 13:41:00" //дата создания задания
},
... //следующие элементы списка заданий
]
}
[t] GET /news
Список всех заданий, доступных пользователю.
Для неавторизованных пользователей запрос не доступен.
Для пользователя организации «Население» (people_dep = true) в ответе отобразятся только созданные им задания.
Для пользователя организации, отличной от «Население» (people_dep = false), в ответе отобразятся все задания его организации.
Для пользователя без организации (например, главного администратора) в ответе отобразятся все задания всех организаций.
// OUT <---
{
"res": 1,
"resText": "",
"news": [
{
"id": "786847", //id задания
"title": "Ямы на дорогах", //заголовок
"text": "Ямы на дорогах в центре города на ул.Профсоюзная", //описание
"department_id": "1", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Население", //название назначенной организации
"department_logo": "logo_3.png", //логотип организации
"news_date": "2015-05-06 17:51:00", //дата создания задания
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "1_icon_7.jpg", //иконка типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "2", //id приоритета
"category_name": "Дополнительные", //название приоритета
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f" //архивное задание: "t", "f"
},
... //следующие элементы списка заданий
]
}
Замечание. На поля department_title, news_type_default_type, news_type_news_type_id рассчитывать нельзя, они могут быть удалены из ответа.
[t] GET /news/deletions
Получение списка удаленных заданий.
Параметры фильтрации:
- ltDeleteDate — оставляет в ответе только те записи, для которых время удаления строго меньше значения параметра ltDeleteDate. Формат timestamp, например date_from=1448523760.
- gtDeleteDate — оставляет в ответе только те записи, для которых время удаления строго больше значения параметра gtDeleteDate. Формат timestamp, например date_from=1445845360.
//Пример запроса:
/news/deletions?ltDeleteDate=1448523760>DeleteDate=1445845360
// OUT <---
{
"res": 1,
"resText": "",
"deletions": [
{
"id": "1615", //id задания в таблице удаленных заданий
"issue_id": "789196", // id задания
"date": "2015-10-26 11:14:03.816", //время удаления задания
"user_id": "616" //id пользователя, удалившего задания
},
... //следующие элементы списка удаленных заданий
]
}
[t] GET /news/points
Быстрый запрос для получения списка заданий и точек.
Параметры фильтрации для списка заданий
- confirmed — значение поля «confirmed»: «1» — утверждено, «2» — не утверждено, «0» — новое. Значение GET-параметра запроса (?confirmed или &confirmed) перекроет значение PATH-параметра «confirmed» (/:confirmed) для запроса GET /news/listAfterId/:newsId/:limit/{:confirmed}.
- withAssigned — при значении withAssigned=true в список добавляются не новые и не закрытые задания, назначенные пользователю, либо его ведомству (если он админ) задания
- withClosed — при значении withClosed=true в список добавляются задания со статусом выполнено, назначенные пользователю, либо его ведомству (если он админ)
- withArchive — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)
- onlyMy — при значении onlyMy=true, в списке отображаются только задания, созданные пользователем. Параметры withAssigned, withClosed, onlyStatus при этом игнорируются
- onlyStatus — отображаются задания с соответствующими статусами. Id статусов передаются через запятую. Например, onlyStatus=2,3
- onlyStates — отображаются задания, которые находятся в соответствующих состояниях. Id статусов передаются через запятую. Например, onlyStates=6,11
- onlyAssigned — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначены.
- category_id — фильтр по категориям заданий. Id категорий передаются через запятую. Например, category_id=1,2
- type_id — фильтр по типам заданий. Id типов передаются через запятую. Например, type_id=3,4,5
- gtUpdateDate — отображаются задания, дата обновления которых больше указанной даты (дата указывается в Timestamp, например, gtUpdateDate=1440835402).
- ltUpdateDate — отображаются задания, дата обновления которых меньше указанной даты (дата указывается в Timestamp, например, ltUpdateDate=1440835402).
- gtCreateDate — отображаются задания, дата создания которых больше указанной даты (дата указывается в Timestamp, например, gtCreateDate=1440835402).
- ltCreateDate — отображаются задания, дата создания которых меньше указанной даты (дата указывается в Timestamp, например, ltCreateDate=1440835402).
- gtDeadline — отображаются задания, параметр deadline которых больше указанной даты (дата указывается в Timestamp, например, gtDeadline =1440835402).
- ltDeadline — отображаются задания, параметр deadline которых меньше указанной даты (дата указывается в Timestamp, например, ltDeadline =1440835402).
- assigned_organization_id — отображаются задания, которые назначены на указанные организации. Id организаций передаются через запятую. Например, assigned_organization_id=1,2,292
- assigned_user_id — отображаются задания, которые назначены на указанных пользователей. Id пользователей передаются через запятую. Например, assigned_user_id=616,618
- user_id — отображаются задания, созданные указанными пользователями. Id пользователей передаются через запятую. Например, user_id=616,618
- search — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, text, title. Например, search=7891
- customFields — отображаются задания, отфильтрованные по значениям кастомных полей. Например, customFields=[{«name»:»Dop_pole_dlya_testov»,»op»:»EQ»,»value»:»12345″},{«name»:»Telefon__int__88432000555__»,»op»:»NOT NULL»}].
Более подробно фильтрация по кастомным полям описана в разделе Фильтрация задач по custom-полям - expired — при значении expired=true отображаются непросроченные задания(значение параметра deadline меньше текущей даты и параметр confirmed=1), при значении expired=false отображаются просроченные задания(значение параметра deadline больше текущей даты или значение параметра confirmed отлично от 1)
- sortBy — поле, по которому осуществляется сортировка. По умолчанию — news_date.
- sortDirection — направление сортировки (ASC, DESC). По умолчанию — DESC.
//Примеры запросов:
/news/points?limit=10&page=1&withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&category_id=1,2
/news/points?limit=10&page=1>UpdateDate=1440835402<UpdateDate=1443513802>CreateDate=1438157002<CreateDate=1443513802&expired=false
/news/points?limit=10&page=1&assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&confirmed=1
/news/points?limit=10&page=1&search=тест&customFields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"12345"},{"name":"Telefon__int__88432000555__","op":"NOT NULL"}]
// OUT <---
{
"res": 1,
"resText": "",
"news_list": [
{
"id": "789238", //id задания
"title": "тест", //текст задания
"lon": "49.1425763", //координаты точки - lat
"lat": "55.774754", //координаты точки - lon
"assigned_status": "1" //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
},
... //следующие элементы списка
]
}
Более подробно о получении списка заданий и точек можно прочитать здесь:
Быстрый запрос для получения задач и точек /news/points
[t] GET /news/distribution
Статистика по количеству заданий в разрезе видов работ, приоритетов, статусов.
Параметры фильтрации для списка заданий
- confirmed — значение поля «confirmed»: «1» — утверждено, «2» — не утверждено, «0» — новое. Значение GET-параметра запроса (?confirmed или &confirmed) перекроет значение PATH-параметра «confirmed» (/:confirmed) для запроса GET /news/listAfterId/:newsId/:limit/{:confirmed}.
- withAssigned — при значении withAssigned=true в список добавляются не новые и не закрытые задания, назначенные пользователю, либо его ведомству (если он админ) задания
- withClosed — при значении withClosed=true в список добавляются задания со статусом выполнено, назначенные пользователю, либо его ведомству (если он админ)
- withArchive — при значении withArchive=true, в список добавляются задания, которые в архиве (по умолчанию берутся текущие)
- onlyMy — при значении onlyMy=true, в списке отображаются только задания, созданные пользователем. Параметры withAssigned, withClosed, onlyStatus при этом игнорируются
- onlyStatus — отображаются задания с соответствующими статусами. Id статусов передаются через запятую. Например, onlyStatus=2,3
- onlyStates — отображаются задания, которые находятся в соответствующих состояниях. Id статусов передаются через запятую. Например, onlyStates=6,11
- onlyAssigned — при значении onlyAssigned=true отображаются задания, которые не новые и не выполнены, но назначены.
- category_id — фильтр по категориям заданий. Id категорий передаются через запятую. Например, category_id=1,2
- type_id — фильтр по типам заданий. Id типов передаются через запятую. Например, type_id=3,4,5
- gtUpdateDate — отображаются задания, дата обновления которых больше указанной даты (дата указывается в Timestamp, например, gtUpdateDate=1440835402).
- ltUpdateDate — отображаются задания, дата обновления которых меньше указанной даты (дата указывается в Timestamp, например, ltUpdateDate=1440835402).
- gtCreateDate — отображаются задания, дата создания которых больше указанной даты (дата указывается в Timestamp, например, gtCreateDate=1440835402).
- ltCreateDate — отображаются задания, дата создания которых меньше указанной даты (дата указывается в Timestamp, например, ltCreateDate=1440835402).
- gtDeadline — отображаются задания, параметр deadline которых больше указанной даты (дата указывается в Timestamp, например, gtDeadline =1440835402).
- ltDeadline — отображаются задания, параметр deadline которых меньше указанной даты (дата указывается в Timestamp, например, ltDeadline =1440835402).
- assigned_organization_id — отображаются задания, которые назначены на указанные организации. Id организаций передаются через запятую. Например, assigned_organization_id=1,2,292
- assigned_user_id — отображаются задания, которые назначены на указанных пользователей. Id пользователей передаются через запятую. Например, assigned_user_id=616,618
- user_id — отображаются задания, созданные указанными пользователями. Id пользователей передаются через запятую. Например, user_id=616,618
- search — отображаются задания, удовлетворяющие текстовому поиску указанного значения по значениям параметров id, text, title. Например, search=7891
- customFields — отображаются задания, отфильтрованные по значениям кастомных полей. Например, customFields=[{«name»:»Dop_pole_dlya_testov»,»op»:»EQ»,»value»:»12345″},{«name»:»Telefon__int__88432000555__»,»op»:»NOT NULL»}].
Более подробно фильтрация по кастомным полям описана в разделе Фильтрация задач по custom-полям - expired — при значении expired=true отображаются непросроченные задания(значение параметра deadline меньше текущей даты и параметр confirmed=1), при значении expired=false отображаются просроченные задания(значение параметра deadline больше текущей даты или значение параметра confirmed отлично от 1)
- sortBy — поле, по которому осуществляется сортировка. По умолчанию — news_date.
- sortDirection — направление сортировки (ASC, DESC). По умолчанию — DESC.
//Примеры запросов:
/news/distribution?withAssigned=true&withArchive=true&onlyStatus=2,3&onlyStates=6,11&category_id=1,2
/news/distribution?gtUpdateDate=1440835402<UpdateDate=1443513802>CreateDate=1438157002<CreateDate=1443513802&expired=false
/news/distribution?assigned_organization_id=2,292&assigned_user_id=618,625&user_id=6&confirmed=1
/news/distribution?search=тест&customFields=[{"name":"Dop_pole_dlya_testov","op":"EQ","value":"12345"},{"name":"Telefon__int__88432000555__","op":"NOT NULL"}]
// OUT <---
{
"res": 1,
"resText": "",
"type": { // расклад количества заданий по видам работ
"1": "1021", // id вида работ : количество заданий
"2": "879",
"3": "699"
},
"priority": { // расклад количества заданий по приоритетам
"1": "6625",
"2": "12211",
"3": "3644"
},
"confirmed": { //расклад количества заданий по полю "confirmed" ("1" - утверждено, "2" - не утверждено, "0" - новое)
"0": "5",
"1": "22457",
"2": "18"
},
"status": { // расклад количества заданий по статусам
"1": "22245",
"2": "197",
"3": "8",
"4": "30"
}
}
}
[t] GET /news/stats
Получение статистики по заданиям.
Количество заданий с группировкой по статусам, категориям, типам, организациям-исполнителям, организациям-создателям.
Параметры фильтрации:
- date_from — дата начала, начиная с которой необходимо отфильтровать задания. Формат timestamp, например date_from=1445845360
- date_till — дата, до которой необходимо отфильтровать задания. Формат timestamp, например date_till=1448523760
//Пример запроса:
/news/stats?date_from=1445845360&date_till=1448523760
// OUT <---
{
"res": 1,
"resText": "",
"statuses": [ //по статусам
{"status_id": 1, "count": 3},
{"status_id": 2, "count": 2},
{"status_id": 3, "count": 0}
],
"categories": [ //по категориям
{
"category_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}
]
}
],
"departments": [ //по организациям-создателям
{
"department_id": 1
"statuses": [
{"status_id": 1, "count": 0},
{"status_id": 2, "count": 2},
{"status_id": 3, "count": 2}
]
}
],
"assignedDepartments": [ //по назначенным организациям
{
"assigned_department_id": 1
"statuses": [
{"status_id": 1, "count": 2},
{"status_id": 2, "count": 3},
{"status_id": 3, "count": 4}
]
}
]
}
[t] GET /news/count
Количество заданий, которое доступно пользователю, с распределением по статусам заданий.
Параметры фильтрации:
- date_from — дата начала, начиная с которой необходимо отфильтровать задания. Формат timestamp, например date_from=1432626160
- date_till — дата, до которой необходимо отфильтровать задания. Формат timestamp, например date_till=1448523760
- category_id — фильтр по категориям заданий. id категорий передаются через запятую. Например, category_id=1,2
- type_id — фильтр по типам заданий. id типов передаются через запятую. Например, type_id=1,2
- status_id — фильтр по статусам заданий. id статусов передаются через запятую. Например, status_id=1,2
- department_id — фильтр по организациям, в которых были созданы задания. id организаций передаются через запятую. Например, department_id=1,2
- assigned_department_id — фильтр по организациям, которые были назначены на задания. id организаций передаются через запятую. Например, assigned_department_id=1,2
// Пример запроса:
/news/count?date_from=1432626160&date_till=1448523760&category_id=1,2&type_id=1,2&status_id=1,2&department_id=1,2&assigned_department_id=1,2
// OUT <---
{
"res": 1,
"resText": "",
"countNews": 32,
"statuses": [ //по статусам
{
"status_id": 2,
"count": 32
}
]
}
Дополнительные запросы
[t] GET /news/custom_fields
Список дополнительных (настраиваемых) полей и их возможных типов.
Параметры фильтрации для дополнительных (настраиваемых) полей
- search — текстовый поиск настраиваемых полей по значениям параметров id, name, group_name, format, regexp, default_value;
- name — текстовый поиск настраиваемых полей по значению параметра name;
- regexp — текстовый поиск настраиваемых полей по значению параметра regexp;
- defaultValue — текстовый поиск настраиваемых полей по значению параметра defaultValue;
- groupName — текстовый поиск настраиваемых полей по значению параметра groupName;
- format — текстовый поиск настраиваемых полей по значению параметра format;
- isRequired — при значении isRequired=true или isRequired=t отображаются обязательные настраиваемые поля; возможные значения: true, false, t, f;
- deleted — при значении deleted=false или deleted=f отображаются не удаленные настраиваемые поля. По умолчанию — deleted=false; возможные значения: true, false, t, f;
- isForAll — при значении isForAll =true или isForAll =t отображаются доступные для всех типов заданий настраиваемые поля; возможные значения: true, false, t, f;
- visible — при значении visible=true или visible=t отображаются видимые настраиваемые поля (видимые при показе полной информации по заданию); возможные значения: true, false, t, f;
- minLength — отображаются настраиваемые поля, минимальная длина которых совпадает с одним из указанных значений, значения передаются через запятую (например, minLength=1,2);
- maxLength — отображаются настраиваемые поля, максимальная длина которых совпадает с одним из указанных значений, значения передаются через запятую (например, maxLength=10,20);
- sortBy — поле, по которому ведется сортировка. По умолчанию — order.
- sortDirection — направление сортировки (ASC, DESC). По умолчанию — ASC.
//Примеры запросов:
/news/custom_fields
/news/custom_fields?search=test
/news/custom_fields?search=test&isRequired=false&deleted=false
/news/custom_fields?isForAll=true&minLength=1&maxLength=10
/news/custom_fields?sortBy=id&sortDirection=DESC
// OUT <---
{
"res": 1,
"resText": "",
"fields_types": [ //список возможных типов дополнительных полей
{
"name": "string", //английское название типа
"rusname": "строка" //русское название типа
},
{
"name": "int",
"rusname": "целое число"
},
... //следующие элементы списка возможных типов дополнительных полей
],
"custom_fields": [
{
"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": "f", //является ли поле обязательным: "t", "f".
"default_value": "", //значение по умолчанию
"visible": "t", //является ли поле видимым: "t", "f". Отображать ли его, когда показывается полная информация по заданию
"is_for_all": "t", //доступно ли поле всем типам заданий: "t", "f".
"order": "1", //порядковый номер поля в общем списке
"news_type_ids": ["14"] //массив id типов заданий, для которых поле доступно, если оно не доступно всем типам заданий
},
... //следующие элементы списка дополнительных полей
],
"count": "35" //количество дополнительных полей, удовлетворяющих заданным условиям фильтрации и поиска
}
[t] GET /news/states
Список всех возможных состояний заданий.
// OUT <---
{
"res": 1,
"states": [ {
"id": "11", //id состояния
"name": "people_department", //название состояния
"field": "people_dep", //поле, по которому осуществляется проверка
"value": "t", //значение, которое оно должно принимать
"sign": null, //знак для сравнения
"field_from_session": null, //поле в сессии, если нужно сравнивать с ним
"role": null // служебное поле
},
...//следующие элементы списка состояний
]
}
[t] GET /news/capabilities
Список действий, которые можно осуществлять с заданием.
// OUT <---
{
"res": 1,
"resText": "",
"capabilities": [
{
"id": "2", //id действия
"name": "delete", //название действия
"default": "f" //служебное поле
},
{
"id": "3",
"name": "edit",
"default": "f"
},
{
"id": "7",
"name": "assign_department",
"default": "f"
},
{
"id": "8",
"name": "assign_user",
"default": "f"
},
... //следующие элементы списка действий
]
}
[t] GET /news/allowed
Список правил с состояниями, в которых должно находиться задание, чтобы определенное действие было доступно роли текущего пользователя.
Если для роли не прописано какое-то действие, оно для нее не доступно. Если в поле состояний стоит null, действие доступно роли при любых состояниях.
// OUT <---
{
"res": 1,
"resText": "",
"allowed": [
{
"id": "38", //id правила
"capability_id": "1", //id действия
"states": null //массив id состояний, либо null
},
{
"id": "14",
"capability_id": "7",
"states": [1]
},
{
"id": "159",
"capability_id": "7",
"states": [18]
},
... //следующие элементы списка
]
}
[t] GET /news/cache
Запрос на создание WebSocketChannel для возможности получения оповещений об операциях с заданиями(создание, обновление, удаление, добавление комментариев, ответов на комментарии) в формате JSON.
/newstype
CRUD-операции с типами заданиями
[t] GET /newstype/all
Получение списка всех существующих типов заданий (видов работ).
Параметры фильтрации для типов заданий
- search — текстовый поиск типов заданий по значениям параметров id, name;
- name — текстовый поиск типов заданий по значению параметра name;
- defaultType — при значении defaultType=true или defaultType=t отображаются типы заданий, которые являются типами по умолчанию; возможные значения: true, false, t, f;
- periodOfReviewInSec — отображаются типы заданий, для которых величина срока исполнения работ данного вида в секундах равна указанному значению (например, periodOfReviewInSec=172800);
- ltPeriodOfReviewInSec — отображаются типы заданий, для которых величина срока исполнения работ данного вида в секундах меньше указанного значения (например, ltPeriodOfReviewInSec=172800);
- gtPeriodOfReviewInSec — отображаются типы заданий, для которых величина срока исполнения работ данного вида в секундах больше указанного значения (например, gtPeriodOfReviewInSec=86400);
- deadlineType — отображаются типы заданий, для которых поле расчета срока исполнения работ данного вида совпадает с указанными значениями (deadlineType=1 соответствует значению «AT_CREATE», расчет срока ведется от времени создания, deadlineType=2 соответствует значению «AT_UPDATE», расчет срока ведется от даты назначения на исполнителя; может быть передано несколько значений deadlineType через запятую, например, deadlineType=1,2);
- groupId — отображаются типы заданий, принадлежащие указанным группам, id групп передаются через запятую (например, groupId=1,2);
- sortBy — поле, по которому ведется сортировка. По умолчанию — id.
- sortDirection — направление сортировки (ASC, DESC). По умолчанию — ASC.
Примечания:
В независимости от значения настройки 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.
//Примеры запросов:
/newstype/all
/newstype/all?search=тип&defaultType=true<PeriodOfReviewInSec=172800
/newstype/all?search=тип&defaultType=false>PeriodOfReviewInSec=86400&deadlineType=1&groupId=1,2
/newstype/all?defaultType=false&deadlineType=1&groupId=1,2&sortBy=order_key&sortDirecton=DESC
/newstype/all?defaultType=false&deadlineType=1>PeriodOfReviewInSec=86400<PeriodOfReviewInSec=172800&groupId=1,2
// OUT <---
{
"res": 1,
"resText": "",
"count": "30", //количество типов заданий (видов работ), удовлетворяющих условиям поиска и фильтрации
"newstype": [
{
"id": "12", //id типа
"name": "Обрушение конструкции", //название типа
"icon": "icon_12.png", //название двумерной иконки
"icon3d": "icon3d_12.png", //название трехмерной иконки
"map_icon": "map_icon_12.png", //название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", //название увеличенной иконки для карты
"default_type": "t", //является ли данный тип типом по умолчанию: "t" или "f"
"period_of_review": null, //период исполнения работ данного вида
"period_of_review_in_sec": null, // величина срока исполнения работ данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", //поле для расчета срока исполнения работ данного вида: null, от даты создания "AT_CREATE", от даты назначения на исполнителя "AT_UPDATE".
"departments": [ //массив id организаций, которым доступен тип
"1",
"2",
"3"
],
"order_key": "3", //порядковый номер типа заданий в отсортированном списке
"group_id": null, //id группы, которой принадлежит тип, и null, если тип не принадлежит никакой группе
"news_type_id": "12" //id типа
},
... //следующие элементы списка типов заданий
]
}
Более подробно о сортировке типов заданий (видов работ) можно прочитать здесь:
Сортировка видов работ
Более подробно о группировке типов заданий (видов работ) можно прочитать здесь:
Группировка видов работ
[t] GET /newstype
Получение списка доступных текущему пользователю типов заданий (видов работ).
Параметры фильтрации для типов заданий
- search — текстовый поиск типов заданий по значениям параметров id, name;
- name — текстовый поиск типов заданий по значению параметра name;
- defaultType — при значении defaultType=true или defaultType=t отображаются типы заданий, которые являются типами по умолчанию; возможные значения: true, false, t, f;
- periodOfReviewInSec — отображаются типы заданий, для которых величина срока исполнения работ данного вида в секундах равна указанному значению (например, periodOfReviewInSec=172800);
- ltPeriodOfReviewInSec — отображаются типы заданий, для которых величина срока исполнения работ данного вида в секундах меньше указанного значения (например, ltPeriodOfReviewInSec=172800);
- gtPeriodOfReviewInSec — отображаются типы заданий, для которых величина срока исполнения работ данного вида в секундах больше указанного значения (например, gtPeriodOfReviewInSec=86400);
- deadlineType — отображаются типы заданий, для которых поле расчета срока исполнения работ данного вида совпадает с указанными значениями (deadlineType=1 соответствует значению «AT_CREATE», расчет срока ведется от времени создания, deadlineType=2 соответствует значению «AT_UPDATE», расчет срока ведется от даты назначения на исполнителя; может быть передано несколько значений deadlineType через запятую, например, deadlineType=1,2);
- groupId — отображаются типы заданий, принадлежащие указанным группам, id групп передаются через запятую (например, groupId=1,2);
- sortBy — поле, по которому ведется сортировка. По умолчанию — id.
- sortDirection — направление сортировки (ASC, DESC). По умолчанию — ASC.
Примечания:
В независимости от значения настройки 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.
//Примеры запросов:
/newstype
/newstype?search=тип&defaultType=true<PeriodOfReviewInSec=172800
/newstype?search=тип&defaultType=false>PeriodOfReviewInSec=86400&deadlineType=1&groupId=1,2
/newstype?defaultType=false&deadlineType=1&groupId=1,2&sortBy=order_key&sortDirecton=DESC
/newstype?defaultType=false&deadlineType=1>PeriodOfReviewInSec=86400<PeriodOfReviewInSec=172800&groupId=1,2
// OUT <---
{
"res": 1,
"resText": "",
"count": "20", //количество типов заданий (видов работ), удовлетворяющих условиям поиска и фильтрации
"newstype": [
{
"id": "12", //id типа
"name": "Обрушение конструкции", //название типа
"icon": "icon_12.png", //название двумерной иконки
"icon3d": "icon3d_12.png", //название трехмерной иконки
"map_icon": "map_icon_12.png", //название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", //название увеличенной иконки для карты
"default_type": "t", //является ли данный тип типом по умолчанию: "t" или "f"
"period_of_review": null, //период исполнения работ данного вида
"period_of_review_in_sec": null, // величина срока исполнения работ данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", //поле для расчета срока исполнения работ данного вида: null, от даты создания "AT_CREATE", от даты назначения на исполнителя "AT_UPDATE".
"departments": [ //массив id организаций, которым доступен тип
"1",
"2",
"3"
],
"order_key": "3", //порядковый номер типа заданий в отсортированном списке
"group_id": null, //id группы, которой принадлежит тип, и null, если тип не принадлежит никакой группе
"news_type_id": "12" //id типа
},
... //следующие элементы списка типов заданий
]
}
[AaIi] POST /newstype
Создание типа задания (вида работ).
// IN --->
{
"name":"новый тип", //название типа
"icon":"icon_158.png", //название двумерной иконки, иконка по умолчанию - "default_icon.png"
"icon3d":"icon3d_158.png", //название трехмерной иконки, иконка по умолчанию - "default_icon3d.png"
"map_icon":"default_iconmap.png", //название иконки для карты, иконка по умолчанию - "default_iconmap.png"
"map_icon_highlight":"default_iconmap_highlight.png", //название увеличенной иконки для карты, иконка по умолчанию - "default_iconmap_highlight.png"
"map_icon_highlight_done":"default_iconmap_highlight_done.png", //название увеличенной иконки со статусом "выполнено" для карты, иконка по умолчанию - "default_iconmap_highlight_done.png"
"default_type":"f", //является ли данный тип типом по умолчанию: "t" или "f"
"period_of_review":"2", //период исполнения работ данного вида
"period_of_review_in_sec":"172800", // величина срока исполнения работ данного вида по умолчанию (в секундах)
"deadline_type":"AT_CREATE", //поле для расчета срока исполнения работ данного вида: null, от даты создания "AT_CREATE", от даты назначения на исполнителя "AT_UPDATE".
"departments":["2","3"], //массив id организаций, которым доступен тип
"group_id": "22" //id группы, которой принадлежит тип, и null, если тип не принадлежит никакой группе
}
// OUT --->
{
"res": 1,
"resText": "",
"newstype": {
"id": "1325", //id типа
"name": "новый тип", //название типа
"icon": "icon_158.png", //название двумерной иконки
"icon3d": "icon3d_158.png", //название трехмерной иконки
"map_icon": "default_iconmap.png", //название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", //название увеличенной иконки для карты
"map_icon_highlight_done": "default_iconmap_highlight_done.png", //название увеличенной иконки со статусом "выполнено" для карты
"default_type": "f", //является ли данный тип типом по умолчанию: "t" или "f"
"period_of_review": "2", //период исполнения работ данного вида
"icon3d_done": null, //название трехмерной иконки со статусом "выполнено"
"icon_done": null, //название иконки со статусом "выполнено"
"map_icon_done": null, //название иконки со статусом "выполнено" для карты
"iconmap": null, //название иконки для карты
"iconmap_highlight": null, //название увеличенной иконки для карты
"iconmap_done": null, //название иконки со статусом "выполнено" для карты
"iconmap_highlight_done": null, //название увеличенной иконки со статусом "выполнено" для карты
"period_of_review_in_sec": "172800", // величина срока исполнения работ данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", //поле для расчета срока исполнения работ данного вида: null, от даты создания "AT_CREATE", от даты назначения на исполнителя "AT_UPDATE".
"departments": [ //массив id организаций, которым доступен тип
"2",
"3"
],
"group_id": "22", //id группы, которой принадлежит тип, или null, если тип не принадлежит никакой группе
"news_type_id": "1325" //id типа
}
}
[t] GET /newstype/:id
Получение типа заданий (вида работ) по указанному id.
// OUT --->
{
"res": 1,
"resText": "",
"newstype": {
"id": "1325", //id типа
"name": "новый тип", //название типа
"icon": "icon_158.png", //название двумерной иконки
"icon3d": "icon3d_158.png", //название трехмерной иконки
"map_icon": "default_iconmap.png", //название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", //название увеличенной иконки для карты
"map_icon_highlight_done": "default_iconmap_highlight_done.png", //название увеличенной иконки со статусом "выполнено" для карты
"default_type": "f", //является ли данный тип типом по умолчанию: "t" или "f"
"period_of_review": "2", //период исполнения работ данного вида
"icon3d_done": null, //название трехмерной иконки со статусом "выполнено"
"icon_done": null, //название иконки со статусом "выполнено"
"map_icon_done": null, //название иконки со статусом "выполнено" для карты
"iconmap": null, //название иконки для карты
"iconmap_highlight": null, //название увеличенной иконки для карты
"iconmap_done": null, //название иконки со статусом "выполнено" для карты
"iconmap_highlight_done": null, //название увеличенной иконки со статусом "выполнено" для карты
"period_of_review_in_sec": "172800", // величина срока исполнения работ данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", //поле для расчета срока исполнения работ данного вида: null, от даты создания "AT_CREATE", от даты назначения на исполнителя "AT_UPDATE".
"departments": [ //массив id организаций, которым доступен тип
"2",
"3"
],
"group_id": "22", //id группы, которой принадлежит тип, или null, если тип не принадлежит никакой группе
"news_type_id": "1325" //id типа
}
}
[AaIi] PUT /newstype/:id
Изменение типа задания (вида работ).
// IN --->
{
"name":"измененный тип", //название типа
"icon":"icon_158.png", //название двумерной иконки
"icon3d":"icon3d_158.png", //название трехмерной иконки
"map_icon":"default_iconmap.png", //название иконки для карты
"map_icon_highlight":"default_iconmap_highlight.png", //название увеличенной иконки для карты
"map_icon_highlight_done":"default_iconmap_highlight_done.png", //название увеличенной иконки со статусом "выполнено" для карты
"default_type":"f", //является ли данный тип типом по умолчанию: "t" или "f"
"period_of_review":"2", //период исполнения работ данного вида
"period_of_review_in_sec":"172800", // величина срока исполнения работ данного вида по умолчанию (в секундах)
"deadline_type":"AT_CREATE", //поле для расчета срока исполнения работ данного вида: null, от даты создания "AT_CREATE", от даты назначения на исполнителя "AT_UPDATE".
"departments":["2","3"], //массив id организаций, которым доступен тип
"group_id": "22" //необязательное поле: значение null (либо отсутствие поля в JSON) означает, что нужно оставить текущее значение;
//значение 0 означает, что нужно удалить этот вид работ из текущей группы;
//положительные значения трактуются как id группы, к которой нужно привязать этот вид работ;
}
// OUT --->
{
"res": 1,
"resText": "",
"newstype": {
"id": "1325", //id типа
"name": "измененный тип", //название типа
"icon": "icon_158.png", //название двумерной иконки
"icon3d": "icon3d_158.png", //название трехмерной иконки
"map_icon": "default_iconmap.png", //название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", //название увеличенной иконки для карты
"map_icon_highlight_done": "default_iconmap_highlight_done.png", //название увеличенной иконки со статусом "выполнено" для карты
"default_type": "f", //является ли данный тип типом по умолчанию: "t" или "f"
"period_of_review": "2", //период исполнения работ данного вида
"icon3d_done": null, //название трехмерной иконки со статусом "выполнено"
"icon_done": null, //название иконки со статусом "выполнено"
"map_icon_done": null, //название иконки со статусом "выполнено" для карты
"iconmap": null, //название иконки для карты
"iconmap_highlight": null, //название увеличенной иконки для карты
"iconmap_done": null, //название иконки со статусом "выполнено" для карты
"iconmap_highlight_done": null, //название увеличенной иконки со статусом "выполнено" для карты
"period_of_review_in_sec": "172800", // величина срока исполнения работ данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", //поле для расчета срока исполнения работ данного вида: null, от даты создания "AT_CREATE", от даты назначения на исполнителя "AT_UPDATE".
"departments": [ //массив id организаций, которым доступен тип
"2",
"3"
],
"group_id": "22", //id группы, которой принадлежит тип, или null, если тип не принадлежит никакой группе
"news_type_id": "1325" //id типа
}
}
[AaIi] PUT /newstype/:id/:iconType
Загрузить иконку типа заданий (вида работ).
id — id типа заданий (вида работ),
iconType — тип загружаемой иконки, возможные значения:
- icon,
- icon3d,
- mapIcon,
- mapIconHighlight,
- mapIconHighlightDone,
- icon3dDone,
- iconDone,
- mapIconDone
- iconmap,
- iconmapHighlight,
- iconmapDone,
- iconmapHighlightDone.
В запросе необходимо:
- указать Content-Disposition: name=»icon»,
- передать файл в переменной «icon».
Формат ответа при успешной загрузке файлов:
// OUT <---
{
"res": 1,
"resText": "",
"newstype": {
"id": "1326",//id типа
"name": "тип задания", //название типа заданий (вида работ)
"icon": "default_icon.png", //название двумерной иконки
"icon3d": "14486184457501326_icon3d_photo_test.jpg", //название трехмерной иконки
"map_icon": "default_iconmap.png", //название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", //название увеличенной иконки для карты
"map_icon_highlight_done": "default_iconmap_highlight.png", //название увеличенной иконки со статусом "выполнено" для карты
"default_type": "f", //является ли данный тип типом по умолчанию: "t" или "f"
"period_of_review": "2", //период исполнения работ данного вида
"icon3d_done": null, //название трехмерной иконки со статусом "выполнено"
"icon_done": null, //название иконки со статусом "выполнено
"map_icon_done": null, //название иконки со статусом "выполнено" для карты
"iconmap": null, //название иконки для карты
"iconmap_highlight": null, //название увеличенной иконки для карты
"iconmap_done": null, //название иконки со статусом "выполнено" для карты
"iconmap_highlight_done": null, //название увеличенной иконки со статусом "выполнено" для карты
"period_of_review_in_sec": "172800", //величина срока исполнения работ данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", //поле для расчета срока исполнения работ данного вида: null, от даты создания "AT_CREATE", от даты назначения на исполнителя "AT_UPDATE".
"departments": [ //массив id организаций, которым доступен тип
"2",
"3"
],
"news_type_id": "1326", //id типа
"group_id": "22" //id группы, которой принадлежит тип, или null, если тип не принадлежит никакой группе
}
}
[AaIi] DELETE /newstype/:id
Удаление типа задания (вида работ).
// OUT <---
{
"res": 1,
"resText": ""
}
/newstype/group
Группировка типов заданий (видов работ).
Более подробно о группировке типов заданий (видов работ) можно почитать здесь:Группировка видов работ
[AI] POST /newstype/group
Создание новой группы типов заданий (видов работ).
// IN --->
{
"name": "название группы" //название группы, обязательное поле
}
// OUT <---
{
"res": 1,
"resText": "",
"group": {
"id": "208", //id группы
"name": "название группы" //название группы
}
}
[AI] PUT /newstype/group/:id
Изменение группы типов заданий (видов работ).
// IN --->
{
"name": "измененное название группы" //название группы
}
// OUT <---
{
"res": 1,
"resText": "",
"group": {
"id": "208", //id группы
"name": "измененное название группы" //название группы
}
}
[AI] GET /newstype/group/:id
Получение группы типов заданий (видов работ).
// OUT <---
{
"res": 1,
"resText": "",
"group": {
"id": "208", //id группы
"name": "название группы" //название группы
}
}
[AI] DELETE /newstype/group/:id
Удаление группы типов заданий (видов работ).
// OUT <---
{
"res": 1,
"resText": ""
}
[AI] GET /newstype/group/list
Получить список всех групп типов заданий (видов работ).
// OUT <---
{
"res": 1,
"resText": "",
"groups": [
{
"id": "41", //id группы
"name": "название группы" //название группы
},
...//следующие элементы списка групп
]
}
/newstype/sort
Ручная сортировка типов заданий (видов работ).
Более подробно о сортировке типов заданий (видов работ) можно почитать здесь:
Сортировка видов работ
[AaIi] POST /newstype/sort
Ручная сортировка типов заданий (видов работ) в порядке, заданном в теле запроса.
// IN --->
{ "ids": [12, 1, 3, 6, 2, 5] //id типов заданий (видов работ) в отсортированном порядке
}
// OUT <---
{
"res": 1,
"resText": "",
"newstype": [
{
"id": "12", //id типа
"name": "Обрушение конструкции", //название типа
"icon": "icon_12.png", //название двумерной иконки
"icon3d": "icon3d_12.png", //название трехмерной иконки
"map_icon": "map_icon_12.png", //название иконки для карты
"map_icon_highlight": "default_iconmap_highlight.png", //название увеличенной иконки для карты
"default_type": "t", //является ли данный тип типом по умолчанию: "t" или "f"
"period_of_review": null, //период исполнения работ данного вида
"period_of_review_in_sec": null, // величина срока исполнения работ данного вида по умолчанию (в секундах)
"deadline_type": "AT_CREATE", //поле для расчета срока исполнения работ данного вида: null, от даты создания "AT_CREATE", от даты назначения на исполнителя "AT_UPDATE".
"departments": [ //массив id организаций, которым доступен тип
"1",
"2",
"3"
],
"order_key": "3", //порядковый номер типа заданий (видов работ) в отсортированном списке
"group_id": null, //id группы, которой принадлежит тип, и null, если тип не принадлежит никакой группе
"news_type_id": "12" //id типа
},
... //следующие элементы списка типов заданий (видов работ) в заданном порядке сортировки
]
}
Связи между типами заданий и настраиваемыми полями
[AIai] POST /newstype/:id/custom_field/:id
Привязка настраиваемого поля к виду работ.
Если указанных вида работ или настраиваемого поля не существует, получаем ошибку 404.
Если связь уже существует, ошибку не получаем (INSERT в таблицу повторно не выполняется).
// OUT <---
{
"res": 1,
"resText": ""
}
[AIai] DELETE /newstype/:id/custom_field/:id
Удаление связи между видом работ и настраиваемым полем, отвязка поля от вида работ.
Если указанных вида работ или настраиваемого поля не существует, получаем ошибку 404.
Если связи не существует, получаем ошибку 400.
// OUT <---
{
"res": 1,
"resText": ""
}
/custom_field
Более подробно о настраиваемых полях и операциях с ними можно прочитать здесь:
CRUD REST для настраиваемых полей
CRUD-операции с настраиваемыми полями
[AI] POST /custom_field
Создание нового настраиваемого (кастомного) поля.
// IN --->
{
"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": "t", // обязательное ли поле: "t", "f", по умолчанию "f"
"default_value": "г.Москва", // значение по умолчанию, доступно для всех форматов полей, за исключением формата "geometry",
// значение задается с соответствии с форматом поля (текст, число, дата, булево значение)
"visible": "t" // видимость данного поля при отображении полной информации по заданию: "t", "f", по умолчанию "t"
}
При возникновении одной из следующих ситуаций клиенту возвращается статус 400:
- Передано поле possible_values, но формат настраиваемого поля не «list»;
- передано поле regexp, но формат не «string», «text», «int» или «float»;
- переданы поля min_length или max_length, но формат не «string» или «text»;
- передано поле default_value, но формат «geometry»;
- значение default_value (переданное или текущее)
- не соответствует формату поля (для форматов «bool», «int», «float», «date»);
- и/или не проходит валидацию по regexp/min_length/max_length;
- и/или не является одним из possible_values (для поля формата «list»).
// OUT <---
{
"res": 1,
"resText": "",
"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": "t", // обязательное ли поле: "t", "f"
"default_value": "РТ, г.Москва", // значение по умолчанию, доступно для всех форматов полей, за исключением формата "geometry",
// значение задается с соответствии с форматом поля (текст, число, дата, булево значение)
"visible": "t", // видимость данного поля при отображении полной информации по заданию: "t", "f"
"is_for_all": "f", // доступно ли данное поле для всех типов заданий (видов работ): "t", "f"
"news_type_ids": "["1", "2"]", //массив id типов заданий, для которых поле доступно, если оно не доступно всем типам заданий
"order": "10" // номер данного поля для отображения в списке настраиваемых полей
}
[AI] PUT /custom_field/:id
Редактирование настраиваемого поля.
Формат поля изменить нельзя, т.к. это может вызвать массовую некорректность данных настраиваемых полей в заданиях.
// IN --->
{
"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": "f", // обязательное ли поле: "t", "f"
"default_value": "РТ, г.Казань", // значение по умолчанию, доступно для всех форматов полей, за исключением формата "geometry",
// значение задается с соответствии с форматом поля (текст, число, дата, булево значение)
"visible": "f" // видимость данного поля при отображении полной информации по заданию: "t", "f"
}
Если поле не существует или логически удалено, клиенту возвращается статус 404.
При возникновении одной из следующих ситуаций клиенту возвращается статус 400:
- Передано поле possible_values, но формат настраиваемого поля не «list»;
- передано поле regexp, но формат не «string», «text», «int» или «float»;
- переданы поля min_length или max_length, но формат не «string» или «text»;
- передано поле default_value, но формат «geometry»;
- значение default_value (переданное или текущее)
- не соответствует формату поля (для форматов «bool», «int», «float», «date»);
- и/или не проходит валидацию по regexp/min_length/max_length;
- и/или не является одним из possible_values (для поля формата «list»).
Если массив «possible_values» не будет передан, то элементы списка не изменятся. При передаче массива «possible_values» все предыдущие значения списка будут удалены.
// OUT <---
{
"res": 1,
"resText": "",
"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": "f", // обязательное ли поле: "t", "f"
"default_value": "РТ, г.Казань", // значение по умолчанию, доступно для всех форматов полей, за исключением формата "geometry",
// значение задается с соответствии с форматом поля (текст, число, дата, булево значение)
"visible": "f", // видимость данного поля при отображении полной информации по заданию: "t", "f"
"is_for_all": "f", // доступно ли данное поле для всех типов заданий (видов работ): "t", "f"
"news_type_ids": "["1", "2"]", //массив id типов заданий, для которых поле доступно, если оно не доступно всем типам заданий
"order": "10" // номер данного поля для отображения в списке настраиваемых полей
}
[AI] GET /custom_field/:id
Получение информации по настраиваемому полю.
Если поле не существует или логически удалено, клиенту возвращается статус 404.
// OUT <---
{
"res": 1,
"resText": "",
"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": "f", // обязательное ли поле: "t", "f"
"default_value": "РТ, г.Казань", // значение по умолчанию, доступно для всех форматов полей, за исключением формата "geometry",
// значение задается с соответствии с форматом поля (текст, число, дата, булево значение)
"visible": "f", // видимость данного поля при отображении полной информации по заданию: "t", "f"
"is_for_all": "f", // доступно ли данное поле для всех типов заданий (видов работ): "t", "f
"news_type_ids": "["1", "2"]", //массив id типов заданий, для которых поле доступно, если оно не доступно всем типам заданий
"order": "10" // номер данного поля для отображения в списке настраиваемых полей
}
[AI] DELETE /custom_field/:id
Логическое удаление настраиваемого поля.
Если поле не существует или логически удалено, клиенту возвращается статус 404.
// OUT <---
{
"res": 1,
"resText": ""
}
[A] DELETE /custom_field/:id/hard
Служебный запрос для физического удаления настраиваемого поля.
Если поле не существует, клиенту возвращается статус 404.
// OUT <---
{
"res": 1,
"resText": ""
}
[AI] POST /custom_field/sort
Ручная сортировка настраиваемых полей.
Сортировке подлежат только неудаленные настраиваемые поля.
Отсортированный список будет сохраняться в БД и отдаваться клиентам при последующих запросах списка (в ответе к данному запросу, а также в ответе на GET-запрос /news/custom_fields).
1. Сортировка ведется по полю order типа integer.
2. Для ручной сортировки будет добавлен POST-запрос /custom_field/sort, который можно будет выполнить неоднократно.
3. В теле POST-запроса /custom_field/sort клиент должен будет передать id-шники настраиваемых полей в отсортированном им порядке:
// IN --->
{ "ids": [4, 1, 3, 6, 2, 5]
}
Если переданный список id-шников будет некорректным, в ответе будет выдан BadRequest.
Корректность списка id-шников проверяется по следующим пунктам:
- неверный формат переданных данных,
- передача несуществующих id-шников,
- передача дублирующихся id-шников,
- передача id-шников удаленных настраиваемых полей,
- передача неверного количества id-шников (должны быть переданы все существующие в БД id-шники).
4. В БД будет произведен UPDATE: порядок полученных id-шников будет занесен в таблицу issues.custom_fields в столбец order.
5. Пользователю в ответ на POST-запрос /custom_field/sort, а также в ответ на GET-запрос /news/custom_fields будет выдаваться список настраиваемых полей, отсортированный в указанном порядке.
6. Для новых настраиваемых полей order будет назначаться равным 0. В БД также имеются настраиваемые поля с order = null (созданные до ввода дефолтного значения order = 0).
Настраиваемые поля с order , равным 0 или null, будут располагаться в списке после отсортированных по order полей, и они будут отсортированы по полю id.
// OUT <---
{
"res": 1,
"resText": "",
"custom_fields": [
{
"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": "f",
"default_value": "",
"visible": "t",
"is_for_all": "t",
"order": "1",
"news_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": "f",
"default_value": "12345",
"visible": "t",
"is_for_all": "t",
"order": "2",
"news_type_ids": []
},
...
]
}
cerebellum-rest-accesses
Права доступа
Права доступа
Права доступа расписаны отдельно для каждого запроса в его заголовке.
Права доступа
- t — авторизованный пользователь
- A — главный администратор (role_id = 8)
- a — администратор организации (role_id = 10)
- I — главный инспектор (role_id = 12)
- i — инспектор организации (role_id = 11)
- adm — администратор (role_id = 1)
- m — менеджер (role_id = 2)
- b — руководитель (boss, role_id = 3)
- o — оператор (role_id = 4)
- an -аналитик (role_id = 5)
- c — заказчик (customer, role_id = 6)
- user — пользователь ведомства (role_id = 7)
- h — руководитель (head, role_id = 9)
- g — неавторизованный пользователь (guest, role_id = 13)
- C — создатель опроса
- U — администраторы и инспекторы организаций-получателей опроса
- u — администраторы организаций-получателей, инспекторы организаций-получателей и прочие участники опроса
Automap — rest — cars(before delete /all)
Транспортные средства
Список ТС
GET /cars
Структура запроса:
GET /cars?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[
{
id: 3906,
name: "autotracker",
glonassId: 386,
view: true,
lastUpdate: null,
projectPoints: false,
onService: false,
iconStandard: true,
iconIndex: 1,
toDelete: false,
markId: 23,
modelId: 42,
groupId: 1,
speed: 0,
direction: 0,
lat: 0,
lon: 0,
carNo: "3906",
organizationId: 1,
isStopped: false,
tagsIds: [ ]
}
]
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Список ТС ( с более быстрой загрузкой, тк без фильтрации)
GET /cars/all
Структура запроса:
GET /cars/all?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: json
[
{
id: 3906,
name: "autotracker",
glonassId: 386,
view: true,
lastUpdate: null,
projectPoints: false,
onService: false,
iconStandard: true,
iconIndex: 1,
toDelete: false,
markId: 23,
modelId: 42,
groupId: 1,
speed: 0,
direction: 0,
lat: 0,
lon: 0,
carNo: "3906",
organizationId: 1,
isStopped: false,
tagsIds: [ ]
}
]
// массив объектов с ТС
// id тс
// название
// глонасс id
// видима ли
// последнее обновление
// тс на сервисном обслуживании
// стандартная иконка
// индекс иконки
// машина в процессе удаления
// id марки
// id модели
// id группы
// текущая скорость
// угол, под которым вошло ТС
// широта
// долгота
// номер ТС
// id организации
// остановлена
// id меток
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Редактирование ТС
Доступно только для пользователей с правами администратора
PUT /cars/{id}
Структура запроса:
PUT /cars/{id}?token=bw3ty3h46yth
token: ключ доступа
{id}: id ТС
Формат: json
{
carInfo: {
carId: 4339
carNo: "0000001"
kmNextTo: 0
mark: {
id: 410
name: "000 MArk from all org "
}
model: {
expenseOn100km: 11
id: 1680
mark: {
id: 410
name: "000 MArk from all org "
}
markId: 410
maxTank: 100
motohoursMove: 1
motohoursStop: 1
name: "11"
}
notes: ""
}
carNo: "0000001"
devimei: null
devphone: ""
direction: 0
driversIds: []
glonassId: 100000
group: {
extGroup: null
id: 701
name: "001"
notes: null
organizationId: 1143
view: true
}
groupId: "701"
hasPic: false
iconIndex: 1
iconStandard: true
id: 4339
info: null
isStopped: false
kmNextTo: "0"
lastUpdate: null
lat: 0
lon: 0
markId: "410"
modelId: "1680"
motohours: {
carId: 4339
move: null
stop: null
}
motohoursMove: null
motohoursStop: null
name: "00000005"
notes: ""
onService: false
organizationId: 1143
parameters: []
pic: null
projectPoints: false
speed: 0
stopped: {
carId: 4339
}
tags: []
tagsIds: null
toDelete: false
view: true
}
// информация о ТС
// id ТС
// номер ТС
// км до ТО
// марка ТС
// id марки
// название марки
// модель ТС
// расход на 100км
// id модели
// марка ТС
// id марки
// название марки
// id марки
// объем бака (в литрах)
// коэффициент моточасов на стоянке
// коэффициент моточасов при движении
// название модели
// описание
// номер ТС
// imei блока навигации
// номер телефона блока навигации
// угол, под которым вошло ТС
// id водителей
// ГЛОНАСС id
// объект группы
// id группы
// название группы
// описание группы
// id организации
// видима ли
// id группы
// наличие картинки
// индекс иконки
// стандартная иконка
// id ТС
// информация
// остановлена
// км до ТО
// последнее обновление
// широта
// долгота
// id марки
// id модели
// объект моточасов
// id ТС
// коэффициент моточасов при движении
// коэффициент моточасов на стоянке
// коэффициент моточасов при движении
// коэффициент моточасов на стоянке
// название ТС
// описание
// на сервисном обсллуживании
// id организации
// параметры
// картинка
// текущая скорость
// id ТС
// метки
// id меток
// в процессе удаления
// видима ли
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
carInfo: {
carId: 4339
carNo: "0000001"
kmNextTo: 0
mark: {
id: 410
name: "000 MArk from all org "
}
model: {
expenseOn100km: 11
id: 1680
mark: {
id: 410
name: "000 MArk from all org "
}
markId: 410
maxTank: 100
motohoursMove: 1
motohoursStop: 1
name: "11"
}
notes: ""
}
devimei: null
devphone: ""
direction: 0
driversIds: []
glonassId: 100000
group: {
extGroup: null
id: 701
name: "001"
notes: null
organizationId: 1143
view: true
}
hasPic: false
iconIndex: 1
iconStandard: true
id: 4339
info: null
isStopped: false
kmNextTo: "0"
lastUpdate: null
markId: "410"
modelId: "1680"
motohours: {
carId: 4339
move: null
stop: null
}
name: "00000005"
onService: false
projectPoints: false
speed: 0
stopped: {
carId: 4339
}
tags: []
tagsIds: null
toDelete: false
view: true
}
// информация о ТС
// id ТС
// номер ТС
// км до ТО
// марка ТС
// id марки
// название марки
// модель ТС
// расход на 100км
// id модели
// марка ТС
// id марки
// название марки
// id марки
// объем бака (в литрах)
// коэффициент моточасов на стоянке
// коэффициент моточасов при движении
// название модели
// описание
// imei блока навигации
// номер телефона блока навигации
// угол, под которым вошло ТС
// id водителей
// ГЛОНАСС id
// объект группы
// id группы
// название группы
// описание группы
// id организации
// видима ли
// наличие картинки
// индекс иконки
// стандартная иконка
// id ТС
// информация
// остановлена
// км до ТО
// последнее обновление
// id марки
// id модели
// объект моточасов
// id ТС
// коэффициент моточасов при движении
// коэффициент моточасов на стоянке
// название ТС
// на сервисном обсллуживании
// текущая скорость
// id ТС
// метки
// id меток
// в процессе удаления
// видима ли
Статус: 400 — ошибка в запросе
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Создание ТС
Доступно только для пользователей с правами администратора
POST /cars
Структура запроса:
POST /cars?token=bw3ty3h46yth
token: ключ доступа
Формат: json
{
carNo: "21321",
devphone: "1425265",
driversIds: [],
glonassId: "25252321",
groupId: "4901",
iconIndex: 222,
kmNextTo: "2342",
markId: "150",
modelId: "1621",
name: "new name",
notes: "",
pic: null,
tagsIds: [1942, 1501]
}
// номер ТС
// номер телефона блока навигации
// id водителей
// ГЛОНАСС id
// id группы
// индекс иконки
// км до ТО
// id марки
// id модели
// название
// описание
// картинка
// id меток
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
carInfo: {
carId: 4339
carNo: "0000001"
kmNextTo: 0
mark: {
id: 410
name: "000 MArk from all org "
}
model: {
expenseOn100km: 11
id: 1680
mark: {
id: 410
name: "000 MArk from all org "
}
markId: 410
maxTank: 100
motohoursMove: 1
motohoursStop: 1
name: "11"
}
notes: ""
}
devimei: null
devphone: ""
direction: 0
driversIds: []
glonassId: 100000
group: {
extGroup: null
id: 701
name: "001"
notes: null
organizationId: 1143
view: true
}
hasPic: false
iconIndex: 1
iconStandard: true
id: 4339
info: null
lastUpdate: null
markId: "410"
modelId: "1680"
motohours: {
carId: 4339
move: null
stop: null
}
name: "00000005"
onService: false
projectPoints: false
stopped: {
carId: 4339
}
tags: []
tagsIds: null
toDelete: false
view: true
}
// информация о ТС
// id ТС
// номер ТС
// км до ТО
// марка ТС
// id марки
// название марки
// модель ТС
// расход на 100км
// id модели
// марка ТС
// id марки
// название марки
// id марки
// объем бака (в литрах)
// коэффициент моточасов на стоянке
// коэффициент моточасов при движении
// название модели
// описание
// imei блока навигации
// номер телефона блока навигации
// угол, под которым вошло ТС
// id водителей
// ГЛОНАСС id
// объект группы
// id группы
// название группы
// описание группы
// id организации
// видима ли
// наличие картинки
// индекс иконки
// стандартная иконка
// id ТС
// информация
// последнее обновление
// id марки
// id модели
// объект моточасов
// id ТС
// коэффициент моточасов при движении
// коэффициент моточасов на стоянке
// название ТС
// на сервисном обсллуживании
// id ТС
// метки
// id меток
// в процессе удаления
// видима ли
Статус: 400 — ошибка в запросе
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Удаление ТС
Доступно только для пользователей с правами администратора
DELETE /cars/{id}
Структура запроса:
DELETE /cars/{id}
token: ключ доступа
id: id контрольной точки
Ответ:
Статус: 200 — успешное выполнение
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Количество ТС
GET /cars/count
Структура запроса:
GET /cars/count?token=bw3ty3h46yth
token: ключ доступа
Ответ:
Статус: 200 — успешное выполнение
Формат: text
1103
// количество ТС
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Поиск ТС по id
GET /cars/{id}
Структура запроса:
GET /cars/{id}?token=bw3ty3h46yth
token: ключ доступа
{id}: id TC
Ответ:
Статус: 200 — успешное выполнение
Формат: json
{
id: 3889,
name: "autotracker",
glonassId: 369,
view: true,
group: {
id: 1,
name: "Градосервис",
notes: "",
extGroup: null,
view: true,
organizationId: 1
},
lastUpdate: 1381200202000,
projectPoints: false,
onService: false,
devphone: "+79131558214",
devimei: null,
iconStandard: true,
iconIndex: 1,
toDelete: false,
info: {
id: {
glonassId: 369,
data: 1381200202000
},
speed: 0,
direction: 0,
height: 0,
odometr: 0,
gpsCount: 0,
glonassCount: 0,
sysData: 1381200245287,
wayid: 0,
lat: 54.9106,
lon: 85.642
},
carInfo: {
carId: 3889,
mark: {
id: 23,
name: "ТестМарка"
},
model: {
id: 42,
name: "ТестМодель",
mark: {
id: 23,
name: "ТестМарка"
},
expenseOn100km: 1100,
maxTank: 999,
motohoursStop: 1,
motohoursMove: 1.13,
markId: 23
},
kmNextTo: 0,
carNo: "3889",
notes: "0"
},
stopped: {
carId: 3889,
stoped: true,
stopedBegin: 1381137338000,
stopEvent: 249950,
stopNew: false
},
tags: [ ],
motohours: {
carId: 3889,
stop: null,
move: null
},
markId: 23,
modelId: 42,
hasPic: false,
driversIds: [
541,
441
],
tagsIds: [ ]
}
// объект ТС
// id ТС
// название
// ГЛОНАСС id
// видима ли
// объект группы
// id группы
// название группы
// описание группы
// видима ли
// id организации
// последнее обновление
// на сервисном обслуживании
// номер телефона блока навигации
// imei блока навигации
// стандартная иконка
// индекс иконки
// в процессе удаления
// ГЛОНАСС id
// данные
// текущая скорость
// угол, под которым вошло ТС
// высота точки
// показатели одометра
// количество GPS спутников
// количество ГЛОНАСС спутников
// время, в которое точка записывается в базу данных
// ширина
// долгота
// информация о ТС
// id ТС
// объект марки ТС
// id марка
// название марки
// объект модели ТС
// id модели
// название модели
// объект марки ТС
// id марки
// название марки
// расход на 100км
// объем бака (в литрах)
// коэффициент моточасов на стоянке
// коэффициент моточасов при движении
// id марки
// км до ТО
// номер ТС
// описание
// id ТС
// остановлена
// время остановки
// id события
// предположение об остановки
// метки
// моточасы
// id ТС
// коэффициент моточасов на стоянке
// коэффициент моточасов при движении
// id марки
// id модели
// наличие картинки
// id водителей
// id меток
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки
Фотография ТС
GET /cars/{id}/pic
Структура запроса:
GET /cars/{id}/pic?token=bw3ty3h46yth
token: ключ доступа
{id}: id ТС
Ответ:
Статус: 200 — успешное выполнение
Формат:image/png
Статус: 404 — объект не найден
Формат: text/plain
Содержит описание ошибки
Статус: 500 — ошибка на сервере
Формат: text/plain
Содержит описание ошибки