![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/extmag/shiplab/Model/Order/Pdf/ |
<?php /** * Copyright © Extmag. All rights reserved. */ namespace Extmag\Shiplab\Model\Order\Pdf; use Extmag\Shiplab\Model\Label; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Filesystem; use Magento\Framework\Locale\ResolverInterface; use Magento\Framework\Stdlib\DateTime\TimezoneInterface; use Magento\Framework\Stdlib\StringUtils; use Magento\Framework\Translate\Inline\StateInterface; use Magento\Payment\Helper\Data; use Magento\Sales\Model\Convert\Order; use Magento\Sales\Model\Order\Address\Renderer; use Magento\Sales\Model\Order\Pdf\AbstractPdf; use Magento\Sales\Model\Order\Pdf\Config; use Magento\Sales\Model\Order\Pdf\ItemsFactory; use Magento\Sales\Model\Order\Pdf\Total\Factory; use Magento\Store\Model\ScopeInterface; use Magento\Store\Model\StoreManagerInterface; use Zend_Pdf; use Zend_Pdf_Color_GrayScale; use Zend_Pdf_Color_Rgb; use Zend_Pdf_Exception; use Zend_Pdf_Page; use Zend_Pdf_Style; /** * Extmag Shiplab Pickup PDF model * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class Pickup extends AbstractPdf { /** * @var StoreManagerInterface */ protected $_storeManager; /** * @var ResolverInterface */ protected $_localeResolver; /** * @var Order */ protected $convertOrder; /** * @param Data $paymentData * @param StringUtils $string * @param ScopeConfigInterface $scopeConfig * @param Filesystem $filesystem * @param Config $pdfConfig * @param Factory $pdfTotalFactory * @param ItemsFactory $pdfItemsFactory * @param TimezoneInterface $localeDate * @param StateInterface $inlineTranslation * @param Renderer $addressRenderer * @param StoreManagerInterface $storeManager * @param ResolverInterface $localeResolver * @param Order $convertOrder * @param array $data * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( Data $paymentData, StringUtils $string, ScopeConfigInterface $scopeConfig, Filesystem $filesystem, Config $pdfConfig, Factory $pdfTotalFactory, ItemsFactory $pdfItemsFactory, TimezoneInterface $localeDate, StateInterface $inlineTranslation, Renderer $addressRenderer, StoreManagerInterface $storeManager, ResolverInterface $localeResolver, Order $convertOrder, array $data = [] ) { $this->_storeManager = $storeManager; $this->_localeResolver = $localeResolver; parent::__construct( $paymentData, $string, $scopeConfig, $filesystem, $pdfConfig, $pdfTotalFactory, $pdfItemsFactory, $localeDate, $inlineTranslation, $addressRenderer, $data ); $this->convertOrder = $convertOrder; } /** * Draw table header for product items * * @param Zend_Pdf_Page $page * @return void * @throws LocalizedException */ protected function _drawHeader(Zend_Pdf_Page $page) { /* Add table head */ $this->_setFontRegular($page, 10); $page->setFillColor(new Zend_Pdf_Color_Rgb(0.93, 0.92, 0.92)); $page->setLineColor(new Zend_Pdf_Color_GrayScale(0.5)); $page->setLineWidth(0.5); $page->drawRectangle(25, $this->y, 570, $this->y - 15); $this->y -= 10; $page->setFillColor(new Zend_Pdf_Color_Rgb(0, 0, 0)); //columns headers $lines[0][] = ['text' => __('Products'), 'feed' => 100]; $lines[0][] = ['text' => __('Qty'), 'feed' => 35]; $lines[0][] = ['text' => __('SKU'), 'feed' => 565, 'align' => 'right']; $lineBlock = ['lines' => $lines, 'height' => 10]; $this->drawLineBlocks($page, [$lineBlock], ['table_header' => true]); $page->setFillColor(new Zend_Pdf_Color_GrayScale(0)); $this->y -= 20; } /** * Return PDF document * * @param Label[] $labels * @return Zend_Pdf * @throws LocalizedException * @throws Zend_Pdf_Exception */ public function getPdf($labels = []) { $this->_beforeGetPdf(); $this->_initRenderer('shipment'); $pdf = new Zend_Pdf(); $this->_setPdf($pdf); $style = new Zend_Pdf_Style(); $this->_setFontBold($style, 10); foreach ($labels as $label) { $request = $label->getRequestArray(); if (!empty($request)) { $packages = $request['packages']; $trackingNumbers = $label->getTrackingNumbers(); $carrierName = $label->getCarrierFullName(); foreach ($trackingNumbers as $key => $trackingNumber) { if ($label->getStoreId()) { $this->_localeResolver->emulate($label->getStoreId()); $this->_storeManager->setCurrentStore($label->getStoreId()); } $page = $this->newPage(); $order = $label->getOrder(); /* Add image */ $this->insertLogo($page, null); /* Add address */ $this->insertAddress($page, null); /* Add head */ $this->insertOrder( $page, $order, $this->_scopeConfig->isSetFlag( self::XML_PATH_SALES_PDF_SHIPMENT_PUT_ORDER_ID, ScopeInterface::SCOPE_STORE, $order->getStoreId() ) ); /* Add document text and number */ $this->insertDocumentNumber( $page, __('Packing Slip for '.$carrierName.'. Tracking Number # ') . $trackingNumber ); /* Add table */ $this->_drawHeader($page); /* Add body */ /*print_r($request);*/ $nativeProducts = $request['products']; $shipmentItems = []; foreach ($order->getAllItems() as $orderItem) { if ($orderItem->getIsVirtual()) { continue; } $qtyShipped = $orderItem->getQtyToShip(); $shipmentItems[$orderItem->getId()] = $this->convertOrder ->itemToShipmentItem($orderItem) ->setQty($qtyShipped); } foreach ($shipmentItems as $item) { if ($item->getOrderItem()->getParentItem()) { continue; } /* Draw item */ if (!empty($nativeProducts[$item->getOrderItem()->getId()]) && $this->isProductInPackage($packages[$key], $item->getOrderItem()->getId()) ) { $item->setQty($this->qtyProductInPackage($packages[$key], $item->getOrderItem()->getId())); $this->_drawItem($item, $page, $order); $page = end($pdf->pages); } } if ($label->getStoreId()) { $this->_localeResolver->revert(); } } } } $this->_afterGetPdf(); return $pdf; } /** * @param $package * @param $productId * @return bool */ private function isProductInPackage($package, $productId) { foreach ($package['products'] as $product) { if ($productId == $product['id']) { if ($product['qty'] > 0) { return true; } else { break; } } } return false; } /** * @param $package * @param $productId * @return int */ private function qtyProductInPackage($package, $productId) { foreach ($package['products'] as $product) { if ($productId == $product['id']) { return $product['qty']; } } return 0; } /** * Create new page and assign to PDF object * * @param array $settings * @return Zend_Pdf_Page * @throws LocalizedException */ public function newPage(array $settings = []) { /* Add new table head */ $page = $this->_getPdf()->newPage(Zend_Pdf_Page::SIZE_A4); $this->_getPdf()->pages[] = $page; $this->y = 800; if (!empty($settings['table_header'])) { $this->_drawHeader($page); } return $page; } }