LogEntryRepository.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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\Repository;
  7. use Magento\Framework\Api\SearchCriteriaInterface;
  8. use Magento\Framework\Exception\CouldNotDeleteException;
  9. use Magento\Framework\Exception\CouldNotSaveException;
  10. use Vertex\Tax\Api\Data\LogEntryInterface;
  11. use Vertex\Tax\Api\Data\LogEntrySearchResultsInterface;
  12. use Vertex\Tax\Api\Data\LogEntrySearchResultsInterfaceFactory;
  13. use Vertex\Tax\Api\LogEntryRepositoryInterface;
  14. use Vertex\Tax\Model\CollectionProcessor;
  15. use Vertex\Tax\Model\Data\LogEntry;
  16. use Vertex\Tax\Model\Data\LogEntryFactory;
  17. use Vertex\Tax\Model\ResourceModel\LogEntry as ResourceModel;
  18. use Vertex\Tax\Model\ResourceModel\LogEntry\Collection;
  19. use Vertex\Tax\Model\ResourceModel\LogEntry\CollectionFactory;
  20. /**
  21. * Repository of Log Entries
  22. */
  23. class LogEntryRepository implements LogEntryRepositoryInterface
  24. {
  25. /** @var ResourceModel */
  26. private $resourceModel;
  27. /** @var LogEntryFactory */
  28. private $logEntryFactory;
  29. /** @var CollectionFactory */
  30. private $collectionFactory;
  31. /** @var LogEntrySearchResultsInterfaceFactory */
  32. private $searchResultsFactory;
  33. /** @var CollectionProcessor */
  34. private $collectionProcessor;
  35. /**
  36. * @param ResourceModel $resourceModel
  37. * @param LogEntryFactory $logEntryFactory
  38. * @param CollectionFactory $collectionFactory
  39. * @param LogEntrySearchResultsInterfaceFactory $searchResultsFactory
  40. * @param CollectionProcessor $collectionProcessor
  41. */
  42. public function __construct(
  43. ResourceModel $resourceModel,
  44. LogEntryFactory $logEntryFactory,
  45. CollectionFactory $collectionFactory,
  46. LogEntrySearchResultsInterfaceFactory $searchResultsFactory,
  47. CollectionProcessor $collectionProcessor
  48. ) {
  49. $this->resourceModel = $resourceModel;
  50. $this->logEntryFactory = $logEntryFactory;
  51. $this->collectionFactory = $collectionFactory;
  52. $this->searchResultsFactory = $searchResultsFactory;
  53. $this->collectionProcessor = $collectionProcessor;
  54. }
  55. /**
  56. * @inheritdoc
  57. */
  58. public function save(LogEntryInterface $logEntry)
  59. {
  60. $model = $this->mapDataIntoModel($logEntry);
  61. try {
  62. $this->resourceModel->save($model);
  63. } catch (\Exception $originalException) {
  64. throw new CouldNotSaveException(__('Could not save Log Entry'), $originalException);
  65. }
  66. return $this;
  67. }
  68. /**
  69. * @inheritdoc
  70. */
  71. public function getList(SearchCriteriaInterface $searchCriteria)
  72. {
  73. /** @var LogEntrySearchResultsInterface $searchResults */
  74. $searchResults = $this->searchResultsFactory->create();
  75. /** @var Collection $collection */
  76. $collection = $this->collectionFactory->create();
  77. $this->collectionProcessor->process($searchCriteria, $collection);
  78. $searchResults->setTotalCount($collection->getSize());
  79. $logEntries = [];
  80. /** @var LogEntry $logEntryModel */
  81. foreach ($collection as $logEntryModel) {
  82. $logEntries[] = $logEntryModel;
  83. }
  84. $searchResults->setItems($logEntries);
  85. return $searchResults;
  86. }
  87. /**
  88. * @inheritdoc
  89. */
  90. public function delete(LogEntryInterface $logEntry)
  91. {
  92. return $this->deleteById($logEntry->getId());
  93. }
  94. /**
  95. * @inheritdoc
  96. */
  97. public function deleteById($logEntryId)
  98. {
  99. /** @var LogEntry $model */
  100. $model = $this->logEntryFactory->create();
  101. $model->setId($logEntryId);
  102. try {
  103. $this->resourceModel->delete($model);
  104. } catch (\Exception $e) {
  105. throw new CouldNotDeleteException(__('Could not delete log entry'), $e);
  106. }
  107. return true;
  108. }
  109. /**
  110. * @inheritdoc
  111. */
  112. public function deleteByCriteria(SearchCriteriaInterface $searchCriteria)
  113. {
  114. /** @var Collection $collection */
  115. $collection = $this->collectionFactory->create();
  116. $this->collectionProcessor->process($searchCriteria, $collection);
  117. try {
  118. $this->resourceModel->deleteByCollection($collection);
  119. } catch (\Exception $e) {
  120. throw new CouldNotDeleteException(__('Could not delete log entries'), $e);
  121. }
  122. return true;
  123. }
  124. /**
  125. * Convert a LogEntryInterface into a LogEntry model
  126. *
  127. * @param LogEntryInterface $logEntry
  128. * @return LogEntry
  129. */
  130. private function mapDataIntoModel(LogEntryInterface $logEntry)
  131. {
  132. /** @var LogEntry $model */
  133. $model = $this->logEntryFactory->create();
  134. $model->setData(
  135. [
  136. LogEntryInterface::FIELD_ID => $logEntry->getId(),
  137. LogEntryInterface::FIELD_TYPE => $logEntry->getType(),
  138. LogEntryInterface::FIELD_CART_ID => $logEntry->getCartId(),
  139. LogEntryInterface::FIELD_ORDER_ID => $logEntry->getOrderId(),
  140. LogEntryInterface::FIELD_TOTAL_TAX => $logEntry->getTotalTax(),
  141. LogEntryInterface::FIELD_SOURCE_PATH => $logEntry->getSourcePath(),
  142. LogEntryInterface::FIELD_TAX_AREA_ID => $logEntry->getTaxAreaId(),
  143. LogEntryInterface::FIELD_SUBTOTAL => $logEntry->getSubTotal(),
  144. LogEntryInterface::FIELD_TOTAL => $logEntry->getTotal(),
  145. LogEntryInterface::FIELD_LOOKUP_RESULT => $logEntry->getLookupResult(),
  146. LogEntryInterface::FIELD_REQUEST_DATE => $logEntry->getDate(),
  147. LogEntryInterface::FIELD_REQUEST_XML => $logEntry->getRequestXml(),
  148. LogEntryInterface::FIELD_RESPONSE_XML => $logEntry->getResponseXml(),
  149. ]
  150. );
  151. return $model;
  152. }
  153. }