Ejemplo n.º 1
0
        public CheckoutState Apply(CheckoutState checkoutState)
        {
            if (checkoutState.DiscountableItemsTotal == 0)
            {
                return(ToNotAppliedState(checkoutState));
            }

            var discountToApply = Math.Min(checkoutState.DiscountableItemsTotal, _value);
            var newBasketTotal  = checkoutState.CurrentTotal - discountToApply;

            return(checkoutState.ToNewState(newBasketTotal, DiscountResult.CreateApplied(_id)));
        }
Ejemplo n.º 2
0
        public CheckoutState Apply(CheckoutState checkoutState)
        {
            var applicableItems = GetApplicableItems(checkoutState).ToArray();

            if (!applicableItems.Any())
            {
                return(ToNotAppliedCheckoutState(checkoutState, GetNoApplicableProductsMessage()));
            }

            var leftToSpend = AmountRequiredToPassThreshold(checkoutState.DiscountableItemsTotal);

            if (leftToSpend > 0)
            {
                return(ToNotAppliedCheckoutState(checkoutState, GetThresholdNotReachedMessage(leftToSpend)));
            }

            var currentSpendOnApplicableItems = CurrentSpendOnApplicableItems(applicableItems);
            var discountToApply = CalculateDiscountToApply(currentSpendOnApplicableItems);
            var newStateTotal   = checkoutState.CurrentTotal - discountToApply;

            return(checkoutState.ToNewState(newStateTotal, DiscountResult.CreateApplied(_id)));
        }
Ejemplo n.º 3
0
        private CheckoutState ToNotAppliedState(CheckoutState checkoutState)
        {
            var notAppliedResult = DiscountResult.CreateNotApplied(_id, GetNotAppliedMessage());

            return(checkoutState.ToNewState(checkoutState.CurrentTotal, notAppliedResult));
        }
Ejemplo n.º 4
0
        private CheckoutState ToNotAppliedCheckoutState(CheckoutState checkoutState, string message)
        {
            var notAppliedResult = DiscountResult.CreateNotApplied(_id, message);

            return(checkoutState.ToNewState(checkoutState.CurrentTotal, notAppliedResult));
        }