Skip to content

Commit 2aec062

Browse files
committed
Merge remote-tracking branch 'origin/MAGETWO-91682' into 2.3-develop-pr3
2 parents 4f221ae + 3b29919 commit 2aec062

File tree

8 files changed

+163
-10
lines changed

8 files changed

+163
-10
lines changed

app/code/Magento/Paypal/Model/Api/AbstractApi.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
namespace Magento\Paypal\Model\Api;
79

810
use Magento\Payment\Helper\Formatter;
@@ -427,6 +429,7 @@ protected function _exportLineItems(array &$request, $i = 0)
427429
if (isset($this->_lineItemTotalExportMap[$key])) {
428430
// !empty($total)
429431
$privateKey = $this->_lineItemTotalExportMap[$key];
432+
$total = round($total, 2);
430433
$request[$privateKey] = $this->formatPrice($total);
431434
}
432435
}

app/code/Magento/Paypal/Model/Cart.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
namespace Magento\Paypal\Model;
79

810
/**
@@ -177,7 +179,7 @@ protected function _applyDiscountTaxCompensationWorkaround(
177179
) {
178180
$dataContainer = $salesEntity->getTaxContainer();
179181
$this->addTax((double)$dataContainer->getBaseDiscountTaxCompensationAmount());
180-
$this->addTax((double)$dataContainer->getBaseShippingDiscountTaxCompensationAmnt());
182+
$this->addTax((double)$dataContainer->getBaseShippingDiscountTaxCompensationAmount());
181183
}
182184

183185
/**

app/code/Magento/Paypal/Model/Express/Checkout.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
namespace Magento\Paypal\Model\Express;
79

810
use Magento\Customer\Api\Data\CustomerInterface as CustomerDataObject;
@@ -498,7 +500,8 @@ public function start($returnUrl, $cancelUrl, $button = null)
498500
$solutionType = $this->_config->getMerchantCountry() == 'DE'
499501
? \Magento\Paypal\Model\Config::EC_SOLUTION_TYPE_MARK
500502
: $this->_config->getValue('solutionType');
501-
$this->_getApi()->setAmount($this->_quote->getBaseGrandTotal())
503+
$totalAmount = round($this->_quote->getBaseGrandTotal(), 2);
504+
$this->_getApi()->setAmount($totalAmount)
502505
->setCurrencyCode($this->_quote->getBaseCurrencyCode())
503506
->setInvNum($this->_quote->getReservedOrderId())
504507
->setReturnUrl($returnUrl)

app/code/Magento/Paypal/Test/Unit/Model/CartTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ protected function setUp()
7070
public function testInvalidGetAllItems($items)
7171
{
7272
$taxContainer = new \Magento\Framework\DataObject(
73-
['base_discount_tax_compensation_amount' => 0.2, 'base_shipping_discount_tax_compensation_amnt' => 0.1]
73+
['base_discount_tax_compensation_amount' => 0.2, 'base_shipping_discount_tax_compensation_amount' => 0.1]
7474
);
7575
$this->_salesModel->expects($this->once())->method('getTaxContainer')->will($this->returnValue($taxContainer));
7676
$this->_salesModel->expects($this->once())->method('getAllItems')->will($this->returnValue($items));
@@ -146,7 +146,7 @@ public function testInvalidTotalsGetAllItems($values, $transferDiscount)
146146
$this->assertEquals(
147147
$values['base_tax_amount'] +
148148
$values['base_discount_tax_compensation_amount'] +
149-
$values['base_shipping_discount_tax_compensation_amnt'],
149+
$values['base_shipping_discount_tax_compensation_amount'],
150150
$this->_model->getTax()
151151
);
152152
$this->assertEquals($values['base_shipping_amount'], $this->_model->getShipping());
@@ -162,7 +162,7 @@ public function invalidTotalsGetAllItemsDataProvider()
162162
[
163163
[
164164
'base_discount_tax_compensation_amount' => 0,
165-
'base_shipping_discount_tax_compensation_amnt' => 0,
165+
'base_shipping_discount_tax_compensation_amount' => 0,
166166
'base_subtotal' => 0,
167167
'base_tax_amount' => 0,
168168
'base_shipping_amount' => 0,
@@ -174,7 +174,7 @@ public function invalidTotalsGetAllItemsDataProvider()
174174
[
175175
[
176176
'base_discount_tax_compensation_amount' => 1,
177-
'base_shipping_discount_tax_compensation_amnt' => 2,
177+
'base_shipping_discount_tax_compensation_amount' => 2,
178178
'base_subtotal' => 3,
179179
'base_tax_amount' => 4,
180180
'base_shipping_amount' => 5,
@@ -255,8 +255,8 @@ protected function _prepareInvalidModelData($values, $transferDiscount)
255255
[
256256
'base_discount_tax_compensation_amount' =>
257257
$values['base_discount_tax_compensation_amount'],
258-
'base_shipping_discount_tax_compensation_amnt' =>
259-
$values['base_shipping_discount_tax_compensation_amnt'],
258+
'base_shipping_discount_tax_compensation_amount' =>
259+
$values['base_shipping_discount_tax_compensation_amount'],
260260
]
261261
);
262262
$expectedSubtotal = $values['base_subtotal'];

app/code/Magento/Tax/Model/Sales/Total/Quote/Shipping.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
namespace Magento\Tax\Model\Sales\Total\Quote;
79

810
use Magento\Quote\Model\Quote\Address;
@@ -39,16 +41,23 @@ public function collect(
3941
$quoteDetails = $this->prepareQuoteDetails($shippingAssignment, [$shippingDataObject]);
4042
$taxDetails = $this->taxCalculationService
4143
->calculateTax($quoteDetails, $storeId);
44+
$taxDetailsItems = $taxDetails->getItems()[self::ITEM_CODE_SHIPPING];
4245

4346
$baseQuoteDetails = $this->prepareQuoteDetails($shippingAssignment, [$baseShippingDataObject]);
4447
$baseTaxDetails = $this->taxCalculationService
4548
->calculateTax($baseQuoteDetails, $storeId);
49+
$baseTaxDetailsItems = $baseTaxDetails->getItems()[self::ITEM_CODE_SHIPPING];
50+
51+
$quote->getShippingAddress()
52+
->setShippingAmount($taxDetailsItems->getRowTotal());
53+
$quote->getShippingAddress()
54+
->setBaseShippingAmount($baseTaxDetailsItems->getRowTotal());
4655

4756
$this->processShippingTaxInfo(
4857
$shippingAssignment,
4958
$total,
50-
$taxDetails->getItems()[self::ITEM_CODE_SHIPPING],
51-
$baseTaxDetails->getItems()[self::ITEM_CODE_SHIPPING]
59+
$taxDetailsItems,
60+
$baseTaxDetailsItems
5261
);
5362

5463
return $this;
@@ -58,6 +67,8 @@ public function collect(
5867
* @param \Magento\Quote\Model\Quote $quote
5968
* @param Address\Total $total
6069
* @return array|null
70+
*
71+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
6172
*/
6273
public function fetch(\Magento\Quote\Model\Quote $quote, \Magento\Quote\Model\Quote\Address\Total $total)
6374
{

dev/tests/integration/testsuite/Magento/Tax/Model/Sales/Total/Quote/SetupUtil.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ class SetupUtil
141141
'discount_amount' => 40,
142142
'discount_step' => 0,
143143
'stop_rules_processing' => 1,
144+
'apply_to_shipping' => 0,
144145
'website_ids' => [1],
145146
];
146147

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
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\Tax\Model\Calculation;
9+
use Magento\Tax\Model\Config;
10+
use Magento\Tax\Model\Sales\Total\Quote\SetupUtil;
11+
12+
$taxCalculationData['including_tax_apply_tax_after_discount'] = [
13+
'config_data' => [
14+
SetupUtil::CONFIG_OVERRIDES => [
15+
Config::CONFIG_XML_PATH_APPLY_AFTER_DISCOUNT => 1,
16+
Config::CONFIG_XML_PATH_PRICE_INCLUDES_TAX => 1,
17+
Config::CONFIG_XML_PATH_SHIPPING_INCLUDES_TAX => 1,
18+
Config::CONFIG_XML_PATH_SHIPPING_TAX_CLASS => SetupUtil::SHIPPING_TAX_CLASS,
19+
Config::XML_PATH_ALGORITHM => Calculation::CALC_ROW_BASE,
20+
],
21+
SetupUtil::TAX_RATE_OVERRIDES => [
22+
SetupUtil::TAX_RATE_TX => 10,
23+
SetupUtil::TAX_STORE_RATE => 10,
24+
SetupUtil::TAX_RATE_SHIPPING => 10,
25+
],
26+
SetupUtil::TAX_RULE_OVERRIDES => [
27+
[
28+
//tax rule for product
29+
'code' => 'Product Tax Rule',
30+
'product_tax_class_ids' => [SetupUtil::PRODUCT_TAX_CLASS_1],
31+
],
32+
[
33+
//tax rule for shipping
34+
'code' => 'Shipping Tax Rule',
35+
'product_tax_class_ids' => [SetupUtil::SHIPPING_TAX_CLASS],
36+
'tax_rate_ids' => [SetupUtil::TAX_RATE_SHIPPING],
37+
],
38+
],
39+
],
40+
'quote_data' => [
41+
'billing_address' => [
42+
'region_id' => SetupUtil::REGION_TX,
43+
],
44+
'shipping_address' => [
45+
'region_id' => SetupUtil::REGION_TX,
46+
],
47+
'items' => [
48+
[
49+
'sku' => 'simple1',
50+
'price' => 29,
51+
'qty' => 1,
52+
],
53+
],
54+
'shipping_method' => 'flatrate_flatrate',
55+
'shopping_cart_rules' => [
56+
[
57+
'discount_amount' => 50,
58+
'apply_to_shipping' => 1,
59+
],
60+
],
61+
],
62+
'expected_results' => [
63+
'address_data' => [
64+
'subtotal' => 26.36,
65+
'base_subtotal' => 26.36,
66+
'subtotal_incl_tax' => 29,
67+
'base_subtotal_incl_tax' => 29,
68+
'tax_amount' => 1.69,
69+
'base_tax_amount' => 1.69,
70+
'shipping_amount' => 4.55,
71+
'base_shipping_amount' => 4.55,
72+
'shipping_incl_tax' => 5,
73+
'base_shipping_incl_tax' => 5,
74+
'shipping_tax_amount' => 0.25,
75+
'base_shipping_tax_amount' => 0.25,
76+
'discount_amount' => -15.455,
77+
'base_discount_amount' => -15.455,
78+
'discount_tax_compensation_amount' => 1.2,
79+
'base_discount_tax_compensation_amount' => 1.2,
80+
'shipping_discount_tax_compensation_amount' => 0.2,
81+
'base_shipping_discount_tax_compensation_amount' => 0.2,
82+
'grand_total' => 18.545,
83+
'base_grand_total' => 18.545,
84+
'applied_taxes' => [
85+
SetupUtil::TAX_RATE_TX => [
86+
'percent' => 10,
87+
'amount' => 1.44,
88+
'base_amount' => 1.44,
89+
'rates' => [
90+
[
91+
'code' => SetupUtil::TAX_RATE_TX,
92+
'title' => SetupUtil::TAX_RATE_TX,
93+
'percent' => 10,
94+
],
95+
],
96+
],
97+
SetupUtil::TAX_RATE_SHIPPING => [
98+
'percent' => 10,
99+
'amount' => 0.25,
100+
'base_amount' => 0.25,
101+
'rates' => [
102+
[
103+
'code' => SetupUtil::TAX_RATE_SHIPPING,
104+
'title' => SetupUtil::TAX_RATE_SHIPPING,
105+
'percent' => 10,
106+
],
107+
],
108+
],
109+
],
110+
],
111+
'items_data' => [
112+
'simple1' => [
113+
'row_total' => 26.36,
114+
'base_row_total' => 26.36,
115+
'tax_percent' => 10,
116+
'price' => 26.36,
117+
'base_price' => 26.36,
118+
'price_incl_tax' => 29,
119+
'base_price_incl_tax' => 29,
120+
'row_total_incl_tax' => 29,
121+
'base_row_total_incl_tax' => 29,
122+
'tax_amount' => 1.44,
123+
'base_tax_amount' => 1.44,
124+
'discount_amount' => 13.18,
125+
'base_discount_amount' => 13.18,
126+
'discount_percent' => 50,
127+
'discount_tax_compensation_amount' => 1.2,
128+
'base_discount_tax_compensation_amount' => 1.2,
129+
],
130+
],
131+
],
132+
];

dev/tests/integration/testsuite/Magento/Tax/_files/tax_calculation_data_aggregated.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,4 @@
3030
require_once __DIR__ . '/scenarios/multi_tax_rule_total_calculate_subtotal_yes.php';
3131
require_once __DIR__ . '/scenarios/multi_tax_rule_two_row_calculate_subtotal_yes_row.php';
3232
require_once __DIR__ . '/scenarios/multi_tax_rule_two_row_calculate_subtotal_yes_total.php';
33+
require_once __DIR__ . '/scenarios/including_tax_apply_tax_after_discount.php';

0 commit comments

Comments
 (0)