Формулировка проблемы: необходимо выделить все свойства шаблона проекта.
Связанные задачи: 0156, часть 1, 0156, часть 2, 0156, часть 4, 0156, часть 5.
Общее решение по «Шаблонам проектов» поделено
на 5 задач. В данной задаче добавлены новые методы
API.
Решение: необходимо реализовать следующие
API методы для работы с шаблонами проектов,
оперирующие объектами "Шаблон проекта":
settings:
calcType - тип расчета сроков:
0 - автоматический;
1 - ручной;
progressCalcType - тип расчета
прогресса:
0 - Среднее арифметическое;
1 - Среднее взвешенное;
progressRecalculation - перерасчет
прогресса при изменении сроков:
true - настройка включена;
false - настройка выключена;
actionWeightField - вес мероприятия
(строка);
datesType - тип ввода сроков:
0 - стандарнтый (дата начала и
длительность)
1 - абсолютный (дата начала и
завершения);
progressType - тип прогресса:
1 - фактический прогресс / прогресс
по работе;
2 - фактический прогресс / плановый
прогресс;
id - идентификатор шаблона;
name - название шаблона;
code - код шаблона;
visible - признак видимости шаблона:
true - видимый;
false - скрыт;
risks - список рисков:
riskID - идентификатор риска;
riskName - название риска;
planID - идентификатор проекта;
enterDate - дата начала;
deleted - удален ли риск;
authorInfo:
userID - идентификатор владельца
проекта;
userName - имя владельца проекта;
resUserInfo:
userID - идентификатор
ответственного;
userName - имя ответственного;
probability - вероятность;
impact - воздействие;
description - описание риска
(мероприятия);
statusID - идентификатор статуса;
status - название статуса;
typeID - идентификатор типа риска;
typeName - тип риска;
fields - список отображаемых полей:
length - длительность;
start_date - начало;
finish_date - завершение;
depends_on - зависит;
responsible - ответственный;
cost_planned - плановая стоимость;
cost_fact - фактическая стоимость;
percent - прогресс;
actions - список мероприятий:
id - идентификатор мероприятия;
structNumber - структурный номер
мероприятия;
name - название мероприятия;
duration - длительность мероприятия (в
днях);
links - зависимости мероприятия:
fromSN - структурный номер
мероприятия, от которого зависит данное;
linkType - тип зависимости:
SS - зависимость типа
Начало-Начало;
SF - зависимость типа
Начало-Окончание;
FS - зависимость типа
Окончание-Начало;
FF - зависимость типа
Окончание-Окончание;
delay - задержка (в днях);
valid - признак валидности
зависимости:
true - валидна;
false - невалидна;
parentId - идентификатор родительского
мероприятия.
URL метода: rest/api/projects/templates/list.
Тип запроса: POST.
Метод принимает json со следующими параметрами:
ascending - направление сортировки (не
обяз.):
true - по возрастанию (по умолчанию);
false - по убыванию;
countInPart - количество шаблонов на
странице (не обяз., по умолчанию - 30);
pageNumber - номер страницы (не обяз., по
умолчанию - 0);
search - поисковой запрос (не обяз.).
Пример отсылаемого json'а:
{
"ascending": true,
"search": "тест",
"pageNumber": 0,
"countInPart": 30
}
В случае успешного выполнения необходимо возвращать массив c заполненными ранее полями в виде, описанном в структуре "Шаблон проекта".
Примечание
если параметр
searchбудет пустым, должен вернуться полный список шаблонов;если ни одно значение не будет соответствовать запросу, должен вернуться пустой массив.
URL метода: rest/api/projects/templates/{id}.
Тип запроса: GET.
Метод принимает следующий обязательный строковый параметр:
id - идентификатор шаблона.
В случае успешного выполнения необходимо возвращать
json c полями, описанными в структуре
"Шаблон
проекта".
В случае неуспешного выполнения - см. альтернативные потоки событий 1, 2.
URL метода: rest/api/projects/templates/{id}.
Тип запроса: POST.
Метод принимает json со следующими параметрами:
settings:
calcType - тип расчета сроков (не
обяз., по умолчанию 0);
progressCalcType - тип расчета
прогресса (не обяз., по умолчанию 0);
progressRecalculation - перерасчет
прогресса при изменении сроков (не обяз., по умолчанию
false);
actionWeightField - вес мероприятия
(обяз. только при progressCalcType=1);
datesType - тип ввода сроков (не обяз.,
по умолчанию 0);
progressType - тип прогресса (не обяз.,
по умолчанию 1);
name - название шаблона (обяз.);
code - код шаблона (обяз.);
visible - признак видимости шаблона (не
обяз., по умолчанию true);
risks - список рисков (не обяз.);
fields - список отображаемых полей (не
обяз.); по умолчанию:
length - длительность;
start_date - начало;
finish_date - завершение;
depends_on - зависит;
responsible - ответственный;
percent - прогресс;
actions - список мероприятий (не обяз.):
name - название мероприятия (обяз.);
duration - длительность мероприятия (в
днях) (не обяз., по умолчанию 1);
links - зависимости мероприятия (не
обяз.):
fromSN - структурный номер
мероприятия, от которого зависит данное;
linkType - тип зависимости;
delay - задержка (в днях).
В случае успешного выполнения необходимо возвращать
json c измененными полями, описанными в
структуре "Шаблон
проекта".
В случае неуспешного выполнения - см. альтернативные потоки событий 3-6.
URL метода:
/rest/projects/templates/{id}/visible/{true|false}.
Тип запроса: POST.
Метод принимает следующие обязательные параметры:
id - идентификатор шаблона;
visible - видимость шаблона (true / false).
В случае успешного выполнения необходимо возвращать статус запроса.
В случае неуспешного выполнения - см. альтернативные потоки событий 1, 2.
URL метода:
rest/api/projects/templates/newTemplate.
Тип запроса: POST.
Метод принимает json со параметрами, описанными
в методе, который сохраняет шаблон
проекта (но параметры id шаблона и
planID должны быть null).
В случае успешного выполнения необходимо возвращать
json c заполненными ранее полями в виде,
описанном в структуре
"Шаблон
проекта".
В случае неуспешного выполнения - см. альтернативные потоки событий 3-6.
URL метода:
rest/api/projects/templates/pagesCount.
Тип запроса: GET.
Метод принимает следующие строковые параметры:
countInPart - количество элементов на
странице (не обяз., по умолчанию - 35);
search - строка поиска.
Метод возвращает количество страниц, соответствующее указанному параметру.
Примечание
если параметр
searchбудет пустым, должно вернуться общее количество страниц;если ни одно значение не будет соответствовать запросу, должно вернуться значение
0.
URL метода:
rest/api/projects/templates/actions/list.
Тип запроса: GET.
Метод принимает следующий обязательный строковый параметр:
templateId - идентификатор шаблона.
В случае успешного выполнения необходимо возвращать
json c полями из объекта
actions, описанными в структуре
"Шаблон
проекта".
В случае неуспешного выполнения - см. альтернативные потоки событий 7, 8.
URL метода: rest/api/projects/templates/names.
Тип запроса: GET.
Метод возвращает массив параметров:
name - название шаблона;
id - идентификатор шаблона;
code - код шаблона.
Альтернативный поток событий №1. Параметр
id не передан, либо он пустой. Сервер
возвращает ошибку:
Не передан параметр id
действие не осуществляется;
Альтернативный поток событий №2. Передан
несуществующий параметр id. Сервер
возвращает ошибку:
Передан несуществующий параметр id
действие не осуществляется.
Альтернативный поток событий №3. Параметр
name не передан, либо он пустой. Сервер
возвращает ошибку:
Не передан параметр name шаблона проекта
действие не осуществляется;
Альтернативный поток событий №4. Параметр
code не передан, либо он пустой. Сервер
возвращает ошибку:
Не передан параметр code
действие не осуществляется;
Альтернативный поток событий №5. Параметр
name не передан, либо он пустой (при
передаче иных параметров из массива
actions). Сервер возвращает ошибку:
Не передан параметр name мероприятия
проекта
действие не осуществляется;
Альтернативный поток событий №6. Параметр
name не передан, либо он пустой (только при
progressCalcType=1). Сервер возвращает
ошибку:
Не передан параметр actionWeightField
действие не осуществляется;
Альтернативный поток событий №7. Параметр
templateId не передан, либо он пустой.
Сервер возвращает ошибку:
Не передан параметр templateId
действие не осуществляется;
Альтернативный поток событий №8. Передан
несуществующий параметр templateId. Сервер
возвращает ошибку:
Передан несуществующий параметр templateId
действие не осуществляется.
для методов
rest/api/projects/templates/(list; {id}; newTemplate; pagesCount; actions/list):
{
"errorCode": 0,
"errorMessage": null,
"object": {
"settings": {
"calcType": 0,
"progressCalcType": 0,
"progressRecalculation": false,
"actionWeightField": null,
"datesType": 0,
"progressType": 1
},
"id": "74f874f4-d477-4c83-b4d3-7631b70b1f84",
"name": "1",
"code": "1",
"visible": true,
"risks": [
{
"riskID": null,
"riskName": "example_risk",
"planID": "dd081e05-7a2c-454b-9972-441fd465704a",
"enterDate": null,
"deleted": null,
"authorInfo": {
"userID": "1",
"userName": null
},
"resUserInfo": {
"userID": null,
"userName": null
},
"probability": 13,
"impact": 50,
"description": "Мероприятия по риску",
"statusID": 3,
"status": "Проводятся мероприятия",
"typeID": "inst",
"typeName": "Институциональные риски"
},
{
"riskID": "a2c32707-8a1b-4fba-8609-ca54adb554db",
"riskName": "dsfdfsdf",
"planID": "dd081e05-7a2c-454b-9972-441fd465704a",
"enterDate": "2015-08-12T00:00:00.000+0600",
"deleted": "2015-08-12T11:12:08.076+0600",
"authorInfo": {
"userID": "0a9eb338-9176-4ae3-8f0f-c3800f5685d9",
"userName": "Иванов И."
},
"resUserInfo": {
"userID": null,
"userName": ""
},
"probability": 13,
"impact": 50,
"description": "Описание мероприятий по риску",
"statusID": 2,
"status": "Запланирован",
"typeID": "inst",
"typeName": "Институциональные риски"
}
],
"fields": [
"length",
"start_date",
"finish_date",
"depends_on",
"responsible",
"percent"
],
"actions": [
{
"id": "283d0b59-c1f8-48f1-8b6b-2c05394d7473",
"structNumber": {
"numbers": []
},
"name": "1",
"duration": 1,
"links": null,
"parentId": null
},
{
"id": "565f4b10-726f-403d-8dda-a7390679d41f",
"structNumber": {
"numbers": [
1
]
},
"name": "1.1",
"duration": 1,
"links": null,
"parentId": "283d0b59-c1f8-48f1-8b6b-2c05394d7473"
},
{
"id": "6c3c1e45-1c04-4e01-8bf1-ada01b19f804",
"structNumber": {
"numbers": [
2
]
},
"name": "1.2",
"duration": 1,
"links": [
{
"fromSN": {
"numbers": [
3
]
},
"linkType": "SS",
"toSN": {
"numbers": [
2
]
},
"delay": 1,
"link": null,
"error": "NO",
"valid": true
}
],
"parentId": "283d0b59-c1f8-48f1-8b6b-2c05394d7473"
},
{
"id": "900d7fab-986b-4faa-8551-c83c254aa581",
"structNumber": {
"numbers": [
3
]
},
"name": "1.3",
"duration": 1,
"links": null,
"parentId": "283d0b59-c1f8-48f1-8b6b-2c05394d7473"
},
{
"id": "e40985dc-c616-49db-b7c0-c5c7ae978045",
"structNumber": {
"numbers": [
4
]
},
"name": "1.4",
"duration": 1,
"links": null,
"parentId": "283d0b59-c1f8-48f1-8b6b-2c05394d7473"
}
]
},
"sessionState": 1,
"comment": null,
"messages": [],
"valid": true,
"messageToString": null
для метода
rest/api/projects/templates/names:
[
{
"name": "1000",
"id": "517acf86-1d9a-4f01-a478-dacd3242ccbb",
"code": "1000"
},
{
"name": "1000005",
"id": "1a8ce533-57c9-47fb-b102-fc60d4ab5a32",
"code": "hgsudshguopsdjg"
},
{
"name": "1000005",
"id": "ad20fc0c-0202-4e85-8d5c-ba5d67100d97",
"code": "1000005"
},
{
"name": "1000010",
"id": "1bc126a4-b56d-4598-84f3-445da8fd3bdf",
"code": "1000010"
},
{
"name": "100006",
"id": "0c151228-8e24-4eb9-bda5-773a054c4e5a",
"code": "100006"
},
{
"name": "100006",
"id": "7804bd17-29ae-48b5-aded-14e058c13b01",
"code": "100006"
},
{
"name": "100007",
"id": "4bc6801b-7b3a-4e2d-a323-c406cde79f70",
"code": "100007"
},
{
"name": "10001",
"id": "d72d002e-ea0e-4b86-8e07-b0dbe9214e79",
"code": "10001"
}
]