Ejemplo n.º 1
0
        public static bool CopyandInitStockCalculator(Calculator1 calc, ME2Stock newStock)
        {
            bool bHasCopy = false;

            if (calc != null)
            {
                if (calc.GetType().Equals(newStock.GetType()))
                {
                    ME2Stock oldStock = (ME2Stock)calc;
                    if (oldStock != null)
                    {
                        //initiate analyzer objects
                        newStock.InitTotalME2StocksProperties();
                        //but keep calc props
                        newStock.CopyCalculatorProperties(oldStock);
                        if (oldStock.CalcParameters != null)
                        {
                            newStock.CalcParameters = new CalculatorParameters(oldStock.CalcParameters);
                        }
                        bHasCopy = true;
                    }
                }
            }
            return(bHasCopy);
        }
Ejemplo n.º 2
0
        private List <Calculator1> SetTotals(ME2Stock me2Stock, List <Calculator1> calcs)
        {
            //build a list of initial totals that can be used to runtotals
            List <Calculator1> stocks = new List <Calculator1>();

            foreach (Calculator1 calc in calcs)
            {
                if (calc.GetType().Equals(me2Stock.GetType()))
                {
                    ME2Stock stock = (ME2Stock)calc;
                    if (stock != null)
                    {
                        //this initial calculator results are placed in this object
                        if (stock.Stocks != null)
                        {
                            List <ME2Stock> obsStocks = new List <ME2Stock>();
                            foreach (ME2Stock obsStock in stock.Stocks)
                            {
                                //id comes from original calc
                                obsStock.CopyCalculatorProperties(stock);
                                if (obsStock.Stat1 != null)
                                {
                                    obsStock.Total1 = new ME2Total1(this.CalcParameters);
                                    if (obsStock.Stat1.ME2Indicators != null)
                                    {
                                        if (obsStock.Stat1.ME2Indicators.Count > 0)
                                        {
                                            obsStock.Total1.CopyME2IndicatorsProperties(obsStock.Stat1);
                                            //id comes from original calc
                                            obsStock.Total1.CopyCalculatorProperties(stock);
                                            //clear the initial indicators
                                            obsStock.Stat1.ME2Indicators = new List <ME2Indicator>();
                                            obsStocks.Add(obsStock);
                                        }
                                    }
                                }
                            }
                            //reset stock.Storks
                            stock.Stocks = new List <ME2Stock>();
                            foreach (ME2Stock ostock in obsStocks)
                            {
                                stock.Stocks.Add(ostock);
                            }
                            stocks.Add(stock);
                        }
                    }
                }
            }
            return(stocks);
        }
Ejemplo n.º 3
0
        public static bool CopyStockCalculator(Calculator1 calc, ME2Stock newStock)
        {
            bool bHasCopy = false;

            if (calc != null)
            {
                if (calc.GetType().Equals(newStock.GetType()))
                {
                    ME2Stock oldStock = (ME2Stock)calc;
                    if (oldStock != null)
                    {
                        //only one me2stock is initialized in object model
                        bHasCopy = CopyStockCalculator(oldStock, newStock);
                    }
                }
            }
            return(bHasCopy);
        }
