Skip to content

Commit 3045a1d

Browse files
ENGCOM-9273: Use the translated tax rate title if it exists in the applied_taxes g… #34360
- Merge Pull Request #34360 from hostep/magento2:fix-for-issue-30281 - Merged commits: 1. 4a2b541
2 parents 302f6c5 + 4a2b541 commit 3045a1d

File tree

5 files changed

+187
-2
lines changed

5 files changed

+187
-2
lines changed

app/code/Magento/QuoteGraphQl/Model/Resolver/CartPrices.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,25 @@ private function getAppliedTaxes(Total $total, string $currency): array
8383
return $appliedTaxesData;
8484
}
8585

86+
$rates = [];
87+
8688
foreach ($appliedTaxes as $appliedTax) {
89+
foreach ($appliedTax['rates'] as $appliedTaxRate) {
90+
$rateTitle = $appliedTaxRate['title'];
91+
if (!array_key_exists($rateTitle, $rates)) {
92+
$rates[$rateTitle] = 0.0;
93+
}
94+
$rates[$rateTitle] += $appliedTax['amount'];
95+
}
96+
}
97+
98+
foreach ($rates as $title => $amount) {
8799
$appliedTaxesData[] = [
88-
'label' => $appliedTax['id'],
89-
'amount' => ['value' => $appliedTax['amount'], 'currency' => $currency]
100+
'label' => $title,
101+
'amount' => ['value' => $amount, 'currency' => $currency]
90102
];
91103
}
104+
92105
return $appliedTaxesData;
93106
}
94107

dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Customer/CartTotalsTest.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,41 @@ public function testGetCartTotalsWithTaxApplied()
6969
self::assertEquals('USD', $appliedTaxesResponse[0]['amount']['currency']);
7070
}
7171

