VoidAction.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Controller\Adminhtml\Order\Creditmemo;
  7. use Magento\Backend\App\Action;
  8. class VoidAction extends Action
  9. {
  10. /**
  11. * Authorization level of a basic admin session
  12. *
  13. * @see _isAllowed()
  14. */
  15. const ADMIN_RESOURCE = 'Magento_Sales::sales_creditmemo';
  16. /**
  17. * @var \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader
  18. */
  19. protected $creditmemoLoader;
  20. /**
  21. * @var \Magento\Backend\Model\View\Result\ForwardFactory
  22. */
  23. protected $resultForwardFactory;
  24. /**
  25. * @param Action\Context $context
  26. * @param \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader
  27. * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
  28. */
  29. public function __construct(
  30. Action\Context $context,
  31. \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader,
  32. \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory
  33. ) {
  34. $this->creditmemoLoader = $creditmemoLoader;
  35. $this->resultForwardFactory = $resultForwardFactory;
  36. parent::__construct($context);
  37. }
  38. /**
  39. * Void creditmemo action
  40. *
  41. * @return \Magento\Backend\Model\View\Result\Redirect|\Magento\Backend\Model\View\Result\Forward
  42. */
  43. public function execute()
  44. {
  45. $this->creditmemoLoader->setOrderId($this->getRequest()->getParam('order_id'));
  46. $this->creditmemoLoader->setCreditmemoId($this->getRequest()->getParam('creditmemo_id'));
  47. $this->creditmemoLoader->setCreditmemo($this->getRequest()->getParam('creditmemo'));
  48. $this->creditmemoLoader->setInvoiceId($this->getRequest()->getParam('invoice_id'));
  49. $creditmemo = $this->creditmemoLoader->load();
  50. if ($creditmemo) {
  51. try {
  52. $creditmemo->void();
  53. $transactionSave = $this->_objectManager->create(\Magento\Framework\DB\Transaction::class);
  54. $transactionSave->addObject($creditmemo);
  55. $transactionSave->addObject($creditmemo->getOrder());
  56. if ($creditmemo->getInvoice()) {
  57. $transactionSave->addObject($creditmemo->getInvoice());
  58. }
  59. $transactionSave->save();
  60. $this->messageManager->addSuccessMessage(__('You voided the credit memo.'));
  61. } catch (\Magento\Framework\Exception\LocalizedException $e) {
  62. $this->messageManager->addErrorMessage($e->getMessage());
  63. } catch (\Exception $e) {
  64. $this->messageManager->addErrorMessage(__('We can\'t void the credit memo.'));
  65. }
  66. $resultRedirect = $this->resultRedirectFactory->create();
  67. $resultRedirect->setPath('sales/*/view', ['creditmemo_id' => $creditmemo->getId()]);
  68. return $resultRedirect;
  69. } else {
  70. $resultForward = $this->resultForwardFactory->create();
  71. $resultForward->forward('noroute');
  72. return $resultForward;
  73. }
  74. }
  75. }