Skip to content

Commit eb49422

Browse files
committed
Merge remote-tracking branch 'adobe-commerce-tier-4/ACP2E-3003' into Tier4-Kings-PR-06-12-2024
2 parents c7e04b5 + a93542b commit eb49422

File tree

3 files changed

+126
-27
lines changed

3 files changed

+126
-27
lines changed

app/code/Magento/Sales/Block/Adminhtml/Items/Column/DefaultColumn.php

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@
99
use Magento\Sales\Model\Order\Invoice\Item as InvoiceItem;
1010
use Magento\Sales\Model\Order\Item;
1111
use Magento\Quote\Model\Quote\Item\AbstractItem as QuoteItem;
12+
use Magento\Store\Model\Store;
13+
use Magento\Store\Model\ScopeInterface;
14+
use Magento\Tax\Model\Config;
1215

1316
/**
1417
* Adminhtml sales order column renderer
1518
*
1619
* @api
17-
* @author Magento Core Team <core@magentocommerce.com>
1820
* @since 100.0.2
1921
*/
2022
class DefaultColumn extends \Magento\Sales\Block\Adminhtml\Items\AbstractItems
2123
{
2224
/**
23-
* Option factory
24-
*
2525
* @var \Magento\Catalog\Model\Product\OptionFactory
2626
*/
2727
protected $_optionFactory;
@@ -122,7 +122,13 @@ public function getSku()
122122
*/
123123
public function getTotalAmount($item)
124124
{
125-
$totalAmount = $item->getRowTotal() - $item->getDiscountAmount();
125+
$storeId = $item->getStoreId();
126+
$total = $this->displaySalesPricesInclTax($storeId) ? $item->getPriceInclTax()
127+
: $item->getPrice();
128+
129+
$totalAmount = $this->displaySalesPricesInclTax($storeId)
130+
? $total - $item->getDiscountAmount() - $item->getTaxAmount()
131+
: $total - $item->getDiscountAmount();
126132

127133
return $totalAmount;
128134
}
@@ -135,8 +141,29 @@ public function getTotalAmount($item)
135141
*/
136142
public function getBaseTotalAmount($item)
137143
{
138-
$baseTotalAmount = $item->getBaseRowTotal() - $item->getBaseDiscountAmount();
144+
$storeId = $item->getStoreId();
145+
$baseTotal = $this->displaySalesPricesInclTax($storeId) ? $item->getBasePriceInclTax()
146+
: $item->getBasePrice();
147+
148+
$baseTotalAmount = $this->displaySalesPricesInclTax($storeId)
149+
? $baseTotal - $item->getBaseDiscountAmount() - $item->getBaseTaxAmount()
150+
: $baseTotal - $item->getBaseDiscountAmount();
139151

140152
return $baseTotalAmount;
141153
}
154+
155+
/**
156+
* Return the flag to display sales prices including tax
157+
*
158+
* @param string|bool|int|Store $store
159+
* @return bool
160+
*/
161+
private function displaySalesPricesInclTax($store = null): bool
162+
{
163+
return $this->_scopeConfig->getValue(
164+
Config::XML_PATH_DISPLAY_SALES_PRICE,
165+
ScopeInterface::SCOPE_STORE,
166+
$store
167+
) == Config::DISPLAY_TYPE_INCLUDING_TAX;
168+
}
142169
}

app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Items/Column/DefaultColumnTest.php

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

88
namespace Magento\Sales\Test\Unit\Block\Adminhtml\Items\Column;
99

10+
use Magento\Framework\App\Config\ScopeConfigInterface;
1011
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
1112
use Magento\Sales\Block\Adminhtml\Items\Column\DefaultColumn;
1213
use Magento\Sales\Model\Order\Item;
@@ -28,43 +29,114 @@ class DefaultColumnTest extends TestCase
2829
*/
2930
protected $itemMock;
3031

32+
/**
33+
* @var ScopeConfigInterface|MockObject
34+
*/
35+
protected $scopeConfigMock;
36+
3137
protected function setUp(): void
3238
{
3339
$this->objectManagerHelper = new ObjectManagerHelper($this);
40+
$this->scopeConfigMock = $this->getMockBuilder(ScopeConfigInterface::class)
41+
->disableOriginalConstructor()
42+
->getMockForAbstractClass();
3443
$this->defaultColumn = $this->objectManagerHelper->getObject(
35-
DefaultColumn::class
44+
DefaultColumn::class,
45+
[
46+
'scopeConfig' => $this->scopeConfigMock
47+
]
3648
);
3749
$this->itemMock = $this->getMockBuilder(Item::class)
3850
->disableOriginalConstructor()
39-
->onlyMethods(['getRowTotal', 'getDiscountAmount', 'getBaseRowTotal', 'getBaseDiscountAmount'])
4051
->getMock();
4152
}
4253

