public bool RemoveItemDB(string id, string username) { int ProductID = Convert.ToInt32(id); emptyCart = false; try { //get user's cart with status not checkout var userOrderID = db.Orders .Where(o => o.CustomerID.Equals(username) && o.OrderStatus == (int)Enumeration.OrderStatus.InCart) .Select(o => o.OrderID) .FirstOrDefault(); //===================================================================== if (userOrderID == 0) //currently dont have any cart => can not remove { return(false); } //===================================================================== else //have cart => check if item have in cart { var quantity = db.OrderDetails .Where(d => d.OrderID == userOrderID && d.WatchID == ProductID) .Select(d => d.Quantity).FirstOrDefault(); //======================== if (quantity == 0) //item not existed in order || item auto become 0 => { OrderDetail detail = db.OrderDetails.Find(ProductID, userOrderID); db.OrderDetails.Attach(detail); db.OrderDetails.Remove(detail); int resultDetail = db.SaveChanges(); if (resultDetail > 0) { //check if cart is empty => to refresh page var itemInCart = db.OrderDetails .Where(d => d.OrderID == userOrderID) .Select(d => d.WatchID) .ToList(); if (itemInCart.Count != 0) { return(true); //still have item in cart in OrderDetail DB } var curEmptyOrder = db.Orders.Find(userOrderID); db.Orders.Attach(curEmptyOrder); db.Orders.Remove(curEmptyOrder); db.SaveChanges(); emptyCart = true; return(true); //success + empty cart! } else { return(false); //SaveChange fail } } else //======================== have item in cart => remove item { OrderDetail detail = db.OrderDetails.Find(ProductID, userOrderID); db.OrderDetails.Attach(detail); db.OrderDetails.Remove(detail); int resultDetail = db.SaveChanges(); if (resultDetail > 0) { //check if cart is empty => to refresh page var itemInCart = db.OrderDetails .Where(d => d.OrderID == userOrderID) .Select(d => d.WatchID) .ToList(); if (itemInCart.Count != 0) { return(true); //still have item in cart in OrderDetail DB } var curEmptyOrder = db.Orders.Find(userOrderID); db.Orders.Attach(curEmptyOrder); db.Orders.Remove(curEmptyOrder); db.SaveChanges(); emptyCart = true; return(true); //success + empty cart! } else { return(false); //SaveChange fail } } } } catch (Exception) { return(false); } }
public bool AddToCartDB(string id, string username) { int ProductID = Convert.ToInt32(id); var product = db.Watches .Where(w => w.WatchID == ProductID) .Select(p => new ShoppingProduct { ProductID = ProductID, ProductCode = p.WatchCode, ProductPrice = p.Price, ProductPhoto = p.Thumbnail, ProductDiscount = p.Discount }).FirstOrDefault(); try { //get user's cart with status not checkout var userOrderID = db.Orders .Where(o => o.CustomerID.Equals(username) && o.OrderStatus == (int)Enumeration.OrderStatus.InCart) .Select(o => o.OrderID) .FirstOrDefault(); //===================================================================== if (userOrderID == 0) //currently dont have any cart { //create new cart in DB Order currentOrder = new Order(); currentOrder.CustomerID = username; currentOrder.OrderStatus = (int)Enumeration.OrderStatus.InCart; db.Orders.Add(currentOrder); int result = db.SaveChanges(); if (result == 0) { failByQuantity = false; return(false); //insert fail } //get orderID var orderID = (int)db.Orders .Where(o => o.CustomerID.Equals(username) && o.OrderStatus == (int)Enumeration.OrderStatus.InCart) .Select(o => o.OrderID) .First(); //check quantity of product in DB bool checkQuantity = this.CheckAvailableAndQuantityInDB(ProductID, 1); //add new 1 item if (!checkQuantity) { failByQuantity = true; return(false); } //add new item to cart OrderDetail detail = new OrderDetail(); detail.OrderID = orderID; detail.WatchID = ProductID; detail.Quantity = 1; db.OrderDetails.Add(detail); int resultDetail = db.SaveChanges(); if (resultDetail > 0) { return(true); //success } else { failByQuantity = false; return(false); } } //===================================================================== else //have cart => check if item have in cart { var quantity = db.OrderDetails .Where(d => d.OrderID == userOrderID && d.WatchID == ProductID) .Select(d => d.Quantity).FirstOrDefault(); //======================== if (quantity == 0) //item not existed in order => add new item to cart, quantity = 1 { //check quantity of product in DB bool checkQuantity = this.CheckAvailableAndQuantityInDB(ProductID, 1); if (!checkQuantity) { failByQuantity = true; return(false); //add fail } //valid quantity => add new item to order detail OrderDetail detail = new OrderDetail(); detail.OrderID = userOrderID; detail.WatchID = ProductID; detail.Quantity = 1; db.OrderDetails.Add(detail); int resultDetail = db.SaveChanges(); if (resultDetail > 0) { return(true); //success } else { failByQuantity = false; return(false); //fail } } else //======================== have item in cart => update quantity { //check quantity of product in DB bool checkQuantity = this.CheckAvailableAndQuantityInDB(ProductID, quantity + 1); if (!checkQuantity) { failByQuantity = true; return(false); //add fail } OrderDetail detail = db.OrderDetails.Find(ProductID, userOrderID); db.OrderDetails.Attach(detail); detail.Quantity = quantity + 1; int resultDetail = db.SaveChanges(); if (resultDetail > 0) { return(true); //success } else { failByQuantity = false; return(false); //fail } } } } catch (Exception) { failByQuantity = false; return(false); } }