InvoiceRequestBuilder.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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\Api\Data;
  7. use Magento\Sales\Api\Data\CreditmemoInterface;
  8. use Magento\Sales\Api\Data\InvoiceInterface;
  9. use Magento\Sales\Api\Data\OrderInterface;
  10. use Vertex\Services\Invoice\RequestInterface;
  11. use Vertex\Tax\Model\Api\Data\InvoiceRequestBuilder\CreditmemoProcessor;
  12. use Vertex\Tax\Model\Api\Data\InvoiceRequestBuilder\InvoiceProcessor;
  13. use Vertex\Tax\Model\Api\Data\InvoiceRequestBuilder\OrderProcessor;
  14. /**
  15. * Builds an Invoice Request for the Vertex SDK
  16. *
  17. * Because there are three types of Magento Entities we need to conceivably
  18. * build invoices for this class works almost like a proxy. None of the actual
  19. * building takes place in it, but instead in it's own processors specifically
  20. * designed for the different types of Magento Entities.
  21. *
  22. * @see OrderProcessor
  23. * @see InvoiceProcessor
  24. * @see CreditmemoProcessor
  25. */
  26. class InvoiceRequestBuilder
  27. {
  28. /** @var CreditmemoProcessor */
  29. private $creditmemoProcessor;
  30. /** @var InvoiceProcessor */
  31. private $invoiceProcessor;
  32. /** @var OrderProcessor */
  33. private $orderProcessor;
  34. /**
  35. * @param InvoiceProcessor $invoiceProcessor
  36. * @param OrderProcessor $orderProcessor
  37. * @param CreditmemoProcessor $creditmemoProcessor
  38. */
  39. public function __construct(
  40. InvoiceProcessor $invoiceProcessor,
  41. OrderProcessor $orderProcessor,
  42. CreditmemoProcessor $creditmemoProcessor
  43. ) {
  44. $this->invoiceProcessor = $invoiceProcessor;
  45. $this->orderProcessor = $orderProcessor;
  46. $this->creditmemoProcessor = $creditmemoProcessor;
  47. }
  48. /**
  49. * Create an Invoice Request by providing a Magento Invoice
  50. *
  51. * @see InvoiceProcessor::process()
  52. * @param InvoiceInterface $invoice
  53. * @return RequestInterface
  54. */
  55. public function buildFromInvoice(InvoiceInterface $invoice)
  56. {
  57. return $this->invoiceProcessor->process($invoice);
  58. }
  59. /**
  60. * Create an Invoice Request by providing a Magento Order
  61. *
  62. * @see OrderProcessor::process()
  63. * @param OrderInterface $order
  64. * @return RequestInterface
  65. */
  66. public function buildFromOrder(OrderInterface $order)
  67. {
  68. return $this->orderProcessor->process($order);
  69. }
  70. /**
  71. * Create an Invoice Request by providing a Magento Creditmemo
  72. *
  73. * @see CreditmemoProcessor::process()
  74. * @param CreditmemoInterface $creditmemo
  75. * @return RequestInterface
  76. */
  77. public function buildFromCreditmemo(CreditmemoInterface $creditmemo)
  78. {
  79. return $this->creditmemoProcessor->process($creditmemo);
  80. }
  81. }