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); }
public SpecialInfoModel GetSpecial(string sku) { var returnInfo = new SpecialInfoModel(); if (ValidateSkuRequest(sku)) { returnInfo = SpecialList.Where(special => special.Sku.Equals(sku)).FirstOrDefault(); } return(returnInfo); }
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); }