Esempio 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);
        }
Esempio n. 2
0
        private static bool SetBudgetChanges(ME2Stock me2Stock)
        {
            bool bHasChanges = false;
            //replace list of totalstocks with list of changestocks
            List <ME2Stock> obsStocks  = new List <ME2Stock>();
            List <int>      baseIds    = new List <int>();
            List <int>      xMinus1Ids = new List <int>();
            int             i          = 0;

            foreach (ME2Stock observation in me2Stock.Stocks)
            {
                //actual totals are contained in observation.Total1.Stocks (and Stocks are Total1s)
                if (observation.Total1 != null &&
                    observation.ChangeType == CHANGE_TYPES.current.ToString())
                {
                    //unlike totals, obsstock needs obs.CopyCalcs so it matches with baseelement
                    ME2Stock observationStock = new ME2Stock(observation.CalcParameters,
                                                             me2Stock.CalcParameters.AnalyzerParms.AnalyzerType);
                    //need the base el id
                    observationStock.CopyCalculatorProperties(observation);
                    //where the stats go
                    observationStock.Change1 = new ME2Change1(observation.CalcParameters);
                    observationStock.Change1.CalcParameters = new CalculatorParameters(me2Stock.CalcParameters);
                    observationStock.Change1.CopyCalculatorProperties(observation);
                    foreach (ME2Total1 total in observation.Total1.Stocks)
                    {
                        //add to observationStock for potential Ancestor calcs use
                        observationStock.Change1.InitTotalME2Change1Properties(observationStock.Change1);
                        observationStock.Change1.CopyTotalME2IndicatorStockProperties(observationStock.Change1, total);
                    }
                    //each of the stocks is a unique label-dependent total
                    observationStock.Change1.Stocks = new List <ME2Stock>();
                    //lists needed to store label-aggregated indicators (a1010, a1011) for each observation
                    List <ME2Change1> baseTotals    = GetBaseChanges(baseIds, me2Stock, observation);
                    List <ME2Change1> xminus1Totals = GetXMinus1Changes(xMinus1Ids, me2Stock, observation);
                    AddChangesToStock(i, observation, observationStock,
                                      baseTotals, xminus1Totals);

                    obsStocks.Add(observationStock);
                    i++;
                }
            }
            if (obsStocks.Count > 0)
            {
                //replace the totalstocks with change stocks
                me2Stock.Stocks = obsStocks;
                bHasChanges     = true;
            }
            return(bHasChanges);
        }
Esempio n. 3
0
        public static ME2Stock GetNewME2Stock(CalculatorParameters calcParams,
                                              Calculator1 baseElement, List <Calculator1> calcs, ME2Stock descendant)
        {
            ME2Stock newStock = new ME2Stock(calcParams, calcParams.AnalyzerParms.AnalyzerType);

            if (calcs == null)
            {
                calcs = new List <Calculator1>();
            }
            if (calcs.Count > 0)
            {
                ME2AnalyzerHelper.CopyandInitStockCalculator(calcs
                                                             .FirstOrDefault(), newStock);
            }
            else
            {
                //need the options
                newStock.CopyCalculatorProperties(descendant);
            }
            BIME2StockAnalyzer.CopyBaseElementProperties(baseElement, newStock);
            return(newStock);
        }
