Exemple #1
0
        public IEnumerable <String> ExtractCodes(
            SecurityRepository securityRepository,
            String portfolioId,
            ManagingPst.PortfolioSecurityTargetRepository portfolioSecurityTargetRepository,
            ISecurityIdToPortfolioIdResolver securityToPortfolioResolver
            )
        {
            var traverser = new TargetsTraverser <Object>(
                (whatever, target) => target,   // we don't change targets
                (whaterer, target) => whaterer  // we don't change the state
                );
            var flatTargets = traverser.Traverse(
                portfolioId,
                portfolioSecurityTargetRepository,
                new Object(),
                new HashSet <String>(),
                securityToPortfolioResolver
                );

            var results = flatTargets.GroupBy(x => securityRepository
                                              .GetSecurity(x.SecurityId)
                                              .AsCompanySecurity() // <---- at this level (very bottom) all securities have to be company securities (there must be no funds at this level)
                                              .Country.IsoCode
                                              ).Select(x => x.Key).ToArray();

            return(results);
        }
 public IEnumerable <BuPortfolioSecurityTargetInfo> Flatten(
     String portfolioId,
     Decimal target,
     ManagingPst.PortfolioSecurityTargetRepository portfolioSecurityTargetRepository,
     ISecurityIdToPortfolioIdResolver portfolioRepository
     )
 {
     return(this.traverser.Traverse(
                portfolioId,
                portfolioSecurityTargetRepository,
                new State {
         ScaleFactor = target
     },
                new HashSet <String>(),
                portfolioRepository
                ));
 }
Exemple #3
0
        public IEnumerable <BuPortfolioSecurityTargetInfo> Traverse(
            String portfolioId,
            ManagingPst.PortfolioSecurityTargetRepository portfolioSecurityTargetRepository,
            TState state,
            HashSet <String> processedPortfolioIds,
            ISecurityIdToPortfolioIdResolver portfolioRepository
            )
        {
            // in order not to process the same portfolio infinitely many times we have to save it
            processedPortfolioIds.Add(portfolioId);

            // get only targets related to the portfolo in question
            var targets = portfolioSecurityTargetRepository.GetTargets(portfolioId, true);

            foreach (var target in targets)
            {
                var nestedPortfolioIdOpt = portfolioRepository.TryResolveToPortfolioId(target.SecurityId);
                if (nestedPortfolioIdOpt == null)
                {
                    var convertedTarget = this.targetFlattener(state, target);
                    yield return(convertedTarget);
                }
                else if (processedPortfolioIds.Contains(nestedPortfolioIdOpt))
                {
                    throw new ApplicationException("Cannot unwrap portfolio/security composition for the overlay column due to getting into a infinite loop: portfolio \"" + nestedPortfolioIdOpt + "\" has already been processed.");
                }
                else
                {
                    var nestedTargets = this.Traverse(
                        nestedPortfolioIdOpt,
                        portfolioSecurityTargetRepository,
                        stateDriller(state, target),
                        processedPortfolioIds,
                        portfolioRepository
                        );

                    foreach (var nestedTarget in nestedTargets)
                    {
                        yield return(nestedTarget);
                    }
                }
            }
        }
        public IEnumerable <String> ExtractCodes(
            IEnumerable <String> portfolioIdList,
            ManagingPst.PortfolioSecurityTargetRepository portfolioSecurityTargetRepository,
            ISecurityIdToPortfolioIdResolver securityToPortfolioResolver,
            SecurityRepository securityRepository)
        {
            var allIsoCodes = new List <String>();

            foreach (var portfolioId in portfolioIdList)
            {
                var isoCodes = this.extractor.ExtractCodes(
                    securityRepository,
                    portfolioId,
                    portfolioSecurityTargetRepository,
                    securityToPortfolioResolver
                    );
                allIsoCodes.AddRange(isoCodes);
            }
            var result = allIsoCodes.Distinct().ToArray();

            return(result);
        }
        public IEnumerable <String> FindMissingCountries(
            Taxonomy taxonomy,
            IEnumerable <BenchmarkSumByIsoInfo> benchmarks,
            IEnumerable <String> overlaySecurityIds,
            ManagingPst.PortfolioSecurityTargetRepository portfolioSecurityTargetRepository,
            ISecurityIdToPortfolioIdResolver securityToPortfolioResolver,
            SecurityRepository securityRepository
            )
        {
            var knownIsoCodes = this.taxonomyIsoCodeExtractor.ExtractCodes(taxonomy);
            var whateverIsoCodesFromBenchmarks = this.benchmarkingIsoCodeExtractor.ExtractCodes(benchmarks);
            var whateverIsoCodesFromOverlay    = this.overlayIsoCodeExtractor.ExtractCodes(
                overlaySecurityIds,
                portfolioSecurityTargetRepository,
                securityToPortfolioResolver,
                securityRepository
                );
            var whateverIsoCodes = whateverIsoCodesFromBenchmarks.Union(whateverIsoCodesFromOverlay).ToArray();

            var unknownIsoCodes = this.unknownIsoCodesDetector.FindUnknownCodes(knownIsoCodes, whateverIsoCodes);

            return(unknownIsoCodes);
        }