123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- <?php
- namespace Vertex\Tax\Model\Api\Data\InvoiceRequestBuilder;
- use Magento\Sales\Api\Data\OrderExtensionInterface;
- use Magento\Sales\Api\Data\OrderInterface;
- use Magento\Sales\Api\Data\OrderItemInterface;
- use Vertex\Data\LineItemInterface;
- use Vertex\Data\LineItemInterfaceFactory;
- use Vertex\Services\Invoice\RequestInterface;
- use Vertex\Tax\Model\Config;
- use Vertex\Tax\Model\ModuleManager;
- use Vertex\Tax\Model\Repository\TaxClassNameRepository;
- /**
- * Processes Giftwrapping and printed cards on an Order and converts them to a LineItemInterface
- */
- class OrderGiftwrapProcessor implements OrderProcessorInterface
- {
- /** @var TaxClassNameRepository */
- private $classNameRepository;
- /** @var Config */
- private $config;
- /** @var LineItemInterfaceFactory */
- private $lineItemFactory;
- /** @var ModuleManager */
- private $moduleManager;
- /**
- * @param ModuleManager $moduleManager
- * @param Config $config
- * @param TaxClassNameRepository $classNameRepository
- * @param LineItemInterfaceFactory $lineItemFactory
- */
- public function __construct(
- ModuleManager $moduleManager,
- Config $config,
- TaxClassNameRepository $classNameRepository,
- LineItemInterfaceFactory $lineItemFactory
- ) {
- $this->moduleManager = $moduleManager;
- $this->config = $config;
- $this->classNameRepository = $classNameRepository;
- $this->lineItemFactory = $lineItemFactory;
- }
- /**
- * @inheritdoc
- */
- public function process(RequestInterface $request, OrderInterface $order)
- {
- $lineItems = $request->getLineItems();
- $extensionAttributes = $order->getExtensionAttributes();
- if ($extensionAttributes === null || !$this->moduleManager->isEnabled('Magento_GiftWrapping')) {
- return $request;
- }
- $orderGiftWrap = $this->processOrderGiftWrap($extensionAttributes, $order->getStoreId());
- if ($orderGiftWrap) {
- $lineItems[] = $orderGiftWrap;
- }
- $orderGiftcard = $this->processOrderGiftCard($extensionAttributes, $order->getStoreId());
- if ($orderGiftcard) {
- $lineItems[] = $orderGiftcard;
- }
- foreach ($order->getItems() as $orderItem) {
- $orderItemGiftWrap = $this->processItemGiftWrap($orderItem, $order->getStoreId());
- if ($orderItemGiftWrap) {
- $lineItems[] = $orderItemGiftWrap;
- }
- }
- $request->setLineItems($lineItems);
- return $request;
- }
- /**
- * Create a LineItem for giftwrap if present on an Order Item
- *
- * @param OrderItemInterface $item
- * @param string $storeId
- * @return null|LineItemInterface
- */
- private function processItemGiftWrap(OrderItemInterface $item, $storeId)
- {
- $itemExtension = $item->getExtensionAttributes();
- if ($itemExtension === null || (float)$itemExtension->getGwBasePrice() === 0.0) {
- return null;
- }
- $productCode = $this->config->getGiftWrappingItemCodePrefix($storeId) . $item->getSku();
- $productClass = $this->classNameRepository->getById($this->config->getGiftWrappingItemClass($storeId));
- /** @var LineItemInterface $lineItem */
- $lineItem = $this->lineItemFactory->create();
- $lineItem->setProductCode($productCode);
- $lineItem->setProductClass($productClass);
- $lineItem->setQuantity(1);
- $lineItem->setUnitPrice((float)$itemExtension->getGwBasePrice());
- $lineItem->setExtendedPrice((float)$itemExtension->getGwBasePrice());
- return $lineItem;
- }
- /**
- * Create a LineItem for a printed giftcard if present on an Order
- *
- * @param OrderExtensionInterface $orderExtension
- * @param string $storeId
- * @return null|LineItemInterface
- */
- private function processOrderGiftCard(OrderExtensionInterface $orderExtension, $storeId)
- {
- if ((float)$orderExtension->getGwCardBasePrice() === 0.0) {
- return null;
- }
- $productCode = $this->config->getPrintedGiftcardCode($storeId);
- $productClass = $this->classNameRepository->getById($this->config->getPrintedGiftcardClass($storeId));
- /** @var LineItemInterface $lineItem */
- $lineItem = $this->lineItemFactory->create();
- $lineItem->setProductCode($productCode);
- $lineItem->setProductClass($productClass);
- $lineItem->setQuantity(1);
- $lineItem->setUnitPrice((float)$orderExtension->getGwCardBasePrice());
- $lineItem->setExtendedPrice((float)$orderExtension->getGwCardBasePrice());
- return $lineItem;
- }
- /**
- * Create a LineItem for giftwrap if present on an Order
- *
- * @param OrderExtensionInterface $orderExtension
- * @param string $storeId
- * @return null|LineItemInterface
- */
- private function processOrderGiftWrap(OrderExtensionInterface $orderExtension, $storeId)
- {
- if ((float)$orderExtension->getGwBasePrice() === 0.0) {
- return null;
- }
- $productCode = $this->config->getGiftWrappingOrderCode($storeId);
- $productClass = $this->classNameRepository->getById($this->config->getGiftWrappingOrderClass($storeId));
- /** @var LineItemInterface $lineItem */
- $lineItem = $this->lineItemFactory->create();
- $lineItem->setProductCode($productCode);
- $lineItem->setProductClass($productClass);
- $lineItem->setQuantity(1);
- $lineItem->setUnitPrice((float)$orderExtension->getGwBasePrice());
- $lineItem->setExtendedPrice((float)$orderExtension->getGwBasePrice());
- return $lineItem;
- }
- }
|