/// <summary>
        /// Calculates goal's score
        /// </summary>
        /// <param name="goal">Goal to retrieve score</param>
        /// <param name="optionalStart">Inclusive start date to consider datapoints, if blank will be one year before end</param>
        /// <param name="optionalEnd">Inclusive end date to consider datapoints, if blank will be today</param>
        /// <returns>Number between 0 and 5, or null if no valid goals</returns>
        private Decimal? GetGoalScore(DGoal goal, DateTime? optionalStart = null, DateTime? optionalEnd = null)
        {
            DateTime end = optionalEnd.GetValueOrDefault(DateTime.Today);
            DateTime start = optionalStart.GetValueOrDefault(end.AddYears(-1));

            var currentValue = goal.Parent.CalculateSingleMeasurementValue(start, end);

            if (currentValue == null)
                return null;

            switch (goal.Model.Typ)
            {
                case "<=":
                    if (currentValue <= goal.Model.Exceeds_Val)
                        return 5;
                    if (currentValue <= goal.Model.Meets_Plus_Val)
                        return 4;
                    if (currentValue <= goal.Model.Meets_Val)
                        return 3;
                    /*
                    if (currentValue <= Model.Meets_Val + (Model.Meets_Val * (decimal).10))
                        return 0; // meetsMinus?
                    if (Model.Meets_Plus_Val != null &&
                            currentValue <= Model.Meets_Plus_Val + (Model.Meets_Plus_Val * (decimal).10))
                        return 0; // meetsMinusMinus?
                    if (Model.Exceeds_Val != null &&
                            currentValue <= Model.Exceeds_Val + (Model.Exceeds_Val * (decimal).10))
                        return 0; // meetsMinusMinusMinus?
                    */
                    return 0;

                case ">=":
                    if (currentValue >= goal.Model.Exceeds_Val)
                        return 5;
                    if (currentValue >= goal.Model.Meets_Plus_Val)
                        return 4;
                    if (currentValue >= goal.Model.Meets_Val)
                        return 3;
                    /*
                    if (currentValue >= Model.Meets_Val - (Model.Meets_Val * (decimal).10))
                        return 0;
                    if (Model.Meets_Plus_Val != null &&
                            currentValue >= Model.Meets_Plus_Val + (Model.Meets_Plus_Val * (decimal).10))
                        return 0;
                    if (Model.Exceeds_Val != null &&
                            currentValue >= Model.Exceeds_Val + (Model.Exceeds_Val * (decimal).10))
                        return 0;
                    */
                    return 0;
                default:
                    return null;
            }
        }
 /// <summary>
 /// Calculates goal's score weight
 /// </summary>
 /// <param name="goal">Goal to retrieve score weight</param>
 /// <returns>Number between 0 and 100, or null if no valid goals</returns>
 private Decimal? getGoalScoreWeight(DGoal goal)
 {
     return goal.Model.Wgt;
 }
 /// <summary>
 /// Refreshes list of goals in measurement
 /// </summary>
 public void RefreshGoals()
 {
     savedGoal = null;
 }