public void GeneratePdf(string invoiceNumber, Stream pdfStream)
        {
            string           name;
            GetInvoiceResult invoice = this.InvoiceService.GetInvoice(new GetInvoiceParameter(invoiceNumber)
            {
                GetInvoiceLines = true
            });
            InvoiceModel invoiceModel = this.GetInvoiceMapper.MapResult(invoice, null);
            Theme        theme        = base.UnitOfWork.GetRepository <Theme>().Get(SiteContext.Current.WebsiteDto.ThemeId);

            if (theme.ThemeSource == null)
            {
                name = (theme.IsSystemTheme ? "System" : "User");
            }
            else
            {
                name = theme.ThemeSource.Name;
            }
            string          str    = string.Format("~/frontendresources/{0}/{1}/pdfviews/invoicedetails.cshtml", name, theme.Name);
            ThemeContentDto byPath = this.ThemeContentProvider.GetByPath(str);

            if (invoiceModel.InvoiceNumber.Contains("-"))
            {
                string[] invoiceNumberArray = invoiceModel.InvoiceNumber.Split('-');
                if (invoiceNumberArray.Length > 0)
                {
                    invoiceModel.InvoiceNumber = invoiceNumberArray[0];
                }
            }
            dynamic  expando     = invoiceModel.ToJson(false).ToExpando();
            DateTime invoiceDate = invoiceModel.InvoiceDate;

            expando.InvoiceDateDisplay = invoiceDate.ToShortDateString();
            invoiceDate            = invoiceModel.DueDate;
            expando.DueDateDisplay = invoiceDate.ToShortDateString();
            decimal invoiceTotal = invoiceModel.InvoiceTotal - invoiceModel.CurrentBalance;

            expando.PaymentTotalDisplay = invoiceTotal.ToString("0.00");

            foreach (dynamic obj in (IEnumerable)expando.InvoiceLines)
            {
                obj.QtyInvoicedDisplay = obj.QtyInvoiced.ToString("0");
            }

            //Display Company logo based on website
            CustomSettings customSettings = new CustomSettings();

            expando.CompanyIdentifier = customSettings.CompanyNameIdentifier;

            PdfGeneratorHelper.GeneratePdf(this.EmailTemplateRenderer.Render(byPath.Content, expando), pdfStream);
        }
        public override InvoiceModel MapResult(GetInvoiceResult serviceResult, HttpRequestMessage request)
        {
            InvoiceHistory invoiceHistory = serviceResult.InvoiceHistory;
            Currency       currency       = serviceResult.Currency;
            InvoiceModel   invoiceModel   = ObjectToObjectMapper.Map <InvoiceHistory, InvoiceModel>(invoiceHistory);

            invoiceModel.DiscountAmountDisplay      = CurrencyFormatProvider.GetString(invoiceModel.DiscountAmount, currency);
            invoiceModel.CurrentBalanceDisplay      = CurrencyFormatProvider.GetString(invoiceModel.CurrentBalance, currency);
            invoiceModel.InvoiceTotalDisplay        = CurrencyFormatProvider.GetString(invoiceModel.InvoiceTotal, currency);
            invoiceModel.OtherChargesDisplay        = CurrencyFormatProvider.GetString(invoiceModel.OtherCharges, currency);
            invoiceModel.ProductTotalDisplay        = CurrencyFormatProvider.GetString(invoiceModel.ProductTotal, currency);
            invoiceModel.ShippingAndHandlingDisplay = CurrencyFormatProvider.GetString(invoiceModel.ShippingAndHandling, currency);
            invoiceModel.TaxAmountDisplay           = CurrencyFormatProvider.GetString(invoiceModel.TaxAmount, currency);
            invoiceModel.ShipViaDescription         = serviceResult.ShipViaDescription;
            invoiceModel.Properties = serviceResult.Properties;
            invoiceModel.Uri        = request == null ? string.Empty : UrlHelper.Link("InvoiceV1", new
            {
                invoiceid = invoiceModel.InvoiceNumber
            }, request);
            HandlerBase.CopyCustomPropertiesToResult(invoiceHistory, invoiceModel, null);
            foreach (GetInvoiceLineResult invoiceLineResult in serviceResult.GetInvoiceLineResults)
            {
                InvoiceLineModel destination = new InvoiceLineModel();
                if (invoiceLineResult.ProductDto != null)
                {
                    ObjectToObjectMapper.Map(invoiceLineResult.ProductDto, destination);
                    destination.ProductUri = invoiceLineResult.ProductDto.ProductDetailUrl;
                    destination.Properties.Add("ProductID", invoiceLineResult.ProductDto.Id.ToString());
                }
                ObjectToObjectMapper.Map(invoiceLineResult.InvoiceHistoryLine, destination);
                destination.UnitPriceDisplay      = CurrencyFormatProvider.GetString(destination.UnitPrice, currency);
                destination.DiscountAmountDisplay = CurrencyFormatProvider.GetString(destination.DiscountAmount, currency);
                destination.LineTotalDisplay      = CurrencyFormatProvider.GetString(destination.LineTotal, currency);
                HandlerBase.CopyCustomPropertiesToResult(invoiceLineResult.InvoiceHistoryLine, destination, null);
                invoiceModel.InvoiceLines.Add(destination);
            }
            foreach (InvoiceHistoryTaxDto invoiceHistoryTax in invoiceModel.InvoiceHistoryTaxes)
            {
                invoiceHistoryTax.TaxCode          = TranslationLocalizer.TranslateLabel(invoiceHistoryTax.TaxCode);
                invoiceHistoryTax.TaxDescription   = TranslationLocalizer.TranslateLabel(invoiceHistoryTax.TaxDescription);
                invoiceHistoryTax.TaxAmountDisplay = CurrencyFormatProvider.GetString(invoiceHistoryTax.TaxAmount, currency);
            }
            //invoiceModel.InvoiceDate = DateTime.SpecifyKind(invoiceModel.InvoiceDate, DateTimeKind.Unspecified) removed in 4.4;
            return(invoiceModel);
        }