Beispiel #1
0
        public int SendMail(tblTradeRequest req, int qty)
        {
            int             s     = 0;
            tblUser         user  = db.tblUsers.SingleOrDefault(x => x.uid == req.uid);
            string          eMail = user.email;
            string          fname = user.fname;
            tblTransactions trans = db.tblTransactions.OrderByDescending(x => x.time).First();

            try
            {
                MailMessage mail       = new MailMessage();
                SmtpClient  SmtpServer = new SmtpClient("smtp.gmail.com");
                mail.From = new MailAddress("*****@*****.**");
                mail.To.Add(eMail);
                mail.Subject    = "Trade Requested Executed";
                mail.Body       = "Hello " + fname + ",\n\nCongratulations! Your Trade Request with RequestId " + req.requestId + " is successfully executed.";
                mail.Body      += "\n\nBelow are the details of Transaction :\nTransaction Id: " + trans.transactionId + "\nStock Name: " + db.getStockName(trans.buyerReqId).FirstOrDefault().ToString() + "\nQuantity: " + qty + "\n\nPlease find more details on website.\n\n\nHappy Trading!";
                SmtpServer.Port = 587;
                SmtpServer.UseDefaultCredentials = false;
                SmtpServer.Credentials           = new System.Net.NetworkCredential("*****@*****.**", "%TGB6yhn^YHN5tgb");
                SmtpServer.EnableSsl             = true;
                SmtpServer.Send(mail);
                SmtpServer.Dispose();
            }
            catch (Exception ex)
            {
                s = 0;
            }

            return(s);
        }
Beispiel #2
0
        public async Task <int> SMail(tblTradeRequest request, int quantity)
        {
            Task <int> task = new Task <int>(() => SendMail(request, quantity));

            task.Start();
            int res = await task;

            return(res);
        }
Beispiel #3
0
        public void UpdateTblTradeRequests(int reqId, int qty, int remQty)
        {
            tblTradeRequest trequest = db.tblTradeRequests.SingleOrDefault(x => x.requestId == reqId);

            trequest.remainingQty = remQty;
            if (remQty == 0)
            {
                trequest.requestStatus = "D";
            }
            else if (remQty != qty)
            {
                trequest.requestStatus = "P";
            }
            else
            {
                trequest.requestStatus = "O";
            }
            db.SaveChanges();
        }
Beispiel #4
0
        public ActionResult TradeRequest(int?stockId, string requestType, decimal?reqPrice, int?reqQty, int?requestId, string Operation)
        {
            if (Session["user"] == null || Session["userName"] == null)
            {
                return(Redirect("~/Login.aspx"));
            }
            var user = Session["user"] as tblUser;
            TradeMatchingAlgo algo = new TradeMatchingAlgo();

            if (Operation == "Add")
            {
                if (requestType == "B")
                {
                    var     balance       = db.tblWallets.SingleOrDefault(x => x.uid == user.uid);
                    decimal reqp          = reqPrice ?? 0;
                    int     reqq          = reqQty ?? 0;
                    decimal reqTotalPrice = reqp * reqq;
                    if (reqTotalPrice > balance.balance)
                    {
                        ViewBag.result     = "Insufficient Funds . Unable to place a request";
                        ViewBag.stocks     = db.tblStocks.ToList();
                        ViewBag.type       = "Add";
                        ViewBag.Title      = "Put a trade request";
                        ViewBag.reqPrice   = "";
                        ViewBag.requestQty = "";
                        return(View());
                    }
                    var accountBalance = db.tblWallets.SingleOrDefault(x => x.uid == user.uid);
                    if (accountBalance != null)
                    {
                        accountBalance.balance = (accountBalance.balance - reqTotalPrice);
                        this.db.SaveChanges();
                    }
                }
                else if (requestType == "S")
                {
                    var holdings = db.tblHoldings.SingleOrDefault(x => x.uid == user.uid && x.stockId == stockId);
                    int qty;
                    if (holdings == null)
                    {
                        qty = 0;
                    }
                    else
                    {
                        qty = holdings.remQty ?? 0;
                    }

                    if (reqQty > qty)
                    {
                        ViewBag.result     = "You do not have stocks to sell . Unable to place a request";
                        ViewBag.stocks     = db.tblStocks.ToList();
                        ViewBag.type       = "Add";
                        ViewBag.Title      = "Put a trade request";
                        ViewBag.reqPrice   = "";
                        ViewBag.requestQty = "";
                        return(View());
                    }

                    holdings.remQty = holdings.remQty - reqQty;
                    db.SaveChanges();
                }

                tblTradeRequest tradeRequest = new tblTradeRequest();
                tradeRequest.uid           = user.uid;
                tradeRequest.requestType   = requestType;
                tradeRequest.stockId       = stockId;
                tradeRequest.requestQty    = reqQty;
                tradeRequest.remainingQty  = reqQty;
                tradeRequest.requestPrice  = reqPrice;
                tradeRequest.requestTime   = DateTime.Now;
                tradeRequest.requestStatus = "O";
                this.db.tblTradeRequests.Add(tradeRequest);
                this.db.SaveChanges();
                algo.MatchingAlgo(tradeRequest);

                return(Redirect("/User/Dashboard"));
            }
            else if (Operation == "Update")
            {
                var result = db.tblTradeRequests.Single(x => x.requestId == requestId);
                if (result != null)
                {
                    result.requestQty   = reqQty.Value;
                    result.remainingQty = reqQty.Value;
                    result.requestPrice = reqPrice.Value;
                    db.SaveChanges();
                    algo.MatchingAlgo(result);
                    return(Redirect("/User/Dashboard"));
                }
            }
            return(View());
        }
