Class DefaultSubscriptionGenerationService<SWI extends SubscriptionWithItems>
java.lang.Object
com.broadleafcommerce.subscriptionoperation.service.DefaultSubscriptionGenerationService<SWI>
- All Implemented Interfaces:
SubscriptionGenerationService<SWI>
public class DefaultSubscriptionGenerationService<SWI extends SubscriptionWithItems>
extends Object
implements SubscriptionGenerationService<SWI>
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionDefaultSubscriptionGenerationService(SubscriptionProvider<SWI, Subscription, SubscriptionOwnerInfo> subscriptionProvider, SubscriptionOperationUtils subscriptionOperationUtils, org.springframework.context.MessageSource messageSource, com.broadleafcommerce.common.extension.TypeFactory typeFactory) -
Method Summary
Modifier and TypeMethodDescriptionprotected List<SubscriptionItem>buildDependentSubscriptionItems(@NonNull Subscription subscription, @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, @NonNull SubscriptionItem parentSubscriptionItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds out creation requests for subscription items from dependent order itemsprotected List<SubscriptionAdjustment>buildSubscriptionAdjustments(@NonNull CreateSubscriptionFromOrderRequest request, @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hookpoint for buildingSubscriptionAdjustmentsfrom anOrder.protected SubscriptionItembuildSubscriptionItem(@NonNull Subscription subscription, @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, com.broadleafcommerce.order.client.domain.OrderItem parentItem, SubscriptionItem parentSubscriptionItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds out a request to create a subscription item.protected SubscriptionItemAdjustmentbuildSubscriptionItemAdjustment(@NonNull Subscription subscription, @NonNull SubscriptionItem item, @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, @NonNull com.broadleafcommerce.order.common.domain.Adjustment adjustment) Builds out a subscription item adjustment from an order or order item adjustmentprotected List<SubscriptionItemAdjustment>buildSubscriptionItemAdjustments(@NonNull Subscription subscription, @NonNull SubscriptionItem item, @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, @NonNull List<com.broadleafcommerce.order.common.domain.Adjustment> itemAdjustments) Builds subscription item adjustments for item adjustments of typeDefaultAdjustmentType.RECURRING_DISCOUNT.protected List<SubscriptionItem>buildSubscriptionItems(@NonNull Subscription subscription, @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds out subscription item creation requests the root order item for the subscription and potential dependent order items.protected SWIbuildSubscriptionWithItems(@NonNull CreateSubscriptionFromOrderRequest request, @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds out aSubscriptionWithItemsfor a given rootOrderItem.buildSubscriptionWithItems(@NonNull CreateSubscriptionFromOrderRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) BuildsSubscriptionsWithItemsto be created based on the givenOrder.createNewSubscriptions(@NonNull CreateSubscriptionFromOrderRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) protected InstantdetermineEndOfTermsDate(@NonNull com.broadleafcommerce.order.client.domain.Order order, @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, Instant startOfTermsDate, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Determines the end of terms date for a subscription based on the order and order item.protected StringdetermineFulfillmentWorkflow(@NonNull CreateSubscriptionFromOrderRequest request, @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Identifies the subscription's fulfillment workflow.protected StringdetermineItemPaymentStrategy(@NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem) Determines theSubscriptionCreationRequest.getPaymentStrategy()for a subscription.protected IntegerdetermineNextPeriod(@NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem) Determines theSubscription.getNextPeriod()for a subscription.protected StringdetermineStartingSubscriptionStatus(@NonNull CreateSubscriptionFromOrderRequest request, @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to determine the starting status of a subscription.protected InstantdetermineStartOfTermsDate(@NonNull com.broadleafcommerce.order.client.domain.Order order, @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Determines the date the terms start for the subscription if there are terms.getAddOnChoiceKey(com.broadleafcommerce.order.client.domain.OrderItem orderItem) Determines the value to store atSubscriptionItem.getAddOnKey().protected DategetCreatedDate(@NonNull com.broadleafcommerce.order.client.domain.Order order) protected org.springframework.context.MessageSourceprotected intgetSubscriptionItemQuantity(@NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, SubscriptionItem parentSubscriptionItem) Scales the dependent item's quantity based on the parent item.protected SubscriptionOperationUtilsprotected SubscriptionProvider<SWI,Subscription, SubscriptionOwnerInfo> protected com.broadleafcommerce.common.extension.TypeFactoryprotected booleanhasTerms(@NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem) Checks theOrderItemfor terms.protected Stream<com.broadleafcommerce.order.client.domain.OrderItem>identifySubscriptionRootItems(@NonNull CreateSubscriptionFromOrderRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Identifies the rootOrderItemsfor which to build separateSubscriptions.protected booleanisSeparateFromPrimaryItem(@NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem) protected booleanisSubscriptionItem(@NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem) protected booleanorderItemRepresentsActionToExistingSubscription(@NonNull com.broadleafcommerce.order.client.domain.Order order, @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem) protected SubscriptionpopulateAdditionalSubscriptionDetails(@NonNull Subscription subscription, @NonNull CreateSubscriptionFromOrderRequest request, @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to easily populate additional details on theSubscription.protected SubscriptionItempopulateAdditionalSubscriptionItemDetails(@NonNull Subscription subscription, @NonNull SubscriptionItem subscriptionItem, @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, com.broadleafcommerce.order.client.domain.OrderItem parentOrderItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to easily populate additional details on theSubscriptionItem.protected voidpopulateFreeTrialDetails(@NonNull Subscription subscription, @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, @NonNull CreateSubscriptionFromOrderRequest createRequest, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Sets the details for when afree trial offeris applied, such as andSubscription.getFreeTrialEndDate().protected SubscriptionpopulateSubscriptionRoundBillDateAttribute(@NonNull Subscription subscription, @NonNull CreateSubscriptionFromOrderRequest request, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Populates theSubscriptionAttributeConstants.Internal.ROUND_UP_BILL_DATES_TO_END_OF_MONTHif the order submission day is not available every month, e.g.protected voidpopulateTermDetails(@NonNull Subscription subscription, @NonNull com.broadleafcommerce.order.client.domain.Order order, @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point for populating term-based data on theSubscriptionfrom therootOrderItem.protected voidsetParentItemRef(@NonNull SubscriptionItem item, com.broadleafcommerce.order.client.domain.OrderItem parentItem) Set theSubscriptionItem.getParentItemRef()andSubscriptionItem.getParentItemRefType()given theparentItem.protected booleanshouldCreateNewSubscription(@NonNull CreateSubscriptionFromOrderRequest request, @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to determine whether a givenOrderhas any items representing aSubscriptionthat should be created.protected voidupdateAdjustmentQualifierDetailRefs(List<SWI> subscriptionWithItemsToCreate, @NonNull CreateSubscriptionFromOrderRequest originalCreateSubscriptionRequest, com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Updates theSubscriptionItemAdjustment.getQualifierDetails()to map to the actual createdSubscriptionItem.getId().
-
Field Details
-
AUTO_RENEWAL_ENABLED
- See Also:
-
ALLOW_AUTO_RENEWAL_MODIFICATION
- See Also:
-
-
Constructor Details
-
DefaultSubscriptionGenerationService
public DefaultSubscriptionGenerationService(SubscriptionProvider<SWI, Subscription, SubscriptionOwnerInfo> subscriptionProvider, SubscriptionOperationUtils subscriptionOperationUtils, org.springframework.context.MessageSource messageSource, com.broadleafcommerce.common.extension.TypeFactory typeFactory)
-
-
Method Details
-
createNewSubscriptions
public List<SWI> createNewSubscriptions(@NonNull @NonNull CreateSubscriptionFromOrderRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Description copied from interface:SubscriptionGenerationServiceGiven the providedOrderand its items, creates one or moreSubscriptionand relateditems. If the subscription already exists, returns it.- Specified by:
createNewSubscriptionsin interfaceSubscriptionGenerationService<SWI extends SubscriptionWithItems>- Parameters:
request- Request containing theOrderwithOrderItemsrepresentingSubscriptionsto createcontextInfo- Additional sandbox and multitenant info- Returns:
- the list of the
SubscriptionWithItemscreated.
-
buildSubscriptionWithItems
protected List<SWI> buildSubscriptionWithItems(@NonNull @NonNull CreateSubscriptionFromOrderRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) BuildsSubscriptionsWithItemsto be created based on the givenOrder.- Parameters:
request- Request containing theOrderwithOrderItemsrepresentingSubscriptionsto createcontextInfo- Additional sandbox and multitenant info- Returns:
- list of subscription creation requests
-
updateAdjustmentQualifierDetailRefs
protected void updateAdjustmentQualifierDetailRefs(List<SWI> subscriptionWithItemsToCreate, @NonNull @NonNull CreateSubscriptionFromOrderRequest originalCreateSubscriptionRequest, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Updates theSubscriptionItemAdjustment.getQualifierDetails()to map to the actual createdSubscriptionItem.getId(). This is necessary because the originalAdjustment.getQualifierDetails()will reference theOrderItem.getId().- Parameters:
subscriptionWithItemsToCreate- the list ofSubscriptionWithItemsbeing createdoriginalCreateSubscriptionRequest- the originalCreateSubscriptionFromOrderRequestcontextInfo- additional sandbox and multitenant info
-
identifySubscriptionRootItems
protected Stream<com.broadleafcommerce.order.client.domain.OrderItem> identifySubscriptionRootItems(@NonNull @NonNull CreateSubscriptionFromOrderRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Identifies the rootOrderItemsfor which to build separateSubscriptions.- Parameters:
request- Request containing theOrderwithOrderItemsrepresentingSubscriptionsto createcontextInfo- Additional sandbox and multitenant info- Returns:
- The root
OrderItemsfor which to build separateSubscriptions.
-
isSeparateFromPrimaryItem
protected boolean isSeparateFromPrimaryItem(@NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem) -
shouldCreateNewSubscription
protected boolean shouldCreateNewSubscription(@NonNull @NonNull CreateSubscriptionFromOrderRequest request, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to determine whether a givenOrderhas any items representing aSubscriptionthat should be created. By default, a subscription is only created for items that need to be billed recurringly. This method checks whetherOrderItem.getRecurringPrice()is not null to determine that for each item. IMPORTANT: By default, this method assumes that if any of the dependentOrderItemsare subscriptions, then their parent (i.e., the root items on theOrder) are also subscriptions.- Parameters:
request- Request containing theOrderwithOrderItemsrepresentingSubscriptionsto createorderItem- the order item that might require a subscription to be createdcontextInfo- Additional sandbox and multitenant info- Returns:
- whether a subscription should be created for the given orderItem
-
orderItemRepresentsActionToExistingSubscription
protected boolean orderItemRepresentsActionToExistingSubscription(@NonNull @NonNull com.broadleafcommerce.order.client.domain.Order order, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem) -
isSubscriptionItem
protected boolean isSubscriptionItem(@NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem) -
buildSubscriptionWithItems
protected SWI buildSubscriptionWithItems(@NonNull @NonNull CreateSubscriptionFromOrderRequest request, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds out aSubscriptionWithItemsfor a given rootOrderItem. The root order item informs both the subscription and its root subscription item.NOTE: This method assumes that the provided
OrderItemis the parent item for any subscriptions with an item hierarchy.- Parameters:
request- Request containing theOrderwithOrderItemsrepresentingSubscriptionsto createrootOrderItem- the order item representing the subscription to be createdcontextInfo- Additional sandbox and multitenant info- Returns:
- A
SubscriptionWithItemsfor the given subscriptionOrderItemand its dependents.
-
getCreatedDate
protected Date getCreatedDate(@NonNull @NonNull com.broadleafcommerce.order.client.domain.Order order) -
buildSubscriptionAdjustments
protected List<SubscriptionAdjustment> buildSubscriptionAdjustments(@NonNull @NonNull CreateSubscriptionFromOrderRequest request, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hookpoint for buildingSubscriptionAdjustmentsfrom anOrder. By default, there are no subscription-level adjustments, only item-level.- Parameters:
request- Request containing theOrderwithOrderItemsrepresentingSubscriptionsto createorderItem- the order item representing the subscription to be createdcontextInfo- Additional sandbox and multitenant info- Returns:
- The list of
SubscriptionAdjustmentsfrom anOrder - See Also:
-
determineNextPeriod
protected Integer determineNextPeriod(@NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem) Determines theSubscription.getNextPeriod()for a subscription.- Parameters:
rootOrderItem- The originating order item- Returns:
- The next period for the subscription.
-
determineItemPaymentStrategy
protected String determineItemPaymentStrategy(@NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem) Determines theSubscriptionCreationRequest.getPaymentStrategy()for a subscription.- Parameters:
rootOrderItem- The originating order item- Returns:
- The payment strategy for the subscription.
-
determineStartingSubscriptionStatus
protected String determineStartingSubscriptionStatus(@NonNull @NonNull CreateSubscriptionFromOrderRequest request, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to determine the starting status of a subscription. Default isSubscriptionStatuses.ACTIVE.- Parameters:
request- Request containing theOrderwithOrderItemsrepresentingSubscriptionsto createrootOrderItem- the order item representing the subscription to be createdcontextInfo- Additional sandbox and multitenant info- Returns:
- the starting subscription status
-
determineFulfillmentWorkflow
protected String determineFulfillmentWorkflow(@NonNull @NonNull CreateSubscriptionFromOrderRequest request, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Identifies the subscription's fulfillment workflow.- Parameters:
request- Request containing theOrderwithOrderItemsrepresentingSubscriptionsto createrootOrderItem- the order item representing the subscription to be createdcontextInfo- Additional sandbox and multitenant info- Returns:
- the subscription's fulfillment workflow
-
buildSubscriptionItems
protected List<SubscriptionItem> buildSubscriptionItems(@NonNull @NonNull Subscription subscription, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds out subscription item creation requests the root order item for the subscription and potential dependent order items. The root order item informs both the subscription and its root subscription item.- Parameters:
subscription- the generated subscriptionrootOrderItem- the root order itemcontextInfo- Additional sandbox and multitenant info- Returns:
- list of subscription item creation requests
-
buildSubscriptionItem
protected SubscriptionItem buildSubscriptionItem(@NonNull @NonNull Subscription subscription, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, @Nullable com.broadleafcommerce.order.client.domain.OrderItem parentItem, @Nullable SubscriptionItem parentSubscriptionItem, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds out a request to create a subscription item. The presence of the parent item guides the logic that differs for dependent items.- Parameters:
subscription- the generated subscriptionorderItem- the order itemparentItem- nullable parentOrderItem. Only present if the orderItem is a dependent order itemparentSubscriptionItem- nullable parentSubscriptionItem. Only present if the item is a dependent subscription itemcontextInfo- Additional sandbox and multitenant info- Returns:
- the built creation request DTO
-
getSubscriptionItemQuantity
protected int getSubscriptionItemQuantity(@NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, @Nullable SubscriptionItem parentSubscriptionItem) Scales the dependent item's quantity based on the parent item.Using the parent
SubscriptionIteminstead of theOrderItemhere, since the parentSubscriptionItem.getQuantity()would have already been scaled in a nested dependent items scenario where as theOrderItem.getQuantity()is not.- Parameters:
orderItem- theOrderItemto scale the quantity forparentSubscriptionItem- the parentSubscriptionItemto scale the quantity with- Returns:
- the item's quantity scaled based its parent item
-
getAddOnChoiceKey
protected Optional<String> getAddOnChoiceKey(com.broadleafcommerce.order.client.domain.OrderItem orderItem) Determines the value to store atSubscriptionItem.getAddOnKey(). By default, this retrieves theDependentItemDetails.getItemChoiceKey()if present on theOrderItem.- Parameters:
orderItem-OrderItemfor aSubscriptionItem.- Returns:
- The value to store at
SubscriptionItem.getAddOnKey().
-
buildDependentSubscriptionItems
protected List<SubscriptionItem> buildDependentSubscriptionItems(@NonNull @NonNull Subscription subscription, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, @NonNull @NonNull SubscriptionItem parentSubscriptionItem, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Builds out creation requests for subscription items from dependent order items- Parameters:
subscription- the generated subscriptionorderItem- the order item to get the dependent items fromparentSubscriptionItem- the parentSubscriptionItemcontextInfo- Additional sandbox and multitenant info- Returns:
- list of built creation requests
-
setParentItemRef
protected void setParentItemRef(@NonNull @NonNull SubscriptionItem item, @Nullable com.broadleafcommerce.order.client.domain.OrderItem parentItem) Set theSubscriptionItem.getParentItemRef()andSubscriptionItem.getParentItemRefType()given theparentItem. By default, this assumes the parent is a Broadleaf product and the ref should be the product's ID.- Parameters:
item- TheSubscriptionItemto set the parent ref onparentItem- TheOrderItemrepresenting theitem'sparent. If null, indicates no parent, and no parent ref fields will be set.
-
buildSubscriptionItemAdjustments
protected List<SubscriptionItemAdjustment> buildSubscriptionItemAdjustments(@NonNull @NonNull Subscription subscription, @NonNull @NonNull SubscriptionItem item, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, @NonNull @NonNull List<com.broadleafcommerce.order.common.domain.Adjustment> itemAdjustments) Builds subscription item adjustments for item adjustments of typeDefaultAdjustmentType.RECURRING_DISCOUNT.- Parameters:
subscription- the generated subscriptionorderItem- the order item receiving the adjustmentitemAdjustments- adjustments for the order item- Returns:
- built subscription item adjustments
-
buildSubscriptionItemAdjustment
protected SubscriptionItemAdjustment buildSubscriptionItemAdjustment(@NonNull @NonNull Subscription subscription, @NonNull @NonNull SubscriptionItem item, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, @NonNull @NonNull com.broadleafcommerce.order.common.domain.Adjustment adjustment) Builds out a subscription item adjustment from an order or order item adjustment- Parameters:
subscription- the generated subscriptionitem- theSubscriptionItemthat this adjustment belongs toorderItem- the order item receiving the adjustmentadjustment- order item adjustment- Returns:
- subscription item adjustment
-
hasTerms
protected boolean hasTerms(@NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem) Checks theOrderItemfor terms. By default, this looks for the presence ofOrderItem.getTermDurationType()andOrderItem.getTermDurationLength().- Parameters:
orderItem- the order item representing the subscription to be created- Returns:
- Whether the
OrderItemhas terms.
-
determineStartOfTermsDate
@Nullable protected Instant determineStartOfTermsDate(@NonNull @NonNull com.broadleafcommerce.order.client.domain.Order order, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Determines the date the terms start for the subscription if there are terms. By default, this truncates theOrder.getSubmitDate()toChronoUnit.DAYSif theOrderItemhas terms.- Parameters:
order- the order with subscriptions to createrootOrderItem- the order item representing the subscription to be createdcontextInfo- additional sandbox and multitenant info- Returns:
- The date the terms start for the subscription if there are terms
-
determineEndOfTermsDate
@Nullable protected Instant determineEndOfTermsDate(@NonNull @NonNull com.broadleafcommerce.order.client.domain.Order order, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, @Nullable Instant startOfTermsDate, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Determines the end of terms date for a subscription based on the order and order item.Note that the
ZonedDateTimeis used to perform the calculation, since certain term duration types (e.g. months, years) are not supported byInstant.plus(long, TemporalUnit).- Parameters:
order- the order with subscriptions to createrootOrderItem- the order item representing the subscription to be createdstartOfTermsDate- The date the term starts if there are terms.contextInfo- additional sandbox and multitenant info- Returns:
- the end of terms date,
nullif not applicable
-
populateTermDetails
protected void populateTermDetails(@NonNull @NonNull Subscription subscription, @NonNull @NonNull com.broadleafcommerce.order.client.domain.Order order, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point for populating term-based data on theSubscriptionfrom therootOrderItem.- Parameters:
subscription- theSubscriptionto set the free trial details fororder- the order that led to the creation of the subscriptionrootOrderItem- the order item representing the subscription to be createdcontextInfo- additional sandbox and multitenant info
-
populateFreeTrialDetails
protected void populateFreeTrialDetails(@NonNull @NonNull Subscription subscription, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, @NonNull @NonNull CreateSubscriptionFromOrderRequest createRequest, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Sets the details for when afree trial offeris applied, such as andSubscription.getFreeTrialEndDate().The
Subscription.getNextBillDate()will be calculated and adjusted based on the delay in BillingService upon creation.- Parameters:
subscription- theSubscriptionto set the free trial details forrootOrderItem- the order item representing the subscription to be createdcreateRequest- the originalCreateSubscriptionFromOrderRequestthat may contain additional informationcontextInfo- additional sandbox and multitenant info
-
populateAdditionalSubscriptionItemDetails
protected SubscriptionItem populateAdditionalSubscriptionItemDetails(@NonNull @NonNull Subscription subscription, @NonNull @NonNull SubscriptionItem subscriptionItem, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem orderItem, @Nullable com.broadleafcommerce.order.client.domain.OrderItem parentOrderItem, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to easily populate additional details on theSubscriptionItem.- Parameters:
subscription- the generated subscriptionsubscriptionItem- TheSubscriptionItemthat has been populated so farorderItem- the order item representing the subscription to be createdparentOrderItem- the possibly null parent order itemcontextInfo- Additional sandbox and multitenant info- Returns:
- the
SubscriptionItemthat has been further populated
-
populateSubscriptionRoundBillDateAttribute
protected Subscription populateSubscriptionRoundBillDateAttribute(@NonNull @NonNull Subscription subscription, @NonNull @NonNull CreateSubscriptionFromOrderRequest request, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Populates theSubscriptionAttributeConstants.Internal.ROUND_UP_BILL_DATES_TO_END_OF_MONTHif the order submission day is not available every month, e.g. 29, 30, 31.- Parameters:
subscription- TheSubscriptionthat has been populated so farrequest- Request containing theOrderwithOrderItemsrepresentingSubscriptionsto createcontextInfo- Additional sandbox and multitenant info- Returns:
- the
Subscriptionwith the populated attribute
-
populateAdditionalSubscriptionDetails
protected Subscription populateAdditionalSubscriptionDetails(@NonNull @NonNull Subscription subscription, @NonNull @NonNull CreateSubscriptionFromOrderRequest request, @NonNull @NonNull com.broadleafcommerce.order.client.domain.OrderItem rootOrderItem, @Nullable com.broadleafcommerce.data.tracking.core.context.ContextInfo contextInfo) Hook point to easily populate additional details on theSubscription.- Parameters:
subscription- TheSubscriptionthat has been populated so farrequest- Request containing theOrderwithOrderItemsrepresentingSubscriptionsto createrootOrderItem- the order item representing the subscription to be createdcontextInfo- Additional sandbox and multitenant info- Returns:
- the
Subscriptionthat has been further populated
-
getSubscriptionProvider
-
getSubscriptionOperationUtils
-
getMessageSource
protected org.springframework.context.MessageSource getMessageSource() -
getTypeFactory
protected com.broadleafcommerce.common.extension.TypeFactory getTypeFactory()
-