DeliveryTerm.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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\Utility;
  7. use Vertex\Services\Invoice\RequestInterface as InvoiceRequest;
  8. use Vertex\Services\Quote\RequestInterface as QuoteRequest;
  9. use Vertex\Tax\Model\Config;
  10. /**
  11. * Delivery Term Formatter for Vertex API Calls
  12. */
  13. class DeliveryTerm
  14. {
  15. /** @var Config */
  16. private $config;
  17. /**
  18. * @param Config $config
  19. */
  20. public function __construct(Config $config)
  21. {
  22. $this->config = $config;
  23. }
  24. /**
  25. * Add a Delivery Term to a Line Item if applicable
  26. *
  27. * @param QuoteRequest|InvoiceRequest $request
  28. * @return QuoteRequest|InvoiceRequest Same object supplied to $request
  29. */
  30. public function addIfApplicable($request)
  31. {
  32. $customerCountry = $this->getCustomerCountry($request);
  33. $deliveryTermOverride = $this->config->getDeliveryTermOverride();
  34. if ($customerCountry
  35. && !empty($deliveryTermOverride)
  36. && isset($deliveryTermOverride[$customerCountry])
  37. ) {
  38. return $request->setDeliveryTerm($deliveryTermOverride[$customerCountry]);
  39. }
  40. return $request->setDeliveryTerm($this->config->getDefaultDeliveryTerm());
  41. }
  42. /**
  43. * Get customer country
  44. *
  45. * @param QuoteRequest|InvoiceRequest $request
  46. * @return null|string
  47. */
  48. private function getCustomerCountry($request)
  49. {
  50. if ($request->getCustomer()
  51. && $request->getCustomer()->getDestination()
  52. && $request->getCustomer()->getDestination()->getCountry()
  53. ) {
  54. return $request->getCustomer()->getDestination()->getCountry();
  55. }
  56. return null;
  57. }
  58. }