Exemple #1
0
        protected virtual void PrintReportFooter(PdfPTable table)
        {
            string   value = String.Format(_totalLabel);
            PdfPCell cell  = new PdfPCell(new Phrase(value, _reportFont));

            cell.HorizontalAlignment = Element.ALIGN_LEFT;
            cell.Border     = Rectangle.TOP_BORDER;
            cell.PaddingTop = 10f;
            cell.NoWrap     = true;



            table.AddCell(cell);

            for (int i = 1; i < headers.Count; i++)
            {
                heading h = headers[i];

                value = String.Empty;

                if (h.showTotal)
                {
                    value = String.Format(h.format, h.total);
                }

                cell = new PdfPCell(new Phrase(value, _reportFont));
                cell.HorizontalAlignment = h.field_align;
                cell.Border     = Rectangle.TOP_BORDER;
                cell.PaddingTop = 10f;

                table.AddCell(cell);
            }
        }
Exemple #2
0
 /// <summary>
 /// set Heading level
 /// </summary>
 /// <param name="value"></param>
 public void setHeadingLevel(heading value)
 {
     if (value >= heading.H1 && value <= heading.H6)
     {
         _heading = value;
     }
 }
        public MissingItemsReport(string title)
            : base(title, "", "", Common.Libraries.Utility.Shared.PdfLauncher.Instance)
        {
            base.reportType         = "Audit";
            base.showReportDate     = false;
            base.showGroupCount     = true;
            this.GroupByFooterTitle = "Total Missing Items:";

            heading aHeading = new heading()
            {
                align        = Element.ALIGN_LEFT,
                width        = 55f,
                format       = "{0}",
                showTotal    = false,
                field_align  = -1,
                header_align = -1,
                formatICN    = false,
                Translator   = null
            };

            aHeading.text       = "Audit Indicator";
            aHeading.fieldName  = "TRAK_NEW_FLAG";
            aHeading.Translator = returnDefault;
            aHeading.groupBy    = true;
            headers.Add(aHeading);

            aHeading.text       = "ICN";
            aHeading.fieldName  = "ICN";
            aHeading.align      = Element.ALIGN_CENTER;
            aHeading.width      = 85f;
            aHeading.groupBy    = false;
            aHeading.Translator = ICNSpacing;
            //aHeading.formatICN = true; // this looks nice w/ bolded numbers and spaces, but it boggs down the report tremendously
            headers.Add(aHeading);

            aHeading.text       = "Status";
            aHeading.fieldName  = "STATUS_CD";
            aHeading.width      = 40f;
            aHeading.formatICN  = false;
            aHeading.Translator = null;
            headers.Add(aHeading);

            aHeading.text        = "Cost";
            aHeading.fieldName   = "PFI_AMOUNT";
            aHeading.format      = "{0:n}";
            aHeading.field_align = Element.ALIGN_RIGHT;
            aHeading.width       = 40f;
            aHeading.showTotal   = true;
            headers.Add(aHeading);

            aHeading.text         = "Merchandise Description";
            aHeading.fieldName    = "MD_DESC";
            aHeading.format       = "{0}";
            aHeading.header_align = Element.ALIGN_CENTER;
            aHeading.field_align  = Element.ALIGN_LEFT;
            aHeading.showTotal    = false;
            aHeading.width        = 200f;
            headers.Add(aHeading);
        }
        public CashTransferListingReport(IPdfLauncher pdfLauncher)
            : base("Cash Transfer Listing",
                   " ", " ", pdfLauncher)
        {
            reportPageSize = PageSize.LETTER.Rotate();

            showReportDate = false;
            heading aHeading = new heading()
            {
                align        = Element.ALIGN_LEFT,
                width        = 50f,
                format       = "{0}",
                showTotal    = false,
                field_align  = -1,
                header_align = -1,
                Translator   = null
            };

            aHeading.text      = "Transfer #";
            aHeading.fieldName = "TRANSFERNUMBER";
            headers.Add(aHeading);

            aHeading.width     = 100f;
            aHeading.text      = "Transfer Type";
            aHeading.fieldName = "TRANSFERTYPE";
            headers.Add(aHeading);

            aHeading.text      = "Transfer Date / Time";
            aHeading.fieldName = "TRANSFERDATE";
            headers.Add(aHeading);

            aHeading.width     = 60f;
            aHeading.text      = "Transfer Amount";
            aHeading.fieldName = "TRANSFERAMOUNT";
            aHeading.format    = "{0:C}";
            aHeading.align     = Element.ALIGN_RIGHT;
            headers.Add(aHeading);

            aHeading.align     = Element.ALIGN_CENTER;
            aHeading.format    = "{0}";
            aHeading.width     = 100f;
            aHeading.text      = "Source";
            aHeading.fieldName = "SOURCE";
            headers.Add(aHeading);

            aHeading.text      = "Destination";
            aHeading.fieldName = "DESTINATION";
            headers.Add(aHeading);

            aHeading.width     = 75f;
            aHeading.text      = "Status";
            aHeading.fieldName = "TRANSFERSTATUS";
            headers.Add(aHeading);

            aHeading.align     = Element.ALIGN_LEFT;
            aHeading.text      = "User Id";
            aHeading.fieldName = "USERID";
            headers.Add(aHeading);
        }