Esempio n. 4
0
        public ME2Stock SetME2Properties(CostBenefitCalculator baseElement,
                                         XElement currentCalculationsElement, XElement currentElement)
        {
            ME2Stock me2 = new ME2Stock(this.GCCalculatorParams, this.GCCalculatorParams.AnalyzerParms.AnalyzerType);
            //204 not used
            //if (this.ME2DescendentStock != null)
            //{
            //    //only property set by analyzer
            //    me2.TotalME2Stage = this.ME2DescendentStock.TotalME2Stage;
            //}
            ME2Calculator me2Calc = new ME2Calculator(this.GCCalculatorParams);

            me2.CalcParameters.CurrentElementNodeName = currentElement.Name.LocalName;
            bool bHasCalcs = false;

            if (currentCalculationsElement != null)
            {
                //have to make sure its not a stockanalyzer
                string sCalculatorType = CalculatorHelpers.GetAttribute(
                    currentCalculationsElement, Calculator1.cCalculatorType);
                if (sCalculatorType == ME2CalculatorHelper.CALCULATOR_TYPES.me2.ToString())
                {
                    //deserialize xml to object
                    me2Calc.SetME2Properties(currentCalculationsElement, currentElement);
                    //only need alttype and targettype (alts are groupedby using base elements)
                    baseElement.AlternativeType = me2Calc.AlternativeType;
                    baseElement.TargetType      = me2Calc.TargetType;
                    bHasCalcs = true;
                }
            }
            if (!bHasCalcs)
            {
                //see if a sibling holds the calculations (currentCalcs could be the analyzer)
                XElement lv = CalculatorHelpers.GetChildLinkedViewUsingAttribute(currentElement,
                                                                                 Calculator1.cCalculatorType, ME2CalculatorHelper.CALCULATOR_TYPES.me2.ToString());
                if (lv != null)
                {
                    //deserialize xml to object
                    me2Calc.SetME2Properties(lv, currentElement);
                    //only need alttype and targettype (alts are groupedby using base elements)
                    baseElement.AlternativeType = me2Calc.AlternativeType;
                    baseElement.TargetType      = me2Calc.TargetType;
                    bHasCalcs = true;
                }
            }
            if (!bHasCalcs)
            {
                //else don't need the ids from calculator
                me2.CopyCalculatorProperties(baseElement);
            }
            //all calcs and analyses are stored in the appropriate analysis object (i.e. me2.Total, me2.Stat)
            me2.InitTotalME2StocksProperties();
            //copy the initial calculator to the appropriate analysis object.ME2Indicators collection
            me2.CopyME2CalculatorToME2Stock(me2Calc);
            me2.AnalyzerType = this.GCCalculatorParams.AnalyzerParms.AnalyzerType;
            //label and date comes from baseelement
            me2.Label = baseElement.Label;
            me2.Date  = baseElement.Date;
            //kiss with the multipliers
            me2.Multiplier   = baseElement.Multiplier;
            me2.CalculatorId = me2Calc.Id;
            //adjust id if children analyzers are being inserted/updated
            ChangeCalculatorIdForUpdatedChildren(currentElement, ref currentCalculationsElement, me2);
            return(me2);
        }
Esempio n. 5
0
 public virtual void CopyTotalME2StocksProperties(
     ME2Stock calculator)
 {
     if (calculator.Stocks != null)
     {
         //set up the new me2Stock
         this.CopyCalculatorProperties(calculator);
         this.AnalyzerType = calculator.AnalyzerType;
         this.Stocks       = new List <ME2Stock>();
         foreach (ME2Stock obsStock in calculator.Stocks)
         {
             //set up the new stock for the stocks collection
             ME2Stock stock = new ME2Stock(CalcParameters);
             //stock gets same props as this (which are copied from calculator
             stock.CopyCalculatorProperties(this);
             stock.AnalyzerType = this.AnalyzerType;
             //copy the analysis to the stock
             if (this.AnalyzerType
                 == ME2AnalyzerHelper.ANALYZER_TYPES.mestat1.ToString())
             {
                 if (obsStock.Stat1 != null)
                 {
                     stock.Stat1 = new ME2Stat1(this.CalcParameters);
                     stock.Stat1.CopyCalculatorProperties(this);
                     stock.Stat1.CopyTotalME2Stat1Properties(
                         obsStock.Stat1);
                 }
             }
             else if (this.AnalyzerType
                      == ME2AnalyzerHelper.ANALYZER_TYPES.mechangeyr.ToString() ||
                      this.AnalyzerType == ME2AnalyzerHelper.ANALYZER_TYPES.mechangeid.ToString() ||
                      this.AnalyzerType == ME2AnalyzerHelper.ANALYZER_TYPES.mechangealt.ToString())
             {
                 if (obsStock.Change1 != null)
                 {
                     stock.Change1 = new ME2Change1(this.CalcParameters);
                     stock.Change1.CopyCalculatorProperties(this);
                     stock.Change1.CopyTotalME2Change1Properties(
                         obsStock.Change1);
                 }
             }
             else if (this.AnalyzerType
                      == ME2AnalyzerHelper.ANALYZER_TYPES.meprogress1.ToString())
             {
                 this.Progress1 = new ME2Progress1(this.CalcParameters);
                 if (obsStock.Progress1 != null)
                 {
                     stock.Progress1 = new ME2Progress1(this.CalcParameters);
                     stock.Progress1.CopyCalculatorProperties(this);
                     stock.Progress1.CopyTotalME2Progress1Properties(
                         obsStock.Progress1);
                 }
             }
             else
             {
                 if (obsStock.Total1 != null)
                 {
                     stock.Total1 = new ME2Total1(this.CalcParameters);
                     stock.Total1.CopyCalculatorProperties(this);
                     stock.Total1.CopyTotalME2Total1Properties(
                         obsStock.Total1);
                 }
             }
             this.Stocks.Add(stock);
         }
     }
 }
