Class DefaultOfferAndOfferCodeUsabilityService
java.lang.Object
com.broadleafcommerce.promotion.offer.service.DefaultOfferAndOfferCodeUsabilityService
- All Implemented Interfaces:
OfferAndOfferCodeUsabilityService
public class DefaultOfferAndOfferCodeUsabilityService
extends Object
implements OfferAndOfferCodeUsabilityService
- Author:
- Chad Harchar (charchar)
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final CampaignService<Campaign>protected final OfferAuditDetailService<OfferAuditDetail>protected final OfferCodeService<OfferCode>protected final OfferService<Offer>protected final OfferSummaryService<OfferAuditSummary>protected static final SecureRandomprotected final SharedCodeSummaryService<SharedCodeAuditSummary>protected final com.broadleafcommerce.common.extension.TypeFactory -
Constructor Summary
ConstructorsConstructorDescriptionDefaultOfferAndOfferCodeUsabilityService(OfferCodeService<OfferCode> offerCodeService, OfferService<Offer> offerService, CampaignService<Campaign> campaignService, SharedCodeSummaryService<SharedCodeAuditSummary> sharedCodeSummaryService, OfferSummaryService<OfferAuditSummary> offerSummaryService, OfferAuditDetailService<OfferAuditDetail> offerAuditDetailService, com.broadleafcommerce.common.extension.TypeFactory typeFactory) -
Method Summary
Modifier and TypeMethodDescriptionprotected com.broadleafcommerce.promotion.offer.client.web.context.CodeUsabilityInfobuildCodeUsabilityInfo(List<? extends Offer> offers, List<? extends OfferCode> offerCodesForCode, String code) protected voidbuildOfferCodeUsage(com.broadleafcommerce.promotion.offer.client.web.context.CodeUsabilityInfo info, OfferCode offerCode, int usagesRemaining, int usagesRemainingPerUser, boolean usable) protected com.broadleafcommerce.promotion.offer.client.web.context.OfferUsabilityInfobuildOfferUsabilityInfo(Offer offer) protected voidbuildUsabilityInfoForCode(OffersAndOfferCodesUsabilityInfo usabilityInfo, OfferCode code, boolean canUse) protected voidcheckOfferCustomerUsageUsability(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends OfferCode> offerCodesForCode, List<OfferAuditDetail> offerAuditDetails, Instant endDate, Offer offer) protected voidcheckOfferMaxUsageUsability(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends OfferCode> offerCodesForCode, List<OfferAuditSummary> offerAuditSummaries, Offer offer) protected booleancheckTotalDiscountedBalance(Offer offer, javax.money.MonetaryAmount totalAlreadyDiscounted) protected voiddetermineCodeUsability(OffersAndOfferCodesUsabilityInfo usabilityInfos) protected StringdetermineCodeUsabilityType(List<? extends Offer> offers, OfferCode offerCode) protected intdetermineMaxUsesPerCustomer(List<OfferAuditDetail> offerAuditDetails, Instant endDate, Offer offer) protected StringgetCustomerTargetValue(com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext) Retrieves the value to set for theUserTarget.getTargetValue()on the audit detail(s).getOfferAndOfferCodeUsabilityInfo(List<String> codes, com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Checks the providedcodesagainst the offer codes and offers to determine whether the code is usable.getOfferAndOfferCodeUsabilityInfo(List<String> codes, List<? extends Offer> offers, com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Checks the providedcodesagainst the offer codes and provided offers to determine whether the code is usable.protected OffersAndOfferCodesUsabilityInfogetOfferAndOfferCodeUsabilityInfo(List<String> codes, List<? extends Offer> offers, List<? extends OfferCode> offerCodesForCode, com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, com.broadleafcommerce.data.tracking.core.context.ContextInfo context) protected OfferCachePropertiesprotected OfferMessagingPropertiesprotected OfferMaxUseStatusManagerprotected booleanhasAnyUsagesAvailableForUser(com.broadleafcommerce.promotion.offer.client.web.context.CodeUsabilityInfo codeUsabilityInfo) voidinit()protected OffersAndOfferCodesUsabilityInfoinitilizeOfferAndOfferCodeUsabilityInfos(List<String> codes, List<? extends Offer> offers, List<? extends OfferCode> offerCodesForCode, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) protected booleanisAnonymousUser(com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext) protected voidmarkCodesUnavailableToUser(@NonNull OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends OfferCode> codesWithMaxUsagesPerUser) protected voidmarkOfferUnavailableToUser(@NonNull OffersAndOfferCodesUsabilityInfo usabilityInfo, @NonNull List<? extends Offer> maxUsagesPerUserOffers, List<? extends OfferCode> offerCodesForCode) protected StringprioritizeCodeUsabilityType(String result, String codeUsabilityType) If any OfferCode is usable for the provided code string, prioritize the "USABLE" type.protected AuditVerificationFlagsresolveAuditVerificationFlags(com.broadleafcommerce.data.tracking.core.context.ContextInfo ctx) voidsetOfferCacheProperties(OfferCacheProperties offerCacheProperties) voidsetOfferMessagingProperties(OfferMessagingProperties offerMessagingProperties) voidsetStatusManager(OfferMaxUseStatusManager statusManager) protected voidupdateCampaignOfferCodeUsage(Offer offer, com.broadleafcommerce.promotion.offer.client.web.context.CodeUsabilityInfo codeUsabilityInfo, OfferCode offerCode, int usagesRemaining, boolean usable) protected voidupdateOfferCodeUsage(com.broadleafcommerce.promotion.offer.client.web.context.CodeUsabilityInfo codeUsabilityInfo, OfferCode offerCode, int usagesRemaining, boolean usable) protected voidupdateOfferCodeUsagePerUser(com.broadleafcommerce.promotion.offer.client.web.context.CodeUsabilityInfo codeUsabilityInfo, OfferCode offerCode, int usesRemainingPerUser, boolean usable) protected voidverifyUsabilityForCodesEmailRegex(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<Offer> offers, List<? extends OfferCode> offerCodes, com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) protected voidverifyUsabilityForCustomerUseOfferCodes(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends Offer> offers, List<? extends OfferCode> offerCodesForCode, com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) protected voidverifyUsabilityForCustomerUseOffers(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends Offer> offers, List<? extends OfferCode> offerCodesForCode, com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) protected voidverifyUsabilityForMaxUseOffers(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends Offer> offers, List<? extends OfferCode> offerCodesForCode, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) protected voidverifyUsabilityForMultiUseOfferCodes(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends Offer> offers, List<? extends OfferCode> offerCodesForCode, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) protected voidverifyUsabilityForOfferCodesHook(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<Offer> offers, List<? extends OfferCode> offerCodes, com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hookpoint to use to add additional, custom verification logic for offer code usability besides what is provided out of box.protected voidverifyUsabilityForOffersHook(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<Offer> offers, List<? extends OfferCode> offerCodes, com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hookpoint to use to add additional, custom verification logic for offer usability besides what is provided out of box.protected voidverifyUsabilityForSingleUseOfferCodes(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends Offer> offers, List<? extends OfferCode> offerCodesForCode, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo)
-
Field Details
-
offerCodeService
-
offerService
-
campaignService
-
offerSummaryService
-
offerAuditDetailService
-
typeFactory
protected final com.broadleafcommerce.common.extension.TypeFactory typeFactory -
RANDOM
-
-
Constructor Details
-
Method Details
-
init
@PostConstruct public void init() -
getOfferAndOfferCodeUsabilityInfo
@NonNull public OffersAndOfferCodesUsabilityInfo getOfferAndOfferCodeUsabilityInfo(@NonNull List<String> codes, @Nullable com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Description copied from interface:OfferAndOfferCodeUsabilityServiceChecks the providedcodesagainst the offer codes and offers to determine whether the code is usable.- Specified by:
getOfferAndOfferCodeUsabilityInfoin interfaceOfferAndOfferCodeUsabilityService- Parameters:
codes- the codes for which to check usabilitycustomerContext- context information for the customercontext- context information around sandbox and multitenant state- Returns:
- a
OffersAndOfferCodesUsabilityInfowhich contains information to determine whether or not the codes can be used
-
getOfferAndOfferCodeUsabilityInfo
@NonNull public OffersAndOfferCodesUsabilityInfo getOfferAndOfferCodeUsabilityInfo(@NonNull List<String> codes, @NonNull List<? extends Offer> offers, @Nullable com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) Description copied from interface:OfferAndOfferCodeUsabilityServiceChecks the providedcodesagainst the offer codes and provided offers to determine whether the code is usable.- Specified by:
getOfferAndOfferCodeUsabilityInfoin interfaceOfferAndOfferCodeUsabilityService- Parameters:
codes- the code for which to check usabilityoffers- the list of offers to check usabilitycustomerContext- context information for the customercontext- context information around sandbox and multitenant state- Returns:
- a
OffersAndOfferCodesUsabilityInfowhich contains information to determine whether or not the offers and codes can be used
-
getOfferAndOfferCodeUsabilityInfo
@NonNull protected OffersAndOfferCodesUsabilityInfo getOfferAndOfferCodeUsabilityInfo(@NonNull List<String> codes, @NonNull List<? extends Offer> offers, @NonNull List<? extends OfferCode> offerCodesForCode, @Nullable com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo context) -
verifyUsabilityForOfferCodesHook
protected void verifyUsabilityForOfferCodesHook(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<Offer> offers, List<? extends OfferCode> offerCodes, @Nullable com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hookpoint to use to add additional, custom verification logic for offer code usability besides what is provided out of box. This is run beforedetermineCodeUsability(com.broadleafcommerce.promotion.offer.domain.OffersAndOfferCodesUsabilityInfo)but after default verification methods.- Parameters:
usabilityInfo- Usability info compiled to this point.offers- Offers pre-filtered by max uses.offerCodes- Offer Codes pre-filtered by max uses.customerContext- The customer context including username.contextInfo- Additional multitenant and sandbox info.
-
verifyUsabilityForOffersHook
protected void verifyUsabilityForOffersHook(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<Offer> offers, List<? extends OfferCode> offerCodes, @Nullable com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hookpoint to use to add additional, custom verification logic for offer usability besides what is provided out of box. This is run beforedetermineCodeUsability(com.broadleafcommerce.promotion.offer.domain.OffersAndOfferCodesUsabilityInfo)but after default verification methods.- Parameters:
usabilityInfo- Usability info compiled to this point.offers- Offers pre-filtered by max uses.offerCodes- Offer Codes pre-filtered by max uses.customerContext- The customer context including username.contextInfo- Additional multitenant and sandbox info.
-
resolveAuditVerificationFlags
protected AuditVerificationFlags resolveAuditVerificationFlags(@Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo ctx) -
initilizeOfferAndOfferCodeUsabilityInfos
-
buildCodeUsabilityInfo
-
prioritizeCodeUsabilityType
If any OfferCode is usable for the provided code string, prioritize the "USABLE" type.By default, the other
CodeUsabilityTypesare not prioritized against each other.- Parameters:
result- theCodeUsabilityTypereturned up to this pointcodeUsabilityType- the currentCodeUsabilityTypeto check against- Returns:
- the
CodeUsabilityTypefor the string code
-
buildOfferUsabilityInfo
protected com.broadleafcommerce.promotion.offer.client.web.context.OfferUsabilityInfo buildOfferUsabilityInfo(Offer offer) -
determineCodeUsabilityType
-
verifyUsabilityForMaxUseOffers
protected void verifyUsabilityForMaxUseOffers(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends Offer> offers, List<? extends OfferCode> offerCodesForCode, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) -
checkOfferMaxUsageUsability
protected void checkOfferMaxUsageUsability(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends OfferCode> offerCodesForCode, List<OfferAuditSummary> offerAuditSummaries, Offer offer) -
checkTotalDiscountedBalance
protected boolean checkTotalDiscountedBalance(Offer offer, javax.money.MonetaryAmount totalAlreadyDiscounted) -
verifyUsabilityForSingleUseOfferCodes
protected void verifyUsabilityForSingleUseOfferCodes(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends Offer> offers, List<? extends OfferCode> offerCodesForCode, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) -
verifyUsabilityForMultiUseOfferCodes
protected void verifyUsabilityForMultiUseOfferCodes(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends Offer> offers, List<? extends OfferCode> offerCodesForCode, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) -
verifyUsabilityForCustomerUseOfferCodes
protected void verifyUsabilityForCustomerUseOfferCodes(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends Offer> offers, List<? extends OfferCode> offerCodesForCode, @Nullable com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) -
hasAnyUsagesAvailableForUser
protected boolean hasAnyUsagesAvailableForUser(com.broadleafcommerce.promotion.offer.client.web.context.CodeUsabilityInfo codeUsabilityInfo) -
verifyUsabilityForCustomerUseOffers
protected void verifyUsabilityForCustomerUseOffers(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends Offer> offers, List<? extends OfferCode> offerCodesForCode, @Nullable com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) -
isAnonymousUser
protected boolean isAnonymousUser(@Nullable com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext) -
getCustomerTargetValue
protected String getCustomerTargetValue(com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext) Retrieves the value to set for theUserTarget.getTargetValue()on the audit detail(s). This defaults to the user's email.- Parameters:
customerContext- TheCustomerContextassociated with the API request.- Returns:
- the value to set for the
UserTarget.getTargetValue()on the audit detail(s).
-
checkOfferCustomerUsageUsability
protected void checkOfferCustomerUsageUsability(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<? extends OfferCode> offerCodesForCode, List<OfferAuditDetail> offerAuditDetails, Instant endDate, Offer offer) -
determineMaxUsesPerCustomer
protected int determineMaxUsesPerCustomer(List<OfferAuditDetail> offerAuditDetails, Instant endDate, Offer offer) -
updateOfferCodeUsage
protected void updateOfferCodeUsage(com.broadleafcommerce.promotion.offer.client.web.context.CodeUsabilityInfo codeUsabilityInfo, OfferCode offerCode, int usagesRemaining, boolean usable) -
updateCampaignOfferCodeUsage
-
updateOfferCodeUsagePerUser
protected void updateOfferCodeUsagePerUser(com.broadleafcommerce.promotion.offer.client.web.context.CodeUsabilityInfo codeUsabilityInfo, OfferCode offerCode, int usesRemainingPerUser, boolean usable) -
buildOfferCodeUsage
protected void buildOfferCodeUsage(com.broadleafcommerce.promotion.offer.client.web.context.CodeUsabilityInfo info, OfferCode offerCode, int usagesRemaining, int usagesRemainingPerUser, boolean usable) -
determineCodeUsability
-
verifyUsabilityForCodesEmailRegex
protected void verifyUsabilityForCodesEmailRegex(OffersAndOfferCodesUsabilityInfo usabilityInfo, List<Offer> offers, List<? extends OfferCode> offerCodes, @Nullable com.broadleafcommerce.promotion.offer.client.web.context.CustomerContext customerContext, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) -
buildUsabilityInfoForCode
protected void buildUsabilityInfoForCode(OffersAndOfferCodesUsabilityInfo usabilityInfo, OfferCode code, boolean canUse) -
getOfferCacheProperties
-
setOfferCacheProperties
@Autowired(required=false) public void setOfferCacheProperties(OfferCacheProperties offerCacheProperties) -
getPatternCache
-
getStatusManager
-
setStatusManager
-
getOfferMessagingProperties
-
setOfferMessagingProperties
@Autowired public void setOfferMessagingProperties(OfferMessagingProperties offerMessagingProperties)
-