Class DefaultDelegatingTaxService
- java.lang.Object
-
- com.broadleafcommerce.cartoperation.service.pricing.DefaultDelegatingTaxService
-
- All Implemented Interfaces:
TaxService
public class DefaultDelegatingTaxService extends Object implements TaxService
This implementation ofTaxService
callsTaxDelegate
, which has a discovery process to determine the bestTaxProvider
implemenation 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 void
addFulfillmentItemTaxDetails(com.broadleafcommerce.tax.domain.TaxInfo taxInfo, com.broadleafcommerce.cart.client.domain.FulfillmentItem fulfillmentItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
AddFulfillmentItemTaxDetails
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 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.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 onCartPricing
.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 theCart.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 byTaxProvider.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 theCartItem
.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 theTaxItem.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 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:TaxService
Whether the cart contains the information required to calculate taxes.- Specified by:
canCalculateTaxes
in 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
- TheTaxResponse
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)
AddFulfillmentItemTaxDetails
to 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 aUUID
if 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()
-
-