private async void BuildResultData() { PageDialog.ShowLoading("Loading"); if (App.LatestSurveyResponse != null) { _response = App.LatestSurveyResponse; } else { try { await RunSafe(GetSurveyResults()); _response = App.LatestSurveyResponse; } catch (Exception ex) { MetricsManager.TrackException(ex.Message, ex); } } if (_response != null) { var chartData = new List <ChartDataModel>(); var answers = _response.QuestionResponses; var statements = new Dictionary <string, List <string> >(); var isSuitable = true; var lowestScore = 5; foreach (var stage in App.LatestSurvey.Stages) { //Hardcoded skip of stage 1, this could be a parameter in the stage model instead? if (stage.ID > 1) { try { //Add Stage to spidergraph var score = answers.Where(a => a.StageID == stage.ID && a.QuestionResponse == true).Count(); chartData.Add(new ChartDataModel(stage.StageText, score)); if (score <= 2) { isSuitable = false; } if (score < lowestScore) { lowestScore = score; } //Add any statements from questions answered 'No' if (answers.Where(a => a.StageID == stage.ID && a.QuestionResponse == false).Count() > 0) { var stageStatements = new List <string>(); foreach (var answer in answers.Where(a => a.StageID == stage.ID && a.QuestionResponse == false)) { stageStatements.Add(answer.QuestionStatement); } statements.Add(stage.StageText, stageStatements); } } catch (Exception ex) { MetricsManager.TrackException("Failed to build summary data", ex); } } } RadarData = new ObservableCollection <ChartDataModel>(chartData); Statements = new ObservableDictionary <string, List <string> >(statements); if (isSuitable) { SuitabilityStatement = AppTextResource.SurveyResultSdctSuitable; } RadarColour = ReturnHexValue(lowestScore); AssessmentDate = _response.SubmittedDate.ToShortDateString(); } PageDialog.HideLoading(); }