예제 #1
0
        public IActionResult SetOpenedQuestionsAnswers(IFormCollection AnswersForm)
        {
            try
            {
                var QuestionUserAnswer = new Dictionary <string, string>();
                foreach (var key in AnswersForm)
                {
                    if (!key.Equals(AnswersForm.Last()))
                    {
                        QuestionUserAnswer.Add(key.Key, key.Value);
                    }
                }
                var exID = HttpContext.Session.GetInt32("ExamID");
                using (var context = new ExamPlatformDbContext())
                {
                    List <ExamOpenedQuestions> UserAnswers = SetUserAnswers(context, QuestionUserAnswer, exID);

                    UserAnswers.ForEach(x => context.ExamOpenedQuestions.Update(x));
                    context.SaveChanges();
                    return(View("ExamFinished"));
                }
            }
            catch (Exception ex)
            {
                logger.Error("ExamsController - SetOpenedQuestionsAnswers " + ex.Message);
                return(View());
            }
        }
        /// <summary>Sends the email with informations associated with results of exams for each students.</summary>
        /// <param name="ExamIDList">The exam identifier list.</param>
        /// <param name="context">The context.</param>
        public ActionResult SendEmail(IFormCollection StudentData)
        {
            using (var context = new ExamPlatformDbContext())
            {
                try
                {
                    String getGrade    = StudentData.ElementAt(5).Value;
                    String withoutZero = getGrade.Substring(0, 1);
                    double grade       = Convert.ToDouble(withoutZero);

                    String getScore = StudentData.ElementAt(6).Value;
                    double score    = Convert.ToDouble(getScore);

                    String   getDate = StudentData.ElementAt(3).Value;
                    DateTime date    = Convert.ToDateTime(getDate);

                    String maxExamScore = StudentData.ElementAt(7).Value;
                    double maxScore     = Convert.ToDouble(maxExamScore);

                    UserEmailInfoModel user = new UserEmailInfoModel
                                              (
                        StudentData.ElementAt(0).Value,
                        StudentData.ElementAt(1).Value,
                        StudentData.ElementAt(2).Value,
                        StudentData.ElementAt(4).Value,
                        grade,
                        date,
                        score,
                        maxScore
                                              );

                    JObject messageTemplate = RenderMessageTemplateFromFile();
                    Dictionary <string, string> emailAccount = GetEmailAccountFromDB();
                    var purveyed = sendMessage(emailAccount, user, messageTemplate);

                    var studentResult = context.Exam
                                        .Include(e => e.ExamResult)
                                        .Include(a => a.Account)
                                        .Where(e =>
                                               e.DateOfExam.Date == user.ExamDate.Date &&
                                               e.DateOfExam.Hour == user.ExamDate.Hour &&
                                               e.DateOfExam.Minute == user.ExamDate.Minute)
                                        .Select(z => z.ExamResult).ToList();

                    studentResult.First().ifResultSent = purveyed;

                    context.Results.Update(studentResult.First());
                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    logger.Error("StudentExamsController - SendEmail " + ex.Message);
                }
                return(RedirectToAction("ShowAllCheckedExams"));
            }
        }
