Example #1
0
        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!");
        }
Example #2
0
        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);
            }
        }