java.lang.Object
com.broadleafcommerce.promotion.offer.service.engine.proration.MoneyRoundingHelper

public class MoneyRoundingHelper extends Object
Helper class to calculate rounding of monetary unit amounts from offer adjustments.
Author:
Marie Standeven (marieStandeven), Sunny Yu
  • Constructor Details

    • MoneyRoundingHelper

      public MoneyRoundingHelper()
  • Method Details

    • roundProratedAdjustments

      public <D extends EnhancedProratedOfferAdjustment> void roundProratedAdjustments(Collection<D> proratedOfferAdjustments, javax.money.MonetaryAmount adjustmentsTotal, javax.money.CurrencyUnit currency)
      Parameters:
      proratedOfferAdjustments - the EnhancedProratedOfferAdjustments to round
      adjustmentsTotal - the total adjustment amount
      currency - the currency of the amounts to round
    • roundProratedFulfillmentGroupAdjustments

      public <D extends EnhancedProratedOfferAdjustment> void roundProratedFulfillmentGroupAdjustments(EnhancedFulfillmentGroup group, Collection<D> proratedOfferAdjustments, javax.money.MonetaryAmount adjustmentsTotal, javax.money.CurrencyUnit currency)
      Parameters:
      group - the EnhancedFulfillmentGroup to round the EnhancedFulfillmentGroup.getProratedFulfillmentAdjustments() for
      proratedOfferAdjustments - the EnhancedProratedOfferAdjustments to round
      adjustmentsTotal - the total adjustment amount
      currency - the currency of the amounts to round
    • roundListOfMonetaryAmounts

      public Map<String,javax.money.MonetaryAmount> roundListOfMonetaryAmounts(Map<String,javax.money.MonetaryAmount> amounts, javax.money.MonetaryAmount totalAmount, javax.money.CurrencyUnit currency)
      Given a list of amounts that should round to the provided total, calculates and performs the rounding logic to add the remainder unit amounts.
      Parameters:
      amounts - list of amounts to round, mapped to a key for lookup on return
      totalAmount - the total adjustment amount
    • updateProratedAdjustmentsWithRoundedAdjustments

      protected <D extends EnhancedProratedOfferAdjustment> void updateProratedAdjustmentsWithRoundedAdjustments(Collection<D> proratedAdjustments, Map<String,javax.money.MonetaryAmount> proratedAdjustmentAmounts, javax.money.CurrencyUnit currency)
      Sets the new rounded adjustment values on the given EnhancedProratedOfferAdjustments
      Parameters:
      proratedAdjustments - the EnhancedProratedOfferAdjustments to update
      proratedAdjustmentAmounts - a map of rounded adjustment amounts by item line numbers
      currency - the currency of the amounts to round
    • roundListOfMonetaryAmounts

      protected Map<String,javax.money.MonetaryAmount> roundListOfMonetaryAmounts(Map<String,javax.money.MonetaryAmount> amounts, javax.money.MonetaryAmount totalAmount, javax.money.MonetaryAmount unitAmount)
      Given a list of amounts that should round to the provided total, calculates and performs the rounding logic to add the remainder unit amounts.

      If OfferServiceProperties.isDistributeRoundedRemainders() is true, the rounded remainders are distributed across all the amounts. For example, rounding 7 of $0.71428 with the total of $5 would result in 4 of $0.71 and 3 of $0.72. If set to false, the remainders would be added to one single amount, resulting 6 of $0.71 and 1 of $0.74.

      Parameters:
      amounts - list of amounts to round, mapped to a key for lookup on return
      totalAmount - the total adjustment amount
      unitAmount - the smallest unit amount of money for the currency
    • getUnitAmount

      protected javax.money.MonetaryAmount getUnitAmount(javax.money.CurrencyUnit currency)
      Determines the smallest unit amount of money for the CurrencyUnit.

      For example, a currency with 2 fraction digits (like USD) will provide the amount "0.01".

      Parameters:
      currency - the currency to get the smallest unit amount for
      Returns:
      the smallest unit amount of money for the currency
    • getOfferServiceProperties

      protected OfferServiceProperties getOfferServiceProperties()
    • setOfferServiceProperties

      @Autowired public void setOfferServiceProperties(OfferServiceProperties offerServiceProperties)