Broadleaf Microservices
  • v1.0.0-latest-prod

Upgrade to 1.7.5-GA

Note

Microservices release 1.7.5-GA is congruent with:

  • Frontend Libraries

    • AdminWeb 1.8.7-rc1.0

    • CommerceSDK 1.4.6-rc1.0

    • Payment JS SDK 1.1.5-rc1.0

    • Auth SDK 1.4.2

  • Frontend Starters

    • AdminStarter 1.8.5-rc1.0

    • NextJS Starter 1.4.5-rc1.0

Requirements

  • 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.

Changes summary:

  • 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

        • address.postalCode

        • fulfillmentOption.name

    • 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

    • CODPaymentMethodNotApplicableException

    • 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

  • In checkout

    • 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:
broadleaf:
  cartoperations:
    service:
      checkout:
        # global default
        checkout-payment-method-options:
          - payment-method-type: CREDIT_CARD
            payment-method-gateway-type: PASSTHROUGH
        # application specific
        application:
          # the keys are the IDs of the applications
          some-application-id:
            checkout-payment-method-options:
               - payment-method-type: CREDIT_CARD
                 payment-method-gateway-type: PASSTHROUGH
               # set up COD
               - payment-method-type: COD
                 payment-method-gateway-type: COD
                 cart-max-total-restriction:
                   USD: 500.00
                 cart-min-total-restriction:
                   USD: 100.00
                 fulfillment-inclusions:
                   fulfillmentOption.name: ['FIXED_STANDARD']
                 fulfillment-exclusions:
                   address.postalCode: ['10100']
                 fees:
                   - name: Fee 1
                     amount: 1.00
                     currency: USD
                     taxable: false
                     discountable: false
                     refundable: false

Tenant & Application Discriminated Shipping Properties

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.

Tip
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.

The following is the banded shipping example:
# Example banded shipping configurations to demonstrate the default,
# tenant-specific, and application-specific configurations.
# This should be used rather than the banded-ship-example.json
broadleaf:
  shipping:
    service:
      banded:
        # Default configuration
        sample-config: true
        active: true
        ship-tables:
          - name: BANDED_PRICE_STANDARD
            description: Default Standard (Banded)
            band-type: WEIGHT
            units: KILOGRAMS
            use-flat-rates: true
            days-to-ship: 5
            bands:
              - minimum: 0
                fixed-price-per-group:
                  - currency: USD
                    amount: USD 5
              - minimum: 10
                fixed-price-per-group:
                  - currency: USD
                    amount: USD 4
          - name: BANDED_PRICE_PRIORITY
            description: Default Priority (Banded)
            band-type: WEIGHT
            units: KILOGRAMS
            use-flat-rates: true
            days-to-ship: 3
            bands:
              - minimum: 0
                fixed-price-per-group:
                  - currency: USD
                    amount: USD 10
              - minimum: 10
                fixed-price-per-group:
                  - currency: USD
                    amount: USD 8
          - name: BANDED_PRICE_EXPRESS
            description: Default Express (Banded)
            band-type: WEIGHT
            units: KILOGRAMS
            use-flat-rates: true
            days-to-ship: 1
            bands:
              - minimum: 0
                fixed-price-per-group:
                  - currency: USD
                    amount: USD 15
              - minimum: 10
                fixed-price-per-group:
                  - currency: USD
                    amount: USD 10
      tenant:
        inactive-tenant-id:
          sample-config: true
          # Inactive for a tenant
          active: false
        some-tenant-id:
          sample-config: true
          # Tenant-specific banded shipping configurations
          active: true
          ship-tables:
            - name: BANDED_PRICE_STANDARD
              description: Some Tenant Standard (Banded)
              band-type: WEIGHT
              units: KILOGRAMS
              use-flat-rates: true
              days-to-ship: 5
              bands:
                - minimum: 0
                  fixed-price-per-group:
                    - currency: USD
                      amount: USD 5
                - minimum: 10
                  fixed-price-per-group:
                    - currency: USD
                      amount: USD 4
            - name: BANDED_PRICE_PRIORITY
              description: Some Tenant Priority (Banded)
              band-type: WEIGHT
              units: KILOGRAMS
              use-flat-rates: true
              days-to-ship: 3
              bands:
                - minimum: 0
                  fixed-price-per-group:
                    - currency: USD
                      amount: USD 10
                - minimum: 10
                  fixed-price-per-group:
                    - currency: USD
                      amount: USD 8
            - name: BANDED_PRICE_EXPRESS
              description: Some Tenant Express (Banded)
              band-type: WEIGHT
              units: KILOGRAMS
              use-flat-rates: true
              days-to-ship: 1
              bands:
                - minimum: 0
                  fixed-price-per-group:
                    - currency: USD
                      amount: USD 15
                - minimum: 10
                  fixed-price-per-group:
                    - currency: USD
                      amount: USD 10
      application:
        inactive-application-id:
          sample-config: true
          # Inactive for an application
          active: false
        some-application-id:
          sample-config: true
          # Application-specific banded shipping configurations
          active: true
          ship-tables:
            - name: BANDED_PRICE_STANDARD
              description: Some Application Standard (Banded)
              band-type: WEIGHT
              units: KILOGRAMS
              use-flat-rates: true
              days-to-ship: 5
              bands:
                - minimum: 0
                  fixed-price-per-group:
                    - currency: USD
                      amount: USD 5
                - minimum: 10
                  fixed-price-per-group:
                    - currency: USD
                      amount: USD 4
            - name: BANDED_PRICE_PRIORITY
              description: Some Application Priority (Banded)
              band-type: WEIGHT
              units: KILOGRAMS
              use-flat-rates: true
              days-to-ship: 3
              bands:
                - minimum: 0
                  fixed-price-per-group:
                    - currency: USD
                      amount: USD 10
                - minimum: 10
                  fixed-price-per-group:
                    - currency: USD
                      amount: USD 8
            - name: BANDED_PRICE_EXPRESS
              description: Some Application Express (Banded)
              band-type: WEIGHT
              units: KILOGRAMS
              use-flat-rates: true
              days-to-ship: 1
              bands:
                - minimum: 0
                  fixed-price-per-group:
                    - currency: USD
                      amount: USD 15
                - minimum: 10
                  fixed-price-per-group:
                    - currency: USD
                      amount: USD 10

Bug Fixes

  • 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