public ThisReportParams(ReportParams ps) { PeriodType = (PeriodType)((int)ps["PeriodType"]); if (!ps.GetParam("IntervalBegin").IsNull) { IntervalBegin = (DateTime)ps["IntervalBegin"]; } if (!ps.GetParam("IntervalEnd").IsNull) { IntervalEnd = (DateTime)ps["IntervalEnd"]; } if (!ps.GetParam("Quarter").IsNull) { Quarter = (Quarter)((int)ps["Quarter"]); } Folder = (Guid)ps["Folder"]; ShowDetalization = (bool)((int)ps["ShowDetalization"] != 0); TimeMeasureUnits = (TimeMeasureUnits)((int)ps["TimeMeasureUnits"]); SortBy = (ReportDepartmentCostSort)((int)ps["SortBy"]); ShowRestrictions = (bool)((int)ps["ShowRestrictions"] != 0); //if (PeriodType != PeriodType.DateInterval && (IntervalBegin.HasValue || IntervalEnd.HasValue)) // throw new ApplicationException("Заданы даты интервала при типе периода отличном от Интервал дат"); //if (PeriodType != PeriodType.SelectedQuarter && Quarter.HasValue) // throw new ApplicationException("Задан квартал при типе периода отличном от Квартал"); }
/// <summary> /// Параметризированный конструктор. Инициализирует свойства класса на /// основании данных параметров, представленных в коллекции ReportParams. /// </summary> /// <param name="Params">Данные параметов, передаваемые в отчет</param> /// <param name="cn">Соединение с БД (для подгрузки данных)</param> /// <remarks> /// При необходимости выполняет коррекцию значений параметров /// </remarks> public ThisReportParams(ReportParams Params, IReportDataProvider provider) { // #1: ЗАЧИТЫВАЕМ ПАРАМЕТРЫ, ЗАДАННЫЕ ЯВНО // Идентификатор сотрудника EmployeeID = (Guid)Params.GetParam("Employee").Value; // Задание дат начала и конца отчетного периода IsSpecifiedIntervalBegin = !Params.GetParam("IntervalBegin").IsNull; IntervalBegin = (IsSpecifiedIntervalBegin? Params.GetParam("IntervalBegin").Value : DBNull.Value); IsSpecifiedIntervalEnd = !Params.GetParam("IntervalEnd").IsNull; IntervalEnd = (IsSpecifiedIntervalEnd? Params.GetParam("IntervalEnd").Value : DBNull.Value); // Признак "Показывть выходные дни без списаний" ShowFreeWeekends = (0 != (int)Params.GetParam("ShowFreeWeekends").Value); // Представление времени TimeMeasure = (TimeMeasureUnits)((int)Params.GetParam("TimeMeasureUnits").Value); // Признак отображения параметров отчета в заголовке ShowRestrictions = (0 != (int)Params.GetParam("ShowRestrictions").Value); // #2: ДОГРУЖАЕМ ВСЕ ДАННЫЕ ПО СОТРУДНИКУ using (IDataReader reader = provider.GetDataReader("dsAdditionaly", null)) { if (reader.Read()) { int nOrdinal = reader.GetOrdinal("FullName"); FullName = reader.IsDBNull(nOrdinal)? null : reader.GetString(nOrdinal); nOrdinal = reader.GetOrdinal("WorkBeginDate"); WorkBeginDate = reader.IsDBNull(nOrdinal) ? DateTime.MinValue : reader.GetDateTime(nOrdinal); nOrdinal = reader.GetOrdinal("WorkEndDate"); WorkEndDate = reader.IsDBNull(nOrdinal) ? DateTime.MaxValue : reader.GetDateTime(nOrdinal); nOrdinal = reader.GetOrdinal("WorkdayDuration"); WorkdayDuration = reader.IsDBNull(nOrdinal) ? 0 : reader.GetInt32(nOrdinal); } } }
/// <summary> /// Параметризированный конструктор. Инициализирует свойства класса на /// основании данных параметров, представленных в коллекции ReportParams. /// </summary> /// <param name="Params">Данные параметов, передаваемые в отчет</param> /// <remarks> /// При необходимости выполняет коррекцию значений параметров, полгаемых /// по умолчанию, а так же расчет синтетических параметров (таких как /// "Направление активности") /// </remarks> public ThisReportParams(ReportParams Params) { // Задание дат начала и конца отчетного периода IsSpecifiedIntervalBegin = !Params.GetParam("IntervalBegin").IsNull; IntervalBegin = (IsSpecifiedIntervalBegin? Params.GetParam("IntervalBegin").Value : DBNull.Value); IsSpecifiedIntervalEnd = !Params.GetParam("IntervalEnd").IsNull; IntervalEnd = (IsSpecifiedIntervalEnd? Params.GetParam("IntervalEnd").Value : DBNull.Value); // Вид направления анализа определяется на основании задания идентификаторов // организации или активности; сразу корректируем значения параметров: если // они не заданы, то используем в качестве значения DBNull: Organization = Guid.Empty; Folder = Guid.Empty; if (!Params.GetParam("Folder").IsNull) { AnalysisDirection = AnalysisDirectionEnum.ByActivity; Folder = Params.GetParam("Folder").Value; Organization = DBNull.Value; } else if (!Params.GetParam("Organization").IsNull) { AnalysisDirection = AnalysisDirectionEnum.ByCustomer_TargetCustomer; Organization = Params.GetParam("Organization").Value; Folder = DBNull.Value; } else { AnalysisDirection = AnalysisDirectionEnum.ByCustomer_AllCustomners; Organization = DBNull.Value; Folder = DBNull.Value; } // Типы активностей: FolderType = (int)Params.GetParam("FolderType").Value; if (AnalysisDirectionEnum.ByActivity == AnalysisDirection) { FolderType = 0; } // Учет данных только открытых активностей OnlyActiveFolders = (0 != (int)Params.GetParam("OnlyActiveFolders").Value); if (AnalysisDirectionEnum.ByActivity == AnalysisDirection) { OnlyActiveFolders = false; } // Отображение данных об истории изменения данных по направлениям для активности ShowHistoryInfo = (0 != (int)Params.GetParam("ShowHistoryInfo").Value); if (AnalysisDirectionEnum.ByActivity != AnalysisDirection) { ShowHistoryInfo = false; } // Детализация данных в отчете ShowDetails = (0 != (int)Params.GetParam("ShowDetails").Value); // Форма представления времени; TimeMeasure = (TimeMeasureUnits)((int)Params.GetParam("TimeMeasureUnits").Value); // Тип сортировки (0 - по наименованию направления, 1 - по сумме) SortBy = (int)Params.GetParam("SortBy").Value; // Признак отображения параметров отчета в заголовке ShowRestrictions = (0 != (int)Params.GetParam("ShowRestrictions").Value); }