123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- <?php
- /**
- * @copyright Vertex. All rights reserved. https://www.vertexinc.com/
- * @author Mediotype https://www.mediotype.com/
- */
- namespace Vertex\Tax\Model\Plugin;
- use Magento\Sales\Api\CreditmemoRepositoryInterface;
- use Magento\Sales\Api\Data\CreditmemoInterface;
- use Magento\Sales\Api\Data\CreditmemoItemExtensionFactory;
- use Magento\Sales\Api\Data\CreditmemoItemInterface;
- use Magento\Sales\Api\Data\CreditmemoSearchResultInterface;
- use Vertex\Tax\Model\Config;
- use Vertex\Tax\Model\VertexTaxAttributeManager;
- /**
- * Plugin that adds Vertex Tax extension attributes when Creditmemo Repository called
- */
- class CreditmemoRepositoryPlugin
- {
- /** @var VertexTaxAttributeManager */
- private $attributeManager;
- /** @var Config */
- private $config;
- /** @var OrderItemExtensionFactory */
- private $creditmemoItemExtensionFactory;
- /**
- * @param VertexTaxAttributeManager $attributeManager
- * @param CreditmemoItemExtensionFactory $creditmemoItemExtensionFactory
- * @param Config $config
- */
- public function __construct(
- VertexTaxAttributeManager $attributeManager,
- CreditmemoItemExtensionFactory $creditmemoItemExtensionFactory,
- Config $config
- ) {
- $this->creditmemoItemExtensionFactory = $creditmemoItemExtensionFactory;
- $this->attributeManager = $attributeManager;
- $this->config = $config;
- }
- /**
- * Add Vertex extension attributes to creditmemo items after retrieval of a creditmemo
- *
- * @param CreditmemoRepositoryInterface $subject
- * @param CreditmemoInterface $resultCreditmemo
- * @return CreditmemoInterface
- */
- public function afterGet(CreditmemoRepositoryInterface $subject, CreditmemoInterface $resultCreditmemo)
- {
- if (!$this->config->isVertexActive($resultCreditmemo->getStoreId())) {
- return $resultCreditmemo;
- }
- $creditmemoItems = $resultCreditmemo->getItems();
- $orderItemIds = $this->getOrderItemIdsFromCreditmemoItemList($creditmemoItems);
- $taxCodes = $this->attributeManager->getTaxCodes($orderItemIds);
- $vertexTaxCodes = $this->attributeManager->getVertexTaxCodes($orderItemIds);
- $invoiceTextCodes = $this->attributeManager->getInvoiceTextCodes($orderItemIds);
- $this->setCreditmemoItemVertexExtensionAttributes(
- $creditmemoItems,
- $vertexTaxCodes,
- $invoiceTextCodes,
- $taxCodes
- );
- return $resultCreditmemo;
- }
- /**
- * Add Vertex extension attributes to creditmemo items after retrieval of a list of creditmemos
- *
- * @param CreditmemoRepositoryInterface $subject
- * @param CreditmemoSearchResultInterface $searchResult
- * @return CreditmemoSearchResultInterface
- */
- public function afterGetList(
- CreditmemoRepositoryInterface $subject,
- CreditmemoSearchResultInterface $searchResult
- ) {
- $creditmemoList = array_filter(
- $searchResult->getItems(),
- function (CreditmemoInterface $creditmemo) {
- return $this->config->isVertexActive($creditmemo->getStoreId());
- }
- );
- if (count($creditmemoList) < 1) {
- return $searchResult;
- }
- $creditmemoItems = array_reduce(
- $creditmemoList,
- function (array $carry, CreditmemoInterface $creditmemo) {
- return array_merge($carry, $creditmemo->getItems() !== null ? $creditmemo->getItems() : []);
- },
- []
- );
- $orderItemIds = $this->getOrderItemIdsFromCreditmemoItemList($creditmemoItems);
- if ($orderItemIds !== null) {
- $taxCodes = $this->attributeManager->getTaxCodes($orderItemIds);
- $vertexTaxCodes = $this->attributeManager->getVertexTaxCodes($orderItemIds);
- $invoiceTextCodes = $this->attributeManager->getInvoiceTextCodes($orderItemIds);
- $this->setCreditmemoItemVertexExtensionAttributes(
- $creditmemoItems,
- $vertexTaxCodes,
- $invoiceTextCodes,
- $taxCodes
- );
- }
- return $searchResult;
- }
- /**
- * Get Order Item Id from Creditmemo Item
- *
- * @param CreditmemoItemInterface[] $creditmemoItemArray
- * @return int[]
- */
- private function getOrderItemIdsFromCreditmemoItemList(array $creditmemoItemArray)
- {
- return array_map(
- function (CreditmemoItemInterface $item) {
- return $item->getOrderItemId();
- },
- $creditmemoItemArray
- );
- }
- /**
- * Set Creditmemo Item Vertex extension attributes to Creditmemo object
- *
- * @param $creditmemoItems
- * @param string[] $vertexTaxCodes
- * @param string[] $invoiceTextCodes
- * @param string[] $taxCodes
- * @return void
- */
- private function setCreditmemoItemVertexExtensionAttributes(
- $creditmemoItems,
- array $vertexTaxCodes,
- array $invoiceTextCodes,
- array $taxCodes
- ) {
- if (null !== $creditmemoItems) {
- foreach ($creditmemoItems as $creditmemoItem) {
- $this->setVertexTaxCodes($creditmemoItem, $vertexTaxCodes);
- $this->setInvoiceTextCodes($creditmemoItem, $invoiceTextCodes);
- $this->setTaxCodes($creditmemoItem, $taxCodes);
- }
- }
- }
- /**
- * Set Invoice Text Code extension attribute for Creditmemo Item
- *
- * @param CreditmemoItemInterface $creditmemoItem
- * @param string<int>[] $invoiceTextCodes
- * @return void
- */
- private function setInvoiceTextCodes(CreditmemoItemInterface $creditmemoItem, array $invoiceTextCodes)
- {
- $extensionAttributes = $creditmemoItem->getExtensionAttributes();
- if ($extensionAttributes && $extensionAttributes->getInvoiceTextCodes()) {
- return;
- }
- if ($invoiceTextCodes !== null && array_key_exists(
- $creditmemoItem->getOrderItemId(),
- $invoiceTextCodes
- )) {
- $creditmemoItemExtension = $extensionAttributes ?: $this->creditmemoItemExtensionFactory->create();
- $creditmemoItemExtension->setInvoiceTextCodes($invoiceTextCodes[$creditmemoItem->getOrderItemId()]);
- $creditmemoItem->setExtensionAttributes($creditmemoItemExtension);
- }
- }
- /**
- * Set Tax Code extension attribute for Creditmemo Item
- *
- * @param CreditmemoItemInterface $creditmemoItem
- * @param string<int>[] $taxCodes
- * @return void
- */
- private function setTaxCodes(CreditmemoItemInterface $creditmemoItem, array $taxCodes)
- {
- $extensionAttributes = $creditmemoItem->getExtensionAttributes();
- if ($extensionAttributes && $extensionAttributes->getTaxCodes()) {
- return;
- }
- if ($taxCodes !== null && array_key_exists($creditmemoItem->getOrderItemId(), $taxCodes)) {
- $creditmemoItemExtension = $extensionAttributes ?: $this->creditmemoItemExtensionFactory->create();
- $creditmemoItemExtension->setTaxCodes($taxCodes[$creditmemoItem->getOrderItemId()]);
- $creditmemoItem->setExtensionAttributes($creditmemoItemExtension);
- }
- }
- /**
- * Set Vertex Tax Code extension attribute for Creditmemo Item
- *
- * @param CreditmemoItemInterface $creditmemoItem
- * @param string<int>[] $vertexTaxCodes
- * @return void
- */
- private function setVertexTaxCodes(CreditmemoItemInterface $creditmemoItem, array $vertexTaxCodes)
- {
- $extensionAttributes = $creditmemoItem->getExtensionAttributes();
- if ($extensionAttributes && $extensionAttributes->getVertexTaxCodes()) {
- return;
- }
- if ($vertexTaxCodes !== null && array_key_exists($creditmemoItem->getOrderItemId(), $vertexTaxCodes)) {
- $creditmemoItemExtension = $extensionAttributes ?: $this->creditmemoItemExtensionFactory->create();
- $creditmemoItemExtension->setVertexTaxCodes($vertexTaxCodes[$creditmemoItem->getOrderItemId()]);
- $creditmemoItem->setExtensionAttributes($creditmemoItemExtension);
- }
- }
- }
|