| Current Path : /home/rtorresani/www/vendor/magento/module-sales/Controller/Adminhtml/Order/Creditmemo/ |
| Current File : //home/rtorresani/www/vendor/magento/module-sales/Controller/Adminhtml/Order/Creditmemo/Save.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Sales\Controller\Adminhtml\Order\Creditmemo;
use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
use Magento\Backend\App\Action;
use Magento\Sales\Helper\Data as SalesData;
use Magento\Sales\Model\Order;
use Magento\Sales\Model\Order\Email\Sender\CreditmemoSender;
class Save extends \Magento\Backend\App\Action implements HttpPostActionInterface
{
/**
* Authorization level of a basic admin session
*
* @see _isAllowed()
*/
const ADMIN_RESOURCE = 'Magento_Sales::sales_creditmemo';
/**
* @var \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader
*/
protected $creditmemoLoader;
/**
* @var CreditmemoSender
*/
protected $creditmemoSender;
/**
* @var \Magento\Backend\Model\View\Result\ForwardFactory
*/
protected $resultForwardFactory;
/**
* @var SalesData
*/
private $salesData;
/**
* @param Action\Context $context
* @param \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader
* @param CreditmemoSender $creditmemoSender
* @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
* @param SalesData $salesData
*/
public function __construct(
Action\Context $context,
\Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader,
CreditmemoSender $creditmemoSender,
\Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
SalesData $salesData = null
) {
$this->creditmemoLoader = $creditmemoLoader;
$this->creditmemoSender = $creditmemoSender;
$this->resultForwardFactory = $resultForwardFactory;
$this->salesData = $salesData ?: \Magento\Framework\App\ObjectManager::getInstance()
->get(SalesData::class);
parent::__construct($context);
}
/**
* Save creditmemo
*
* We can save only new creditmemo. Existing creditmemos are not editable
*
* @return \Magento\Backend\Model\View\Result\Redirect|\Magento\Backend\Model\View\Result\Forward
*
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @SuppressWarnings(PHPMD.NPathComplexity)
*/
public function execute()
{
$resultRedirect = $this->resultRedirectFactory->create();
$data = $this->getRequest()->getPost('creditmemo');
if (!empty($data['comment_text'])) {
$this->_getSession()->setCommentText($data['comment_text']);
}
try {
$this->creditmemoLoader->setOrderId($this->getRequest()->getParam('order_id'));
$this->creditmemoLoader->setCreditmemoId($this->getRequest()->getParam('creditmemo_id'));
$this->creditmemoLoader->setCreditmemo($this->getRequest()->getParam('creditmemo'));
$this->creditmemoLoader->setInvoiceId($this->getRequest()->getParam('invoice_id'));
$creditmemo = $this->creditmemoLoader->load();
if ($creditmemo) {
if (!$creditmemo->isValidGrandTotal()) {
throw new \Magento\Framework\Exception\LocalizedException(
__('The credit memo\'s total must be positive.')
);
}
if (!empty($data['comment_text'])) {
$creditmemo->addComment(
$data['comment_text'],
isset($data['comment_customer_notify']),
isset($data['is_visible_on_front'])
);
$creditmemo->setCustomerNote($data['comment_text']);
$creditmemo->setCustomerNoteNotify(isset($data['comment_customer_notify']));
}
if (isset($data['do_offline'])) {
//do not allow online refund for Refund to Store Credit
if (!$data['do_offline'] && !empty($data['refund_customerbalance_return_enable'])) {
throw new \Magento\Framework\Exception\LocalizedException(
__('Cannot create online refund for Refund to Store Credit.')
);
}
}
$creditmemoManagement = $this->_objectManager->create(
\Magento\Sales\Api\CreditmemoManagementInterface::class
);
$creditmemo->getOrder()->setCustomerNoteNotify(!empty($data['send_email']));
$doOffline = isset($data['do_offline']) ? (bool)$data['do_offline'] : false;
$creditmemoManagement->refund($creditmemo, $doOffline);
if (!empty($data['send_email']) && $this->salesData->canSendNewCreditMemoEmail()) {
$this->creditmemoSender->send($creditmemo);
}
$this->messageManager->addSuccessMessage(__('You created the credit memo.'));
$this->_getSession()->getCommentText(true);
$resultRedirect->setPath('sales/order/view', ['order_id' => $creditmemo->getOrderId()]);
return $resultRedirect;
} else {
$resultForward = $this->resultForwardFactory->create();
$resultForward->forward('noroute');
return $resultForward;
}
} catch (\Magento\Framework\Exception\LocalizedException $e) {
$this->messageManager->addErrorMessage($e->getMessage());
$this->_getSession()->setFormData($data);
} catch (\Exception $e) {
$this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e);
$this->messageManager->addErrorMessage(__('We can\'t save the credit memo right now.'));
}
$resultRedirect->setPath('sales/*/new', ['_current' => true]);
return $resultRedirect;
}
}