public IHttpActionResult Get(int?id) { if (!id.HasValue) { return(BadRequest(ModelState)); } try { var baseTest = _baseTestService.Find(e => e.Id == id.Value, e => e.Approver, e => e.Course, e => e.BaseTestContents); return(Ok(new { Approver = baseTest.Approver.FullName, baseTest.NumberOfQuestion, baseTest.StartTime, baseTest.EndTime, baseTest.Duration, baseTest.ExamCode, IsApproved = baseTest.Status == BaseTestStatus.Approved, Course = baseTest.Course.Name, questions = baseTest.BaseTestContents.Select(__ => new { __.Content, Options = JsonConvert.DeserializeObject <GetOptionVM[]>(__.Options), __.Level }) })); } catch (Exception ex) { _loggingService.Write(ex); return(InternalServerError(ex)); } }
public IHttpActionResult Submit([FromBody] ResultDataVM data) { try { var contents = JsonConvert.DeserializeObject <ResultVM>(data.Json.Decrypt()); BaseTest baseTest = _baseTestService.Find(_ => _.Id == contents.ExamId); List <TestContent> testContents = new List <TestContent>(); string studentCode = contents.StudentId; if (baseTest != null) { if (_testService.Find(_ => _.BaseTestId == baseTest.Id && _.StudentCode == studentCode) == null) { float totalMarkOfTest = 0; float finalMarkOfTest = 0; foreach (var ele in contents.ExamAs) { ele.Answers = ele.Answers ?? new List <int>(); Question quest = _questionService.Find(_ => _.Code == ele.QuestionCode, _ => _.Options); List <Option> rightAnswer = quest.Options.Where(_ => _.IsCorrect).ToList(); List <Option> finalRightAnswers = quest.Options.Where(_ => _.IsCorrect).ToList(); List <Option> studentAnswers = _optionService.Search(_ => ele.Answers.Contains(_.Id)).ToList(); totalMarkOfTest += quest.Mark; float markOfQuestion, markRightAnswers = 0, markWrongAnswers = 0; rightAnswer.ForEach(_ => { if (ele.Answers.Contains(_.Id)) //mỗi lần nó trả lời đúng 1 câu { finalRightAnswers.Remove(_); //trừ đi những câu nó đã đánh đúng => còn lại những câu đúng mà nó k đánh var temp = studentAnswers.Find(x => x.Id == _.Id); studentAnswers.Remove(temp); //những câu nó sai } }); finalRightAnswers.ForEach(_ => { markRightAnswers += Math.Abs((_.Percent * quest.Mark) / 100); }); studentAnswers.ForEach(_ => { markWrongAnswers += Math.Abs((_.Percent * quest.Mark) / 100);//điểm của những câu trả lời sai }); markOfQuestion = (float)Math.Round(quest.Mark - markWrongAnswers - markRightAnswers, 2); finalMarkOfTest += markOfQuestion < 0 ? 0 : markOfQuestion; testContents.Add(new TestContent { Answers = JsonConvert.SerializeObject(ele.Answers ?? new List <int>()), Mark = markOfQuestion < 0 ? 0 : markOfQuestion, QuestionCode = ele.QuestionCode }); } var auth = _authenticationService.Find(_ => _.WebId == studentCode && _.Username == User.Identity.Name); if (auth != null) { _authenticationService.Delete(auth); } var test = new Test { BaseTestId = contents.ExamId, IsFinished = true, StartTime = baseTest.StartTime, EndTime = DateTimeOffset.Now, Duration = DateTimeOffset.Now - baseTest.StartTime, Mark = finalMarkOfTest, TotalMark = totalMarkOfTest, StudentCode = studentCode, TestContents = testContents }; bool result = _testService.Create(test); } } } catch (Exception ex) { _loggingService.Write(ex); return(InternalServerError(ex)); } return(Ok()); }