diff Demo/Asp.Net/BusinessLogic/Cart.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Demo/Asp.Net/BusinessLogic/Cart.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,145 @@
+using System;
+using System.Collections.Generic;
+
+namespace PetShop.BusinessLogic
+{
+	using ObjectModel;
+
+	[Serializable]
+	public class Cart
+	{
+		/// <summary>
+		/// Calculate the total for all the cartItems in the Cart
+		/// </summary>
+		public decimal Total
+		{
+			get
+			{
+				decimal total = 0;
+
+				foreach (CartItem item in _items.Values)
+					total += item.Subtotal;
+
+				return total;
+			}
+		}
+
+		/// <summary>
+		/// Update the quantity for item that exists in the cart
+		/// </summary>
+		/// <param name="itemId">Item Id</param>
+		/// <param name="qty">Quantity</param>
+		public void SetQuantity(string itemId, int qty)
+		{
+			_items[itemId].Quantity = qty;
+		}
+
+		/// <summary>
+		/// Return the number of unique items in cart
+		/// </summary>
+		public int Count
+		{
+			get { return _items.Count; }
+		}
+
+		/// <summary>
+		/// Add an item to the cart.
+		/// When ItemId to be added has already existed, this method will update the quantity instead.
+		/// </summary>
+		/// <param name="itemId">Item Id of item to add</param>
+		public void Add(string itemId)
+		{
+			CartItem cartItem;
+
+			if (!_items.TryGetValue(itemId, out cartItem))
+			{
+				Item item = new ProductManager().GetItem(itemId);
+
+				if (item != null)
+				{
+					cartItem = new CartItem();
+
+					cartItem.ItemID     = itemId;
+					cartItem.Name       = item.ProductName;
+					cartItem.Price      = (decimal)item.Price;
+					cartItem.Type       = item.Name;
+					cartItem.CategoryID = item.CategoryID;
+					cartItem.ProductID  = item.ProductID;
+
+					_items.Add(itemId, cartItem);
+				}
+			}
+
+			cartItem.Quantity++;
+		}
+
+		/// <summary>
+		/// Add an item to the cart.
+		/// When ItemId to be added has already existed, this method will update the quantity instead.
+		/// </summary>
+		/// <param name="item">Item to add</param>
+		public void Add(CartItem item)
+		{
+			CartItem cartItem;
+
+			if (!_items.TryGetValue(item.ItemID, out cartItem))
+				_items.Add(item.ItemID, item);
+			else
+				cartItem.Quantity += item.Quantity;
+		}
+
+		/// <summary>
+		/// Remove item from the cart based on <paramref name="itemId"/>
+		/// </summary>
+		/// <param name="itemId">ItemId of item to remove</param>
+		public void Remove(string itemId)
+		{
+			_items.Remove(itemId);
+		}
+
+		// Internal storage for a cart	  
+		private Dictionary<string, CartItem> _items = new Dictionary<string, CartItem>();
+
+		/// <summary>
+		/// Returns all items in the cart. Useful for looping through the cart.
+		/// </summary>
+		/// <returns>Collection of CartItemInfo</returns>
+		public ICollection<CartItem> Items
+		{
+			get { return _items.Values; }
+		}
+
+		/// <summary>
+		/// Method to convert all cart items to order line items
+		/// </summary>
+		/// <returns>A new array of order line items</returns>
+		public OrderLineItem[] GetOrderLineItems()
+		{
+			OrderLineItem[] items = new OrderLineItem[_items.Count];
+
+			int lineNum = 0;
+
+			foreach (CartItem item in _items.Values)
+			{
+				OrderLineItem line = new OrderLineItem();
+
+				items[lineNum] = line;
+
+				line.ItemID   = item.ItemID;
+				line.Line     = ++lineNum;
+				line.Quantity = item.Quantity;
+				line.Price    = item.Price;
+			}
+
+			return items;
+		}
+
+		/// <summary>
+		/// Clear the cart
+		/// </summary>
+		public void Clear()
+		{
+			_items.Clear();
+		}
+	}
+}