PageRenderTime 25ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/app/code/Magento/Shipping/Model/Order/Pdf/Packaging.php

https://gitlab.com/crazybutterfly815/magento2
PHP | 337 lines | 232 code | 40 blank | 65 comment | 28 complexity | d59fdfa9ef4e89c239b27eb29cac7569 MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Shipping\Model\Order\Pdf;
  7. use Magento\Shipping\Helper\Carrier;
  8. /**
  9. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  10. */
  11. class Packaging extends \Magento\Sales\Model\Order\Pdf\AbstractPdf
  12. {
  13. /**
  14. * Carrier helper
  15. *
  16. * @var \Magento\Shipping\Helper\Carrier
  17. */
  18. protected $_carrierHelper;
  19. /**
  20. * @var \Magento\Store\Model\StoreManagerInterface
  21. */
  22. protected $_storeManager;
  23. /**
  24. * @var \Magento\Framework\View\LayoutInterface
  25. */
  26. protected $_layout;
  27. /**
  28. * @var \Magento\Framework\Locale\ResolverInterface
  29. */
  30. protected $_localeResolver;
  31. /**
  32. * @param \Magento\Payment\Helper\Data $paymentData
  33. * @param \Magento\Framework\Stdlib\StringUtils $string
  34. * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
  35. * @param \Magento\Framework\Filesystem $filesystem
  36. * @param \Magento\Sales\Model\Order\Pdf\Config $pdfConfig
  37. * @param \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory
  38. * @param \Magento\Sales\Model\Order\Pdf\ItemsFactory $pdfItemsFactory
  39. * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
  40. * @param \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
  41. * @param \Magento\Sales\Model\Order\Address\Renderer $addressRenderer
  42. * @param Carrier $carrierHelper
  43. * @param \Magento\Store\Model\StoreManagerInterface $storeManager
  44. * @param \Magento\Framework\View\LayoutInterface $layout
  45. * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
  46. * @param array $data
  47. *
  48. * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  49. */
  50. public function __construct(
  51. \Magento\Payment\Helper\Data $paymentData,
  52. \Magento\Framework\Stdlib\StringUtils $string,
  53. \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
  54. \Magento\Framework\Filesystem $filesystem,
  55. \Magento\Sales\Model\Order\Pdf\Config $pdfConfig,
  56. \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory,
  57. \Magento\Sales\Model\Order\Pdf\ItemsFactory $pdfItemsFactory,
  58. \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
  59. \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation,
  60. \Magento\Sales\Model\Order\Address\Renderer $addressRenderer,
  61. Carrier $carrierHelper,
  62. \Magento\Store\Model\StoreManagerInterface $storeManager,
  63. \Magento\Framework\View\LayoutInterface $layout,
  64. \Magento\Framework\Locale\ResolverInterface $localeResolver,
  65. array $data = []
  66. ) {
  67. $this->_carrierHelper = $carrierHelper;
  68. $this->_storeManager = $storeManager;
  69. $this->_layout = $layout;
  70. $this->_localeResolver = $localeResolver;
  71. parent::__construct(
  72. $paymentData,
  73. $string,
  74. $scopeConfig,
  75. $filesystem,
  76. $pdfConfig,
  77. $pdfTotalFactory,
  78. $pdfItemsFactory,
  79. $localeDate,
  80. $inlineTranslation,
  81. $addressRenderer,
  82. $data
  83. );
  84. }
  85. /**
  86. * Format pdf file
  87. *
  88. * @param null $shipment
  89. * @return \Zend_Pdf
  90. */
  91. public function getPdf($shipment = null)
  92. {
  93. $this->_beforeGetPdf();
  94. $this->_initRenderer('shipment');
  95. $pdf = new \Zend_Pdf();
  96. $this->_setPdf($pdf);
  97. $page = $this->newPage();
  98. if ($shipment->getStoreId()) {
  99. $this->_localeResolver->emulate($shipment->getStoreId());
  100. $this->_storeManager->setCurrentStore($shipment->getStoreId());
  101. }
  102. $this->_setFontRegular($page);
  103. $this->_drawHeaderBlock($page);
  104. $this->y = 740;
  105. $this->_drawPackageBlock($page);
  106. $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0));
  107. $this->_afterGetPdf();
  108. if ($shipment->getStoreId()) {
  109. $this->_localeResolver->revert();
  110. }
  111. return $pdf;
  112. }
  113. /**
  114. * Draw header block
  115. *
  116. * @param \Zend_Pdf_Page $page
  117. * @return \Magento\Shipping\Model\Order\Pdf\Packaging
  118. */
  119. protected function _drawHeaderBlock(\Zend_Pdf_Page $page)
  120. {
  121. $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0.5));
  122. $page->setLineColor(new \Zend_Pdf_Color_GrayScale(0.5));
  123. $page->setLineWidth(0.5);
  124. $page->drawRectangle(25, 790, 570, 755);
  125. $page->setFillColor(new \Zend_Pdf_Color_GrayScale(1));
  126. $page->drawText(__('Packages'), 35, 770, 'UTF-8');
  127. $page->setFillColor(new \Zend_Pdf_Color_Rgb(0.93, 0.92, 0.92));
  128. return $this;
  129. }
  130. /**
  131. * Draw packages block
  132. *
  133. * @param \Zend_Pdf_Page $page
  134. * @return \Magento\Shipping\Model\Order\Pdf\Packaging
  135. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  136. * @SuppressWarnings(PHPMD.NPathComplexity)
  137. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  138. * @SuppressWarnings(PHPMD.UnusedLocalVariable)
  139. */
  140. protected function _drawPackageBlock(\Zend_Pdf_Page $page)
  141. {
  142. if ($this->getPackageShippingBlock()) {
  143. $packaging = $this->getPackageShippingBlock();
  144. } else {
  145. $packaging = $this->_layout->getBlockSingleton(\Magento\Shipping\Block\Adminhtml\Order\Packaging::class);
  146. }
  147. $packages = $packaging->getPackages();
  148. $packageNum = 1;
  149. foreach ($packages as $package) {
  150. $page->setFillColor(new \Zend_Pdf_Color_Rgb(0.93, 0.92, 0.92));
  151. $page->drawRectangle(25, $this->y + 15, 190, $this->y - 35);
  152. $page->drawRectangle(190, $this->y + 15, 350, $this->y - 35);
  153. $page->drawRectangle(350, $this->y + 15, 570, $this->y - 35);
  154. $page->setFillColor(new \Zend_Pdf_Color_GrayScale(1));
  155. $page->drawRectangle(520, $this->y + 15, 570, $this->y - 5);
  156. $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0));
  157. $packageText = __('Package') . ' ' . $packageNum;
  158. $page->drawText($packageText, 525, $this->y, 'UTF-8');
  159. $packageNum++;
  160. $package = new \Magento\Framework\DataObject($package);
  161. $params = new \Magento\Framework\DataObject($package->getParams());
  162. $dimensionUnits = $this->_carrierHelper->getMeasureDimensionName($params->getDimensionUnits());
  163. $typeText = __('Type') . ' : ' . $packaging->getContainerTypeByCode($params->getContainer());
  164. $page->drawText($typeText, 35, $this->y, 'UTF-8');
  165. if ($params->getLength() != null) {
  166. $lengthText = $params->getLength() . ' ' . $dimensionUnits;
  167. } else {
  168. $lengthText = '--';
  169. }
  170. $lengthText = __('Length') . ' : ' . $lengthText;
  171. $page->drawText($lengthText, 200, $this->y, 'UTF-8');
  172. if ($params->getDeliveryConfirmation() != null) {
  173. $confirmationText = __(
  174. 'Signature Confirmation'
  175. ) . ' : ' . $packaging->getDeliveryConfirmationTypeByCode(
  176. $params->getDeliveryConfirmation()
  177. );
  178. $page->drawText($confirmationText, 355, $this->y, 'UTF-8');
  179. }
  180. $this->y = $this->y - 10;
  181. if ($packaging->displayCustomsValue() != null) {
  182. $customsValueText = __('Customs Value') . ' : ' . $packaging->displayPrice($params->getCustomsValue());
  183. $page->drawText($customsValueText, 35, $this->y, 'UTF-8');
  184. }
  185. if ($params->getWidth() != null) {
  186. $widthText = $params->getWidth() . ' ' . $dimensionUnits;
  187. } else {
  188. $widthText = '--';
  189. }
  190. $widthText = __('Width') . ' : ' . $widthText;
  191. $page->drawText($widthText, 200, $this->y, 'UTF-8');
  192. if ($params->getContentType() != null) {
  193. if ($params->getContentType() == 'OTHER') {
  194. $contentsValue = $params->getContentTypeOther();
  195. } else {
  196. $contentsValue = $packaging->getContentTypeByCode($params->getContentType());
  197. }
  198. $contentsText = __('Contents') . ' : ' . $contentsValue;
  199. $page->drawText($contentsText, 355, $this->y, 'UTF-8');
  200. }
  201. $this->y = $this->y - 10;
  202. $weightText = __(
  203. 'Total Weight'
  204. ) . ' : ' . $params->getWeight() . ' ' . $this->_carrierHelper->getMeasureWeightName(
  205. $params->getWeightUnits()
  206. );
  207. $page->drawText($weightText, 35, $this->y, 'UTF-8');
  208. if ($params->getHeight() != null) {
  209. $heightText = $params->getHeight() . ' ' . $dimensionUnits;
  210. } else {
  211. $heightText = '--';
  212. }
  213. $heightText = __('Height') . ' : ' . $heightText;
  214. $page->drawText($heightText, 200, $this->y, 'UTF-8');
  215. $this->y = $this->y - 10;
  216. if ($params->getSize()) {
  217. $sizeText = __('Size') . ' : ' . ucfirst(strtolower($params->getSize()));
  218. $page->drawText($sizeText, 35, $this->y, 'UTF-8');
  219. }
  220. if ($params->getGirth() != null) {
  221. $dimensionGirthUnits = $this->_carrierHelper->getMeasureDimensionName(
  222. $params->getGirthDimensionUnits()
  223. );
  224. $girthText = __('Girth') . ' : ' . $params->getGirth() . ' ' . $dimensionGirthUnits;
  225. $page->drawText($girthText, 200, $this->y, 'UTF-8');
  226. }
  227. $this->y = $this->y - 5;
  228. $page->setFillColor(new \Zend_Pdf_Color_GrayScale(1));
  229. $page->drawRectangle(25, $this->y, 570, $this->y - 30 - count($package->getItems()) * 12);
  230. $this->y = $this->y - 10;
  231. $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0));
  232. $page->drawText(__('Items in the Package'), 30, $this->y, 'UTF-8');
  233. $txtIndent = 5;
  234. $itemCollsNumber = $packaging->displayCustomsValue() ? 5 : 4;
  235. $itemCollsX[0] = 30;
  236. // coordinate for Product name
  237. $itemCollsX[1] = 250;
  238. // coordinate for Product name
  239. $itemCollsXEnd = 565;
  240. $itemCollsXStep = round(($itemCollsXEnd - $itemCollsX[1]) / ($itemCollsNumber - 1));
  241. // calculate coordinates for all other cells (Weight, Customs Value, Qty Ordered, Qty)
  242. for ($i = 2; $i <= $itemCollsNumber; $i++) {
  243. $itemCollsX[$i] = $itemCollsX[$i - 1] + $itemCollsXStep;
  244. }
  245. $i = 0;
  246. $page->setFillColor(new \Zend_Pdf_Color_Rgb(0.93, 0.92, 0.92));
  247. $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsX[++$i], $this->y - 15);
  248. $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsX[++$i], $this->y - 15);
  249. $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsX[++$i], $this->y - 15);
  250. $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsX[++$i], $this->y - 15);
  251. $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsXEnd, $this->y - 15);
  252. $this->y = $this->y - 12;
  253. $i = 0;
  254. $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0));
  255. $page->drawText(__('Product'), $itemCollsX[$i] + $txtIndent, $this->y, 'UTF-8');
  256. $page->drawText(__('Weight'), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8');
  257. if ($packaging->displayCustomsValue()) {
  258. $page->drawText(__('Customs Value'), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8');
  259. }
  260. $page->drawText(__('Qty Ordered'), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8');
  261. $page->drawText(__('Qty'), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8');
  262. $i = 0;
  263. foreach ($package->getItems() as $itemId => $item) {
  264. $item = new \Magento\Framework\DataObject($item);
  265. $i = 0;
  266. $page->setFillColor(new \Zend_Pdf_Color_GrayScale(1));
  267. $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsX[++$i], $this->y - 15);
  268. $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsX[++$i], $this->y - 15);
  269. $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsX[++$i], $this->y - 15);
  270. $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsX[++$i], $this->y - 15);
  271. $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsXEnd, $this->y - 15);
  272. $this->y = $this->y - 12;
  273. $i = 0;
  274. $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0));
  275. $page->drawText($item->getName(), $itemCollsX[$i] + $txtIndent, $this->y, 'UTF-8');
  276. $page->drawText($item->getWeight(), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8');
  277. if ($packaging->displayCustomsValue()) {
  278. $page->drawText(
  279. $packaging->displayPrice($item->getCustomsValue()),
  280. $itemCollsX[++$i] + $txtIndent,
  281. $this->y,
  282. 'UTF-8'
  283. );
  284. }
  285. $page->drawText(
  286. $packaging->getQtyOrderedItem($item->getOrderItemId()),
  287. $itemCollsX[++$i] + $txtIndent,
  288. $this->y,
  289. 'UTF-8'
  290. );
  291. $page->drawText($item->getQty() * 1, $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8');
  292. }
  293. $this->y = $this->y - 30;
  294. }
  295. return $this;
  296. }
  297. }