Esempio n. 6
0
        private bool SetAnalyses(ME2Stock me2Stock)
        {
            bool bHasTotals = false;

            if (me2Stock.Stocks != null)
            {
                //each of the stocks is an observation derived from alt2
                List <ME2Stock> newStatStocks = new List <ME2Stock>();
                foreach (ME2Stock totalStock in me2Stock.Stocks)
                {
                    if (totalStock.Total1 != null)
                    {
                        if (totalStock.Total1.Stocks != null)
                        {
                            ME2Stock observationStock = new ME2Stock(this.CalcParameters,
                                                                     me2Stock.CalcParameters.AnalyzerParms.AnalyzerType);
                            //stocks hold the calculatorids (sometimes me2Stock is parent running multiple children)
                            observationStock.CopyCalculatorProperties(totalStock);
                            //where the stats go
                            observationStock.Stat1 = new ME2Stat1(this.CalcParameters);
                            observationStock.Stat1.CalcParameters = new CalculatorParameters(totalStock.CalcParameters);
                            observationStock.Stat1.CopyCalculatorProperties(totalStock);
                            //each of the stocks is a unique label-dependent total
                            observationStock.Stat1.Stocks = new List <ME2Stock>();
                            foreach (ME2Stock totStock in totalStock.Total1.Stocks)
                            {
                                ME2Stat1 newStat = new ME2Stat1(this.CalcParameters);
                                //copy the totals and the indicators
                                CopyTotalME2IndicatorStockProperties(newStat, totStock);
                                if (newStat.ME2Indicators != null)
                                {
                                    //set N
                                    newStat.TME2N = newStat.ME2Indicators.Count;
                                    //set the cost means
                                    newStat.TotalME2MMean = newStat.TME2TMAmount / newStat.ME2Indicators.Count;
                                    newStat.TotalME2LMean = newStat.TME2TLAmount / newStat.ME2Indicators.Count;
                                    newStat.TotalME2UMean = newStat.TME2TUAmount / newStat.ME2Indicators.Count;
                                    //set the median, variance, and standard deviation costs
                                    SetME2TotalStatistics(newStat);
                                    SetME2LTotalStatistics(newStat);
                                    SetME2UTotalStatistics(newStat);
                                    if (observationStock.Stat1.Stocks == null)
                                    {
                                        observationStock.Stat1.Stocks = new List <ME2Stock>();
                                    }
                                    observationStock.Stat1.Stocks.Add(newStat);
                                }
                            }
                            if (observationStock.Stat1.Stocks.Count > 0)
                            {
                                totalStock.Stocks = new List <ME2Stock>();
                                bHasTotals        = true;
                                newStatStocks.Add(observationStock);
                            }
                        }
                    }
                }
                if (newStatStocks.Count > 0)
                {
                    bHasTotals      = true;
                    me2Stock.Stocks = newStatStocks;
                }
            }
            return(bHasTotals);
        }
