Example #1
0
        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);
        }
Example #2
0
        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);
        }