Задача [0381]: API получения настроек календаря

Формулировка проблемы: необходимо получать данные системного календаря - в какие даты какие рабочие периоды установлены. Это требуется, в частности, для реализации табелей учёта рабочего времени.

Решение: необходимо реализовать метод API, который будет получать на вход период времени и выдавать для каждой даты периоды рабочего времени.

URL метода: /rest/api/settings/calendar.

Тип запроса: GET.

Входные параметры - даты начала и завершения запрашиваемого периода, в формате YYYY-MM-DD:

Длина периода не может быть отрицательной и более 366 дней. Дата начала и дата конца должны представлять собой корректную дату в указанном году (в том числе високосном) и месяце, т.е. даты типа 2016-05-51 и 2014-02-29 некорректны.

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

rest/api/settings/calendar?date_start=2016-01-01&date_finish=2016-01-05

Выходные данные: объект JSON с ключами, соответствующими каждой из дат в указанном периоде, значениями этих ключей будут массивы периодов рабочих часов в эту дату. Если рабочих часов в какой-либо день не задано (нерабочий день/выходной/нестандартное время), то значением будет пустой массив.

Период рабочих часов представляет собой объект JSON с полями:

Оба поля в формате HH:mm.

Пример ответа:

{
  "2015-01-01": [ ],
  "2015-01-02": [ ],
  "2015-01-03": [ ],
  "2015-01-04": [ ],
  "2015-01-05": [ 
    {
      "start": "09:00",
      "finish": "13:00"
    },
    {
      "start": "14:00",
      "finish": "18:00"
    }
  ]
}

Альтернативные потоки событий:

Альтернативный поток №1. Не передан параметр date_start. Сервер возвращает ошибку HTTP 400 с сообщением:

{
  "errorCode": 13,
  "errorMessage": "Не передан параметр date_start"
}

действие не выполняется.

Альтернативный поток №2. Не передан параметр date_finish. Сервер возвращает ошибку HTTP 400 с сообщением:

{
  "errorCode": 13,
  "errorMessage": "Не передан параметр date_finish"
}

действие не выполняется.

Альтернативный поток №3. Передан период с некорректной длительностью - меньше нуля или больше 366. Сервер возвращает ошибку HTTP 400 с сообщением:

{
  "errorCode": 13,
  "errorMessage": "Передано некорректное значение периода: отрицательное либо больше 366 дней"
}

действие не выполняется.

Альтернативный поток №4. Передана некорректная дата начала либо дата конца периода. Сервер возвращает ошибку HTTP 400 с сообщением:

{
  "errorCode": 13,
  "errorMessage": "Передан некорректный параметр date_start"
}

либо

{
  "errorCode": 13,
  "errorMessage": "Передан некорректный параметр date_finish"
}

действие не выполняется.