public DTOSurvey ConvertSurveyToDTO(shared.Survey objSurvey) { DTOSurvey objDTOSurvey = new DTOSurvey(); objDTOSurvey.Id = objSurvey.Id; objDTOSurvey.SurveyName = objSurvey.SurveyName; objDTOSurvey.SurveyItems = new List <DTOSurveyItem>(); foreach (var SurveyItem in objSurvey.SurveyItems) { DTOSurveyItem objDTOSurveyItem = new DTOSurveyItem(); objDTOSurveyItem.Id = SurveyItem.Id; objDTOSurveyItem.ItemLabel = SurveyItem.ItemLabel; objDTOSurveyItem.ItemType = SurveyItem.ItemType; objDTOSurveyItem.Position = SurveyItem.Position; objDTOSurveyItem.Required = SurveyItem.Required; objDTOSurveyItem.SurveyItemOptions = new List <DTOSurveyItemOption>(); foreach (var SurveyItemOption in SurveyItem.SurveyItemOptions.OrderBy(x => x.Id)) { DTOSurveyItemOption objDTOSurveyItemOption = new DTOSurveyItemOption(); objDTOSurveyItemOption.Id = SurveyItemOption.Id; objDTOSurveyItemOption.OptionLabel = SurveyItemOption.OptionLabel; objDTOSurveyItem.SurveyItemOptions.Add(objDTOSurveyItemOption); } objDTOSurvey.SurveyItems.Add(objDTOSurveyItem); } return(objDTOSurvey); }
public async Task <ActionResult <List <DTOSurveyItem> > > GetSurveyResults([FromRoute] int surveyId, LoadDataArgs loadDataArgs) { IQueryable <SurveyItem> query = _context.SurveyItems .Where(x => x.SurveyId == surveyId) .Where(x => x.ItemType != "Text Area") .Include(x => x.SurveyItemOptions) .OrderBy(x => x.Position).AsQueryable(); if (!string.IsNullOrEmpty(loadDataArgs.Filter)) { query = query.Where(loadDataArgs.Filter); } if (!string.IsNullOrEmpty(loadDataArgs.OrderBy)) { query = query.OrderBy(loadDataArgs.OrderBy); } List <SurveyItem> Results = query.Skip(loadDataArgs.Skip.Value).Take(loadDataArgs.Top.Value).ToList(); List <DTOSurveyItem> SurveyResultsCollection = new List <DTOSurveyItem>(); foreach (SurveyItem SurveyItem in Results) { DTOSurveyItem NewDTOSurveyItem = new DTOSurveyItem(); NewDTOSurveyItem.Id = SurveyItem.Id; NewDTOSurveyItem.ItemLabel = SurveyItem.ItemLabel; NewDTOSurveyItem.ItemType = SurveyItem.ItemType; NewDTOSurveyItem.Position = SurveyItem.Position; NewDTOSurveyItem.Required = SurveyItem.Required; List <AnswerResponse> ColAnswerResponse = new List <AnswerResponse>(); if ((SurveyItem.ItemType == "Date") || (SurveyItem.ItemType == "Date Time")) { var TempColAnswerResponse = _context.SurveyAnswers .Where(x => x.SurveyItemId == SurveyItem.Id) .GroupBy(n => n.AnswerValueDateTime) .Select(n => new AnswerResponse { OptionLabel = n.Key.Value.ToString(), Responses = n.Count() } ).OrderBy(n => n.OptionLabel).ToList(); foreach (var item in TempColAnswerResponse) { string ShortDate = item.OptionLabel; try { DateTime dtTempDate = Convert.ToDateTime(item.OptionLabel); ShortDate = dtTempDate.ToShortDateString(); } catch { // use orginal string } ColAnswerResponse.Add( new AnswerResponse { OptionLabel = ShortDate, Responses = item.Responses } ); } } else { ColAnswerResponse = _context.SurveyAnswers .Where(x => x.SurveyItemId == SurveyItem.Id) .GroupBy(n => n.AnswerValue) .Select(n => new AnswerResponse { OptionLabel = n.Key, Responses = n.Count() } ).OrderBy(n => n.OptionLabel).ToList(); } if (ColAnswerResponse.Count > 10) { // Only take top 10 NewDTOSurveyItem.AnswerResponses = ColAnswerResponse .OrderByDescending(x => x.Responses) .Take(10).ToList(); // Put remaining items in "Other" var ColOtherItems = ColAnswerResponse.OrderByDescending(x => x.Responses).Skip(10).ToList(); var SumOfOther = ColOtherItems.Sum(x => x.Responses); NewDTOSurveyItem.AnswerResponses.Add(new AnswerResponse() { OptionLabel = "Other", Responses = SumOfOther }); } else { NewDTOSurveyItem.AnswerResponses = ColAnswerResponse; } SurveyResultsCollection.Add(NewDTOSurveyItem); } return(Ok(SurveyResultsCollection)); }