72+
/**
73+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
74+
* @magentoApiDataFixture Magento/GraphQl/Tax/_files/tax_rule_for_region_with_translated_titles.php
75+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
76+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/apply_tax_for_simple_product.php
77+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php
78+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
79+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
80+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_billing_address.php
81+
*/
82+
public function testGetCartTotalsWithTranslatedTaxTitles()
83+
{
84+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
85+
$query = $this->getQuery($maskedQuoteId);
86+
$response = $this->graphQlQuery($query, [], '', $this->getHeaderMap());
87+
88+
$cartItem = $response['cart']['items'][0];
89+
self::assertEquals(10, $cartItem['prices']['price']['value']);
90+
self::assertEquals(20, $cartItem['prices']['row_total']['value']);
91+
self::assertEquals(21.5, $cartItem['prices']['row_total_including_tax']['value']);
92+
93+
self::assertArrayHasKey('prices', $response['cart']);
94+
$pricesResponse = $response['cart']['prices'];
95+
self::assertEquals(21.5, $pricesResponse['grand_total']['value']);
96+
self::assertEquals(21.5, $pricesResponse['subtotal_including_tax']['value']);
97+
self::assertEquals(20, $pricesResponse['subtotal_excluding_tax']['value']);
98+
self::assertEquals(20, $pricesResponse['subtotal_with_discount_excluding_tax']['value']);
99+
100+
$appliedTaxesResponse = $pricesResponse['applied_taxes'];
101+
102+
self::assertEquals('Rate Title on storeview 1', $appliedTaxesResponse[0]['label']);
103+
self::assertEquals(1.5, $appliedTaxesResponse[0]['amount']['value']);
104+
self::assertEquals('USD', $appliedTaxesResponse[0]['amount']['currency']);
105+
}
106+
72107
/**
73108
* @magentoApiDataFixture Magento/Customer/_files/customer.php
74109
* @magentoApiDataFixture Magento/GraphQl/Tax/_files/tax_rule_for_region_1.php

dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/Guest/CartTotalsTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,40 @@ public function testGetCartTotalsWithTaxApplied()
7979
self::assertEquals('USD', $appliedTaxesResponse[0]['amount']['currency']);
8080
}
8181

82+
/**
83+
* @magentoApiDataFixture Magento/GraphQl/Tax/_files/tax_rule_for_region_with_translated_titles.php
84+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
85+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/apply_tax_for_simple_product.php
86+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
87+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
88+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
89+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_billing_address.php
90+
*/
91+
public function testGetCartTotalsWithTranslatedTaxTitles()
92+
{
93+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
94+
$query = $this->getQuery($maskedQuoteId);
95+
$response = $this->graphQlQuery($query);
96+
97+
$cartItem = $response['cart']['items'][0];
98+
self::assertEquals(10, $cartItem['prices']['price']['value']);
99+
self::assertEquals(20, $cartItem['prices']['row_total']['value']);
100+
self::assertEquals(21.5, $cartItem['prices']['row_total_including_tax']['value']);
101+
102+
self::assertArrayHasKey('prices', $response['cart']);
103+
$pricesResponse = $response['cart']['prices'];
104+
self::assertEquals(21.5, $pricesResponse['grand_total']['value']);
105+
self::assertEquals(21.5, $pricesResponse['subtotal_including_tax']['value']);
106+
self::assertEquals(20, $pricesResponse['subtotal_excluding_tax']['value']);
107+
self::assertEquals(20, $pricesResponse['subtotal_with_discount_excluding_tax']['value']);
108+
109+
$appliedTaxesResponse = $pricesResponse['applied_taxes'];
110+
111+
self::assertEquals('Rate Title on storeview 1', $appliedTaxesResponse[0]['label']);
112+
self::assertEquals(1.5, $appliedTaxesResponse[0]['amount']['value']);
113+
self::assertEquals('USD', $appliedTaxesResponse[0]['amount']['currency']);
114+
}
115+
82116
/**
83117
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
84118
* @magentoApiDataFixture Magento/CatalogRule/_files/catalog_rule_10_off_not_logged.php
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
use Magento\Tax\Api\Data\TaxRateInterface;
8+
use Magento\Tax\Api\Data\TaxRateTitleInterface;
9+
use Magento\Tax\Api\Data\TaxRuleInterface;
10+
use Magento\Tax\Api\TaxRateRepositoryInterface;
11+
use Magento\Tax\Api\TaxRuleRepositoryInterface;
12+
use Magento\Tax\Model\Calculation\Rate;
13+
use Magento\Tax\Model\Calculation\Rate\Title as RateTitle;
14+
use Magento\Tax\Model\Calculation\Rate\TitleFactory as RateTitleFactory;
15+
use Magento\Tax\Model\Calculation\RateFactory;
16+
use Magento\Tax\Model\Calculation\RateRepository;
17+
use Magento\Tax\Model\Calculation\Rule;
18+
use Magento\Tax\Model\Calculation\RuleFactory;
19+
use Magento\Tax\Model\TaxRuleRepository;
20+
use Magento\TestFramework\Helper\Bootstrap;
21+
use Magento\Framework\Api\DataObjectHelper;
22+
23+
$objectManager = Bootstrap::getObjectManager();
24+
/** @var DataObjectHelper $dataObjectHelper */
25+
$dataObjectHelper = Bootstrap::getObjectManager()->get(DataObjectHelper::class);
26+
/** @var RateTitleFactory $rateTitleFactory */
27+
$rateTitleFactory = $objectManager->get(RateTitleFactory::class);
28+
/** @var RateFactory $rateFactory */
29+
$rateFactory = $objectManager->get(RateFactory::class);
30+
/** @var RuleFactory $ruleFactory */
31+
$ruleFactory = $objectManager->get(RuleFactory::class);
32+
/** @var RateRepository $rateRepository */
33+
$rateRepository = $objectManager->get(TaxRateRepositoryInterface::class);
34+
/** @var TaxRuleRepository $ruleRepository */
35+
$ruleRepository = $objectManager->get(TaxRuleRepositoryInterface::class);
36+
/** @var RateTitle */
37+
$rateTitle = $rateTitleFactory->create();
38+
$rateTitleData = [
39+
RateTitle::KEY_STORE_ID => 1,
40+
RateTitle::KEY_VALUE_ID => 'Rate Title on storeview 1',
41+
];
42+
/** @var Rate $rate */
43+
$rate = $rateFactory->create();
44+
$rateData = [
45+
Rate::KEY_COUNTRY_ID => 'US',
46+
Rate::KEY_REGION_ID => '1',
47+
Rate::KEY_POSTCODE => '*',
48+
Rate::KEY_CODE => 'US-TEST-*-Rate-1',
49+
Rate::KEY_PERCENTAGE_RATE => '7.5',
50+
Rate::KEY_TITLES => [$rateTitleData]
51+
];
52+
$dataObjectHelper->populateWithArray($rate, $rateData, TaxRateInterface::class);
53+
$rateRepository->save($rate);
54+
55+
$rule = $ruleFactory->create();
56+
$ruleData = [
57+
Rule::KEY_CODE=> 'GraphQl Test Rule',
58+
Rule::KEY_PRIORITY => '0',
59+
Rule::KEY_POSITION => '0',
60+
Rule::KEY_CUSTOMER_TAX_CLASS_IDS => [3],
61+
Rule::KEY_PRODUCT_TAX_CLASS_IDS => [2],
62+
Rule::KEY_TAX_RATE_IDS => [$rate->getId()],
63+
];
64+
$dataObjectHelper->populateWithArray($rule, $ruleData, TaxRuleInterface::class);
65+
$ruleRepository->save($rule);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
use Magento\Tax\Api\TaxRateRepositoryInterface;
8+
use Magento\Tax\Api\TaxRuleRepositoryInterface;
9+
use Magento\Tax\Model\Calculation\Rate;
10+
use Magento\Tax\Model\Calculation\RateFactory;
11+
use Magento\Tax\Model\Calculation\RateRepository;
12+
use Magento\Tax\Model\Calculation\Rule;
13+
use Magento\Tax\Model\Calculation\RuleFactory;
14+
use Magento\Tax\Model\TaxRuleRepository;
15+
use Magento\TestFramework\Helper\Bootstrap;
16+
use Magento\Tax\Model\ResourceModel\Calculation\Rate as RateResource;
17+
use Magento\Tax\Model\ResourceModel\Calculation\Rule as RuleResource;
18+
19+
$objectManager = Bootstrap::getObjectManager();
20+
/** @var RateFactory $rateFactory */
21+
$rateFactory = $objectManager->get(RateFactory::class);
22+
/** @var RuleFactory $ruleFactory */
23+
$ruleFactory = $objectManager->get(RuleFactory::class);
24+
/** @var RateRepository $rateRepository */
25+
$rateRepository = $objectManager->get(TaxRateRepositoryInterface::class);
26+
/** @var TaxRuleRepository $ruleRepository */
27+
$ruleRepository = $objectManager->get(TaxRuleRepositoryInterface::class);
28+
/** @var RateResource $rateResource */
29+
$rateResource = $objectManager->get(RateResource::class);
30+
/** @var RuleResource $ruleResource */
31+
$ruleResource = $objectManager->get(RuleResource::class);
32+
33+
$rate = $rateFactory->create();
34+
$rateResource->load($rate, 'US-TEST-*-Rate-1', Rate::KEY_CODE);
35+
$rule = $ruleFactory->create();
36+
$ruleResource->load($rule, 'GraphQl Test Rule', Rule::KEY_CODE);
37+
$ruleRepository->delete($rule);
38+
$rateRepository->delete($rate);

0 commit comments

Comments
 (0)