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