Ejemplo n.º 1
0
        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");
                }
            }
        }
Ejemplo n.º 2
0
        private void SendSecurityPriceRequest(IModel channel, ISession session, PortfolioNavDateSecurityPrice portfolioNavDateSecurityPrice)
        {
            var securityPriceRequest = new SecurityPriceRequest()
            {
                Symbol    = portfolioNavDateSecurityPrice.PortfolioSecurity.Security.Symbol,
                NavDate   = portfolioNavDateSecurityPrice.PortfolioNavDate.NavDate.Date,
                MessageId = Guid.NewGuid().ToString()
            };

            channel.PublishMessageOnQueue(securityPriceRequest, Queues.SecurityPriceRequestQueue);

            logger.Log(LogLevel.Info, $"SecurityPriceRequest has been sent: Symbol {securityPriceRequest.Symbol}, NavDate {securityPriceRequest.NavDate.Date}, MessageId {securityPriceRequest.MessageId}");

            portfolioNavDateSecurityPrice.PriceStatus = PriceStatus.Requested;
            portfolioNavDateSecurityPrice.UpdateDate  = DateTime.Now;

            portfolioNavDateSecurityPriceRepository.SaveOrUpdate(session, portfolioNavDateSecurityPrice);
        }