public async Task NewPortfolioAsync([Remainder][Summary("Protfolio name")] string name) { PortfolioEntity portfolio = new PortfolioEntity(Context.User.Id.ToString(), name); portfolio.GuildId = Context.Guild.Id.ToString(); portfolio.Stocks = string.Empty; await CloudTableUtility.InsertOrMergePortfolioAsync(table, portfolio); await ReplyAsync("New portfolio '" + name + "' added!"); }
public async Task AddToPortfolio([Remainder][Summary("Portfolio name and symbol")] string portfolioAndSymbol) { string[] pasList = portfolioAndSymbol.Split(' '); if (pasList.Count() < 2) { if (pasList.Count() == 1) { await ReplyAsync("No symbol defined. \n" + "Format: smb! add to [protfolio name] [symbol] [shares]"); } else { await ReplyAsync("Invalid parameters. \n" + "Format: smb! add to [protfolio name] [symbol] [shares]"); } } else { PortfolioEntity portfolio = await CloudTableUtility.RetrievePortfolioUsingPointQueryAsync(table, Context.User.Id.ToString(), pasList[0]); if (portfolio == null) { await ReplyAsync("No portfolio with that name."); } string[] symbols = new string[pasList.Length - 1]; Array.Copy(pasList, 1, symbols, 0, pasList.Count() - 1); var prices = await Yahoo.Symbols(symbols).Fields(Field.RegularMarketPrice).QueryAsync(); StockEntity stock; List <StockEntity> newStocks = new List <StockEntity>(); for (int i = 0; i < symbols.Length - 1; i++) { if (i % 2 == 0) { int shares = 0; int.TryParse(symbols[i + 1], out shares); if (shares > 0) { stock = new StockEntity(portfolio.RowKey, symbols[i]); stock.Shares = shares; stock.StartPrice = prices[symbols[i]].RegularMarketPrice; newStocks.Add(stock); } else { await ReplyAsync("Error adding holdings to portfolio."); return; } } } foreach (var s in newStocks) { if (portfolio.Stocks.Split(' ').Contains(s.RowKey)) { StockEntity stockEntity = await CloudTableUtility.RetrieveStockUsingPointQueryAsync(table, portfolio.RowKey, s.RowKey); var newAddedCost = s.Shares * s.StartPrice; var oldCost = stockEntity.Shares * stockEntity.StartPrice; var totalShares = s.Shares + stockEntity.Shares; var startPrice = Math.Round((newAddedCost + oldCost) / totalShares, 2); stockEntity.Shares = totalShares; stockEntity.StartPrice = startPrice; await CloudTableUtility.InsertOrMergeStockAsync(table, stockEntity); } else { await CloudTableUtility.InsertOrMergeStockAsync(table, s); portfolio.Stocks += (" " + s.RowKey + " ").Trim(); } } await CloudTableUtility.InsertOrMergePortfolioAsync(table, portfolio); await ReplyAsync("Holdings added to " + portfolio.RowKey); } }