VertexTaxAttributeManager.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. /**
  3. * @copyright Vertex. All rights reserved. https://www.vertexinc.com/
  4. * @author Mediotype https://www.mediotype.com/
  5. */
  6. namespace Vertex\Tax\Model;
  7. use Vertex\Data\LineItemInterface;
  8. use Vertex\Tax\Model\ResourceModel\InvoiceTextCode as InvoiceTextCodeResource;
  9. use Vertex\Tax\Model\ResourceModel\TaxCode as TaxCodeResource;
  10. use Vertex\Tax\Model\ResourceModel\VertexTaxCode as VertexTaxCodeResource;
  11. /**
  12. * Attribute Manager class for helping to save and retrieve Vertex attributes
  13. */
  14. class VertexTaxAttributeManager
  15. {
  16. /** @var InvoiceTextCodeResource */
  17. private $invoiceTextCodeResource;
  18. /** @var TaxCodeResource */
  19. private $taxCodeResource;
  20. /** @var VertexTaxCodeResource */
  21. private $vertexTaxCodeResource;
  22. /**
  23. * @param InvoiceTextCodeResource $invoiceTextCodeResource
  24. * @param TaxCodeResource $taxCodeResource
  25. * @param VertexTaxCodeResource $vertexTaxCodeResource
  26. */
  27. public function __construct(
  28. InvoiceTextCodeResource $invoiceTextCodeResource,
  29. TaxCodeResource $taxCodeResource,
  30. VertexTaxCodeResource $vertexTaxCodeResource
  31. ) {
  32. $this->invoiceTextCodeResource = $invoiceTextCodeResource;
  33. $this->taxCodeResource = $taxCodeResource;
  34. $this->vertexTaxCodeResource = $vertexTaxCodeResource;
  35. }
  36. /**
  37. * Get Invoice Text Codes array
  38. *
  39. * @param int[] $itemIdArray
  40. * @return string[]
  41. */
  42. public function getInvoiceTextCodes(array $itemIdArray)
  43. {
  44. return $this->invoiceTextCodeResource->getInvoiceTextCodeByItemIdArray($itemIdArray);
  45. }
  46. /**
  47. * Get Tax Codes array
  48. *
  49. * @param int[] $itemIdArray
  50. * @return string[]
  51. */
  52. public function getTaxCodes(array $itemIdArray)
  53. {
  54. return $this->taxCodeResource->getTaxCodeByItemIdArray($itemIdArray);
  55. }
  56. /**
  57. * Get Vertex Tax Codes array
  58. *
  59. * @param int[] $itemIdArray
  60. * @return string[]
  61. */
  62. public function getVertexTaxCodes(array $itemIdArray)
  63. {
  64. return $this->vertexTaxCodeResource->getVertexTaxCodeByItemIdArray($itemIdArray);
  65. }
  66. /**
  67. * Store all Vertex Attributes from Vertex API response
  68. *
  69. * @param LineItemInterface[] $items
  70. * @return void
  71. */
  72. public function saveAllVertexAttributes(array $items)
  73. {
  74. $this->setInvoiceTextCodes($items);
  75. $this->setTaxCodes($items);
  76. $this->setVertexTaxCodes($items);
  77. }
  78. /**
  79. * Store Invoice Text Codes
  80. *
  81. * @param LineItemInterface[] $itemsArray
  82. * @return void
  83. */
  84. public function setInvoiceTextCodes(array $itemsArray)
  85. {
  86. $insertData = [];
  87. foreach ($itemsArray as $item) {
  88. if ($id = $item->getLineItemId()) {
  89. $taxArray = $item->getTaxes();
  90. foreach ($taxArray as $tax) {
  91. if ($invoiceTextCode = $tax->getInvoiceTextCodes()) {
  92. if ($invoiceTextCode !== null) {
  93. foreach ($invoiceTextCode as $taxItem) {
  94. $insertData[$id][] = [
  95. InvoiceTextCodeResource::FIELD_ID => $id,
  96. InvoiceTextCodeResource::FIELD_CODE => $taxItem
  97. ];
  98. $insertData[$id] = array_unique($insertData[$id], SORT_REGULAR);
  99. }
  100. } else {
  101. $insertData[$id][] = [
  102. InvoiceTextCodeResource::FIELD_ID => $id,
  103. InvoiceTextCodeResource::FIELD_CODE => $invoiceTextCode
  104. ];
  105. $insertData[$id] = array_unique($insertData[$id], SORT_REGULAR);
  106. }
  107. }
  108. }
  109. }
  110. }
  111. if (count($insertData)) {
  112. $this->invoiceTextCodeResource->saveMultiple($insertData);
  113. }
  114. }
  115. /**
  116. * Store Tax Coxdes
  117. *
  118. * @param LineItemInterface[] $items
  119. * @return void
  120. */
  121. public function setTaxCodes(array $itemsArray)
  122. {
  123. $insertData = [];
  124. foreach ($itemsArray as $item) {
  125. if ($id = $item->getLineItemId()) {
  126. $taxArray = $item->getTaxes();
  127. foreach ($taxArray as $tax) {
  128. if (!$tax->getTaxCode()) {
  129. continue;
  130. }
  131. $insertData[$id][] = [
  132. TaxCodeResource::FIELD_ID => $id,
  133. TaxCodeResource::FIELD_TAX_CODE => $tax->getTaxCode()
  134. ];
  135. $insertData[$id] = array_unique($insertData[$id], SORT_REGULAR);
  136. }
  137. }
  138. }
  139. if (count($insertData)) {
  140. $this->taxCodeResource->saveMultiple($insertData);
  141. }
  142. }
  143. /**
  144. * Store Vertex Tax Codes
  145. *
  146. * @param LineItemInterface[] $itemsArray
  147. * @return void
  148. */
  149. public function setVertexTaxCodes(array $itemsArray)
  150. {
  151. $insertData = [];
  152. foreach ($itemsArray as $item) {
  153. if ($id = $item->getLineItemId()) {
  154. $taxArray = $item->getTaxes();
  155. foreach ($taxArray as $tax) {
  156. if (!$tax->getVertexTaxCode()) {
  157. continue;
  158. }
  159. $insertData[$id][] = [
  160. VertexTaxCodeResource::FIELD_ID => $id,
  161. VertexTaxCodeResource::FIELD_VERTEX_TAX_CODE => $tax->getVertexTaxCode()
  162. ];
  163. $insertData[$id] = array_unique($insertData[$id], SORT_REGULAR);
  164. }
  165. }
  166. }
  167. if (count($insertData)) {
  168. $this->vertexTaxCodeResource->saveMultiple($insertData);
  169. }
  170. }
  171. }