public void Print(ICartState cart) { var culture = CultureInfo.GetCultureInfo("en-us"); Console.WriteLine(); Console.WriteLine(new string('-', 100)); foreach (var product in cart.Products) { var itemPrice = product.Key.Price; if (cart.ProductDiscounts.ContainsKey(product.Key)) { var discount = cart.ProductDiscounts[product.Key]; itemPrice = discount.Make(); } var totalPrice = (itemPrice * product.Value).ToString("C", culture); var itemPriceStr = product.Key.Price.ToString("C", culture); Console.WriteLine($"{product.Key}\n\tCount: {product.Value}\t Price: {itemPriceStr} \t Total: {totalPrice}"); } Console.WriteLine(new string('-', 25)); Console.WriteLine($"Total: {cart.Total.ToString("C", culture)}"); Console.WriteLine(new string('-', 100)); Console.WriteLine(); }
public ICartState TransitionAddProduct(ICartState currentState, Product product) { return currentState.Transition( cartStateEmpty => cartStateEmpty.Add(product), cartStateActive => cartStateActive.Add(product), cartStatePaid => cartStatePaid); }
public void Execute() { _state = _cart.CurrentState.Clone(); var discount = new ProductDiscount(_product, _percentValue); _cart.AddDiscount(discount, _product); }
public ICartState TransitionAddProduct(ICartState currentState, Product product) { var cartStateEmpty = currentState as CartStateEmpty; //CAST! if (cartStateEmpty != null) { return cartStateEmpty.Add(Product.ProductY); } var cartStateActive = currentState as CartStateActive; //CAST! if (cartStateActive != null) { return cartStateActive.Add(Product.ProductY); } return currentState; }
public void Execute() { _state = _cart.CurrentState.Clone(); _cart.AddProduct(_product, _count); }
public void Execute() { _state = _cart.CurrentState.Clone(); _cart.AddDiscount(new CartDiscount(_discountPercent)); }
public ICartState PayForCart(ICartState currentState, decimal amountToPay) { var visitor = new PayForCartVisitor() { amountToPay = amountToPay }; return currentState.Accept(visitor); }
public ICartState AddProduct(ICartState currentState, Product product) { var visitor = new AddProductVisitor() { productToAdd = product }; return currentState.Accept(visitor); }
public ICartState AddProduct(ICartState currentState, Product product) { var cartStateEmpty = currentState as CartStateEmpty; //CAST! if (cartStateEmpty != null) { return cartStateEmpty.AddItem(Product.ProductY); } var cartStateActive = currentState as CartStateActive; //CAST! if (cartStateActive != null) { return cartStateActive.AddItem(Product.ProductY); } // paid state -- do nothing return currentState; }
public Cart(ICartState cartState) { CurrentState = cartState; }
public void Print(ICartState cart) { CartState = cart; }