private bool SetOutcomeGroupCalculations(
            CalculatorParameters calcParameters,
            OutcomeGroup outcomeGroup)
        {
            bool bHasCalculations = false;

            outcomeGroup.TotalR         += calcParameters.ParentTimePeriod.TotalR;
            outcomeGroup.TotalRINCENT   += calcParameters.ParentTimePeriod.TotalRINCENT;
            outcomeGroup.TotalAMR       += calcParameters.ParentTimePeriod.TotalAMR;
            outcomeGroup.TotalAMRINCENT += calcParameters.ParentTimePeriod.TotalAMRINCENT;
            bHasCalculations             = true;
            return(bHasCalculations);
        }
 //copy constructor
 public OutcomeGroup(CalculatorParameters calcParameters,
                     OutcomeGroup outcomeGroup)
 {
     //several extensions store some calculator props in base element (observations, targettype)
     //no harm done in setting them but never set their attributes
     this.CopyCalculatorProperties(outcomeGroup);
     this.CopySharedObjectProperties(outcomeGroup);
     this.DocStatus = outcomeGroup.DocStatus;
     this.ServiceId = outcomeGroup.ServiceId;
     this.Type      = outcomeGroup.Type;
     this.CopyTotalBenefitsProperties(outcomeGroup);
     //calculators are always app-specific and must be copied subsequently
     this.Calculators  = new List <Calculator1>();
     this.ErrorMessage = outcomeGroup.ErrorMessage;
     if (outcomeGroup.Local == null)
     {
         outcomeGroup.Local = new Local();
     }
     this.Local = new Local(calcParameters, outcomeGroup.Local);
     if (outcomeGroup.XmlDocElement != null)
     {
         this.XmlDocElement = new XElement(outcomeGroup.XmlDocElement);
     }
 }
        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);
        }