Skip to content

Commit 24076a8

Browse files
author
Serhiy Shkolyarenko
committed
MAGETWO-39117: Updating qty that exceeds the qty in stock for registered customer by API should return error
refactored as factory
1 parent f37345e commit 24076a8

File tree

2 files changed

+65
-2
lines changed

2 files changed

+65
-2
lines changed

app/code/Magento/Quote/Model/QuoteRepository/SaveHandler.php

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
*/
66
namespace Magento\Quote\Model\QuoteRepository;
77

8+
use Magento\Framework\App\ObjectManager;
89
use Magento\Quote\Api\Data\CartInterface;
910
use Magento\Framework\Exception\InputException;
10-
use Magento\Framework\Exception\CouldNotSaveMultiMessageException;
11+
use Magento\Framework\Exception\CouldNotSaveException;
1112

1213
class SaveHandler
1314
{
@@ -31,6 +32,11 @@ class SaveHandler
3132
*/
3233
private $shippingAssignmentPersister;
3334

35+
/**
36+
* @var \Magento\Framework\Message\PhraseFactory
37+
*/
38+
private $phraseFactory;
39+
3440
/**
3541
* @param \Magento\Quote\Model\ResourceModel\Quote $quoteResource
3642
* @param \Magento\Quote\Model\Quote\Item\CartItemPersister $cartItemPersister
@@ -73,7 +79,10 @@ public function save(CartInterface $quote)
7379
}
7480
$errors = $quote->getErrors();
7581
if (!empty($errors)) {
76-
throw new CouldNotSaveMultiMessageException('Following errors occurred on save: %1', $errors);
82+
$phraseFactory = $this->getPhraseFactory();
83+
throw new CouldNotSaveException(
84+
$phraseFactory->create('Following errors occurred on save: %1', $errors)
85+
);
7786
}
7887

7988
// Billing Address processing
@@ -88,6 +97,18 @@ public function save(CartInterface $quote)
8897
return $quote;
8998
}
9099

100+
/**
101+
* @deprecated
102+
* @return \Magento\Framework\Message\PhraseFactory
103+
*/
104+
private function getPhraseFactory()
105+
{
106+
if (!is_object($this->phraseFactory)) {
107+
$this->phraseFactory = ObjectManager::getInstance()->get(\Magento\Framework\Message\PhraseFactory::class);
108+
}
109+
return $this->phraseFactory;
110+
}
111+
91112
/**
92113
* @param \Magento\Quote\Model\Quote $quote
93114
* @return void
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\Message;
7+
8+
use Magento\Framework\Phrase;
9+
use Magento\Framework\Message\MessageInterface;
10+
11+
/**
12+
* Factory to combine several messages into one
13+
*/
14+
class PhraseFactory
15+
{
16+
/**
17+
* Combine submessages delimited by separator and render them with main message
18+
*
19+
* @param string $mainMessage
20+
* @param MessageInterface[] $subMessages
21+
* @param string $separator
22+
* @return Phrase
23+
*/
24+
public function create($mainMessage, $subMessages, $separator = '; ')
25+
{
26+
$renderedErrors = '';
27+
$eol = '';
28+
/** @var MessageInterface $subMessage */
29+
foreach ($subMessages as $subMessage) {
30+
if ($subMessage instanceof MessageInterface) {
31+
$phrase = new Phrase($subMessage->getText());
32+
} else {
33+
$phrase = new Phrase('Cannot render error message!');
34+
}
35+
$renderedErrors .= $eol . $phrase->render();
36+
$eol = $separator;
37+
}
38+
39+
//$mainMessage should contain %1 to be substituted by concatenated errors
40+
return new Phrase($mainMessage, [$renderedErrors]);
41+
}
42+
}

0 commit comments

Comments
 (0)