public bool ValidTenorAsInWrongOrder(string tenor)
        {
            tenor = "3m1d";
            var pr = new PortfolioRisk()
            {
                Tenor = tenor
            };
            var vpr = new ValidPortfolioRisk(pr);

            return(vpr.IsValid);
        }
        public void ValidTenor()
        {
            var tenor = "2y11m1w2d";

            var pr = new PortfolioRisk()
            {
                Tenor = tenor
            };

            var vt = new ValidPortfolioRisk(pr);

            StringAssert.AreEqualIgnoringCase(tenor, vt.Value.Tenor);
        }
        public bool InValidTenorAsInWrongOrder(string tenor)
        {
            tenor = "1d3m";
            var pr = new PortfolioRisk()
            {
                Tenor = tenor
            };
            var vpr = new ValidPortfolioRisk(pr);

            return(vpr.IsValid);

            //var ex = Assert.Throws<ArgumentException>(() => new ValidPortfolioRisk(pr));
            //StringAssert.AreEqualIgnoringCase("The tenor code is not valid", ex.Message);
        }
        public void InValidTenor()
        {
            var tenor = "2x11f1w2d";
            var pr    = new PortfolioRisk()
            {
                Tenor = tenor
            };
            var vpr = new ValidPortfolioRisk(pr);

            Assert.IsFalse(vpr.IsValid);

            //var ex = Assert.Throws<ArgumentException>(() => new ValidPortfolioRisk(pr));
            //StringAssert.AreEqualIgnoringCase("The tenor code is not valid", ex.Message);
        }
        public static Portfolios Process(DataTable table, string source, DateTime valueDate)
        {
            var stopWatch = new Stopwatch();

            stopWatch.Start();

            var portfolios = new Portfolios {
                Source = source
            };

            var tenorCol       = table.Columns["tenor"];
            var portfolioidCol = table.Columns["portfolioid"];
            var valueCol       = table.Columns["value"];


            var sql = "tenor is not null AND portfolioid <> 0";

            //remove any null rows. Its assumed all other data is valid that has been saved to file.
            var rows = table.Select(sql);

            //todo: AsParallel() this read.
            foreach (DataRow tableRow in rows)
            {
                var tenor       = tableRow[tenorCol].ToString();
                var portfolioid = Utils.SafeCastToIntParse(tableRow[portfolioidCol].ToString());
                var value       = Utils.SafeCastToDoubleParse(tableRow[valueCol].ToString());

                var pr = new PortfolioRisk()
                {
                    Tenor       = tenor,
                    PortfolioId = portfolioid,
                    Value       = value,
                    ValueDate   = valueDate,
                    Source      = source,
                    LastUpdated = ConfigDataHandler.SystemName,
                    UpdateDate  = DateTime.UtcNow
                };
                portfolios.Add(pr);
            }


            stopWatch.Stop();
            portfolios.LoadTime = stopWatch.Elapsed;

            return(portfolios);
        }
        public ValidPortfolioRisk(PortfolioRisk portfolioRisk)
        {
            IsValid      = true;
            ErrorMessage = string.Empty;

            //if (string.IsNullOrEmpty(portfolioRisk.Tenor))
            //{
            //	ErrorMessage = "The tenor code is not valid";
            //	IsValid = false;

            //}

            var result = portfolioRisk.Tenor.ToCharArray().Where(x => !ValidCodes.Any(y => y.Equals(x)) && !Char.IsNumber(x));

            if (result.Any())
            {
                ErrorMessage = "The tenor code is not valid";
                IsValid      = false;
            }

            //validate order
            var codes = portfolioRisk.Tenor.Where(x => Char.IsLetter(x));

            var ordered = ValidCodes.Where(x => codes.Any(y => y.Equals(x)));


            var sequenceEqual = ordered.SequenceEqual(codes.ToList());

            if (!sequenceEqual)
            {
                ErrorMessage = "The tenor code sequency is not correct";
                IsValid      = false;
            }

            Value = portfolioRisk;
        }