/// <summary> /// applies the specified CrcParameterChoiceCollection to the specified report definition /// will set the ParameterChoice property of matching ParameterDefinitions as required /// </summary> /// <param name="repDefn"></param> /// <param name="paramChoices"></param> /// <returns>ParameterMapResult - if MappingValid is false, see Complaints collection</returns> public ParameterMapResult MapParameterChoices(CrcReportDefinition repDefn, CrcParameterChoiceCollection paramChoices) { var res = new ParameterMapResult(); res.Complaints = new List<string>(); string cultureForDateParsing = GetCultureForDateParsing(); foreach (CrcParameterChoice choiceLoop in paramChoices.ParameterChoiceList) { var defnMatch = repDefn.ParameterDefinitions.FirstOrDefault(pd => pd.Name == choiceLoop.Name); if (defnMatch == null) { res.Complaints.Add(String.Format("Param {0} not found", choiceLoop.Name)); continue; } if (defnMatch.ParameterType == CrcParameterType.Date) { if (choiceLoop.SingleValue == null) { defnMatch.ParameterChoice = choiceLoop.DeepClone(); continue; } var parseResult = ParseDateStringVariousWays(choiceLoop.SingleValue, cultureForDateParsing); if (parseResult.CouldParse) { var parsedChoice = new CrcParameterChoice(choiceLoop.Name); parsedChoice.SingleValue = parseResult.DateTime.ToString("yyyy-MM-dd"); defnMatch.ParameterChoice = parsedChoice; continue; } res.Complaints.Add(String.Format("Could not parse date {0} into Param {1}", choiceLoop.SingleValue, choiceLoop.Name)); } else if (defnMatch.ParameterType == CrcParameterType.Boolean) { if (string.IsNullOrEmpty(choiceLoop.SingleValue) || choiceLoop.SingleValue == "True" || choiceLoop.SingleValue == "False") { defnMatch.ParameterChoice = choiceLoop.DeepClone(); continue; } res.Complaints.Add(String.Format("Could not parse boolean {0} into Param {1}", choiceLoop.SingleValue, choiceLoop.Name)); } else if (defnMatch.ParameterType == CrcParameterType.Text) { defnMatch.ParameterChoice = choiceLoop.DeepClone(); continue; } else if (defnMatch.ValidValues.Count() > 0) { bool valuesOK = true; foreach (string chosenValue in choiceLoop.Values) { if (defnMatch.ValidValues.FirstOrDefault(vv => vv.Value == chosenValue) == null) { res.Complaints.Add(String.Format("Could not apply value {0} into Param {1} because it is not a valid option", chosenValue, choiceLoop.Name)); valuesOK = false; } } if (valuesOK) { defnMatch.ParameterChoice = choiceLoop.DeepClone(); continue; } } } res.MappingValid = (res.Complaints.Count() == 0); return res; }
/// <summary> /// applies the specified CrcParameterChoiceCollection to the specified report definition /// will set the ParameterChoice property of matching ParameterDefinitions as required /// </summary> /// <param name="repDefn"></param> /// <param name="paramChoices"></param> /// <returns>ParameterMapResult - if MappingValid is false, see Complaints collection</returns> public ParameterMapResult MapParameterChoices(CrcReportDefinition repDefn, CrcParameterChoiceCollection paramChoices) { var res = new ParameterMapResult(); res.Complaints = new List <string>(); string cultureForDateParsing = GetCultureForDateParsing(); foreach (CrcParameterChoice choiceLoop in paramChoices.ParameterChoiceList) { var defnMatch = repDefn.ParameterDefinitions.FirstOrDefault(pd => pd.Name == choiceLoop.Name); if (defnMatch == null) { res.Complaints.Add(String.Format("Param {0} not found", choiceLoop.Name)); continue; } if (defnMatch.ParameterType == CrcParameterType.Date) { if (choiceLoop.SingleValue == null) { defnMatch.ParameterChoice = choiceLoop.DeepClone(); continue; } var parseResult = ParseDateStringVariousWays(choiceLoop.SingleValue, cultureForDateParsing); if (parseResult.CouldParse) { var parsedChoice = new CrcParameterChoice(choiceLoop.Name); parsedChoice.SingleValue = parseResult.DateTime.ToString("yyyy-MM-dd"); defnMatch.ParameterChoice = parsedChoice; continue; } res.Complaints.Add(String.Format("Could not parse date {0} into Param {1}", choiceLoop.SingleValue, choiceLoop.Name)); } else if (defnMatch.ParameterType == CrcParameterType.Boolean) { if (string.IsNullOrEmpty(choiceLoop.SingleValue) || choiceLoop.SingleValue == "True" || choiceLoop.SingleValue == "False") { defnMatch.ParameterChoice = choiceLoop.DeepClone(); continue; } res.Complaints.Add(String.Format("Could not parse boolean {0} into Param {1}", choiceLoop.SingleValue, choiceLoop.Name)); } else if (defnMatch.ParameterType == CrcParameterType.Text) { defnMatch.ParameterChoice = choiceLoop.DeepClone(); continue; } else if (defnMatch.ValidValues.Count() > 0) { bool valuesOK = true; foreach (string chosenValue in choiceLoop.Values) { if (defnMatch.ValidValues.FirstOrDefault(vv => vv.Value == chosenValue) == null) { res.Complaints.Add(String.Format("Could not apply value {0} into Param {1} because it is not a valid option", chosenValue, choiceLoop.Name)); valuesOK = false; } } if (valuesOK) { defnMatch.ParameterChoice = choiceLoop.DeepClone(); continue; } } } res.MappingValid = (res.Complaints.Count() == 0); return(res); }