123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <?php
- /**
- * @copyright Vertex. All rights reserved. https://www.vertexinc.com/
- * @author Mediotype https://www.mediotype.com/
- */
- namespace Vertex\Tax\Model\Api\Data\InvoiceRequestBuilder;
- use Magento\Sales\Api\Data\CreditmemoInterface;
- use Magento\Sales\Api\Data\CreditmemoItemInterface;
- use Vertex\Data\LineItemInterface;
- use Vertex\Services\Invoice\RequestInterface;
- use Vertex\Tax\Model\ModuleManager;
- /**
- * Processes Giftwrapping and printed cards on a Creditmemo and converts them to a LineItemInterface
- */
- class CreditmemoGiftwrapProcessor implements CreditmemoProcessorInterface
- {
- /** @var GiftWrapProcessor */
- private $giftWrapProcessor;
- /** @var ModuleManager */
- private $moduleManager;
- /**
- * @param ModuleManager $moduleManager
- * @param GiftWrapProcessor $giftWrapProcessor
- */
- public function __construct(
- ModuleManager $moduleManager,
- GiftWrapProcessor $giftWrapProcessor
- ) {
- $this->moduleManager = $moduleManager;
- $this->giftWrapProcessor = $giftWrapProcessor;
- }
- /**
- * @inheritdoc
- */
- public function process(RequestInterface $request, CreditmemoInterface $creditmemo)
- {
- $lineItems = $request->getLineItems();
- $extensionAttributes = $creditmemo->getExtensionAttributes();
- if ($extensionAttributes === null || !$this->moduleManager->isEnabled('Magento_GiftWrapping')) {
- return $request;
- }
- // Order-level Gift Wrapping
- $orderGiftWrap = $this->giftWrapProcessor->processOrderGiftWrap(
- $extensionAttributes->getGwBasePrice(),
- $creditmemo->getStoreId()
- );
- if ($orderGiftWrap) {
- $orderGiftWrap->setUnitPrice($orderGiftWrap->getUnitPrice() * -1);
- $orderGiftWrap->setExtendedPrice($orderGiftWrap->getExtendedPrice() * -1);
- $lineItems[] = $orderGiftWrap;
- }
- // Order-level Printed Card
- $orderGiftcard = $this->giftWrapProcessor->processOrderGiftCard(
- $extensionAttributes->getGwCardBasePrice(),
- $creditmemo->getStoreId()
- );
- if ($orderGiftcard) {
- $orderGiftcard->setUnitPrice($orderGiftcard->getUnitPrice() * -1);
- $orderGiftcard->setExtendedPrice($orderGiftcard->getExtendedPrice() * -1);
- $lineItems[] = $orderGiftcard;
- }
- // Item-level Gift Wrapping
- $lineItems = array_merge($lineItems, $this->processItems($creditmemo));
- $request->setLineItems($lineItems);
- return $request;
- }
- /**
- * Create LineItems for each individual item-level gift wrap
- *
- * @param CreditmemoInterface $creditmemo
- * @return LineItemInterface[]
- */
- private function processItems(CreditmemoInterface $creditmemo)
- {
- /** @var LineItemInterface[] $lineItems */
- $lineItems = [];
- if ($creditmemo->getExtensionAttributes() === null) {
- return $lineItems;
- }
- /** @var CreditmemoItemInterface[] $creditmemoItems Indexed by Order Item ID */
- $creditmemoItems = [];
- /** @var int[] $orderItemIds */
- $orderItemIds = [];
- foreach ($creditmemo->getItems() as $item) {
- if ($item->getQty() < 1) {
- continue;
- }
- $orderItemIds[] = $item->getOrderItemId();
- $creditmemoItems[$item->getOrderItemId()] = $item;
- }
- /** @var float[] $giftWrapAmounts Indexed by Order Item ID */
- $giftWrapAmounts = $this->giftWrapProcessor->getGiftWrapAmounts(
- $creditmemo->getOrderId(),
- $orderItemIds,
- (float)$creditmemo->getExtensionAttributes()->getGwItemsBasePrice()
- );
- foreach ($giftWrapAmounts as $orderItemId => $giftWrapAmount) {
- $lineItems[] = $this->giftWrapProcessor->buildItem(
- -1 * $giftWrapAmount,
- $creditmemoItems[$orderItemId]->getSku(),
- $creditmemo->getStoreId()
- );
- }
- return $lineItems;
- }
- }
|