mrr-r wrote:
How to do it for nop 4.50?
protected virtual async Task PrintProductsAsync(int vendorId, Language lang, Font titleFont, Document doc, Order order, Font font, Font attributesFont)
{
var productsHeader = new PdfPTable(1)
{
RunDirection = GetDirection(lang),
WidthPercentage = 100f
};
var cellProducts = await GetPdfCellAsync("PDFInvoice.Product(s)", lang, titleFont);
cellProducts.Border = Rectangle.NO_BORDER;
productsHeader.AddCell(cellProducts);
doc.Add(productsHeader);
doc.Add(new Paragraph(" "));
//a vendor should have access only to products
var orderItems = await _orderService.GetOrderItemsAsync(order.Id, vendorId: vendorId);
var count = 5 + (_catalogSettings.ShowSkuOnProductDetailsPage ? 1 : 0) + (_vendorSettings.ShowVendorOnOrderDetailsPage ? 1 : 0);
var productsTable = new PdfPTable(count)
{
RunDirection = GetDirection(lang),
WidthPercentage = 100f
};
var widths = new Dictionary<int, int[]>
{
{ 5, new[] { 20, 40, 15, 10, 15 } },
{ 6, new[] { 20, 35, 15, 10, 10, 10 } },
{ 7, new[] { 20, 30, 10, 10, 10, 10, 10 } }
}; productsTable.SetWidths(lang.Rtl ? widths[count].Reverse().ToArray() : widths[count]);
//product image
var cellProductItemPicture = await GetPdfCellAsync("PDFInvoice.ProductImage", lang, font);
cellProductItemPicture.BackgroundColor = BaseColor.LightGray;
cellProductItemPicture.HorizontalAlignment = Element.ALIGN_CENTER;
productsTable.AddCell(cellProductItemPicture); //product name
var cellProductItem = await GetPdfCellAsync("PDFInvoice.ProductName", lang, font);
cellProductItem.BackgroundColor = BaseColor.LightGray;
cellProductItem.HorizontalAlignment = Element.ALIGN_CENTER;
productsTable.AddCell(cellProductItem);
//SKU
if (_catalogSettings.ShowSkuOnProductDetailsPage)
{
cellProductItem = await GetPdfCellAsync("PDFInvoice.SKU", lang, font);
cellProductItem.BackgroundColor = BaseColor.LightGray;
cellProductItem.HorizontalAlignment = Element.ALIGN_CENTER;
productsTable.AddCell(cellProductItem);
}
//Vendor name
if (_vendorSettings.ShowVendorOnOrderDetailsPage)
{
cellProductItem = await GetPdfCellAsync("PDFInvoice.VendorName", lang, font);
cellProductItem.BackgroundColor = BaseColor.LightGray;
cellProductItem.HorizontalAlignment = Element.ALIGN_CENTER;
productsTable.AddCell(cellProductItem);
}
//price
cellProductItem = await GetPdfCellAsync("PDFInvoice.ProductPrice", lang, font);
cellProductItem.BackgroundColor = BaseColor.LightGray;
cellProductItem.HorizontalAlignment = Element.ALIGN_CENTER;
productsTable.AddCell(cellProductItem);
//qty
cellProductItem = await GetPdfCellAsync("PDFInvoice.ProductQuantity", lang, font);
cellProductItem.BackgroundColor = BaseColor.LightGray;
cellProductItem.HorizontalAlignment = Element.ALIGN_CENTER;
productsTable.AddCell(cellProductItem);
//total
cellProductItem = await GetPdfCellAsync("PDFInvoice.ProductTotal", lang, font);
cellProductItem.BackgroundColor = BaseColor.LightGray;
cellProductItem.HorizontalAlignment = Element.ALIGN_CENTER;
productsTable.AddCell(cellProductItem);
var vendors = _vendorSettings.ShowVendorOnOrderDetailsPage ? await _vendorService.GetVendorsByProductIdsAsync(orderItems.Select(item => item.ProductId).ToArray()) : new List<Vendor>();
foreach (var orderItem in orderItems)
{
var product = await _productService.GetProductByIdAsync(orderItem.ProductId);
var pAttribTable = new PdfPTable(1) { RunDirection = GetDirection(lang) };
pAttribTable.DefaultCell.Border = Rectangle.NO_BORDER;
//product image
var orderItemPicture = await _pictureService.GetProductPictureAsync(product, orderItem.AttributesXml);
var picturePath = await _pictureService.GetThumbLocalPathAsync(orderItemPicture, 150, true);
var picture = Image.GetInstance(picturePath);
picture.Alignment = Element.ALIGN_CENTER;
picture.ScaleToFit(100f, 100f);
var cellpicture = new PdfPCell { Border = Rectangle.BOTTOM_BORDER };
cellpicture.AddElement(picture);
productsTable.AddCell(cellpicture); //product name
var name = await _localizationService.GetLocalizedAsync(product, x => x.Name, lang.Id);
pAttribTable.AddCell(new Paragraph(name, font));
cellProductItem.AddElement(new Paragraph(name, font));
//attributes
if (!string.IsNullOrEmpty(orderItem.AttributeDescription))
{
var attributesParagraph =
new Paragraph(_htmlFormatter.ConvertHtmlToPlainText(orderItem.AttributeDescription, true, true),
attributesFont);
pAttribTable.AddCell(attributesParagraph);
}
//rental info
if (product.IsRental)
{
var rentalStartDate = orderItem.RentalStartDateUtc.HasValue
? _productService.FormatRentalDate(product, orderItem.RentalStartDateUtc.Value)
: string.Empty;
var rentalEndDate = orderItem.RentalEndDateUtc.HasValue
? _productService.FormatRentalDate(product, orderItem.RentalEndDateUtc.Value)
: string.Empty;
var rentalInfo = string.Format(await _localizationService.GetResourceAsync("Order.Rental.FormattedDate"),
rentalStartDate, rentalEndDate);
var rentalInfoParagraph = new Paragraph(rentalInfo, attributesFont);
pAttribTable.AddCell(rentalInfoParagraph);
}
productsTable.AddCell(pAttribTable);
//SKU
if (_catalogSettings.ShowSkuOnProductDetailsPage)
{
var sku = await _productService.FormatSkuAsync(product, orderItem.AttributesXml);
cellProductItem = GetPdfCell(sku ?? string.Empty, font);
cellProductItem.HorizontalAlignment = Element.ALIGN_CENTER;
productsTable.AddCell(cellProductItem);
}
//Vendor name
if (_vendorSettings.ShowVendorOnOrderDetailsPage)
{
var vendorName = vendors.FirstOrDefault(v => v.Id == product.VendorId)?.Name ?? string.Empty;
cellProductItem = GetPdfCell(vendorName, font);
cellProductItem.HorizontalAlignment = Element.ALIGN_CENTER;
productsTable.AddCell(cellProductItem);
}
//price
string unitPrice;
if (order.CustomerTaxDisplayType == TaxDisplayType.IncludingTax)
{
//including tax
var unitPriceInclTaxInCustomerCurrency =
_currencyService.ConvertCurrency(orderItem.UnitPriceInclTax, order.CurrencyRate);
unitPrice = await _priceFormatter.FormatPriceAsync(unitPriceInclTaxInCustomerCurrency, true,
order.CustomerCurrencyCode, lang.Id, true);
}
else
{
//excluding tax
var unitPriceExclTaxInCustomerCurrency =
_currencyService.ConvertCurrency(orderItem.UnitPriceExclTax, order.CurrencyRate);
unitPrice = await _priceFormatter.FormatPriceAsync(unitPriceExclTaxInCustomerCurrency, true,
order.CustomerCurrencyCode, lang.Id, false);
}
cellProductItem = GetPdfCell(unitPrice, font);
cellProductItem.HorizontalAlignment = Element.ALIGN_LEFT;
productsTable.AddCell(cellProductItem);
//qty
cellProductItem = GetPdfCell(orderItem.Quantity, font);
cellProductItem.HorizontalAlignment = Element.ALIGN_LEFT;
productsTable.AddCell(cellProductItem);
//total
string subTotal;
if (order.CustomerTaxDisplayType == TaxDisplayType.IncludingTax)
{
//including tax
var priceInclTaxInCustomerCurrency =
_currencyService.ConvertCurrency(orderItem.PriceInclTax, order.CurrencyRate);
subTotal = await _priceFormatter.FormatPriceAsync(priceInclTaxInCustomerCurrency, true, order.CustomerCurrencyCode,
lang.Id, true);
}
else
{
//excluding tax
var priceExclTaxInCustomerCurrency =
_currencyService.ConvertCurrency(orderItem.PriceExclTax, order.CurrencyRate);
subTotal = await _priceFormatter.FormatPriceAsync(priceExclTaxInCustomerCurrency, true, order.CustomerCurrencyCode,
lang.Id, false);
}
cellProductItem = GetPdfCell(subTotal, font);
cellProductItem.HorizontalAlignment = Element.ALIGN_LEFT;
productsTable.AddCell(cellProductItem);
}
doc.Add(productsTable);
}