Skip to content
This repository was archived by the owner on Oct 24, 2023. It is now read-only.

Commit 2ef543b

Browse files
author
Jens Schulze
committed
feat: support tax calculation mode
Closes #376
1 parent 555ccb3 commit 2ef543b

File tree

8 files changed

+96
-1
lines changed

8 files changed

+96
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ Then:
209209
1. fork the repository on GitHub
210210
2. code and add tests that cover the created code. Your code should be warning-free.
211211
3. stick to PSR-2 and and don't reformat existing code.
212-
4. make a pull request. @jayS-de will review it and pull or come back to you.
212+
4. make a pull request. @jenschude will review it and pull or come back to you.
213213

214214

215215

src/Core/Model/Cart/Cart.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@
7373
* @method Cart setRefusedGifts(CartDiscountReferenceCollection $refusedGifts = null)
7474
* @method string getOrigin()
7575
* @method Cart setOrigin(string $origin = null)
76+
* @method string getTaxCalculationMode()
77+
* @method Cart setTaxCalculationMode(string $taxCalculationMode = null)
7678
* @method CartReference getReference()
7779
*/
7880
class Cart extends Resource
@@ -90,6 +92,9 @@ class Cart extends Resource
9092
const ORIGIN_CUSTOMER = 'Customer';
9193
const ORIGIN_MERCHANT = 'Merchant';
9294

95+
const TAX_CALCULATION_MODE_LINE_ITEM_LEVEL = 'LineItemLevel';
96+
const TAX_CALCULATION_MODE_UNIT_PRICE_LEVEL = 'UnitPriceLevel';
97+
9398
public function fieldDefinitions()
9499
{
95100
return [
@@ -126,6 +131,7 @@ public function fieldDefinitions()
126131
'deleteDaysAfterLastModification' => [static::TYPE => 'int'],
127132
'refusedGifts' => [static::TYPE => CartDiscountReferenceCollection::class],
128133
'origin' => [static::TYPE => 'string'],
134+
'taxCalculationMode' => [static::TYPE => 'string'],
129135
];
130136
}
131137

src/Core/Model/Cart/CartDraft.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
* @method CartDraft setCustomerGroup(CustomerGroupReference $customerGroup = null)
5252
* @method string getOrigin()
5353
* @method CartDraft setOrigin(string $origin = null)
54+
* @method string getTaxCalculationMode()
55+
* @method CartDraft setTaxCalculationMode(string $taxCalculationMode = null)
5456
*/
5557
class CartDraft extends JsonObject
5658
{
@@ -77,6 +79,7 @@ public function fieldDefinitions()
7779
'deleteDaysAfterLastModification' => [static::TYPE => 'int'],
7880
'customerGroup' => [static::TYPE => CustomerGroupReference::class],
7981
'origin' => [static::TYPE => 'string'],
82+
'taxCalculationMode' => [static::TYPE => 'string'],
8083
];
8184
}
8285

src/Core/Model/Order/ImportOrder.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@
5959
* @method ImportOrder setTaxRoundingMode(string $taxRoundingMode = null)
6060
* @method string getOrigin()
6161
* @method ImportOrder setOrigin(string $origin = null)
62+
* @method string getTaxCalculationMode()
63+
* @method ImportOrder setTaxCalculationMode(string $taxCalculationMode = null)
6264
*/
6365
class ImportOrder extends JsonObject
6466
{
@@ -88,6 +90,7 @@ public function fieldDefinitions()
8890
'inventoryMode' => [static::TYPE => 'string'],
8991
'taxRoundingMode' => [static::TYPE => 'string'],
9092
'origin' => [static::TYPE => 'string'],
93+
'taxCalculationMode' => [static::TYPE => 'string'],
9194
];
9295
}
9396
}

