|
Tip
|
The 2.x versions are Spring Boot 3 compatible. |
|
Important
|
This release includes a potentially breaking change if you have an override/implementation of one of the following methods:
If this effects your project, you’ll encounter a compilation issue.
These compilation issues should be simple to resolve - ie look to gather data from the provided In short, these method signature changes within the CartOps were needed to effectively pass the This change was also made to future-proof these method signatures by passing objects, rather than simple params. |
Added support for Flash Sales (PriceList price limited by quantity). Please refer to the Flash Sale Documentation for more information.
If the applicable PriceInfo for a CartItem is limited by quantity and the quantity of the CartItem exceeds that limited quantity, the CartItem will be split into a pair following the logic in this example:
If a sale PriceInfo only has 2 quantity available and the CartItem has a quantity of 3, it will be split into a pair of CartItems with quantity of 2 and 1.
If a sale PriceInfo only has 2 quantity available and the CartItem was added to cart 3 separate times, meaning the cart has 3 CartItems each with a quantity of 1, it will be combined into a pair of CartItems with quantity of 2 and 1, with 2 of them using the sale PriceInfo, and 1 using the backup PriceInfo.
Added a new checkout activity to validate and record the PriceData usage for PriceData that are limited by quantity
The PricingService will check the availability of those limited PriceData usage, and check the active dates for those applicable PriceData as well as those of the PriceList. If any of the PriceData is unavailable, the entire request is marked as failed. If applying the PriceData is unsuccessful (e.g. the price data is no longer available or expired), the Cart is re-priced and a cart alert is shown to notify the customer of the price change.
Added implementation to populate a Variant’s tags onto the Cart to support Offers that are targeting variant-level tags.
Added support to allow a bundle or a non-individually-sold item to be added to cart if it’s a Free Gift item.
Updated the Record Price Data Usages endpoint configured path.
Added a allowPartialQuantityForPriceLimitedByQuantity property via the CartOperationServiceProperties for DefaultCartPricingService to use to control whether partial quantity is allowed for a price limited by quantity.
For example, if a sale price only has the available quantity of 2, and the customer has 5 of the items in the cart, 2 of them will use the sale price and the remaining items will use the backup price if this property is set to true. If this property is set to false, then all 5 items will use the backup price.
Updated DiscriminatedProperties to use CaseInsensitiveMap when storing the tenant and application identifying properties.
ENV properties will be converted to lowercase by Spring — in the case of UUIDs for Applications and Tenants, there can be a mismatch when the casing changes, so CaseInsensitiveMap addresses this issue.
Added support for a generic Non-Catalog Product type
A non-catalog product/cart item represents a product/cart item that does not exist in a catalog. This allows for custom usage of the CartItem domain and tracking of its instances as line items. These items are included in the cart subtotal and excluded from promotions.
Added a new field failureType on the CheckoutRollbackEvent that includes a reason for the failure for the step within the checkout workflow, which will be set when a checkout exception occurs.
Added support for gift items automatically applied to a cart to be allowed to have a set price.
Allowed more control when selecting which asset to show in the cart for an item from one of the Product’s assets besides simply choosing the primary.
Instead, users can now configure a preferred asset tag to match against.
By default it is cart.
Added properties to configure whether the Variant’s name is used as the item’s name instead of the Product’s. This will be true by default.
New properties:
broadleaf.cartoperation.service.preferred-asset-tag with default cart
broadleaf.cartoperation.service.use-variant-name-in-cart with default true
Introduced support for Product Characteristics and Product Terms.
Introduced support for recurring and usage pricing concepts.
Primarily this looks like being able to include characteristics marked as targetableForPricing and product terms in PriceableTarget payloads.
See Cart Services 2.1.0 Release Notes for related domain changes.
Includes support for including characteristics marked as targetableInRuleBuilders in Offer Engine requests.
Introduced support for new recurring and free trial offers.
broadleaf.cartoperation.pricingprovider.record-price-data-usage-uri
broadleaf.cartoperation.service.allowPartialQuantityForPriceLimitedByQuantity
See the Cart Operation Property Configurations for more details.
See the Flash Sale Documentation for more information.
This release includes support for the Adyen payment integration.
Added an ability to send the additional data in the CheckoutProcessRequest, needed to execute payment transactions, esp. properties that should not be persisted to the Payment#paymentMethodProperties.
See CheckoutProcessRequest#sensitivePaymentMethodData
Fixed issue where free gift items were not being subtracted from the Cart subtotal and list of line items used when calculating and applying Offers.
Fixed issue where Cart totals were not being recalculated when any free gift items are removed.
Fixed issue where CartItem dependent items of dependent items were not being priced correctly.
Fixed issue where bundles and their dependent products that were in a catalog and price list with different currencies between them could not be added to the cart by causing a currency mismatch.
Fixed issue where a FulfillmentOption was being added to VIRTUAL type fulfillment groups when using FulfillmentServices with its PricedFulfillmentOption.
Fixed variant-level sale price currency mismatch issue by updating the pricing info in the cart item’s internal attributes to match the prices during repricing.
Fixed issue where Order Adjustments were not properly prorating.
Fixed issue where voucher offer usage was not being recorded, which caused the maximum uses restriction to be broken.
Fixed issue where if a user removes the "gift" from their cart, the offer can never be re-applied for the lifetime of the cart — now if the user removes all qualifier items from their cart, the offer can be re-applied.
This behavior is controlled by the CartOpsPromotionProperties#giftOfferEligibleIfQualifierRemoved property, which is true by default.
Fixed issue where pagination requests were being serialized incorrectly, and page responses were deserialized incorrectly.
Fixed issue where a stale cart check does not take into account and remove deactivated Variant products.
Fixed issue where a failure in DefaultCheckoutService#createOrderNumber method doesn’t create an order but still charges a payment.
Fixed issue where the attribute field of a product could prevent it from being promoted from a sandbox due to incorrect typing of a STRING or STRING_ARRAY field.
Fixed issue where the attribute field was not using a placeholder value, causing [object Object] to be displayed as the placeholder.
Resolved issue when a failure in DefaultCheckoutService#createOrderNumber method doesn’t create order but still charges a payment
Fix bug where a failed payment transaction causes the PaymentSummary in the CheckoutResponse to be out of date
Fixed issue where the CSR Price override would not be applied by setting the standardRecurringPrice for order line items with overridePrice when applying offers.