OrderGiftwrapProcessor.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. namespace Vertex\Tax\Model\Api\Data\InvoiceRequestBuilder;
  3. use Magento\Sales\Api\Data\OrderExtensionInterface;
  4. use Magento\Sales\Api\Data\OrderInterface;
  5. use Magento\Sales\Api\Data\OrderItemInterface;
  6. use Vertex\Data\LineItemInterface;
  7. use Vertex\Data\LineItemInterfaceFactory;
  8. use Vertex\Services\Invoice\RequestInterface;
  9. use Vertex\Tax\Model\Config;
  10. use Vertex\Tax\Model\ModuleManager;
  11. use Vertex\Tax\Model\Repository\TaxClassNameRepository;
  12. /**
  13. * Processes Giftwrapping and printed cards on an Order and converts them to a LineItemInterface
  14. */
  15. class OrderGiftwrapProcessor implements OrderProcessorInterface
  16. {
  17. /** @var TaxClassNameRepository */
  18. private $classNameRepository;
  19. /** @var Config */
  20. private $config;
  21. /** @var LineItemInterfaceFactory */
  22. private $lineItemFactory;
  23. /** @var ModuleManager */
  24. private $moduleManager;
  25. /**
  26. * @param ModuleManager $moduleManager
  27. * @param Config $config
  28. * @param TaxClassNameRepository $classNameRepository
  29. * @param LineItemInterfaceFactory $lineItemFactory
  30. */
  31. public function __construct(
  32. ModuleManager $moduleManager,
  33. Config $config,
  34. TaxClassNameRepository $classNameRepository,
  35. LineItemInterfaceFactory $lineItemFactory
  36. ) {
  37. $this->moduleManager = $moduleManager;
  38. $this->config = $config;
  39. $this->classNameRepository = $classNameRepository;
  40. $this->lineItemFactory = $lineItemFactory;
  41. }
  42. /**
  43. * @inheritdoc
  44. */
  45. public function process(RequestInterface $request, OrderInterface $order)
  46. {
  47. $lineItems = $request->getLineItems();
  48. $extensionAttributes = $order->getExtensionAttributes();
  49. if ($extensionAttributes === null || !$this->moduleManager->isEnabled('Magento_GiftWrapping')) {
  50. return $request;
  51. }
  52. $orderGiftWrap = $this->processOrderGiftWrap($extensionAttributes, $order->getStoreId());
  53. if ($orderGiftWrap) {
  54. $lineItems[] = $orderGiftWrap;
  55. }
  56. $orderGiftcard = $this->processOrderGiftCard($extensionAttributes, $order->getStoreId());
  57. if ($orderGiftcard) {
  58. $lineItems[] = $orderGiftcard;
  59. }
  60. foreach ($order->getItems() as $orderItem) {
  61. $orderItemGiftWrap = $this->processItemGiftWrap($orderItem, $order->getStoreId());
  62. if ($orderItemGiftWrap) {
  63. $lineItems[] = $orderItemGiftWrap;
  64. }
  65. }
  66. $request->setLineItems($lineItems);
  67. return $request;
  68. }
  69. /**
  70. * Create a LineItem for giftwrap if present on an Order Item
  71. *
  72. * @param OrderItemInterface $item
  73. * @param string $storeId
  74. * @return null|LineItemInterface
  75. */
  76. private function processItemGiftWrap(OrderItemInterface $item, $storeId)
  77. {
  78. $itemExtension = $item->getExtensionAttributes();
  79. if ($itemExtension === null || (float)$itemExtension->getGwBasePrice() === 0.0) {
  80. return null;
  81. }
  82. $productCode = $this->config->getGiftWrappingItemCodePrefix($storeId) . $item->getSku();
  83. $productClass = $this->classNameRepository->getById($this->config->getGiftWrappingItemClass($storeId));
  84. /** @var LineItemInterface $lineItem */
  85. $lineItem = $this->lineItemFactory->create();
  86. $lineItem->setProductCode($productCode);
  87. $lineItem->setProductClass($productClass);
  88. $lineItem->setQuantity(1);
  89. $lineItem->setUnitPrice((float)$itemExtension->getGwBasePrice());
  90. $lineItem->setExtendedPrice((float)$itemExtension->getGwBasePrice());
  91. return $lineItem;
  92. }
  93. /**
  94. * Create a LineItem for a printed giftcard if present on an Order
  95. *
  96. * @param OrderExtensionInterface $orderExtension
  97. * @param string $storeId
  98. * @return null|LineItemInterface
  99. */
  100. private function processOrderGiftCard(OrderExtensionInterface $orderExtension, $storeId)
  101. {
  102. if ((float)$orderExtension->getGwCardBasePrice() === 0.0) {
  103. return null;
  104. }
  105. $productCode = $this->config->getPrintedGiftcardCode($storeId);
  106. $productClass = $this->classNameRepository->getById($this->config->getPrintedGiftcardClass($storeId));
  107. /** @var LineItemInterface $lineItem */
  108. $lineItem = $this->lineItemFactory->create();
  109. $lineItem->setProductCode($productCode);
  110. $lineItem->setProductClass($productClass);
  111. $lineItem->setQuantity(1);
  112. $lineItem->setUnitPrice((float)$orderExtension->getGwCardBasePrice());
  113. $lineItem->setExtendedPrice((float)$orderExtension->getGwCardBasePrice());
  114. return $lineItem;
  115. }
  116. /**
  117. * Create a LineItem for giftwrap if present on an Order
  118. *
  119. * @param OrderExtensionInterface $orderExtension
  120. * @param string $storeId
  121. * @return null|LineItemInterface
  122. */
  123. private function processOrderGiftWrap(OrderExtensionInterface $orderExtension, $storeId)
  124. {
  125. if ((float)$orderExtension->getGwBasePrice() === 0.0) {
  126. return null;
  127. }
  128. $productCode = $this->config->getGiftWrappingOrderCode($storeId);
  129. $productClass = $this->classNameRepository->getById($this->config->getGiftWrappingOrderClass($storeId));
  130. /** @var LineItemInterface $lineItem */
  131. $lineItem = $this->lineItemFactory->create();
  132. $lineItem->setProductCode($productCode);
  133. $lineItem->setProductClass($productClass);
  134. $lineItem->setQuantity(1);
  135. $lineItem->setUnitPrice((float)$orderExtension->getGwBasePrice());
  136. $lineItem->setExtendedPrice((float)$orderExtension->getGwBasePrice());
  137. return $lineItem;
  138. }
  139. }