示例#1
0
        protected double ProcessForEachSpecial(double price, string sku, SpecialInfoModel skuSpecial)
        {
            var scannedItems          = GetScannedItems(sku).Count();
            var scannedItemsFullPrice = GetScannedItems(sku).Where(item => item.ScannedPrice.Equals(price)).Count();

            if (scannedItems > 0 && (skuSpecial.LimitQuantity == 0 || scannedItems <= skuSpecial.LimitQuantity))
            {
                if (skuSpecial.IsPercentOff)
                {
                    if (scannedItemsFullPrice % skuSpecial.TriggerQuantity == 0 &&
                        (scannedItemsFullPrice / skuSpecial.TriggerQuantity) != (scannedItems - scannedItemsFullPrice))
                    {
                        var discount = price * skuSpecial.PercentAmount;

                        return(price - discount);
                    }
                }
                else
                {
                    if (scannedItems % skuSpecial.TriggerQuantity == 0)
                    {
                        var fullPricePaid = skuSpecial.TriggerQuantity * price;

                        return(skuSpecial.Amount - fullPricePaid);
                    }
                }
            }

            return(price);
        }
示例#2
0
        public SpecialInfoModel GetSpecial(string sku)
        {
            var returnInfo = new SpecialInfoModel();

            if (ValidateSkuRequest(sku))
            {
                returnInfo = SpecialList.Where(special => special.Sku.Equals(sku)).FirstOrDefault();
            }

            return(returnInfo);
        }
示例#3
0
        protected double ProcessEqualOrLesserSpecial(double currentValue, double qty, string sku, SpecialInfoModel special)
        {
            var lastScanned = GetScannedItems(sku).LastOrDefault();

            if (lastScanned is null)
            {
                return(currentValue);
            }

            if (qty < special.TriggerQuantity && lastScanned.ScannedQuantity < special.TriggerQuantity)
            {
                return(currentValue);
            }

            if (special.IsPercentOff)
            {
                if (currentValue <= lastScanned.ScannedPrice)
                {
                    return(currentValue - (currentValue * special.PercentAmount));
                }
                else if (currentValue > lastScanned.ScannedPrice)
                {
                    return(currentValue - (lastScanned.ScannedPrice * special.PercentAmount));
                }
            }

            return(currentValue - special.Amount);
        }