Ejemplo n.º 1
0
 //SIMULATED TOKEN WEB SERVICE
 private HttpStatusCodeResult TokenWebService(Guid id)
 {
     try
     {
         using (AuctionHouseModel db = new AuctionHouseModel())
         {
             TokenOrder order = db.GetTokenOrder(id);
             if (order.state == "SUBMITTED")
             {
                 order.state = "COMPLETED";
                 db.SaveChanges();
             }
             else
             {
                 order.state = "CANCELED";
                 db.SaveChanges();
                 throw new Exception("Error occured: Token order is invalid!");
             }
         }
     }
     catch (Exception error)
     {
         return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error.Message));
     }
     return(new HttpStatusCodeResult(HttpStatusCode.Accepted));
 }
Ejemplo n.º 2
0
        public Guid CreateOrder(Guid userId, string type)
        {
            int amount = 0;

            switch (type)
            {
            case "silver":
                amount = Convert.ToInt32(_systemParameterRepository.GetByParameterName("S").ParameterValue);
                break;

            case "gold":
                amount = Convert.ToInt32(_systemParameterRepository.GetByParameterName("G").ParameterValue);
                break;

            case "platinum":
                amount = Convert.ToInt32(_systemParameterRepository.GetByParameterName("P").ParameterValue);
                break;
            }
            var        price     = amount * Convert.ToInt32(_systemParameterRepository.GetByParameterName("T").ParameterValue);
            var        orderId   = Guid.NewGuid();
            var        timestamp = DateTime.Now;
            TokenOrder order     = new TokenOrder
            {
                Id               = orderId,
                Amount           = amount,
                Price            = price,
                UserId           = userId,
                StatusId         = _tokenOrderStatusRepository.GetByType("SUBMITTED").Id,
                TimestampCreated = timestamp,
                TimestampChanged = timestamp
            };

            _tokenOrderRepository.Save(order);
            return(orderId);
        }
Ejemplo n.º 3
0
        public ActionResult Order(string tokens)
        {
            AdminSettings admin     = db.adminSettings.FirstOrDefault();
            User          user      = Session["User"] as User;
            int           tokensNum = 0;

            if (tokens == "silver")
            {
                tokensNum = admin.S;
            }
            if (tokens == "gold")
            {
                tokensNum = admin.G;
            }
            if (tokens == "platinum")
            {
                tokensNum = admin.P;
            }

            TokenOrder order = new TokenOrder {
                id = Guid.NewGuid(), dateSubmitted = System.DateTime.Now, type = tokens, userId = user.id, numOfTokens = tokensNum, price = tokensNum * admin.T, status = "SUBMITTED"
            };

            db.tokenOrders.Add(order);
            db.SaveChanges();

            return(Redirect("http://stage.centili.com/payment/widget?apikey=8603e733aca172f0f2472ecadffb5739&country=rs&reference=" + order.id + "&returnurl=http://sj150153.azurewebsites.net/TokenOrder/Completed"));
        }
Ejemplo n.º 4
0
        public ActionResult Create([Bind(Include = "NumTokens")] TokenOrder tokenOrder)
        {
            if (!Auth.Check())
            {
                return(RedirectToLogin());
            }


            if (ModelState.IsValid)
            {
                tokenOrder.GUID          = Guid.NewGuid().ToString();
                tokenOrder.UserId        = Auth.Id;
                tokenOrder.Status        = "SUBMITTED";
                tokenOrder.PackagePrice  = (decimal)(tokenOrder.NumTokens * GetTokenPrice());
                tokenOrder.DateSubmitted = DateTime.UtcNow;

                db.TokenOrders.Add(tokenOrder);
                db.SaveChanges();

                Flash.SuccessMessage("Order submitted");
                return(RedirectToAction("Index"));
            }

            return(View(tokenOrder));
        }
