Esempio n. 1
0
        private void writeMainData(XslFOProfileWriter fo, ThisReportData data, int Type)
        {
            #region #1: Основные данные

            _TableSeparator(fo);

            fo.TStart(true, ITRepStyles.TABLE, false);
            fo.TAddColumn("Займ №", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "15%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Тип займа", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "15%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Целевая компания/Сотрудник", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "30%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Дата", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "15%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Сумма", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "15%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);

            foreach (IDictionary IO in data.IncOut)
            {
                fo.TRStart();
                _WriteCell(fo, xmlEncode(IO["Number"]));
                _WriteCell(fo, xmlEncode(IO["LoanType"]));
                _WriteCell(fo, xmlEncode(IO["LoanTarget"]));
                _WriteCell(fo, _FormatShortDate(IO["Date"].ToString()));
                _WriteCell(fo, xmlEncode(IO["Sum"]));
                fo.TREnd();
            }
            fo.TEnd();
            #endregion
        }
Esempio n. 2
0
 private void writeDataPair(XslFOProfileWriter fo, string sName, string sValue, string sValueStyleClass)
 {
     fo.TRStart();
     _WriteCell(fo, sName, "string", ITRepStyles.TABLE_CELL_BOLD);
     _WriteCell(fo, sValue, "string", sValueStyleClass, true);
     fo.TREnd();
 }
Esempio n. 3
0
            public void Write(XslFOProfileWriter foWriter, IEnumerable <BaseData> values)
            {
                foWriter.TStart(true, "TABLE", false);
                foWriter.TAddColumn("№", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "5%", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");
                foWriter.TAddColumn("Департамент", align.ALIGN_LEFT, valign.VALIGN_MIDDLE, null, "75%", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");
                foWriter.TAddColumn("Трудозатраты", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "20%", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");

                Dictionary <Type, string> rowClasses = new Dictionary <Type, string>();

                rowClasses.Add(typeof(DepartmentData), "GROUP_HEADER");
                rowClasses.Add(typeof(DepartmentDetailData), "TABLE_CELL");
                rowClasses.Add(typeof(OverallData), "TABLE_FOOTER");

                foreach (BaseData value in values)
                {
                    foWriter.TRStart();
                    if (value is OverallData)
                    {
                        foWriter.TRAddCell("Итого", null, 1, 1, rowClasses[value.GetType()]);
                    }
                    else
                    {
                        foWriter.TRAddCell(indexGenerator.Generate(), null, 1, 1, rowClasses[value.GetType()]);
                    }
                    foWriter.TRAddCell(CustomReport.xmlEncode(value.Name), null, 1, 1, rowClasses[value.GetType()]);
                    foWriter.TRAddCell(costsFormatter.Format(value.Costs), null, 1, 1, rowClasses[value.GetType()]);
                    foWriter.TREnd();
                }

                foWriter.TEnd();
            }
Esempio n. 4
0
        // Выводит сальдо по проекту в разрезе временной шкалы
        private void writeIntervalSaldoDataRow(XslFOProfileWriter fo, int nColSpan, string sLabel)
        {
            if (null == FinanceData)
            {
                throw new Exception("Не инициализированы финансовые показатели по проекту");
            }
            fo.TRStart(ITRepStyles.TABLE_CELL_COLOR_YELLOW);
            fo.TRAddCell(sLabel, "string", nColSpan, 1);

            if (bIsBudgetBindedReport)
            {
                //Планируемая валовая прибыль (Сальдо по бюджету)
                _WriteCell(fo, xmlEncode(_FormatMoney(FinanceData.ContractSum - FinanceData.BudgetOutSum)));
            }

            writeEmptyValueCell(fo, 1);

            foreach (IDictionary interval in FinanceData?.DateIntervals)
            {
                _WriteCell(fo, xmlEncode(_FormatMoney(FinanceData?.IntervalSaldo[interval["ObjectID"]])));
            }

            _WriteCell(fo, xmlEncode(_FormatMoney(FinanceData.IncomeSum - FinanceData.OutcomeSum)));

            writeEmptyValueCell(fo, nColSpan);
            fo.TREnd();
        }
Esempio n. 5
0
 //Выводит заданное кол-во "пустых" ячеек показателей
 private void writeEmptyValueCell(XslFOProfileWriter fo, int j)
 {
     for (int i = 1; i <= j; i++)
     {
         _WriteCell(fo, "", "string", ITRepStyles.TABLE_CELL_ND, false);
     }
 }
Esempio n. 6
0
 //Выводит заданное кол-во "пустых" ячеек показателей
 private void writeEmptyValueCell(XslFOProfileWriter fo, int j)
 {
     for (int i = 1; i <= j; i++)
     {
         _WriteCell(fo, "-");
     }
 }
Esempio n. 7
0
 // Выводит итоговые финансовые данные по проектам
 private void writeSumProjectDataRow(XslFOProfileWriter fo, ThisReportData data, string sLabel, string sCol)
 {
     fo.TRStart();
     _WriteCell(fo, sLabel);
     foreach (IDictionary fd in data.GroupPreFinData)
     {
         _WriteCell(fo, xmlEncode(fd[sCol]));
     }
     foreach (IDictionary fd in data.GroupFinData)
     {
         _WriteCell(fo, xmlEncode(fd[sCol]));
     }
     foreach (IDictionary fd in data.GroupSumFinData)
     {
         _WriteCell(fo, xmlEncode(fd[sCol]));
     }
     foreach (IDictionary fd in data.GroupAfterFinData)
     {
         _WriteCell(fo, xmlEncode(fd[sCol]));
     }
     foreach (IDictionary fd in data.GroupAllFinData)
     {
         _WriteCell(fo, xmlEncode(fd[sCol]));
     }
     fo.TREnd();
 }
Esempio n. 8
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>"
                    );
            }
Esempio n. 9
0
        // Выводит суммарные расходы по проекту в разрезе временной шкалы
        private void writeTotalOutcomeDataRow(XslFOProfileWriter fo, int nColSpan, string sLabel)
        {
            if (null == FinanceData)
            {
                throw new Exception("Не инициализированы финансовые показатели по проекту");
            }

            fo.TRStart(ITRepStyles.TABLE_CELL_COLOR_ORANGE);
            fo.TRAddCell(sLabel, "string", nColSpan, 1);
            if (bIsBudgetBindedReport)
            {
                _WriteCell(fo, xmlEncode(_FormatMoney(FinanceData.BudgetOutSum.ToString())));
            }

            writeEmptyValueCell(fo, 1);

            foreach (IDictionary totalOutcome in FinanceData?.IntervalOutcomes)
            {
                _WriteCell(fo, xmlEncode(_FormatMoney(totalOutcome["PaymentSum"])));
            }

            _WriteCell(fo, xmlEncode(_FormatMoney(FinanceData.OutcomeSum)));

            if (bIsBudgetBindedReport)
            {
                _WriteCell(fo, xmlEncode(_FormatMoney(FinanceData.BudgetOutSum - FinanceData.OutcomeSum)));
            }
            writeEmptyValueCell(fo, 1);
            fo.TREnd();
        }
Esempio n. 10
0
        // Выводит суммарный приход по проекту в разрезе временной шкалы
        private void writeTotalIncomeDataRow(XslFOProfileWriter fo, int nColSpan, string sLabel)
        {
            if (null == FinanceData)
            {
                throw new Exception("Не инициализированы финансовые показатели по проекту");
            }

            fo.TRStart(ITRepStyles.TABLE_CELL_COLOR_GREEN);
            fo.TRAddCell(sLabel, "string", nColSpan, 1);

            if (bIsBudgetBindedReport)
            {
                //Общий планируемый приход равен сумме контракта
                _WriteCell(fo, xmlEncode(_FormatMoney(FinanceData.ContractSum)));
            }

            writeEmptyValueCell(fo, 1);
            foreach (IDictionary income in FinanceData?.Incomes)
            {
                _WriteCell(fo, xmlEncode(_FormatMoney(income["IncomeSum"])));
            }

            _WriteCell(fo, xmlEncode(_FormatMoney(FinanceData.IncomeSum)));
            if (bIsBudgetBindedReport)
            {
                _WriteCell(fo, xmlEncode(_FormatMoney(FinanceData.ContractSum - FinanceData.IncomeSum)));
            }

            writeEmptyValueCell(fo, 1);

            fo.TREnd();
        }
Esempio n. 11
0
        /// <summary>
        /// Отображение в отчете основных свойств лота и тендера
        /// </summary>
        /// <param name="fo"></param>
        /// <param name="data">Данные тендера, данные которого отображаются</param>
        private void writeMainData(XslFOProfileWriter fo, ThisReportData data)
        {
            #region #1: Основные данные

            // ...разделитель
            _TableSeparator(fo);

            fo.TStart(true, ITRepStyles.TABLE, false);

            fo.TAddColumn("Тип транзакции", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "25%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Назначение", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "25%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Дата", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Сумма", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Примечание", align.ALIGN_LEFT, valign.VALIGN_MIDDLE, null, "30%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);

            foreach (IDictionary EmpKassTrans in data.Main)
            {
                fo.TRStart();
                _WriteCell(fo, xmlEncode(EmpKassTrans["TransType"]));
                _WriteCell(fo, xmlEncode(EmpKassTrans["Reason"]));
                _WriteCell(fo, xmlEncode(((DateTime)EmpKassTrans["Date"]).ToShortDateString()));
                _WriteCell(fo, xmlEncode(EmpKassTrans["TransSum"]));
                _WriteCell(fo, xmlEncode(EmpKassTrans["Rem"]));
                fo.TREnd();
            }
            fo.TEnd();
            #endregion
        }
Esempio n. 12
0
 public void Write(XslFOProfileWriter writer)
 {
     writer.WriteLayoutMaster();
     writer.StartPageSequence();
     writer.EmptyBody(message == null ? "Нет данных" : message);
     writer.EndPageSequence();
 }
Esempio n. 13
0
 protected void writeEmptyBody(XslFOProfileWriter foWriter, string message)
 {
     foWriter.StartPageSequence();
     foWriter.StartPageBody();
     foWriter.EmptyBody(message);
     foWriter.EndPageBody();
     foWriter.EndPageSequence();
 }
Esempio n. 14
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()))
                         );
 }
