CaseManagement.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Signifyd\Model;
  7. use Magento\Framework\Api\FilterBuilder;
  8. use Magento\Framework\Api\SearchCriteriaBuilder;
  9. use Magento\Signifyd\Api\CaseManagementInterface;
  10. use Magento\Signifyd\Api\CaseRepositoryInterface;
  11. use Magento\Signifyd\Api\Data\CaseInterface;
  12. use Magento\Signifyd\Api\Data\CaseInterfaceFactory;
  13. use Magento\Framework\Exception\AlreadyExistsException;
  14. use Magento\Framework\DB\Adapter\DuplicateException;
  15. /**
  16. *
  17. * Default case management implementation
  18. */
  19. class CaseManagement implements CaseManagementInterface
  20. {
  21. /**
  22. * @var CaseRepositoryInterface
  23. */
  24. private $caseRepository;
  25. /**
  26. * @var CaseInterfaceFactory
  27. */
  28. private $caseFactory;
  29. /**
  30. * @var FilterBuilder
  31. */
  32. private $filterBuilder;
  33. /**
  34. * @var SearchCriteriaBuilder
  35. */
  36. private $searchCriteriaBuilder;
  37. /**
  38. * CaseManagement constructor.
  39. * @param CaseRepositoryInterface $caseRepository
  40. * @param CaseInterfaceFactory $caseFactory
  41. * @param FilterBuilder $filterBuilder
  42. * @param SearchCriteriaBuilder $searchCriteriaBuilder
  43. */
  44. public function __construct(
  45. CaseRepositoryInterface $caseRepository,
  46. CaseInterfaceFactory $caseFactory,
  47. FilterBuilder $filterBuilder,
  48. SearchCriteriaBuilder $searchCriteriaBuilder
  49. ) {
  50. $this->caseRepository = $caseRepository;
  51. $this->caseFactory = $caseFactory;
  52. $this->searchCriteriaBuilder = $searchCriteriaBuilder;
  53. $this->filterBuilder = $filterBuilder;
  54. }
  55. /**
  56. * @inheritdoc
  57. */
  58. public function create($orderId)
  59. {
  60. /** @var \Magento\Signifyd\Api\Data\CaseInterface $case */
  61. $case = $this->caseFactory->create();
  62. $case->setOrderId($orderId)
  63. ->setStatus(CaseInterface::STATUS_PENDING)
  64. ->setGuaranteeDisposition(CaseInterface::GUARANTEE_PENDING);
  65. try {
  66. return $this->caseRepository->save($case);
  67. } catch (DuplicateException $e) {
  68. throw new AlreadyExistsException(__('This order already has associated case entity'), $e);
  69. }
  70. }
  71. /**
  72. * @inheritdoc
  73. */
  74. public function getByOrderId($orderId)
  75. {
  76. $filters = [
  77. $this->filterBuilder->setField('order_id')
  78. ->setValue($orderId)
  79. ->create()
  80. ];
  81. $searchCriteria = $this->searchCriteriaBuilder->addFilters($filters)->create();
  82. $items = $this->caseRepository->getList($searchCriteria)->getItems();
  83. return !empty($items) ? array_pop($items) : null;
  84. }
  85. }