Ejemplo n.º 5
0
        public string OrderTokens(int package)
        {
            if (Session["user"] == null)
            {
                return(string.Empty);
            }

            using (var db = new AuctionHouseDB())
            {
                try
                {
                    var parameters = db.GetCurrentSystemParameters();

                    decimal amount = 0;

                    switch (package)
                    {
                    case 0: amount = parameters.SilverPackage; break;

                    case 1: amount = parameters.GoldPackage; break;

                    case 2: amount = parameters.PlatinumPackage; break;

                    default: return("#Error: Such package does not exist.");
                    }

                    var order = new TokenOrder
                    {
                        ID        = Guid.NewGuid(),
                        Buyer     = ((User)Session["user"]).ID,
                        Amount    = amount,
                        Currency  = parameters.Currency,
                        PriceRate = parameters.PriceRate,
                        Status    = null
                    };

                    try
                    {
                        db.TokenOrders.Add(order);
                        db.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex.Message, ex);
                        return("#Error: Could not initiate order. Please, try again.");
                    }

                    AuctionHub.HubContext.Clients.All.onTokenOrderCreated(order.Buyer.ToString(), order.ID.ToString(), order.Amount.ToString(Settings.DecimalFormat), order.Currency, order.PriceRate.ToString(Settings.DecimalFormat));

                    return("<a id=\"c-mobile-payment-widget\" href=\"https://stage.centili.com/payment/widget?apikey=b23180535003ba668fe3d1d2876ad928&reference=" + order.ID + "&country=rs&package=" + package + "\" target=\"_blank\"><img src=\"https://www.centili.com/images/centili-widget-button.png\"/></a>");
                }
                catch (Exception ex)
                {
                    log.Error(ex.Message, ex);
                    return("#Error: Unknown error occured.");
                }
            }
        }
Ejemplo n.º 6
0
        public ActionResult MyOrders()
        {
            User u = (User)Session[KeysUtils.SessionUser()];

            if (u == null)
            {
                return(RedirectToAction("Index", "Home"));
            }
            else
            {
                List <TokenOrder> to = TokenOrder.getOrdersForUser(u.user_id);
                return(View(to));
            }
        }
Ejemplo n.º 7
0
        // GET: TokenOrders/Details/5
        public ActionResult Details(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            TokenOrder tokenOrder = Db.TokenOrders.Find(id);

            if (tokenOrder == null)
            {
                return(HttpNotFound());
            }
            return(View(tokenOrder));
        }
Ejemplo n.º 8
0
        public void OrderTokens(string userID, int package)
        {
            User loggedUser = (User)Session["user"];

            if (loggedUser == null || loggedUser.ID.ToString() != userID)
            {
                return;
            }
            using (var ctx = new AuctionModel())
            {
                try
                {
                    SystemParameter system = ctx.GetSystemParameters();

                    var tokenamount = decimal.Zero;
                    switch (package)
                    {
                    case 0:
                        tokenamount = system.SilverCount;
                        break;

                    case 1:
                        tokenamount = system.GoldCount;
                        break;

                    case 2:
                        tokenamount = system.PlatinumCount;
                        break;
                    }

                    TokenOrder order = new TokenOrder()
                    {
                        ID          = Guid.NewGuid(),
                        Buyer       = loggedUser.ID,
                        TokenAmount = tokenamount,
                        TokenValue  = system.TokenValue,
                        Currency    = system.Currency,
                        State       = 0
                    };
                    ctx.TokenOrders.Add(order);
                    ctx.SaveChanges();
                    AuctionHub.HubContext.Clients.All.onOrderTokens(loggedUser.ID.ToString(), order.ID.ToString(), order.TokenAmount.ToString("F4"), order.Currency, order.TokenValue.ToString("F4"), order.State);
                }
                catch (Exception e)
                {
                    logger.Error(e.Message);
                }
            }
        }
Ejemplo n.º 9
0
        // sending email
        private async Task PostMessage(TokenOrder Order, User User)
        {
            var apiKey = System.Environment.GetEnvironmentVariable("SENDGRID_API_KEY");

            var client = new SendGridClient(apiKey);
            var msg    = new SendGridMessage()
            {
                From             = new EmailAddress("*****@*****.**", "Matija Lukic"),
                Subject          = "Kupovina Tokena",
                PlainTextContent = "Zdravo!",
                HtmlContent      = "<h1>Kupili ste " + Order.Amount + " Tokena</h1><p>Po ceni od " + Order.Price + " RSD</p>"
            };

            msg.AddTo(new EmailAddress(User.Email));
            await client.SendEmailAsync(msg);
        }