예제 #3
0
        public IActionResult SetNewAccountIntoDatabase(Accounts NewAccount)
        {
            try
            {
                bool ifNewUsernameExistInDB(String usernameFromUserLoginToCheck, List <Accounts> accountsListFromDB)
                {
                    foreach (Accounts account in accountsListFromDB)
                    {
                        if (account.Username == usernameFromUserLoginToCheck)
                        {
                            return(true);

                            throw new Exception("The username is occupied");
                        }
                    }
                    return(false);
                }

                string newUsername = NewAccount.Username;
                using (var context = new ExamPlatformDbContext())
                {
                    var accountsList = (from securityAccount
                                        in context.Account
                                        select securityAccount).ToList();

                    if (!ifNewUsernameExistInDB(newUsername, accountsList))
                    {
                        NewAccount.Username = newUsername;
                        NewAccount.Password = HashPass(NewAccount.Password);
                        context.Account.Add(NewAccount);
                        context.SaveChanges();
                        HttpContext.Session.SetInt32("UserID", NewAccount.AccountsID);

                        return(View("LogIn", NewAccount));
                    }
                    else
                    {
                        return(View("RegisterError"));
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error("AccountsController - SetNewAccountIntoDatabase " + ex.Message);
                return(View());
            }
        }
예제 #4
0
        public IActionResult SetClosedQuestionsAnswers(IFormCollection AnswersForm)
        {
            try
            {
                var QuestionAnswer = new Dictionary <string, string>();
                foreach (var key in AnswersForm)
                {
                    if (!key.Equals(AnswersForm.Last()))
                    {
                        QuestionAnswer.Add(key.Key, key.Value);
                    }
                }

                var exID = HttpContext.Session.GetInt32("ExamID");
                using (var context = new ExamPlatformDbContext())
                {
                    var examCQuestions = (from ex
                                          in context.ExamClosedQuestions
                                          where ex.ExamsID == exID
                                          select ex.ClosedQuestions).ToList();

                    Results examResults = (from ex
                                           in context.Results
                                           where ex.ExamID == exID
                                           select ex).Single();

                    examResults = SetExamScoreFromClosedQuestionAnswers(examCQuestions, QuestionAnswer, examResults);
                    context.Results.Update(examResults);
                    context.SaveChanges();

                    var examQuestions = context.OpenedQuestion
                                        .Where(q => q.ExamOpenedQuestions.All(x => x.ExamsID == exID))
                                        .Select(q => q).ToList();

                    return(RedirectToAction("ShowOpenedQuestions"));
                }
            }
            catch (Exception ex)
            {
                logger.Error("ExamsController - SetClosedQuestionsAnswers " + ex.Message);
                return(View());
            }
        }
        public ActionResult SetPointsForOpenedQuestionsToStudent(IFormCollection AnswerPoint)
        {
            try
            {
                var StudentExamModel = new Dictionary <string, List <string> >();
                var Results          = new Dictionary <int, double>();

                foreach (var x in AnswerPoint)
                {
                    List <String> valueList = new List <string>();
                    if (!x.Equals(AnswerPoint.Last()))
                    {
                        foreach (var value in x.Value)
                        {
                            if (x.Key == "AnswerPoints" && value.Length == 0)
                            {
                                TempData["Message"] = "Nie wszystkie odpowiedzi studenta otrzymały odpowiednią punktację";
                                return(RedirectToAction("ShowStudentExamsToCheck"));
                            }
                            valueList.Add(value);
                        }
                        StudentExamModel.Add(x.Key, valueList);
                    }
                }
                List <int>    ExamOpenedQuestionIDList = new List <int>();
                List <double> ResultsList = new List <double>();
                List <int>    ExamsID     = new List <int>();

                StudentExamModel.ElementAt(1).Value.ForEach(x => ExamOpenedQuestionIDList.Add(Int32.Parse(x)));

                StudentExamModel.ElementAt(4).Value.ForEach(
                    x => ResultsList.Add(double.Parse(x.Replace(".", ","))));


                StudentExamModel.ElementAt(0).Value.ForEach(x => ExamsID.Add(Int32.Parse(x)));
                ExamsID = ExamsID.Distinct().ToList();

                for (int i = 0; i < ResultsList.Count(); i++)
                {
                    Results.Add(ExamOpenedQuestionIDList[i], ResultsList[i]);
                }

                using (var context = new ExamPlatformDbContext())
                {
                    List <ExamOpenedQuestions> ExamOQuestionList = new List <ExamOpenedQuestions>();

                    foreach (var x in Results)
                    {
                        var ExamOpenedQuestionModel = (from z in context.ExamOpenedQuestions
                                                       where z.ExamOpenedQuestionsID == x.Key
                                                       select z).Single();

                        ExamOpenedQuestionModel.AnswerPoints = x.Value;
                        ExamOQuestionList.Add(ExamOpenedQuestionModel);
                    }
                    context.ExamOpenedQuestions.UpdateRange(ExamOQuestionList);
                    context.SaveChanges();

                    foreach (var examID in ExamsID)
                    {
                        var score = (from x in context.ExamOpenedQuestions
                                     where x.ExamsID == examID
                                     select x.AnswerPoints).ToList();

                        var result = (from r in context.Results
                                      where r.ExamID == examID
                                      select r).Single();

                        score.ForEach(x => result.Score += x.Value);
                        result.Grade = SetExamGrade(result.Score, result.MaxExamPoints);

                        context.Results.Update(result);
                        context.SaveChanges();
                    }
                }
                return(RedirectToAction("ShowStudentExamsToCheck"));
            }
            catch (Exception ex)
            {
                logger.Error("StudentExamsController - SetPointsForOpenedQuestionsToStudent " + ex.Message);
                return(View());
            }
        }
예제 #6
0
        public async Task <ActionResult> ShowExam(int courseID)
        {
            var accountID = HttpContext.Session.GetInt32("UserID");

            using (var context = new ExamPlatformDbContext())
            {
                try
                {
                    Accounts SelectedAccount = await context.Account
                                               .Where(a => a.AccountsID == accountID)
                                               .Select(a => a).SingleAsync();

                    Course SelectedCourse = await context.Course
                                            .Include(c => c.ClosedQuestionsList)
                                            .Include(q => q.OpenedQuestionsList)
                                            .Where(course => course.CourseID == courseID)
                                            .Select(seleceteCourse => seleceteCourse).SingleAsync();



                    var CQuestions = SelectedCourse.ClosedQuestionsList.DistinctBy(q => q.Question).ToList();
                    var OQuestions = SelectedCourse.OpenedQuestionsList.DistinctBy(q => q.Question).ToList();

                    CQuestions = SelectClosedQuestions(CQuestions, 7);
                    OQuestions = SelectOpenedQuestions(OQuestions, 6);

                    var ExamCQuestions = CreateExamClosedQuestions(CQuestions);
                    var ExamOQuestions = CreateExamOpenedQuestions(OQuestions);


                    Exams exam = new Exams()
                    {
                        AmountClosedQuestions = CQuestions.Count(),
                        AmountOpenedQuestions = OQuestions.Count(),
                        ExamTimeInMinute      = 30,
                        DateOfExam            = DateTime.Now,

                        ExamClosedQuestions = ExamCQuestions,
                        ExamOpenedQuestions = ExamOQuestions,
                        CourseID            = SelectedCourse.CourseID,
                        AccountID           = SelectedAccount.AccountsID,
                        ExamResult          = new Results()
                        {
                            ifResultSent = false
                        }
                    };
                    ExamCQuestions.ForEach(x => exam.ExamResult.MaxExamPoints += 1);
                    ExamOQuestions.ForEach(x => exam.ExamResult.MaxExamPoints += x.OpenedQuestions.MaxPoints);
                    context.Exam.Add(exam);
                    context.SaveChanges();
                    HttpContext.Session.SetInt32("ExamID", exam.ExamsID);

                    return(View("ExamClosedQuestions", exam));
                }
                catch (Exception ex)
                {
                    logger.Error("ExamsController - ShowExam " + ex.Message);
                    return(View());
                }
            }
        }