Esempio n. 7
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);
        }
Esempio n. 8
0
        private static bool SetChanges(ME2Stock me2Stock)
        {
            bool bHasChanges = false;
            int  i           = 0;
            //replace list of totalstocks with list of changestocks
            List <ME2Stock> obsStocks = new List <ME2Stock>();
            //lists needed to store label-aggregated indicators (a1010, a1011) for each observation
            List <ME2Change1> baseTotals    = new List <ME2Change1>();
            List <ME2Change1> xminus1Totals = new List <ME2Change1>();

            //loop throught the observations being compared
            foreach (ME2Stock observation in me2Stock.Stocks)
            {
                //actual totals are contained in observation.Total1.Stocks (and Stocks are Total1s)
                if (observation.Total1 != null)
                {
                    if (observation.Total1.Stocks != null)
                    {
                        //unlike totals, obsstock needs obs.CopyCalcs so it matches with baseelement
                        ME2Stock observationStock = new ME2Stock(me2Stock.CalcParameters,
                                                                 me2Stock.CalcParameters.AnalyzerParms.AnalyzerType);
                        //need the base el id
                        observationStock.CopyCalculatorProperties(observation);
                        //where the stats go
                        observationStock.Change1 = new ME2Change1(observation.CalcParameters);
                        observationStock.Change1.CalcParameters = new CalculatorParameters(me2Stock.CalcParameters);
                        //need the base el id
                        observationStock.Change1.CopyCalculatorProperties(observation);
                        //each of the stocks will be a unique label-dependent change
                        observationStock.Change1.Stocks = new List <ME2Stock>();
                        //if count == 0 will go to condition and insert all zeroes for change analysis
                        if (i == 0 &&
                            observation.Total1.Stocks.Count > 0)
                        {
                            //loop through the indicator label-aggregated totals
                            foreach (ME2Total1 total in observation.Total1.Stocks)
                            {
                                //and fill in the base list
                                ME2Change1 baseChange = new ME2Change1(observation.CalcParameters);
                                baseChange.CopyTotalME2IndicatorStockProperties(baseChange, total);
                                baseTotals.Add(baseChange);
                                //add to observationStock for potential Ancestor calcs use
                                observationStock.Change1.InitTotalME2Change1Properties(observationStock.Change1);
                                observationStock.Change1.CopyTotalME2IndicatorStockProperties(observationStock.Change1, total);
                            }
                        }
                        else
                        {
                            AddChangesToStock(i, observation, observationStock,
                                              baseTotals, xminus1Totals);
                            xminus1Totals = new List <ME2Change1>();
                            //loop through the indicator label-aggregated totals
                            foreach (ME2Total1 total in observation.Total1.Stocks)
                            {
                                //and fill in the base list
                                ME2Change1 xminus1Change = new ME2Change1(observation.CalcParameters);
                                xminus1Change.CopyTotalME2IndicatorStockProperties(xminus1Change, total);
                                xminus1Totals.Add(xminus1Change);
                                //add to observationStock for potential Ancestor calcs use
                                observationStock.Change1.InitTotalME2Change1Properties(observationStock.Change1);
                                observationStock.Change1.CopyTotalME2IndicatorStockProperties(observationStock.Change1, total);
                            }
                        }
                        if (observationStock.Change1.Stocks.Count > 0)
                        {
                            obsStocks.Add(observationStock);
                        }
                        else
                        {
                            //insert zeroes
                            AddChangesToStock(i, observation, observationStock,
                                              baseTotals, xminus1Totals);
                            obsStocks.Add(observationStock);
                        }
                        i++;
                    }
                }
            }
            if (obsStocks.Count > 0)
            {
                //replace the totalstocks with change stocks
                me2Stock.Stocks = obsStocks;
                bHasChanges     = true;
            }
            return(bHasChanges);
        }