Ejemplo n.º 10
0
 public ActionResult Completed(Guid?reference, string status)
 {
     using (var transaction = db.Database.BeginTransaction(IsolationLevel.Serializable))
     {
         try
         {
             TokenOrder order = db.tokenOrders.Where(t => t.id == reference).FirstOrDefault();
             if (order == null)
             {
                 RedirectToAction("TokenOrders", "TokenOrder");
             }
             if (order.status == "SUBMITTED")
             {
                 if (status == "success")
                 {
                     order.status = "COMPLETED";
                     User user1 = Session["User"] as User;
                     User user  = db.users.Where(u => u.id == user1.id).FirstOrDefault();
                     user.numOfTokens += order.numOfTokens;
                     var number     = user.numOfTokens;
                     var hubContext = GlobalHost.ConnectionManager.GetHubContext <HubProjekat>();
                     hubContext.Clients.All.userUp1(user.numOfTokens, user.id);
                     db.Entry(user).State  = EntityState.Modified;
                     db.Entry(order).State = EntityState.Modified;
                     db.SaveChanges();
                     EmailClass.Email(user.mail, "Token order", "Token order completed");
                     transaction.Commit();
                 }
                 else
                 {
                     order.status          = "CANCELED";
                     db.Entry(order).State = EntityState.Modified;
                     db.SaveChanges();
                     ViewBag.Mesage = "The order is canceled";
                     transaction.Commit();
                 }
             }
         }
         catch (Exception e)
         {
             transaction.Rollback();
             ViewBag.Message = "There is an error in transaction";
             log.Error($"Error-not completed token order on {DateTime.Now}");
         }
     }
     return(RedirectToAction("TokenOrders", "TokenOrder"));
 }
Ejemplo n.º 11
0
        public ActionResult OrderTokens(OrderTokensViewModel orderView)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    throw new Exception("All fields must be filled correctly!");
                }

                PartialUser logged_user = IsLoggedIn();
                if (logged_user == null)
                {
                    throw new Exception("Forbidden access!");
                }

                using (AuctionHouseModel db = new AuctionHouseModel())
                {
                    SystemParameter sp    = db.GetSystemParameters();
                    TokenOrder      order = new TokenOrder
                    {
                        id      = Guid.NewGuid(),
                        orderer = logged_user.email,
                        amount  = (int)orderView.Package,
                        price   = (int)orderView.Package * sp.T,
                        state   = "SUBMITTED"
                    };

                    db.TokenOrders.Add(order);
                    db.SaveChanges();

                    HttpStatusCodeResult service_result = TokenWebService(order.id);
                    if (service_result.StatusCode != 0xca)
                    {
                        throw new Exception(service_result.ToString());
                    }

                    User user = db.FindUser(logged_user.email);
                    user.tokens_amount += order.amount;
                    db.SaveChanges();
                }
            }
            catch (Exception error)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, error.Message));
            }
            return(null);
        }
Ejemplo n.º 12
0
        public ActionResult ProcessOrder(string clientid, string status)
        {
            logger.Info("GET/Accounts/ProcessOrder action has been called");
            TokenOrder order = myDB.TokenOrders.Find(int.Parse(clientid));

            if (order == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.NotFound));
            }

            if (status == "failed" || status == "canceled")
            {
                order.State = "CANCELED";
                TempData["OrderMessage"] = "Order failed!";
            }
            else
            {
                order.State = "COMPLETED";


                User user = myDB.Users.Find(order.IdUser);
                if (user == null)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.NotFound));
                }
                user.TokensNumber     += order.TokensNumber;
                myDB.Entry(user).State = EntityState.Modified;
                myDB.SaveChanges();
                myDB.Entry(user).State = EntityState.Detached;



                SendEmail(user.Email);
            }


            myDB.Entry(order).State = EntityState.Modified;

            myDB.SaveChanges();
            myDB.Entry(order).State = EntityState.Detached;


            return(RedirectToAction("UserInformation"));
        }
