Class DefaultOfferEngineService
java.lang.Object
com.broadleafcommerce.promotion.offer.service.engine.DefaultOfferEngineService
- All Implemented Interfaces:
OfferEngineService
- Author:
- Chad Harchar (charchar)
-
Constructor Summary
ConstructorsConstructorDescriptionDefaultOfferEngineService(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 TypeMethodDescriptionvoidapplyAdjustments(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 voidassertOrderNotNull(EnhancedOrder order) protected com.broadleafcommerce.promotion.offer.client.web.context.discounts.OrderResponsebuildResponse(EnhancedOrder order) com.broadleafcommerce.promotion.offer.client.web.context.discounts.OrderResponseexecuteOnOrderAndContext(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 OfferServicePropertiesprotected com.broadleafcommerce.data.tracking.core.mapping.validation.EntityValidatorManagerprotected voidinitializeCurrency(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 booleaninitializeOrder(EnhancedOrder order) protected voidlogIfDebugOn(String message, Object... formatArgs) Checks ifLog.isDebugEnabled()debug is enabled}, then wraps the message inString.format(String, Object...)with the givenformatArgsand logs it.com.broadleafcommerce.promotion.offer.client.web.context.discounts.OrderResponsemodifyEvaluateOffersResponse(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.voidPopulates all of theEnhancedProratedOfferAdjustmentsfor anyOfferthat has aDiscount.getTargetType()ofDiscountTargetType.FULFILLMENT_GROUPand add them onto the individual discountablefulfillment items, as well as populatingEnhancedFulfillmentGroup.getProratedFulfillmentAdjustments().voidpopulateProratedItemAdjustments(EnhancedOrder order, OfferProcessingContext context) For anyOfferthat has aDiscount.prorationTypeofProrationType.TARGET_AND_QUALIFIER, this will populate all of theProratedItemOfferAdjustmentson theLineItemOfferDetailsmostly for the sake of reporting instruments.voidpopulateProratedOrderAdjustments(EnhancedOrder order, OfferProcessingContext context) Populates all of theEnhancedProratedOfferAdjustmentsfor anyOfferthat has aDiscount.getTargetType()ofDiscountTargetType.ORDERand add them onto the individual discountableorder line items.prepareOfferProcessingContext(EnhancedOrder order, CandidateOffers candidateOffers) This method takes in a set of candidate offers.voidvoidsetProperties(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:OfferEngineServiceFor 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:
executeOnOrderAndContextin 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:OfferEngineServiceHook point to add custom logic for the evaluate offer response.- Specified by:
modifyEvaluateOffersResponsein 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:OfferEngineServiceDetermines all of the candidate offers that can apply to the provided order for the given context.- Specified by:
getCandidateOffersin 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:OfferEngineServiceApplies the offers to the order in a way that gives the best discount for the customer based on possible permutations.- Specified by:
applyAdjustmentsin interfaceOfferEngineService- Parameters:
order- the order to be considered forOfferdiscounts.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:OfferEngineServiceFor anyOfferthat has aDiscount.prorationTypeofProrationType.TARGET_AND_QUALIFIER, this will populate all of theProratedItemOfferAdjustmentson theLineItemOfferDetailsmostly for the sake of reporting instruments.- Specified by:
populateProratedItemAdjustmentsin interfaceOfferEngineService- Parameters:
order- theEnhancedOrderwhoseLineItemsmight haveProratedItemOfferAdjustments
-
populateProratedOrderAdjustments
public void populateProratedOrderAdjustments(@NonNull EnhancedOrder order, OfferProcessingContext context) Description copied from interface:OfferEngineServicePopulates all of theEnhancedProratedOfferAdjustmentsfor anyOfferthat has aDiscount.getTargetType()ofDiscountTargetType.ORDERand add them onto the individual discountableorder line items.- Specified by:
populateProratedOrderAdjustmentsin interfaceOfferEngineService- Parameters:
order- theEnhancedOrderto populate the order offer adjustment prorations
-
populateProratedFulfillmentGroupAdjustments
Description copied from interface:OfferEngineServicePopulates all of theEnhancedProratedOfferAdjustmentsfor anyOfferthat has aDiscount.getTargetType()ofDiscountTargetType.FULFILLMENT_GROUPand add them onto the individual discountablefulfillment items, as well as populatingEnhancedFulfillmentGroup.getProratedFulfillmentAdjustments().- Specified by:
populateProratedFulfillmentGroupAdjustmentsin interfaceOfferEngineService- Parameters:
order- theEnhancedOrderto 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 givenformatArgsand logs it. -
getValidator
@NonNull protected com.broadleafcommerce.data.tracking.core.mapping.validation.EntityValidatorManager getValidator() -
getProperties
-
setProperties
-