src/Core/Model/Order/Order.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@
9090
* @method Order setTaxRoundingMode(string $taxRoundingMode = null)
9191
* @method string getOrigin()
9292
* @method Order setOrigin(string $origin = null)
93+
* @method string getTaxCalculationMode()
94+
* @method Order setTaxCalculationMode(string $taxCalculationMode = null)
9395
* @method OrderReference getReference()
9496
*/
9597
class Order extends Resource
@@ -148,6 +150,7 @@ public function fieldDefinitions()
148150
'locale' => [static::TYPE => 'string'],
149151
'taxRoundingMode' => [static::TYPE => 'string'],
150152
'origin' => [static::TYPE => 'string'],
153+
'taxCalculationMode' => [static::TYPE => 'string'],
151154
];
152155
}
153156
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
/**
3+
* @author @jenschude <jens.schulze@commercetools.de>
4+
*/
5+
6+
namespace Commercetools\Core\Request\Carts\Command;
7+
8+
use Commercetools\Core\Model\Common\Context;
9+
use Commercetools\Core\Request\AbstractAction;
10+
11+
/**
12+
* @package Commercetools\Core\Request\Carts\Command
13+
* @link http://dev.commercetools.com/http-api-projects-carts.html#change-tax-calculationmode
14+
* @method string getAction()
15+
* @method CartChangeTaxCalculationModeAction setAction(string $action = null)
16+
* @method string getTaxCalculationMode()
17+
* @method CartChangeTaxCalculationModeAction setTaxCalculationMode(string $taxCalculationMode = null)
18+
*/
19+
class CartChangeTaxCalculationModeAction extends AbstractAction
20+
{
21+
public function fieldDefinitions()
22+
{
23+
return [
24+
'action' => [static::TYPE => 'string'],
25+
'taxCalculationMode' => [static::TYPE => 'string'],
26+
];
27+
}
28+
29+
/**
30+
* @param array $data
31+
* @param Context|callable $context
32+
*/
33+
public function __construct(array $data = [], $context = null)
34+
{
35+
parent::__construct($data, $context);
36+
$this->setAction('changeTaxCalculationMode');
37+
}
38+
39+
/**
40+
* @param string $calculationMode
41+
* @param Context|callable $context
42+
* @return CartChangeTaxCalculationModeAction
43+
*/
44+
public static function ofTaxCalculationMode($calculationMode, $context = null)
45+
{
46+
return static::of($context)->setTaxCalculationMode($calculationMode);
47+
}
48+
}

tests/fixtures/models.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ cart:
2929
- deleteDaysAfterLastModification
3030
- refusedGifts
3131
- origin
32+
- taxCalculationMode
3233
lineItem:
3334
domain: cart
3435
model: LineItem
@@ -379,6 +380,7 @@ order:
379380
- locale
380381
- taxRoundingMode
381382
- origin
383+
- taxCalculationMode
382384
syncInfo:
383385
domain: order
384386
model: SyncInfo
@@ -873,6 +875,7 @@ importOrder:
873875
- inventoryMode
874876
- taxRoundingMode
875877
- origin
878+
- taxCalculationMode
876879
lineItemImportDraft:
877880
domain: order
878881
model: lineItemImportDraft

tests/integration/Cart/CartUpdateRequestTest.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
use Commercetools\Core\Request\Carts\Command\CartChangeCustomLineItemMoneyAction;
5252
use Commercetools\Core\Request\Carts\Command\CartChangeCustomLineItemQuantityAction;
5353
use Commercetools\Core\Request\Carts\Command\CartChangeLineItemQuantityAction;
54+
use Commercetools\Core\Request\Carts\Command\CartChangeTaxCalculationModeAction;
5455
use Commercetools\Core\Request\Carts\Command\CartChangeTaxRoundingModeAction;
5556
use Commercetools\Core\Request\Carts\Command\CartRecalculateAction;
5657
use Commercetools\Core\Request\Carts\Command\CartRemoveCustomLineItemAction;
@@ -1432,6 +1433,34 @@ public function testCreateWithTaxRoundingMode()
14321433
$this->assertSame(Cart::TAX_ROUNDING_MODE_HALF_DOWN, $cart->getTaxRoundingMode());
14331434
}
14341435

1436+
public function testTaxCalculationModeUnitPrice()
1437+
{
1438+
$draft = $this->getDraft();
1439+
$cart = $this->createCart($draft);
1440+
1441+
$this->assertSame(Cart::TAX_CALCULATION_MODE_LINE_ITEM_LEVEL, $cart->getTaxCalculationMode());
1442+
1443+
$request = CartUpdateRequest::ofIdAndVersion($cart->getId(), $cart->getVersion())
1444+
->addAction(CartChangeTaxCalculationModeAction::ofTaxCalculationMode(Cart::TAX_CALCULATION_MODE_UNIT_PRICE_LEVEL))
1445+
;
1446+
$response = $request->executeWithClient($this->getClient());
1447+
$cart = $request->mapResponse($response);
1448+
1449+
$this->deleteRequest->setVersion($cart->getVersion());
1450+
1451+
$this->assertSame(Cart::TAX_CALCULATION_MODE_UNIT_PRICE_LEVEL, $cart->getTaxCalculationMode());
1452+
}
1453+
1454+
public function testCreateWithTaxCalculationMode()
1455+
{
1456+
$draft = $this->getDraft();
1457+
$draft->setTaxCalculationMode(Cart::TAX_CALCULATION_MODE_UNIT_PRICE_LEVEL);
1458+
$cart = $this->createCart($draft);
1459+
1460+
$this->assertSame(Cart::TAX_CALCULATION_MODE_UNIT_PRICE_LEVEL, $cart->getTaxCalculationMode());
1461+
}
1462+
1463+
14351464
public function testAutomaticDelete()
14361465
{
14371466
$draft = $this->getDraft();

0 commit comments

Comments
 (0)