Ejemplo n.º 13
0
        public ActionResult CentiliReply(Guid?reference, string status)
        {
            //     using (var transaction = db.Database.BeginTransaction(IsolationLevel.Serializable))
            //    {

            //      try {
            TokenOrder order = db.TokenOrder.Where(t => t.Id == reference).FirstOrDefault();

            if (order != null && order.Status == "SUBMITTED")
            {
                User user = db.User.Where(u => u.Id == order.UserId).FirstOrDefault();// TokenOrder.Find(order.UserId).User;
                if (status != "success")
                {
                    order.Status          = "CANCELED";
                    db.Entry(order).State = EntityState.Modified;
                    db.SaveChanges();
                }
                else
                {
                    user.NumberOfTokens  = user.NumberOfTokens + order.NumberOfTokens;
                    order.Status         = "COMPLETED";
                    db.Entry(user).State = EntityState.Modified;
                    string subject = $"Your token order";
                    string body    = $"Your tokens have been succesfully bought!</p>";
                    SendEmail.Email(body, user.Email, subject);
                    db.Entry(order).State = EntityState.Modified;
                    db.SaveChanges();
                    return(RedirectToAction("Index", "Home"));
                }
            }

            /*      }
             *    catch (Exception e)
             *    {
             *        transaction.Rollback();
             *        log.Error($"Unsucceded transaction on {DateTime.Now}");
             *    }
             * }
             */
            return(RedirectToAction("UserIndex", "Auction"));
        }
Ejemplo n.º 14
0
        public ActionResult Create(string package)
        {
            double price      = 0;
            int    tokenCount = 0;

            if (package == "Gold")
            {
                tokenCount = Settings.GlobalSettings.G;
            }
            else if (package == "Silver")
            {
                tokenCount = Settings.GlobalSettings.S;
            }
            else
            {
                tokenCount = Settings.GlobalSettings.P;
            }

            price = tokenCount * Settings.GlobalSettings.T;
            TokenOrder tokenOrder = new TokenOrder();

            if (ModelState.IsValid)
            {
                tokenOrder.ID         = Guid.NewGuid();
                tokenOrder.AspNetUser = db.AspNetUsers.Find(User.Identity.GetUserId());
                tokenOrder.Price      = (decimal)price;
                tokenOrder.TokenCount = tokenCount;
                tokenOrder.State      = "SUBMITTED";
                db.TokenOrders.Add(tokenOrder);
                db.SaveChanges();
                Logger.Logger.log("token order " + tokenOrder.ID + " created");
                return(RedirectToAction("Index"));
            }

            ViewBag.UserID = new SelectList(db.AspNetUsers, "Id", "Email", tokenOrder.UserID);

            return(View(tokenOrder));
        }