Exemple #5
0
        protected virtual void printGroupFooter(PdfPTable table, string lastGroup, int group_count)
        {
            string groupFooter;

            if (showGroupCount)
            {
                groupFooter = String.Format(GroupByFooterTitle + "\t{1}", lastGroup, group_count);
            }
            else
            {
                groupFooter = String.Format(GroupByFooterTitle, lastGroup);
            }


            PdfPCell cell = new PdfPCell(new Phrase(groupFooter, _reportFont));

            cell.Border        = Rectangle.TOP_BORDER;
            cell.Colspan       = 1;// table.NumberOfColumns - nrTotalFields;
            cell.NoWrap        = true;
            cell.PaddingBottom = 13f;
            table.AddCell(cell);


            for (int i = 1; i < headers.Count; i++)
            {
                heading h = headers[i];

                string value = String.Empty;

                if (h.showTotal)
                {
                    value        = String.Format(h.format, h.groupTotal);
                    h.groupTotal = 0;

                    headers[i] = h;

                    cell = new PdfPCell(new Phrase(value, _reportFont));
                    cell.HorizontalAlignment = h.field_align;
                    cell.Border        = Rectangle.TOP_BORDER;
                    cell.PaddingBottom = 13f;

                    table.AddCell(cell);
                }

                else
                {
                    cell = new PdfPCell(new Phrase("", _reportFont));
                    cell.HorizontalAlignment = h.field_align;
                    cell.Border        = Rectangle.TOP_BORDER;
                    cell.PaddingBottom = 13f;

                    table.AddCell(cell);
                }
            }
        }
Exemple #6
0
        /// <summary>
        ///  ctor
        /// </summary>
        /// <param name="txt"></param>
        /// <param name="head"></param>
        public CHTMLHeading(string txt, heading head)
        {
            if (txt != null)
            {
                _text = txt;
            }

            if (head >= heading.H1 && head <= heading.H6)
            {
                _heading = head;
            }
        }
        public JewelryCountDetailReport(IPdfLauncher pdfLauncher)
            : base("Jewelry Count Worksheet", "", "", pdfLauncher)
        {
            showReportDate     = false;
            GroupByFooterTitle = "Total Count for Case {0}:";

            heading aHeading = new heading()
            {
                align        = Element.ALIGN_CENTER,
                width        = 45f,
                format       = "{0}",
                showTotal    = false,
                field_align  = -1,
                header_align = -1,
                Translator   = null
            };

            aHeading.text      = "Jewelry Case";
            aHeading.fieldName = "JCASE";
            aHeading.groupBy   = true;
            headers.Add(aHeading);

            aHeading.text      = "Transaction\nTime";
            aHeading.fieldName = "TRANS_TIME";
            aHeading.groupBy   = false;
            headers.Add(aHeading);

            aHeading.text      = "Employee #";
            aHeading.fieldName = "CREATEDBY";
            headers.Add(aHeading);

            aHeading.text      = "Transaction\nStatus";
            aHeading.fieldName = "STATUS_CD";
            headers.Add(aHeading);

            aHeading.text      = "Transaction\nNumber";
            aHeading.fieldName = "DISP_DOC";
            headers.Add(aHeading);

            aHeading.text      = "Short\nCode";
            aHeading.fieldName = "SHORT_CODE";
            headers.Add(aHeading);

            aHeading.text         = "Merchandise Description";
            aHeading.fieldName    = "MD_DESC";
            aHeading.field_align  = Element.ALIGN_LEFT;
            aHeading.header_align = Element.ALIGN_CENTER;
            aHeading.width        = 200f;
            headers.Add(aHeading);
        }
