/// <summary>
        /// Отмена заказа
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult Cancel(int id)
        {
            try
            {
                var order = Context.Orders
                            .Include(x => x.OrderNoms)
                            .Include(x => x.OrderNoms.Select(y => y.Nomenclature))
                            .Single(x => x.Id == id);

                foreach (var orderNom in order.OrderNoms)
                {
                    var nomenclature = Context.Nomenclatures.Single(n => n.Id == orderNom.Nomenclature.Id);
                    nomenclature.Count += orderNom.CountInOrder;

                    Context.SaveChanges();
                }

                order.Status = "Отменен";
                var user = Context.Users.Single(x => x.Login.Equals(User.Identity.Name));

                if (SmartCancel(order))
                {
                    BlockChainManager.GenerateNextBlock(bM.Encrypt(JsonConvert.SerializeObject(order)), user.Id);
                }

                Context.SaveChanges();

                return(RedirectToAction("Index"));
            }
            catch
            {
                return(View());
            }
        }
        public string Post(string token)
        {
            Context     db = new Context();
            BaseMethods bM = new BaseMethods();

            var user = db.Users.FirstOrDefault(x => x.Token.Equals(token));//ищем пользователя

            if (user != null)
            {
                //ищем курьера и назначенный ему заказ
                var courier = db.Сouriers.FirstOrDefault(x => x.User.Id == user.Id);

                var order = db.Orders.FirstOrDefault(x => x.Id == courier.OrderId);
                order.Status = "Получен курьером";
                //добавляем запись в блокчейн
                BlockChainManager.GenerateNextBlock(bM.Encrypt(JsonConvert.SerializeObject(order)), user.Id);
                db.SaveChanges();

                return("Успешно");
            }
            else
            {
                return(null);
            }
        }
Esempio n. 3
0
        public ActionResult ChangeStatus(int id)
        {
            try
            {
                Context = new Context();
                var order = Context.Orders.Single(x => x.Id == id);

                if (order.Status.Equals("Принят"))
                {
                    order.Status = "Комплектация начата";
                }
                else
                {
                    order.Status = "Комплектация завершена";
                }

                var user = Context.Users.Single(x => x.Login.Equals(User.Identity.Name));

                if (SmartStatus(order))
                {
                    BlockChainManager.GenerateNextBlock(bM.Encrypt(JsonConvert.SerializeObject(order)), user.Id);
                }
                Context.SaveChanges();

                return(RedirectToAction("Index"));
            }
            catch
            {
                return(RedirectToAction("Index"));
            }
        }
Esempio n. 4
0
        public ActionResult CreateOrder(CreateOrderViewModel model)
        {
            if (ModelState.IsValid)
            {
                var errorOrderNums = model.OrderNums.Where(o => (o.CountBuy > o.Count) || o.CountBuy < 0 || (o.IsBuy && o.CountBuy == 0));

                if (errorOrderNums.Any())
                {
                    ModelState.AddModelError("", "Проверьте список заказа, вы указали недопустимое число товара");

                    return(View(model));
                }
                ;

                if (model.OrderNums.Where(x => x.IsBuy).Count() == 0)
                {
                    ModelState.AddModelError("", "Выберите товар");

                    return(View(model));
                }

                var user = Context.Users.Single(u => u.Login.Equals(User.Identity.Name));

                var order = Context.Orders.Add(new Order
                {
                    Adres  = model.Adress,
                    UserId = user.Id,
                    Status = "Принят"
                });


                if (SmartCreate(order))
                {
                    BlockChainManager.GenerateNextBlock(JsonConvert.SerializeObject(order), user.Id);
                }

                foreach (var orderNumModel in model.OrderNums.Where(o => o.IsBuy && o.CountBuy > 0))
                {
                    var nomenclature = Context.Nomenclatures.Single(n => n.Name.Equals(orderNumModel.Name));


                    Context.OrderNoms.Add(new OrderNom
                    {
                        OrderId        = order.Id,
                        NomenclatureId = nomenclature.Id,
                        CountInOrder   = orderNumModel.CountBuy
                    });

                    nomenclature.Count -= orderNumModel.CountBuy;
                    Context.SaveChanges();
                }

                return(RedirectToAction("Index"));
            }

            return(View(model));
        }
