JDK 11 is now required for the Broadleaf 1.7.0-GA release train, and beyond.
Features & Enhancements
Support Collect on Delivery in Checkout
We have added support for Collect on Delivery (COD) as a payment option during checkout.
Collect on Delivery indicates that payment will be received once the goods have been delivered to the customer.
Therefore, capturing payment is an offline process. Additionally, in the initial version of COD, refunds are expected to be handled offline.
Added support for new CheckoutPaymentMethodOption support for Collect on Delivery (COD)
This includes adding a list of fees that may be associated with any payment method
Fees must have a name, amount, and currency
Fees may also define if they are taxable, discountable, and refundable
This also includes adding properties to restrict the applicability of the payment method
Restrictions based on a minimum or maximum cart total
Restrictions based on allowed values for Fulfillment information such as
These properties can be application or tenant discriminated
A fulfillment group that is being paid for by COD will have an attribute set marking it as such
Attribute name COD_STATUS
Constant for reference: FulfillmentGroup.COD_STATUS_ATTR
Attribute values for reference: FulfillmentGroup.DefaultCollectOnDeliveryStatus
The UpdateFulfillmentGroupRequest received a new attributes map field so that callers can update the COD_STATUS attribute using the existing CheckoutCartEndpoint#updateFulfillmentGroupInCart endpoint
When COD is selected a new CartItem of type EXTRA_FEE will be added
It will not be any fulfillment group to avoid fulfillment charges
If tax is applied, the TaxInfo will be added to the CartItem’s internalAttributes as TAX_INFO
The value of the Fee.isRefundable flag will be added to internalAttributes.IS_FEE_REFUNDABLE
The item type is also copied to internalAttributes.ITEM_TYPE
Cart item tax is included in Cart’s total tax
Cart item price is included in Cart’s total but not Cart’s subtotal
If any cart update is attempted that would cause COD to no longer be available, an exception is thrown to allow the UI to present the user with a choice between continuing with the change even if they lose COD or to cancel the change and keep COD
Frontend error code is HTTP 400: COD_NOT_AVAILABLE
When COD is de-selected, the fee Cart Item is removed and the related COD type payment is archived
The payment total (including COD payment amount) must be equal to the cart total
A payment transaction is not executed for the COD payments
COD payments are archived if the fulfillment COD_STATUS attribute is not "SELECTED"
Sample configuration for Collect on Delivery:
# global default
- payment-method-type: CREDIT_CARD
# application specific
# the keys are the IDs of the applications
- payment-method-type: CREDIT_CARD
# set up COD
- payment-method-type: COD
- name: Fee 1
We have introduced DiscriminatedProperties to Shipping Services to support configuring different shipping options depending on the tenant and application in context.
We have also added support for defining shipping configuration using YAML and no longer require using an external JSON file.
The JSON config file may still be used, but will only be consulted if no YAML configuration is provided.
JSON also only supports global configuration not application or tenant discrimination.
Sample YAML configuration files for each out-of-box shipping method type (banded, fixed, virtual) have been provided as well.
Fixed CheckoutCompletionEvent serializing the Cart twice
Fixed payments display in the AdminUI when there are multiple
Before, the first payment would be rendered multiple times instead of rendering each unique payment
Helm Chart Updates
Starting with 1.7, we have begun publishing common base charts to a private helm repository. In order to pull in and use these charts, you will need to authenticate (i.e. helm repo add broadleaf https://repository.broadleafcommerce.com/repository/helm-private/ --username $BLC_REGISTRY_USER --password $BLC_REGISTRY_PASSWORD ) using the same credentials that were sent to you (these are the same credentials that allow you to build and run the microservice applications).