Ejemplo n.º 15
0
        public ActionResult OrderToken(int num)
        {
            logger.Info("GET/Accounts/OrderTokens(num) action has been called");
            if (Session["User"] == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            TokenOrder order  = new TokenOrder();
            int        tokens = 0;

            if (num == 1)
            {
                tokens = (int)myDB.SystemParameters.First().Platnium;
            }
            else if (num == 2)
            {
                tokens = (int)myDB.SystemParameters.First().Gold;
            }
            else
            {
                tokens = (int)myDB.SystemParameters.First().Silver;
            }
            order.TokensNumber = tokens;
            order.Price        = order.TokensNumber * myDB.SystemParameters.First().TokensValue;

            order.IdUser    = ((User)Session["User"]).IdUser;
            order.State     = "SUBMITTED";
            order.OrderTime = DateTime.UtcNow;

            myDB.TokenOrders.Add(order);
            myDB.SaveChanges();



            return(Redirect("http://stage.centili.com/payment/widget?apikey=f56c4e470aa1e62148c5c14ac2f45007&country=rs&reference=" + order.Id));
        }
Ejemplo n.º 16
0
        public ActionResult Order(int number)
        {
            TokenOrder order = new TokenOrder();
            //  User user = Session["User"] as User;
            string userId = User.Identity.GetUserId();
            int    Id     = db.User.Where(u => u.idAspNetUsers == userId).FirstOrDefault().Id;

            Admin admin = db.Admin.FirstOrDefault();

            if (number == 1)
            {
                order.TypeOfTokens   = "SYLVER";
                order.NumberOfTokens = admin.SilverPackTokens;
                order.PackagePrice   = admin.SilverPackTokens * admin.ValueOfToken;
            }
            if (number == 2)
            {
                order.TypeOfTokens   = "GOLD";
                order.NumberOfTokens = admin.GoldPackTokens;
                order.PackagePrice   = admin.GoldPackTokens * admin.ValueOfToken;
            }
            if (number == 3)
            {
                order.TypeOfTokens   = "PLATINUM";
                order.NumberOfTokens = admin.PlatinumPackTokens;
                order.PackagePrice   = admin.PlatinumPackTokens * admin.ValueOfToken;
            }
            order.Id     = Guid.NewGuid();
            order.UserId = Id;
            order.Status = "SUBMITTED";

            db.TokenOrder.Add(order);
            db.SaveChanges();

            return(Redirect("http://stage.centili.com/payment/widget?apikey=162e68d0383d8eac6835fffac0759ec5&country=rs&reference=" + order.Id + "&returnurl=http://sm150089.azurewebsites.net/Token/CentiliReply"));
        }
        public void PaymentProcessed(string clientId, string status)
        {
            using (var db = new AuctionHouseDB())
            {
                using (var transaction = db.Database.BeginTransaction(IsolationLevel.Serializable))
                {
                    try
                    {
                        TokenOrder order = null;
                        if (Guid.TryParse(clientId, out var id))
                        {
                            order = db.FindTokenOrderByGuid(id);
                        }
                        if (order == null)
                        {
                            throw new TransactionException("Invalid payment id.");
                        }

                        if (order.Status != null)
                        {
                            throw new TransactionException("Payment already proccessed.");
                        }

                        order.Status          = status == "success";
                        db.Entry(order).State = EntityState.Modified;

                        var     user    = db.FindUserById(order.Buyer);
                        decimal balance = -1;

                        if (order.Status.Value)
                        {
                            user.Balance        += order.Amount;
                            balance              = user.Balance;
                            db.Entry(user).State = EntityState.Modified;
                        }

                        db.SaveChanges();
                        transaction.Commit();

                        try
                        {
                            AuctionHub.HubContext.Clients.All.onTokenOrderCompleted(order.Buyer.ToString(), order.ID.ToString(), balance, order.Status.Value);

                            Mailer.SendMail(Settings.SMTPUsername, "Auction House", user.Email, user.FirstName + " " + user.LastName, "Auction House - Token Order",
                                            "Dear " + user.FirstName + "," + Environment.NewLine +
                                            Environment.NewLine +
                                            "This e-mail has been sent to inform you that your token order" + Environment.NewLine +
                                            "has been processed and marked as [" + (order.Status.Value ? "COMPLETE" : "FAILED") + "]." + Environment.NewLine +
                                            Environment.NewLine +
                                            "Please, do not reply to this e-mail as you will not get any response." + Environment.NewLine +
                                            Environment.NewLine +
                                            "Kind regards," + Environment.NewLine +
                                            "Auction House"
                                            );
                        }
                        catch (Exception ex) { log.Error(ex.Message, ex); }
                    }
                    catch (TransactionException ex)
                    {
                        transaction.Rollback();
                        log.Warn(ex.Message, ex);
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        log.Error(ex.Message, ex);
                    }
                }
            }
        }
Ejemplo n.º 18
0
        public ActionResult BuyTokens(string package)
        {
            TokenOrder order = null;

            using (Entities db = new Entities())
            {
                string userid      = User.Identity.GetUserId();
                var    token       = db.Token.FirstOrDefault();
                int    tokenNumber = 0;
                switch (package)
                {
                case "silver":
                    tokenNumber = (int)token.NumS;
                    break;

                case "gold":
                    tokenNumber = (int)token.NumG;
                    break;

                case "premium":
                    tokenNumber = (int)token.NumP;
                    break;

                default:
                    return(RedirectToAction("Index"));
                }
                decimal price = 0;
                switch (token.ActiveCurrency)
                {
                case "RSD":
                    price = tokenNumber * (decimal)token.RSD;
                    break;

                case "USD":
                    price = tokenNumber * (decimal)token.USD;
                    break;

                case "EUR":
                    price = tokenNumber * (decimal)token.EUR;
                    break;
                }
                order = new TokenOrder()
                {
                    GUID     = Guid.NewGuid(),
                    IdUser   = userid,
                    TokenNum = tokenNumber,
                    Status   = "SU",
                    PackageP = price
                };
                db.TokenOrder.Add(order);
                db.SaveChanges();
            }
            string url = "https://stage.centili.com/widget/WidgetModule?api=589838e3b63aa93505034f3563b32c42&clientid="
                         + order.GUID.ToString() + "&amount=" + ((decimal)(order.PackageP)).ToString("0.##")
                         + "&country=rs&theme=black";

            return(Redirect(url));
            //string[] paramsn =
            //{
            //    "apikey", "country", "reference", "price", "returnurl", "theme"
            //};
            //string[] vals =
            //{
            //    "589838e3b63aa93505034f3563b32c42", "rs", order.GUID.ToString(), ((decimal)(order.PackageP)).ToString("0.##"), "http://localhost:50065", "black"
            //};
            //string url = "http://api.centili.com/api/payment/1_4/transaction";
            //object jsonobj = new { apikey = "589838e3b63aa93505034f3563b32c42", msisdn = "381658203636", country = "rs", reference  = order.GUID.ToString(), price = ((decimal)(order.PackageP)).ToString("0.##"), returnurl = "http://localhost:50065", theme = "black"};
            //string json = new JavaScriptSerializer().Serialize(jsonobj);
            //HttpPost2(url, json);
            //return RedirectToAction("Home", "Index", null);
        }
Ejemplo n.º 19
0
        public ActionResult Notify(string reference, string status)
        {
            using (var ctx = new AuctionModel())
            {
                using (var transaction = ctx.Database.BeginTransaction(IsolationLevel.Serializable))
                {
                    try
                    {
                        TokenOrder order = ctx.FindTokenOrderByID(reference);
                        if (order == null)
                        {
                            throw new Exception("Invalid order. ID = " + reference);
                        }
                        if (order.State != 0)
                        {
                            throw new Exception("Order already processed. ID = " + reference);
                        }
                        switch (status)
                        {
                        case "success":
                            order.State = 1;
                            break;

                        case "failed":
                            order.State = 2;
                            break;

                        case "canceled":
                            order.State = 2;
                            break;
                        }
                        User user = ctx.FindUserByID(order.Buyer.ToString());
                        if (order.State == 1)
                        {
                            user.TokenAmount += order.TokenAmount;
                        }
                        ctx.SaveChanges();
                        transaction.Commit();
                        AuctionHub.HubContext.Clients.All.onNotify(user.ID.ToString(), order.ID.ToString(), order.State, user.TokenAmount.ToString("F4"));

                        try
                        {
                            Utility.SendEmail(user.Email, "Transaction processed #" + reference,
                                              "Hello " + user.FirstName + "," +
                                              Environment.NewLine + Environment.NewLine +
                                              "Your transaction #" + order.ID.ToString() + " has been processed." + Environment.NewLine +
                                              (order.State == 1 ? "Status: COMPLETED" : "Status: CANCELED") + Environment.NewLine + Environment.NewLine +
                                              "Sincerely, " + Environment.NewLine +
                                              "The Auction Website Team"
                                              );
                        }
                        catch (Exception e)
                        {
                            logger.Error(e.Message);
                        }
                    }
                    catch (Exception e)
                    {
                        logger.Error(e.Message);
                        transaction.Rollback();
                        ViewBag.ErrorMsg = "Internal server error.";
                        return(View("Error"));
                    }
                }
            }
            return(RedirectToAction("Profile"));
        }