}
@Override
protected RuleResult executeEnrolmentWithRulesAndTemporaryEnrolment(ICurricularRule curricularRule,
IDegreeModuleToEvaluate sourceDegreeModuleToEvaluate, EnrolmentContext enrolmentContext) {
final CreditsLimitInExternalCycle creditsLimitInExternalCycle = (CreditsLimitInExternalCycle) curricularRule;
final ExternalCurriculumGroup externalCurriculumGroup = creditsLimitInExternalCycle.getExternalCurriculumGroup();
if (!isToApply(sourceDegreeModuleToEvaluate, enrolmentContext, externalCurriculumGroup)) {
return RuleResult.createNA(sourceDegreeModuleToEvaluate.getDegreeModule());
}
if (isEnrolingDissertation(enrolmentContext, externalCurriculumGroup)) {
return createRuleResultForEnrolingDissertation(sourceDegreeModuleToEvaluate, creditsLimitInExternalCycle);
}
final CycleCurriculumGroup previousCycleCurriclumGroup = creditsLimitInExternalCycle.getPreviousCycleCurriculumGroup();
final Double totalCreditsInPreviousCycle = previousCycleCurriclumGroup.getAprovedEctsCredits();
if (!creditsLimitInExternalCycle.creditsInPreviousCycleSufficient(totalCreditsInPreviousCycle)) {
return createRuleResultForNotSatisfiedCreditsForPreviousCycle(sourceDegreeModuleToEvaluate,
creditsLimitInExternalCycle, previousCycleCurriclumGroup);
}
final Double totalCredits = calculateApprovedAndEnrollingTotalCredits(enrolmentContext, externalCurriculumGroup);
if (creditsLimitInExternalCycle.creditsExceedMaximumInExternalCycle(totalCredits, totalCreditsInPreviousCycle)) {
return createRuleResultForMaxCreditsExceededInExternalCycle(sourceDegreeModuleToEvaluate,
creditsLimitInExternalCycle, totalCredits, totalCreditsInPreviousCycle);
}
final Double totalEctsWithEnroledEctsCreditsFromPreviousPeriod =
totalCredits
+ externalCurriculumGroup.getEnroledEctsCredits(enrolmentContext.getExecutionPeriod()
.getPreviousExecutionPeriod());
if (creditsLimitInExternalCycle.creditsExceedMaximumInExternalCycle(totalEctsWithEnroledEctsCreditsFromPreviousPeriod,
totalCreditsInPreviousCycle)) {
return RuleResult.createTrue(EnrolmentResultType.TEMPORARY, sourceDegreeModuleToEvaluate.getDegreeModule(),
"curricularRules.ruleExecutors.CreditsLimitInExternalCycleExecutor.external.cycle.limit.exceeded",
creditsLimitInExternalCycle.getExternalCurriculumGroup().getName().getContent(),
totalEctsWithEnroledEctsCreditsFromPreviousPeriod.toString(), creditsLimitInExternalCycle
.getMaxCreditsInExternalCycle(totalCreditsInPreviousCycle).toString(), totalCreditsInPreviousCycle
.toString());
}
return RuleResult.createTrue(sourceDegreeModuleToEvaluate.getDegreeModule());