Class DefaultDelegatingTaxService

  • All Implemented Interfaces:
    TaxService

    public class DefaultDelegatingTaxService
    extends Object
    implements TaxService
    This implementation of TaxService calls TaxDelegate, which has a discovery process to determine the best TaxProvider implemenation based on configured properties, the provided TaxCalculationRequest, and the ContextInfo.
    Author:
    Kelly Tisdell (ktisdell)
    • Constructor Summary

      Constructors 
      Constructor Description
      DefaultDelegatingTaxService​(@NonNull com.broadleafcommerce.tax.delegate.TaxDelegate<?,​?> taxDelegate, List<TaxAddressSourceHandler> taxAddressSourceHandlers, @NonNull com.broadleafcommerce.common.extension.TypeFactory typeFactory)  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void addFulfillmentItemTaxDetails​(com.broadleafcommerce.tax.domain.TaxInfo taxInfo, com.broadleafcommerce.cart.client.domain.FulfillmentItem fulfillmentItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Add FulfillmentItemTaxDetails to the fulfillment item.
      void applyTaxes​(com.broadleafcommerce.cart.client.domain.Cart cart, boolean estimated, boolean actual, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Calculates and applies taxes to a cart.
      protected void applyTaxResponses​(com.broadleafcommerce.tax.domain.TaxCalculationResponse response, com.broadleafcommerce.cart.client.domain.Cart cart, List<com.broadleafcommerce.cart.client.domain.FulfillmentGroup> fulfillmentGroups, javax.money.CurrencyUnit expectedCurrency, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)  
      protected com.broadleafcommerce.tax.domain.TaxCalculationGroup buildTaxCalculationGroup​(com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup, TaxAddressSourceHandler handler, List<com.broadleafcommerce.tax.domain.TaxItem> taxItems, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Builds a TaxCalculationGroup, which is used to calculate taxes for a group of items being shipped to or fulfilled at a particular Address.
      protected com.broadleafcommerce.tax.domain.TaxItem buildTaxItemForLineItem​(com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup, com.broadleafcommerce.cart.client.domain.FulfillmentItem fulfillmentItem, com.broadleafcommerce.cart.client.domain.CartItem cartItem)  
      protected List<com.broadleafcommerce.tax.domain.TaxItem> buildTaxItemsForFulfillment​(@NonNull com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup)  
      protected List<com.broadleafcommerce.tax.domain.TaxItem> buildTaxItemsForLineItems​(com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup, com.broadleafcommerce.cart.client.domain.Cart cart)  
      protected void calculateIncludedTaxes​(@NonNull com.broadleafcommerce.cart.client.domain.Cart cart, javax.money.CurrencyUnit expectedCurrency, com.broadleafcommerce.tax.domain.TaxCalculationResponse taxResponse)
      Set VAT properties on CartPricing.
      boolean canCalculateTaxes​(com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      Whether the cart contains the information required to calculate taxes.
      protected com.broadleafcommerce.tax.domain.TaxCalculationRequest createRequest​(com.broadleafcommerce.cart.client.domain.Cart cart, javax.money.CurrencyUnit expectedCurrency, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)  
      protected String determineCartId​(com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      We require the Cart.getId(), in most cases.
      protected String determinePreferredProviderId​(com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      This method returns the "preferred" Tax Provider ID, which is determined by TaxProvider.getProviderId().
      protected String determineTaxExemptionCode​(com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)  
      protected com.broadleafcommerce.tax.domain.TaxCalculationResponse executeTaxCalculation​(com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.tax.domain.TaxCalculationRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)  
      protected TaxAddressSourceHandler findTaxAddressSourceHandler​(com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)  
      protected com.broadleafcommerce.resource.security.utils.service.AuthenticationUtils getAuthenticationUtils()  
      protected Map<String,​com.broadleafcommerce.cart.client.domain.CartItem> getCartItemMap​(com.broadleafcommerce.cart.client.domain.Cart cart)  
      protected CustomerProvider getCustomerProvider()  
      protected List<com.broadleafcommerce.cart.client.domain.FulfillmentGroup> getFulfillmentGroups​(com.broadleafcommerce.cart.client.domain.Cart cart)  
      protected String getProductDescription​(@NonNull com.broadleafcommerce.cart.client.domain.CartItem cartItem)
      Retrieves the description of the product represented by the CartItem.
      protected List<TaxAddressSourceHandler> getTaxAddressSourceHandlers()  
      protected com.broadleafcommerce.tax.delegate.TaxDelegate<?,​?> getTaxDelegate()  
      protected String getTaxItemIdForFulfillment​(@NonNull com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup)
      Extension point to modify the TaxItem.getItemId() for fulfillment tax items.
      protected String getTaxItemIdForLineItem​(@NonNull com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup, @NonNull com.broadleafcommerce.cart.client.domain.FulfillmentItem fulfillmentItem)  
      protected com.broadleafcommerce.common.extension.TypeFactory getTypeFactory()  
      protected void setAllTaxToZero​(com.broadleafcommerce.cart.client.domain.Cart cart)  
      void setAuthenticationUtils​(com.broadleafcommerce.resource.security.utils.service.AuthenticationUtils authenticationUtils)  
      void setCustomerProvider​(CustomerProvider customerProvider)  
      protected boolean shouldCalculateItemTaxes​(@NonNull com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)  
      protected boolean shouldTaxFulfillment​(com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup, javax.money.CurrencyUnit currencyUnit, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)  
    • Constructor Detail

      • DefaultDelegatingTaxService

        public DefaultDelegatingTaxService​(@NonNull
                                           @NonNull com.broadleafcommerce.tax.delegate.TaxDelegate<?,​?> taxDelegate,
                                           @Nullable
                                           List<TaxAddressSourceHandler> taxAddressSourceHandlers,
                                           @NonNull
                                           @NonNull com.broadleafcommerce.common.extension.TypeFactory typeFactory)
    • Method Detail

      • setAuthenticationUtils

        @Autowired
        public void setAuthenticationUtils​(com.broadleafcommerce.resource.security.utils.service.AuthenticationUtils authenticationUtils)
      • setCustomerProvider

        @Autowired
        public void setCustomerProvider​(CustomerProvider customerProvider)
      • applyTaxes

        public void applyTaxes​(com.broadleafcommerce.cart.client.domain.Cart cart,
                               boolean estimated,
                               boolean actual,
                               com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
        Description copied from interface: TaxService
        Calculates and applies taxes to a cart.
        Specified by:
        applyTaxes in interface TaxService
        Parameters:
        cart - The cart to apply taxes against.
        estimated - Whether to provide an estimate
        actual - Whether to provide the actual
        contextInfo - Additional sandbox and tenant info
      • canCalculateTaxes

        public boolean canCalculateTaxes​(com.broadleafcommerce.cart.client.domain.Cart cart,
                                         com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
        Description copied from interface: TaxService
        Whether the cart contains the information required to calculate taxes.
        Specified by:
        canCalculateTaxes in interface TaxService
        Parameters:
        cart - The cart to determine whether taxes can be calculated for.
        contextInfo - Additional sandbox and tenant info
        Returns:
        Whether the cart contains the information required to calculate taxes.
      • executeTaxCalculation

        protected com.broadleafcommerce.tax.domain.TaxCalculationResponse executeTaxCalculation​(com.broadleafcommerce.cart.client.domain.Cart cart,
                                                                                                com.broadleafcommerce.tax.domain.TaxCalculationRequest request,
                                                                                                @Nullable
                                                                                                com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      • getFulfillmentGroups

        protected List<com.broadleafcommerce.cart.client.domain.FulfillmentGroup> getFulfillmentGroups​(com.broadleafcommerce.cart.client.domain.Cart cart)
      • findTaxAddressSourceHandler

        @Nullable
        protected TaxAddressSourceHandler findTaxAddressSourceHandler​(com.broadleafcommerce.cart.client.domain.Cart cart,
                                                                      com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup,
                                                                      @Nullable
                                                                      com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      • createRequest

        protected com.broadleafcommerce.tax.domain.TaxCalculationRequest createRequest​(com.broadleafcommerce.cart.client.domain.Cart cart,
                                                                                       javax.money.CurrencyUnit expectedCurrency,
                                                                                       com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      • setAllTaxToZero

        protected void setAllTaxToZero​(com.broadleafcommerce.cart.client.domain.Cart cart)
      • buildTaxItemsForLineItems

        protected List<com.broadleafcommerce.tax.domain.TaxItem> buildTaxItemsForLineItems​(com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup,
                                                                                           com.broadleafcommerce.cart.client.domain.Cart cart)
      • getCartItemMap

        protected Map<String,​com.broadleafcommerce.cart.client.domain.CartItem> getCartItemMap​(com.broadleafcommerce.cart.client.domain.Cart cart)
      • buildTaxItemForLineItem

        protected com.broadleafcommerce.tax.domain.TaxItem buildTaxItemForLineItem​(com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup,
                                                                                   com.broadleafcommerce.cart.client.domain.FulfillmentItem fulfillmentItem,
                                                                                   @Nullable
                                                                                   com.broadleafcommerce.cart.client.domain.CartItem cartItem)
      • getTaxItemIdForLineItem

        protected String getTaxItemIdForLineItem​(@NonNull
                                                 @NonNull com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup,
                                                 @NonNull
                                                 @NonNull com.broadleafcommerce.cart.client.domain.FulfillmentItem fulfillmentItem)
      • getProductDescription

        protected String getProductDescription​(@NonNull
                                               @NonNull com.broadleafcommerce.cart.client.domain.CartItem cartItem)
        Retrieves the description of the product represented by the CartItem.
        Parameters:
        cartItem - the CartItem
        Returns:
        The description of the product that was added to the cart.
      • shouldCalculateItemTaxes

        protected boolean shouldCalculateItemTaxes​(@NonNull
                                                   @NonNull com.broadleafcommerce.cart.client.domain.Cart cart,
                                                   @Nullable
                                                   com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      • shouldTaxFulfillment

        protected boolean shouldTaxFulfillment​(com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup,
                                               javax.money.CurrencyUnit currencyUnit,
                                               @Nullable
                                               com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      • determineTaxExemptionCode

        @Nullable
        protected String determineTaxExemptionCode​(com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      • applyTaxResponses

        protected void applyTaxResponses​(com.broadleafcommerce.tax.domain.TaxCalculationResponse response,
                                         com.broadleafcommerce.cart.client.domain.Cart cart,
                                         List<com.broadleafcommerce.cart.client.domain.FulfillmentGroup> fulfillmentGroups,
                                         javax.money.CurrencyUnit expectedCurrency,
                                         com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
      • buildTaxItemsForFulfillment

        protected List<com.broadleafcommerce.tax.domain.TaxItem> buildTaxItemsForFulfillment​(@NonNull
                                                                                             @NonNull com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup)
      • getTaxItemIdForFulfillment

        protected String getTaxItemIdForFulfillment​(@NonNull
                                                    @NonNull com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup)
        Extension point to modify the TaxItem.getItemId() for fulfillment tax items. For some TaxProviders, there may be a affix like FR (for freight) to add to the FulfillmentGroup.getReferenceNumber().
        Parameters:
        fulfillmentGroup - Fulfillment group from which to derive an id
        Returns:
        TaxItem.getItemId() for fulfillment tax items
      • calculateIncludedTaxes

        protected void calculateIncludedTaxes​(@NonNull
                                              @NonNull com.broadleafcommerce.cart.client.domain.Cart cart,
                                              javax.money.CurrencyUnit expectedCurrency,
                                              com.broadleafcommerce.tax.domain.TaxCalculationResponse taxResponse)
        Set VAT properties on CartPricing. Determine how much of the total tax amount is included in the subtotal.
        Parameters:
        cart - Cart to be taxed
        expectedCurrency - The currency to use
        taxResponse - The TaxResponse response containing calculated taxes.
      • addFulfillmentItemTaxDetails

        protected void addFulfillmentItemTaxDetails​(com.broadleafcommerce.tax.domain.TaxInfo taxInfo,
                                                    com.broadleafcommerce.cart.client.domain.FulfillmentItem fulfillmentItem,
                                                    @Nullable
                                                    com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
        Add FulfillmentItemTaxDetails to the fulfillment item.
        Parameters:
        taxInfo - The tax info
        fulfillmentItem - The fulfillment item
        contextInfo - the contextInfo for this request
      • buildTaxCalculationGroup

        protected com.broadleafcommerce.tax.domain.TaxCalculationGroup buildTaxCalculationGroup​(com.broadleafcommerce.cart.client.domain.Cart cart,
                                                                                                com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup,
                                                                                                TaxAddressSourceHandler handler,
                                                                                                List<com.broadleafcommerce.tax.domain.TaxItem> taxItems,
                                                                                                @Nullable
                                                                                                com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
        Builds a TaxCalculationGroup, which is used to calculate taxes for a group of items being shipped to or fulfilled at a particular Address.
        Parameters:
        cart -
        fulfillmentGroup -
        handler -
        taxItems -
        contextInfo -
        Returns:
      • determinePreferredProviderId

        @Nullable
        protected String determinePreferredProviderId​(com.broadleafcommerce.cart.client.domain.Cart cart,
                                                      @Nullable
                                                      com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
        This method returns the "preferred" Tax Provider ID, which is determined by TaxProvider.getProviderId(). By default, this will be null. This provides a hook point to allow someone to specify the Tax Provider that should be prioritized for use.
        Parameters:
        cart -
        contextInfo -
        Returns:
      • determineCartId

        protected String determineCartId​(com.broadleafcommerce.cart.client.domain.Cart cart,
                                         @Nullable
                                         com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
        We require the Cart.getId(), in most cases. However, if, for some reason, there is no cart ID available in the cart, then we provide a UUID. The cart ID is generally used to tie requests together in some Tax Provider systems. By default, this uses the Cart.getId(). However, it generates a UUID if no cart ID is available at the time this component is invoked.
        Parameters:
        cart -
        contextInfo -
        Returns:
      • getTypeFactory

        protected com.broadleafcommerce.common.extension.TypeFactory getTypeFactory()
      • getTaxDelegate

        protected com.broadleafcommerce.tax.delegate.TaxDelegate<?,​?> getTaxDelegate()
      • getAuthenticationUtils

        protected com.broadleafcommerce.resource.security.utils.service.AuthenticationUtils getAuthenticationUtils()