19 use Psr\Log\LoggerInterface;
30 private $resourceConnection;
35 private $orderStateResolver;
40 private $orderRepository;
45 private $invoiceRepository;
50 private $creditmemoRepository;
55 private $refundAdapter;
60 private $creditmemoDocumentFactory;
103 RefundInvoiceValidator $validator,
112 $this->orderStateResolver = $orderStateResolver;
115 $this->validator = $validator;
116 $this->creditmemoRepository = $creditmemoRepository;
117 $this->refundAdapter = $refundAdapter;
118 $this->creditmemoDocumentFactory = $creditmemoDocumentFactory;
119 $this->notifier = $notifier;
132 $appendComment =
false,
133 \
Magento\Sales\Api\Data\CreditmemoCommentCreationInterface $comment =
null,
136 $connection = $this->resourceConnection->getConnection(
'sales');
137 $invoice = $this->invoiceRepository->get($invoiceId);
139 $creditmemo = $this->creditmemoDocumentFactory->createFromInvoice(
143 ($appendComment && $notify),
147 $validationMessages = $this->validator->validate(
158 if ($validationMessages->hasMessages()) {
159 throw new \Magento\Sales\Exception\DocumentValidationException(
160 __(
"Creditmemo Document Validation Error(s):\n" . implode(
"\n", $validationMessages->getMessages()))
166 $order->setCustomerNoteNotify($notify);
169 $this->orderStateResolver->getStateForOrder(
$order, [])
171 $order->setStatus($this->config->getStateDefaultStatus(
$order->getState()));
178 $this->invoiceRepository->save(
$invoice);
182 }
catch (\Exception $e) {
183 $this->logger->critical($e);
185 throw new \Magento\Sales\Exception\CouldNotRefundException(
186 __(
'Could not save a Creditmemo, see error log for details')
190 if (!$appendComment) {
execute( $invoiceId, array $items=[], $isOnline=false, $notify=false, $appendComment=false, \Magento\Sales\Api\Data\CreditmemoCommentCreationInterface $comment=null, \Magento\Sales\Api\Data\CreditmemoCreationArgumentsInterface $arguments=null)
__construct(ResourceConnection $resourceConnection, OrderStateResolverInterface $orderStateResolver, OrderRepositoryInterface $orderRepository, InvoiceRepositoryInterface $invoiceRepository, RefundInvoiceValidator $validator, CreditmemoRepositoryInterface $creditmemoRepository, RefundAdapterInterface $refundAdapter, CreditmemoDocumentFactory $creditmemoDocumentFactory, NotifierInterface $notifier, OrderConfig $config, LoggerInterface $logger)