AddComment.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. use Magento\Sales\Model\Order\Email\Sender\CreditmemoCommentSender;
  9. class AddComment extends \Magento\Backend\App\Action
  10. {
  11. /**
  12. * Authorization level of a basic admin session
  13. *
  14. * @see _isAllowed()
  15. */
  16. const ADMIN_RESOURCE = 'Magento_Sales::sales_creditmemo';
  17. /**
  18. * @var \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader
  19. */
  20. protected $creditmemoLoader;
  21. /**
  22. * @var CreditmemoCommentSender
  23. */
  24. protected $creditmemoCommentSender;
  25. /**
  26. * @var \Magento\Framework\View\Result\PageFactory
  27. */
  28. protected $pagePageFactory;
  29. /**
  30. * @var \Magento\Framework\Controller\Result\JsonFactory
  31. */
  32. protected $resultJsonFactory;
  33. /**
  34. * @var \Magento\Framework\Controller\Result\RawFactory
  35. */
  36. protected $resultRawFactory;
  37. /**
  38. * @param Action\Context $context
  39. * @param \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader
  40. * @param CreditmemoCommentSender $creditmemoCommentSender
  41. * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
  42. * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
  43. * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
  44. */
  45. public function __construct(
  46. Action\Context $context,
  47. \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader,
  48. CreditmemoCommentSender $creditmemoCommentSender,
  49. \Magento\Framework\View\Result\PageFactory $resultPageFactory,
  50. \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
  51. \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
  52. ) {
  53. $this->creditmemoLoader = $creditmemoLoader;
  54. $this->creditmemoCommentSender = $creditmemoCommentSender;
  55. $this->resultPageFactory = $resultPageFactory;
  56. $this->resultJsonFactory = $resultJsonFactory;
  57. $this->resultRawFactory = $resultRawFactory;
  58. parent::__construct($context);
  59. }
  60. /**
  61. * Add comment to creditmemo history
  62. *
  63. * @return \Magento\Framework\Controller\Result\Raw|\Magento\Framework\Controller\Result\Json
  64. */
  65. public function execute()
  66. {
  67. try {
  68. $this->getRequest()->setParam('creditmemo_id', $this->getRequest()->getParam('id'));
  69. $data = $this->getRequest()->getPost('comment');
  70. if (empty($data['comment'])) {
  71. throw new \Magento\Framework\Exception\LocalizedException(
  72. __('The comment is missing. Enter and try again.')
  73. );
  74. }
  75. $this->creditmemoLoader->setOrderId($this->getRequest()->getParam('order_id'));
  76. $this->creditmemoLoader->setCreditmemoId($this->getRequest()->getParam('creditmemo_id'));
  77. $this->creditmemoLoader->setCreditmemo($this->getRequest()->getParam('creditmemo'));
  78. $this->creditmemoLoader->setInvoiceId($this->getRequest()->getParam('invoice_id'));
  79. $creditmemo = $this->creditmemoLoader->load();
  80. $comment = $creditmemo->addComment(
  81. $data['comment'],
  82. isset($data['is_customer_notified']),
  83. isset($data['is_visible_on_front'])
  84. );
  85. $comment->save();
  86. $this->creditmemoCommentSender->send($creditmemo, !empty($data['is_customer_notified']), $data['comment']);
  87. $resultPage = $this->resultPageFactory->create();
  88. $response = $resultPage->getLayout()->getBlock('creditmemo_comments')->toHtml();
  89. } catch (\Magento\Framework\Exception\LocalizedException $e) {
  90. $response = ['error' => true, 'message' => $e->getMessage()];
  91. } catch (\Exception $e) {
  92. $response = ['error' => true, 'message' => __('Cannot add new comment.')];
  93. }
  94. if (is_array($response)) {
  95. $resultJson = $this->resultJsonFactory->create();
  96. $resultJson->setData($response);
  97. return $resultJson;
  98. } else {
  99. $resultRaw = $this->resultRawFactory->create();
  100. $resultRaw->setContents($response);
  101. return $resultRaw;
  102. }
  103. }
  104. }