diff --git a/changes.md b/changes.md
index ea1a95536ea..1e94e69b056 100644
--- a/changes.md
+++ b/changes.md
@@ -209,8 +209,11 @@
- added type `ProductTailoringSetProductAttributeAction`
- added type `AttributeLevelEnum`
- added type `ProductSetProductAttributeAction`
+- added type `DiscountCombinationMode`
+- added type `DiscountsConfiguration`
- added type `ProjectChangePriceRoundingModeAction`
- added type `ProjectChangeTaxRoundingModeAction`
+- added type `ProjectSetDiscountsConfigurationAction`
- added type `DayOfMonthSchedule`
- added type `DayOfMonthScheduleDraft`
- added type `IntervalUnit`
@@ -481,6 +484,7 @@
- added property `/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/` to type `ProductVariantChannelAvailabilityMap`
- added property `priceRoundingMode` to type `CartsConfiguration`
- added property `taxRoundingMode` to type `CartsConfiguration`
+- added property `discounts` to type `Project`
- added property `priceRoundingMode` to type `QuoteRequest`
- added property `priceRoundingMode` to type `Quote`
- added property `businessUnit` to type `ShoppingList`
diff --git a/lib/commercetools-api/src/Models/Project/DiscountsConfiguration.php b/lib/commercetools-api/src/Models/Project/DiscountsConfiguration.php
new file mode 100644
index 00000000000..4256f821667
--- /dev/null
+++ b/lib/commercetools-api/src/Models/Project/DiscountsConfiguration.php
@@ -0,0 +1,30 @@
+Indicates how Product Discounts and Cart Discounts should be combined. Default value is Stacking.
Indicates how Product Discounts and Cart Discounts should be combined. Default value is Stacking.
Indicates how Product Discounts and Cart Discounts should be combined. Default value is Stacking.
Current version of the Project.
@@ -151,6 +152,14 @@ public function getSearchIndexing(); */ public function getBusinessUnits(); + /** + *Holds configuration specific to discounts, including how Product and Cart Discounts are combined in every Cart of the Project.
+ * + + * @return null|DiscountsConfiguration + */ + public function getDiscounts(); + /** * @param ?int $version */ @@ -225,4 +234,9 @@ public function setSearchIndexing(?SearchIndexingConfiguration $searchIndexing): * @param ?BusinessUnitConfiguration $businessUnits */ public function setBusinessUnits(?BusinessUnitConfiguration $businessUnits): void; + + /** + * @param ?DiscountsConfiguration $discounts + */ + public function setDiscounts(?DiscountsConfiguration $discounts): void; } diff --git a/lib/commercetools-api/src/Models/Project/ProjectBuilder.php b/lib/commercetools-api/src/Models/Project/ProjectBuilder.php index 76d0fdca6d7..1c93ce3a0a5 100644 --- a/lib/commercetools-api/src/Models/Project/ProjectBuilder.php +++ b/lib/commercetools-api/src/Models/Project/ProjectBuilder.php @@ -113,6 +113,12 @@ final class ProjectBuilder implements Builder */ private $businessUnits; + /** + + * @var null|DiscountsConfiguration|DiscountsConfigurationBuilder + */ + private $discounts; + /** *Current version of the Project.
* @@ -278,6 +284,17 @@ public function getBusinessUnits() return $this->businessUnits instanceof BusinessUnitConfigurationBuilder ? $this->businessUnits->build() : $this->businessUnits; } + /** + *Holds configuration specific to discounts, including how Product and Cart Discounts are combined in every Cart of the Project.
+ * + + * @return null|DiscountsConfiguration + */ + public function getDiscounts() + { + return $this->discounts instanceof DiscountsConfigurationBuilder ? $this->discounts->build() : $this->discounts; + } + /** * @param ?int $version * @return $this @@ -443,6 +460,17 @@ public function withBusinessUnits(?BusinessUnitConfiguration $businessUnits) return $this; } + /** + * @param ?DiscountsConfiguration $discounts + * @return $this + */ + public function withDiscounts(?DiscountsConfiguration $discounts) + { + $this->discounts = $discounts; + + return $this; + } + /** * @deprecated use withMessages() instead * @return $this @@ -520,6 +548,17 @@ public function withBusinessUnitsBuilder(?BusinessUnitConfigurationBuilder $busi return $this; } + /** + * @deprecated use withDiscounts() instead + * @return $this + */ + public function withDiscountsBuilder(?DiscountsConfigurationBuilder $discounts) + { + $this->discounts = $discounts; + + return $this; + } + public function build(): Project { return new ProjectModel( @@ -537,7 +576,8 @@ public function build(): Project $this->shippingRateInputType instanceof ShippingRateInputTypeBuilder ? $this->shippingRateInputType->build() : $this->shippingRateInputType, $this->externalOAuth instanceof ExternalOAuthBuilder ? $this->externalOAuth->build() : $this->externalOAuth, $this->searchIndexing instanceof SearchIndexingConfigurationBuilder ? $this->searchIndexing->build() : $this->searchIndexing, - $this->businessUnits instanceof BusinessUnitConfigurationBuilder ? $this->businessUnits->build() : $this->businessUnits + $this->businessUnits instanceof BusinessUnitConfigurationBuilder ? $this->businessUnits->build() : $this->businessUnits, + $this->discounts instanceof DiscountsConfigurationBuilder ? $this->discounts->build() : $this->discounts ); } diff --git a/lib/commercetools-api/src/Models/Project/ProjectModel.php b/lib/commercetools-api/src/Models/Project/ProjectModel.php index bebe31df27c..4174d31c9af 100644 --- a/lib/commercetools-api/src/Models/Project/ProjectModel.php +++ b/lib/commercetools-api/src/Models/Project/ProjectModel.php @@ -112,6 +112,12 @@ final class ProjectModel extends JsonObjectModel implements Project */ protected $businessUnits; + /** + * + * @var ?DiscountsConfiguration + */ + protected $discounts; + /** * @psalm-suppress MissingParamType @@ -131,7 +137,8 @@ public function __construct( ?ShippingRateInputType $shippingRateInputType = null, ?ExternalOAuth $externalOAuth = null, ?SearchIndexingConfiguration $searchIndexing = null, - ?BusinessUnitConfiguration $businessUnits = null + ?BusinessUnitConfiguration $businessUnits = null, + ?DiscountsConfiguration $discounts = null ) { $this->version = $version; $this->key = $key; @@ -148,6 +155,7 @@ public function __construct( $this->externalOAuth = $externalOAuth; $this->searchIndexing = $searchIndexing; $this->businessUnits = $businessUnits; + $this->discounts = $discounts; } /** @@ -461,6 +469,27 @@ public function getBusinessUnits() return $this->businessUnits; } + /** + *Holds configuration specific to discounts, including how Product and Cart Discounts are combined in every Cart of the Project.
+ * + * + * @return null|DiscountsConfiguration + */ + public function getDiscounts() + { + if (is_null($this->discounts)) { + /** @psalm-var stdClass|arrayConfiguration for the behavior of Cart and Product Discounts in the Project.
+ * + + * @return null|DiscountsConfiguration + */ + public function getDiscountsConfiguration() + { + return $this->discountsConfiguration instanceof DiscountsConfigurationBuilder ? $this->discountsConfiguration->build() : $this->discountsConfiguration; + } + + /** + * @param ?DiscountsConfiguration $discountsConfiguration + * @return $this + */ + public function withDiscountsConfiguration(?DiscountsConfiguration $discountsConfiguration) + { + $this->discountsConfiguration = $discountsConfiguration; + + return $this; + } + + /** + * @deprecated use withDiscountsConfiguration() instead + * @return $this + */ + public function withDiscountsConfigurationBuilder(?DiscountsConfigurationBuilder $discountsConfiguration) + { + $this->discountsConfiguration = $discountsConfiguration; + + return $this; + } + + public function build(): ProjectSetDiscountsConfigurationAction + { + return new ProjectSetDiscountsConfigurationActionModel( + $this->discountsConfiguration instanceof DiscountsConfigurationBuilder ? $this->discountsConfiguration->build() : $this->discountsConfiguration + ); + } + + public static function of(): ProjectSetDiscountsConfigurationActionBuilder + { + return new self(); + } +} diff --git a/lib/commercetools-api/src/Models/Project/ProjectSetDiscountsConfigurationActionCollection.php b/lib/commercetools-api/src/Models/Project/ProjectSetDiscountsConfigurationActionCollection.php new file mode 100644 index 00000000000..5bd7cfe0002 --- /dev/null +++ b/lib/commercetools-api/src/Models/Project/ProjectSetDiscountsConfigurationActionCollection.php @@ -0,0 +1,56 @@ + + * @method ProjectSetDiscountsConfigurationAction current() + * @method ProjectSetDiscountsConfigurationAction end() + * @method ProjectSetDiscountsConfigurationAction at($offset) + */ +class ProjectSetDiscountsConfigurationActionCollection extends ProjectUpdateActionCollection +{ + /** + * @psalm-assert ProjectSetDiscountsConfigurationAction $value + * @psalm-param ProjectSetDiscountsConfigurationAction|stdClass $value + * @throws InvalidArgumentException + * + * @return ProjectSetDiscountsConfigurationActionCollection + */ + public function add($value) + { + if (!$value instanceof ProjectSetDiscountsConfigurationAction) { + throw new InvalidArgumentException(); + } + $this->store($value); + + return $this; + } + + /** + * @psalm-return callable(int):?ProjectSetDiscountsConfigurationAction + */ + protected function mapper() + { + return function (?int $index): ?ProjectSetDiscountsConfigurationAction { + $data = $this->get($index); + if ($data instanceof stdClass) { + /** @var ProjectSetDiscountsConfigurationAction $data */ + $data = ProjectSetDiscountsConfigurationActionModel::of($data); + $this->set($data, $index); + } + + return $data; + }; + } +} diff --git a/lib/commercetools-api/src/Models/Project/ProjectSetDiscountsConfigurationActionModel.php b/lib/commercetools-api/src/Models/Project/ProjectSetDiscountsConfigurationActionModel.php new file mode 100644 index 00000000000..72c1aeaa13c --- /dev/null +++ b/lib/commercetools-api/src/Models/Project/ProjectSetDiscountsConfigurationActionModel.php @@ -0,0 +1,94 @@ +discountsConfiguration = $discountsConfiguration; + $this->action = $action ?? self::DISCRIMINATOR_VALUE; + } + + /** + * + * @return null|string + */ + public function getAction() + { + if (is_null($this->action)) { + /** @psalm-var ?string $data */ + $data = $this->raw(self::FIELD_ACTION); + if (is_null($data)) { + return null; + } + $this->action = (string) $data; + } + + return $this->action; + } + + /** + *Configuration for the behavior of Cart and Product Discounts in the Project.
+ * + * + * @return null|DiscountsConfiguration + */ + public function getDiscountsConfiguration() + { + if (is_null($this->discountsConfiguration)) { + /** @psalm-var stdClass|array