Skip to content

Commit 2167dc7

Browse files
Merge branch 'MAGETWO-95809' of https://github.com/magento-epam/magento2ce into MAGETWO-95809
2 parents 6481cec + 5854ca3 commit 2167dc7

File tree

6 files changed

+170
-0
lines changed

6 files changed

+170
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Sales\Plugin;
9+
10+
use Magento\Framework\Reflection\DataObjectProcessor as Subject;
11+
use Magento\Sales\Api\Data\OrderItemInterface;
12+
use Magento\Sales\Model\Order\Item as OrderItem;
13+
use Magento\Weee\Block\Item\Price\Renderer;
14+
15+
/**
16+
* Class for changing row total in response.
17+
*/
18+
class DataObjectProcessor
19+
{
20+
/**
21+
* @var Renderer
22+
*/
23+
private $priceRenderer;
24+
25+
/**
26+
* @param Renderer $priceRenderer
27+
*/
28+
public function __construct(
29+
Renderer $priceRenderer
30+
) {
31+
$this->priceRenderer = $priceRenderer;
32+
}
33+
34+
/**
35+
* Changing row total for webapi order item response.
36+
*
37+
* @param Subject $subject
38+
* @param array $result
39+
* @param mixed $dataObject
40+
* @return array
41+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
42+
*/
43+
public function afterBuildOutputDataArray(
44+
Subject $subject,
45+
$result,
46+
$dataObject
47+
) {
48+
if ($dataObject instanceof OrderItem) {
49+
$result[OrderItemInterface::ROW_TOTAL] = $this->priceRenderer->getTotalAmount($dataObject);
50+
$result[OrderItemInterface::BASE_ROW_TOTAL] = $this->priceRenderer->getBaseTotalAmount($dataObject);
51+
}
52+
53+
return $result;
54+
}
55+
}

app/code/Magento/Sales/etc/webapi_rest/di.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,7 @@
1515
<type name="Magento\Sales\Api\ShipmentRepositoryInterface">
1616
<plugin name="convert_blob_to_string" type="Magento\Sales\Plugin\ShippingLabelConverter" />
1717
</type>
18+
<type name="Magento\Framework\Reflection\DataObjectProcessor">
19+
<plugin name="change_row_total" type="Magento\Sales\Plugin\DataObjectProcessor" />
20+
</type>
1821
</config>

app/code/Magento/Sales/etc/webapi_soap/di.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,7 @@
1515
<type name="Magento\Sales\Api\ShipmentRepositoryInterface">
1616
<plugin name="convert_blob_to_string" type="Magento\Sales\Plugin\ShippingLabelConverter" />
1717
</type>
18+
<type name="Magento\Framework\Reflection\DataObjectProcessor">
19+
<plugin name="change_row_total" type="Magento\Sales\Plugin\DataObjectProcessor" />
20+
</type>
1821
</config>

dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetTest.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,34 @@ protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, a
7777
$this->assertEquals($orderItem->getBasePrice(), $response['base_price']);
7878
$this->assertEquals($orderItem->getRowTotal(), $response['row_total']);
7979
}
80+
81+
/**
82+
* @magentoApiDataFixture Magento/Sales/_files/order_with_discount.php
83+
*/
84+
public function testGetOrderWithDiscount()
85+
{
86+
/** @var \Magento\Sales\Model\Order $order */
87+
$order = $this->objectManager->create(\Magento\Sales\Model\Order::class);
88+
$order->loadByIncrementId(self::ORDER_INCREMENT_ID);
89+
/** @var \Magento\Sales\Model\Order\Item $orderItem */
90+
$orderItem = current($order->getItems());
91+
92+
$serviceInfo = [
93+
'rest' => [
94+
'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(),
95+
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
96+
],
97+
'soap' => [
98+
'service' => self::SERVICE_NAME,
99+
'serviceVersion' => self::SERVICE_VERSION,
100+
'operation' => self::SERVICE_NAME . 'get',
101+
],
102+
];
103+
104+
$response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]);
105+
106+
$this->assertTrue(is_array($response));
107+
$this->assertEquals(8.00, $response['row_total']);
108+
$this->assertEquals(8.00, $response['base_row_total']);
109+
}
80110
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Sales\Api\OrderRepositoryInterface;
9+
use Magento\Sales\Model\Order;
10+
use Magento\Sales\Model\Order\Address as OrderAddress;
11+
use Magento\Sales\Model\Order\Item as OrderItem;
12+
use Magento\Sales\Model\Order\Payment;
13+
use Magento\Store\Model\StoreManagerInterface;
14+
15+
require __DIR__ . '/../../../Magento/Catalog/_files/product_simple.php';
16+
/** @var \Magento\Catalog\Model\Product $product */
17+
18+
$addressData = include __DIR__ . '/address_data.php';
19+
20+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
21+
22+
$billingAddress = $objectManager->create(OrderAddress::class, ['data' => $addressData]);
23+
$billingAddress->setAddressType('billing');
24+
25+
$shippingAddress = clone $billingAddress;
26+
$shippingAddress->setId(null)->setAddressType('shipping');
27+
28+
/** @var Payment $payment */
29+
$payment = $objectManager->create(Payment::class);
30+
$payment->setMethod('checkmo')
31+
->setAdditionalInformation('last_trans_id', '11122')
32+
->setAdditionalInformation(
33+
'metadata',
34+
[
35+
'type' => 'free',
36+
'fraudulent' => false,
37+
]
38+
);
39+
40+
/** @var OrderItem $orderItem */
41+
$orderItem = $objectManager->create(OrderItem::class);
42+
$orderItem->setProductId($product->getId())
43+
->setQtyOrdered(2)
44+
->setBasePrice($product->getPrice())
45+
->setPrice($product->getPrice())
46+
->setRowTotal($product->getPrice())
47+
->setProductType('simple')
48+
->setDiscountAmount(2)
49+
->setBaseRowTotal($product->getPrice())
50+
->setBaseDiscountAmount(2);
51+
52+
/** @var Order $order */
53+
$order = $objectManager->create(Order::class);
54+
$order->setIncrementId('100000001')
55+
->setState(Order::STATE_PROCESSING)
56+
->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_PROCESSING))
57+
->setSubtotal(100)
58+
->setGrandTotal(100)
59+
->setBaseSubtotal(100)
60+
->setBaseGrandTotal(100)
61+
->setCustomerIsGuest(true)
62+
->setCustomerEmail('[email protected]')
63+
->setBillingAddress($billingAddress)
64+
->setShippingAddress($shippingAddress)
65+
->setStoreId($objectManager->get(StoreManagerInterface::class)->getStore()->getId())
66+
->addItem($orderItem)
67+
->setPayment($payment);
68+
69+
/** @var OrderRepositoryInterface $orderRepository */
70+
$orderRepository = $objectManager->create(OrderRepositoryInterface::class);
71+
$orderRepository->save($order);
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
require 'default_rollback.php';

0 commit comments

Comments
 (0)