Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }