public string Post([FromBody] object data, string option) { string result = "Error unable to process request. Please ensure all inputs are valid."; if (option != null && data != null) { switch (option.ToLower()) { case "download": result = DownloadDocument(data).GetAwaiter().GetResult() ? "Successfully downloaded file to " + DOWNLOAD_DIRECTORY : "Error - File not downloaded please try again"; break; case "report": //For data manipulation List <CSVResponse> reportData = GetSurveyResponses(data).GetAwaiter().GetResult(); AzureBlobDocuments document = jsonHelper.FromJson <AzureBlobDocuments>(data.ToString()); if (reportData != null) { ReportAnalysisModel report = CollateReportData(reportData); report.ReportTitle = document.Filename; if (report != null) { result = JsonConvert.SerializeObject(report); } } else { result = "Error, unable to run report."; } break; case "saveresponse": //To append a response to csv in azure. result = AppendResponse(data).GetAwaiter().GetResult() ? "Successfully added response to CSV" : "Error adding response to CSV"; break; default: break; } } return(result); }
private ReportAnalysisModel AnalyseReport(ReportAnalysisModel report, List <QuestionAnalysisCollection> surveyAnalysis) { if (report != null) { foreach (ReportResponseAnalysis response in report.Responses) { QuestionAnalysisCollection surveyResponse = surveyAnalysis.Find(o => o.QuestionNumber == response.QuestionNumber); if (surveyResponse != null) { switch (surveyResponse.QuestionType) { case "mq": response.Message = MultipleChoiceAnalysis(response, surveyResponse); break; case "ni": case "range": response.Message = RangeChoiceAnalysis(response, surveyResponse); break; case "rank": response.Message = RankChoiceAnalysis(response, surveyResponse); break; case "text": response.Message = TextChoiceAnalysis(response, surveyResponse); break; default: break; } } } } return(report); }
private ReportAnalysisModel CollateReportData(List <CSVResponse> reportData) { ReportAnalysisModel report = new ReportAnalysisModel(); SurveyQuestionsService service = new SurveyQuestionsService(); List <QuestionDataModel> questionData = service.GetSurveyQuestions(reportData[0].SurveyID); foreach (QuestionDataModel question in questionData) { report.Responses.Add(new ReportResponseAnalysis() { QuestionNumber = question.QuestionNumber, Question = question.Question, Type = question.Type, Options = question.Options }); } Dictionary <string, int> multiChoiceAnalysis = null; Dictionary <string, int> rangeAnalysis = null; Dictionary <string, int> stringAnalysis = null; Dictionary <string, int> rankAnalysis = null; Dictionary <string, int> numericAnalysis = null; List <QuestionAnalysisCollection> surveyAnalysis = new List <QuestionAnalysisCollection>(); int questionNum = 1; do { multiChoiceAnalysis = new Dictionary <string, int>(); rangeAnalysis = new Dictionary <string, int>(); stringAnalysis = new Dictionary <string, int>(); rankAnalysis = new Dictionary <string, int>(); numericAnalysis = new Dictionary <string, int>(); foreach (CSVResponse responseData in reportData) { foreach (var response in responseData.Responses) { if (response.QuestionNumber == questionNum) { string questionType = questionData.Find(o => o.QuestionNumber == response.QuestionNumber).Type; switch (questionType.ToLower()) { case "mq": if (multiChoiceAnalysis.ContainsKey(response.Answer)) { multiChoiceAnalysis[response.Answer]++; } else { multiChoiceAnalysis.Add(response.Answer, 1); } break; case "range": if (rangeAnalysis.ContainsKey(response.Answer)) { rangeAnalysis[response.Answer]++; } else { rangeAnalysis.Add(response.Answer, 1); } break; case "ni": if (numericAnalysis.ContainsKey(response.Answer)) { numericAnalysis[response.Answer]++; } else { numericAnalysis.Add(response.Answer, 1); } break; case "rank": if (rankAnalysis.ContainsKey(response.Answer)) { rankAnalysis[response.Answer]++; } else { rankAnalysis.Add(response.Answer, 1); } break; case "comment": case "text": if (stringAnalysis.ContainsKey(response.Answer)) { stringAnalysis[response.Answer]++; } else { stringAnalysis.Add(response.Answer, 1); } break; default: break; } } } } if (multiChoiceAnalysis.Count > 0) { surveyAnalysis.Add(new QuestionAnalysisCollection { QuestionType = "mq", QuestionNumber = questionNum, Summary = multiChoiceAnalysis }); } else if (rangeAnalysis.Count > 0) { surveyAnalysis.Add(new QuestionAnalysisCollection { QuestionType = "range", QuestionNumber = questionNum, Summary = rangeAnalysis }); } else if (rankAnalysis.Count > 0) { surveyAnalysis.Add(new QuestionAnalysisCollection { QuestionType = "rank", QuestionNumber = questionNum, Summary = rankAnalysis }); } else if (stringAnalysis.Count > 0) { surveyAnalysis.Add(new QuestionAnalysisCollection { QuestionType = "text", QuestionNumber = questionNum, Summary = stringAnalysis }); } else if (numericAnalysis.Count > 0) { surveyAnalysis.Add(new QuestionAnalysisCollection { QuestionType = "ni", QuestionNumber = questionNum, Summary = numericAnalysis }); } questionNum++; } while (questionNum <= questionData.Count); report = AnalyseReport(report, surveyAnalysis); return(report); }