AbstractCommand.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. /**
  3. * This file is part of the Klarna Order Management module
  4. *
  5. * (c) Klarna Bank AB (publ)
  6. *
  7. * For the full copyright and license information, please view the NOTICE
  8. * and LICENSE files that were distributed with this source code.
  9. */
  10. namespace Klarna\Ordermanagement\Gateway\Command;
  11. use Klarna\Core\Helper\ConfigHelper;
  12. use Klarna\Core\Helper\KlarnaConfig;
  13. use Klarna\Core\Model\OrderRepository as KlarnaOrderRepository;
  14. use Klarna\Ordermanagement\Model\Api\Factory;
  15. use Klarna\Ordermanagement\Model\Api\Ordermanagement;
  16. use Magento\Framework\DataObject;
  17. use Magento\Framework\Message\ManagerInterface as MessageManager;
  18. use Magento\Payment\Gateway\Command;
  19. use Magento\Payment\Gateway\CommandInterface;
  20. use Magento\Quote\Model\QuoteRepository as MageQuoteRepository;
  21. use Magento\Sales\Api\Data\OrderInterface;
  22. use Magento\Sales\Model\OrderRepository as MageOrderRepository;
  23. /**
  24. * Class AbstractCommand
  25. *
  26. * @package Klarna\Ordermanagement\Gateway\Command
  27. */
  28. abstract class AbstractCommand extends DataObject implements CommandInterface
  29. {
  30. /**
  31. * @var KlarnaOrderRepository
  32. */
  33. public $klarnaOrderRepository;
  34. /**
  35. * @var Ordermanagement
  36. */
  37. private $om;
  38. /**
  39. * @var array
  40. */
  41. public $omCache = [];
  42. /**
  43. * @var MageQuoteRepository
  44. */
  45. public $mageQuoteRepository;
  46. /**
  47. * @var MageOrderRepository
  48. */
  49. public $mageOrderRepository;
  50. /**
  51. * @var KlarnaConfig
  52. */
  53. public $helper;
  54. /**
  55. * @var Factory
  56. */
  57. public $omFactory;
  58. /**
  59. * @var MessageManager
  60. */
  61. public $messageManager;
  62. /**
  63. * AbstractCommand constructor.
  64. *
  65. * @param KlarnaOrderRepository $klarnaOrderRepository
  66. * @param MageQuoteRepository $mageQuoteRepository
  67. * @param MageOrderRepository $mageOrderRepository
  68. * @param KlarnaConfig $helper
  69. * @param Factory $omFactory
  70. * @param MessageManager $messageManager
  71. * @param array $data
  72. */
  73. public function __construct(
  74. KlarnaOrderRepository $klarnaOrderRepository,
  75. MageQuoteRepository $mageQuoteRepository,
  76. MageOrderRepository $mageOrderRepository,
  77. KlarnaConfig $helper,
  78. Factory $omFactory,
  79. MessageManager $messageManager,
  80. array $data = []
  81. ) {
  82. parent::__construct($data);
  83. $this->klarnaOrderRepository = $klarnaOrderRepository;
  84. $this->mageQuoteRepository = $mageQuoteRepository;
  85. $this->mageOrderRepository = $mageOrderRepository;
  86. $this->helper = $helper;
  87. $this->omFactory = $omFactory;
  88. $this->messageManager = $messageManager;
  89. }
  90. /**
  91. * AbstractCommand command
  92. *
  93. * @param array $commandSubject
  94. *
  95. * @return null|Command\ResultInterface
  96. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  97. */
  98. abstract public function execute(array $commandSubject);
  99. /**
  100. * Get a Klarna order
  101. *
  102. * @param $order
  103. *
  104. * @return \Klarna\Core\Model\Order
  105. * @throws \Magento\Framework\Exception\NoSuchEntityException
  106. */
  107. public function getKlarnaOrder($order)
  108. {
  109. return $this->klarnaOrderRepository->getByOrder($order);
  110. }
  111. /**
  112. * Get api class
  113. *
  114. * @param OrderInterface $order
  115. * @return Ordermanagement
  116. * @internal param Store $store
  117. */
  118. public function getOmApi(OrderInterface $order)
  119. {
  120. $store = $order->getStore();
  121. if (isset($this->omCache[$store->getId()])) {
  122. $this->om = $this->omCache[$store->getId()];
  123. return $this->om;
  124. }
  125. $omClass = $this->helper->getOrderMangagementClass($store);
  126. $this->om = $this->omFactory->create($omClass);
  127. $this->om->resetForStore($store, $order->getPayment()->getMethod());
  128. $this->omCache[$store->getId()] = $this->om;
  129. return $this->om;
  130. }
  131. /**
  132. * Extending the error message with information from the api response
  133. *
  134. * @param DataObject $response
  135. * @param string $errorMessage
  136. * @param string $type
  137. * @return \Magento\Framework\Phrase
  138. */
  139. public function getFullErrorMessage($response, $errorMessage, $type)
  140. {
  141. $apiMessage = implode($response->getErrorMessages(), ',');
  142. if (!empty($apiMessage)) {
  143. $errorMessage = __(
  144. '%1 Klarna %2 api error messages: %3',
  145. $errorMessage,
  146. $type,
  147. $apiMessage
  148. );
  149. }
  150. return $errorMessage;
  151. }
  152. }