| Current Path : /home/rtorresani/www/vendor/magento/module-sales/Model/Order/Pdf/Items/ |
| Current File : //home/rtorresani/www/vendor/magento/module-sales/Model/Order/Pdf/Items/AbstractItems.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Sales\Model\Order\Pdf\Items;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\Data\Collection\AbstractDb;
use Magento\Framework\DataObject;
use Magento\Framework\Filesystem;
use Magento\Framework\Filesystem\Directory\ReadInterface;
use Magento\Framework\Filter\FilterManager;
use Magento\Framework\Model\AbstractModel;
use Magento\Framework\Model\Context;
use Magento\Framework\Model\ResourceModel\AbstractResource;
use Magento\Framework\Registry;
use Magento\Sales\Model\Order;
use Magento\Sales\Model\Order\Pdf\AbstractPdf;
use Magento\Tax\Helper\Data as TaxHelper;
/**
* Sales Order Pdf Items renderer Abstract
*
* phpcs:disable Magento2.Classes.AbstractApi
* @api
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
* @since 100.0.2
*/
abstract class AbstractItems extends AbstractModel
{
/**
* Order model
*
* @var Order
*/
protected $_order;
/**
* Source model (invoice, shipment, creditmemo)
*
* @var AbstractModel
*/
protected $_source;
/**
* Item object
*
* @var DataObject
*/
protected $_item;
/**
* Pdf object
*
* @var AbstractPdf
*/
protected $_pdf;
/**
* Pdf current page
*
* @var \Zend_Pdf_Page
*/
protected $_pdfPage;
/**
* Tax data
*
* @var TaxHelper
*/
protected $_taxData;
/**
* @var ReadInterface
*/
protected $_rootDirectory;
/**
* @var FilterManager
*/
protected $filterManager;
/**
* @param Context $context
* @param Registry $registry
* @param TaxHelper $taxData
* @param Filesystem $filesystem ,
* @param FilterManager $filterManager
* @param AbstractResource $resource
* @param AbstractDb $resourceCollection
* @param array $data
*/
public function __construct(
Context $context,
Registry $registry,
TaxHelper $taxData,
Filesystem $filesystem,
FilterManager $filterManager,
AbstractResource $resource = null,
AbstractDb $resourceCollection = null,
array $data = []
) {
$this->filterManager = $filterManager;
$this->_taxData = $taxData;
$this->_rootDirectory = $filesystem->getDirectoryRead(DirectoryList::ROOT);
parent::__construct($context, $registry, $resource, $resourceCollection, $data);
}
/**
* Set order model
*
* @param Order $order
* @return $this
*/
public function setOrder(Order $order)
{
$this->_order = $order;
return $this;
}
/**
* Set Source model
*
* @param AbstractModel $source
* @return $this
*/
public function setSource(AbstractModel $source)
{
$this->_source = $source;
return $this;
}
/**
* Set item object
*
* @param DataObject $item
* @return $this
*/
public function setItem(DataObject $item)
{
$this->_item = $item;
return $this;
}
/**
* Set Pdf model
*
* @param AbstractPdf $pdf
* @return $this
*/
public function setPdf(AbstractPdf $pdf)
{
$this->_pdf = $pdf;
return $this;
}
/**
* Set current page
*
* @param \Zend_Pdf_Page $page
* @return $this
*/
public function setPage(\Zend_Pdf_Page $page)
{
$this->_pdfPage = $page;
return $this;
}
/**
* Retrieve order object
*
* @throws \Magento\Framework\Exception\LocalizedException
* @return \Magento\Sales\Model\Order
*/
public function getOrder()
{
if (null === $this->_order) {
throw new \Magento\Framework\Exception\LocalizedException(__('The order object is not specified.'));
}
return $this->_order;
}
/**
* Retrieve source object
*
* @throws \Magento\Framework\Exception\LocalizedException
* @return \Magento\Framework\Model\AbstractModel
*/
public function getSource()
{
if (null === $this->_source) {
throw new \Magento\Framework\Exception\LocalizedException(__('The source object is not specified.'));
}
return $this->_source;
}
/**
* Retrieve item object
*
* @throws \Magento\Framework\Exception\LocalizedException
* @return \Magento\Framework\DataObject
*/
public function getItem()
{
if (null === $this->_item) {
throw new \Magento\Framework\Exception\LocalizedException(__('An item object is not specified.'));
}
return $this->_item;
}
/**
* Retrieve Pdf model
*
* @throws \Magento\Framework\Exception\LocalizedException
* @return \Magento\Sales\Model\Order\Pdf\AbstractPdf
*/
public function getPdf()
{
if (null === $this->_pdf) {
throw new \Magento\Framework\Exception\LocalizedException(__('A PDF object is not specified.'));
}
return $this->_pdf;
}
/**
* Retrieve Pdf page object
*
* @throws \Magento\Framework\Exception\LocalizedException
* @return \Zend_Pdf_Page
*/
public function getPage()
{
if (null === $this->_pdfPage) {
throw new \Magento\Framework\Exception\LocalizedException(__('A PDF page object is not specified.'));
}
return $this->_pdfPage;
}
/**
* Draw item line
*
* @return void
*/
abstract public function draw();
/**
* Format option value process
*
* @param array|string $value
* @return string
*/
protected function _formatOptionValue($value)
{
$order = $this->getOrder();
$resultValue = '';
if (is_array($value)) {
if (isset($value['qty'])) {
$resultValue .= $this->filterManager->sprintf($value['qty'], ['format' => '%d']) . ' x ';
}
$resultValue .= $value['title'];
if (isset($value['price'])) {
$resultValue .= " " . $order->formatPrice($value['price']);
}
return $resultValue;
} else {
return $value;
}
}
/**
* Get array of arrays with item prices information for display in PDF
*
* Format: array(
* $index => array(
* 'label' => $label,
* 'price' => $price,
* 'subtotal' => $subtotal
* )
* )
*
* @return array
*/
public function getItemPricesForDisplay()
{
$order = $this->getOrder();
$item = $this->getItem();
if ($this->_taxData->displaySalesBothPrices()) {
$prices = [
[
'label' => __('Excl. Tax') . ':',
'price' => $order->formatPriceTxt($item->getPrice()),
'subtotal' => $order->formatPriceTxt($item->getRowTotal()),
],
[
'label' => __('Incl. Tax') . ':',
'price' => $order->formatPriceTxt($item->getPriceInclTax()),
'subtotal' => $order->formatPriceTxt($item->getRowTotalInclTax())
],
];
} elseif ($this->_taxData->displaySalesPriceInclTax()) {
$prices = [
[
'price' => $order->formatPriceTxt($item->getPriceInclTax()),
'subtotal' => $order->formatPriceTxt($item->getRowTotalInclTax()),
],
];
} else {
$prices = [
[
'price' => $order->formatPriceTxt($item->getPrice()),
'subtotal' => $order->formatPriceTxt($item->getRowTotal()),
],
];
}
return $prices;
}
/**
* Retrieve item options
*
* @return array
*/
public function getItemOptions()
{
$result = [];
$options = $this->getItem()->getOrderItem()->getProductOptions();
if ($options) {
if (isset($options['options'])) {
$result[] = $options['options'];
}
if (isset($options['additional_options'])) {
$result[] = $options['additional_options'];
}
if (isset($options['attributes_info'])) {
$result[] = $options['attributes_info'];
}
}
return array_merge([], ...$result);
}
/**
* Set font as regular
*
* @param int $size
* @return \Zend_Pdf_Resource_Font
*/
protected function _setFontRegular($size = 7)
{
$font = \Zend_Pdf_Font::fontWithPath(
$this->_rootDirectory->getAbsolutePath('lib/internal/GnuFreeFont/FreeSerif.ttf')
);
$this->getPage()->setFont($font, $size);
return $font;
}
/**
* Set font as bold
*
* @param int $size
* @return \Zend_Pdf_Resource_Font
*/
protected function _setFontBold($size = 7)
{
$font = \Zend_Pdf_Font::fontWithPath(
$this->_rootDirectory->getAbsolutePath('lib/internal/GnuFreeFont/FreeSerifBold.ttf')
);
$this->getPage()->setFont($font, $size);
return $font;
}
/**
* Set font as italic
*
* @param int $size
* @return \Zend_Pdf_Resource_Font
*/
protected function _setFontItalic($size = 7)
{
$font = \Zend_Pdf_Font::fontWithPath(
$this->_rootDirectory->getAbsolutePath('lib/internal/GnuFreeFont/FreeSerifItalic.ttf')
);
$this->getPage()->setFont($font, $size);
return $font;
}
/**
* Return item Sku
*
* @param mixed $item
* @return mixed
*/
public function getSku($item)
{
if ($item->getOrderItem()->getProductOptionByCode('simple_sku')) {
return $item->getOrderItem()->getProductOptionByCode('simple_sku');
} else {
return $item->getSku();
}
}
}