Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Packaging.php
Go to the documentation of this file.
1 <?php
7 
9 
13 class Packaging extends \Magento\Sales\Model\Order\Pdf\AbstractPdf
14 {
20  protected $_carrierHelper;
21 
25  protected $_storeManager;
26 
30  protected $_layout;
31 
35  protected $_localeResolver;
36 
56  public function __construct(
57  \Magento\Payment\Helper\Data $paymentData,
58  \Magento\Framework\Stdlib\StringUtils $string,
59  \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
60  \Magento\Framework\Filesystem $filesystem,
61  \Magento\Sales\Model\Order\Pdf\Config $pdfConfig,
62  \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory,
63  \Magento\Sales\Model\Order\Pdf\ItemsFactory $pdfItemsFactory,
64  \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
65  \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation,
66  \Magento\Sales\Model\Order\Address\Renderer $addressRenderer,
67  Carrier $carrierHelper,
68  \Magento\Store\Model\StoreManagerInterface $storeManager,
69  \Magento\Framework\View\LayoutInterface $layout,
70  \Magento\Framework\Locale\ResolverInterface $localeResolver,
71  array $data = []
72  ) {
73  $this->_carrierHelper = $carrierHelper;
74  $this->_storeManager = $storeManager;
75  $this->_layout = $layout;
76  $this->_localeResolver = $localeResolver;
77 
78  parent::__construct(
79  $paymentData,
80  $string,
81  $scopeConfig,
83  $pdfConfig,
84  $pdfTotalFactory,
85  $pdfItemsFactory,
86  $localeDate,
89  $data
90  );
91  }
92 
99  public function getPdf($shipment = null)
100  {
101  $this->_beforeGetPdf();
102  $this->_initRenderer('shipment');
103 
104  $pdf = new \Zend_Pdf();
105  $this->_setPdf($pdf);
106  $page = $this->newPage();
107 
108  if ($shipment->getStoreId()) {
109  $this->_localeResolver->emulate($shipment->getStoreId());
110  $this->_storeManager->setCurrentStore($shipment->getStoreId());
111  }
112 
113  $this->_setFontRegular($page);
114  $this->_drawHeaderBlock($page);
115 
116  $this->y = 740;
117  $this->_drawPackageBlock($page);
118  $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0));
119  $this->_afterGetPdf();
120 
121  if ($shipment->getStoreId()) {
122  $this->_localeResolver->revert();
123  }
124  return $pdf;
125  }
126 
133  protected function _drawHeaderBlock(\Zend_Pdf_Page $page)
134  {
135  $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0.5));
136  $page->setLineColor(new \Zend_Pdf_Color_GrayScale(0.5));
137  $page->setLineWidth(0.5);
138  $page->drawRectangle(25, 790, 570, 755);
139  $page->setFillColor(new \Zend_Pdf_Color_GrayScale(1));
140  $page->drawText(__('Packages'), 35, 770, 'UTF-8');
141  $page->setFillColor(new \Zend_Pdf_Color_Rgb(0.93, 0.92, 0.92));
142 
143  return $this;
144  }
145 
156  protected function _drawPackageBlock(\Zend_Pdf_Page $page)
157  {
158  if ($this->getPackageShippingBlock()) {
159  $packaging = $this->getPackageShippingBlock();
160  } else {
161  $packaging = $this->_layout->getBlockSingleton(\Magento\Shipping\Block\Adminhtml\Order\Packaging::class);
162  }
163  $packages = $packaging->getPackages();
164 
165  $packageNum = 1;
166  foreach ($packages as $package) {
167  $page->setFillColor(new \Zend_Pdf_Color_Rgb(0.93, 0.92, 0.92));
168  $page->drawRectangle(25, $this->y + 15, 190, $this->y - 35);
169  $page->drawRectangle(190, $this->y + 15, 350, $this->y - 35);
170  $page->drawRectangle(350, $this->y + 15, 570, $this->y - 35);
171 
172  $page->setFillColor(new \Zend_Pdf_Color_GrayScale(1));
173  $page->drawRectangle(520, $this->y + 15, 570, $this->y - 5);
174 
175  $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0));
176  $packageText = __('Package') . ' ' . $packageNum;
177  $page->drawText($packageText, 525, $this->y, 'UTF-8');
178  $packageNum++;
179 
180  $package = new \Magento\Framework\DataObject($package);
181  $params = new \Magento\Framework\DataObject($package->getParams());
182  $dimensionUnits = $this->_carrierHelper->getMeasureDimensionName($params->getDimensionUnits());
183 
184  $typeText = __('Type') . ' : ' . $packaging->getContainerTypeByCode($params->getContainer());
185  $page->drawText($typeText, 35, $this->y, 'UTF-8');
186 
187  if ($params->getLength() != null) {
188  $lengthText = $params->getLength() . ' ' . $dimensionUnits;
189  } else {
190  $lengthText = '--';
191  }
192  $lengthText = __('Length') . ' : ' . $lengthText;
193  $page->drawText($lengthText, 200, $this->y, 'UTF-8');
194 
195  if ($params->getDeliveryConfirmation() != null) {
196  $confirmationText = __(
197  'Signature Confirmation'
198  ) . ' : ' . $packaging->getDeliveryConfirmationTypeByCode(
199  $params->getDeliveryConfirmation()
200  );
201  $page->drawText($confirmationText, 355, $this->y, 'UTF-8');
202  }
203 
204  $this->y = $this->y - 10;
205 
206  if ($packaging->displayCustomsValue() != null) {
207  $customsValueText = __('Customs Value') . ' : ' . $packaging->displayPrice($params->getCustomsValue());
208  $page->drawText($customsValueText, 35, $this->y, 'UTF-8');
209  }
210  if ($params->getWidth() != null) {
211  $widthText = $params->getWidth() . ' ' . $dimensionUnits;
212  } else {
213  $widthText = '--';
214  }
215  $widthText = __('Width') . ' : ' . $widthText;
216  $page->drawText($widthText, 200, $this->y, 'UTF-8');
217 
218  if ($params->getContentType() != null) {
219  if ($params->getContentType() == 'OTHER') {
220  $contentsValue = $params->getContentTypeOther();
221  } else {
222  $contentsValue = $packaging->getContentTypeByCode($params->getContentType());
223  }
224  $contentsText = __('Contents') . ' : ' . $contentsValue;
225  $page->drawText($contentsText, 355, $this->y, 'UTF-8');
226  }
227 
228  $this->y = $this->y - 10;
229 
230  $weightText = __(
231  'Total Weight'
232  ) . ' : ' . $params->getWeight() . ' ' . $this->_carrierHelper->getMeasureWeightName(
233  $params->getWeightUnits()
234  );
235  $page->drawText($weightText, 35, $this->y, 'UTF-8');
236 
237  if ($params->getHeight() != null) {
238  $heightText = $params->getHeight() . ' ' . $dimensionUnits;
239  } else {
240  $heightText = '--';
241  }
242  $heightText = __('Height') . ' : ' . $heightText;
243  $page->drawText($heightText, 200, $this->y, 'UTF-8');
244 
245  $this->y = $this->y - 10;
246 
247  if ($params->getSize()) {
248  $sizeText = __('Size') . ' : ' . ucfirst(strtolower($params->getSize()));
249  $page->drawText($sizeText, 35, $this->y, 'UTF-8');
250  }
251  if ($params->getGirth() != null) {
252  $dimensionGirthUnits = $this->_carrierHelper->getMeasureDimensionName(
253  $params->getGirthDimensionUnits()
254  );
255  $girthText = __('Girth') . ' : ' . $params->getGirth() . ' ' . $dimensionGirthUnits;
256  $page->drawText($girthText, 200, $this->y, 'UTF-8');
257  }
258 
259  $this->y = $this->y - 5;
260  $page->setFillColor(new \Zend_Pdf_Color_GrayScale(1));
261  $page->drawRectangle(25, $this->y, 570, $this->y - 30 - count($package->getItems()) * 12);
262 
263  $this->y = $this->y - 10;
264  $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0));
265  $page->drawText(__('Items in the Package'), 30, $this->y, 'UTF-8');
266 
267  $txtIndent = 5;
268  $itemCollsNumber = $packaging->displayCustomsValue() ? 5 : 4;
269  $itemCollsX[0] = 30;
270  // coordinate for Product name
271  $itemCollsX[1] = 250;
272  // coordinate for Product name
273  $itemCollsXEnd = 565;
274  $itemCollsXStep = round(($itemCollsXEnd - $itemCollsX[1]) / ($itemCollsNumber - 1));
275  // calculate coordinates for all other cells (Weight, Customs Value, Qty Ordered, Qty)
276  for ($i = 2; $i <= $itemCollsNumber; $i++) {
277  $itemCollsX[$i] = $itemCollsX[$i - 1] + $itemCollsXStep;
278  }
279 
280  $i = 0;
281  $page->setFillColor(new \Zend_Pdf_Color_Rgb(0.93, 0.92, 0.92));
282  $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsX[++$i], $this->y - 15);
283  $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsX[++$i], $this->y - 15);
284  $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsX[++$i], $this->y - 15);
285  $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsX[++$i], $this->y - 15);
286  $page->drawRectangle($itemCollsX[$i], $this->y - 5, $itemCollsXEnd, $this->y - 15);
287 
288  $this->y = $this->y - 12;
289  $i = 0;
290 
291  $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0));
292  $page->drawText(__('Product'), $itemCollsX[$i] + $txtIndent, $this->y, 'UTF-8');
293  $page->drawText(__('Weight'), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8');
294  if ($packaging->displayCustomsValue()) {
295  $page->drawText(__('Customs Value'), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8');
296  }
297  $page->drawText(__('Qty Ordered'), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8');
298  $page->drawText(__('Qty'), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8');
299 
300  $i = 0;
301  foreach ($package->getItems() as $itemId => $item) {
302  $item = new \Magento\Framework\DataObject($item);
303  $i = 0;
304 
305  $page->setFillColor(new \Zend_Pdf_Color_GrayScale(1));
306  $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsX[++$i], $this->y - 15);
307  $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsX[++$i], $this->y - 15);
308  $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsX[++$i], $this->y - 15);
309  $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsX[++$i], $this->y - 15);
310  $page->drawRectangle($itemCollsX[$i], $this->y - 3, $itemCollsXEnd, $this->y - 15);
311 
312  $this->y = $this->y - 12;
313  $i = 0;
314  $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0));
315  $page->drawText($item->getName(), $itemCollsX[$i] + $txtIndent, $this->y, 'UTF-8');
316  $page->drawText($item->getWeight(), $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8');
317  if ($packaging->displayCustomsValue()) {
318  $page->drawText(
319  $packaging->displayPrice($item->getCustomsValue()),
320  $itemCollsX[++$i] + $txtIndent,
321  $this->y,
322  'UTF-8'
323  );
324  }
325  $page->drawText(
326  $packaging->getQtyOrderedItem($item->getOrderItemId()),
327  $itemCollsX[++$i] + $txtIndent,
328  $this->y,
329  'UTF-8'
330  );
331  $page->drawText($item->getQty() * 1, $itemCollsX[++$i] + $txtIndent, $this->y, 'UTF-8');
332  }
333  $this->y = $this->y - 30;
334  }
335  return $this;
336  }
337 }
$storeManager
__()
Definition: __.php:13
$page
Definition: pages.php:8
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE]
Definition: website.php:18
__construct(\Magento\Payment\Helper\Data $paymentData, \Magento\Framework\Stdlib\StringUtils $string, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Framework\Filesystem $filesystem, \Magento\Sales\Model\Order\Pdf\Config $pdfConfig, \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory, \Magento\Sales\Model\Order\Pdf\ItemsFactory $pdfItemsFactory, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation, \Magento\Sales\Model\Order\Address\Renderer $addressRenderer, Carrier $carrierHelper, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\View\LayoutInterface $layout, \Magento\Framework\Locale\ResolverInterface $localeResolver, array $data=[])
Definition: Packaging.php:56
$filesystem
$i
Definition: gallery.phtml:31
foreach($order->getItems() as $orderItem) $shipment