Shipment.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Model\Order\Pdf;
  7. /**
  8. * Sales Order Shipment PDF model
  9. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  10. */
  11. class Shipment extends AbstractPdf
  12. {
  13. /**
  14. * @var \Magento\Store\Model\StoreManagerInterface
  15. */
  16. protected $_storeManager;
  17. /**
  18. * @var \Magento\Framework\Locale\ResolverInterface
  19. */
  20. protected $_localeResolver;
  21. /**
  22. * @param \Magento\Payment\Helper\Data $paymentData
  23. * @param \Magento\Framework\Stdlib\StringUtils $string
  24. * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
  25. * @param \Magento\Framework\Filesystem $filesystem
  26. * @param Config $pdfConfig
  27. * @param \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory
  28. * @param \Magento\Sales\Model\Order\Pdf\ItemsFactory $pdfItemsFactory
  29. * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
  30. * @param \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
  31. * @param \Magento\Sales\Model\Order\Address\Renderer $addressRenderer
  32. * @param \Magento\Store\Model\StoreManagerInterface $storeManager
  33. * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
  34. * @param array $data
  35. *
  36. * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  37. */
  38. public function __construct(
  39. \Magento\Payment\Helper\Data $paymentData,
  40. \Magento\Framework\Stdlib\StringUtils $string,
  41. \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
  42. \Magento\Framework\Filesystem $filesystem,
  43. Config $pdfConfig,
  44. \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory,
  45. \Magento\Sales\Model\Order\Pdf\ItemsFactory $pdfItemsFactory,
  46. \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
  47. \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation,
  48. \Magento\Sales\Model\Order\Address\Renderer $addressRenderer,
  49. \Magento\Store\Model\StoreManagerInterface $storeManager,
  50. \Magento\Framework\Locale\ResolverInterface $localeResolver,
  51. array $data = []
  52. ) {
  53. $this->_storeManager = $storeManager;
  54. $this->_localeResolver = $localeResolver;
  55. parent::__construct(
  56. $paymentData,
  57. $string,
  58. $scopeConfig,
  59. $filesystem,
  60. $pdfConfig,
  61. $pdfTotalFactory,
  62. $pdfItemsFactory,
  63. $localeDate,
  64. $inlineTranslation,
  65. $addressRenderer,
  66. $data
  67. );
  68. }
  69. /**
  70. * Draw table header for product items
  71. *
  72. * @param \Zend_Pdf_Page $page
  73. * @return void
  74. */
  75. protected function _drawHeader(\Zend_Pdf_Page $page)
  76. {
  77. /* Add table head */
  78. $this->_setFontRegular($page, 10);
  79. $page->setFillColor(new \Zend_Pdf_Color_Rgb(0.93, 0.92, 0.92));
  80. $page->setLineColor(new \Zend_Pdf_Color_GrayScale(0.5));
  81. $page->setLineWidth(0.5);
  82. $page->drawRectangle(25, $this->y, 570, $this->y - 15);
  83. $this->y -= 10;
  84. $page->setFillColor(new \Zend_Pdf_Color_Rgb(0, 0, 0));
  85. //columns headers
  86. $lines[0][] = ['text' => __('Products'), 'feed' => 100];
  87. $lines[0][] = ['text' => __('Qty'), 'feed' => 35];
  88. $lines[0][] = ['text' => __('SKU'), 'feed' => 565, 'align' => 'right'];
  89. $lineBlock = ['lines' => $lines, 'height' => 10];
  90. $this->drawLineBlocks($page, [$lineBlock], ['table_header' => true]);
  91. $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0));
  92. $this->y -= 20;
  93. }
  94. /**
  95. * Return PDF document
  96. *
  97. * @param \Magento\Sales\Model\Order\Shipment[] $shipments
  98. * @return \Zend_Pdf
  99. */
  100. public function getPdf($shipments = [])
  101. {
  102. $this->_beforeGetPdf();
  103. $this->_initRenderer('shipment');
  104. $pdf = new \Zend_Pdf();
  105. $this->_setPdf($pdf);
  106. $style = new \Zend_Pdf_Style();
  107. $this->_setFontBold($style, 10);
  108. foreach ($shipments as $shipment) {
  109. if ($shipment->getStoreId()) {
  110. $this->_localeResolver->emulate($shipment->getStoreId());
  111. $this->_storeManager->setCurrentStore($shipment->getStoreId());
  112. }
  113. $page = $this->newPage();
  114. $order = $shipment->getOrder();
  115. /* Add image */
  116. $this->insertLogo($page, $shipment->getStore());
  117. /* Add address */
  118. $this->insertAddress($page, $shipment->getStore());
  119. /* Add head */
  120. $this->insertOrder(
  121. $page,
  122. $shipment,
  123. $this->_scopeConfig->isSetFlag(
  124. self::XML_PATH_SALES_PDF_SHIPMENT_PUT_ORDER_ID,
  125. \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
  126. $order->getStoreId()
  127. )
  128. );
  129. /* Add document text and number */
  130. $this->insertDocumentNumber($page, __('Packing Slip # ') . $shipment->getIncrementId());
  131. /* Add table */
  132. $this->_drawHeader($page);
  133. /* Add body */
  134. foreach ($shipment->getAllItems() as $item) {
  135. if ($item->getOrderItem()->getParentItem()) {
  136. continue;
  137. }
  138. /* Draw item */
  139. $this->_drawItem($item, $page, $order);
  140. $page = end($pdf->pages);
  141. }
  142. if ($shipment->getStoreId()) {
  143. $this->_localeResolver->revert();
  144. }
  145. }
  146. $this->_afterGetPdf();
  147. return $pdf;
  148. }
  149. /**
  150. * Create new page and assign to PDF object
  151. *
  152. * @param array $settings
  153. * @return \Zend_Pdf_Page
  154. */
  155. public function newPage(array $settings = [])
  156. {
  157. /* Add new table head */
  158. $page = $this->_getPdf()->newPage(\Zend_Pdf_Page::SIZE_A4);
  159. $this->_getPdf()->pages[] = $page;
  160. $this->y = 800;
  161. if (!empty($settings['table_header'])) {
  162. $this->_drawHeader($page);
  163. }
  164. return $page;
  165. }
  166. }