OrderHasInvoiceDeterminer.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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 Magento\Framework\Api\SearchCriteriaBuilder;
  8. use Magento\Framework\Api\SearchCriteriaBuilderFactory;
  9. use Magento\Framework\Exception\NoSuchEntityException;
  10. use Magento\Sales\Api\Data\InvoiceInterface;
  11. use Magento\Sales\Api\InvoiceRepositoryInterface;
  12. use Vertex\Tax\Model\Repository\OrderInvoiceStatusRepository;
  13. /**
  14. * Determines if an order has been sent to Vertex
  15. */
  16. class OrderHasInvoiceDeterminer
  17. {
  18. /** @var SearchCriteriaBuilderFactory */
  19. private $criteriaBuilderFactory;
  20. /** @var InvoiceRepositoryInterface */
  21. private $invoiceRepository;
  22. /** @var InvoiceSentRegistry */
  23. private $invoiceSentRegistry;
  24. /** @var OrderInvoiceStatusRepository */
  25. private $orderInvoiceStatusRepository;
  26. /**
  27. * @param OrderInvoiceStatusRepository $orderInvoiceStatusRepository
  28. * @param InvoiceRepositoryInterface $invoiceRepository
  29. * @param InvoiceSentRegistry $invoiceSentRegistry
  30. * @param SearchCriteriaBuilderFactory $criteriaBuilderFactory
  31. */
  32. public function __construct(
  33. OrderInvoiceStatusRepository $orderInvoiceStatusRepository,
  34. InvoiceRepositoryInterface $invoiceRepository,
  35. InvoiceSentRegistry $invoiceSentRegistry,
  36. SearchCriteriaBuilderFactory $criteriaBuilderFactory
  37. ) {
  38. $this->orderInvoiceStatusRepository = $orderInvoiceStatusRepository;
  39. $this->invoiceRepository = $invoiceRepository;
  40. $this->criteriaBuilderFactory = $criteriaBuilderFactory;
  41. $this->invoiceSentRegistry = $invoiceSentRegistry;
  42. }
  43. /**
  44. * Determine whether or not an order has at least one invoice sent to Vertex
  45. *
  46. * @param int $orderId
  47. * @return bool
  48. */
  49. public function hasInvoice($orderId)
  50. {
  51. try {
  52. $this->orderInvoiceStatusRepository->getByOrderId($orderId);
  53. return true;
  54. } catch (NoSuchEntityException $e) {
  55. // Not a failure condition here
  56. }
  57. /** @var SearchCriteriaBuilder $criteriaBuilder */
  58. $criteriaBuilder = $this->criteriaBuilderFactory->create();
  59. $criteriaBuilder->addFilter(InvoiceInterface::ORDER_ID, $orderId);
  60. $criteria = $criteriaBuilder->create();
  61. $invoices = $this->invoiceRepository->getList($criteria);
  62. foreach ($invoices->getItems() as $invoice) {
  63. if ($this->invoiceSentRegistry->hasInvoiceBeenSentToVertex($invoice)) {
  64. return true;
  65. }
  66. }
  67. return false;
  68. }
  69. }