private string SelectListAsString(CrcParameterDefinition paramDefn, int truncateListLimit)
        {
            StringBuilder sb    = new StringBuilder();
            int           count = 0;

            foreach (var valLoop in paramDefn.ParameterChoice.Values)
            {
                var vvMatch = paramDefn.ValidValues.FirstOrDefault(vv => vv.Value == valLoop);
                if (vvMatch == null)
                {
                    throw new ApplicationException(string.Format("Param {0}: {1} is not a valid value", paramDefn.Name, valLoop));
                }

                if (sb.Length > 0)
                {
                    sb.Append(", ");
                }
                sb.Append(vvMatch.Label);
                count += 1;
                if (truncateListLimit > 0 && count > truncateListLimit)
                {
                    sb.AppendFormat(" ... (and {0} others)", paramDefn.ParameterChoice.Values.Count() - count);
                    break;
                }
            }
            return(sb.ToString());
        }
 public void RefreshParameter(CrcParameterDefinition paramDefn, rws.ItemParameter latestParamDetails)
 {
     logger.DebugFormat("Updating {0} with {1} valid values", paramDefn.Name,
                        (latestParamDetails.ValidValues != null) ? latestParamDetails.ValidValues.Count().ToString() : "null");
     UpdateValidValues(paramDefn, latestParamDetails.ValidValues);
     if (!IsChoiceValid(paramDefn))
     {
         logger.DebugFormat("Param {0} choices are now invalid so applying {1} default values", paramDefn.Name,
                            (latestParamDetails.DefaultValues != null) ? latestParamDetails.DefaultValues.Count().ToString() : "null");
         UpdateDefaultValues(paramDefn, latestParamDetails.DefaultValues);
     }
 }
        public void UpdateDefaultValues(CrcParameterDefinition paramDefn, string[] newDefaultValues)
        {
            var newChoice = new CrcParameterChoice(paramDefn.Name);

            if (newDefaultValues != null)
            {
                foreach (string sloop in newDefaultValues)
                {
                    newChoice.Values.Add(sloop);
                }
            }
            paramDefn.ParameterChoice = newChoice;
        }
 public void UpdateValidValues(CrcParameterDefinition paramDefn, rws.ValidValue[] newValidValues)
 {
     paramDefn.ValidValues.Clear();
     if (newValidValues != null)
     {
         foreach (var valLoop in newValidValues)
         {
             paramDefn.ValidValues.Add(new CrcValidValue()
             {
                 Value = valLoop.Value, Label = valLoop.Label
             });
         }
     }
 }
        public bool IsChoiceValid(CrcParameterDefinition paramDefn)
        {
            if (paramDefn.ParameterChoice == null)
            {
                return(true);
            }

            foreach (string valLoop in paramDefn.ParameterChoice.Values)
            {
                var match = paramDefn.ValidValues.FirstOrDefault(vv => vv.Value == valLoop);
                if (match == null)
                {
                    return(false);
                }
            }
            return(true);
        }
 private void AddEmptyEquivalent(CrcParameterDefinition crcParam, string emptyEquiv)
 {
     if (crcParam.ParameterType == CrcParameterType.MultiSelect ||
         crcParam.ParameterType == CrcParameterType.Select)
     {
         // add if valid value
         if (crcParam.ValidValues.FirstOrDefault(vv => vv.Value == emptyEquiv) != null)
         {
             crcParam.EmptyEquivalentValues.Add(emptyEquiv);
         }
     }
     else
     {
         // just add
         crcParam.EmptyEquivalentValues.Add(emptyEquiv);
     }
 }
        public void AddParameterDefinitions(rws.ReportParameter[] wsReportParameters, CrcReportDefinition repDef, CrcExtraConfiguration extraConfig, CrcReportConfig reportConfig)
        {
            List <string> showByDefault = new List <string>();

            if (reportConfig != null)
            {
                showByDefault = reportConfig.GetParamsToShowByDefault();
            }
            List <string> defaultEmptyEquivalents = new List <string>();

            if (extraConfig != null && extraConfig.DefaultEmptyEquivalentValues != null)
            {
                defaultEmptyEquivalents = extraConfig.DefaultEmptyEquivalentValues;
            }

            foreach (var paramLoop in wsReportParameters)
            {
                CrcReportConfig.CrcParamConfig paramConfig = null;
                // get extra config for parameter, if there is any
                if (reportConfig != null)
                {
                    paramConfig = reportConfig.CrcParamConfigs.FirstOrDefault(p => p.ParamName == paramLoop.Name);
                }

                var crcParam = new CrcParameterDefinition();
                crcParam.Name       = paramLoop.Name;
                crcParam.id         = "param_" + paramLoop.Name.Replace(" ", "_");
                crcParam.AllowNull  = paramLoop.Nullable;
                crcParam.AllowBlank = paramLoop.AllowBlank;

                if (string.IsNullOrEmpty(paramLoop.Prompt))
                {
                    // if Prompt is null or empty, it means Parameter is 'Hidden' in SSRS
                    crcParam.Hidden      = true;
                    crcParam.DisplayName = paramLoop.Name;
                }
                else
                {
                    crcParam.DisplayName = paramLoop.Prompt;
                }
                if (string.IsNullOrEmpty(crcParam.DisplayName))
                {
                    crcParam.DisplayName = crcParam.Name;
                }
                // if PromptUser is false then Parameter is 'Internal' in SSRS
                if (!paramLoop.PromptUser)
                {
                    crcParam.Hidden = true;
                }
                if (paramLoop.Type == rws.ParameterTypeEnum.DateTime)
                {
                    crcParam.ParameterType = CrcParameterType.Date;
                }
                else if ((paramLoop.ValidValues != null && paramLoop.ValidValues.Count() > 0) ||
                         paramLoop.ValidValuesQueryBased)
                {
                    if (paramLoop.MultiValue)
                    {
                        crcParam.ParameterType = CrcParameterType.MultiSelect;
                    }
                    else
                    {
                        crcParam.ParameterType = CrcParameterType.Select;
                    }
                }
                else if (paramLoop.Type == rws.ParameterTypeEnum.Boolean)
                {
                    crcParam.ParameterType = CrcParameterType.Boolean;
                }
                else
                {
                    crcParam.ParameterType = CrcParameterType.Text;
                }


                if (paramLoop.ValidValues != null)
                {
                    foreach (var valLoop in paramLoop.ValidValues)
                    {
                        crcParam.ValidValues.Add(new CrcValidValue()
                        {
                            Value = valLoop.Value, Label = valLoop.Label
                        });
                    }
                    if (crcParam.ValidValues.Count() > 10)
                    {
                        crcParam.AllowListSearch = true;
                    }
                }


                // check config for dependencies
                if (paramConfig != null && paramConfig.DependantParams != null && paramConfig.DependantParams.Count() > 0)
                {
                    logger.DebugFormat("Param {0} has extraconfig dependancies: {1}",
                                       paramLoop.Name, string.Join(", ", paramConfig.DependantParams.ToArray()));
                    foreach (string dpname in paramConfig.DependantParams)
                    {
                        crcParam.DependantParameterNames.Add(dpname);
                    }
                }



                foreach (string sloop in defaultEmptyEquivalents)
                {
                    AddEmptyEquivalent(crcParam, sloop);
                }

                // check for specific empty equivalents for this parameter
                if (paramConfig != null && paramConfig.EmptyEquivalentValues != null)
                {
                    foreach (string sloop in paramConfig.EmptyEquivalentValues)
                    {
                        AddEmptyEquivalent(crcParam, sloop);
                    }
                }



                if (showByDefault.Contains(crcParam.Name))
                {
                    crcParam.AlwaysShow = true;
                }

                repDef.ParameterDefinitions.Add(crcParam);
            }
        }