====== Как вывести "Отклонение базового плана" и "Статус отклонения" в Диаграмму Ганта ======
=====Глоссарий =====
* LINQ (Language Integrated Query) – простой SQL-подобный язык запросов к источнику данных.
* БП – Базовый план.
* ПДО – Плановая дата окончания.
* УДО – Утвержденная дата окончания по БП.
* ФДО – Фактическая дата окончания
===== Последовательность настройки =====
- Перейдите на страницу «Администрирование».
- Перейдите на страницу «Источники LINQ» создания источников данных с помощью LINQ-запросов. \\ //Также возможно перейти по прямой ссылке, указав после адреса системы (~/cmn.aspx?pageName=DataSources.List.//
- Нажмите «Пересоздать контекст». \\ {{ :product:linq:gantt:linq_example_1.png?nolink |}}
- Нажмите «Новый источник данных», после того как она станет активной. \\ {{ :product:linq:gantt:linq_example_2.png?nolink |}}
- В поле «Название» на странице создания источника данных через LINQ-запрос укажите «Расчет отклонения от базового плана» (без кавычек). \\ {{ :product:linq:gantt:linq_example_3.png?nolink |}}
- В поле «Запрос» полностью удалите код тестового запроса.
- В поле «Запрос» полностью скопируйте код запроса: /*
Поле "deviationPlan" с отклонением от БП.
Содержит разницу (отклонение) в РАБОЧИХ днях между соответствующими плановой или фактической датой окончания (ПДО или ФДО соответственно) и утвержденной датой окончания (УДО) по последней версии БП. Логика расчета для каждого соответствующего объекта:
- Если у объекта есть УДО и ФДО, то отклонение = ФДО – УДО.
- Если у объекта есть УДО, но нет ФДО, то отклонение = ПДО – УДО.
- Если у объекта нет УДО, то расчет не производится. В соответствующей ячейке поля содержится пустое значение (не 0, а именно пустое значение).
- Положительные значения говорят о просрочке, отрицательные – об опережении утвержденного срока в БП.
Поле "deviationStatus" с числовым значением индикатора отклонения от БП. Логика расчета для каждого соответствующего объекта:
- Если значение поля "deviationPlan" в диапазоне (-∞; 7], то в поле записывается значение = 1.
- Если значение поля "deviationPlan" в диапазоне (7; 14], то в поле записывается значение = 2.
- Если значение поля "deviationPlan" в диапазоне (14; +∞], то в поле записывается значение = 3.
- Если значение поля "deviationPlan" пустое, то в поле "deviationStatus" ничего не записывается (остается пустое значение).
*/
var objectID = parameters.GetValueOrDefault("RootProjectId", new Guid("9443d7de-f036-4367-b51b-5c47d8f85a01")); // ID объекта из Ганта
var deviation = dataContext.Projects
.Where(p => p.BaselinePlanEndDate != null && p.GetParentHierarchy(true).Any(a => a.Id == objectID) )
.OrderBy(p => p.Name)
.Select(a => new {a.Id,
a.Name,
a.SystemEndDate,
a.BaselinePlanEndDate,
a.ActualEndDate,
a.CalendarId
})
.ToList()
.Select(b => new {b.Id,
b.Name,
b.SystemEndDate,
b.BaselinePlanEndDate,
b.ActualEndDate,
deviationPlan = Math.Round(b.ActualEndDate != null ? workCalendars.GetWorkCalendar(b.CalendarId).GetWorktimeDays(b.BaselinePlanEndDate.Value.Date, b.ActualEndDate.Value.Date) : workCalendars.GetWorkCalendar(b.CalendarId).GetWorktimeDays(b.BaselinePlanEndDate.Value.Date, b.SystemEndDate.Value.Date))
}
)
.ToList()
.Select(c => new {c.Id,
c.Name,
c.SystemEndDate,
c.BaselinePlanEndDate,
c.ActualEndDate,
c.deviationPlan,
deviationStatus1 = c.deviationPlan <= 7 ? 1 : 0,
deviationStatus2 = c.deviationPlan > 7 && c.deviationPlan <= 14 ? 2 : 0,
deviationStatus3 = c.deviationPlan > 14 ? 3 : 0})
.ToList()
.Select(d => new {ObjectId = d.Id,
d.Name,
d.SystemEndDate,
d.BaselinePlanEndDate,
d.ActualEndDate,
deviationPlan = d.deviationPlan,
deviationStatus = d.deviationStatus1 + d.deviationStatus2 + d.deviationStatus3})
.ToList();
return deviation;
\\ {{ :product:linq:gantt:linq_example_4.png?nolink |}}
- Во второй вкладке браузера перейдите в карточку любого объекта системы, имеющего дочерние объекты. Желательно в родительскую задачу или небольшой проект с малым количеством дочерних объектов.
- Скопируйте в адресной строке ID этого объекта (после uid=). \\ {{ :product:linq:gantt:linq_example_5.png?nolink |}}
- Переключитесь обратно на первую вкладку браузера, на страницу создания источника данных, где ранее был скопирован код запроса (шаг 7).
- Замените ID из строки кода на скопированный вами ID ранее (шаг 9). Это необходимо для первичного запуска кода запроса, что в свою очередь необходимо для возможности его привязки к диаграмме Ганта. \\ {{ :product:linq:gantt:linq_example_6.png?nolink |}}
- Активируйте опцию «Может использоваться в диаграмме Ганта» \\ {{ :product:linq:gantt:linq_example_7.png?nolink |}}
- Нажмите кнопку «Сделать запрос и сохранить».
- Дождитесь, пока запрос выполнится и сохранится.
- Убедитесь, что запрос выполнился успешно. Об этом будут свидетельствовать отсутствие ошибок и аналогичная таблица с результатами запроса. \\ {{ :product:linq:gantt:linq_example_8.png?nolink |}}
- Закройте страницу сохраненного источника данных «Расчет отклонения от базового плана».
- Перейдите на страницу «Администрирование» -> «Диаграмма Ганта». \\ {{ :product:linq:gantt:linq_example_9.png?nolink |}}
- В разделе «Настройка полей из LINQ-запроса» -> запрос «Расчет отклонения от базового плана» -> «Настроить». \\ {{ :product:linq:gantt:linq_example_10.png?nolink |}}
- Произведите следующие настройки: \\ {{ :product:linq:gantt:linq_example_11.png?nolink |}}
- Активируйте чекбоксы в поле {{:product:linq:gantt:linq_example_12.png?nolink}} у полей «deviationPlan» и «deviationStatus».
* deviationPlan:
* Псевдоним - «Отклонение от БП» (без кавычек). Можете указать свое название поля с количеством дней отклонения, которое вы хотите увидеть в диаграмме Ганта.
* Тип – Число.
* Формат – Число.
* deviationStatus:
* Псевдоним - «Статус отклонения» (без кавычек). Можете указать свое название поля с индикатором отклонения, которое вы хотите увидеть в диаграмме Ганта.
* Тип – Индикатор.
* Добавьте 3 индикатора:
* Для зеленого индикатора укажите условие «= 1» (без кавычек). Можете указать свой цвет индикатора, который вы хотите увидеть в диаграмме Ганта для отклонения в диапазоне (-∞; 7].
* Для оранжевого индикатора укажите условие «= 2» (без кавычек) Можете указать свой цвет индикатора, который вы хотите увидеть в диаграмме Ганта для отклонения в диапазоне (7; 14].
* Для красного индикатора укажите условие «= 3» (без кавычек) Можете указать свой цвет индикатора, который вы хотите увидеть в диаграмме Ганта для отклонения в диапазоне (14; +∞].
- Нажмите кнопку «Сохранить».
- Убедитесь, что настройки успешно сохранены: \\ {{ :product:linq:gantt:linq_example_14.png?nolink |}} \\ На странице «Настройка диаграммы Ганта» должны быть отображены два поля «Отклонение от БП» и «Статус отклонения», которые теперь можно отобразить в диаграмме Ганта.
===== Появились ли поля в диаграмме Ганта? =====
- Перейдите в диаграмму Ганта любого объекта системы.
- Раскройте выпадающий список у любой из колонок диаграммы Ганта, наведя курсор мыши на шапку колонки и нажав на .
- Наведите курсор мыши на команду «Пользовательские столбцы» и активируйте чекбоксы «Отклонение от БП» и «Статус отклонения». \\ {{ :product:linq:gantt:linq_example_15.png?nolink |}}
- Убедитесь, что указанные колонки добавились в табличную часть диаграммы Ганта. \\ {{ :product:linq:gantt:linq_example_16.png?nolink |}}
==== Настройка представления поле в Ганте ====
- Настройте порядок новых полей среди других колонок табличной части диаграммы Ганта.
- При необходимости сохраните настройки представления, чтобы данные колонки отображались по умолчанию при открытии страницы Диаграммы Ганта. \\ {{ :product:linq:gantt:linq_example_17.png?nolink |}}
- Если данные в колонках полностью отсутствуют, значит у вас не создан ни 1 БП для объекта, с карточки которого была открыта диаграмма Ганта.
- Данные в колонках LINQ-запросов («Отклонение от БП» и «Статус отклонения») обновляются в 3 случаях:
- При открытии страницы Диаграммы Ганта.
- При обновлении страницы Диаграммы Ганта.
- При сохранении диаграммы Ганта (по нажатию на кнопку «Сохранить»).