12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- <?php
- /**
- * @copyright Vertex. All rights reserved. https://www.vertexinc.com/
- * @author Mediotype https://www.mediotype.com/
- */
- namespace Vertex\Tax\Model\Request;
- use Magento\Quote\Api\Data\AddressInterface;
- use Vertex\Data\LineItemInterface;
- use Vertex\Data\LineItemInterfaceFactory;
- use Vertex\Tax\Model\Calculation\VertexCalculator;
- use Vertex\Tax\Model\Config;
- use Vertex\Tax\Model\Repository\TaxClassNameRepository;
- /**
- * Shipping data formatter for Vertex API Calls
- */
- class Shipping
- {
- const LINE_ITEM_ID = VertexCalculator::VERTEX_SHIPPING_LINE_ITEM_ID;
- /** @var Config */
- private $config;
- /** @var LineItemInterfaceFactory */
- private $lineItemFactory;
- /** @var TaxClassNameRepository */
- private $taxClassNameRepository;
- /**
- * @param Config $config
- * @param TaxClassNameRepository $taxClassNameRepository
- * @param LineItemInterfaceFactory $lineItemFactory
- */
- public function __construct(
- Config $config,
- TaxClassNameRepository $taxClassNameRepository,
- LineItemInterfaceFactory $lineItemFactory
- ) {
- $this->config = $config;
- $this->taxClassNameRepository = $taxClassNameRepository;
- $this->lineItemFactory = $lineItemFactory;
- }
- /**
- * Create properly formatted Line Item data for the Order Shipping
- *
- * @param AddressInterface $taxAddress
- * @param string|null $scopeCode
- * @return LineItemInterface
- */
- public function getFormattedShippingLineItemData(AddressInterface $taxAddress, $scopeCode = null)
- {
- /** @var LineItemInterface $item */
- $item = $this->lineItemFactory->create();
- $item->setProductCode(substr($taxAddress->getShippingMethod(), 0, Config::MAX_CHAR_PRODUCT_CODE_ALLOWED));
- $item->setProductClass(
- substr(
- $this->taxClassNameRepository->getById(
- $this->config->getShippingTaxClassId($scopeCode)
- ),
- 0,
- Config::MAX_CHAR_PRODUCT_CODE_ALLOWED
- )
- );
- $item->setQuantity(1);
- $rate = $taxAddress->getShippingRateByCode($taxAddress->getShippingMethod());
- if (!$rate && $taxAddress->getShippingMethod()) {
- $taxAddress->setCollectShippingRates(true)->collectShippingRates();
- }
- foreach ($taxAddress->getAllShippingRates() as $rateCandidate) {
- if ($rateCandidate->getCode() === $taxAddress->getShippingMethod()) {
- $rate = $rateCandidate;
- break;
- }
- }
- $unitPrice = $rate ? $rate->getPrice() : 0;
- $extendedPrice = $unitPrice ? $unitPrice - $taxAddress->getBaseShippingDiscountAmount() : 0;
- $item->setUnitPrice($unitPrice);
- $item->setExtendedPrice($extendedPrice);
- $item->setLineItemId(static::LINE_ITEM_ID);
- return $item;
- }
- }
|