Creditmemo.php 6.8 KB

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