Esempio n. 15
0
        private void writeExtendedReport(XslFOProfileWriter fo, ThisReportData data)
        {
            _TableSeparator(fo);

            fo.TStart(true, ITRepStyles.TABLE, false);
            fo.TAddColumn("Статья расходов/Контрагент", align.ALIGN_LEFT, valign.VALIGN_MIDDLE, null, "40%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Назначение", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "30%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("С учетом комплектации", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Сумма с НДС", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Сумма без НДС", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);

            foreach (IDictionary IO in data.Incomes)
            {
                if ((int)IO["IncType"] < 0)
                {
                    fo.TRStart();
                    _WriteCell(fo, xmlEncode(IO["Type"]));
                    _WriteCell(fo, xmlEncode(IO["Reason"]));
                    _WriteCell(fo, xmlEncode(""));
                    _WriteCell(fo, xmlEncode(IO["Sum"]));
                    _WriteCell(fo, xmlEncode(IO["SumNoNDS"]));
                    fo.TREnd();
                }
                else
                {
                    fo.TRStart();
                    fo.TRAddCell(xmlEncode(IO["Type"]), "string", 3, 1, ITRepStyles.GROUP_HEADER);
                    fo.TRAddCell(xmlEncode(IO["Sum"]), "string", 1, 1, ITRepStyles.GROUP_HEADER);
                    fo.TRAddCell(xmlEncode(IO["SumNoNDS"]), "string", 1, 1, ITRepStyles.GROUP_HEADER);
                    fo.TREnd();
                }
            }

            foreach (IDictionary IO in data.Outcomes)
            {
                if ((int)IO["OutType"] < 10)
                {
                    fo.TRStart();
                    //_WriteCell(fo, _FormatShortDate(IO["Date"].ToString()));
                    _WriteCell(fo, xmlEncode(IO["SupplierName"]));
                    _WriteCell(fo, xmlEncode(IO["Rem"]));
                    _WriteCell(fo, xmlEncode(IO["OutSumExt"]));
                    _WriteCell(fo, xmlEncode(IO["OutSum"]));
                    _WriteCell(fo, xmlEncode(IO["OutSumNoNDS"]));
                    fo.TREnd();
                }
                else
                {
                    fo.TRStart();
                    fo.TRAddCell(xmlEncode(IO["SupplierName"]), "string", 2, 1, ITRepStyles.GROUP_HEADER);
                    fo.TRAddCell(xmlEncode(IO["OutSumExt"]), "string", 1, 1, ITRepStyles.GROUP_HEADER);
                    fo.TRAddCell(xmlEncode(IO["OutSum"]), "string", 1, 1, ITRepStyles.GROUP_HEADER);
                    fo.TRAddCell(xmlEncode(IO["OutSumNoNDS"]), "string", 1, 1, ITRepStyles.GROUP_HEADER);
                    fo.TREnd();
                }
            }
            fo.TEnd();
        }
Esempio n. 16
0
        /// <summary>
        /// Формирование шапки таблицы отчета
        /// </summary>
        /// <param name="fo"></param>
        /// <returns>Кол-во сформированных колонок</returns>
        private void writeHeader(XslFOProfileWriter fo)
        {
            fo.TAddColumn("Дата", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "20%", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");
            fo.TAddColumn("Трудозатраты<fo:block font-weight='normal'>(всего, по инцидентам / по списаниям)</fo:block>", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "30%", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");
            int nColIndex = fo.TAddColumn("Баланс списаний", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, "TABLE_HEADER");

            fo.TAddSubColumn(nColIndex, "за день", align.ALIGN_CENTER, valign.VALIGN_TOP, null, "25%", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");
            fo.TAddSubColumn(nColIndex, "за период, накопительно", align.ALIGN_CENTER, valign.VALIGN_TOP, null, "25%", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");
        }
Esempio n. 17
0
 // Выводит итоговые финансовые данные по проектам
 private void writeProjectIncomeDataRow(XslFOProfileWriter fo, string sLabel)
 {
     fo.TRStart();
     _WriteCell(fo, sLabel);
     foreach (IDictionary income in FinanceData?.Incomes)
     {
         _WriteCell(fo, xmlEncode(income["IncomeSum"]));
     }
     fo.TREnd();
 }
Esempio n. 18
0
 /// <summary>
 /// Вставляет строку таблицы
 /// </summary>
 /// <param name="foWriter"></param>
 /// <param name="cells"></param>
 /// <param name="firstBold"></param>
 protected void _WriteTR(XslFOProfileWriter foWriter, bool firstBold, params object[] cells)
 {
     foWriter.TRStart();
     for (int i = 0; i < cells.Length; i++)
     {
         foWriter.TRAddCell(cells[i], null, 1, 1,
                            (i == 0 && firstBold) ? "CELL_BOLD_CLASS" : "CELL_CLASS");
     }
     foWriter.TREnd();
 }
Esempio n. 19
0
        /// <summary>
        /// Построение отчета с привязкой к бюджету
        /// </summary>
        /// <param name="fo"></param>
        private void writeBudgetBindedReport(XslFOProfileWriter fo)
        {
            _TableSeparator(fo);

            fo.TStart(true, ITRepStyles.TABLE, false);
            #region Шапка отчета

            fo.TAddColumn("Контрагент", align.ALIGN_LEFT, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_CELL_BOLD, "4%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Статья бюджета", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "3%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Сумма в бюджете", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_CELL_BOLD, "2%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("На начало периода", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "2%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);

            //Общее количество колонок в таблице отчета
            int i = 6;

            //Заголовки колонок
            foreach (IDictionary Interval in FinanceData.DateIntervals)
            {
                fo.TAddColumn(xmlEncode(Interval["Name"].ToString()), align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "4%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
                i++;
            }
            fo.TAddColumn("Итого", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "4%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("На конец периода", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "4%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Остаток", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "5%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            int nRowCount = i++;

            #endregion

            fo.TRStart();
            fo.TRAddCell("ВСЕГО ПО ПРОЕКТУ", "string", nRowCount + 1, 1, ITRepStyles.GROUP_HEADER);
            fo.TREnd();

            //Итого Сальдо по временному интервалу
            writeIntervalSaldoDataRow(fo, 2, "Сальдо");

            //Итого приходы по проекту
            writeTotalIncomeDataRow(fo, 2, "Приход");

            //Итого расходы по проекту
            writeTotalOutcomeDataRow(fo, 2, "Расход");

            //TODO: Добавить Итого, Остаток, Всего



            fo.TRStart();
            fo.TRAddCell("ПО КАЖДОЙ СТАТЬЕ БЮДЖЕТА", "string", nRowCount + 1, 1, ITRepStyles.GROUP_HEADER);
            fo.TREnd();

            //Платежи по каждой статье бюджета в разрезе временной шкалы
            writeProjectBudgetBindedOutcomesData(fo);

            fo.TEnd();
        }
Esempio n. 20
0
 // Выводит общие финансовые данные
 private void writeGenDataRow(XslFOProfileWriter fo, ArrayList al)
 {
     fo.TRStart();
     writeEmptyValueCell(fo, 2);
     foreach (IDictionary fd in al)
     {
         _WriteCell(fo, xmlEncode(fd["Sum"].ToString()));
     }
     writeEmptyValueCell(fo, 3);
     fo.TREnd();
 }
Esempio n. 21
0
        /// <summary>
        /// Выводит расходы по проекту в разрезе временной шкалы по каждому контрагенту
        /// </summary>
        private void writeProjectSupplierBindedOutcomesData(XslFOProfileWriter fo)
        {
            if (null == FinanceData)
            {
                throw new ApplicationException("Не инициализированы финансовые показатели по проекту");
            }

            object oCurrentSupplierID = null;

            foreach (IDictionary Outcome in FinanceData?.Outcomes)
            {
                // Проверяем перешли ли к следующему контрагенту, если да, выводим данные о нем
                if (!Outcome["SupplierID"].Equals(oCurrentSupplierID))
                {
                    //Если не первая строка, закроем предыдущую
                    if (null != oCurrentSupplierID)
                    {
                        //выведем столбцы "Итого","Всего","Остаток"
                        _WriteCell(fo, xmlEncode(_FormatMoney(FinanceData?.SupplierOutcomeSum[oCurrentSupplierID])), "string", ITRepStyles.TABLE_CELL_BOLD);
                        _WriteCell(fo, xmlEncode(_FormatMoney(FinanceData?.OutcomesAfter[oCurrentSupplierID])), "string", ITRepStyles.TABLE_CELL_BOLD);
                        fo.TREnd();
                    }
                    fo.TRStart();

                    //Наименование контрагента
                    _WriteCell(fo, xmlEncode(Outcome["OrgName"]), "string", ITRepStyles.TABLE_CELL_BOLD);

                    oCurrentSupplierID = Outcome["SupplierID"];

                    //Выведем показатели на начало периода
                    if (null != FinanceData.OutcomesBefore)
                    {
                        foreach (IDictionary outcomeBefore in FinanceData?.OutcomesBefore)
                        {
                            if (outcomeBefore["SupplierID"].Equals(oCurrentSupplierID))
                            {
                                _WriteCell(fo, xmlEncode(_FormatMoney(outcomeBefore["PaymentSum"])));
                            }
                        }
                    }
                    else
                    {
                        writeEmptyValueCell(fo, 1);
                    }
                }
                //непосредственно сам фин показатель по текущему временному интервалу
                _WriteCell(fo, xmlEncode(_FormatMoney(Outcome["PaymentSum"].ToString())));
            }
            //Закроем последнюю строку
            //выведем столбцы "Итого","Всего","Остаток"
            _WriteCell(fo, xmlEncode(_FormatMoney(FinanceData?.SupplierOutcomeSum[oCurrentSupplierID])), "string", ITRepStyles.TABLE_CELL_BOLD);
            _WriteCell(fo, xmlEncode(_FormatMoney(FinanceData?.OutcomesAfter[oCurrentSupplierID])), "string", ITRepStyles.TABLE_CELL_BOLD);
            fo.TREnd();
        }
Esempio n. 22
0
            public void Write(XslFOProfileWriter writer)
            {
                writer.WriteLayoutMaster();
                writer.StartPageSequence();
                writer.StartPageBody();

                headerWriter.Write(writer);

                bodyWriter.Write(writer);

                writer.EndPageBody();
                writer.EndPageSequence();
            }
Esempio n. 23
0
        /// <summary>
        /// Формирует в потоке FO одну ячейку таблицы с заданными данными, типом
        /// и указанным стилевым классом.
        /// </summary>
        /// <param name="foWriter"></param>
        /// <param name="data">Данные; явно приводятся к строке</param>
        /// <param name="sType">Тип данных в ячейке</param>
        /// <param name="sCellClass">Наименование стилевого класса для ячейки</param>
        /// <param name="trackEmptyValAsND">
        /// Задает режим явной замены "пустых" значений: если задан в true и значение
        /// data есть null или DBNull.Value, то выводит текст "нет данных" и заменят
        /// заданный стилевой класс на ITRepStyles.TABLE_CELL_ND;
        /// </param>
        protected void _WriteCell(XslFOProfileWriter foWriter, object data, string sType, string sCellClass, bool trackEmptyValAsND)
        {
            string sValue = String.Empty;

            if (null != data && DBNull.Value != data)
            {
                sValue = data.ToString();
            }

            if (String.Empty == sValue && trackEmptyValAsND)
            {
                sValue     = "( нет данных )";
                sCellClass = ITRepStyles.TABLE_CELL_ND;
            }
            foWriter.TRAddCell(sValue, sType, 1, 1, sCellClass);
        }
Esempio n. 24
0
        /// <summary>
        /// Построение отчета
        /// </summary>
        /// <param name="data">Контекст</param>
        protected override void buildReport(ReportLayoutData data)
        {
            XslFOProfileWriter foWriter = data.RepGen;

            ThisReportParams ps = new ThisReportParams(data.Params);

            ps.FolderName = data.DataProvider.GetValue("Header", null) as string;

            OverallData report = null;

            // получим данные
            using (IDataReader reader = data.DataProvider.GetDataReader("Main", null))
            {
                if (reader.Read())
                {
                    IOverallDeserializer deserializer = new OverallDeserializer(
                        new DepartmentDataDeserializer(
                            new DepartmentDetailDataDeserializer()
                            )
                        );

                    report = deserializer.Deserialize(new DataReaderWrapper(reader));
                }
                else
                {
                    report = new OverallData(new List <DepartmentData>());
                }
            }

            // сконфигурируем компонент, отвечающий за формирование отчета
            IReportWriter writer =
                new ReportWriter(
                    ps.ShowRestrictions ? new WithParamsHeaderWriter(ps) as IHeaderWriter : new SimpleHeaderWriter() as IHeaderWriter,
                    new BodyWriter(
                        new BaseDataWriter(
                            new SimpleIntIndexGenerator(1, 1),
                            ps.TimeMeasureUnits == TimeMeasureUnits.Days
                                                        ? new DHMCostsFormatter() as ICostsFormatter
                                                        : new HourCostsFormatter() as ICostsFormatter
                            ),
                        report,
                        ps.ShowDetalization ? new DetailReportSerializer() as IReportSerializer : new MainReportSerializer() as IReportSerializer
                        )
                    ) as IReportWriter;

            writer.Write(foWriter);
        }
Esempio n. 25
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()
                    );
            }
Esempio n. 26
0
        // Выводит приходы и расходы по займам и интервалам
        private void writeLoansIncOutDataRow(XslFOProfileWriter fo, ThisReportData data, int iType, ReportParams Params)
        {
            string sCol = "OutSum";

            fo.TRStart();
            if (iType == 0)
            {
                sCol = "IncSum";
                _WriteCell(fo, "П");
            }
            else
            {
                _WriteCell(fo, "Р");
            }

            //На начало периода
            writeEmptyValueCell(fo, 1);

            //Расходы - приходы
            foreach (IDictionary fd in data.LoansSumFinData)
            {
                //Если есть расходы или приходы, то формируем ссылку на отчет с детализацией
                if ((String)fd[sCol] != "0.00")
                {
                    StringBuilder sbDetailRef = new StringBuilder();
                    _StartReportURL(sbDetailRef, "r-LoansIncOut");
                    _AppendParamURL(sbDetailRef, "Type", iType);
                    _AppendParamURL(sbDetailRef, "PrjGroup", (Guid)Params.GetParam("Group").Value);
                    _AppendParamURL(sbDetailRef, "DateIntervalID", (Guid)fd["DateIntervalID"]);
                    _AppendParamURL(sbDetailRef, "IsSeparate", Params.GetParam("IsSeparate").Value);
                    _AppendParamURL(sbDetailRef, "Sum", fd[sCol].ToString());
                    _EndReportURL(sbDetailRef, "Детализация", fd[sCol]);
                    _WriteCell(fo, sbDetailRef.ToString());
                }
                else
                {
                    _WriteCell(fo, xmlEncode(fd[sCol]));
                }
            }

            //
            writeEmptyValueCell(fo, 3);
            fo.TREnd();
        }
Esempio n. 27
0
        /// <summary>
        /// Построение отчета
        /// </summary>
        /// <param name="data">Контекст</param>
        protected override void buildReport(ReportLayoutData data)
        {
            XslFOProfileWriter foWriter = data.RepGen;

            ThisReportParams ps = new ThisReportParams(data.Params);

            string name = data.DataProvider.GetValue("Header", null) as string;

            List <BaseData> report = null;

            // получим данные
            using (IDataReader reader = data.DataProvider.GetDataReader("Main", null))
            {
                if (reader.Read())
                {
                    IDataDeserializer deserializer = new DataDeserializer(
                        new SnapDataDeserializer(),
                        new StatusDataDeserializer()
                        );

                    report = new List <BaseData>(deserializer.Deserialize(new DataReaderWrapper(reader)));
                }
                else
                {
                    report = new List <BaseData>();
                }
            }

            // сконфигурируем компонент, отвечающий за формирование отчета
            IReportWriter writer =
                new ReportWriter(
                    new HeaderWriter(name),
                    new BodyWriter(
                        new BaseDataWriter(
                            new SimpleIntIndexGenerator(1, 1)),
                        report,
                        new ReportSerializer()
                        )
                    ) as IReportWriter;

            writer.Write(foWriter);
        }
Esempio n. 28
0
        /// <summary>
        /// Отображение в отчете основных свойств лота и тендера
        /// </summary>
        /// <param name="fo"></param>
        /// <param name="data">Данные тендера, данные которого отображаются</param>
        private void writeMainData(XslFOProfileWriter fo, ThisReportData data)
        {
            #region #1: Основные данные

            // ...разделитель
            _TableSeparator(fo);

            fo.TStart(false, ITRepStyles.TABLE, false);
            fo.TAddColumn("Характеристика", align.ALIGN_LEFT, valign.VALIGN_TOP, null, "30%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);
            fo.TAddColumn("Значение", align.ALIGN_LEFT, valign.VALIGN_TOP, null, "70%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER);

            writeDataPair(fo, "Получено в кассе", xmlEncode(data.Main["KassRecieved"]));
            writeDataPair(fo, "Сдано по АО (после 04/10/2013)", xmlEncode(data.Main["AOSended"]));
            writeDataPair(fo, "Возвращено в кассу", xmlEncode(data.Main["KassReturned"]));
            writeDataPair(fo, "Получено от других содрудников", xmlEncode(data.Main["EmpRecieved"]));
            writeDataPair(fo, "Передано другим сотрудникам", xmlEncode(data.Main["EmpSended"]));
            writeDataPair(fo, "Итоговое сальдо ДС", "<fo:inline font-weight='bold'>" + xmlEncode(data.Main["EmpSaldoDS"]) + "</fo:inline>");

            fo.TEnd();
            #endregion
        }
Esempio n. 29
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);
            }
Esempio n. 30
0
            public void Write(XslFOProfileWriter foWriter, IEnumerable <BaseData> values)
            {
                foWriter.TStart(true, "TABLE", false);
                foWriter.TAddColumn("№", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "5%", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");
                foWriter.TAddColumn("Дата и время", align.ALIGN_LEFT, valign.VALIGN_MIDDLE, null, "", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");
                foWriter.TAddColumn("Пользователь", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");
                foWriter.TAddColumn("Наименование", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");
                foWriter.TAddColumn("Краткое наименование", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");
                foWriter.TAddColumn("Директор клиента", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");
                foWriter.TAddColumn("Структура организации определена", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");
                foWriter.TAddColumn("Идентификатор внешней системы", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "", align.ALIGN_NONE, valign.VALIGN_NONE, "TABLE_HEADER");

                foreach (BaseData value in values)
                {
                    foWriter.TRStart();
                    foWriter.TRAddCell(indexGenerator.Generate(), null);
                    foWriter.TRAddCell(value.DateTime.ToString("dd.MM.yyyy hh.mm.ss"), null);
                    foWriter.TRAddCell(value.SystemUser, null);

                    if (value is StatusData)
                    {
                        StatusData typedValue = value as StatusData;
                        foWriter.TRAddCell(typedValue.Exists ? "Создана новая организация" : "Организация удалена", null, 5, 1);
                    }
                    else
                    {
                        SnapData typedValue = value as SnapData;
                        foWriter.TRAddCell(typedValue.Name, null);
                        foWriter.TRAddCell(typedValue.ShortName, null);
                        foWriter.TRAddCell(typedValue.Director, null);
                        foWriter.TRAddCell(typedValue.StructureHasDefined ? "Да" : "Нет", null);
                        foWriter.TRAddCell(typedValue.ExternalID, null);
                    }
                    foWriter.TREnd();
                }

                foWriter.TEnd();
            }