Exemple #8
0
        public DailySalesReport_Summary(IPdfLauncher pdfLauncher)
            : base("Daily Sales Employee Summary", "", "Totals:", pdfLauncher)
        {
            // TODO: add sales header for criteria, and gross profit to totals; total format??
            //

            showReportDate = false;
            reportPageSize = PageSize.LETTER;

            GroupByFooterTitle = "Total for User ID: {0}";
            showGroupCount     = false;

            heading aHeading = new heading()
            {
                align        = Element.ALIGN_LEFT,
                width        = 70f,
                format       = "{0}",
                showTotal    = false,
                field_align  = Element.ALIGN_RIGHT,
                header_align = Element.ALIGN_RIGHT,
                Translator   = null
            };

            aHeading.text      = "User ID";
            aHeading.fieldName = "USERID";
            headers.Add(aHeading);

            aHeading.text      = "Total Cost";
            aHeading.fieldName = "TOTAL_COST";
            aHeading.showTotal = true;
            aHeading.format    = "{0:F2}";
            headers.Add(aHeading);

            aHeading.text      = "Total Retail";
            aHeading.fieldName = "TOTAL_RETAIL";
            headers.Add(aHeading);

            aHeading.text      = "Gross Profit";
            aHeading.fieldName = "GROSS_PROFIT";
            aHeading.format    = "{0:p0}";
            headers.Add(aHeading);

            aHeading.text      = " R/S % Variance";
            aHeading.fieldName = "AVG_VARNC_PCT";
            aHeading.format    = "{0:F0} %";
            headers.Add(aHeading);
        }
        public JewelryCountSummaryReport(IPdfLauncher pdfLauncher)
            : base("Jewelry Count Summary", "", "Transaction Total:", pdfLauncher)
        {
            showReportDate = false;
            heading aHeading = new heading()
            {
                align        = Element.ALIGN_CENTER,
                width        = 70f,
                format       = "{0}",
                showTotal    = false,
                field_align  = -1,
                header_align = -1,
                Translator   = null
            };

            aHeading.text      = "Jewelry Case";
            aHeading.fieldName = "JCASE";
            headers.Add(aHeading);

            aHeading.text      = "Sales";
            aHeading.fieldName = "SALES";
            aHeading.showTotal = true;
            headers.Add(aHeading);

            aHeading.text      = "Layaways";
            aHeading.fieldName = "LAYAWAYS";
            headers.Add(aHeading);

            aHeading.text      = "Transfer Out/OS";
            aHeading.fieldName = "TRANSFERSOUT";
            headers.Add(aHeading);

            aHeading.text      = "Returns";
            aHeading.fieldName = "RETURNS";
            headers.Add(aHeading);

            aHeading.text      = "Police Seize";
            aHeading.fieldName = "SEIZES";
            headers.Add(aHeading);

            aHeading.text      = "Case Total";
            aHeading.fieldName = "TOTAL";
            headers.Add(aHeading);
        }
        public PreAuditReport(string title)
            : base(title, "", "Total Inventory Counted", Common.Libraries.Utility.Shared.PdfLauncher.Instance)
        {
            base.reportType     = "Audit";
            base.showReportDate = false;

            heading aHeading = new heading()
            {
                align        = Element.ALIGN_LEFT,
                width        = 70f,
                format       = "{0}",
                showTotal    = false,
                field_align  = -1,
                header_align = -1,
                Translator   = null
            };

            aHeading.text      = "Category #";
            aHeading.fieldName = "CAT_CODE";
            headers.Add(aHeading);

            aHeading.text      = "Category Name";
            aHeading.fieldName = "CAT_DESC";
            aHeading.width     = 250f;
            headers.Add(aHeading);

            aHeading.text         = "Qty";
            aHeading.fieldName    = "QTY";
            aHeading.width        = 30f;
            aHeading.format       = "{0:g}";
            aHeading.showTotal    = true;
            aHeading.field_align  = Element.ALIGN_RIGHT;
            aHeading.header_align = Element.ALIGN_CENTER;
            headers.Add(aHeading);

            aHeading.text      = "Cost";
            aHeading.width     = 70f;
            aHeading.format    = "{0:n}";
            aHeading.fieldName = "COST";

            headers.Add(aHeading);
        }
