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);
            }
        }
        /// <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());
            }
        }
Exemple #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"));
            }
        }
Exemple #4
0
 private static void printUsers(BlockChainManager bcm)
 {
     for (int i = 0; i < bcm.users.Count; i++)
     {
         Console.WriteLine($"User: {i + 1}");
     }
 }
Exemple #5
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));
        }
Exemple #6
0
        private static void contentController()
        {
            BlockChainManager bcm = new BlockChainManager(10);

            while (true)
            {
                Console.Clear();
                Console.WriteLine(drawMAIN());
                choiceController(int.Parse(Console.ReadLine()), bcm);
                Console.ReadKey();
            }
        }
Exemple #7
0
        private static void choiceController(int ID, BlockChainManager bcm)
        {
            switch (ID)
            {
            case 1:
            {
                bcm.addData(1);
                break;
            }

            case 2:
            {
                bcm.addData(2);
                break;
            }

            case 3:
            {
                List <int> results = bcm.getResults();
                Console.WriteLine(extractResults(results));
                break;
            }

            case 4:
            {
                printUsers(bcm);
                Console.WriteLine("Select user: "******"\n" + bcm.users[userID].ToString());
                int   blockID = int.Parse(Console.ReadLine()) - 1;
                Block block   = bcm.users[userID].getBlockByID(blockID);
                block.data = 420;
                break;
            }

            default:
            {
                Environment.Exit(0);
                break;
            }
            }
        }
Exemple #8
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));
        }
Exemple #9
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));
        }