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
 
 -