예제 #1
0
        public async Task <int> CreateAsync(int surveyId, string surveyTitle, string surveyDescription)
        {
            var surveyReport = new SurveyReport(surveyId, surveyTitle, surveyDescription);
            await _surveyReportRepository.AddAsync(surveyReport);

            var survey = await _surveyRepository.GetByIdWithQuestionsAsync(surveyId);

            foreach (var question in survey.Questions)
            {
                var questionReport =
                    new QuestionReport(question.Content, question.Select, 0, question.QuestionPosition);
                surveyReport.AddQuestionReport(questionReport);
                await _questionReportRepository.AddAsync(questionReport);

                foreach (var fieldData in question.FieldData)
                {
                    switch (questionReport.Select)
                    {
                    case "short-answer":
                    case "long-answer":
                    {
                        var dataSet = new DataSet();
                        questionReport.AddDataSet(dataSet);
                        await _dataSetRepository.AddAsync(dataSet);

                        await _questionReportRepository.UpdateAsync(questionReport);

                        foreach (var label in questionReport.Labels)
                        {
                            dataSet.AddData("0");
                            await _dataSetRepository.UpdateAsync(dataSet);
                        }
                    }
                    break;

                    case "dropdown-menu":
                    {
                        foreach (var choiceOption in fieldData.ChoiceOptions)
                        {
                            questionReport.AddLabel(choiceOption.ViewValue);
                        }
                        var dataSet = new DataSet();
                        questionReport.AddDataSet(dataSet);
                        await _dataSetRepository.AddAsync(dataSet);

                        await _questionReportRepository.UpdateAsync(questionReport);

                        foreach (var label in questionReport.Labels)
                        {
                            dataSet.AddData("0");
                            await _dataSetRepository.UpdateAsync(dataSet);
                        }
                    }
                    break;

                    case "linear-scale":
                    {
                        for (var i = 1; i <= fieldData.MaxValue; i++)
                        {
                            questionReport.AddLabel(i.ToString());
                        }
                        var dataSet = new DataSet(question.Content);
                        questionReport.AddDataSet(dataSet);
                        await _dataSetRepository.AddAsync(dataSet);

                        await _questionReportRepository.UpdateAsync(questionReport);

                        foreach (var label in questionReport.Labels)
                        {
                            dataSet.AddData("0");
                            await _dataSetRepository.UpdateAsync(dataSet);
                        }
                    }
                    break;

                    case "multiple-grid":
                    case "single-grid":
                    {
                        foreach (var row in fieldData.Rows)
                        {
                            questionReport.AddLabel(row.Input);
                        }
                        foreach (var choiceOption in fieldData.ChoiceOptions)
                        {
                            var dataSet = new DataSet(choiceOption.ViewValue);
                            questionReport.AddDataSet(dataSet);
                            await _dataSetRepository.AddAsync(dataSet);

                            await _questionReportRepository.UpdateAsync(questionReport);

                            foreach (var row in fieldData.Rows)
                            {
                                dataSet.AddData("0");
                                await _dataSetRepository.UpdateAsync(dataSet);
                            }
                        }
                    }
                    break;

                    case "single-choice":
                    case "multiple-choice":
                    {
                        foreach (var choiceOption in fieldData.ChoiceOptions)
                        {
                            questionReport.AddLabel(choiceOption.ViewValue);
                        }
                        var dataSet = new DataSet(question.Content);
                        questionReport.AddDataSet(dataSet);
                        await _dataSetRepository.AddAsync(dataSet);

                        await _questionReportRepository.UpdateAsync(questionReport);

                        foreach (var label in questionReport.Labels)
                        {
                            dataSet.AddData("0");
                            await _dataSetRepository.UpdateAsync(dataSet);
                        }
                    }
                    break;
                    }
                }
            }
            return(surveyReport.Id);
        }
