Загрузка данных


Функция 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Ошибка("Не удалось обработать документ"));
		Возврат Ответ;
	КонецПопытки;
	
	Возврат Ответ;
КонецФункции