Skip to main content
deleted 305 characters in body
Source Link
Hitesh Balpande
  • 1.9k
  • 2
  • 27
  • 72
 <?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;
        } 
    }
Source Link
Hitesh Balpande
  • 1.9k
  • 2
  • 27
  • 72

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;
        } 
    }