123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- <?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\Data\InvoiceInterface;
- use Magento\Sales\Api\Data\InvoiceItemExtensionFactory;
- use Magento\Sales\Api\Data\InvoiceItemInterface;
- use Magento\Sales\Api\InvoiceRepositoryInterface;
- use Vertex\Tax\Model\Config;
- use Vertex\Tax\Model\VertexTaxAttributeManager;
- /**
- * Plugin that adds Vertex Tax extension attributes when the Invoice Repository is called
- */
- class InvoiceRepositoryPlugin
- {
- /** @var VertexTaxAttributeManager */
- private $attributeManager;
- /** @var Config */
- private $config;
- /** @var InvoiceItemExtensionFactory */
- private $invoiceItemExtensionFactory;
- /**
- * @param VertexTaxAttributeManager $attributeManager
- * @param InvoiceItemExtensionFactory $invoiceItemExtensionFactory
- * @param Config $config
- */
- public function __construct(
- VertexTaxAttributeManager $attributeManager,
- InvoiceItemExtensionFactory $invoiceItemExtensionFactory,
- Config $config
- ) {
- $this->attributeManager = $attributeManager;
- $this->invoiceItemExtensionFactory = $invoiceItemExtensionFactory;
- $this->config = $config;
- }
- /**
- * Add Vertex extension attributes to an invoice's items after it is retrieved
- *
- * @param InvoiceRepositoryInterface $subject
- * @param InvoiceInterface $invoice
- * @return InvoiceInterface
- */
- public function afterGet(InvoiceRepositoryInterface $subject, InvoiceInterface $invoice)
- {
- if (!$this->config->isVertexActive($invoice->getStoreId())) {
- return $invoice;
- }
- $invoiceItems = $invoice->getItems();
- $orderItemIds = $this->getOrderItemIdsFromInvoiceItemList($invoiceItems);
- $taxCodes = $this->attributeManager->getTaxCodes($orderItemIds);
- $vertexTaxCodes = $this->attributeManager->getVertexTaxCodes($orderItemIds);
- $invoiceTextCodes = $this->attributeManager->getInvoiceTextCodes($orderItemIds);
- $this->setInvoiceItemVertexExtensionAttributes(
- $invoiceItems,
- $vertexTaxCodes,
- $invoiceTextCodes,
- $taxCodes
- );
- return $invoice;
- }
- /**
- * Retrieve the Order Item IDs from a list of Invoice Items
- *
- * @param InvoiceItemInterface[] $invoiceItems
- * @return int[]
- */
- private function getOrderItemIdsFromInvoiceItemList(array $invoiceItems)
- {
- return array_map(
- function (InvoiceItemInterface $invoiceItem) {
- return $invoiceItem->getOrderItemId();
- },
- $invoiceItems
- );
- }
- /**
- * Assign Invoice Item Vertex extension attributes to the Invoice Item object
- *
- * @param InvoiceItemInterface[] $invoiceItems
- * @param string<int>[] $vertexTaxCodes
- * @param string<int>[] $invoiceTextCodes
- * @param string<int>[] $taxCodes
- * @return void
- */
- private function setInvoiceItemVertexExtensionAttributes(
- array $invoiceItems,
- array $vertexTaxCodes,
- array $invoiceTextCodes,
- array $taxCodes
- ) {
- if ($invoiceItems === null) {
- return;
- }
- foreach ($invoiceItems as $invoiceItem) {
- $this->setVertexTaxCodes($invoiceItem, $vertexTaxCodes);
- $this->setInvoiceTextCodes($invoiceItem, $invoiceTextCodes);
- $this->setTaxCodes($invoiceItem, $taxCodes);
- }
- }
- /**
- * Set InvoiceTextCode extension attribute for Invoice Item
- *
- * @param InvoiceItemInterface $invoiceItem
- * @param string<int>[] $invoiceTextCodes
- * @return void
- */
- private function setInvoiceTextCodes(InvoiceItemInterface $invoiceItem, array $invoiceTextCodes)
- {
- $extensionAttributes = $invoiceItem->getExtensionAttributes();
- if ($extensionAttributes && $extensionAttributes->getInvoiceTextCodes()) {
- return;
- }
- if ($invoiceTextCodes !== null && array_key_exists($invoiceItem->getOrderItemId(), $invoiceTextCodes)) {
- $extensionAttributes = $extensionAttributes ?: $this->invoiceItemExtensionFactory->create();
- $extensionAttributes->setInvoiceTextCodes($invoiceTextCodes[$invoiceItem->getOrderItemId()]);
- $invoiceItem->setExtensionAttributes($extensionAttributes);
- }
- }
- /**
- * Set the TaxCode extension attribute for an Invoice Item
- *
- * @param InvoiceItemInterface $invoiceItem
- * @param string<int>[] $taxCodes
- * @return void
- */
- private function setTaxCodes(InvoiceItemInterface $invoiceItem, array $taxCodes)
- {
- $extensionAttributes = $invoiceItem->getExtensionAttributes();
- if ($extensionAttributes && $extensionAttributes->getTaxCodes()) {
- return;
- }
- if ($taxCodes !== null && array_key_exists($invoiceItem->getOrderItemId(), $taxCodes)) {
- $extensionAttributes = $extensionAttributes ?: $this->invoiceItemExtensionFactory->create();
- $extensionAttributes->setTaxCodes($taxCodes[$invoiceItem->getOrderItemId()]);
- $invoiceItem->setExtensionAttributes($extensionAttributes);
- }
- }
- /**
- * Set the VertexTaxCode extension attribute for an Invoice Item
- *
- * @param InvoiceItemInterface $invoiceItem
- * @param string<int>[] $vertexTaxCodes
- * @return void
- */
- private function setVertexTaxCodes(InvoiceItemInterface $invoiceItem, array $vertexTaxCodes)
- {
- $extensionAttributes = $invoiceItem->getExtensionAttributes();
- if ($extensionAttributes && $extensionAttributes->getVertexTaxCodes()) {
- return;
- }
- if ($vertexTaxCodes !== null && array_key_exists($invoiceItem->getOrderItemId(), $vertexTaxCodes)) {
- $extensionAttributes = $extensionAttributes ?: $this->invoiceItemExtensionFactory->create();
- $extensionAttributes->setVertexTaxCodes($vertexTaxCodes[$invoiceItem->getOrderItemId()]);
- $invoiceItem->setExtensionAttributes($extensionAttributes);
- }
- }
- }
|