protected CartItem AddToCart(ProductDetails product, double quantity, double?price = null) { var cartItems = HttpContext.GetCartItems(); var res = cartItems.ToLookup(ci => ci.ProductDetails, ci => ci, ProductDetails.PhysicalComparer)[product].ToList(); if (res.Count > 0) { var item = res[0]; item.Quantity += quantity; DbSession.SaveOrUpdate(item); return(item); } else { var item = new CartItem(); item.AppId = WebGlobal.AppId; item.SessionID = WebGlobal.GetSessionCookie(System.Web.HttpContext.Current); item.Name = product.Name; item.Price = price ?? product.SellingPrice ?? 0D; item.ProductDetails = product; item.Quantity = quantity; DbSession.SaveOrUpdate(item); HttpContext.ResetCartCount(); return(item); } }
public static IList <CartItem> GetCartItems(this HttpContext context) { var cusid = context.GetCustomerId() ?? Guid.Empty; var si = WebGlobal.GetSessionCookie(context); return(context.GetDbSession() .CreateQuery(@"select distinct ci from CartItem as ci left join fetch ci.ProductDetails where ci.AppId = :appid and (ci.Customer.ID = :cusid or ci.SessionID = :si) order by ci.DateCreated") .SetParameter("appid", WebGlobal.AppId) .SetParameter("si", si) .SetParameter("cusid", cusid) .SetCacheable(true) .SetCacheMode(CacheMode.Normal) .List <CartItem>()); }