Exemple #11
0
        public CACCSalesReport(IPdfLauncher pdfLauncher)
            : base("CACC Sales Analysis",
                   "NOTE:  The figures for SALES only includes actual sales.  It does not include reductions of inventory for Transfers-Out, Police Seizures, etc..", "", pdfLauncher)
        {
            showReportDate = false;
            heading aHeading = new heading()
            {
                align        = Element.ALIGN_LEFT,
                width        = 114f,
                format       = "{0}",
                showTotal    = false,
                field_align  = -1,
                header_align = -1,
                Translator   = null
            };

            aHeading.text      = "CACC Type";
            aHeading.fieldName = "CAT_DESC";
            headers.Add(aHeading);

            aHeading.text      = "Beginning\nInventory";
            aHeading.fieldName = "START_INVENTORY";
            aHeading.width     = 38f;
            aHeading.align     = Element.ALIGN_CENTER;
            headers.Add(aHeading);

            aHeading.text      = "Quantity\nSold";
            aHeading.fieldName = "NR_SOLD";
            aHeading.width     = 32f;
            headers.Add(aHeading);

            aHeading.text      = "Average\nCost";
            aHeading.fieldName = "AVG_COST";
            aHeading.align     = Element.ALIGN_RIGHT;
            aHeading.format    = "{0:0.00}";
            headers.Add(aHeading);

            aHeading.text      = "Average\nRetail";
            aHeading.fieldName = "AVG_RETAIL";
            headers.Add(aHeading);

            aHeading.text      = "Gross\nProfit %";
            aHeading.fieldName = "GROSS_PROFIT";
            aHeading.align     = Element.ALIGN_CENTER;
            aHeading.format    = "{0:0.0}";
            headers.Add(aHeading);

            aHeading.text      = "Quantity\nAdded";
            aHeading.fieldName = "QTY_ADDED";
            aHeading.format    = "{0}";
            aHeading.width     = 34f;
            headers.Add(aHeading);

            aHeading.text      = "Charge\nOff";
            aHeading.fieldName = "CHARGE_OFF";
            aHeading.width     = 32f;
            headers.Add(aHeading);

            aHeading.text      = "Charge\nOn";
            aHeading.fieldName = "CHARGE_ON";
            aHeading.width     = 32f;
            headers.Add(aHeading);

            aHeading.text      = "Ending\nInventory";
            aHeading.fieldName = "END_INVENTORY";
            aHeading.width     = 36f;
            headers.Add(aHeading);

            aHeading.text      = "End Inv\nAvg Cost";
            aHeading.fieldName = "END_INV_COST";
            aHeading.align     = Element.ALIGN_RIGHT;
            aHeading.format    = "{0:0.00}";
            headers.Add(aHeading);

            aHeading.text      = "Turns";
            aHeading.fieldName = "TURNS";
            aHeading.width     = 38f;
            aHeading.align     = Element.ALIGN_RIGHT;
            aHeading.format    = "{0}";
            headers.Add(aHeading);
        }
        public PartialPaymentListingReport(IPdfLauncher pdfLauncher)
            : base("Partial Payments Listing",
                   " ", " ", pdfLauncher)
        {
            reportType = "Inquiry";

            reportPageSize = PageSize.LETTER.Rotate();

            showReportDate = false;
            heading aHeading = new heading()
            {
                align        = Element.ALIGN_CENTER,
                width        = 50f,
                format       = "{0}",
                showTotal    = false,
                field_align  = -1,
                header_align = -1,
                Translator   = null
            };

            aHeading.text      = "Loan #";
            aHeading.fieldName = "TICKET_NUMBER";
            headers.Add(aHeading);

            aHeading.text      = "Loan Date Made";
            aHeading.fieldName = "DATE_MADE";
            aHeading.format    = "{0:d}";
            headers.Add(aHeading);

            aHeading.width     = 110f;
            aHeading.text      = "Customer Name";
            aHeading.fieldName = "cust_name";
            aHeading.format    = "{0}";
            headers.Add(aHeading);

            aHeading.width     = 60f;
            aHeading.text      = "Date Of Birth";
            aHeading.fieldName = "birthdate";
            aHeading.format    = "{0:d}";
            //aHeading.align = Element.ALIGN_RIGHT;
            headers.Add(aHeading);

            aHeading.text      = "Loan Amount";
            aHeading.fieldName = "LOAN_AMOUNT";
            aHeading.format    = "{0:C2}";
            headers.Add(aHeading);

            aHeading.text      = "New Principal Amount";
            aHeading.fieldName = "CURRENT_PRIN_AMOUNT";
            aHeading.format    = "{0:C2}";
            headers.Add(aHeading);

            aHeading.width     = 80f;
            aHeading.text      = "Partial Payment Date Paid";
            aHeading.fieldName = "PP_DATE";
            aHeading.format    = "{0:d}";
            headers.Add(aHeading);

            aHeading.width     = 60f;
            aHeading.text      = "Partial Payment Amount";
            aHeading.fieldName = "PP_AMOUNT";
            aHeading.format    = "{0:C2}";
            headers.Add(aHeading);

            aHeading.text      = "Partial Payment Status";
            aHeading.fieldName = "status_cd";
            aHeading.format    = "{0}";
            headers.Add(aHeading);
        }
