Пример #1
0
        /// <summary>
        /// TODO > use XSLT and template!!
        /// </summary>
        /// <param name="exam"></param>
        /// <param name="candidate"></param>
        /// <returns></returns>
        public Exam CompleteExam(Exam exam, Candidate candidate)
        {
            var message = new StringBuilder();

            exam.TotalPossiblePoints             = exam.Questions.Sum(x => x.ScorePoint);
            exam.TotalScoredPoints               = exam.Questions.Where(x => x.SelectedOption != null && x.SelectedOption.IsSelected).Sum(x => x.ScorePoint);
            exam.TotalQuestionsAsked             = exam.Questions.Count();
            exam.TotalQuestionsAnswered          = exam.Questions.Count(x => x.SelectedOption != null);
            exam.TotalQuestionsAnsweredCorrectly = exam.Questions.Count(x => x.SelectedOption != null && x.SelectedOption.IsSelected);

            Exam examReturend = null;

            using (var examRepo = new ExamRepository())
            {
                examReturend = Mapper.Map <Exam>(examRepo.CompleteExam(exam.Id));
            }

            exam.CompletedOn = examReturend.CompletedOn;

            message.Append(string.Format("<!DOCTYPE html><html lang='en'><span style='font-family:arial;'>Interview Exam Results for: {0} {1} {2}",
                                         candidate.FirstName, candidate.LastName, "<br/><br/>"));

            message.Append(string.Format("Candidate Email: {0}{1}",
                                         candidate.Email, "<br/><br/>"));

            message.Append("<hr>");

            message.Append(string.Format("<b>Exam</b>{3}{3}Start:  {0}{3}Finish: {1} {3}Minutes Taken: {2} {3}{3}",
                                         exam.StartedOn.GetValueOrDefault().ToString("yyyy-MMM-dd HH:mm:ss"),
                                         exam.CompletedOn.GetValueOrDefault().ToString("yyyy-MMM-dd HH:mm:ss"),
                                         (exam.CompletedOn - exam.StartedOn).Value.TotalMinutes.ToString("##.##"),
                                         "<br/>"));

            message.Append(string.Format("Exam Total Score: {0} / {1} Points. {2}<progress value='{0}' max='{1}'></progress> {2}",
                                         exam.TotalScoredPoints,
                                         exam.TotalPossiblePoints,
                                         "<br/><br/>"));

            message.Append(string.Format("Standard Questions Asked: {0}{3} Answered: {1}{3} Correct: {2} {3}{3}{4}{3}",
                                         exam.TotalQuestionsAsked,
                                         exam.TotalQuestionsAnswered,
                                         exam.TotalQuestionsAnsweredCorrectly,
                                         "<br/>", "<hr>"));


            var queryBonusQuestions             = exam.Questions.Where(x => x.SelectedOption != null).SelectMany(x => x.SelectedOption.Questions);
            var bonusPossiblePoints             = queryBonusQuestions.Sum(x => x.ScorePoint);
            var bonusScoredPoints               = queryBonusQuestions.Where(x => x.SelectedOption != null && x.SelectedOption.IsSelected).Sum(x => x.ScorePoint);
            var bonusQuestionsAsked             = queryBonusQuestions.Count();
            var bonusQuestionsAnswered          = queryBonusQuestions.Count(x => x.SelectedOption != null);
            var bonusQuestionsAnsweredCorrectly = queryBonusQuestions.Count(x => x.SelectedOption != null && x.SelectedOption.IsSelected);

            if (bonusPossiblePoints > 0)
            {
                message.Append(string.Format("<b>Extended Questions</b>{2}Total Score: {0} / {1} Points. {2}<progress value='{0}' max='{1}'></progress>{2}",
                                             bonusScoredPoints,
                                             bonusPossiblePoints,
                                             "<br/><br/>"));

                message.Append(string.Format("Extended Questions Asked: {0}{3} Answered: {1}{3} Correct: {2} {3}{3}{4}{3}",
                                             bonusQuestionsAsked,
                                             bonusQuestionsAnswered,
                                             bonusQuestionsAnsweredCorrectly,
                                             "<br/>", "<hr>"));
            }

            var categoryResults = exam.Questions.GroupBy(x => x.CategoryName).Select(
                x => new
            {
                CategoryName                    = x.Key,
                TotalQuestionsAsked             = x.Count(),
                TotalQuestionsAnswered          = x.Count(y => y.SelectedOption != null),
                TotalQuestionsAnsweredCorrectly = x.Count(y => y.SelectedOption != null && y.SelectedOption.IsSelected),
                TotalPossiblePoints             = x.Sum(y => y.ScorePoint),
                TotalScoredPoints               = x.Where(y => y.SelectedOption != null && y.SelectedOption.IsSelected).Sum(y => y.ScorePoint),

                QueryBonusQuestions = x.Where(y => y.SelectedOption != null).SelectMany(y => y.SelectedOption.Questions),
            }
                ).Select(x => new
            {
                x.CategoryName,
                x.TotalQuestionsAsked,
                x.TotalQuestionsAnswered,
                x.TotalQuestionsAnsweredCorrectly,
                x.TotalPossiblePoints,
                x.TotalScoredPoints,
                BonusQuestionsAsked             = x.QueryBonusQuestions.Count(),
                BonusQuestionsAnswered          = x.QueryBonusQuestions.Count(y => y.SelectedOption != null),
                BonusQuestionsAnsweredCorrectly = x.QueryBonusQuestions.Count(y => y.SelectedOption != null && y.SelectedOption.IsSelected),
                BonusTotalPossiblePoints        = x.QueryBonusQuestions.Sum(y => y.ScorePoint),
                BonusTotalScoredPoints          = x.QueryBonusQuestions.Where(y => y.SelectedOption != null && y.SelectedOption.IsSelected).Sum(y => y.ScorePoint)
            });


            categoryResults.ToList().ForEach(x =>
            {
                message.Append(string.Format("<b>{0}</b>{3}{3}Score: {1} / {2} Points. {3}{3}<progress value='{1}' max='{2}'></progress>{3}{3}",
                                             x.CategoryName,
                                             x.TotalScoredPoints,
                                             x.TotalPossiblePoints,
                                             "<br/>"));

                message.Append(string.Format("Standard Questions Asked: {0}{3}Answered: {1}{3}Correct: {2}{3}{3}",
                                             x.TotalQuestionsAsked,
                                             x.TotalQuestionsAnswered,
                                             x.TotalQuestionsAnsweredCorrectly,
                                             "<br/>"));

                if (x.BonusTotalPossiblePoints > 0)
                {
                    message.Append(string.Format("Extended Total Score: {0} / {1} Points. {2}<progress value='{0}' max='{1}'></progress>{2}",
                                                 x.BonusTotalScoredPoints,
                                                 x.BonusTotalPossiblePoints,
                                                 "<br/><br/>"));

                    message.Append(string.Format("Extended Questions Asked: {0}{3}Answered: {1}{3}Correct: {2}{3}{3}",
                                                 x.BonusQuestionsAsked,
                                                 x.BonusQuestionsAnswered,
                                                 x.BonusQuestionsAnsweredCorrectly,
                                                 "<br/>"));
                }
            });

            message.Append("<hr></span></html>");

            SendMail(exam.Examiner, ConfigurationSettings.AppSettings["DefaultSMTPFromEmail"],
                     "Interview exam results for: " + candidate.FirstName + " " + candidate.LastName + " Email: " + candidate.Email,
                     message.ToString());

            return(exam);
        }