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); }
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); }
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(); }
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()); }
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); } }