/// <summary> /// Reads the data for this import from the file specified. /// </summary> /// <param name="filename">The file to read from.</param> /// <param name="errorMessage">The error message if unsuccessful.</param> /// <returns>True if read successfully, false otherwise.</returns> public override bool ReadFromFile(string filename, out string errorMessage) { _pollsProvider = new PollsProvider(); errorMessage = string.Empty; // Try to deserialize the file into the constituency results. List <OpinionPoll> opinionPolls = new List <OpinionPoll>(); try { using (StreamReader sr = new StreamReader(filename, Encoding.Default)) { CsvReader csv = new CsvReader(sr, CultureInfo.CurrentCulture); bool foundStartDataTag = false; while (csv.Read()) { // Get the first field. string pollingCompany = csv.GetField <string>(0); // Ignore empty entries. if (string.IsNullOrWhiteSpace(pollingCompany)) { continue; } // If haven't found the header line see if this is it if (!foundStartDataTag) { if (pollingCompany.Contains(DataStartTag)) { foundStartDataTag = true; } continue; } // If here on a line with data try to convert it into a record. OpinionPoll poll = GetOpinionPollFromRecord(csv, pollingCompany); if (poll != null) { opinionPolls.Add(poll); } } } } catch (Exception e) { errorMessage = e.ToString(); return(false); } if (opinionPolls.Any()) { _pollsProvider = new PollsProvider(opinionPolls); } return(true); }
static void Main(string[] args) { var n = int.Parse(Console.ReadLine()); var family = new Family(); var people = new OpinionPoll(); for (int i = 0; i < n; i++) { var input = Console.ReadLine().Split(); people.AddPerson(new Person { Name = input[0], Age = int.Parse(input[1]) }); //family.AddMember(new Person { Name = input[0], Age = int.Parse(input[1])}); } // Console.WriteLine(family.GetOldestMember()); Console.WriteLine(people); }
public static void Main() { var n = int.Parse(Console.ReadLine()); var poll = new OpinionPoll(); for (var person = 0; person < n; person++) { var tokens = Console.ReadLine().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var name = tokens[0]; var age = int.Parse(tokens[1]); var currentPerson = new Person(name, age); poll.AddMember(currentPerson); } foreach (var person in poll.PeopleList.OrderBy(x => x.Name)) { Console.WriteLine($"{person.Name} - {person.Age}"); } }
public async Task <IActionResult> SendSurveyResponses([FromBody] SurveyAnswerRequest request) { Response <SurveyStat> response = new Response <SurveyStat>(); try { var isFaulted = IsAuthenticationFaulted(UserIdentity); if (isFaulted) { response = new Response <SurveyStat> { ResponseBody = new SuccessResponse <SurveyStat> { Data = null, ResponseCode = "E009", ResponseMessage = "You do not have the permission to carry out this operation, kindly login and try again." } }; return(Unauthorized(response.ResponseBody)); } if (request.Responses.Count == 0) { ModelState.AddModelError("questionId", "questionId is required!"); ModelState.AddModelError("optionId", "optionId is required!"); } if (!ModelState.IsValid) { var requestResponse = ApiResponseFormatter.RequestResponse(ModelState); return(BadRequest(requestResponse)); } User userCredentials; Survey survey; using (var _context = new MiniSurveyContext()) { userCredentials = await _context.Users.Where(x => x.Id == UserIdentity) .Include(x => x.UserResponses) .FirstOrDefaultAsync(); survey = await _context.Surveys.Where(a => a.Id == request.SurveyId).FirstOrDefaultAsync(); } if (userCredentials == null) { response = new Response <SurveyStat> { ResponseBody = new SuccessResponse <SurveyStat> { Data = null, ResponseCode = "E003", ResponseMessage = "You do not have the permission to submit your response. Kindly login or register to share your opinion." } }; return(Unauthorized(response.ResponseBody)); } if (survey == null) { response = new Response <SurveyStat> { ResponseBody = new SuccessResponse <SurveyStat> { Data = null, ResponseCode = "E012", ResponseMessage = "The survey you selected does not exist. Kindly try again later." } }; return(NotFound(response.ResponseBody)); } if (userCredentials.UserResponses.Count == 0) { List <Models.UserResponse> selectedResponses = new List <Models.UserResponse>(); foreach (var userResponse in request.Responses) { Models.UserResponse selectedResponse = new Models.UserResponse { QuestionId = userResponse.QuestionId, OptionId = userResponse.OptionId, UserId = userCredentials.Id, DateResponded = DateTime.UtcNow, SurveyId = request.SurveyId, TextResponse = userResponse.TextAnswer }; selectedResponses.Add(selectedResponse); } using (var _context = new MiniSurveyContext()) { _context.UserResponses.AddRange(selectedResponses); await _context.SaveChangesAsync(); } } List <Models.UserResponse> userResponses = new List <Models.UserResponse>(); List <Models.QuestionOption> questionOptions = new List <QuestionOption>(); using (var _context = new MiniSurveyContext()) { userResponses = await _context.UserResponses.ToListAsync(); questionOptions = await _context.QuestionOptions.Include(a => a.Question).Include(a => a.Option).ToListAsync(); } var totalUserIds = userResponses.Select(a => a.UserId).Distinct().ToList(); var totalQuestionIds = userResponses.Select(a => a.QuestionId).Distinct().ToList(); var totalUsersCount = totalUserIds.Count; var totalQuestionsCount = totalQuestionIds.Count; List <Poll> polls = new List <Poll>(); foreach (var questionId in totalQuestionIds) { var selectedQuestionOptions = questionOptions.Where(a => a.QuestionId == questionId); var questionResponses = userResponses.Where(a => a.QuestionId == questionId); var question = selectedQuestionOptions.FirstOrDefault().Question; List <OpinionPoll> questionOpinions = new List <OpinionPoll>(); if (selectedQuestionOptions != null) { foreach (var selectedQuestionOption in selectedQuestionOptions) { var option = selectedQuestionOption.Option; var responseCount = questionResponses.Count(a => a.OptionId == option.Id); var numberDivision = (double)responseCount / (double)totalUsersCount; var responsePercentage = numberDivision * 100; var roundedUpPercentage = Math.Round(responsePercentage, 1); OpinionPoll opinionPoll = new OpinionPoll { OptionId = option.Id, Option = option.Text, Percentage = roundedUpPercentage }; questionOpinions.Add(opinionPoll); } } Poll poll = new Poll { QuestionId = questionId, Question = question.Text, OpinionPolls = questionOpinions }; polls.Add(poll); } SurveyStat stat = new SurveyStat { Polls = polls, TotalParticipants = totalUsersCount, TotalQuestions = totalQuestionsCount }; response = new Response <SurveyStat> { ResponseBody = new SuccessResponse <SurveyStat> { Data = stat, ResponseCode = "00", ResponseMessage = "You have successfully shared your opinion in the survey. Kindly view our stats to compare your responses with those of others." } }; return(Ok(response.ResponseBody)); } catch (Exception) { response = new Response <SurveyStat> { ResponseBody = new SuccessResponse <SurveyStat> { Data = null, ResponseCode = "E001", ResponseMessage = "Sorry, we are unable to process your request at the moment, kindly try again later." } }; return(StatusCode(500, response.ResponseBody)); } }
public async Task <IActionResult> SurveyResponses(int surveyId) { Response <SurveyStat> response = new Response <SurveyStat>(); try { var isFaulted = IsAuthenticationFaulted(UserIdentity); if (isFaulted) { response = new Response <SurveyStat> { ResponseBody = new SuccessResponse <SurveyStat> { Data = null, ResponseCode = "E009", ResponseMessage = "You do not have the permission to carry out this operation, kindly login and try again." } }; return(Unauthorized(response.ResponseBody)); } User userCredentials; using (var _context = new MiniSurveyContext()) { userCredentials = await _context.Users.Where(x => x.Id == UserIdentity) .Include(x => x.UserResponses) .FirstOrDefaultAsync(); } if (userCredentials == null) { response = new Response <SurveyStat> { ResponseBody = new SuccessResponse <SurveyStat> { Data = null, ResponseCode = "E003", ResponseMessage = "You have not registered so you cannot view the survey review or statistics. Kindly register to participate." } }; return(Unauthorized(response.ResponseBody)); } if (userCredentials.UserResponses.Count == 0) { response = new Response <SurveyStat> { ResponseBody = new SuccessResponse <SurveyStat> { Data = null, ResponseCode = "E005", ResponseMessage = "You have not taken part in the survey and therefore cannot view the survey statistics. Kindly answer questions to participate." } }; return(Ok(response.ResponseBody)); } List <Models.UserResponse> userResponses = new List <Models.UserResponse>(); List <Models.QuestionOption> questionOptions = new List <QuestionOption>(); using (var _context = new MiniSurveyContext()) { userResponses = await _context.UserResponses.Where(a => a.SurveyId == surveyId).ToListAsync(); questionOptions = await _context.QuestionOptions.Include(a => a.Question).Include(a => a.Option).ToListAsync(); } var totalUserIds = userResponses.Select(a => a.UserId).Distinct().ToList(); var totalQuestionIds = userResponses.Select(a => a.QuestionId).Distinct().ToList(); var totalUsersCount = totalUserIds.Count; var totalQuestionsCount = totalQuestionIds.Count; List <Poll> polls = new List <Poll>(); foreach (var questionId in totalQuestionIds) { var selectedQuestionOptions = questionOptions.Where(a => a.QuestionId == questionId); var questionResponses = userResponses.Where(a => a.QuestionId == questionId); var question = selectedQuestionOptions.FirstOrDefault().Question; List <OpinionPoll> questionOpinions = new List <OpinionPoll>(); if (selectedQuestionOptions != null) { foreach (var selectedQuestionOption in selectedQuestionOptions) { var option = selectedQuestionOption.Option; var responseCount = questionResponses.Count(a => a.OptionId == option.Id); var numberDivision = (double)responseCount / (double)totalUsersCount; var responsePercentage = numberDivision * 100; var roundedUpPercentage = Math.Round(responsePercentage, 1); OpinionPoll opinionPoll = new OpinionPoll { OptionId = option.Id, Option = option.Text, Percentage = roundedUpPercentage }; questionOpinions.Add(opinionPoll); } } Poll poll = new Poll { QuestionId = questionId, Question = question.Text, OpinionPolls = questionOpinions }; polls.Add(poll); } SurveyStat stat = new SurveyStat { Polls = polls, TotalParticipants = totalUsersCount, TotalQuestions = totalQuestionsCount }; response = new Response <SurveyStat> { ResponseBody = new SuccessResponse <SurveyStat> { Data = stat, ResponseCode = "00", ResponseMessage = "You have successfully shared your opinion in the survey. Kindly view our stats to compare your responses with those of others." } }; return(Ok(response.ResponseBody)); } catch (Exception) { response = new Response <SurveyStat> { ResponseBody = new SuccessResponse <SurveyStat> { Data = null, ResponseCode = "E001", ResponseMessage = "Sorry, we are unable to process your request at the moment, kindly try again later." } }; return(StatusCode(500, response.ResponseBody)); } }