Beispiel #5
0
        public void MatchingAlgo(tblTradeRequest tradeRequest)
        {
            List <tblTradeRequest> possibleTradeRequests = new List <tblTradeRequest>();
            int remQty   = (int)tradeRequest.requestQty;
            int reqQty   = (int)tradeRequest.requestQty;
            int quantity = 0;

            if (tradeRequest.requestType == "B")
            {
                possibleTradeRequests = db.tblTradeRequests.Where(t => t.requestType == "S" &&
                                                                  (t.requestStatus == "O" || t.requestStatus == "P") &&
                                                                  t.stockId == tradeRequest.stockId &&
                                                                  t.requestPrice <= tradeRequest.requestPrice &&
                                                                  t.uid != tradeRequest.uid).ToList();
            }
            else if (tradeRequest.requestType == "S")
            {
                possibleTradeRequests = db.tblTradeRequests.Where(t => t.requestType == "B" &&
                                                                  (t.requestStatus == "O" || t.requestStatus == "P") &&
                                                                  t.stockId == tradeRequest.stockId &&
                                                                  t.requestPrice >= tradeRequest.requestPrice &&
                                                                  t.uid != tradeRequest.uid).ToList();
            }
            foreach (tblTradeRequest request in possibleTradeRequests.ToList())
            {
                if (remQty == 0)
                {
                    break;
                }
                quantity = (int)((remQty <= request.remainingQty) ? remQty : request.remainingQty);
                remQty  -= quantity;
                if (tradeRequest.requestType == "B")
                {
                    UpdateTblTransaction(tradeRequest.requestId, request.requestId, (double)tradeRequest.requestPrice, (double)request.requestPrice, quantity);
                    UpdateTblTransacts(tradeRequest.requestId, request.requestId, (double)tradeRequest.requestPrice, (double)request.requestPrice, quantity);
                    UpdateTblWallet((int)request.uid, (double)quantity * (double)request.requestPrice);
                    UpdateTblHoldings((int)tradeRequest.uid, (int)request.uid, (int)tradeRequest.stockId, (int)quantity);
                    //UpdateTblTradeRequests(request.requestId, (int)request.requestQty, (int)request.remainingQty - quantity);
                    //SendMail(tradeRequest, quantity);
                    //SMail(request, quantity);
                    //SMail(tradeRequest, quantity);
                }
                else if (tradeRequest.requestType == "S")
                {
                    UpdateTblTransaction(request.requestId, tradeRequest.requestId, (double)request.requestPrice, (double)tradeRequest.requestPrice, quantity);
                    UpdateTblTransacts(request.requestId, tradeRequest.requestId, (double)request.requestPrice, (double)tradeRequest.requestPrice, quantity);
                    UpdateTblHoldings((int)request.uid, (int)tradeRequest.uid, (int)tradeRequest.stockId, (int)quantity);
                    //UpdateTblTradeRequests(request.requestId, (int)request.requestQty, (int)request.remainingQty - quantity);
                    //SendMail(tradeRequest, quantity);
                    //SMail(request, quantity);
                    //SMail(tradeRequest, quantity);
                }
                UpdateTblTradeRequests(request.requestId, (int)request.requestQty, (int)request.remainingQty - quantity);
            }
            UpdateTblTradeRequests(tradeRequest.requestId, (int)tradeRequest.requestQty, remQty);
            UpdateTblWallet((int)tradeRequest.uid, (double)(tradeRequest.requestQty - remQty) * (double)tradeRequest.requestPrice);
            if (reqQty != remQty)
            {
                SendMail(tradeRequest, reqQty - remQty);
            }
        }