Esempio n. 5
0
        public ActionResult AssignCourierOrder(WSR_NPI.DataBase.Models.Сourier model)
        {
            if (ModelState.IsValid)
            {
                var c = Context.Сouriers.Single(x => x.Id == model.Id);
                c.Status  = "Доставляет";
                c.OrderId = model.OrderId;

                var order = Context.Orders.Single(x => x.Id == model.OrderId);
                order.Status = "Ожидает курьера";
                var user = Context.Users.Single(x => x.Login.Equals(User.Identity.Name));

                if (SmartCourier(order, c))
                {
                    BlockChainManager.GenerateNextBlock(bM.Encrypt(JsonConvert.SerializeObject(order)), user.Id);
                }
                Context.SaveChanges();

                return(RedirectToAction("Index"));
            }

            return(PartialView("AssignCourierOrder", model));
        }
Esempio n. 6
0
        public string Post(string token)
        {
            Context db   = new Context();
            var     user = db.Users.FirstOrDefault(x => x.Token.Equals(token)); //ищем пользователя

            if (user != null)
            {
                //освобождаем курьера и закрываем заказ
                var courier = db.Сouriers.FirstOrDefault(x => x.User.Id == user.Id);
                courier.Status = "Свободен";
                var order = db.Orders.FirstOrDefault(x => x.Id == courier.OrderId);
                order.Status = "Доставлен";
                //добавляем запись в блокчейн
                BlockChainManager.GenerateNextBlock(JsonConvert.SerializeObject(order), user.Id);
                courier.OrderId = null;
                db.SaveChanges();

                return("Успешно");
            }
            else
            {
                return(null);
            }
        }
        public ActionResult CreateOrder(CreateOrderViewModel model)
        {
            if (ModelState.IsValid)
            {
                var errorOrderNums = model.OrderNums.Where(o => (o.CountBuy > o.Count) || o.CountBuy < 0 || (o.IsBuy && o.CountBuy == 0));

                if (errorOrderNums.Any())
                {
                    ModelState.AddModelError("", "Проверьте список заказа, вы указали недопустимое число товара");

                    return(View(model));
                }
                ;

                if (model.OrderNums.Where(x => x.IsBuy).Count() == 0)
                {
                    ModelState.AddModelError("", "Выберите товар");

                    return(View(model));
                }

                var user = Context.Users.Single(u => u.Login.Equals(User.Identity.Name));

                var order = Context.Orders.Add(new Order
                {
                    Adres  = model.Adress,
                    UserId = user.Id,
                    Status = "Принят"
                });


                if (SmartCreate(order))
                {
                    var          orderData = bM.Encrypt(JsonConvert.SerializeObject(order));
                    ScriptEngine engine    = Python.CreateEngine();
                    ScriptScope  scope     = engine.CreateScope();
                    scope.SetVariable("msg", orderData);
                    engine.ExecuteFile(Server.MapPath("~/Py/keys.py"), scope);
                    dynamic sign   = scope.GetVariable("sign");
                    dynamic pubKey = scope.GetVariable("pubKey");

                    BlockChainManager.Path   = Server.MapPath("~/Py/varify.py");
                    BlockChainManager.Sign   = sign;
                    BlockChainManager.PubKey = pubKey;
                    BlockChainManager.Need   = true;
                    BlockChainManager.GenerateNextBlock(orderData, user.Id);
                }

                foreach (var orderNumModel in model.OrderNums.Where(o => o.IsBuy && o.CountBuy > 0))
                {
                    var nomenclature = Context.Nomenclatures.Single(n => n.Name.Equals(orderNumModel.Name));


                    Context.OrderNoms.Add(new OrderNom
                    {
                        OrderId        = order.Id,
                        NomenclatureId = nomenclature.Id,
                        CountInOrder   = orderNumModel.CountBuy
                    });

                    nomenclature.Count -= orderNumModel.CountBuy;
                    Context.SaveChanges();
                }

                return(RedirectToAction("Index"));
            }

            return(View(model));
        }