Class VirtualFulfillmentPricingProvider
java.lang.Object
com.broadleafcommerce.shipping.service.integrations.virtual.VirtualFulfillmentPricingProvider
- All Implemented Interfaces:
FulfillmentPricingProvider
-
Constructor Summary
ConstructorDescriptionVirtualFulfillmentPricingProvider
(com.fasterxml.jackson.databind.ObjectMapper objectMapper, com.broadleafcommerce.common.extension.TypeFactory typeFactory, VirtualFulfillmentPricingProperties virtualShipProps) -
Method Summary
Modifier and TypeMethodDescriptionprotected com.broadleafcommerce.shipping.domain.FulfillmentOptionPricedResponse
buildFulfillmentOptionPricedResponse
(@NonNull javax.money.MonetaryAmount price, @NonNull Map<com.broadleafcommerce.shipping.domain.FulfillmentPricingItem, javax.money.MonetaryAmount> itemToPriceMap, @NonNull VirtualFulfillmentPricingOption fulfillmentOption, boolean isEstimate) Builds aFulfillmentOptionPricedResponse
with the given inputs.protected Map<com.broadleafcommerce.shipping.domain.FulfillmentPricingItem,
javax.money.MonetaryAmount> buildItemToPriceMap
(@NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest request, @NonNull VirtualFulfillmentPricingOption option, @NonNull javax.money.CurrencyUnit currency) Builds a map ofFulfillmentPricingItems
to the calculated prices.com.broadleafcommerce.shipping.domain.FulfillmentOptionPricedResponse
calculateCostForFulfillmentGroup
(com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Calculate shipping for a request that includes a specified fulfillment option.protected com.broadleafcommerce.shipping.domain.FulfillmentOptionPricedResponse
calculateCostForFulfillmentGroupInternal
(@NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest request, boolean isEstimate) Deprecated, for removal: This API element is subject to removal in a future version.protected com.broadleafcommerce.shipping.domain.FulfillmentOptionPricedResponse
calculateCostForFulfillmentGroupInternal
(@NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest request, boolean isEstimate, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Calculates the shipping costs of the fulfillment items based on the fulfillment option on the request.protected javax.money.MonetaryAmount
calculateFixedPriceForItem
(@NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingItem item, @NonNull VirtualFulfillmentPricingOption option, @NonNull javax.money.CurrencyUnit currency) Calculates the fixed price for the fulfillment item, i.e.protected javax.money.MonetaryAmount
calculateFulfillmentGroupPriceBeforeAdjustments
(@NonNull VirtualFulfillmentPricingOption option, @NonNull javax.money.CurrencyUnit currency) Calculates the fixed fulfillment price per fulfillment group.protected javax.money.MonetaryAmount
calculatePercentageBasedPriceForItem
(@NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingItem item, @NonNull VirtualFulfillmentPricingOption option, @NonNull javax.money.CurrencyUnit currency) protected javax.money.MonetaryAmount
calculatePercentageBasedPriceForItems
(@NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingItem item, @NonNull VirtualFulfillmentPricingOption option, @NonNull javax.money.CurrencyUnit currency) protected javax.money.MonetaryAmount
calculatePriceForItem
(@NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingItem item, @NonNull VirtualFulfillmentPricingOption option, @NonNull javax.money.CurrencyUnit currency) Deprecated.protected javax.money.MonetaryAmount
calculatePriceForItems
(@NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingItem item, @NonNull VirtualFulfillmentPricingOption option, @NonNull javax.money.CurrencyUnit currency) Calculates the price for a fulfillment items.boolean
canCalculateCostForOption
(String fulfillmentOptionName, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Whether this provider has knowledge of the provided option and thus can provide cost information for it.boolean
canProvidePricedFulfillmentOptions
(com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest fulfillmentPricingRequest, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Whether this provider can provide fulfillment options based on the "fulfillmentPricingRequest"com.broadleafcommerce.shipping.domain.FulfillmentOptionPricedResponse
estimateCostForFulfillmentGroup
(com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Estimate shipping for a request that includes a specified fulfillment option.protected VirtualFulfillmentPricingOption
getDefaultVirtualFulfillmentPricingOption
(@NonNull javax.money.CurrencyUnit currency) Builds aVirtualFulfillmentPricingOption
with fields initialized to typical values.protected List<VirtualFulfillmentPricingOption>
getFulfillmentOptions
(com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Gets a list ofVirtualFulfillmentPricingOptions
based on the givenContextInfo
.protected javax.money.MonetaryAmount
getMonetaryAmount
(javax.money.CurrencyUnit expectedCurrency, Set<com.broadleafcommerce.shipping.domain.FulfillmentPriceAmount> fulfillmentPriceAmounts) Find the corresponding price for the expected currency, otherwise return zero.protected com.fasterxml.jackson.databind.ObjectMapper
protected com.broadleafcommerce.common.extension.TypeFactory
protected VirtualFulfillmentPricingConfig
Deprecated.since 1.1.0, in favor ofVirtualFulfillmentPricingProperties.getFulfillmentOptions(ContextInfo)
protected VirtualFulfillmentPricingProperties
void
init()
Reads in the configuration file defined byVirtualFulfillmentPricingProperties.getConfigPath()
and initializesvirtualFulfillmentPricingConfig
to the result.List<com.broadleafcommerce.shipping.domain.FulfillmentOptionPricedResponse>
providePricedFulfillmentOptions
(com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Retrieve all possible priced fulfillment options for the provided request.protected javax.money.CurrencyUnit
resolveCurrency
(com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest request) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.broadleafcommerce.shipping.service.integrations.FulfillmentPricingProvider
calculateCostForFulfillmentGroup, canCalculateCostForOption, canProvidePricedFulfillmentOptions, estimateCostForFulfillmentGroup, getFulfillmentOptionPricingResponses, providePricedFulfillmentOptions
-
Constructor Details
-
VirtualFulfillmentPricingProvider
public VirtualFulfillmentPricingProvider(com.fasterxml.jackson.databind.ObjectMapper objectMapper, com.broadleafcommerce.common.extension.TypeFactory typeFactory, VirtualFulfillmentPricingProperties virtualShipProps)
-
-
Method Details
-
init
@PostConstruct public void init()Reads in the configuration file defined byVirtualFulfillmentPricingProperties.getConfigPath()
and initializesvirtualFulfillmentPricingConfig
to the result.- Throws:
UncheckedIOException
- Thrown when there is an error while reading the configuration file or converting its contents into aVirtualFulfillmentPricingConfig
.
-
providePricedFulfillmentOptions
public List<com.broadleafcommerce.shipping.domain.FulfillmentOptionPricedResponse> providePricedFulfillmentOptions(com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:FulfillmentPricingProvider
Retrieve all possible priced fulfillment options for the provided request. Intended to be used to display options to the customer for selection.- Specified by:
providePricedFulfillmentOptions
in interfaceFulfillmentPricingProvider
- Parameters:
request
- The request for which to calculate shipping and return options.contextInfo
- context information around sandbox and multitenant state- Returns:
- All possible priced fulfillment options for the provided request.
-
canProvidePricedFulfillmentOptions
public boolean canProvidePricedFulfillmentOptions(com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest fulfillmentPricingRequest, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:FulfillmentPricingProvider
Whether this provider can provide fulfillment options based on the "fulfillmentPricingRequest"- Specified by:
canProvidePricedFulfillmentOptions
in interfaceFulfillmentPricingProvider
- Parameters:
fulfillmentPricingRequest
- The request used to identify relevant fulfillment optionscontextInfo
- context information around sandbox and multitenant state- Returns:
- Whether this provider can provide fulfillment options based on the "fulfillmentPricingRequest"
-
calculateCostForFulfillmentGroup
public com.broadleafcommerce.shipping.domain.FulfillmentOptionPricedResponse calculateCostForFulfillmentGroup(com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:FulfillmentPricingProvider
Calculate shipping for a request that includes a specified fulfillment option.- Specified by:
calculateCostForFulfillmentGroup
in interfaceFulfillmentPricingProvider
- Parameters:
request
- The request for which to calculate shipping.contextInfo
- context information around sandbox and multitenant state- Returns:
- Response object with calculated shipping cost for the provided request.
-
canCalculateCostForOption
public boolean canCalculateCostForOption(String fulfillmentOptionName, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:FulfillmentPricingProvider
Whether this provider has knowledge of the provided option and thus can provide cost information for it.- Specified by:
canCalculateCostForOption
in interfaceFulfillmentPricingProvider
- Parameters:
fulfillmentOptionName
- The option to consider whether this provider can calculate cost information.contextInfo
- context information around sandbox and multitenant state- Returns:
- Whether this provider has knowledge of the provided option and thus can provide cost information for it.
-
estimateCostForFulfillmentGroup
public com.broadleafcommerce.shipping.domain.FulfillmentOptionPricedResponse estimateCostForFulfillmentGroup(com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:FulfillmentPricingProvider
Estimate shipping for a request that includes a specified fulfillment option.- Specified by:
estimateCostForFulfillmentGroup
in interfaceFulfillmentPricingProvider
- Parameters:
request
- The request for which to estimate shipping.contextInfo
- context information around sandbox and multitenant state- Returns:
- Response object with estimated shipping cost for the provided request.
-
getFulfillmentOptions
protected List<VirtualFulfillmentPricingOption> getFulfillmentOptions(@Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Gets a list ofVirtualFulfillmentPricingOptions
based on the givenContextInfo
.If
VirtualFulfillmentPricingOptions
cannot be found,virtualFulfillmentPricingConfig
would be used as a fallback.- Parameters:
contextInfo
- context information around sandbox and multitenant state- Returns:
- a list of
VirtualFulfillmentPricingOptions
based on the givenContextInfo
-
calculateCostForFulfillmentGroupInternal
@Deprecated(since="1.1.0", forRemoval=true) protected com.broadleafcommerce.shipping.domain.FulfillmentOptionPricedResponse calculateCostForFulfillmentGroupInternal(@NonNull @NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest request, boolean isEstimate) Deprecated, for removal: This API element is subject to removal in a future version.since 1.1.0, in favor ofcalculateCostForFulfillmentGroupInternal(FulfillmentPricingRequest, boolean, ContextInfo)
-
calculateCostForFulfillmentGroupInternal
protected com.broadleafcommerce.shipping.domain.FulfillmentOptionPricedResponse calculateCostForFulfillmentGroupInternal(@NonNull @NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest request, boolean isEstimate, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Calculates the shipping costs of the fulfillment items based on the fulfillment option on the request. Handles the shared logic ofcalculateCostForFulfillmentGroup(FulfillmentPricingRequest, ContextInfo)
andestimateCostForFulfillmentGroup(FulfillmentPricingRequest, ContextInfo)
.- Parameters:
request
- The request for which to calculate shippingisEstimate
- Whether or not the shipping should be estimatedcontextInfo
- Context information around sandbox and multitenant state- Returns:
- fulfillment price information for request based on the fulfillment option.
-
buildItemToPriceMap
protected Map<com.broadleafcommerce.shipping.domain.FulfillmentPricingItem,javax.money.MonetaryAmount> buildItemToPriceMap(@NonNull @NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest request, @NonNull @NonNull VirtualFulfillmentPricingOption option, @NonNull @NonNull javax.money.CurrencyUnit currency) Builds a map ofFulfillmentPricingItems
to the calculated prices.- Parameters:
request
- The request for which to calculate shippingoption
- The fulfillment option to use to calculate pricing for therequest
- Returns:
- a map of
FulfillmentPricingItems
to the calculated prices.
-
calculatePriceForItem
@Deprecated protected javax.money.MonetaryAmount calculatePriceForItem(@NonNull @NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingItem item, @NonNull @NonNull VirtualFulfillmentPricingOption option, @NonNull @NonNull javax.money.CurrencyUnit currency) Deprecated.Calculates the price for a fulfillment item. By default this means the price for a single unit rather than all like units, i.e.,FulfillmentPricingItem.getUnitPrice()
is used notFulfillmentPricingItem.getSubtotal()
.- Parameters:
item
- TheFulfillmentPriceInfo
item to be pricedoption
- The applicableVirtualFulfillmentPricingOption
for theitem
- Returns:
- the price for a fulfillment item.
-
calculatePriceForItems
protected javax.money.MonetaryAmount calculatePriceForItems(@NonNull @NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingItem item, @NonNull @NonNull VirtualFulfillmentPricingOption option, @NonNull @NonNull javax.money.CurrencyUnit currency) Calculates the price for a fulfillment items. By default this means the price for all units, i.e.,FulfillmentPricingItem.getMerchandiseTotalAmount()
.- Parameters:
item
- TheFulfillmentPriceInfo
item to be pricedoption
- The applicableVirtualFulfillmentPricingOption
for theitem
- Returns:
- the price for a fulfillment items.
-
calculateFixedPriceForItem
protected javax.money.MonetaryAmount calculateFixedPriceForItem(@NonNull @NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingItem item, @NonNull @NonNull VirtualFulfillmentPricingOption option, @NonNull @NonNull javax.money.CurrencyUnit currency) Calculates the fixed price for the fulfillment item, i.e. the price per item plus any flat rates for this item.- Parameters:
item
- TheFulfillmentPriceInfo
item to be pricedoption
- The applicableVirtualFulfillmentPricingOption
for theitem
- Returns:
- the fixed price for a fulfillment item.
-
calculatePercentageBasedPriceForItem
@Deprecated protected javax.money.MonetaryAmount calculatePercentageBasedPriceForItem(@NonNull @NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingItem item, @NonNull @NonNull VirtualFulfillmentPricingOption option, @NonNull @NonNull javax.money.CurrencyUnit currency) Deprecated.Calculates the fulfillment price based on the percentage rate per item.- Parameters:
item
- TheFulfillmentPriceInfo
item to be pricedoption
- The applicableVirtualFulfillmentPricingOption
for theitem
- Returns:
- the percentage rate price for a fulfillment item.
-
calculatePercentageBasedPriceForItems
protected javax.money.MonetaryAmount calculatePercentageBasedPriceForItems(@NonNull @NonNull com.broadleafcommerce.shipping.domain.FulfillmentPricingItem item, @NonNull @NonNull VirtualFulfillmentPricingOption option, @NonNull @NonNull javax.money.CurrencyUnit currency) -
calculateFulfillmentGroupPriceBeforeAdjustments
protected javax.money.MonetaryAmount calculateFulfillmentGroupPriceBeforeAdjustments(@NonNull @NonNull VirtualFulfillmentPricingOption option, @NonNull @NonNull javax.money.CurrencyUnit currency) Calculates the fixed fulfillment price per fulfillment group.- Parameters:
option
- The applicableVirtualFulfillmentPricingOption
for the fulfillment group- Returns:
- the fixed fulfillment price per fulfillment group
-
getMonetaryAmount
protected javax.money.MonetaryAmount getMonetaryAmount(javax.money.CurrencyUnit expectedCurrency, @Nullable Set<com.broadleafcommerce.shipping.domain.FulfillmentPriceAmount> fulfillmentPriceAmounts) Find the corresponding price for the expected currency, otherwise return zero.- Parameters:
expectedCurrency
- The expected currency to find a price forfulfillmentPriceAmounts
- The list of prices to search against- Returns:
- the corresponding price for the expected currency, otherwise return zero
-
buildFulfillmentOptionPricedResponse
protected com.broadleafcommerce.shipping.domain.FulfillmentOptionPricedResponse buildFulfillmentOptionPricedResponse(@NonNull @NonNull javax.money.MonetaryAmount price, @NonNull @NonNull Map<com.broadleafcommerce.shipping.domain.FulfillmentPricingItem, javax.money.MonetaryAmount> itemToPriceMap, @NonNull @NonNull VirtualFulfillmentPricingOption fulfillmentOption, boolean isEstimate) Builds aFulfillmentOptionPricedResponse
with the given inputs.- Parameters:
price
- The value to set forFulfillmentOptionPricedResponse.getFulfillmentPriceCalculated()
.itemToPriceMap
- Map ofFulfillmentPricingItems
to their fulfillment pricesfulfillmentOption
- TheFulfillmentOption
that forms the basis of the responseisEstimate
- Whether this is for estimating the fulfillment pricing- Returns:
- a
FulfillmentOptionPricedResponse
for the given inputs.
-
getDefaultVirtualFulfillmentPricingOption
protected VirtualFulfillmentPricingOption getDefaultVirtualFulfillmentPricingOption(@NonNull @NonNull javax.money.CurrencyUnit currency) Builds aVirtualFulfillmentPricingOption
with fields initialized to typical values.- Returns:
- a
VirtualFulfillmentPricingOption
with fields initialized to typical values.
-
resolveCurrency
protected javax.money.CurrencyUnit resolveCurrency(com.broadleafcommerce.shipping.domain.FulfillmentPricingRequest request) -
getObjectMapper
protected com.fasterxml.jackson.databind.ObjectMapper getObjectMapper() -
getTypeFactory
protected com.broadleafcommerce.common.extension.TypeFactory getTypeFactory() -
getVirtualShipProps
-
getVirtualFulfillmentPricingConfig
Deprecated.since 1.1.0, in favor ofVirtualFulfillmentPricingProperties.getFulfillmentOptions(ContextInfo)
-
calculateCostForFulfillmentGroupInternal(FulfillmentPricingRequest, boolean, ContextInfo)