private bool RunOutputCalculations(OutputDiscounted outputDiscounted, CalculatorParameters calcParameters) { //this calculator does not do cumulative totals bool bHasCalculations = false; //outputs are discounted using the BudgetsandInvestments calculator //that calculator relies on 'ancestor' objects (ancestor xml nodes) //for some calculation parameters calcParameters.ParentBudgetInvestment = new BudgetInvestment(); calcParameters.ParentBudgetInvestment.Local = new Local(); calcParameters.ParentBudgetInvestment.Local.NominalRate = outputDiscounted.Local.NominalRate; calcParameters.ParentBudgetInvestment.Local.InflationRate = outputDiscounted.Local.InflationRate; calcParameters.ParentBudgetInvestment.Local.RealRate = outputDiscounted.Local.RealRate; calcParameters.ParentBudgetInvestment.InitEOPDate = outputDiscounted.EndOfPeriodDate; calcParameters.ParentBudgetInvestment.PreProdPeriods = 0; calcParameters.ParentBudgetInvestment.ProdPeriods = 1; calcParameters.ParentTimePeriod = new TimePeriod(); calcParameters.ParentTimePeriod.IsDiscounted = outputDiscounted.IsDiscounted; calcParameters.ParentTimePeriod.Date = outputDiscounted.EndOfPeriodDate; //convert discountedoutput to an Output object that can be used to run calcs Output output = OutputDiscounted.ConvertDiscountedOutput(calcParameters, outputDiscounted); XElement oCurrentCalculationElement = null; BICalculator biCalculator = new BICalculator(); bHasCalculations = biCalculator.SetOutputCalculations( calcParameters, output, oCurrentCalculationElement); //transfer the new calculations back to outputDiscounted (via its base output object) outputDiscounted.SetOutputProperties(calcParameters, output); return(bHasCalculations); }
private bool AddNPVCalculationsToCurrentElement( CalculatorParameters calcParameters, ref XElement currentCalculationsElement, ref XElement currentElement, IDictionary <string, string> updates) { bool bHasCalculations = false; if (currentElement.Name.LocalName == Outcome.OUTCOME_PRICE_TYPES.outcomegroup.ToString()) { OutcomeGroup outcomeGroup = new OutcomeGroup(); //deserialize xml to object outcomeGroup.SetOutcomeGroupProperties( calcParameters, currentCalculationsElement, currentElement); bHasCalculations = SetOutcomeGroupCalculations( calcParameters, outcomeGroup); //serialize object back to xml outcomeGroup.SetOutcomeGroupAttributes( calcParameters, ref currentElement, updates); if (outcomeGroup != null) { //locals only for calculator outcomeGroup.Local.SetLocalAttributesForCalculator(calcParameters, ref currentCalculationsElement); } } else if (currentElement.Name.LocalName .EndsWith(Outcome.OUTCOME_PRICE_TYPES.outcome.ToString())) { BICalculator biCalculator = new BICalculator(); bHasCalculations = biCalculator.SetOutcomeCalculations( calcParameters, calcParameters.ParentOutcome); //serialize object back to xml calcParameters.ParentOutcome.SetOutcomeAttributes( calcParameters, ref currentElement, updates); if (calcParameters.ParentOutcome.Local != null) { //locals only for calculator calcParameters.ParentOutcome.Local.SetLocalAttributesForCalculator(calcParameters, ref currentCalculationsElement); } } else if (currentElement.Name.LocalName.EndsWith(Output.OUTPUT_PRICE_TYPES.output.ToString())) { Output output = new Output(); //deserialize xml to object output.SetOutputProperties( calcParameters, currentCalculationsElement, currentElement); BICalculator biCalculator = new BICalculator(); bHasCalculations = biCalculator.SetOutputCalculations( calcParameters, output, ref currentCalculationsElement); //serialize object back to xml output.SetOutputAttributes( calcParameters, ref currentElement, updates); //and set the totals output.SetTotalBenefitsAttributes(string.Empty, ref currentElement); if (output.Local != null) { //locals only for calculator output.Local.SetLocalAttributesForCalculator(calcParameters, ref currentCalculationsElement); } } return(bHasCalculations); }