Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Save.php
Go to the documentation of this file.
1 <?php
7 
8 use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
12 
14 {
20  const ADMIN_RESOURCE = 'Magento_Sales::sales_creditmemo';
21 
25  protected $creditmemoLoader;
26 
30  protected $creditmemoSender;
31 
36 
43  public function __construct(
44  Action\Context $context,
45  \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader,
47  \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
48  ) {
49  $this->creditmemoLoader = $creditmemoLoader;
50  $this->creditmemoSender = $creditmemoSender;
51  $this->resultForwardFactory = $resultForwardFactory;
52  parent::__construct($context);
53  }
54 
64  public function execute()
65  {
66  $resultRedirect = $this->resultRedirectFactory->create();
67  $data = $this->getRequest()->getPost('creditmemo');
68  if (!empty($data['comment_text'])) {
69  $this->_getSession()->setCommentText($data['comment_text']);
70  }
71  try {
72  $this->creditmemoLoader->setOrderId($this->getRequest()->getParam('order_id'));
73  $this->creditmemoLoader->setCreditmemoId($this->getRequest()->getParam('creditmemo_id'));
74  $this->creditmemoLoader->setCreditmemo($this->getRequest()->getParam('creditmemo'));
75  $this->creditmemoLoader->setInvoiceId($this->getRequest()->getParam('invoice_id'));
76  $creditmemo = $this->creditmemoLoader->load();
77  if ($creditmemo) {
78  if (!$creditmemo->isValidGrandTotal()) {
79  throw new \Magento\Framework\Exception\LocalizedException(
80  __('The credit memo\'s total must be positive.')
81  );
82  }
83 
84  if (!empty($data['comment_text'])) {
85  $creditmemo->addComment(
86  $data['comment_text'],
87  isset($data['comment_customer_notify']),
88  isset($data['is_visible_on_front'])
89  );
90 
91  $creditmemo->setCustomerNote($data['comment_text']);
92  $creditmemo->setCustomerNoteNotify(isset($data['comment_customer_notify']));
93  }
94 
95  if (isset($data['do_offline'])) {
96  //do not allow online refund for Refund to Store Credit
97  if (!$data['do_offline'] && !empty($data['refund_customerbalance_return_enable'])) {
98  throw new \Magento\Framework\Exception\LocalizedException(
99  __('Cannot create online refund for Refund to Store Credit.')
100  );
101  }
102  }
103  $creditmemoManagement = $this->_objectManager->create(
104  \Magento\Sales\Api\CreditmemoManagementInterface::class
105  );
106  $creditmemo->getOrder()->setCustomerNoteNotify(!empty($data['send_email']));
107  $creditmemoManagement->refund($creditmemo, (bool)$data['do_offline']);
108 
109  if (!empty($data['send_email'])) {
110  $this->creditmemoSender->send($creditmemo);
111  }
112 
113  $this->messageManager->addSuccessMessage(__('You created the credit memo.'));
114  $this->_getSession()->getCommentText(true);
115  $resultRedirect->setPath('sales/order/view', ['order_id' => $creditmemo->getOrderId()]);
116  return $resultRedirect;
117  } else {
118  $resultForward = $this->resultForwardFactory->create();
119  $resultForward->forward('noroute');
120  return $resultForward;
121  }
122  } catch (\Magento\Framework\Exception\LocalizedException $e) {
123  $this->messageManager->addErrorMessage($e->getMessage());
124  $this->_getSession()->setFormData($data);
125  } catch (\Exception $e) {
126  $this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e);
127  $this->messageManager->addErrorMessage(__('We can\'t save the credit memo right now.'));
128  }
129  $resultRedirect->setPath('sales/*/new', ['_current' => true]);
130  return $resultRedirect;
131  }
132 }
__()
Definition: __.php:13
foreach($creditmemo->getAllItems() as $creditmemoItem) $creditmemoManagement
Definition: order_info.php:101
__construct(Action\Context $context, \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader, CreditmemoSender $creditmemoSender, \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory)
Definition: Save.php:43