public byte[] GenerateReport(LoanOffer loanOffer, bool isExcel, bool isShowDetails, string header)
        {
            var worksheet = _workbook.Worksheets[_workbook.Worksheets.ActiveSheetIndex];

            worksheet.Name = "Loan Offer";

            int row    = 6;
            int column = 1;

            _workbook.ChangePalette(Color.FromArgb(197, 197, 197), 55);
            _workbook.ChangePalette(Color.FromArgb(221, 221, 221), 54);
            _workbook.ChangePalette(Color.FromArgb(123, 178, 36), 53);

            HeaderReportGenerator.CreateHeader(worksheet, header, column - 1, column, 7);

            worksheet.Cells.SetColumnWidth(0, 1);
            worksheet.Cells.SetColumnWidth(1, 16);
            worksheet.Cells.SetColumnWidth(2, 15);

            CreateXlsHeader(worksheet, row, column);
            var i = 0;

            foreach (var item in loanOffer.Schedule)
            {
                row++;
                i++;
                worksheet.Cells[row, column].PutValue(item.Date.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture));
                worksheet.Cells[row, column + 1].PutValue("£" + FormattingUtils.FormatMiddle(item.LoanRepayment));
                worksheet.Cells[row, column + 2].PutValue("£" + FormattingUtils.FormatMiddle(item.Interest));
                worksheet.Cells[row, column + 3].PutValue(FormattingUtils.FormatMiddle(item.InterestRate * 100) + "%");
                var fee = loanOffer.SetupFee > 0 && i == 1 ? loanOffer.SetupFee : 0;
                if (item.Fees > 0)
                {
                    fee += item.Fees;
                }
                var res  = fee != 0 ? "£" + FormattingUtils.FormatMiddle(fee) : "-";
                var res1 = loanOffer.SetupFee > 0 && i == 1 ? "*" : string.Empty;
                worksheet.Cells[row, column + 4].PutValue(res + res1);
                //worksheet.Cells.Merge(row, column + 5, 1, 3);
                worksheet.Cells[row, column + 5].PutValue("£" + FormattingUtils.FormatMiddle(item.AmountDue));
                SetCellStyle(worksheet, row, column, false);
            }

            row = CreateTotalBlock(loanOffer, row, column, worksheet);

            if (loanOffer.Details.IsModified)
            {
                row++;
                worksheet.Cells.Merge(row, column, 1, 7);
                worksheet.Cells[row, column].PutValue("Offer was manually modified");
                worksheet.Cells[row, column].Style.Font.IsBold = true;
            }
            if (isShowDetails)
            {
                CreateDetails(loanOffer.Details, row, column, worksheet);
            }

            return(ConvertFormat(_workbook, isExcel ? FileFormatType.Excel2003 : FileFormatType.Pdf));
        }
        public byte[] GenerateReport(LoanDetails loanDetails, bool isExcell, bool withErrors, string header)
        {
            int       row       = 6;
            const int column    = 1;
            var       worksheet = _workbook.Worksheets[_workbook.Worksheets.ActiveSheetIndex];

            worksheet.Name = "Payment Schedule";
            HeaderReportGenerator.CreateHeader(worksheet, header, column, column, 9);

            CreateXlsHeader(worksheet, row, column, isExcell);

            var filePath = System.Web.HttpContext.Current.Server.MapPath("~/Content/img/payment-to-customer.png");

            foreach (var transaction in loanDetails.PacnetTransactions)
            {
                row++;
                worksheet.Pictures.Add(row, column, filePath, 65, 25);

                worksheet.Cells[row, column + 1].PutValue(transaction.PostDate.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture));
                worksheet.Cells[row, column + 2].PutValue(FormattingUtils.FormatPoundsWidhDash(transaction.Amount));
                worksheet.Cells[row, column + 3].PutValue(FormattingUtils.FormatPoundsWidhDash(transaction.Interest));
                worksheet.Cells[row, column + 4].PutValue(FormattingUtils.FormatPoundsWidhDash(transaction.Fees));
                worksheet.Cells[row, column + 5].PutValue("-");
                worksheet.Cells[row, column + 6].PutValue(FormattingUtils.FormatPoundsWidhDash(transaction.Amount));
                worksheet.Cells[row, column + 7].PutValue(transaction.StatusDescription);
                worksheet.Cells[row, column + 8].PutValue(transaction.Description);

                SetCellStyle(worksheet, row, column, false, isExcell);
            }
            filePath = System.Web.HttpContext.Current.Server.MapPath("~/Content/img/wizard-mark-completed.png");
            foreach (var transaction in loanDetails.Transactions)
            {
                if (!withErrors && transaction.Status != "Done")
                {
                    continue;
                }

                row++;
                worksheet.Pictures.Add(row, column, filePath, 102, 30);

                worksheet.Cells[row, column + 1].PutValue(transaction.PostDate.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture));
                worksheet.Cells[row, column + 2].PutValue(FormattingUtils.FormatPoundsWidhDash(transaction.LoanRepayment));
                worksheet.Cells[row, column + 3].PutValue(FormattingUtils.FormatPoundsWidhDash(transaction.Interest));
                worksheet.Cells[row, column + 4].PutValue(FormattingUtils.FormatPoundsWidhDash(transaction.Fees + transaction.Rollover));
                worksheet.Cells[row, column + 5].PutValue("-");
                worksheet.Cells[row, column + 6].PutValue(FormattingUtils.FormatPoundsWidhDash(transaction.Amount));
                worksheet.Cells[row, column + 7].PutValue(transaction.StatusDescription);
                worksheet.Cells[row, column + 8].PutValue(transaction.Description);

                SetCellStyle(worksheet, row, column, false, isExcell);
            }
            filePath = System.Web.HttpContext.Current.Server.MapPath("~/Content/img/two_arrows.png");
            foreach (var transaction in loanDetails.Rollovers)
            {
                row++;
                worksheet.Pictures.Add(row, column, filePath, 130, 50);
                worksheet.Cells[row, column + 1].PutValue(transaction.ExpiryDate);
                worksheet.Cells[row, column + 2].PutValue("-");
                worksheet.Cells[row, column + 3].PutValue("-");
                worksheet.Cells[row, column + 4].PutValue(FormattingUtils.FormatPoundsWidhDash(transaction.Payment));
                worksheet.Cells[row, column + 5].PutValue("-");
                worksheet.Cells[row, column + 6].PutValue("-");
                worksheet.Cells[row, column + 7].PutValue("Roll over");
                worksheet.Cells[row, column + 8].PutValue("");

                SetCellStyle(worksheet, row, column, false, isExcell);
            }

            foreach (var transaction in loanDetails.Charges.Where(transaction => transaction.State != "Paid"))
            {
                row++;
                worksheet.Pictures.Add(row, column, filePath, 130, 50);
                worksheet.Cells[row, column + 1].PutValue(transaction.Date.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture));
                worksheet.Cells[row, column + 2].PutValue("-");
                worksheet.Cells[row, column + 3].PutValue("-");
                worksheet.Cells[row, column + 4].PutValue(FormattingUtils.FormatPoundsWidhDash(transaction.Amount));
                worksheet.Cells[row, column + 5].PutValue("-");
                worksheet.Cells[row, column + 6].PutValue("-");
                worksheet.Cells[row, column + 7].PutValue(transaction.State);
                worksheet.Cells[row, column + 8].PutValue(transaction.Description);

                SetCellStyle(worksheet, row, column, false, isExcell);
            }

            filePath = System.Web.HttpContext.Current.Server.MapPath("~/Content/img/calendarx32.png");
            foreach (var transaction in loanDetails.Schedule.Where(transaction => (transaction.Status != "PaidEarly") && (transaction.Status != "PaidOnTime") && (transaction.Status != "Paid")))
            {
                row++;
                worksheet.Pictures.Add(row, column, filePath, 120, 45);

                worksheet.Cells[row, column + 1].PutValue(transaction.Date.ToString("dd/MM/yyyy",
                                                                                    CultureInfo.InvariantCulture));
                worksheet.Cells[row, column + 2].PutValue(FormattingUtils.FormatPoundsWidhDash(transaction.LoanRepayment));
                worksheet.Cells[row, column + 3].PutValue(FormattingUtils.FormatPoundsWidhDash(transaction.Interest));
                worksheet.Cells[row, column + 4].PutValue(FormattingUtils.FormatPoundsWidhDash(transaction.LateCharges));
                worksheet.Cells[row, column + 5].PutValue("-");
                worksheet.Cells[row, column + 6].PutValue(FormattingUtils.FormatPoundsWidhDash(transaction.AmountDue));
                worksheet.Cells[row, column + 7].PutValue(transaction.StatusDescription);
                worksheet.Cells[row, column + 8].PutValue("");

                SetCellStyle(worksheet, row, column, false, isExcell);
            }

            worksheet.Cells.SetColumnWidth(column - 1, 1);
            worksheet.Cells.SetColumnWidth(column, 6);
            worksheet.Cells.SetColumnWidth(column + 1, 16);
            for (var item = 3; item < 10; ++item)
            {
                worksheet.AutoFitColumn(item);
            }

            return(ConvertFormat(_workbook, isExcell ? FileFormatType.Excel2003 : FileFormatType.Pdf));
        }