43-
public function testGetTotalAmount()
54+
/**
55+
* Verify the total amount based on the price including tax flag
56+
*
57+
* @dataProvider getScopeConfigSalesPriceDataProvider
58+
* @param string $taxIncl
59+
* @param float|null $basePriceInclTax
60+
* @param float $basePrice
61+
* @param float $expectedResult
62+
* @return void
63+
* @throws \ReflectionException
64+
*/
65+
public function testGetTotalAmount(string $taxIncl, $priceInclTax, float $price, float $expectedResult): void
4466
{
45-
$rowTotal = 10;
46-
$discountAmount = 2;
47-
$expectedResult = 8;
67+
$storeId = 1;
68+
$discountAmount = 15.21;
69+
$taxAmount = 0.34;
4870
$this->itemMock->expects($this->once())
49-
->method('getRowTotal')
50-
->willReturn($rowTotal);
71+
->method('getStoreId')
72+
->willReturn($storeId);
73+
$this->itemMock->expects($this->any())
74+
->method('getPriceInclTax')
75+
->willReturn($priceInclTax);
76+
$this->itemMock->expects($this->any())
77+
->method('getPrice')
78+
->willReturn($price);
5179
$this->itemMock->expects($this->once())
5280
->method('getDiscountAmount')
5381
->willReturn($discountAmount);
54-
$this->assertEquals($expectedResult, $this->defaultColumn->getTotalAmount($this->itemMock));
82+
$this->itemMock->expects($this->any())
83+
->method('getTaxAmount')
84+
->willReturn($taxAmount);
85+
$this->scopeConfigMock->expects($this->atLeastOnce())
86+
->method('getValue')
87+
->willReturn($taxIncl);
88+
$this->assertEquals($expectedResult, round($this->defaultColumn->getTotalAmount($this->itemMock), 2));
5589
}
5690

57-
public function testGetBaseTotalAmount()
58-
{
59-
$baseRowTotal = 10;
60-
$baseDiscountAmount = 2;
61-
$expectedResult = 8;
91+
/**
92+
* Verify the total base amount based on the price including tax flag
93+
*
94+
* @dataProvider getScopeConfigSalesPriceDataProvider
95+
* @param string $taxIncl
96+
* @param float|null $basePriceInclTax
97+
* @param float $basePrice
98+
* @param float $expectedResult
99+
* @return void
100+
* @throws \ReflectionException
101+
*/
102+
public function testGetBaseTotalAmount(
103+
string $taxIncl,
104+
$basePriceInclTax,
105+
float $basePrice,
106+
float $expectedResult
107+
): void {
108+
$storeId = 1;
109+
$baseDiscountAmount = 15.21;
110+
$baseTaxAmount = 0.34;
62111
$this->itemMock->expects($this->once())
63-
->method('getBaseRowTotal')
64-
->willReturn($baseRowTotal);
112+
->method('getStoreId')
113+
->willReturn($storeId);
114+
$this->itemMock->expects($this->any())
115+
->method('getBasePriceInclTax')
116+
->willReturn($basePriceInclTax);
117+
$this->itemMock->expects($this->any())
118+
->method('getBasePrice')
119+
->willReturn($basePrice);
65120
$this->itemMock->expects($this->once())
66121
->method('getBaseDiscountAmount')
67122
->willReturn($baseDiscountAmount);
68-
$this->assertEquals($expectedResult, $this->defaultColumn->getBaseTotalAmount($this->itemMock));
123+
$this->itemMock->expects($this->any())
124+
->method('getBaseTaxAmount')
125+
->willReturn($baseTaxAmount);
126+
$this->scopeConfigMock->expects($this->atLeastOnce())
127+
->method('getValue')
128+
->willReturn($taxIncl);
129+
$this->assertEquals($expectedResult, round($this->defaultColumn->getBaseTotalAmount($this->itemMock), 2));
130+
}
131+
132+
/**
133+
* @return array
134+
*/
135+
public function getScopeConfigSalesPriceDataProvider(): array
136+
{
137+
return [
138+
['2', 16.9, 13.52, 1.35],
139+
['1', null, 16.9, 1.69],
140+
];
69141
}
70142
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99

1010
class OrderItemGetListTest extends WebapiAbstract
1111
{
12-
const RESOURCE_PATH = '/V1/orders/items';
12+
private const RESOURCE_PATH = '/V1/orders/items';
1313

14-
const SERVICE_VERSION = 'V1';
15-
const SERVICE_NAME = 'salesOrderItemRepositoryV1';
14+
private const SERVICE_VERSION = 'V1';
15+
private const SERVICE_NAME = 'salesOrderItemRepositoryV1';
1616

17-
const ORDER_INCREMENT_ID = '100000001';
17+
private const ORDER_INCREMENT_ID = '100000001';
1818

1919
/**
2020
* @var \Magento\TestFramework\ObjectManager
@@ -31,7 +31,7 @@ protected function setUp(): void
3131
*/
3232
public function testGetList()
3333
{
34-
$expectedRowTotals = [112, 102, 92];
34+
$expectedRowTotals = [110, 100, 90];
3535
/** @var \Magento\Framework\Api\SortOrderBuilder $sortOrderBuilder */
3636
$sortOrderBuilder = $this->objectManager->get(
3737
\Magento\Framework\Api\SortOrderBuilder::class

0 commit comments

Comments
 (0)