Class DefaultDelegatingTaxService
- java.lang.Object
-
- com.broadleafcommerce.cartoperation.service.pricing.DefaultDelegatingTaxService
-
- All Implemented Interfaces:
TaxService
public class DefaultDelegatingTaxService extends Object implements TaxService
This implementation ofTaxServicecallsTaxDelegate, which has a discovery process to determine the bestTaxProviderimplemenation based on configured properties, the providedTaxCalculationRequest, and theContextInfo.- 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 voidaddFulfillmentItemTaxDetails(com.broadleafcommerce.tax.domain.TaxInfo taxInfo, com.broadleafcommerce.cart.client.domain.FulfillmentItem fulfillmentItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)AddFulfillmentItemTaxDetailsto the fulfillment item.voidapplyTaxes(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 voidapplyTaxResponses(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.TaxCalculationGroupbuildTaxCalculationGroup(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 aTaxCalculationGroup, 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.TaxItembuildTaxItemForLineItem(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 voidcalculateIncludedTaxes(@NonNull com.broadleafcommerce.cart.client.domain.Cart cart, javax.money.CurrencyUnit expectedCurrency, com.broadleafcommerce.tax.domain.TaxCalculationResponse taxResponse)Set VAT properties onCartPricing.booleancanCalculateTaxes(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.TaxCalculationRequestcreateRequest(com.broadleafcommerce.cart.client.domain.Cart cart, javax.money.CurrencyUnit expectedCurrency, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)protected StringdetermineCartId(com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)We require theCart.getId(), in most cases.protected StringdeterminePreferredProviderId(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 byTaxProvider.getProviderId().protected StringdetermineTaxExemptionCode(com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)protected com.broadleafcommerce.tax.domain.TaxCalculationResponseexecuteTaxCalculation(com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.tax.domain.TaxCalculationRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)protected TaxAddressSourceHandlerfindTaxAddressSourceHandler(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.AuthenticationUtilsgetAuthenticationUtils()protected Map<String,com.broadleafcommerce.cart.client.domain.CartItem>getCartItemMap(com.broadleafcommerce.cart.client.domain.Cart cart)protected CustomerProvidergetCustomerProvider()protected List<com.broadleafcommerce.cart.client.domain.FulfillmentGroup>getFulfillmentGroups(com.broadleafcommerce.cart.client.domain.Cart cart)protected StringgetProductDescription(@NonNull com.broadleafcommerce.cart.client.domain.CartItem cartItem)Retrieves the description of the product represented by theCartItem.protected List<TaxAddressSourceHandler>getTaxAddressSourceHandlers()protected com.broadleafcommerce.tax.delegate.TaxDelegate<?,?>getTaxDelegate()protected StringgetTaxItemIdForFulfillment(@NonNull com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup)Extension point to modify theTaxItem.getItemId()for fulfillment tax items.protected StringgetTaxItemIdForLineItem(@NonNull com.broadleafcommerce.cart.client.domain.FulfillmentGroup fulfillmentGroup, @NonNull com.broadleafcommerce.cart.client.domain.FulfillmentItem fulfillmentItem)protected com.broadleafcommerce.common.extension.TypeFactorygetTypeFactory()protected voidsetAllTaxToZero(com.broadleafcommerce.cart.client.domain.Cart cart)voidsetAuthenticationUtils(com.broadleafcommerce.resource.security.utils.service.AuthenticationUtils authenticationUtils)voidsetCustomerProvider(CustomerProvider customerProvider)protected booleanshouldCalculateItemTaxes(@NonNull com.broadleafcommerce.cart.client.domain.Cart cart, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)protected booleanshouldTaxFulfillment(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:TaxServiceCalculates and applies taxes to a cart.- Specified by:
applyTaxesin interfaceTaxService- Parameters:
cart- The cart to apply taxes against.estimated- Whether to provide an estimateactual- Whether to provide the actualcontextInfo- 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:TaxServiceWhether the cart contains the information required to calculate taxes.- Specified by:
canCalculateTaxesin interfaceTaxService- 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 theCartItem.- Parameters:
cartItem- theCartItem- 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 theTaxItem.getItemId()for fulfillment tax items. For someTaxProviders, there may be a affix likeFR(for freight) to add to theFulfillmentGroup.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 onCartPricing. Determine how much of the total tax amount is included in the subtotal.- Parameters:
cart- Cart to be taxedexpectedCurrency- The currency to usetaxResponse- TheTaxResponseresponse 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)AddFulfillmentItemTaxDetailsto the fulfillment item.- Parameters:
taxInfo- The tax infofulfillmentItem- The fulfillment itemcontextInfo- 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 aTaxCalculationGroup, 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 byTaxProvider.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 theCart.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 someTax Provider systems. By default, this uses theCart.getId(). However, it generates aUUIDif no cart ID is available at the time this component is invoked.- Parameters:
cart-contextInfo-- Returns:
-
getTaxAddressSourceHandlers
protected List<TaxAddressSourceHandler> getTaxAddressSourceHandlers()
-
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()
-
getCustomerProvider
protected CustomerProvider getCustomerProvider()
-
-