Пример #1
0
            /// <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>"
                    );
            }
Пример #2
0
 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()))
                         );
 }
Пример #3
0
            /// <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()
                    );
            }
Пример #4
0
            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);
            }
Пример #5
0
            /// <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>"
                    );
            }