public int AddOrder(Dictionary <string, object> items, string user) { int orderId = -1; decimal total = 0M; using (_db) { using (var _trans = _db.Database.BeginTransaction()) { try { Order order = new Order(); Product pItem = new Product(); order.UserId = user; order.OrderDate = System.DateTime.Now; foreach (var key in items.Keys) { ProductViewModel item = JsonConvert.DeserializeObject <ProductViewModel>(Convert.ToString(items[key])); total += item.Qty * item.MSRP; } total *= 1.13M; order.OrderAmount = total; _db.Order.Add(order); _db.SaveChanges(); foreach (var key in items.Keys) { ProductViewModel item = JsonConvert.DeserializeObject <ProductViewModel>(Convert.ToString(items[key])); if (item.Qty > 0) { OrderLineItem line = new OrderLineItem(); line.Product = _db.Product.FirstOrDefault(p => p.Id == item.Id); line.OrderId = order.Id; if (line.Product.QtyOnHand > item.Qty) { line.Product.Id = item.Id; line.Product.QtyOnHand -= item.Qty; line.QtySold += item.Qty; line.QtyOrdered = item.Qty; line.SellingPrice = item.MSRP; _db.OrderLineItem.Add(line); _db.SaveChanges(); } if (line.Product.QtyOnHand < item.Qty) { line.QtyBackOrdered = (item.Qty - item.QtyOnHand); line.Product.QtyOnBackOrder += (item.Qty - line.Product.QtyOnHand); line.QtySold = item.QtyOnHand; line.SellingPrice = item.MSRP; line.Product.QtyOnHand = 0; line.QtyOrdered = item.Qty; _db.OrderLineItem.Add(line); _db.SaveChanges(); } } } _trans.Commit(); orderId = order.Id; } catch (Exception ex) { Console.WriteLine(ex.Message); _trans.Rollback(); } } } return(orderId); }
public int AddOrder(Dictionary <string, object> items, ApplicationUser user) { int orderId = -1; using (_db) { // we need a transaction as multiple entities involved using (var _trans = _db.Database.BeginTransaction()) { try { Order order = new Order(); order.UserId = user.Id; order.OrderDate = System.DateTime.Now; order.OrderAmount = 0; // calculate the totals and then add the order row to the table foreach (var key in items.Keys) { ProductViewModel item = JsonConvert.DeserializeObject <ProductViewModel>(Convert.ToString(items[key])); if (item.Qty > 0) { order.OrderAmount += (decimal)(item.Qty * item.MSRP); } } _db.Orders.Add(order); _db.SaveChanges(); // then add each item to the orderlineItem table foreach (var key in items.Keys) { ProductViewModel item = JsonConvert.DeserializeObject <ProductViewModel>(Convert.ToString(items[key])); if (item.Qty > 0) { OrderLineItem oItem = new OrderLineItem(); Product pr = (from p in _db.Products where p.Id == item.Id select p).FirstOrDefault(); oItem.OrderId = order.Id; if (item.Qty < item.QTYOnHand) { item.QTYOnHand -= item.Qty; pr.QtyOnHand = item.QTYOnHand; oItem.QtyOrdered = item.Qty; oItem.QtyBackOrdered = 0; oItem.QtySold = item.Qty; } else { oItem.QtySold = item.QTYOnHand; item.QTYOnBackOrder += (item.Qty - item.QTYOnHand); item.QTYOnHand = 0; pr.QtyOnHand = 0; pr.QtyOnBackOrder = item.QTYOnBackOrder; oItem.QtyOrdered = item.Qty; oItem.QtyBackOrdered = oItem.QtyOrdered - oItem.QtySold;//oItem.QtyOrdered - oItem.QtySold msgBackOrder = "Some goods were backordered!"; } oItem.SellingPrice = (decimal)item.MSRP; oItem.ProductId = item.Id; _db.OrderLineItems.Add(oItem); _db.Products.Update(pr); _db.SaveChanges(); } } _trans.Commit(); orderId = order.Id; } catch (Exception ex) { orderId = -1; Console.WriteLine(ex.Message); _trans.Rollback(); } } } return(orderId); }