public static UserDashboard GetDashboard(string username) { using (ctaDBEntities entities = new ctaDBEntities()) { UserDashboard result = new UserDashboard(username); entities.Database.Connection.Open(); int user_id = UserService.GetUserId(username); string user_type = entities.Tenants.Where(t => t.Id == user_id).Select(t => t.Tenant_Type.Name).First(); var user_portfolios = entities.Portfolios.Where(ptfolio => ptfolio.user_id == user_id); foreach (var portfolio in user_portfolios) { DashboardItem dashboard_item = new DashboardItem() { Portfolio = portfolio.name, Symbols = new List <ctaCOMMON.Charts.Symbol>(), Portfolio_Id = portfolio.Id }; foreach (var stock in portfolio.Portfolio_Stock) { List <Candel> quotes = new List <Candel>(); Candel today_candel = null; foreach (var quote in stock.Stock.Stock_Quote.Where(s => s.date_round < DateTime.Now.AddDays(-1) || user_type != "FREE").OrderBy(itm => itm.date_round)) { Candel candel = new Candel() { Date = quote.date_round, Open = quote.opening, Close = quote.closing, Minimun = quote.minimun, Maximun = quote.maximun, Volume = (double)quote.volume }; quotes.Add(candel); today_candel = candel; } SymbolIntradiaryInfo symbolIntradiaryInfo = QuotesService.GetSymbolIntradiaryInfo(stock.stock_id); if (today_candel != null) { symbolIntradiaryInfo.Volume = today_candel.Volume; symbolIntradiaryInfo.Maximun = today_candel.Maximun; symbolIntradiaryInfo.Minimun = today_candel.Minimun; } ctaCOMMON.Charts.Symbol dashboard_item_symbol = new ctaCOMMON.Charts.Symbol() { Symbol_ID = stock.stock_id, Symbol_Name = stock.Stock.symbol, Symbol_Company_Name = stock.Stock.name, Symbol_Market_ID = stock.Stock.Market.Id, Symbol_Market = stock.Stock.Market.name, Quotes = quotes.OrderBy(q => q.Date).ToList(), Intradiary_Info = symbolIntradiaryInfo }; dashboard_item.Symbols.Add(dashboard_item_symbol); } result.AddDashboardItem(dashboard_item); } entities.Database.Connection.Close(); DashBoardCache = result; return(result); } }
public static SymbolIntradiaryInfo GetSymbolIntradiaryInfo(int stock_id) { SymbolIntradiaryInfo result = new SymbolIntradiaryInfo(); result.SymbolId = stock_id; using (ctaDBEntities entities = new ctaDBEntities()) { entities.Database.Connection.Open(); Stock_Quote_Intradiary info = entities.Stock_Quote_Intradiary.Where(sqi => sqi.stock_id == stock_id).OrderByDescending(sqi => sqi.datetime).FirstOrDefault(); if (info != null) { result.Ask = info.ask; result.AskSize = info.ask_size; result.Bid = info.bid; result.BidSize = info.bid_size; result.LastTradeDate = info.last_trade_date; result.LastTradePrice = info.last_trade_price; result.LastTradeTime = info.last_trade_time; result.LastTradeSize = (double)info.last_trade_size; } Stock_Quote historic = entities.Stock_Quote.Where(sq => sq.stock_id == stock_id).OrderByDescending(h => h.date_round).FirstOrDefault(); if (historic != null) { double previousClosing = entities.Stock_Quote.Where(sq => sq.stock_id == stock_id && sq.date_round < historic.date_round).OrderByDescending(h => h.date_round).Select(sq => sq.closing).FirstOrDefault(); if (previousClosing > 0) { result.Change = historic.closing - previousClosing; result.ChangePercent = ((historic.closing / previousClosing) - 1) * 100; result.PreviousClosing = previousClosing; } result.Date = historic.date_round; result.Opening = historic.opening; result.Minimun = historic.minimun; result.Maximun = historic.maximun; result.LastTradePrice = (result.LastTradePrice > 0) ? result.LastTradePrice : ((historic.closing > 0) ? historic.closing : previousClosing); result.Volume = (double)historic.volume; } if (!(entities.Database.Connection.State == ConnectionState.Closed)) { entities.Database.Connection.Close(); } } return(result ?? new SymbolIntradiaryInfo()); }