Ejemplo n.º 4
0
        private bool SetAnalyses(ME2Stock me2Stock, List <Calculator1> calcs)
        {
            bool bHasAnalysis = false;
            bool bHasTotals   = false;
            //calcs are aggregated by their alternative2 property
            //so calcs with alt2 = 0 are in first observation (i.e. year, alttype, wbs label); alt2 = 2nd observation
            //put the calc totals in each observation and then run stats on observations (not calcs)
            IEnumerable <System.Linq.IGrouping <int, Calculator1> >
            calcsByAlt2 = calcs.GroupBy(c => c.Alternative2);
            List <ME2Stock> obsStocks = new List <ME2Stock>();

            foreach (var calcbyalt in calcsByAlt2)
            {
                //observationStock goes into me2Stock.Stocks
                ME2Stock observationStock = new ME2Stock(me2Stock.CalcParameters,
                                                         me2Stock.CalcParameters.AnalyzerParms.AnalyzerType);
                //set the calcprops using first calcbyalt -it has good calcids (me2Stock could be parent and have bad ids)
                int i = 0;
                //only the totStocks are used in results
                //replace list of totalstocks with list of changestocks
                foreach (Calculator1 calc in calcbyalt)
                {
                    if (calc.GetType().Equals(me2Stock.GetType()))
                    {
                        //calc has the right ids and props
                        ME2Stock stock = (ME2Stock)calc;
                        if (i == 0)
                        {
                            //need base el id, not me2Stock id
                            observationStock.CopyCalculatorProperties(stock);
                            //where the totals go
                            observationStock.Total1 = new ME2Total1(this.CalcParameters);
                            observationStock.Total1.CalcParameters = new CalculatorParameters(stock.CalcParameters);
                            observationStock.Total1.CopyCalculatorProperties(stock);
                        }
                        if (stock != null)
                        {
                            //this initial calculator results are placed in this object
                            if (stock.Stocks != null)
                            {
                                foreach (ME2Stock obsStock in stock.Stocks)
                                {
                                    if (obsStock.Total1 != null)
                                    {
                                        //set the multiplier; each calculator holds its own multiplier
                                        obsStock.Total1.Multiplier = stock.Multiplier;
                                        //run new calcs and put the result in stock.Total1.Stocks collection
                                        //that is a label-dependent collection of totals1s
                                        bHasTotals = observationStock.Total1.SetTotals(obsStock.Total1);
                                        if (bHasTotals)
                                        {
                                            //1 total is enough for an analysis
                                            bHasAnalysis = true;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    i++;
                }
                if (bHasAnalysis)
                {
                    //all analyes are now ready to run with good observations and collections of totals and indicators
                    obsStocks.Add(observationStock);
                }
            }
            if (bHasAnalysis)
            {
                me2Stock.Stocks = new List <ME2Stock>();
                me2Stock.Stocks = obsStocks;
            }
            return(bHasAnalysis);
        }
Ejemplo n.º 5
0
        private List <Calculator1> SetTotals(ME2Stock me2Stock, List <Calculator1> calcs)
        {
            //build a list of initial totals that can be used to runtotals
            List <Calculator1> stocks = new List <Calculator1>();

            foreach (Calculator1 calc in calcs)
            {
                if (calc.GetType().Equals(me2Stock.GetType()))
                {
                    ME2Stock stock = (ME2Stock)calc;
                    if (stock != null)
                    {
                        //this initial calculator results are placed in this object
                        if (stock.Stocks != null)
                        {
                            List <ME2Stock> obsStocks = new List <ME2Stock>();
                            foreach (ME2Stock obsStock in stock.Stocks)
                            {
                                //id comes from original calc
                                obsStock.CopyCalculatorProperties(stock);
                                if (obsStock.Change1 != null)
                                {
                                    obsStock.Total1 = new ME2Total1(this.CalcParameters);
                                    ////204 allowed more flexibility with indicators
                                    ////ancestors and siblings can have multiple inds with different labels and 1 stock for each ind collection
                                    if (obsStock.Change1.Stocks != null)
                                    {
                                        if (obsStock.Change1.Stocks.Count > 0)
                                        {
                                            int k = 0;
                                            foreach (var addedstock in obsStock.Change1.Stocks)
                                            {
                                                if (addedstock.ME2Indicators.Count > 0)
                                                {
                                                    if (k == 0)
                                                    {
                                                        //this resets indicator list
                                                        obsStock.Change1.CopyME2IndicatorsProperties(addedstock);
                                                    }
                                                    else
                                                    {
                                                        //when totals are run it will use ind.Label to add total to proper stock
                                                        obsStock.Change1.AddME2IndicatorsProperties(addedstock);
                                                    }
                                                }
                                                k++;
                                            }
                                        }
                                    }
                                    if (obsStock.Change1.ME2Indicators != null)
                                    {
                                        if (obsStock.Change1.ME2Indicators.Count > 0)
                                        {
                                            obsStock.Total1.CopyME2IndicatorsProperties(obsStock.Change1);
                                            //id comes from original calc
                                            obsStock.Total1.CopyCalculatorProperties(stock);
                                            //clear the initial indicators
                                            obsStock.Change1.ME2Indicators = new List <ME2Indicator>();
                                            obsStocks.Add(obsStock);
                                        }
                                    }
                                }
                            }
                            //reset stock.Storks
                            stock.Stocks = new List <ME2Stock>();
                            foreach (ME2Stock ostock in obsStocks)
                            {
                                stock.Stocks.Add(ostock);
                            }
                            stocks.Add(stock);
                        }
                    }
                }
            }
            return(stocks);
        }