Загрузка данных
Функция GetListIncidentsGet(ЗапросПарам)Экспорт
Попытка
Ответ = Новый HTTPСервисОтвет(200);
//++ Амбарцумов Добавление параметров
ДатаНачалаСтрока = ЗапросПарам.ПараметрыЗапроса.Получить("startDate");
ДатаОкончанияСтрока = ЗапросПарам.ПараметрыЗапроса.Получить("endDate");
СтатусСтрокой = ЗапросПарам.ПараметрыЗапроса.Получить("status");
АвторСтрокой = ЗапросПарам.ПараметрыЗапроса.Получить("author");
ДатаНачала = ПолучитьДатуИзПараметра(ДатаНачалаСтрока,, Ложь);
ДатаОкончания = ПолучитьДатуИзПараметра(ДатаОкончанияСтрока, Истина, Ложь);
Если СтатусСтрокой = "Открытые" Или СтатусСтрокой = "Закрытые" Тогда
Статусы = Новый Массив;
Статусы.Добавить(Справочники.СостоянияИнцидентов.НайтиПоНаименованию("Закрыто"));
Статусы.Добавить(Справочники.СостоянияИнцидентов.НайтиПоНаименованию("Завершено"));
ИначеЕсли СтатусСтрокой = "Ожидают ответа" Тогда
Статусы = Справочники.СостоянияИнцидентов.НайтиПоНаименованию("Ожидание");
Иначе
Статусы = "УбратьПараметр";
КонецЕсли;
Если ДатаНачала = Неопределено Тогда
Ошибка404(Ответ, "Неправильный формат или значение параметра startDate");
ЗаписатьЛоги(404, СтрШаблон("Неправильный формат или значение параметра startDate = %1", ДатаНачалаСтрока), "getIncidentsList");
Возврат Ответ;
ИначеЕсли ДатаОкончания = Неопределено Тогда
Ошибка404(Ответ, "Неправильный формат или значение параметра endDate");
ЗаписатьЛоги(404, СтрШаблон("Неправильный формат или значение параметра endDate = %1", ДатаОкончанияСтрока), "getIncidentsList");
Возврат Ответ;
ИначеЕсли ДатаНачала > ДатаОкончания Тогда
Ошибка404(Ответ, "Дата начала периода больше даты конца периода");
ЗаписатьЛоги(404, СтрШаблон("Дата начала периода больше даты конца периода startDate = %1, endDate = %2"
, ДатаНачалаСтрока, ДатаОкончанияСтрока), "getIncidentsList");
Возврат Ответ;
КонецЕсли;
//-- Амбарцумов Добавление параметров
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ДокИнцидент.Ссылка КАК Ссылка,
| ДокИнцидент.Номер КАК Номер,
| ДокИнцидент.Дата КАК Дата,
| ВЫРАЗИТЬ(ДокИнцидент.Описание КАК СТРОКА(900)) КАК Описание,
| ДокИнцидент.Состояние.Наименование КАК СостояниеНаименование,
| ДокИнцидент.Состояние.Ссылка КАК Состояние,
| ДокИнцидент.НормативнаяДатаЗакрытия КАК НормативнаяДатаЗакрытия,
| ЕСТЬNULL(ПараметрыУровняСервиса.ФактическаяДатаЗакрытия, ДАТАВРЕМЯ(1, 1, 1)) КАК ФактическаяДатаЗакрытия,
| ВЫБОР
| КОГДА ПрикрепленныеФайлы.ИспользуемыйДокумент ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ЕстьФайлы,
| ДокИнцидент.КомпонентаУслуги КАК КомпонентаУслуги,
| ДокИнцидент.КомпонентаУслуги.Наименование КАК КомпонентаУслугиНаименование,
| ДокИнцидент.Услуга КАК Услуга,
| ДокИнцидент.Услуга.Наименование КАК УслугаНаименование,
| ДокИнцидент.Категория КАК Категория,
| ДокИнцидент.Категория.Наименование КАК КатегорияНаименование,
| ДокИнцидент.Оценка КАК Оценка,
| ВЫРАЗИТЬ(ДокИнцидент.КомментарийОценка КАК СТРОКА(900)) КАК КомментарийОценка,
| ДокИнцидент.Тип КАК Тип,
| ДокИнцидент.СценарийОбработки КАК СценарийОбработки,
| ДокИнцидент.ТемаОбращения КАК ТемаОбращения,
| ДокИнцидент.Состояние.Закрыт КАК СостояниеЗакрыт,
| ДокИнцидент.КонтактноеЛицо КАК Инициатор
|ИЗ
| Документ.Инцидент КАК ДокИнцидент
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыУровняСервиса КАК ПараметрыУровняСервиса
| ПО (ПараметрыУровняСервиса.Инцидент = ДокИнцидент.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПрикрепленныеФайлы КАК ПрикрепленныеФайлы
| ПО ((ВЫРАЗИТЬ(ПрикрепленныеФайлы.ИспользуемыйДокумент КАК Документ.Инцидент)) = ДокИнцидент.Ссылка)
|ГДЕ
| ДокИнцидент.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ДокИнцидент.Состояние В(&Состояние)
| И ДокИнцидент.КонтактноеЛицо.Наименование = &Автор
|
|УПОРЯДОЧИТЬ ПО
| Дата УБЫВ";
//++ Амбарцумов Добавление параметров
Если Статусы = "УбратьПараметр" Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ДокИнцидент.Состояние В(&Состояние)", "Истина");
ИначеЕсли СтатусСтрокой = "Открытые" Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ДокИнцидент.Состояние В(&Состояние)", "Не ДокИнцидент.Состояние В(&Состояние)");
Запрос.УстановитьПараметр("Состояние", Статусы);
Иначе
Запрос.УстановитьПараметр("Состояние", Статусы);
КонецЕсли;
Если АвторСтрокой = Неопределено Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ДокИнцидент.КонтактноеЛицо.Наименование = &Автор", "Истина");
Иначе
Запрос.УстановитьПараметр("Автор", АвторСтрокой);
КонецЕсли;
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
//-- Амбарцумов Добавление параметров
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
СписокКомментируемыхОценок = Новый СписокЗначений;
СтрокаКомментарииКОценке = ИТ_ГлобальныйМодульСервер.ИТ_глЗначениеПеременной("ИТ_ТребоватьКомментарииКОценке");
Для К = 1 По 5 Цикл
Если Сред(СтрокаКомментарииКОценке, К, 1) = "1" Тогда
СписокКомментируемыхОценок.Добавить(К);
КонецЕсли;
КонецЦикла;
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
Запись.ЗаписатьНачалоМассива();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Запись.ЗаписатьНачалоОбъекта();
Запись.ЗаписатьИмяСвойства("Metadata");
Запись.ЗаписатьЗначение("Document incident");
Запись.ЗаписатьИмяСвойства("UID");
Запись.ЗаписатьЗначение(Строка(ВыборкаДетальныеЗаписи.Ссылка.УникальныйИдентификатор()));
Запись.ЗаписатьИмяСвойства("Number");
Запись.ЗаписатьЗначение(ВыборкаДетальныеЗаписи.Номер);
Запись.ЗаписатьИмяСвойства("Data");
Запись.ЗаписатьЗначение(Строка(ВыборкаДетальныеЗаписи.Дата));
Запись.ЗаписатьИмяСвойства("Author");
Запись.ЗаписатьЗначение(Строка(ВыборкаДетальныеЗаписи.Инициатор));
Запись.ЗаписатьИмяСвойства("Topic");
Запись.ЗаписатьЗначение(Строка(ВыборкаДетальныеЗаписи.ТемаОбращения));
Запись.ЗаписатьИмяСвойства("Description");
Запись.ЗаписатьЗначение(ВыборкаДетальныеЗаписи.Описание);
ЗаписатьСостояние(Запись,
?(НЕ ВыборкаДетальныеЗаписи.СостояниеНаименование = null, ВыборкаДетальныеЗаписи.СостояниеНаименование, ""),
?(НЕ ВыборкаДетальныеЗаписи.СостояниеНаименование = null, Строка(ВыборкаДетальныеЗаписи.Состояние.УникальныйИдентификатор()) , ""),
?(НЕ ВыборкаДетальныеЗаписи.СостояниеНаименование = null, ВыборкаДетальныеЗаписи.СостояниеЗакрыт , ЛОЖЬ)
);
Запись.ЗаписатьИмяСвойства("TheRegulatoryClosureDate");
Запись.ЗаписатьЗначение(Строка(ВыборкаДетальныеЗаписи.НормативнаяДатаЗакрытия));
Запись.ЗаписатьИмяСвойства("TheActualClosingDate");
Запись.ЗаписатьЗначение(Строка(ВыборкаДетальныеЗаписи.ФактическаяДатаЗакрытия));
ЗаписатьСоставУслуги(Запись,
?(НЕ ВыборкаДетальныеЗаписи.КомпонентаУслугиНаименование = null, ВыборкаДетальныеЗаписи.КомпонентаУслугиНаименование, ""),
?(НЕ ВыборкаДетальныеЗаписи.КомпонентаУслугиНаименование = null, Строка(ВыборкаДетальныеЗаписи.КомпонентаУслуги.УникальныйИдентификатор()),""),
?(НЕ ВыборкаДетальныеЗаписи.КомпонентаУслугиНаименование = null, ВыборкаДетальныеЗаписи.УслугаНаименование,""),
?(НЕ ВыборкаДетальныеЗаписи.КомпонентаУслугиНаименование = null, Строка(ВыборкаДетальныеЗаписи.Услуга.УникальныйИдентификатор()),"")
);
ЗаписатьКатегорию(Запись,
?(НЕ ВыборкаДетальныеЗаписи.КатегорияНаименование = null, ВыборкаДетальныеЗаписи.КатегорияНаименование,""),
?(НЕ ВыборкаДетальныеЗаписи.КатегорияНаименование = null, Строка(ВыборкаДетальныеЗаписи.Категория.УникальныйИдентификатор()),""));
Запись.ЗаписатьИмяСвойства("ThereAreFiles");
Запись.ЗаписатьЗначение(ВыборкаДетальныеЗаписи.ЕстьФайлы);
Запись.ЗаписатьИмяСвойства("Rating");
Запись.ЗаписатьЗначение(Строка(ВыборкаДетальныеЗаписи.Оценка));
Запись.ЗаписатьИмяСвойства("CommentToTheRating");
Запись.ЗаписатьЗначение(ВыборкаДетальныеЗаписи.КомментарийОценка);
СтруктураСостояний = ИТ_ПравилаПереходаСервер.ПолучитьСтруктуруСостояний(ВыборкаДетальныеЗаписи.Тип,
ВыборкаДетальныеЗаписи.СценарийОбработки,
"Обращение",
ВыборкаДетальныеЗаписи.Состояние);
Запись.ЗаписатьИмяСвойства("RequiresConfirmation");
Запись.ЗаписатьЗначение(СтруктураСостояний.СвойстваТекСостояния.ТребуетПодтверждения);
Запись.ЗаписатьИмяСвойства("RequiresEvaluation");
Запись.ЗаписатьЗначение(СтруктураСостояний.СвойстваТекСостояния.ТребуетОценку );
Запись.ЗаписатьИмяСвойства("RequiresCommentToRating");
СтрокаОценок = "";
Для каждого ОценкаЭлемент Из СписокКомментируемыхОценок Цикл
СтрокаОценок = СтрокаОценок + ОценкаЭлемент.Значение;
КонецЦикла;
Запись.ЗаписатьЗначение(СтрокаОценок);
Запись.ЗаписатьКонецОбъекта();
КонецЦикла;
Запись.ЗаписатьКонецМассива();
Ответ.УстановитьТелоИзСтроки( Запись.Закрыть() );
Исключение
Ошибка = ОписаниеОшибки();
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(ПолучитьJSONОшибка("Не удалось обработать документ"));
Возврат Ответ;
КонецПопытки;
Возврат Ответ;
КонецФункции