Skip to content

Commit 8278e9b

Browse files
committed
MAGETWO-91678: Minimum Order amount required in Admin orders
1 parent cba40fa commit 8278e9b

12 files changed

+154
-244
lines changed

app/code/Magento/Quote/Model/QuoteValidator.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,12 @@ public function validateQuoteAmount(QuoteEntity $quote, $amount)
8484
*/
8585
public function validateBeforeSubmit(QuoteEntity $quote)
8686
{
87-
foreach ($this->quoteValidationRule->validate($quote) as $messages) {
87+
foreach ($this->quoteValidationRule->validate($quote) as $validationResult) {
88+
if ($validationResult->isValid()) {
89+
continue;
90+
}
91+
92+
$messages = $validationResult->getErrors();
8893
$defaultMessage = array_shift($messages);
8994
if ($defaultMessage && !empty($messages)) {
9095
$defaultMessage .= ' %1';

app/code/Magento/Quote/Model/ValidationRules/AllowedCountryValidationRule.php

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,39 @@
88
namespace Magento\Quote\Model\ValidationRules;
99

1010
use Magento\Directory\Model\AllowedCountries;
11+
use Magento\Framework\Validation\ValidationResultFactory;
1112
use Magento\Quote\Model\Quote;
1213

1314
class AllowedCountryValidationRule implements QuoteValidationRuleInterface
1415
{
1516
/**
1617
* @var string
1718
*/
18-
private $defaultMessage;
19+
private $generalMessage;
1920

2021
/**
2122
* @var AllowedCountries
2223
*/
2324
private $allowedCountryReader;
2425

26+
/**
27+
* @var ValidationResultFactory
28+
*/
29+
private $validationResultFactory;
30+
2531
/**
2632
* @param AllowedCountries $allowedCountryReader
27-
* @param string $defaultMessage
33+
* @param ValidationResultFactory $validationResultFactory
34+
* @param string $generalMessage
2835
*/
29-
public function __construct(AllowedCountries $allowedCountryReader, string $defaultMessage = '')
30-
{
31-
$this->defaultMessage = $defaultMessage;
36+
public function __construct(
37+
AllowedCountries $allowedCountryReader,
38+
ValidationResultFactory $validationResultFactory,
39+
string $generalMessage = ''
40+
) {
3241
$this->allowedCountryReader = $allowedCountryReader;
42+
$this->validationResultFactory = $validationResultFactory;
43+
$this->generalMessage = $generalMessage;
3344
}
3445

3546
/**
@@ -46,10 +57,10 @@ public function validate(Quote $quote): array
4657
$this->allowedCountryReader->getAllowedCountries()
4758
);
4859
if (!$validationResult) {
49-
$validationErrors = [$this->defaultMessage];
60+
$validationErrors = [$this->generalMessage];
5061
}
5162
}
5263

53-
return $validationErrors ? [get_class($this) => $validationErrors] : [];
64+
return [$this->validationResultFactory->create(['errors' => $validationErrors])];
5465
}
5566
}

app/code/Magento/Quote/Model/ValidationRules/BillingAddressValidationRule.php

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,31 @@
77

88
namespace Magento\Quote\Model\ValidationRules;
99

10+
use Magento\Framework\Validation\ValidationResultFactory;
1011
use Magento\Quote\Model\Quote;
1112

1213
class BillingAddressValidationRule implements QuoteValidationRuleInterface
1314
{
1415
/**
1516
* @var string
1617
*/
17-
private $defaultMessage;
18+
private $generalMessage;
1819

1920
/**
20-
* @param string $defaultMessage
21+
* @var ValidationResultFactory
2122
*/
22-
public function __construct(string $defaultMessage = '')
23-
{
24-
$this->defaultMessage = $defaultMessage;
23+
private $validationResultFactory;
24+
25+
/**
26+
* @param ValidationResultFactory $validationResultFactory
27+
* @param string $generalMessage
28+
*/
29+
public function __construct(
30+
ValidationResultFactory $validationResultFactory,
31+
string $generalMessage = ''
32+
) {
33+
$this->validationResultFactory = $validationResultFactory;
34+
$this->generalMessage = $generalMessage;
2535
}
2636

2737
/**
@@ -32,12 +42,12 @@ public function validate(Quote $quote): array
3242
$validationErrors = [];
3343
$validationResult = $quote->getBillingAddress()->validate();
3444
if ($validationResult !== true) {
35-
$validationErrors = [$this->defaultMessage];
45+
$validationErrors = [$this->generalMessage];
3646
}
3747
if (is_array($validationResult)) {
3848
$validationErrors = array_merge($validationErrors, $validationResult);
3949
}
4050

41-
return $validationErrors ? [get_class($this) => $validationErrors] : [];
51+
return [$this->validationResultFactory->create(['errors' => $validationErrors])];
4252
}
4353
}

app/code/Magento/Quote/Model/ValidationRules/MinimumAmountValidationRule.php

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace Magento\Quote\Model\ValidationRules;
99

10+
use Magento\Framework\Validation\ValidationResultFactory;
1011
use Magento\Quote\Model\Quote;
1112
use Magento\Quote\Model\Quote\Validator\MinimumOrderAmount\ValidationMessage;
1213

@@ -15,21 +16,31 @@ class MinimumAmountValidationRule implements QuoteValidationRuleInterface
1516
/**
1617
* @var string
1718
*/
18-
private $defaultMessage;
19+
private $generalMessage;
1920

2021
/**
2122
* @var ValidationMessage
2223
*/
2324
private $amountValidationMessage;
2425

26+
/**
27+
* @var ValidationResultFactory
28+
*/
29+
private $validationResultFactory;
30+
2531
/**
2632
* @param ValidationMessage $amountValidationMessage
27-
* @param string $defaultMessage
33+
* @param ValidationResultFactory $validationResultFactory
34+
* @param string $generalMessage
2835
*/
29-
public function __construct(ValidationMessage $amountValidationMessage, string $defaultMessage = '')
30-
{
36+
public function __construct(
37+
ValidationMessage $amountValidationMessage,
38+
ValidationResultFactory $validationResultFactory,
39+
string $generalMessage = ''
40+
) {
3141
$this->amountValidationMessage = $amountValidationMessage;
32-
$this->defaultMessage = $defaultMessage;
42+
$this->validationResultFactory = $validationResultFactory;
43+
$this->generalMessage = $generalMessage;
3344
}
3445

3546
/**
@@ -41,12 +52,12 @@ public function validate(Quote $quote): array
4152
$validationErrors = [];
4253
$validationResult = $quote->validateMinimumAmount($quote->getIsMultiShipping());
4354
if (!$validationResult) {
44-
if (!$this->defaultMessage) {
45-
$this->defaultMessage = $this->amountValidationMessage->getMessage();
55+
if (!$this->generalMessage) {
56+
$this->generalMessage = $this->amountValidationMessage->getMessage();
4657
}
47-
$validationErrors = [$this->defaultMessage];
58+
$validationErrors = [$this->generalMessage];
4859
}
4960

50-
return $validationErrors ? [get_class($this) => $validationErrors] : [];
61+
return [$this->validationResultFactory->create(['errors' => $validationErrors])];
5162
}
5263
}

app/code/Magento/Quote/Model/ValidationRules/PaymentMethodValidationRule.php

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,31 @@
77

88
namespace Magento\Quote\Model\ValidationRules;
99

10+
use Magento\Framework\Validation\ValidationResultFactory;
1011
use Magento\Quote\Model\Quote;
1112

1213
class PaymentMethodValidationRule implements QuoteValidationRuleInterface
1314
{
1415
/**
1516
* @var string
1617
*/
17-
private $defaultMessage;
18+
private $generalMessage;
1819

1920
/**
20-
* @param string $defaultMessage
21+
* @var ValidationResultFactory
2122
*/
22-
public function __construct(string $defaultMessage = '')
23-
{
24-
$this->defaultMessage = $defaultMessage;
23+
private $validationResultFactory;
24+
25+
/**
26+
* @param ValidationResultFactory $validationResultFactory
27+
* @param string $generalMessage
28+
*/
29+
public function __construct(
30+
ValidationResultFactory $validationResultFactory,
31+
string $generalMessage = ''
32+
) {
33+
$this->validationResultFactory = $validationResultFactory;
34+
$this->generalMessage = $generalMessage;
2535
}
2636

2737
/**
@@ -32,9 +42,9 @@ public function validate(Quote $quote): array
3242
$validationErrors = [];
3343
$validationResult = $quote->getPayment()->getMethod();
3444
if (!$validationResult) {
35-
$validationErrors = [$this->defaultMessage];
45+
$validationErrors = [$this->generalMessage];
3646
}
3747

38-
return $validationErrors ? [get_class($this) => $validationErrors] : [];
48+
return [$this->validationResultFactory->create(['errors' => $validationErrors])];
3949
}
4050
}

app/code/Magento/Quote/Model/ValidationRules/QuoteValidationComposite.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,22 @@ class QuoteValidationComposite implements QuoteValidationRuleInterface
1616
*/
1717
private $validationRules = [];
1818

19+
/**
20+
* @param QuoteValidationRuleInterface[] $validationRules
21+
* @throws \InvalidArgumentException
22+
*/
1923
public function __construct(array $validationRules)
2024
{
25+
foreach ($validationRules as $validationRule) {
26+
if (!($validationRule instanceof QuoteValidationRuleInterface)) {
27+
throw new \InvalidArgumentException(
28+
sprintf(
29+
'Instance of the ValidationRuleInterface is expected, got %s instead.',
30+
get_class($validationRule)
31+
)
32+
);
33+
}
34+
}
2135
$this->validationRules = $validationRules;
2236
}
2337

@@ -30,7 +44,11 @@ public function validate(Quote $quote): array
3044

3145
foreach ($this->validationRules as $validationRule) {
3246
$ruleValidationResult = $validationRule->validate($quote);
33-
$aggregateResult += $ruleValidationResult;
47+
foreach ($ruleValidationResult as $item) {
48+
if (!$item->isValid()) {
49+
array_push($aggregateResult, $item);
50+
}
51+
}
3452
}
3553

3654
return $aggregateResult;

app/code/Magento/Quote/Model/ValidationRules/QuoteValidationRuleInterface.php

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
namespace Magento\Quote\Model\ValidationRules;
88

9+
use Magento\Framework\Validation\ValidationResult;
910
use Magento\Quote\Model\Quote;
1011

1112
interface QuoteValidationRuleInterface
@@ -14,19 +15,7 @@ interface QuoteValidationRuleInterface
1415
* Validate quote model.
1516
*
1617
* @param Quote $quote
17-
* @return array
18-
* [
19-
* 'ruleId_1' => [
20-
* 'Base error message',
21-
* 'Additional error message #1',
22-
* 'Additional error message #2',
23-
* 'Additional error message #3',
24-
* 'Additional error message #4',
25-
* ],
26-
* 'ruleId_2' => [
27-
* 'Base error message',
28-
* ]
29-
* ]
18+
* @return ValidationResult[]
3019
*/
3120
public function validate(Quote $quote): array;
3221
}

app/code/Magento/Quote/Model/ValidationRules/ShippingAddressValidationRule.php

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,32 @@
77

88
namespace Magento\Quote\Model\ValidationRules;
99

10+
use Magento\Framework\Validation\ValidationResultFactory;
1011
use Magento\Quote\Model\Quote;
1112

1213
class ShippingAddressValidationRule implements QuoteValidationRuleInterface
1314
{
1415
/**
1516
* @var string
1617
*/
17-
private $defaultMessage;
18+
private $generalMessage;
1819

1920
/**
20-
* @param string $defaultMessage
21+
* @var ValidationResultFactory
2122
*/
22-
public function __construct(string $defaultMessage = '')
23+
private $validationResultFactory;
24+
25+
/**
26+
* @param ValidationResultFactory $validationResultFactory
27+
* @param string $generalMessage
28+
*/
29+
public function __construct(
30+
ValidationResultFactory $validationResultFactory,
31+
string $generalMessage = ''
32+
)
2333
{
24-
$this->defaultMessage = $defaultMessage;
34+
$this->validationResultFactory = $validationResultFactory;
35+
$this->generalMessage = $generalMessage;
2536
}
2637

2738
/**
@@ -34,13 +45,13 @@ public function validate(Quote $quote): array
3445
if (!$quote->isVirtual()) {
3546
$validationResult = $quote->getShippingAddress()->validate();
3647
if ($validationResult !== true) {
37-
$validationErrors = [$this->defaultMessage];
48+
$validationErrors = [$this->generalMessage];
3849
}
3950
if (is_array($validationResult)) {
4051
$validationErrors = array_merge($validationErrors, $validationResult);
4152
}
4253
}
4354

44-
return $validationErrors ? [get_class($this) => $validationErrors] : [];
55+
return [$this->validationResultFactory->create(['errors' => $validationErrors])];
4556
}
4657
}

0 commit comments

Comments
 (0)