private void CreatePortfolioNavDateSecurityPrices(ISession session, NavDate currentNavDate) { IList <PortfolioNavDate> portfolioNavDateList = portfolioNavDateRepository.GetPortfolioNavDateListByNavDate(session, currentNavDate); foreach (var portfolioNavDate in portfolioNavDateList) { logger.Log(LogLevel.Info, $"[PortfolioNavDate: PortfolioId {portfolioNavDate.Portfolio.PortfolioId}, NavDate {portfolioNavDate.NavDate.Date}]: Creating PortfolioNavDateSecurityPrices"); IList <Entities.PortfolioSecurity> portfolioSecurityList = portfolioSecurityRepository.GetPortfolioSecurityList(session, portfolioNavDate.Portfolio); logger.Log(LogLevel.Info, $"[PortfolioNavDate: PortfolioId {portfolioNavDate.Portfolio.PortfolioId}, NavDate {portfolioNavDate.NavDate.Date}]: {portfolioSecurityList.Count} PortfolioSecurity Count"); IList <PortfolioNavDateSecurityPrice> portfolioNavDateSecurityPriceList = portfolioNavDateSecurityPriceRepository.GetPortfolioNavDateSecurityPriceListByPortfolioNavDate(session, portfolioNavDate); IDictionary <long, Entities.PortfolioSecurity> portfolioSecurityDictionary = portfolioSecurityList.ToDictionary(x => x.PortfolioSecurityId); IDictionary <long, PortfolioNavDateSecurityPrice> portfolioNavDateSecurityPriceDictionary = portfolioNavDateSecurityPriceList.ToDictionary(x => x.PortfolioSecurity.PortfolioSecurityId); IList <long> missingPortfolioSecurityList = portfolioSecurityDictionary.Keys.Except(portfolioNavDateSecurityPriceDictionary.Keys).ToList(); logger.Log(LogLevel.Info, $"[PortfolioNavDate: PortfolioId {portfolioNavDate.Portfolio.PortfolioId}, NavDate {portfolioNavDate.NavDate.Date}]: {portfolioNavDateSecurityPriceList.Count}/{portfolioSecurityList.Count} PortfolioSecurityPrices already been created"); logger.Log(LogLevel.Info, $"[PortfolioNavDate: PortfolioId {portfolioNavDate.Portfolio.PortfolioId}, NavDate {portfolioNavDate.NavDate.Date}]: {missingPortfolioSecurityList.Count} PortfolioSecurityPrices need to be created"); using (var transaction = session.BeginTransaction()) { foreach (var portfolioSecurityId in missingPortfolioSecurityList) { Entities.PortfolioSecurity portfolioSecurity = portfolioSecurityDictionary[portfolioSecurityId]; PortfolioNavDateSecurityPrice portfolioNavDateSecurityPrice = new PortfolioNavDateSecurityPrice() { PortfolioNavDate = portfolioNavDate, PortfolioSecurity = portfolioSecurity, PriceStatus = PriceStatus.ToBeRequested, CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Currency = portfolioSecurity.Security.Currency }; portfolioNavDateSecurityPriceRepository.SaveOrUpdate(session, portfolioNavDateSecurityPrice); } transaction.Commit(); logger.Log(LogLevel.Info, $"[PortfolioNavDate: PortfolioId {portfolioNavDate.Portfolio.PortfolioId}, NavDate {portfolioNavDate.NavDate.Date}]: {missingPortfolioSecurityList.Count} PortfolioSecurityPrices created"); } } }
public IList <PortfolioNavDateSecurityPrice> GetPortfolioNavDateSecurityPriceByNavDateSymbol(ISession session, DateTime navDate, string symbol) { PortfolioNavDate pnd = null; Entities.PortfolioSecurity ps = null; NavDate nd = null; Security sd = null; Portfolio pt = null; return(session.QueryOver <PortfolioNavDateSecurityPrice>() .Fetch(SelectMode.ChildFetch, p => p.PortfolioNavDate) .Fetch(SelectMode.ChildFetch, p => p.PortfolioSecurity) .JoinAlias(p => p.PortfolioNavDate, () => pnd).JoinAlias(() => pnd.NavDate, () => nd).JoinAlias(() => pnd.Portfolio, () => pt) .JoinAlias(p => p.PortfolioSecurity, () => ps).JoinAlias(() => ps.Security, () => sd) .Where(() => nd.Date == navDate.Date) .And(() => sd.Symbol == symbol) .List()); }