예제 #1
0
        // certDate need to be default
        public static bool GenerateReport(ReportType reportType, string path, uint groupID, uint teacherID, uint disciplineID, DateTime?certDate = null)
        {
            IReport report = null;

            switch (reportType)
            {
            case ReportType.CERTIFICATION:
                report = new CertificationReport();
                break;

            case ReportType.EXAM:
                report = new ExamReport();
                break;

            case ReportType.NONE:

                return(false);
            }

            if (report == null)
            {
                return(false);
            }

            try
            {
                return(report.GenerateReport(path, groupID, disciplineID, teacherID, certDate));
            }
            catch (Exception ex)
            {
                NLog.LogManager.GetCurrentClassLogger().Error(ex);
                return(false);
            }
        }
예제 #2
0
        public async Task <ExamReport> SaveAsync <V>(int userId, ExamReport examReport) where V : AbstractValidator <ExamReport>
        {
            var medic = await _medicService.FindByIdAsync(userId);

            if (!(medic is Medic))
            {
                throw new Exception("Usuario não é um médico");
            }

            var examRequest = await _examRequestService.FindByIdAsync(examReport.ExamRequestId);

            if (examRequest == null)
            {
                throw new Exception("Pedido de exame não existe");
            }

            var newExamReport = new ExamReport
            {
                Medic       = medic,
                ExamRequest = examRequest,
                Description = examReport.Description,
                Cid         = examReport.Cid,
                Status      = ExamReportStatus.ANDAMENTO
            };
            var report = await _examReportRepository.SaveAsync(newExamReport);

            await _unitOfWork.CompleteAsync();

            return(report);
        }
