<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Vendor\Module\Model\Order\Pdf\Items\Invoice;
use Magento\GiftMessage\Api\OrderItemRepositoryInterface;
/**
* Sales Order Invoice Pdf default items renderer
*/
class DefaultInvoice extends \Magento\Sales\Model\Order\Pdf\Items\Invoice\DefaultInvoice
{
/**
* Core string
*
* @var \Magento\Framework\Stdlib\StringUtils
*/
protected $string;
protected $orderItemGiftRepo;
private $logger;
/**
* @param \Magento\Framework\Model\Context $context
* @param \Magento\Framework\Registry $registry
* @param \Magento\Tax\Helper\Data $taxData
* @param \Magento\Framework\Filesystem $filesystem
* @param \Magento\Framework\Filter\FilterManager $filterManager
* @param \Magento\Framework\Stdlib\StringUtils $string
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
* @param array $data
*/
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Tax\Helper\Data $taxData,
\Magento\Framework\Filesystem $filesystem,
\Magento\Framework\Filter\FilterManager $filterManager,
\Magento\Framework\Stdlib\StringUtils $string,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
OrderItemRepositoryInterface $orderItemGiftRepo,
\Psr\Log\LoggerInterface $logger,
array $data = []
) {
$this->string = $string;
$this->orderItemGiftRepo = $orderItemGiftRepo;
$this->logger = $logger;
parent::__construct(
$context,
$registry,
$taxData,
$filesystem,
$filterManager,
$string,
$resource,
$resourceCollection,
$data
);
}
/**
* Draw item line
*
* @return void
*/
public function draw()
{
$order = $this->getOrder();
$item = $this->getItem();
$pdf = $this->getPdf();
$page = $this->getPage();
$oriderId = $order->getEntityId();
$itemId = $item->getOrderItemId();
$giftWrap = $this->getGiftMessages($oriderId,$itemId);
$this->logger->info("GiftData".json_encode($giftWrap));
$lines = [];
$giftItem = "<br/>"."<b style='color:red;'>Test Products</b>";
// draw Product name
$lines[0] = [['text' => $this->string->split($item->getName().$giftItem, 35, true, true), 'feed' => 35]];
// draw GiftWrap Message
//$lines[0] = [['text' => $this->string->split("TestProduct", 20, true, true), 'feed' => 20]];
// draw SKU
$lines[0][] = [
'text' => $this->string->split($this->getSku($item), 17),
'feed' => 290,
'align' => 'right',
];
// draw QTY
$lines[0][] = ['text' => $item->getQty() * 1, 'feed' => 435, 'align' => 'right'];
// draw item Prices
$i = 0;
$prices = $this->getItemPricesForDisplay();
$feedPrice = 395;
$feedSubtotal = $feedPrice + 170;
foreach ($prices as $priceData) {
if (isset($priceData['label'])) {
// draw Price label
$lines[$i][] = ['text' => $priceData['label'], 'feed' => $feedPrice, 'align' => 'right'];
// draw Subtotal label
$lines[$i][] = ['text' => $priceData['label'], 'feed' => $feedSubtotal, 'align' => 'right'];
$i++;
}
// draw Price
$lines[$i][] = [
'text' => $priceData['price'],
'feed' => $feedPrice,
'font' => 'bold',
'align' => 'right',
];
// draw Subtotal
$lines[$i][] = [
'text' => $priceData['subtotal'],
'feed' => $feedSubtotal,
'font' => 'bold',
'align' => 'right',
];
$i++;
}
// draw Tax
$lines[0][] = [
'text' => $order->formatPriceTxt($item->getTaxAmount()),
'feed' => 495,
'font' => 'bold',
'align' => 'right',
];
// custom options
$options = $this->getItemOptions();
if ($options) {
foreach ($options as $option) {
// draw options label
$lines[][] = [
'text' => $this->string->split($this->filterManager->stripTags($option['label']), 40, true, true),
'font' => 'italic',
'feed' => 35,
];
// Checking whether option value is not null
if ($option['value'] !== null) {
if (isset($option['print_value'])) {
$printValue = $option['print_value'];
} else {
$printValue = $this->filterManager->stripTags($option['value']);
}
$values = explode(', ', $printValue);
foreach ($values as $value) {
$lines[][] = ['text' => $this->string->split($value, 30, true, true), 'feed' => 40];
}
}
}
}
$lineBlock = ['lines' => $lines, 'height' => 20];
$page = $pdf->drawLineBlocks($page, [$lineBlock], ['table_header' => true]);
$this->setPage($page);
}
public function getGiftMessages($order_id,$itemId) {
$this->logger->info("order_id".$order_id);
$this->logger->info("itemId".$itemId);
$order_id = $order_id;
$giftMessage = array();
try{
$giftItems = !empty($this->orderItemGiftRepo->get($order_id, $itemId)) ? $this->orderItemGiftRepo->get($order_id, $itemId) : null;
if($giftItems):
$giftMessage['message'] = $giftItems->getMessage();
$giftMessage['recipient'] = $giftItems->getRecipient();
$giftMessage['sender'] = $giftItems->getSender();
endif;
} catch (\Exception $e) {
return null;
}
return $giftMessage;
}
}
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Vendor\Module\Model\Order\Pdf\Items\Invoice;
use Magento\GiftMessage\Api\OrderItemRepositoryInterface;
/**
* Sales Order Invoice Pdf default items renderer
*/
class DefaultInvoice extends \Magento\Sales\Model\Order\Pdf\Items\Invoice\DefaultInvoice
{
/**
* Core string
*
* @var \Magento\Framework\Stdlib\StringUtils
*/
protected $string;
protected $orderItemGiftRepo;
private $logger;
/**
* @param \Magento\Framework\Model\Context $context
* @param \Magento\Framework\Registry $registry
* @param \Magento\Tax\Helper\Data $taxData
* @param \Magento\Framework\Filesystem $filesystem
* @param \Magento\Framework\Filter\FilterManager $filterManager
* @param \Magento\Framework\Stdlib\StringUtils $string
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
* @param array $data
*/
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Tax\Helper\Data $taxData,
\Magento\Framework\Filesystem $filesystem,
\Magento\Framework\Filter\FilterManager $filterManager,
\Magento\Framework\Stdlib\StringUtils $string,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
OrderItemRepositoryInterface $orderItemGiftRepo,
\Psr\Log\LoggerInterface $logger,
array $data = []
) {
$this->string = $string;
$this->orderItemGiftRepo = $orderItemGiftRepo;
$this->logger = $logger;
parent::__construct(
$context,
$registry,
$taxData,
$filesystem,
$filterManager,
$string,
$resource,
$resourceCollection,
$data
);
}
/**
* Draw item line
*
* @return void
*/
public function draw()
{
$order = $this->getOrder();
$item = $this->getItem();
$pdf = $this->getPdf();
$page = $this->getPage();
$oriderId = $order->getEntityId();
$itemId = $item->getOrderItemId();
$giftWrap = $this->getGiftMessages($oriderId,$itemId);
$this->logger->info("GiftData".json_encode($giftWrap));
$lines = [];
$giftItem = "<br/>"."<b style='color:red;'>Test Products</b>";
// draw Product name
$lines[0] = [['text' => $this->string->split($item->getName().$giftItem, 35, true, true), 'feed' => 35]];
// draw GiftWrap Message
//$lines[0] = [['text' => $this->string->split("TestProduct", 20, true, true), 'feed' => 20]];
// draw SKU
$lines[0][] = [
'text' => $this->string->split($this->getSku($item), 17),
'feed' => 290,
'align' => 'right',
];
// draw QTY
$lines[0][] = ['text' => $item->getQty() * 1, 'feed' => 435, 'align' => 'right'];
// draw item Prices
$i = 0;
$prices = $this->getItemPricesForDisplay();
$feedPrice = 395;
$feedSubtotal = $feedPrice + 170;
foreach ($prices as $priceData) {
if (isset($priceData['label'])) {
// draw Price label
$lines[$i][] = ['text' => $priceData['label'], 'feed' => $feedPrice, 'align' => 'right'];
// draw Subtotal label
$lines[$i][] = ['text' => $priceData['label'], 'feed' => $feedSubtotal, 'align' => 'right'];
$i++;
}
// draw Price
$lines[$i][] = [
'text' => $priceData['price'],
'feed' => $feedPrice,
'font' => 'bold',
'align' => 'right',
];
// draw Subtotal
$lines[$i][] = [
'text' => $priceData['subtotal'],
'feed' => $feedSubtotal,
'font' => 'bold',
'align' => 'right',
];
$i++;
}
// draw Tax
$lines[0][] = [
'text' => $order->formatPriceTxt($item->getTaxAmount()),
'feed' => 495,
'font' => 'bold',
'align' => 'right',
];
// custom options
$options = $this->getItemOptions();
if ($options) {
foreach ($options as $option) {
// draw options label
$lines[][] = [
'text' => $this->string->split($this->filterManager->stripTags($option['label']), 40, true, true),
'font' => 'italic',
'feed' => 35,
];
// Checking whether option value is not null
if ($option['value'] !== null) {
if (isset($option['print_value'])) {
$printValue = $option['print_value'];
} else {
$printValue = $this->filterManager->stripTags($option['value']);
}
$values = explode(', ', $printValue);
foreach ($values as $value) {
$lines[][] = ['text' => $this->string->split($value, 30, true, true), 'feed' => 40];
}
}
}
}
$lineBlock = ['lines' => $lines, 'height' => 20];
$page = $pdf->drawLineBlocks($page, [$lineBlock], ['table_header' => true]);
$this->setPage($page);
}
public function getGiftMessages($order_id,$itemId) {
$this->logger->info("order_id".$order_id);
$this->logger->info("itemId".$itemId);
$order_id = $order_id;
$giftMessage = array();
try{
$giftItems = !empty($this->orderItemGiftRepo->get($order_id, $itemId)) ? $this->orderItemGiftRepo->get($order_id, $itemId) : null;
if($giftItems):
$giftMessage['message'] = $giftItems->getMessage();
$giftMessage['recipient'] = $giftItems->getRecipient();
$giftMessage['sender'] = $giftItems->getSender();
endif;
} catch (\Exception $e) {
return null;
}
return $giftMessage;
}
}
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Vendor\Module\Model\Order\Pdf\Items\Invoice;
use Magento\GiftMessage\Api\OrderItemRepositoryInterface;
/**
* Sales Order Invoice Pdf default items renderer
*/
class DefaultInvoice extends \Magento\Sales\Model\Order\Pdf\Items\Invoice\DefaultInvoice
{
/**
* Core string
*
* @var \Magento\Framework\Stdlib\StringUtils
*/
protected $string;
protected $orderItemGiftRepo;
private $logger;
/**
* @param \Magento\Framework\Model\Context $context
* @param \Magento\Framework\Registry $registry
* @param \Magento\Tax\Helper\Data $taxData
* @param \Magento\Framework\Filesystem $filesystem
* @param \Magento\Framework\Filter\FilterManager $filterManager
* @param \Magento\Framework\Stdlib\StringUtils $string
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
* @param array $data
*/
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Tax\Helper\Data $taxData,
\Magento\Framework\Filesystem $filesystem,
\Magento\Framework\Filter\FilterManager $filterManager,
\Magento\Framework\Stdlib\StringUtils $string,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
OrderItemRepositoryInterface $orderItemGiftRepo,
\Psr\Log\LoggerInterface $logger,
array $data = []
) {
$this->string = $string;
$this->orderItemGiftRepo = $orderItemGiftRepo;
$this->logger = $logger;
parent::__construct(
$context,
$registry,
$taxData,
$filesystem,
$filterManager,
$string,
$resource,
$resourceCollection,
$data
);
}
/**
* Draw item line
*
* @return void
*/
public function draw()
{
$order = $this->getOrder();
$item = $this->getItem();
$pdf = $this->getPdf();
$page = $this->getPage();
$oriderId = $order->getEntityId();
$itemId = $item->getOrderItemId();
$giftWrap = $this->getGiftMessages($oriderId,$itemId);
$lines = [];
// draw Product name
$lines[0] = [['text' => $this->string->split($item->getName(), 35, true, true), 'feed' => 35]];
// draw SKU
$lines[0][] = [
'text' => $this->string->split($this->getSku($item), 17),
'feed' => 290,
'align' => 'right',
];
// draw QTY
$lines[0][] = ['text' => $item->getQty() * 1, 'feed' => 435, 'align' => 'right'];
// draw item Prices
$i = 0;
$prices = $this->getItemPricesForDisplay();
$feedPrice = 395;
$feedSubtotal = $feedPrice + 170;
foreach ($prices as $priceData) {
if (isset($priceData['label'])) {
// draw Price label
$lines[$i][] = ['text' => $priceData['label'], 'feed' => $feedPrice, 'align' => 'right'];
// draw Subtotal label
$lines[$i][] = ['text' => $priceData['label'], 'feed' => $feedSubtotal, 'align' => 'right'];
$i++;
}
// draw Price
$lines[$i][] = [
'text' => $priceData['price'],
'feed' => $feedPrice,
'font' => 'bold',
'align' => 'right',
];
// draw Subtotal
$lines[$i][] = [
'text' => $priceData['subtotal'],
'feed' => $feedSubtotal,
'font' => 'bold',
'align' => 'right',
];
$i++;
}
// draw Tax
$lines[0][] = [
'text' => $order->formatPriceTxt($item->getTaxAmount()),
'feed' => 495,
'font' => 'bold',
'align' => 'right',
];
// custom options
$options = $this->getItemOptions();
if ($options) {
foreach ($options as $option) {
// draw options label
$lines[][] = [
'text' => $this->string->split($this->filterManager->stripTags($option['label']), 40, true, true),
'font' => 'italic',
'feed' => 35,
];
// Checking whether option value is not null
if ($option['value'] !== null) {
if (isset($option['print_value'])) {
$printValue = $option['print_value'];
} else {
$printValue = $this->filterManager->stripTags($option['value']);
}
$values = explode(', ', $printValue);
foreach ($values as $value) {
$lines[][] = ['text' => $this->string->split($value, 30, true, true), 'feed' => 40];
}
}
}
}
$lineBlock = ['lines' => $lines, 'height' => 20];
$page = $pdf->drawLineBlocks($page, [$lineBlock], ['table_header' => true]);
$this->setPage($page);
}
public function getGiftMessages($order_id,$itemId) {
$this->logger->info("order_id".$order_id);
$this->logger->info("itemId".$itemId);
$order_id = $order_id;
$giftMessage = array();
try{
$giftItems = !empty($this->orderItemGiftRepo->get($order_id, $itemId)) ? $this->orderItemGiftRepo->get($order_id, $itemId) : null;
if($giftItems):
$giftMessage['message'] = $giftItems->getMessage();
$giftMessage['recipient'] = $giftItems->getRecipient();
$giftMessage['sender'] = $giftItems->getSender();
endif;
} catch (\Exception $e) {
return null;
}
return $giftMessage;
}
}
Below Code Worked for me.
If you check sales_invoice_item table here order_item_id column contains your Order items id.
Vendor\Module\Model\Order\Pdf\Items\Invoice\DefaultInvoice.php
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Vendor\Module\Model\Order\Pdf\Items\Invoice;
use Magento\GiftMessage\Api\OrderItemRepositoryInterface;
/**
* Sales Order Invoice Pdf default items renderer
*/
class DefaultInvoice extends \Magento\Sales\Model\Order\Pdf\Items\Invoice\DefaultInvoice
{
/**
* Core string
*
* @var \Magento\Framework\Stdlib\StringUtils
*/
protected $string;
protected $orderItemGiftRepo;
private $logger;
/**
* @param \Magento\Framework\Model\Context $context
* @param \Magento\Framework\Registry $registry
* @param \Magento\Tax\Helper\Data $taxData
* @param \Magento\Framework\Filesystem $filesystem
* @param \Magento\Framework\Filter\FilterManager $filterManager
* @param \Magento\Framework\Stdlib\StringUtils $string
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
* @param array $data
*/
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Tax\Helper\Data $taxData,
\Magento\Framework\Filesystem $filesystem,
\Magento\Framework\Filter\FilterManager $filterManager,
\Magento\Framework\Stdlib\StringUtils $string,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
OrderItemRepositoryInterface $orderItemGiftRepo,
\Psr\Log\LoggerInterface $logger,
array $data = []
) {
$this->string = $string;
$this->orderItemGiftRepo = $orderItemGiftRepo;
$this->logger = $logger;
parent::__construct(
$context,
$registry,
$taxData,
$filesystem,
$filterManager,
$string,
$resource,
$resourceCollection,
$data
);
}
/**
* Draw item line
*
* @return void
*/
public function draw()
{
$order = $this->getOrder();
$item = $this->getItem();
$pdf = $this->getPdf();
$page = $this->getPage();
$oriderId = $order->getEntityId();
$itemId = $item->getOrderItemId();
$giftWrap = $this->getGiftMessages($oriderId,$itemId);
$this->logger->info("GiftData".json_encode($giftWrap));
$lines = [];
$giftItem = "<br/>"."<b style='color:red;'>Test Products</b>";
// draw Product name
$lines[0] = [['text' => $this->string->split($item->getName().$giftItem, 35, true, true), 'feed' => 35]];
// draw GiftWrap Message
//$lines[0] = [['text' => $this->string->split("TestProduct", 20, true, true), 'feed' => 20]];
// draw SKU
$lines[0][] = [
'text' => $this->string->split($this->getSku($item), 17),
'feed' => 290,
'align' => 'right',
];
// draw QTY
$lines[0][] = ['text' => $item->getQty() * 1, 'feed' => 435, 'align' => 'right'];
// draw item Prices
$i = 0;
$prices = $this->getItemPricesForDisplay();
$feedPrice = 395;
$feedSubtotal = $feedPrice + 170;
foreach ($prices as $priceData) {
if (isset($priceData['label'])) {
// draw Price label
$lines[$i][] = ['text' => $priceData['label'], 'feed' => $feedPrice, 'align' => 'right'];
// draw Subtotal label
$lines[$i][] = ['text' => $priceData['label'], 'feed' => $feedSubtotal, 'align' => 'right'];
$i++;
}
// draw Price
$lines[$i][] = [
'text' => $priceData['price'],
'feed' => $feedPrice,
'font' => 'bold',
'align' => 'right',
];
// draw Subtotal
$lines[$i][] = [
'text' => $priceData['subtotal'],
'feed' => $feedSubtotal,
'font' => 'bold',
'align' => 'right',
];
$i++;
}
// draw Tax
$lines[0][] = [
'text' => $order->formatPriceTxt($item->getTaxAmount()),
'feed' => 495,
'font' => 'bold',
'align' => 'right',
];
// custom options
$options = $this->getItemOptions();
if ($options) {
foreach ($options as $option) {
// draw options label
$lines[][] = [
'text' => $this->string->split($this->filterManager->stripTags($option['label']), 40, true, true),
'font' => 'italic',
'feed' => 35,
];
// Checking whether option value is not null
if ($option['value'] !== null) {
if (isset($option['print_value'])) {
$printValue = $option['print_value'];
} else {
$printValue = $this->filterManager->stripTags($option['value']);
}
$values = explode(', ', $printValue);
foreach ($values as $value) {
$lines[][] = ['text' => $this->string->split($value, 30, true, true), 'feed' => 40];
}
}
}
}
$lineBlock = ['lines' => $lines, 'height' => 20];
$page = $pdf->drawLineBlocks($page, [$lineBlock], ['table_header' => true]);
$this->setPage($page);
}
public function getGiftMessages($order_id,$itemId) {
$this->logger->info("order_id".$order_id);
$this->logger->info("itemId".$itemId);
$order_id = $order_id;
$giftMessage = array();
try{
$giftItems = !empty($this->orderItemGiftRepo->get($order_id, $itemId)) ? $this->orderItemGiftRepo->get($order_id, $itemId) : null;
if($giftItems):
$giftMessage['message'] = $giftItems->getMessage();
$giftMessage['recipient'] = $giftItems->getRecipient();
$giftMessage['sender'] = $giftItems->getSender();
endif;
} catch (\Exception $e) {
return null;
}
return $giftMessage;
}
}
default