public decimal GetPrice(CheckoutItem checkoutItem) { var specialOffer = this.specialOfferRepository.GetBySku(checkoutItem.Sku); if (specialOffer == null || specialOffer.Quantity > checkoutItem.Quantity) { return(checkoutItem.Price * checkoutItem.Quantity); } else { int offerQuantity = checkoutItem.Quantity / specialOffer.Quantity; int remainder = checkoutItem.Quantity % specialOffer.Quantity; return((specialOffer.OfferPrice * offerQuantity) + (remainder * checkoutItem.Price)); } }
/// <summary> /// Scan an item into the Checkout /// </summary> /// <param name="item"></param> public void Scan(Item item) { //validation if (item == null) { throw new ArgumentNullException(nameof(item)); } //lookup the item in the list CheckoutItem checkoutItem = this.checkoutItems.FirstOrDefault(p => p.Sku == item.Sku); if (checkoutItem == null) { //no item with sku was found so create one and add to list (without quantity initially) checkoutItem = new CheckoutItem { Sku = item.Sku, Price = item.ItemPrice }; this.checkoutItems.Add(checkoutItem); } //increment quantity checkoutItem.Quantity++; }