public DomainModelResponse Add(QuestionnaireAddRequest request)
        {
            Questionnaire Questionnaire = new Questionnaire();
            Questionnaire.QuestionnaireCode = request.QuestionnaireCode;
            Questionnaire.IsATemplate = request.IsATemplate;
            Questionnaire.LastChangedTime = DateTime.UtcNow;
            StringBuilder qIds = new StringBuilder();
            if(request.QuestionIds != null)
            {
                foreach(int i in request.QuestionIds)
                {
                    qIds.Append(i.ToString());
                    qIds.Append(",");
                }
                qIds.Remove(qIds.Length - 1, 1);
            }
            if(request.Questions != null)
            {
                List<QuestionType> questionTypes = _repQuestionType.Get().ToList();
                foreach(var q in request.Questions)
                {
                    EntityModel.Question eQ = new EntityModel.Question()
                    {
                        QuestionText = q.questionText,
                        LastChangedTime = DateTime.UtcNow,
                        QuestionType = questionTypes.Where(x => x.Type.Equals(q.questionType, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(),
                        QuestionTypeId = questionTypes.Where(x => x.Type.Equals(q.questionType, StringComparison.OrdinalIgnoreCase)).FirstOrDefault().QuestionTypeId,

                    };
                    _repQuestion.Add(eQ);
                    _uow.Commit();
                    eQ = _repQuestion.Get(filter: f => f.QuestionText == q.questionText).FirstOrDefault();
                    qIds.Append(eQ.QuestionId.ToString());
                    qIds.Append(",");
                    foreach(var ans in q.answerChoices)
                    {
                        AnswerChoice ac = new AnswerChoice()
                        {
                            Answer = ans,
                            Question = eQ,
                            QuestionId = eQ.QuestionId
                        };
                        _repAnswerChoice.Add(ac);
                    }
                }
                qIds.Remove(qIds.Length - 1, 1);
            }
            Questionnaire.QuestionSet = qIds.ToString();
            _repQuestionnaire.Add(Questionnaire);
            _uow.Commit();
            _questionnaireResponse.addResponse("Add", MessageCodes.InfoCreatedSuccessfully, "questionnaire : " + request.QuestionnaireCode);
            return _questionnaireResponse;
        }
 public async Task<bool> AddQuestionnaire(QuestionnaireAddRequest request)
 {
     try
     {
         HttpResponseMessage httpResp = apiCom.executePostAPI("Questionnaire", JsonConvert.SerializeObject(request));
         if (httpResp.IsSuccessStatusCode)
         {
             return true;
         }
         else
         {
             return false;
         }
     }
     catch
     {
         return false;
     }
 }
        public async Task<ActionResult> Create(CreateCourseModel model)
        {
            if (ModelState.IsValid)
            {
                CourseAddRequest car = new CourseAddRequest()
                {
                    CourseCode = model.CourseCode,
                    CourseName = model.CourseName,
                    DesiredSkillSets = model.DesiredSkillSets,
                    GroupSize = model.GroupSize,
                    CourseDescription = model.CourseDescription,
                    PreferSimiliarSkillSet = model.PreferSimiliarSkillSet,
                    userList = new List<CourseNewUser>()
                };
                switch(model.GroupType)
                {
                    case "Study Group":
                        car.GroupType = "Study";
                        break;
                    case "Project Group (Open Projects)":
                        car.GroupType = "OpenProject";
                        break;
                    case "Project Group (Closed Projects)":
                        car.GroupType = "ClosedProject";
                        break;
                }

                if(model.Users != null && model.Users.Count > 0)
                {
                    foreach(var user in model.Users)
                    {
                        car.userList.Add(new CourseNewUser()
                        {
                            emailId = user.emailId,
                            roleCode = user.role.ToString()
                        });
                    }
                }
                
                bool result = _courseCom.AddCourse(car).Result;
                if (result) //Course is added, now generate intelligent question set and add questionnaire
                {
                    QuestionnaireAddRequest qar = new QuestionnaireAddRequest()
                    {
                         IsATemplate = false,
                         QuestionnaireCode = DateTime.UtcNow.ToString("MMddyyHmmss"),
                         Questions = new List<DomainDto.Question>()
                    };
                    List<string> timeZones = TimeZoneInfo.GetSystemTimeZones().Select(x => x.DisplayName).ToList();
                    qar.Questions.Add(new DomainDto.Question()
                    {
                         questionText = "In what timezone are you mostly available?",
                         questionType = "MultipleChoice",
                         answerChoices = timeZones
                    });
                    List<string> timeSlots = new List<string>()
                    {
                        "6:00 AM - 9:00 AM",
                        "9:00 AM - 12:00 PM",
                        "12:00 PM - 3:00 PM",
                        "3:00 PM - 6:00 PM",
                        "6:00 PM - 9:00 PM",
                        "9:00 PM - 12:00 AM",
                        "Anytime",
                        "I am not available"

                    };
                    qar.Questions.Add(new DomainDto.Question()
                    {
                        questionText = "During weekday, what time are you available for group calls?",
                        questionType = "MultipleChoice",
                        answerChoices = timeSlots
                    });
                    qar.Questions.Add(new DomainDto.Question()
                    {
                        questionText = "During weekends, what time are you available for group calls?",
                        questionType = "MultipleChoice",
                        answerChoices = timeSlots
                    });

                    if(model.GenerateIntelligentQuestionnaire)
                    {
                        if(model.DesiredSkillSets != null)
                        {
                            foreach(var skl in model.DesiredSkillSets.Split(','))
                            {
                                qar.Questions.Add(new DomainDto.Question()
                                    {
                                        questionText = "What is your expertise in " + skl,
                                        questionType = "MultipleChoice",
                                        answerChoices = new List<string>() { "Beginner", "Intermediate", "Expert"}
                                    });
                            }
                        }
                    }

                    if(model.Questions != null && model.Questions.Count > 0)
                    {
                        foreach(var q in model.Questions)
                        {
                            qar.Questions.Add(new DomainDto.Question()
                                {
                                    questionType = q.QuestionType,
                                    questionText  = q.QuestionText,
                                    answerChoices = q.AnswerChoices.Split(',').ToList()
                                });
                        }
                    }
                    bool res = _questionnaireCom.AddQuestionnaire(qar).Result;
                    if(res)//Questionnaire is added, update course with questionnaire
                    {
                        CourseUpdateRequest cur = new CourseUpdateRequest()
                        {
                            CourseCode = model.CourseCode,
                            QuestionnaireCode = qar.QuestionnaireCode
                        };
                        bool resp = _courseCom.UpdateCourse(cur).Result;
                        if(!resp)
                        {
                            ModelState.AddModelError("", "Oops! Course was added, but someting wrong happened while adding questionnaire to course");
                            return View(model);
                        }
                    }
                    MvcApplication.courses.Add(model.CourseCode, model.CourseName);
                    MvcApplication.courseDescription.Add(model.CourseCode, model.CourseDescription);
                    return RedirectToAction("Teacher", "Course");
                }
            }
            ModelState.AddModelError("", "Oops! Something wrong happened! Please try again.");
            return View(model);
        }