18 use Psr\Log\LoggerInterface;
29 private $resourceConnection;
34 private $orderStateResolver;
39 private $orderRepository;
44 private $creditmemoRepository;
49 private $refundAdapter;
54 private $creditmemoDocumentFactory;
98 RefundOrderValidator $validator,
104 $this->orderStateResolver = $orderStateResolver;
106 $this->creditmemoRepository = $creditmemoRepository;
107 $this->refundAdapter = $refundAdapter;
108 $this->creditmemoDocumentFactory = $creditmemoDocumentFactory;
109 $this->validator = $validator;
110 $this->notifier = $notifier;
122 $appendComment =
false,
123 \
Magento\Sales\Api\Data\CreditmemoCommentCreationInterface $comment =
null,
126 $connection = $this->resourceConnection->getConnection(
'sales');
127 $order = $this->orderRepository->get($orderId);
128 $creditmemo = $this->creditmemoDocumentFactory->createFromOrder(
132 ($appendComment && $notify),
135 $validationMessages = $this->validator->validate(
144 if ($validationMessages->hasMessages()) {
145 throw new \Magento\Sales\Exception\DocumentValidationException(
146 __(
"Creditmemo Document Validation Error(s):\n" . implode(
"\n", $validationMessages->getMessages()))
152 $order->setCustomerNoteNotify($notify);
155 $this->orderStateResolver->getStateForOrder(
$order, [])
157 $order->setStatus($this->config->getStateDefaultStatus(
$order->getState()));
162 }
catch (\Exception $e) {
163 $this->logger->critical($e);
165 throw new \Magento\Sales\Exception\CouldNotRefundException(
166 __(
'Could not save a Creditmemo, see error log for details')
170 if (!$appendComment) {
__construct(ResourceConnection $resourceConnection, OrderStateResolverInterface $orderStateResolver, OrderRepositoryInterface $orderRepository, CreditmemoRepositoryInterface $creditmemoRepository, RefundAdapterInterface $refundAdapter, CreditmemoDocumentFactory $creditmemoDocumentFactory, RefundOrderValidator $validator, NotifierInterface $notifier, OrderConfig $config, LoggerInterface $logger)
execute( $orderId, array $items=[], $notify=false, $appendComment=false, \Magento\Sales\Api\Data\CreditmemoCommentCreationInterface $comment=null, \Magento\Sales\Api\Data\CreditmemoCreationArgumentsInterface $arguments=null)