示例#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);
        }