Class DefaultOfferEngineService
java.lang.Object
com.broadleafcommerce.promotion.offer.service.engine.DefaultOfferEngineService
- All Implemented Interfaces:
OfferEngineService
- Author:
- Chad Harchar (charchar)
-
Constructor Summary
ConstructorDescriptionDefaultOfferEngineService
(OfferCandidateService offerCandidateService, OfferApplicationService offerApplicationService, OfferEngineResponseBuilder offerEngineResponseBuilder, ProrationService prorationService, com.broadleafcommerce.common.extension.TypeFactory offerFactory, OfferProcesingUtility offerProcessingUtility, com.broadleafcommerce.data.tracking.core.mapping.validation.EntityValidatorManager validator) -
Method Summary
Modifier and TypeMethodDescriptionvoid
applyAdjustments
(EnhancedOrder order, OfferProcessingContext processingContext) Applies the offers to the order in a way that gives the best discount for the customer based on possible permutations.protected void
assertOrderNotNull
(EnhancedOrder order) protected com.broadleafcommerce.promotion.offer.client.web.context.discounts.OrderResponse
buildResponse
(EnhancedOrder order) com.broadleafcommerce.promotion.offer.client.web.context.discounts.OrderResponse
executeOnOrderAndContext
(EnhancedOrder order, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) For the provided order and context, determines the candidate offers and applies them to the order in the permutation that gives the best discount.getCandidateOffers
(EnhancedOrder order, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Determines all of the candidate offers that can apply to the provided order for the given context.protected OfferServiceProperties
protected com.broadleafcommerce.data.tracking.core.mapping.validation.EntityValidatorManager
protected void
initializeCurrency
(EnhancedOrder order) Orders should already have a currency but if one is not present on the order, this method will populate it with the system default.protected boolean
initializeOrder
(EnhancedOrder order) protected void
logIfDebugOn
(String message, Object... formatArgs) Checks ifLog.isDebugEnabled()
debug is enabled}, then wraps the message inString.format(String, Object...)
with the givenformatArgs
and logs it.com.broadleafcommerce.promotion.offer.client.web.context.discounts.OrderResponse
modifyEvaluateOffersResponse
(com.broadleafcommerce.promotion.offer.client.web.context.discounts.OrderResponse response, EnhancedOrder order, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to add custom logic for the evaluate offer response.void
Populates all of theEnhancedProratedOfferAdjustments
for anyOffer
that has aDiscount.getTargetType()
ofDiscountTargetType.FULFILLMENT_GROUP
and add them onto the individual discountablefulfillment items
, as well as populatingEnhancedFulfillmentGroup.getProratedFulfillmentAdjustments()
.void
populateProratedItemAdjustments
(EnhancedOrder order, OfferProcessingContext context) For anyOffer
that has aDiscount.prorationType
ofProrationType.TARGET_AND_QUALIFIER
, this will populate all of theProratedItemOfferAdjustments
on theLineItemOfferDetails
mostly for the sake of reporting instruments.void
populateProratedOrderAdjustments
(EnhancedOrder order, OfferProcessingContext context) Populates all of theEnhancedProratedOfferAdjustments
for anyOffer
that has aDiscount.getTargetType()
ofDiscountTargetType.ORDER
and add them onto the individual discountableorder line items
.prepareOfferProcessingContext
(EnhancedOrder order, CandidateOffers candidateOffers) This method takes in a set of candidate offers.void
void
setProperties
(OfferServiceProperties properties)
-
Constructor Details
-
DefaultOfferEngineService
public DefaultOfferEngineService(OfferCandidateService offerCandidateService, OfferApplicationService offerApplicationService, OfferEngineResponseBuilder offerEngineResponseBuilder, ProrationService prorationService, com.broadleafcommerce.common.extension.TypeFactory offerFactory, OfferProcesingUtility offerProcessingUtility, com.broadleafcommerce.data.tracking.core.mapping.validation.EntityValidatorManager validator)
-
-
Method Details
-
executeOnOrderAndContext
public com.broadleafcommerce.promotion.offer.client.web.context.discounts.OrderResponse executeOnOrderAndContext(@NonNull EnhancedOrder order, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:OfferEngineService
For the provided order and context, determines the candidate offers and applies them to the order in the permutation that gives the best discount.- Specified by:
executeOnOrderAndContext
in interfaceOfferEngineService
- Parameters:
order
- context information around the offercontextInfo
- Context information around sandbox and multitenant state.- Returns:
- A response DTO that details the adjustments and their discounts applied to the order
-
processOfferPermutations
-
modifyEvaluateOffersResponse
public com.broadleafcommerce.promotion.offer.client.web.context.discounts.OrderResponse modifyEvaluateOffersResponse(@NonNull com.broadleafcommerce.promotion.offer.client.web.context.discounts.OrderResponse response, @NonNull EnhancedOrder order, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:OfferEngineService
Hook point to add custom logic for the evaluate offer response.- Specified by:
modifyEvaluateOffersResponse
in interfaceOfferEngineService
- Parameters:
response
- a response DTO that details the adjustments and their discounts applied to the orderorder
- context information around the offercontextInfo
- context information around sandbox and multitenant state- Returns:
- the modified response DTO that details the adjustments and their discounts applied to the order
-
initializeOrder
-
prepareOfferProcessingContext
public OfferProcessingContext prepareOfferProcessingContext(EnhancedOrder order, CandidateOffers candidateOffers) This method takes in a set of candidate offers. The offers are updated with relevant combinability data which are then used to construct an OfferProcessingContext.- Parameters:
order
-candidateOffers
-- Returns:
-
initializeCurrency
Orders should already have a currency but if one is not present on the order, this method will populate it with the system default.- Parameters:
order
-
-
buildResponse
protected com.broadleafcommerce.promotion.offer.client.web.context.discounts.OrderResponse buildResponse(@NonNull EnhancedOrder order) -
getCandidateOffers
@NonNull public CandidateOffers getCandidateOffers(@NonNull EnhancedOrder order, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:OfferEngineService
Determines all of the candidate offers that can apply to the provided order for the given context.- Specified by:
getCandidateOffers
in interfaceOfferEngineService
- Parameters:
order
- context information around the offercontextInfo
- Context information around sandbox and multitenant state.- Returns:
- The list of offers that can apply to the provided order and context.
-
applyAdjustments
public void applyAdjustments(@NonNull EnhancedOrder order, @NonNull OfferProcessingContext processingContext) Description copied from interface:OfferEngineService
Applies the offers to the order in a way that gives the best discount for the customer based on possible permutations.- Specified by:
applyAdjustments
in interfaceOfferEngineService
- Parameters:
order
- the order to be considered forOffer
discounts.processingContext
- all permutations of orders that can be considered for the order
-
populateProratedItemAdjustments
public void populateProratedItemAdjustments(@NonNull EnhancedOrder order, OfferProcessingContext context) Description copied from interface:OfferEngineService
For anyOffer
that has aDiscount.prorationType
ofProrationType.TARGET_AND_QUALIFIER
, this will populate all of theProratedItemOfferAdjustments
on theLineItemOfferDetails
mostly for the sake of reporting instruments.- Specified by:
populateProratedItemAdjustments
in interfaceOfferEngineService
- Parameters:
order
- theEnhancedOrder
whoseLineItems
might haveProratedItemOfferAdjustments
-
populateProratedOrderAdjustments
public void populateProratedOrderAdjustments(@NonNull EnhancedOrder order, OfferProcessingContext context) Description copied from interface:OfferEngineService
Populates all of theEnhancedProratedOfferAdjustments
for anyOffer
that has aDiscount.getTargetType()
ofDiscountTargetType.ORDER
and add them onto the individual discountableorder line items
.- Specified by:
populateProratedOrderAdjustments
in interfaceOfferEngineService
- Parameters:
order
- theEnhancedOrder
to populate the order offer adjustment prorations
-
populateProratedFulfillmentGroupAdjustments
Description copied from interface:OfferEngineService
Populates all of theEnhancedProratedOfferAdjustments
for anyOffer
that has aDiscount.getTargetType()
ofDiscountTargetType.FULFILLMENT_GROUP
and add them onto the individual discountablefulfillment items
, as well as populatingEnhancedFulfillmentGroup.getProratedFulfillmentAdjustments()
.- Specified by:
populateProratedFulfillmentGroupAdjustments
in interfaceOfferEngineService
- Parameters:
order
- theEnhancedOrder
to populate the fulfillment group offer adjustment prorations
-
assertOrderNotNull
-
logIfDebugOn
Checks ifLog.isDebugEnabled()
debug is enabled}, then wraps the message inString.format(String, Object...)
with the givenformatArgs
and logs it. -
getValidator
@NonNull protected com.broadleafcommerce.data.tracking.core.mapping.validation.EntityValidatorManager getValidator() -
getProperties
-
setProperties
-