Формулировка проблемы: необходимо выделить все свойства шаблона проекта.
Связанные задачи: 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" } ]