Exemple #13
0
        public DailySalesReport(IPdfLauncher pdfLauncher)
            : base("Daily Sales Report", "", "Totals:", pdfLauncher)
        {
            // TODO: add sales header for criteria, and gross profit to totals; total format??
            //

            showReportDate = false;
            reportPageSize = PageSize.LEGAL.Rotate();

            GroupByFooterTitle = "Total for User ID: {0}";
            showGroupCount     = false;

            heading aHeading = new heading()
            {
                align        = Element.ALIGN_LEFT,
                width        = 30f,
                format       = "{0}",
                showTotal    = false,
                field_align  = Element.ALIGN_CENTER,
                header_align = Element.ALIGN_CENTER,
                Translator   = null
            };

            aHeading.text      = "User ID";
            aHeading.fieldName = "USERID";
            aHeading.groupBy   = true;
            headers.Add(aHeading);

            aHeading.text        = "Date";
            aHeading.fieldName   = "REF_DATE";
            aHeading.width       = 50f;
            aHeading.groupBy     = false;
            aHeading.field_align = Element.ALIGN_RIGHT;
            headers.Add(aHeading);

            aHeading.text      = "PFI Date";
            aHeading.fieldName = "PFI_DATE";
            headers.Add(aHeading);

            aHeading.text        = "ICN";
            aHeading.fieldName   = "ICN";
            aHeading.field_align = Element.ALIGN_CENTER;
            aHeading.width       = 100f;
            headers.Add(aHeading);

            aHeading.text        = "Merchandise Description";
            aHeading.fieldName   = "MD_DESC";
            aHeading.field_align = Element.ALIGN_LEFT;
            aHeading.align       = Element.ALIGN_LEFT;
            aHeading.width       = 370f;
            headers.Add(aHeading);


            aHeading.text        = "Type";
            aHeading.fieldName   = "DISP_TYPE";
            aHeading.align       = Element.ALIGN_CENTER;
            aHeading.field_align = Element.ALIGN_CENTER;
            aHeading.width       = 40f;
            headers.Add(aHeading);

            aHeading.text      = "Transaction\nNumber";
            aHeading.fieldName = "DISP_DOC";
            aHeading.width     = 45f;
            headers.Add(aHeading);

            aHeading.text        = "Cost";
            aHeading.fieldName   = "ITEM_AMT";
            aHeading.align       = Element.ALIGN_CENTER;
            aHeading.field_align = Element.ALIGN_RIGHT;
            aHeading.width       = 40f;
            aHeading.format      = "{0:F2}";
            aHeading.showTotal   = true;
            headers.Add(aHeading);

            aHeading.text      = "Retail\nAmount";
            aHeading.fieldName = "ORIGINAL_PRICE";
            headers.Add(aHeading);

            aHeading.text      = "Sale\nAmount";
            aHeading.fieldName = "SOLD_FOR_PRICE";
            headers.Add(aHeading);

            aHeading.text      = "Absolute Total $ Variance";
            aHeading.fieldName = "VARNC";
            aHeading.align     = Element.ALIGN_RIGHT;
            headers.Add(aHeading);

            aHeading.text      = "R/S % Variance";
            aHeading.fieldName = "VARNC_PCT";
            aHeading.format    = "{0:F0} %";
            headers.Add(aHeading);
        }
