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
94
95
96
97
98
99
100
101
102
103
104
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Sales\Model\Order\Validation;
use Magento\Sales\Api\Data\CreditmemoInterface;
use Magento\Sales\Api\Data\OrderInterface;
use Magento\Sales\Model\Order\Creditmemo\CreditmemoValidatorInterface;
use Magento\Sales\Model\Order\Creditmemo\Item\Validation\CreationQuantityValidator;
use Magento\Sales\Model\Order\Creditmemo\ItemCreationValidatorInterface;
use Magento\Sales\Model\Order\Creditmemo\Validation\QuantityValidator;
use Magento\Sales\Model\Order\Creditmemo\Validation\TotalsValidator;
use Magento\Sales\Model\Order\OrderValidatorInterface;
use Magento\Sales\Model\ValidatorResultMerger;
/**
* Class RefundOrder
*/
class RefundOrder implements RefundOrderInterface
{
/**
* @var OrderValidatorInterface
*/
private $orderValidator;
/**
* @var CreditmemoValidatorInterface
*/
private $creditmemoValidator;
/**
* @var ItemCreationValidatorInterface
*/
private $itemCreationValidator;
/**
* @var ValidatorResultMerger
*/
private $validatorResultMerger;
/**
* RefundArguments constructor.
*
* @param OrderValidatorInterface $orderValidator
* @param CreditmemoValidatorInterface $creditmemoValidator
* @param ItemCreationValidatorInterface $itemCreationValidator
* @param ValidatorResultMerger $validatorResultMerger
*/
public function __construct(
OrderValidatorInterface $orderValidator,
CreditmemoValidatorInterface $creditmemoValidator,
ItemCreationValidatorInterface $itemCreationValidator,
ValidatorResultMerger $validatorResultMerger
) {
$this->orderValidator = $orderValidator;
$this->creditmemoValidator = $creditmemoValidator;
$this->itemCreationValidator = $itemCreationValidator;
$this->validatorResultMerger = $validatorResultMerger;
}
/**
* @inheritdoc
*/
public function validate(
OrderInterface $order,
CreditmemoInterface $creditmemo,
array $items = [],
$notify = false,
$appendComment = false,
\Magento\Sales\Api\Data\CreditmemoCommentCreationInterface $comment = null,
\Magento\Sales\Api\Data\CreditmemoCreationArgumentsInterface $arguments = null
) {
$orderValidationResult = $this->orderValidator->validate(
$order,
[
CanRefund::class
]
);
$creditmemoValidationResult = $this->creditmemoValidator->validate(
$creditmemo,
[
QuantityValidator::class,
TotalsValidator::class
]
);
$itemsValidation = [];
foreach ($items as $item) {
$itemsValidation[] = $this->itemCreationValidator->validate(
$item,
[CreationQuantityValidator::class],
$order
)->getMessages();
}
return $this->validatorResultMerger->merge(
$orderValidationResult,
$creditmemoValidationResult,
...$itemsValidation
);
}
}