public static void Map_Exam_To_AssignedExam(Exam exam, AssignedExam assignedExam)
 {
     assignedExam.AutoPointsCalculation = exam.AutoPointsCalculation;
     assignedExam.Duration = exam.Duration;
     assignedExam.Title    = exam.Title;
     if (exam.Questions.Count > 0)
     {
         foreach (var q in exam.Questions)
         {
             Question question = new Question();
             question.Text = q.Text;
             question.QuestionNumInExam = q.QuestionNumInExam;
             question.Points            = q.Points;
             if (q.Answers.Count > 0)
             {
                 foreach (var a in q.Answers)
                 {
                     Answer answer = new Answer();
                     answer.Text = a.Text;
                     answer.AnswerNumInQuestion = a.AnswerNumInQuestion;
                     answer.IsCorrect           = a.IsCorrect;
                     question.Answers.Add(answer);
                 }
             }
             assignedExam.Questions.Add(question);
         }
     }
 }
        public async Task <PartialViewResult> AssignExamToCourse(CreateAssignedExamVM createAssignedExamVM)
        {
            if (!ModelState.IsValid)
            {
                ViewBag.ExamsSelectList = await GenerateExamsSelectList(createAssignedExamVM.TeacherId);

                return(PartialView("_CreateAssignedExamPartial", createAssignedExamVM));
            }

            var exam = await _unitOfWork.Exams.GetNotAssignedFullExamAsync(createAssignedExamVM.ExamId);

            if (exam == null)
            {
                ModelState.AddModelError(nameof(CreateAssignedExamVM.ExamId), "Exam Not Found");
            }

            var course = await _unitOfWork.Courses.GetAsync(createAssignedExamVM.CourseId);

            if (course == null)
            {
                ModelState.AddModelError("", "Course Not Found, Please Contact Admin");
            }
            else
            {
                if (course.StartDate > createAssignedExamVM.StartDate || course.FinishDate < createAssignedExamVM.StartDate)
                {
                    ModelState.AddModelError(nameof(CreateAssignedExamVM.StartDate),
                                             $"Exam start date must be within course time limits: {course.StartDate.ToShortDateString()} - {course.FinishDate.ToShortDateString()}");
                }
                if (course.FinishDate < createAssignedExamVM.FinishDate || course.StartDate > createAssignedExamVM.FinishDate)
                {
                    ModelState.AddModelError(nameof(CreateAssignedExamVM.FinishDate),
                                             $"Exam finish date must be within course time limits: {course.StartDate.ToShortDateString()} - {course.FinishDate.ToShortDateString()}");
                }
            }

            if (!ModelState.IsValid)
            {
                ViewBag.ExamsSelectList = await GenerateExamsSelectList(createAssignedExamVM.TeacherId);

                return(PartialView("_CreateAssignedExamPartial", createAssignedExamVM));
            }

            AssignedExam assignedExam = _mapper.Map <AssignedExam>(createAssignedExamVM);

            assignedExam.Course = course;

            assignedExam.ExamType = ExamType.AssignedExam;

            CustomMappings.Map_Exam_To_AssignedExam(exam, assignedExam);

            createAssignedExamVM.IsCreated = true;

            await _unitOfWork.AssignedExams.AddAsync(assignedExam);

            await _unitOfWork.SaveAsync();

            return(PartialView("_CreateAssignedExamPartial", createAssignedExamVM));
        }
        // GET: ExamsController/Delete/5
        public async Task <ActionResult> Delete(long id, Actions returnAction)
        {
            var c    = HttpContext.Request.Path;
            var exam = await _unitOfWork.Exams.GetExamWithQuestionsAndAnswerAsync(id);

            if (exam == null)
            {
                return(NotFound());
            }

            _unitOfWork.Exams.Remove(exam);
            await _unitOfWork.SaveAsync();

            if (returnAction == Actions.Details)
            {
                AssignedExam assignedExam = exam as AssignedExam;
                if (assignedExam != null)
                {
                    return(RedirectToAction(nameof(CoursesController.Details), "Courses", new { id = assignedExam.CourseId }));
                }
            }
            return(RedirectToAction(nameof(List)));
        }