58 private $refundAdapter;
63 private $orderRepository;
68 private $invoiceRepository;
89 $this->commentRepository = $creditmemoCommentRepository;
107 throw new \Magento\Framework\Exception\LocalizedException(
__(
'You can not cancel Credit Memo'));
118 $this->searchCriteriaBuilder->addFilters(
119 [$this->filterBuilder->setField(
'parent_id')->setValue(
$id)->setConditionType(
'eq')->create()]
134 return $this->creditmemoNotifier->notify(
$creditmemo);
147 $offlineRequested =
false 152 $connection = $this->getResource()->getConnection(
'sales');
156 if (
$invoice && !$offlineRequested) {
162 $this->getInvoiceRepository()->save(
$creditmemo->getInvoice());
164 $order = $this->getRefundAdapter()->refund(
169 $this->getOrderRepository()->save(
$order);
174 throw new \Magento\Framework\Exception\LocalizedException(
__($e->getMessage()));
187 if (
$creditmemo->getId() &&
$creditmemo->getState() != \Magento\Sales\Model\Order\Creditmemo::STATE_OPEN) {
188 throw new \Magento\Framework\Exception\LocalizedException(
189 __(
'We cannot register an existing credit memo.')
193 $baseOrderRefund = $this->priceCurrency->round(
196 if ($baseOrderRefund > $this->priceCurrency->round(
$creditmemo->getOrder()->getBaseTotalPaid())) {
197 $baseAvailableRefund =
$creditmemo->getOrder()->getBaseTotalPaid()
200 throw new \Magento\Framework\Exception\LocalizedException(
202 'The most money available to refund is %1.',
203 $creditmemo->getOrder()->formatBasePrice($baseAvailableRefund)
215 private function getRefundAdapter()
217 if ($this->refundAdapter ===
null) {
219 ->get(\
Magento\Sales\Model\
Order\RefundAdapterInterface::class);
221 return $this->refundAdapter;
229 private function getResource()
231 if ($this->resource ===
null) {
233 ->get(\
Magento\Framework\
App\ResourceConnection::class);
235 return $this->resource;
243 private function getOrderRepository()
245 if ($this->orderRepository ===
null) {
247 ->get(\
Magento\Sales\Api\OrderRepositoryInterface::class);
249 return $this->orderRepository;
257 private function getInvoiceRepository()
259 if ($this->invoiceRepository ===
null) {
261 ->get(\
Magento\Sales\Api\InvoiceRepositoryInterface::class);
263 return $this->invoiceRepository;
validateForRefund(\Magento\Sales\Api\Data\CreditmemoInterface $creditmemo)
refund(\Magento\Sales\Api\Data\CreditmemoInterface $creditmemo, $offlineRequested=false)
__construct(\Magento\Sales\Api\CreditmemoRepositoryInterface $creditmemoRepository, \Magento\Sales\Api\CreditmemoCommentRepositoryInterface $creditmemoCommentRepository, \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder, \Magento\Framework\Api\FilterBuilder $filterBuilder, \Magento\Sales\Model\Order\CreditmemoNotifier $creditmemoNotifier, \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency, \Magento\Framework\Event\ManagerInterface $eventManager)