예제 #2
0
        public async Task <int> AddFieldDataAnswerToQuestionAnswerAsync(int surveyId, int questionAnswerId, string input,
                                                                        string minLabel, string maxLabel)
        {
            var surveyReport = await _surveyReportRepository.GetBySurveyIdAsync(surveyId);

            var questionAnswer = await _questionAnswerRepository.GetByIdAsync(questionAnswerId);

            switch (questionAnswer.Select)
            {
            case "short-answer":
            {
                var fieldDataAnswer = new FieldDataAnswer(input);
                questionAnswer.AddFieldDataAnswer(fieldDataAnswer);
                await _fieldDataAnswerRepository.AddAsync(fieldDataAnswer);

                var questionReport = await _questionReportRepository.GetBySurveyReportAsync(surveyReport.Id,
                                                                                            questionAnswer.Content, questionAnswer.Select);

                foreach (var dataSet in questionReport.DataSets)
                {
                    if (!questionAnswer.IsRequired)
                    {
                        if (input == "")
                        {
                            questionReport.DeleteAnswer();
                        }
                    }
                    dataSet.AddData(fieldDataAnswer.Input);
                    await _dataSetRepository.UpdateAsync(dataSet);
                }
                return(fieldDataAnswer.Id);
            }

            case "long-answer":
            {
                var fieldDataAnswer = new FieldDataAnswer(input);
                questionAnswer.AddFieldDataAnswer(fieldDataAnswer);
                await _fieldDataAnswerRepository.AddAsync(fieldDataAnswer);

                var questionReport =
                    await _questionReportRepository.GetBySurveyReportAsync(surveyReport.Id, questionAnswer.Content,
                                                                           questionAnswer.Select);

                foreach (var dataSet in questionReport.DataSets)
                {
                    if (!questionAnswer.IsRequired)
                    {
                        if (input == "")
                        {
                            questionReport.DeleteAnswer();
                        }
                    }
                    dataSet.AddData(fieldDataAnswer.Input);
                    await _dataSetRepository.UpdateAsync(dataSet);
                }
                return(fieldDataAnswer.Id);
            }

            case "single-choice":
            {
                var fieldDataAnswer = new FieldDataAnswer();
                questionAnswer.AddFieldDataAnswer(fieldDataAnswer);
                await _fieldDataAnswerRepository.AddAsync(fieldDataAnswer);

                return(fieldDataAnswer.Id);
            }

            case "multiple-choice":
            {
                var fieldDataAnswer = new FieldDataAnswer();
                questionAnswer.AddFieldDataAnswer(fieldDataAnswer);
                await _fieldDataAnswerRepository.AddAsync(fieldDataAnswer);

                return(fieldDataAnswer.Id);
            }

            case "dropdown-menu":
            {
                var fieldDataAnswer = new FieldDataAnswer();
                questionAnswer.AddFieldDataAnswer(fieldDataAnswer);
                await _fieldDataAnswerRepository.AddAsync(fieldDataAnswer);

                return(fieldDataAnswer.Id);
            }

            case "linear-scale":
            {
                var fieldDataAnswer = new FieldDataAnswer(minLabel, maxLabel);
                questionAnswer.AddFieldDataAnswer(fieldDataAnswer);
                await _fieldDataAnswerRepository.AddAsync(fieldDataAnswer);

                return(fieldDataAnswer.Id);
            }

            case "single-grid":
            {
                var fieldDataAnswer = new FieldDataAnswer();
                questionAnswer.AddFieldDataAnswer(fieldDataAnswer);
                await _fieldDataAnswerRepository.AddAsync(fieldDataAnswer);

                return(fieldDataAnswer.Id);
            }

            case "multiple-grid":
            {
                var fieldDataAnswer = new FieldDataAnswer();
                questionAnswer.AddFieldDataAnswer(fieldDataAnswer);
                await _fieldDataAnswerRepository.AddAsync(fieldDataAnswer);

                return(fieldDataAnswer.Id);
            }

            default:
                throw new Exception("invalid select value");
            }
        }