package pt.ist.fenix.domain.student.evaluation; import java.lang.reflect.Method; import org.fenixedu.academic.domain.Enrolment; import org.fenixedu.academic.domain.EnrolmentEvaluation; import org.fenixedu.academic.domain.ExecutionSemester; import org.fenixedu.academic.domain.StudentCurricularPlan; import org.fenixedu.academic.domain.curriculum.EnrollmentState; import org.fenixedu.academic.domain.exceptions.DomainException; import org.fenixedu.academic.domain.log.EnrolmentEvaluationLog; import pt.ist.fenixframework.Atomic; public class PreBolognaEvaluationManagement { public static boolean getEvaluationForCurriculumValidationAllowed(StudentCurricularPlan studentCurricularPlan) { ExecutionSemester FENIX_START_DATE_SEMESTER = ExecutionSemester.readBySemesterAndExecutionYear(1, "2006/2007"); return studentCurricularPlan.getStartExecutionPeriod().isBefore(FENIX_START_DATE_SEMESTER) && !studentCurricularPlan.isBolonhaDegree(); } @Atomic public static void deleteEnrolmentEvaluationCurriculumValidationContext(EnrolmentEvaluation enrolmentEvaluation) throws Exception { if (!enrolmentEvaluation.getEnrolment().getStudentCurricularPlan().getEvaluationForCurriculumValidationAllowed()) { throw new DomainException("error.curriculum.validation.enrolment.evaluatiom.removal.not.allowed"); } Enrolment enrolment = enrolmentEvaluation.getEnrolment(); EnrolmentEvaluationLog.logEnrolmentEvaluationDeletion(enrolmentEvaluation); if (enrolmentEvaluation.getImprovementOfApprovedEnrolmentEvent() != null && enrolmentEvaluation.getImprovementOfApprovedEnrolmentEvent().isPayed()) { throw new DomainException("error.enrolmentEvaluation.has.been.payed"); } enrolmentEvaluation.setPersonResponsibleForGrade(null); enrolmentEvaluation.setPerson(null); enrolmentEvaluation.setEnrolment(null); enrolmentEvaluation.setMarkSheet(null); enrolmentEvaluation.setRectification(null); enrolmentEvaluation.setRectified(null); if (enrolmentEvaluation.getImprovementOfApprovedEnrolmentEvent() != null) { enrolmentEvaluation.getImprovementOfApprovedEnrolmentEvent().removeImprovementEnrolmentEvaluations( enrolmentEvaluation); } enrolmentEvaluation.setExecutionPeriod(null); enrolmentEvaluation.setRootDomainObject(null); //TODO refactor this hack to a general functionality that allows to change past data Method deletedMethod = enrolmentEvaluation.getClass().getSuperclass().getSuperclass().getDeclaredMethod("deleteDomainObject"); deletedMethod.setAccessible(true); deletedMethod.invoke(enrolmentEvaluation); changeStateIfAprovedAndEvaluationsIsEmpty(enrolment); } private static void changeStateIfAprovedAndEvaluationsIsEmpty(Enrolment enrolment) { if (!enrolment.getStudentCurricularPlan().getEvaluationForCurriculumValidationAllowed()) { throw new DomainException("error.curriculum.validation.enrolment.evaluatiom.removal.not.allowed"); } if (enrolment.getEnrollmentState().equals(EnrollmentState.APROVED) && enrolment.getEvaluationsSet().isEmpty()) { enrolment.setEnrollmentState(EnrollmentState.ENROLLED); } } @Atomic public static void markAsTemporaryEnrolled(Enrolment enrolment) { if (!enrolment.getStudentCurricularPlan().getEvaluationForCurriculumValidationAllowed()) { throw new DomainException("error.curriculum.validation.enrolment.evaluatiom.removal.not.allowed"); } if (enrolment.getEvaluationsSet().isEmpty()) { enrolment.setEnrollmentState(EnrollmentState.ENROLLED); } } }