Exemple #14
0
        protected override void printGroupFooter(PdfPTable table, string lastGroup, int group_count)
        {
            string groupFooter;

            if (showGroupCount)
            {
                groupFooter = String.Format(GroupByFooterTitle + "\t{1}", lastGroup, group_count);
            }
            else
            {
                groupFooter = String.Format(GroupByFooterTitle, lastGroup);
            }


            PdfPCell cell = new PdfPCell(new Phrase(groupFooter, _reportFont));

            cell.Border        = Rectangle.TOP_BORDER;
            cell.Colspan       = 2;
            cell.PaddingBottom = 13f;
            table.AddCell(cell);

            cell               = new PdfPCell();
            cell.Border        = Rectangle.TOP_BORDER;
            cell.Colspan       = 2;
            cell.PaddingBottom = 13f;
            table.AddCell(cell);

            decimal costAmt   = headers[7].groupTotal;
            decimal retailAmt = headers[8].groupTotal;
            decimal saleAmt   = headers[9].groupTotal;

            cell                     = new PdfPCell(new Phrase(string.Format("Gross Profit: {0:p0}", (saleAmt - costAmt) / saleAmt), _reportFont));
            cell.Border              = Rectangle.TOP_BORDER;
            cell.Colspan             = 3;
            cell.HorizontalAlignment = Rectangle.ALIGN_LEFT;
            cell.PaddingLeft         = -20f;
            cell.PaddingBottom       = 13f;
            table.AddCell(cell);



            decimal variance = 0;

            for (int i = 1; i < headers.Count; i++)
            {
                heading h = headers[i];

                string value = String.Empty;

                if (h.fieldName.Equals("VARNC_PCT"))
                {
                    h.groupTotal = 0;
                    break;
                }

                if (h.fieldName.Equals("VARNC"))
                {
                    variance = h.groupTotal;
                }

                if (h.showTotal)
                {
                    value        = String.Format(h.format, h.groupTotal);
                    h.groupTotal = 0;

                    headers[i] = h;

                    cell = new PdfPCell(new Phrase(value, _reportFont));
                    cell.HorizontalAlignment = h.field_align;
                    cell.Border        = Rectangle.TOP_BORDER;
                    cell.PaddingBottom = 13f;

                    table.AddCell(cell);
                }
            }


            decimal varncPct = 1;

            if (retailAmt != 0)
            {
                varncPct = Math.Abs(retailAmt - saleAmt) / retailAmt;

                // if we want to use an absolute amount, then use the following formula instead
                //varncPct = variance / retailAmt;
            }
            cell = new PdfPCell(new Phrase(string.Format("{0:p0}", varncPct), _reportFont));
            cell.HorizontalAlignment = Rectangle.ALIGN_RIGHT;
            cell.Border        = Rectangle.TOP_BORDER;
            cell.PaddingBottom = 13f;

            table.AddCell(cell);
        }
