public async Task <MarketValue> Calculate(int portfolioId, DateTime asOf) { var holdings = await lotsApi.GetLotsForPortfolio(portfolioId, asOf); float cumMktValue = 0; foreach (var holding in holdings) { var ticker = holding.Ric.Split('.'); logger.Information($"Getting market price for {ticker[0]}"); var price = await marketDataClient.GetMarketPriceAsync(ticker[0], asOf); cumMktValue += (float)(price) * holding.Qty; } logger.Information($"Fetching cash information for portfolio id {portfolioId}"); var cashValue = await cashApi.GetCashForPortfolio(portfolioId, asOf); logger.Information($"Finished calculating market value for portfolioId:{portfolioId}"); return(new MarketValue() { Date = asOf, MktValue = cumMktValue + (cashValue == null? 0 : cashValue.Amount), PortfolioId = portfolioId }); }
public async Task Consume(ConsumeContext <ICashValueAggregator> context) { var startDate = context.Message.Date; foreach (var portfolioId in context.Message.PortfolioIds) { logger.Information($"Calculating cash value for {portfolioId}"); var cash = await cashApi.GetCashForPortfolio(portfolioId, startDate); var rows = await cashHistoryRepo.InsertAsync(new CashValue() { Date = startDate, Cash = cash.Amount, PortfolioId = portfolioId }); } }