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); }
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); }
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); }
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); }
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); }