예제 #3
0
        public ExamReport GetIndividualCustomerReport(Guid assessmentID, Guid userID)
        {
            ExamReport examReport = new ExamReport();

            try
            {
                examReport.UserID       = userID;
                examReport.AssessMentID = assessmentID;
                using (DBEntities dBEntities = new DBEntities())
                {
                    dBEntities.Configuration.ProxyCreationEnabled = false;
                    var userDetails      = dBEntities.DefaultRegistations.FirstOrDefault(x => x.ID == userID);
                    var assessmentMaster = dBEntities.AssessmentDetailMasters.FirstOrDefault(x => x.ID == assessmentID);
                    if (userDetails != null)
                    {
                        examReport.Address        = userDetails.Address;
                        examReport.CandidateEmail = userDetails.Email;
                        examReport.CandidateName  = userDetails.Name;
                        examReport.State          = userDetails.State;
                        examReport.TestDate       = Convert.ToDateTime(assessmentMaster.ScheduledEndDatetime);
                        examReport.TestDetails    = GetTestDetails(assessmentID, userID);
                        examReport.AssessmentName = assessmentMaster.AssessmentName;
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(examReport);
        }
예제 #4
0
        public async Task InputtingDifferentChoicesAsAnswers()
        {
            // Arrange I
            Class @class = new Class
            {
                State = ClassState.Running
            };
            Participant student1 = new Participant
            {
                Type = ParticipantType.Student
            };
            Participant student2 = new Participant
            {
                Type = ParticipantType.Student
            };
            Participant teacher = new Participant
            {
                Type = ParticipantType.Teacher
            };
            Exam exam = SampleExam(teacher);

            // Act
            @class = await _classHandlerService.AddClass(teacher.Id, @class);

            student1 = await _classHandlerService.AddParticipant(student1, @class.Id);

            student2 = await _classHandlerService.AddParticipant(student2, @class.Id);

            exam = await _examHandlingService.AddExam(exam);

            ExamReport examReport = await _classHandlerService.PutExam(exam.Id);

            await _classHandlerService.RespondToQuestion(new StudentQuestionResponseDTO
            {
                ExamReportId = examReport.Id,
                StudentId    = student1.Id,
                QuestionId   = "1",
                Response     = "Letter"
            });

            // Assert
            Func <Task <QuestionResponse> > action = async() =>
                                                     await _classHandlerService.RespondToQuestion(new StudentQuestionResponseDTO
            {
                ExamReportId = examReport.Id,
                StudentId    = student1.Id,
                QuestionId   = "1",
                Response     = "Vehicle"
            });

            await Assert.ThrowsAsync <IncorrectAnswerChoiceException>(action);
        }
예제 #5
0
 public ActionResult <object> GetList(Guid studentId, Guid termId)
 {
     try
     {
         Init();
         var list   = _unitOfWorkService.ExamService.GetListByStudentIDAndTermID(studentId, termId, ref _sbError);
         var report = new
         {
             ExamList    = list,
             ExamAverage = ExamReport.ToOveralAverageExam(list)
         };
         return(report);
     }
     catch (Exception er)
     {
         return(Error(er));
     }
 }
예제 #6
0
        public async void UpdateStatus(int userId, ExamReport examReport)
        {
            var medic = await _medicService.FindByIdAsync(userId);

            if (medic == null)
            {
                throw new Exception("Médico inválido");
            }

            if (examReport.Status == ExamReportStatus.APROVADO || examReport.Status == ExamReportStatus.NEGADO)
            {
                _examReportRepository.UpdateStatus(examReport);
                return;
            }
            else
            {
                throw new Exception("Status inválido");
            }
        }
예제 #7
0
        public ActionResult GetIndividualReport(Guid userID, Guid assessmentID)
        {
            ExamReport examReport = new ExamReport();

            try
            {
                string              apiUrl   = System.Configuration.ConfigurationManager.AppSettings["WebApiUrl"];
                HttpClient          client   = new HttpClient();
                HttpResponseMessage response = client.GetAsync(apiUrl + "/Assessment/GetIndividualCustomerReport?assessmentId=" + assessmentID + "&userID=" + userID).Result;
                if (response.IsSuccessStatusCode)
                {
                    var retresult = response.Content.ReadAsStringAsync().Result;
                    examReport = JsonConvert.DeserializeObject <ExamReport>(retresult);
                }
            }
            catch (Exception ex)
            {
                throw;
            }
            //return new ViewAsPdf("_CustomerInvoice", examReport);
            return(PartialView("_CustomerInvoice", examReport));
        }
예제 #8
0
        public async Task ShouldNotSubmitAfterExamFinishNorLaterNorBeforeStart()
        {
            // Arrange
            Class @class = new Class
            {
                State = ClassState.Running
            };
            Participant student1 = new Participant
            {
                Type = ParticipantType.Student
            };
            Participant teacher = new Participant
            {
                Type = ParticipantType.Teacher
            };
            Exam exam = SampleExam(teacher);

            // Act I
            @class = await _classHandlerService.AddClass(teacher.Id, @class);

            student1 = await _classHandlerService.AddParticipant(student1, @class.Id);

            exam = await _examHandlingService.AddExam(exam);

            ExamReport examReport = await _classHandlerService.PutExam(exam.Id, false);

            // Assert I
            Func <Task <QuestionResponse> > action = async() =>
                                                     await _classHandlerService.RespondToQuestion(new StudentQuestionResponseDTO
            {
                ExamReportId = examReport.Id,
                StudentId    = student1.Id,
                QuestionId   = "1",
                Response     = "Letter"
            });

            await Assert.ThrowsAsync <ExamNotRunningException>(action);

            // Act II
            // Scenario: emergency happened, not able to continue exam
            await _classHandlerService.ModifyExamState(teacher.Id, @class.Id, exam.Id, ExamReportStatus.Finished);

            // Assert II
            // And a student wants to submit
            action = async() => await _classHandlerService.RespondToQuestion(new StudentQuestionResponseDTO
            {
                ExamReportId = examReport.Id,
                StudentId    = student1.Id,
                QuestionId   = "1",
                Response     = "Letter"
            });

            await Assert.ThrowsAsync <ExamNotRunningException>(action);

            // MISC scenarios not related to the previous
            // Act III
            // Scenario: Cannot submit to a marked exam
            await _classHandlerService.ModifyExamState(teacher.Id, @class.Id, exam.Id, ExamReportStatus.Marked);

            // Assert III
            action = async() => await _classHandlerService.RespondToQuestion(new StudentQuestionResponseDTO
            {
                ExamReportId = examReport.Id,
                StudentId    = student1.Id,
                QuestionId   = "1",
                Response     = "Letter"
            });

            await Assert.ThrowsAsync <ExamNotRunningException>(action);
        }
예제 #9
0
        public async Task CreateExamAndAddToClassAndMakeSureStudentsAndTeachersViewIt()
        {
            // Arrange I
            Class @class = new Class
            {
                State = ClassState.Running
            };
            Participant student1 = new Participant
            {
                Type = ParticipantType.Student
            };
            Participant teacher = new Participant
            {
                Type = ParticipantType.Teacher
            };
            Exam exam = SampleExam(teacher);

            // Act I
            @class = await _classHandlerService.AddClass(teacher.Id, @class);

            student1 = await _classHandlerService.AddParticipant(student1, @class.Id);

            exam = await _examHandlingService.AddExam(exam);

            // Assert I
            Assert.Equal(exam.Id, (await _examHandlingService.GetExam(teacher.Id, exam.Id)).Id);

            // Act II
            ExamReport examReport = await _classHandlerService.PutExam(exam.Id);

            // Attempting questions
            foreach (var question in exam.Questions)
            {
                await _classHandlerService.RespondToQuestion(new StudentQuestionResponseDTO
                {
                    ExamReportId = examReport.Id,
                    StudentId    = student1.Id,
                    QuestionId   = question.Id,
                    Response     = "2"
                });
            }

            int totalMark = await _classHandlerService.GetExamScore(student1.Id, examReport.Id);

            // Assert II
            Assert.Equal(exam.Id, examReport.Exam.Id);
            Assert.Equal(0, totalMark);

            // Act & Assert III
            examReport = await _classHandlerService.PutExam(exam.Id);

            // Attempting questions by a teacher which should throw
            foreach (var question in exam.Questions)
            {
                Func <Task <QuestionResponse> > action = async() =>
                                                         await _classHandlerService.RespondToQuestion(new StudentQuestionResponseDTO
                {
                    ExamReportId = exam.Id,
                    StudentId    = teacher.Id,
                    QuestionId   = question.Id,
                    Response     = "Letter"
                });

                await Assert.ThrowsAsync <TeacherCannotRespondToQuestionException>(action);
            }

            // Act IV
            // Get full score
            await _classHandlerService.RespondToQuestion(new StudentQuestionResponseDTO
            {
                ExamReportId = examReport.Id,
                StudentId    = student1.Id,
                QuestionId   = "1",
                Response     = "Letter"
            });

            await _classHandlerService.RespondToQuestion(new StudentQuestionResponseDTO
            {
                ExamReportId = examReport.Id,
                StudentId    = student1.Id,
                QuestionId   = "2",
                Response     = "Vehicle"
            });

            totalMark = await _classHandlerService.GetExamScore(student1.Id, examReport.Id);

            // Assert IV
            Assert.Equal(2, totalMark);
        }
예제 #10
0
        public async Task AbilityForStudentToOverrideHisAnswerWhileExamIsRunning()
        {
            // Arrange
            Class @class = new Class
            {
                State = ClassState.Running
            };
            Participant student1 = new Participant
            {
                Type = ParticipantType.Student
            };
            Participant teacher = new Participant
            {
                Type = ParticipantType.Teacher
            };
            Exam exam = SampleExam(teacher);

            // Act I
            @class = await _classHandlerService.AddClass(teacher.Id, @class);

            student1 = await _classHandlerService.AddParticipant(student1, @class.Id);

            exam = await _examHandlingService.AddExam(exam);

            ExamReport examReport = await _classHandlerService.PutExam(exam.Id);

            await _classHandlerService.RespondToQuestion(new StudentQuestionResponseDTO
            {
                ExamReportId = examReport.Id,
                StudentId    = student1.Id,
                QuestionId   = "1",
                Response     = "Letter"
            });

            await _classHandlerService.RespondToQuestion(new StudentQuestionResponseDTO
            {
                ExamReportId = examReport.Id,
                StudentId    = student1.Id,
                QuestionId   = "2",
                Response     = "Game"
            });

            await _classHandlerService.RespondToQuestion(new StudentQuestionResponseDTO
            {
                ExamReportId = examReport.Id,
                StudentId    = student1.Id,
                QuestionId   = "1",
                Response     = "Letter"
            });

            // Assert I
            int score = await _classHandlerService.GetExamScore(student1.Id, examReport.Id);

            Assert.Equal(1, score);

            // Act I
            await _classHandlerService.ModifyExamState(teacher.Id, @class.Id, exam.Id, ExamReportStatus.Finished);

            // Assert II
            score = await _classHandlerService.GetExamScore(student1.Id, examReport.Id);

            Assert.Equal(2, score);
        }