Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
RefundOrder.php
Go to the documentation of this file.
1 <?php
6 namespace Magento\Sales\Model;
7 
12 use Magento\Sales\Model\Order\Config as OrderConfig;
18 use Psr\Log\LoggerInterface;
19 
25 {
29  private $resourceConnection;
30 
34  private $orderStateResolver;
35 
39  private $orderRepository;
40 
44  private $creditmemoRepository;
45 
49  private $refundAdapter;
50 
54  private $creditmemoDocumentFactory;
55 
59  private $validator;
60 
64  private $notifier;
65 
69  private $config;
70 
74  private $logger;
75 
91  public function __construct(
92  ResourceConnection $resourceConnection,
93  OrderStateResolverInterface $orderStateResolver,
94  OrderRepositoryInterface $orderRepository,
95  CreditmemoRepositoryInterface $creditmemoRepository,
96  RefundAdapterInterface $refundAdapter,
97  CreditmemoDocumentFactory $creditmemoDocumentFactory,
98  RefundOrderValidator $validator,
99  NotifierInterface $notifier,
100  OrderConfig $config,
101  LoggerInterface $logger
102  ) {
103  $this->resourceConnection = $resourceConnection;
104  $this->orderStateResolver = $orderStateResolver;
105  $this->orderRepository = $orderRepository;
106  $this->creditmemoRepository = $creditmemoRepository;
107  $this->refundAdapter = $refundAdapter;
108  $this->creditmemoDocumentFactory = $creditmemoDocumentFactory;
109  $this->validator = $validator;
110  $this->notifier = $notifier;
111  $this->config = $config;
112  $this->logger = $logger;
113  }
114 
118  public function execute(
119  $orderId,
120  array $items = [],
121  $notify = false,
122  $appendComment = false,
123  \Magento\Sales\Api\Data\CreditmemoCommentCreationInterface $comment = null,
124  \Magento\Sales\Api\Data\CreditmemoCreationArgumentsInterface $arguments = null
125  ) {
126  $connection = $this->resourceConnection->getConnection('sales');
127  $order = $this->orderRepository->get($orderId);
128  $creditmemo = $this->creditmemoDocumentFactory->createFromOrder(
129  $order,
130  $items,
131  $comment,
132  ($appendComment && $notify),
133  $arguments
134  );
135  $validationMessages = $this->validator->validate(
136  $order,
137  $creditmemo,
138  $items,
139  $notify,
140  $appendComment,
141  $comment,
142  $arguments
143  );
144  if ($validationMessages->hasMessages()) {
145  throw new \Magento\Sales\Exception\DocumentValidationException(
146  __("Creditmemo Document Validation Error(s):\n" . implode("\n", $validationMessages->getMessages()))
147  );
148  }
149  $connection->beginTransaction();
150  try {
151  $creditmemo->setState(\Magento\Sales\Model\Order\Creditmemo::STATE_REFUNDED);
152  $order->setCustomerNoteNotify($notify);
153  $order = $this->refundAdapter->refund($creditmemo, $order);
154  $order->setState(
155  $this->orderStateResolver->getStateForOrder($order, [])
156  );
157  $order->setStatus($this->config->getStateDefaultStatus($order->getState()));
158 
159  $order = $this->orderRepository->save($order);
160  $creditmemo = $this->creditmemoRepository->save($creditmemo);
161  $connection->commit();
162  } catch (\Exception $e) {
163  $this->logger->critical($e);
164  $connection->rollBack();
165  throw new \Magento\Sales\Exception\CouldNotRefundException(
166  __('Could not save a Creditmemo, see error log for details')
167  );
168  }
169  if ($notify) {
170  if (!$appendComment) {
171  $comment = null;
172  }
173  $this->notifier->notify($order, $creditmemo, $comment);
174  }
175 
176  return $creditmemo->getEntityId();
177  }
178 }
__construct(ResourceConnection $resourceConnection, OrderStateResolverInterface $orderStateResolver, OrderRepositoryInterface $orderRepository, CreditmemoRepositoryInterface $creditmemoRepository, RefundAdapterInterface $refundAdapter, CreditmemoDocumentFactory $creditmemoDocumentFactory, RefundOrderValidator $validator, NotifierInterface $notifier, OrderConfig $config, LoggerInterface $logger)
Definition: RefundOrder.php:91
$config
Definition: fraud_order.php:17
$orderRepository
Definition: order.php:69
$order
Definition: order.php:55
__()
Definition: __.php:13
$logger
execute( $orderId, array $items=[], $notify=false, $appendComment=false, \Magento\Sales\Api\Data\CreditmemoCommentCreationInterface $comment=null, \Magento\Sales\Api\Data\CreditmemoCreationArgumentsInterface $arguments=null)
$arguments
$connection
Definition: bulk.php:13
$items