/// <summary> /// Формирует текст XSL-FO, представляющий данные заданных параметров, и /// записывает его как текст подзаголовка формируемого отчета /// </summary> /// <param name="foWriter"></param> /// <param name="cn"></param> public void WriteParamsInHeader(XslFOProfileWriter foWriter, IReportDataProvider Provider) { // XSL-FO с перечнем параметров будем собирать сюда: StringBuilder sbBlock = new StringBuilder(); string sParamValue; if (IsSpecifiedIntervalBegin) { sParamValue = ((DateTime)IntervalBegin).ToString("dd.MM.yyyy"); } else { sParamValue = "не задана"; } sbBlock.Append(getParamValueAsFoBlock("Дата начала отчетного периода", sParamValue)); if (IsSpecifiedIntervalEnd) { sParamValue = ((DateTime)IntervalEnd).ToString("dd.MM.yyyy"); } else { sParamValue = "не задана"; } sbBlock.Append(getParamValueAsFoBlock("Дата окончания отчетного периода", sParamValue)); // ВЫВОД ПОДЗАГОЛОВКА: foWriter.AddSubHeader( @"<fo:block text-align=""left""><fo:block font-weight=""bold"">Параметры отчета:</fo:block>" + sbBlock.ToString() + @"</fo:block>" ); }
private void WriteParam <T>(XslFOProfileWriter writer, string name, T value) { writer.AddSubHeader(String.Format( @"<fo:block text-align=""left""><fo:inline>{0}: </fo:inline><fo:inline font-weight=""bold"">{1}</fo:inline></fo:block>", xmlEncode(name), xmlEncode(value == null ? string.Empty : value.ToString())) ); }
/// <summary> /// Формирует текст XSL-FO, представляющий данные заданных параметров, и /// записывает его как текст подзаголовка формируемого отчета /// </summary> /// <param name="foWriter"></param> public void WriteParamsInHeader(XslFOProfileWriter foWriter) { // XSL-FO с перечнем параметров будем собирать сюда: StringBuilder sbBlock = new StringBuilder(); string sParamValue; // временная строка с представлением значения параметра // #1: Сотрудник: sbBlock.Append(getParamValueAsFoBlock("Сотрудник", FullName)); // #2: Дата начала и окончания отчетного периода. // Любая из этих дат может быть не задана; если это так, то // в заголовке отчета выводится соответствующие указание: if (IsSpecifiedIntervalBegin) { sParamValue = ((DateTime)IntervalBegin).ToString("dd.MM.yyyy"); } else { sParamValue = "не задана, используется текущая - " + DateTime.Now.ToString("dd.MM.yyyy"); } sbBlock.Append(getParamValueAsFoBlock("Дата начала периода", sParamValue)); if (IsSpecifiedIntervalEnd) { sParamValue = ((DateTime)IntervalEnd).ToString("dd.MM.yyyy"); } else { sParamValue = "не задана, используется текущая - " + DateTime.Now.ToString("dd.MM.yyyy"); } sbBlock.Append(getParamValueAsFoBlock("Дата окончания периода", sParamValue)); // #3: Единицы представления времени: sParamValue = TimeMeasureUnitsItem.GetItem(TimeMeasure).Description; sbBlock.Append(getParamValueAsFoBlock("Единицы изменения времени", sParamValue)); // #4: Признак "Показывть выходные дни без списаний" sParamValue = ShowFreeWeekends? "Да" : "Нет"; sbBlock.Append(getParamValueAsFoBlock("Отображать выходные без списаний", sParamValue)); // ВЫВОД ПОДЗАГОЛОВКА: foWriter.AddSubHeader( @"<fo:block text-align=""left"" font-weight=""bold"">Параметры отчета:</fo:block>" + sbBlock.ToString() ); }
public void Write(XslFOProfileWriter writer) { writer.Header("Затраты в разрезе департаментов"); writer.AddSubHeader(@"<fo:block font-weight=""bold"" text-align=""left"">Параметры отчета:</fo:block>"); WriteParam(writer, "Период времени", PeriodTypeItem.GetItem(ps.PeriodType).Description); if (ps.PeriodType == PeriodType.DateInterval) { WriteParam(writer, "С", ps.IntervalBegin.HasValue ? ps.IntervalBegin.Value.ToString("dd.MM.yyyy") : "Не задан"); WriteParam(writer, "По", ps.IntervalEnd.HasValue ? ps.IntervalEnd.Value.ToString("dd.MM.yyyy") : "Не задан (используется текущая дата)"); } else if (ps.PeriodType == PeriodType.SelectedQuarter) { WriteParam(writer, "Квартал", ps.Quarter.HasValue ? QuarterItem.GetItem(ps.Quarter.Value).Description : "Не задан"); } WriteParam(writer, "Активность", ps.FolderName); WriteParam(writer, "Детализация по отделам и группам", ps.ShowDetalization ? "Да" : "Нет"); WriteParam(writer, "Представление времени", TimeMeasureUnitsItem.GetItem(ps.TimeMeasureUnits).Description); WriteParam(writer, "Порядок сортировки", ReportDepartmentCostSortItem.GetItem(ps.SortBy).Description); }
/// <summary> /// Формирует текст XSL-FO, представляющий данные заданных параметров, и /// записывает его как текст подзаголовка формируемого отчета /// </summary> /// <param name="foWriter"></param> /// <param name="cn"></param> public void WriteParamsInHeader(XslFOProfileWriter foWriter, IReportDataProvider Provider) { // XSL-FO с перечнем параметров будем собирать сюда: StringBuilder sbBlock = new StringBuilder(); string sParamValue; // #1: Дата начала и окончания отчетного периода. // Любая из этих дат может быть не задана; если это так, то, с соответствии // с требованиями, в заголовке отчета должны выводиться соответствующие // расчетные даты - соответственно дата самого раннего и дата самого позднего // списаний (для множества проектов, получаемых в соотв. ограничениями, // задаваемыми остальными парамитрами). Расчетные данные получаются при // помощи специальной UDF; запрос будет выполняться только если необходимо: string sPossibleIntervalBegin = "нет данных"; // Строка с расчетной датой начала периода string sPossibleIntervalEnd = "нет данных"; // Строка с расчетной датой завершения периода if (!IsSpecifiedIntervalBegin || !IsSpecifiedIntervalEnd) { // Для расчета самой возможных даты надо выполнить UDF dbo.GetMinimaxBoundingDates: using (IDataReader reader = Provider.GetDataReader("dsDates", this)) { if (!reader.Read()) { throw new ApplicationException("Ошибка получения дополнительных данных (расчетная дата начала периода)"); } // Расчетная дата начала периода (первый столбец в рекордсете): if (!reader.IsDBNull(0)) { sPossibleIntervalBegin = reader.GetDateTime(0).ToString("dd.MM.yyyy"); } // Расчетная дата завершения периода (второй столбец в рекордсете): if (!reader.IsDBNull(1)) { sPossibleIntervalEnd = reader.GetDateTime(1).ToString("dd.MM.yyyy"); } } } if (IsSpecifiedIntervalBegin) { sParamValue = ((DateTime)IntervalBegin).ToString("dd.MM.yyyy"); } else { sParamValue = String.Format("не задана (расчетная дата - {0})", sPossibleIntervalBegin); } sbBlock.Append(getParamValueAsFoBlock("Дата начала отчетного периода", sParamValue)); if (IsSpecifiedIntervalEnd) { sParamValue = ((DateTime)IntervalEnd).ToString("dd.MM.yyyy"); } else { sParamValue = String.Format("не задана (расчетная дата - {0})", sPossibleIntervalEnd); } sbBlock.Append(getParamValueAsFoBlock("Дата окончания отчетного периода", sParamValue)); // #2: Направление анализа: if (AnalysisDirectionEnum.ByActivity == AnalysisDirection) { sParamValue = "Активности - Направления"; } else { sParamValue = "Организации - Направления"; } sbBlock.Append(getParamValueAsFoBlock("Направление анализа", sParamValue)); // #3: Организация-Клиент или Активность: // Если задано, то что-то одно (определимся на основании "направления анализа"), // возможно ни то, ни другое. Если задано, то полное наименование возьмем из БД: if (AnalysisDirectionEnum.ByCustomer_AllCustomners == AnalysisDirection) { sbBlock.Append(getParamValueAsFoBlock("Организация", "Все организации")); } else { sParamValue = (string)Provider.GetValue("dsParams", this); if (AnalysisDirectionEnum.ByActivity == AnalysisDirection) { sbBlock.Append(getParamValueAsFoBlock("Активность", sParamValue)); } else { sbBlock.Append(getParamValueAsFoBlock("Организация", sParamValue)); } } // #4: Доп. условия на типы активности и на отбор только открытых активностей - // работает только в случае направления анализа "Организации - Направления": if (AnalysisDirectionEnum.ByActivity != AnalysisDirection) { FolderTypeFlags flags = (0 != FolderType)? (FolderTypeFlags)FolderType : (FolderTypeFlags.Project | FolderTypeFlags.Tender | FolderTypeFlags.Presale); sParamValue = FolderTypeFlagsItem.ToStringOfDescriptions(flags); sbBlock.Append(getParamValueAsFoBlock("Включать данные активностей (по типам)", sParamValue)); sbBlock.Append(getParamValueAsFoBlock( "Включать данные только открытых активностей", OnlyActiveFolders? "Да (активности в состояниях \"Открыто\" и \"Ожидание закрытия\")" : "Нет (активности во всех состояниях)" )); } else { sbBlock.Append(getParamValueAsFoBlock( "Отображать данные о последнем изменении определения направлений", ShowHistoryInfo? "Да" : "Нет" )); } // #5: Общие параметры: детализация: if (!ShowDetails) { sParamValue = "Нет"; } else { sParamValue = (AnalysisDirectionEnum.ByCustomer_AllCustomners == AnalysisDirection)? "По организациям" : "По активностям"; } sbBlock.Append(getParamValueAsFoBlock("Детализация", sParamValue)); // ...форма представления времени sbBlock.Append(getParamValueAsFoBlock( "Представление времени", TimeMeasureUnitsItem.GetItem(TimeMeasure).Description )); // ...сортировка: sbBlock.Append(getParamValueAsFoBlock("Сортировка", (0 == SortBy? "По направлению" : "По сумме затрат"))); // ВЫВОД ПОДЗАГОЛОВКА: foWriter.AddSubHeader( @"<fo:block text-align=""left""><fo:block font-weight=""bold"">Параметры отчета:</fo:block>" + sbBlock.ToString() + @"</fo:block>" ); }