Exemple #15
0
        public bool CreateReport(DataTable rows)
        {
            bool isSuccessful = false;

            if (rows == null)
            {
                reportObject.ReportError      = ReportConstants.NODATA;
                reportObject.ReportErrorLevel = (int)LogLevel.INFO;
                return(false);
            }

            iTextSharp.text.Document document = new iTextSharp.text.Document(_pageSize);

            try
            {
                //set up RunReport event overrides & create doc
                string reportFileName = Path.GetFullPath(reportObject.ReportTempFileFullName);
                if (!Directory.Exists(Path.GetDirectoryName(reportFileName)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(reportFileName));
                }
                PdfWriter    writer   = PdfWriter.GetInstance(document, new FileStream(reportFileName, FileMode.Create));
                MyPageEvents eventMgr = new MyPageEvents
                {
                    footer     = _footer,
                    disclaimer = _disclaimer
                };
                writer.PageEvent = eventMgr;

                PdfPTable table = new PdfPTable(headers.Count);
                Image     gif   = Image.GetInstance(Common.Properties.Resources.logo, BaseColor.WHITE);
                gif.ScalePercent(35);

                _reportFont = FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL);

                document.AddTitle(reportObject.ReportTitle);

                document.SetPageSize(_pageSize);
                document.SetMargins(-50, -50, 10, 45);

                PrintReportHeader(table, gif);

                // Print Headings
                columnWidths = new float[headers.Count];
                for (int i = 0; i < headers.Count; i++)
                {
                    columnWidths[i] = headers[i].width;
                }

                table.SetWidthPercentage(columnWidths, _pageSize);


                foreach (heading h in headers)
                {
                    int      alignment = (h.header_align >= 0) ? h.header_align : h.align;
                    PdfPCell cell      = new PdfPCell(new Paragraph(h.text, _reportFont))
                    {
                        Border = Rectangle.BOTTOM_BORDER,
                        HorizontalAlignment = alignment,
                        VerticalAlignment   = Element.ALIGN_TOP,
                    };
                    table.AddCell(cell);
                }

                table.HeaderRows = table.Rows.Count;



                int    group_count     = 0; // only used if report has a groupByTitle & groupBy Fields
                string lastGroup       = "";
                string nxtGroup        = "";
                bool   breakGroup      = false;
                int    nrGroupByFields = 0;


                // Print Report Details
                for (int rowIter = 0; rowIter < rows.Rows.Count; rowIter++)
                {
                    DataRow row = rows.Rows[rowIter];

                    for (int i = 0; i < headers.Count; i++)
                    {
                        heading h = headers[i];

                        int alignment = (h.field_align >= 0) ? h.field_align : h.align;

                        if (!rows.Columns.Contains(h.fieldName))
                        {
                            reportObject.ReportError = "Application Field (" + h.fieldName +
                                                       ") not in the returned data.";
                            reportObject.ReportErrorLevel = (int)LogLevel.FATAL;
                            throw new Exception("FieldConfig");
                        }

                        string value = "";

                        if (h.Translator != null)
                        {
                            value = h.Translator(row[h.fieldName]);
                        }
                        else
                        {
                            value = String.Format(h.format, row[h.fieldName]);
                        }

                        PdfPCell cell = new PdfPCell(new Phrase(value, _reportFont));

                        if (h.formatICN)
                        {
                            cell = this.GetFormattedICNCell(value);
                        }

                        cell.HorizontalAlignment = alignment;
                        cell.Border = Rectangle.NO_BORDER;

                        table.AddCell(cell);


                        if (h.groupBy)
                        {
                            group_count++;

                            if (lastGroup.Length == 0)
                            {
                                nrGroupByFields++;
                                lastGroup = row[h.fieldName].ToString();
                            }

                            if (rowIter + 1 < rows.Rows.Count &&
                                !lastGroup.Equals(rows.Rows[rowIter + 1][h.fieldName].ToString()))
                            {
                                breakGroup = true;
                                nxtGroup   = rows.Rows[rowIter + 1][h.fieldName].ToString();
                            }
                        }


                        if (h.showTotal)
                        {
                            decimal ttl      = 0;
                            bool    didParse = decimal.TryParse(row[h.fieldName].ToString(), out ttl);
                            if (didParse)
                            {
                                h.total      += ttl;
                                h.groupTotal += ttl;

                                headers[i] = h;

                                if (rowIter == 0)
                                {
                                    nrTotalFields++;
                                }
                            }
                        }
                    }


                    if (breakGroup)
                    {
                        printGroupFooter(table, lastGroup, group_count);
                        group_count = 0;

                        lastGroup  = nxtGroup;
                        breakGroup = false;
                    }
                }

                if (!string.IsNullOrEmpty(GroupByFooterTitle) && nrGroupByFields > 0)
                {
                    printGroupFooter(table, lastGroup, group_count);
                }


                if (!String.IsNullOrEmpty(_totalLabel))
                {
                    PrintReportFooter(table);
                }

                table.AddCell(new PdfPCell {
                    Colspan = headers.Count, Border = Rectangle.NO_BORDER
                });
                new RunReport().ReportLines(table, true, "", true, _reportFont); // End of Report message

                document.Open();
                document.Add(table);
                document.Close();


                isSuccessful = true;
            }
            catch (DocumentException de)
            {
                reportObject.ReportError      = de.Message;
                reportObject.ReportErrorLevel = (int)LogLevel.ERROR;
            }
            catch (IOException ioe)
            {
                reportObject.ReportError      = ioe.Message;
                reportObject.ReportErrorLevel = (int)LogLevel.ERROR;
            }
            catch (Exception e)
            {
                reportObject.ReportError      = e.Message;
                reportObject.ReportErrorLevel = (int)LogLevel.ERROR;
            }

            return(isSuccessful);
        }