Exemple #1
0
        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);
        }
Exemple #2
0
        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));
        }