-
Notifications
You must be signed in to change notification settings - Fork 112
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1668 from ricardorcr/newRule/ACDM-1789
Added new enrolment rule base on last digit student number ACDM-1789 #resolve
- Loading branch information
Showing
18 changed files
with
323 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
110 changes: 110 additions & 0 deletions
110
src/main/java/org/fenixedu/academic/domain/curricularRules/LastDigitSplitRule.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
/** | ||
* Copyright © 2002 Instituto Superior Técnico | ||
* | ||
* This file is part of FenixEdu Academic. | ||
* | ||
* FenixEdu Academic is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU Lesser General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* FenixEdu Academic is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU Lesser General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU Lesser General Public License | ||
* along with FenixEdu Academic. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
package org.fenixedu.academic.domain.curricularRules; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
import java.util.Locale; | ||
|
||
import org.fenixedu.academic.domain.ExecutionSemester; | ||
import org.fenixedu.academic.domain.curricularRules.executors.verifyExecutors.LastDigitSplitRuleVerifier; | ||
import org.fenixedu.academic.domain.curricularRules.executors.verifyExecutors.VerifyRuleExecutor; | ||
import org.fenixedu.academic.domain.degreeStructure.Context; | ||
import org.fenixedu.academic.domain.degreeStructure.CourseGroup; | ||
import org.fenixedu.academic.domain.degreeStructure.DegreeModule; | ||
import org.fenixedu.academic.domain.exceptions.DomainException; | ||
import org.fenixedu.academic.domain.time.calendarStructure.AcademicPeriod; | ||
import org.fenixedu.academic.dto.GenericPair; | ||
import org.fenixedu.academic.util.Bundle; | ||
import org.fenixedu.bennu.core.i18n.BundleUtil; | ||
import org.fenixedu.commons.i18n.LocalizedString; | ||
|
||
public class LastDigitSplitRule extends LastDigitSplitRule_Base { | ||
|
||
public LastDigitSplitRule(final DegreeModule toApplyRule, final CourseGroup contextCourseGroup, final Integer semester, | ||
final AcademicPeriod academicPeriod, final Boolean firstHalf, final ExecutionSemester begin, final ExecutionSemester end) { | ||
super(); | ||
checkParameters(toApplyRule, semester, academicPeriod, firstHalf); | ||
init(toApplyRule, contextCourseGroup, begin, end, CurricularRuleType.LAST_DIGIT_SPLIT); | ||
setFirstHalf(firstHalf); | ||
setCurricularPeriodOrder(semester); | ||
setAcademicPeriod(academicPeriod); | ||
} | ||
|
||
private void checkParameters(final DegreeModule toApplyRule, final Integer semester, final AcademicPeriod academicPeriod, | ||
final Boolean firstHalf) { | ||
if (semester == null) { | ||
throw new DomainException("curricular.rule.invalid.parameters"); | ||
} | ||
if (firstHalf == null) { | ||
throw new DomainException("curricular.rule.invalid.parameters"); | ||
} | ||
if (academicPeriod == null) { | ||
throw new DomainException("curricular.rule.invalid.parameters"); | ||
} | ||
if (!toApplyRule.isLeaf()) { | ||
throw new DomainException("curricular.rule.invalid.parameters"); | ||
} | ||
|
||
} | ||
|
||
@Override | ||
public List<GenericPair<Object, Boolean>> getLabel() { | ||
final List<GenericPair<Object, Boolean>> labelList = new ArrayList<GenericPair<Object, Boolean>>(); | ||
|
||
labelList.add(new GenericPair<Object, Boolean>("label.in", true)); | ||
labelList.add(new GenericPair<Object, Boolean>(" ", false)); | ||
labelList.add(new GenericPair<Object, Boolean>("label.semester." + getCurricularPeriodOrder(), true)); | ||
labelList.add(new GenericPair<Object, Boolean>(", ", false)); | ||
labelList.add(new GenericPair<Object, Boolean>("label.only.students", true)); | ||
labelList.add(new GenericPair<Object, Boolean>(" ", false)); | ||
String digitSplit = getFirstHalf() ? "firstHalf" : "secondHalf"; | ||
labelList.add(new GenericPair<Object, Boolean>("label." + digitSplit, true)); | ||
labelList.add(new GenericPair<Object, Boolean>(" ", false)); | ||
labelList.add(new GenericPair<Object, Boolean>("label.can.be.enroled", true)); | ||
|
||
return labelList; | ||
} | ||
|
||
@Override | ||
protected void removeOwnParameters() { | ||
} | ||
|
||
@Override | ||
public boolean appliesToContext(Context context) { | ||
return super.appliesToContext(context) && appliesToPeriod(context); | ||
} | ||
|
||
private boolean appliesToPeriod(Context context) { | ||
return context == null | ||
|| context.getCurricularPeriod().hasCurricularPeriod(getAcademicPeriod(), getCurricularPeriodOrder()); | ||
|
||
} | ||
|
||
@Override | ||
public VerifyRuleExecutor createVerifyRuleExecutor() { | ||
return new LastDigitSplitRuleVerifier(); | ||
} | ||
|
||
public String getLastDigitSplitString() { | ||
return new LocalizedString(org.fenixedu.academic.util.LocaleUtils.PT, BundleUtil.getString(Bundle.ACADEMIC, new Locale("pt", "PT"), | ||
"label." + (getFirstHalf() ? "firstHalf" : "secondHalf"))).getContent(); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
78 changes: 78 additions & 0 deletions
78
...ixedu/academic/domain/curricularRules/executors/ruleExecutors/LastDigitSplitExecuter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
/** | ||
* Copyright © 2002 Instituto Superior Técnico | ||
* | ||
* This file is part of FenixEdu Academic. | ||
* | ||
* FenixEdu Academic is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU Lesser General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* FenixEdu Academic is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU Lesser General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU Lesser General Public License | ||
* along with FenixEdu Academic. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
package org.fenixedu.academic.domain.curricularRules.executors.ruleExecutors; | ||
|
||
import org.fenixedu.academic.domain.curricularRules.ICurricularRule; | ||
import org.fenixedu.academic.domain.curricularRules.LastDigitSplitRule; | ||
import org.fenixedu.academic.domain.curricularRules.executors.RuleResult; | ||
import org.fenixedu.academic.domain.enrolment.EnrolmentContext; | ||
import org.fenixedu.academic.domain.enrolment.IDegreeModuleToEvaluate; | ||
|
||
public class LastDigitSplitExecuter extends CurricularRuleExecutor { | ||
|
||
@Override | ||
protected RuleResult executeEnrolmentInEnrolmentEvaluation(ICurricularRule curricularRule, | ||
IDegreeModuleToEvaluate sourceDegreeModuleToEvaluate, EnrolmentContext enrolmentContext) { | ||
return RuleResult.createNA(sourceDegreeModuleToEvaluate.getDegreeModule()); | ||
} | ||
|
||
@Override | ||
protected RuleResult executeEnrolmentVerificationWithRules(ICurricularRule curricularRule, | ||
IDegreeModuleToEvaluate sourceDegreeModuleToEvaluate, EnrolmentContext enrolmentContext) { | ||
final LastDigitSplitRule lastDigitSplitRule = (LastDigitSplitRule) curricularRule; | ||
if (!canApplyRule(enrolmentContext, lastDigitSplitRule)) { | ||
return RuleResult.createNA(sourceDegreeModuleToEvaluate.getDegreeModule()); | ||
} | ||
|
||
String studentNumber = enrolmentContext.getRegistration().getStudent().getNumber().toString(); | ||
if (lastDigitSplitRule.getFirstHalf() && isFirstHalf(studentNumber) || !lastDigitSplitRule.getFirstHalf() && isSecondHalf(studentNumber)) { | ||
return RuleResult.createTrue(sourceDegreeModuleToEvaluate.getDegreeModule()); | ||
} | ||
return createFalseRuleResult(lastDigitSplitRule, sourceDegreeModuleToEvaluate); | ||
} | ||
|
||
@Override | ||
protected RuleResult executeEnrolmentWithRulesAndTemporaryEnrolment(ICurricularRule curricularRule, | ||
IDegreeModuleToEvaluate sourceDegreeModuleToEvaluate, EnrolmentContext enrolmentContext) { | ||
return executeEnrolmentVerificationWithRules(curricularRule, sourceDegreeModuleToEvaluate, enrolmentContext); | ||
} | ||
|
||
private RuleResult createFalseRuleResult(final LastDigitSplitRule rule, final IDegreeModuleToEvaluate sourceDegreeModuleToEvaluate) { | ||
return RuleResult.createFalse(sourceDegreeModuleToEvaluate.getDegreeModule(), | ||
"curricularRules.ruleExecutors.LastDigitSplitExecutor.invalid.number", rule.getLastDigitSplitString(), rule | ||
.getDegreeModuleToApplyRule().getName()); | ||
} | ||
|
||
private boolean isFirstHalf(String studentNumber) { | ||
int lastDigit = Integer.valueOf(studentNumber.substring(studentNumber.length()-1)); | ||
return lastDigit < 5; | ||
} | ||
|
||
private boolean isSecondHalf(String studentNumber) { | ||
int lastDigit = Integer.valueOf(studentNumber.substring(studentNumber.length()-1)); | ||
return lastDigit >= 5; | ||
} | ||
|
||
@Override | ||
protected boolean canBeEvaluated(ICurricularRule curricularRule, IDegreeModuleToEvaluate sourceDegreeModuleToEvaluate, | ||
EnrolmentContext enrolmentContext) { | ||
return true; | ||
} | ||
|
||
} |
54 changes: 54 additions & 0 deletions
54
...academic/domain/curricularRules/executors/verifyExecutors/LastDigitSplitRuleVerifier.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
/** | ||
* Copyright © 2002 Instituto Superior Técnico | ||
* | ||
* This file is part of FenixEdu Academic. | ||
* | ||
* FenixEdu Academic is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU Lesser General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* FenixEdu Academic is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU Lesser General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU Lesser General Public License | ||
* along with FenixEdu Academic. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
package org.fenixedu.academic.domain.curricularRules.executors.verifyExecutors; | ||
|
||
import org.fenixedu.academic.domain.curricularRules.ICurricularRule; | ||
import org.fenixedu.academic.domain.curricularRules.LastDigitSplitRule; | ||
import org.fenixedu.academic.domain.curricularRules.executors.RuleResult; | ||
import org.fenixedu.academic.domain.degreeStructure.CourseGroup; | ||
import org.fenixedu.academic.domain.degreeStructure.DegreeModule; | ||
import org.fenixedu.academic.domain.enrolment.EnrolmentContext; | ||
|
||
public class LastDigitSplitRuleVerifier extends VerifyRuleExecutor { | ||
|
||
@Override | ||
protected RuleResult verifyEnrolmentWithRules(ICurricularRule curricularRule, EnrolmentContext enrolmentContext, | ||
DegreeModule degreeModuleToVerify, CourseGroup parentCourseGroup) { | ||
final LastDigitSplitRule lastDigitRule = (LastDigitSplitRule) curricularRule; | ||
|
||
if (lastDigitRule.getCurricularPeriodOrder().equals(enrolmentContext.getExecutionPeriod().getSemester())) { | ||
String studentNumber = enrolmentContext.getRegistration().getStudent().getNumber().toString(); | ||
int lastDigit = Integer.valueOf(studentNumber.substring(studentNumber.length() - 1)); | ||
if ((lastDigitRule.getFirstHalf() && lastDigit < 5) || (!lastDigitRule.getFirstHalf() && lastDigit >= 5)) { | ||
return RuleResult.createTrue(degreeModuleToVerify); | ||
} | ||
|
||
return RuleResult.createFalse(degreeModuleToVerify); | ||
} else { | ||
return RuleResult.createNA(degreeModuleToVerify); | ||
} | ||
} | ||
|
||
@Override | ||
protected RuleResult verifyEnrolmentWithTemporaryEnrolment(ICurricularRule curricularRule, EnrolmentContext enrolmentContext, | ||
DegreeModule degreeModuleToVerify, CourseGroup parentCourseGroup) { | ||
return verifyEnrolmentWithRules(curricularRule, enrolmentContext, degreeModuleToVerify, parentCourseGroup); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.