CreditmemoAdjustmentProcessor.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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\InvoiceRequestBuilder;
  7. use Magento\Sales\Api\Data\CreditmemoInterface;
  8. use Vertex\Data\LineItemInterfaceFactory;
  9. use Vertex\Services\Invoice\RequestInterface;
  10. use Vertex\Tax\Model\Config;
  11. use Vertex\Tax\Model\Repository\TaxClassNameRepository;
  12. /**
  13. * Processes positive and negative adjustments added to a creditmemo
  14. */
  15. class CreditmemoAdjustmentProcessor implements CreditmemoProcessorInterface
  16. {
  17. /** @var TaxClassNameRepository */
  18. private $classNameRepository;
  19. /** @var Config */
  20. private $config;
  21. /** @var LineItemInterfaceFactory */
  22. private $lineItemFactory;
  23. /**
  24. * @param LineItemInterfaceFactory $lineItemFactory
  25. * @param Config $config
  26. * @param TaxClassNameRepository $classNameRepository
  27. */
  28. public function __construct(
  29. LineItemInterfaceFactory $lineItemFactory,
  30. Config $config,
  31. TaxClassNameRepository $classNameRepository
  32. ) {
  33. $this->lineItemFactory = $lineItemFactory;
  34. $this->config = $config;
  35. $this->classNameRepository = $classNameRepository;
  36. }
  37. /**
  38. * @inheritdoc
  39. */
  40. public function process(RequestInterface $request, CreditmemoInterface $creditmemo)
  41. {
  42. $lineItems = $request->getLineItems();
  43. $adjustmentPositive = $creditmemo->getBaseAdjustmentPositive(); // additional refund
  44. $adjustmentNegative = $creditmemo->getBaseAdjustmentNegative(); // fee
  45. if ($adjustmentPositive > 0) {
  46. $lineItem = $this->lineItemFactory->create();
  47. $lineItem->setUnitPrice(-1 * $adjustmentPositive);
  48. $lineItem->setExtendedPrice(-1 * $adjustmentPositive);
  49. $lineItem->setQuantity(1);
  50. $lineItem->setProductCode($this->config->getCreditmemoAdjustmentPositiveCode($creditmemo->getStoreId()));
  51. $lineItem->setProductClass(
  52. $this->classNameRepository->getById(
  53. $this->config->getCreditmemoAdjustmentPositiveClass($creditmemo->getStoreId())
  54. )
  55. );
  56. $lineItems[] = $lineItem;
  57. }
  58. if ($adjustmentNegative > 0) {
  59. $lineItem = $this->lineItemFactory->create();
  60. $lineItem->setUnitPrice($adjustmentNegative);
  61. $lineItem->setExtendedPrice($adjustmentNegative);
  62. $lineItem->setQuantity(1);
  63. $lineItem->setProductCode($this->config->getCreditmemoAdjustmentFeeCode($creditmemo->getStoreId()));
  64. $lineItem->setProductClass(
  65. $this->classNameRepository->getById(
  66. $this->config->getCreditmemoAdjustmentFeeClass($creditmemo->getStoreId())
  67. )
  68. );
  69. $lineItems[] = $lineItem;
  70. }
  71. $request->setLineItems($lineItems);
  72. return $request;
  73. }
  74. }