public ActionResult AddLine(int orderId, int proId, int count)
        {
            ResultWeb result  = new ResultWeb();
            Product   product = db.Products.Find(proId);

            if (product == null)
            {
                result.Type = ResultWeb.ResultType.FIELD_INVALID;
                return(Json(result, JsonRequestBehavior.AllowGet));
            }

            var details = db.OrderDetails.Where(od => od.OrderId == orderId);

            OrderDetail line = details.Where(od => od.ProductId == proId).FirstOrDefault();

            if (line == null)
            {
                line = new OrderDetail
                {
                    OrderId   = orderId,
                    ProductId = proId
                };

                if (count > product.InStock)
                {
                    line.Quantity = product.InStock;
                    result.Type   = ResultWeb.ResultType.OUT_OF_STOCK;
                }
                else
                {
                    line.Quantity = count;
                    result.Type   = ResultWeb.ResultType.OK_ADD;
                }
                line.TotalAmount = product.Price * line.Quantity;

                db.OrderDetails.Add(line);
                db.SaveChanges();
            }
            else
            {
                line.Quantity += count;
                if (line.Quantity > product.InStock)
                {
                    line.Quantity = product.InStock;
                    result.Type   = ResultWeb.ResultType.OUT_OF_STOCK;
                }
                else
                {
                    result.Type = ResultWeb.ResultType.OK_ADD;
                }

                line.TotalAmount     = product.Price * line.Quantity;
                db.Entry(line).State = EntityState.Modified;
                db.SaveChanges();
            }

            RecalculateOrderCost(orderId);

            return(Json(result, JsonRequestBehavior.AllowGet));
        }
Пример #2
0
 public virtual void Update(TEntity entityToUpdate)
 {
     _ctx.Set <TEntity>().Attach(entityToUpdate);
     _ctx.Entry(entityToUpdate).State = EntityState.Modified;
 }
Пример #3
0
        public ActionResult ViewOrder(int?Id, OrderStatus?stateCurrent)
        {
            if (Id == null || stateCurrent == null)
            {
                return(RedirectToAction("Error", "Staff"
                                        , new
                {
                    errorCode = "Lỗi 400."
                    ,
                    errorDetail = "Yêu cầu của bạn không hợp lệ"
                }));
            }

            Models.Order order = db.Orders.Find(Id);
            if (order == null)
            {
                return(RedirectToAction("Error", "Staff"
                                        , new
                {
                    errorCode = "Lỗi 404."
                    ,
                    errorDetail = "Không tìm thấy đơn hàng với id: " + Id.ToString()
                }));
            }

            if (stateCurrent == OrderStatus.New || stateCurrent == OrderStatus.Canceled)
            {
                return(RedirectToAction("Error", "Staff"
                                        , new
                {
                    errorCode = "Lỗi 403."
                    ,
                    errorDetail = "Bạn không được phép làm điều này"
                }));
            }



            switch (order.Status)
            {
            case OrderStatus.Packing:
            {
                order.Status          = OrderStatus.Delivering;
                db.Entry(order).State = EntityState.Modified;
                db.SaveChanges();
            }
            break;

            case OrderStatus.Delivering:
            {
                order.DeliveryDate    = DateTime.Today;
                order.Status          = OrderStatus.Completed;
                db.Entry(order).State = EntityState.Modified;
                db.SaveChanges();
            }
            break;

            case OrderStatus.Pending:
            {
                SubProduct(order);
                order.Status          = OrderStatus.Packing;
                db.Entry(order).State = EntityState.Modified;
                db.SaveChanges();
            }
            break;
            }

            order = db.Orders.Where(o => o.Status == stateCurrent).FirstOrDefault();
            if (order == null)
            {
                return(RedirectToAction("ListOrder", "Staff"));
            }

            Models.User user = db.Users.Where(u => u.Username == User.Identity.Name).FirstOrDefault();
            ViewBag.User = user;

            if (User.IsInRole("Admin"))
            {
                ViewBag.IsAdmin = true;
            }
            else
            {
                ViewBag.IsAdmin = false;
            }

            return(View(order));
        }