CommentRepository.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Model\Order\Creditmemo;
  7. use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface;
  8. use Magento\Framework\Api\SearchCriteriaInterface;
  9. use Magento\Framework\App\ObjectManager;
  10. use Magento\Framework\Exception\CouldNotDeleteException;
  11. use Magento\Framework\Exception\CouldNotSaveException;
  12. use Magento\Sales\Api\CreditmemoCommentRepositoryInterface;
  13. use Magento\Sales\Api\Data\CreditmemoCommentInterface;
  14. use Magento\Sales\Api\Data\CreditmemoCommentInterfaceFactory;
  15. use Magento\Sales\Api\Data\CreditmemoCommentSearchResultInterfaceFactory;
  16. use Magento\Sales\Model\Spi\CreditmemoCommentResourceInterface;
  17. use Magento\Sales\Model\Order\Email\Sender\CreditmemoCommentSender;
  18. use Magento\Sales\Api\CreditmemoRepositoryInterface;
  19. use Psr\Log\LoggerInterface;
  20. /**
  21. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  22. */
  23. class CommentRepository implements CreditmemoCommentRepositoryInterface
  24. {
  25. /**
  26. * @var CreditmemoCommentResourceInterface
  27. */
  28. private $commentResource;
  29. /**
  30. * @var CreditmemoCommentInterfaceFactory
  31. */
  32. private $commentFactory;
  33. /**
  34. * @var CreditmemoCommentSearchResultInterfaceFactory
  35. */
  36. private $searchResultFactory;
  37. /**
  38. * @var CollectionProcessorInterface
  39. */
  40. private $collectionProcessor;
  41. /**
  42. * @var CreditmemoCommentSender
  43. */
  44. private $creditmemoCommentSender;
  45. /**
  46. * @var CreditmemoRepositoryInterface
  47. */
  48. private $creditmemoRepository;
  49. /**
  50. * @var LoggerInterface
  51. */
  52. private $logger;
  53. /**
  54. * @param CreditmemoCommentResourceInterface $commentResource
  55. * @param CreditmemoCommentInterfaceFactory $commentFactory
  56. * @param CreditmemoCommentSearchResultInterfaceFactory $searchResultFactory
  57. * @param CollectionProcessorInterface $collectionProcessor
  58. * @param CreditmemoCommentSender|null $creditmemoCommentSender
  59. * @param CreditmemoRepositoryInterface|null $creditmemoRepository
  60. * @param LoggerInterface|null $logger
  61. */
  62. public function __construct(
  63. CreditmemoCommentResourceInterface $commentResource,
  64. CreditmemoCommentInterfaceFactory $commentFactory,
  65. CreditmemoCommentSearchResultInterfaceFactory $searchResultFactory,
  66. CollectionProcessorInterface $collectionProcessor,
  67. CreditmemoCommentSender $creditmemoCommentSender = null,
  68. CreditmemoRepositoryInterface $creditmemoRepository = null,
  69. LoggerInterface $logger = null
  70. ) {
  71. $this->commentResource = $commentResource;
  72. $this->commentFactory = $commentFactory;
  73. $this->searchResultFactory = $searchResultFactory;
  74. $this->collectionProcessor = $collectionProcessor;
  75. $this->creditmemoCommentSender = $creditmemoCommentSender
  76. ?: ObjectManager::getInstance()->get(CreditmemoCommentSender::class);
  77. $this->creditmemoRepository = $creditmemoRepository
  78. ?: ObjectManager::getInstance()->get(CreditmemoRepositoryInterface::class);
  79. $this->logger = $logger ?: ObjectManager::getInstance()->get(LoggerInterface::class);
  80. }
  81. /**
  82. * @inheritdoc
  83. */
  84. public function get($id)
  85. {
  86. $entity = $this->commentFactory->create();
  87. $this->commentResource->load($entity, $id);
  88. return $entity;
  89. }
  90. /**
  91. * @inheritdoc
  92. */
  93. public function getList(SearchCriteriaInterface $searchCriteria)
  94. {
  95. $searchResult = $this->searchResultFactory->create();
  96. $this->collectionProcessor->process($searchCriteria, $searchResult);
  97. $searchResult->setSearchCriteria($searchCriteria);
  98. return $searchResult;
  99. }
  100. /**
  101. * @inheritdoc
  102. */
  103. public function delete(CreditmemoCommentInterface $entity)
  104. {
  105. try {
  106. $this->commentResource->delete($entity);
  107. } catch (\Exception $e) {
  108. throw new CouldNotDeleteException(__('Could not delete the comment.'), $e);
  109. }
  110. return true;
  111. }
  112. /**
  113. * @inheritdoc
  114. */
  115. public function save(CreditmemoCommentInterface $entity)
  116. {
  117. try {
  118. $this->commentResource->save($entity);
  119. } catch (\Exception $e) {
  120. throw new CouldNotSaveException(__('Could not save the creditmemo comment.'), $e);
  121. }
  122. try {
  123. $creditmemo = $this->creditmemoRepository->get($entity->getParentId());
  124. $this->creditmemoCommentSender->send($creditmemo, $entity->getIsCustomerNotified(), $entity->getComment());
  125. } catch (\Exception $exception) {
  126. $this->logger->critical($exception);
  127. }
  128. return $entity;
  129. }
  130. }