Skip to content

Commit 751bee9

Browse files
authored
Merge pull request #534 from bcgov/bugfix/GRAD2-3325
GRAD2-3325 - Assessment session results after closure of 2018 program should not count towards graduation
2 parents 09167e7 + 8a165a2 commit 751bee9

14 files changed

+4742
-48
lines changed

api/src/main/java/ca/bc/gov/educ/api/ruleengine/dto/StudentAssessment.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public class StudentAssessment implements Serializable {
2929
private boolean isProjected;
3030
private boolean isNotCompleted;
3131
private String equivalentCode;
32+
private boolean isCutOffAssessment;
3233

3334
@Override
3435
public boolean equals(Object o) {

api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/ExcludeAfterProgramCutoffRule.java

Lines changed: 48 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
import ca.bc.gov.educ.api.ruleengine.dto.RuleData;
44
import ca.bc.gov.educ.api.ruleengine.dto.RuleProcessorData;
5+
import ca.bc.gov.educ.api.ruleengine.dto.StudentAssessment;
56
import ca.bc.gov.educ.api.ruleengine.dto.StudentCourse;
67
import ca.bc.gov.educ.api.ruleengine.util.RuleEngineApiUtils;
78
import ca.bc.gov.educ.api.ruleengine.util.RuleProcessorRuleUtils;
89
import lombok.AllArgsConstructor;
910
import lombok.Data;
11+
import lombok.EqualsAndHashCode;
1012
import lombok.NoArgsConstructor;
1113
import org.slf4j.Logger;
1214
import org.slf4j.LoggerFactory;
@@ -17,6 +19,10 @@
1719
import java.util.Date;
1820
import java.util.List;
1921

22+
import static ca.bc.gov.educ.api.ruleengine.util.RuleEngineApiConstants.DATE_FORMAT;
23+
import static ca.bc.gov.educ.api.ruleengine.util.RuleEngineApiConstants.DEFAULT_DATE_FORMAT;
24+
25+
@EqualsAndHashCode(callSuper = true)
2026
@Data
2127
@Component
2228
@NoArgsConstructor
@@ -28,39 +34,64 @@ public class ExcludeAfterProgramCutoffRule extends BaseRule implements Rule {
2834
private RuleProcessorData ruleProcessorData;
2935

3036
public RuleData fire() {
31-
37+
/* Excluded Courses */
3238
List<StudentCourse> studentCourseList = RuleProcessorRuleUtils.getUniqueStudentCourses(
3339
ruleProcessorData.getStudentCourses(), ruleProcessorData.isProjected());
34-
35-
if(ruleProcessorData.getGradProgram().getExpiryDate() == null) {
40+
if (ruleProcessorData.getGradProgram().getExpiryDate() == null) {
3641
return ruleProcessorData;
3742
}
38-
String cutoffDate = RuleEngineApiUtils.formatDate(ruleProcessorData.getGradProgram().getExpiryDate(), "yyyy-MM-dd");
39-
for (StudentCourse studentCourse : studentCourseList) {
43+
String cutoffDate = RuleEngineApiUtils.formatDate(ruleProcessorData.getGradProgram().getExpiryDate(), DEFAULT_DATE_FORMAT);
4044

45+
for (StudentCourse studentCourse : studentCourseList) {
4146
String sessionDate = studentCourse.getSessionDate() + "/01";
4247
try {
43-
Date temp = toLastDayOfMonth(RuleEngineApiUtils.parseDate(sessionDate, "yyyy/MM/dd"));
44-
sessionDate = RuleEngineApiUtils.formatDate(temp, "yyyy-MM-dd");
48+
Date temp = toLastDayOfMonth(RuleEngineApiUtils.parseDate(sessionDate, DATE_FORMAT));
49+
sessionDate = RuleEngineApiUtils.formatDate(temp, DEFAULT_DATE_FORMAT);
4550
} catch (ParseException pe) {
46-
logger.error("ERROR: {}",pe.getMessage());
51+
logger.error("ERROR: {}", pe.getMessage());
4752
}
4853

49-
int diff = RuleEngineApiUtils.getDifferenceInMonths(sessionDate,cutoffDate);
50-
54+
int diff = RuleEngineApiUtils.getDifferenceInMonths(sessionDate, cutoffDate);
5155
if (diff < 0) {
5256
studentCourse.setCutOffCourse(true);
5357
}
5458
}
55-
56-
ruleProcessorData.setExcludedCourses(RuleProcessorRuleUtils.maintainExcludedCourses("ExcludeAfterProgramCutoffRule", studentCourseList,ruleProcessorData.getExcludedCourses(),ruleProcessorData.isProjected()));
59+
ruleProcessorData.setExcludedCourses(RuleProcessorRuleUtils.maintainExcludedCourses("ExcludeAfterProgramCutoffRule", studentCourseList, ruleProcessorData.getExcludedCourses(), ruleProcessorData.isProjected()));
5760
ruleProcessorData.setStudentCourses(studentCourseList);
5861

59-
logger.debug("Cut-off Courses: {}",
60-
(int) studentCourseList
61-
.stream()
62-
.filter(StudentCourse::isCutOffCourse)
63-
.count());
62+
logger.debug("Cut-off Courses: {}", (int) studentCourseList
63+
.stream()
64+
.filter(StudentCourse::isCutOffCourse)
65+
.count());
66+
67+
/* Excluded Assessments */
68+
List<StudentAssessment> studentAssessmentList = RuleProcessorRuleUtils.getUniqueStudentAssessments(
69+
ruleProcessorData.getStudentAssessments(), ruleProcessorData.isProjected());
70+
if (ruleProcessorData.getGradProgram().getExpiryDate() == null) {
71+
return ruleProcessorData;
72+
}
73+
74+
for (StudentAssessment studentAssessment : studentAssessmentList) {
75+
String sessionDate = studentAssessment.getSessionDate() + "/01";
76+
try {
77+
Date temp = toLastDayOfMonth(RuleEngineApiUtils.parseDate(sessionDate, DATE_FORMAT));
78+
sessionDate = RuleEngineApiUtils.formatDate(temp, DEFAULT_DATE_FORMAT);
79+
} catch (ParseException pe) {
80+
logger.error("ERROR: {}", pe.getMessage());
81+
}
82+
83+
int diff = RuleEngineApiUtils.getDifferenceInMonths(sessionDate, cutoffDate);
84+
if (diff < 0) {
85+
studentAssessment.setCutOffAssessment(true);
86+
}
87+
}
88+
ruleProcessorData.setExcludedAssessments(RuleProcessorRuleUtils.maintainExcludedAssessments(studentAssessmentList, ruleProcessorData.getExcludedAssessments(), ruleProcessorData.isProjected()));
89+
ruleProcessorData.setStudentAssessments(studentAssessmentList);
90+
91+
logger.debug("Cut-off Assessments: {}", (int) studentAssessmentList
92+
.stream()
93+
.filter(StudentAssessment::isCutOffAssessment)
94+
.count());
6495

6596
return ruleProcessorData;
6697
}

api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/ExcludeValidationCoursesRule.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import java.util.Date;
1818
import java.util.List;
1919

20+
import static ca.bc.gov.educ.api.ruleengine.util.RuleEngineApiConstants.DATE_FORMAT;
21+
2022
@Data
2123
@Component
2224
@NoArgsConstructor
@@ -37,8 +39,8 @@ public RuleData fire() {
3739
for (StudentCourse studentCourse : studentCourseList) {
3840
String sessionDate = studentCourse.getSessionDate() + "/01";
3941
try {
40-
Date temp = toLastDayOfMonth(RuleEngineApiUtils.parseDate(sessionDate, "yyyy/MM/dd"));
41-
sessionDate = RuleEngineApiUtils.formatDate(temp, "yyyy/MM/dd");
42+
Date temp = toLastDayOfMonth(RuleEngineApiUtils.parseDate(sessionDate, DATE_FORMAT));
43+
sessionDate = RuleEngineApiUtils.formatDate(temp, DATE_FORMAT);
4244
} catch (ParseException pe) {
4345
logger.error("ERROR: {}",pe.getMessage());
4446
}

api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/IncompleteCoursesRule.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
import java.util.Date;
1818
import java.util.List;
1919

20+
import static ca.bc.gov.educ.api.ruleengine.util.RuleEngineApiConstants.DATE_FORMAT;
21+
import static ca.bc.gov.educ.api.ruleengine.util.RuleEngineApiConstants.DEFAULT_DATE_FORMAT;
22+
2023
@Data
2124
@Component
2225
@NoArgsConstructor
@@ -32,12 +35,12 @@ public RuleData fire() {
3235
List<StudentCourse> studentCourseList = RuleProcessorRuleUtils.getUniqueStudentCourses(ruleProcessorData.getStudentCourses(),ruleProcessorData.isProjected());
3336

3437
for (StudentCourse studentCourse : studentCourseList) {
35-
String today = RuleEngineApiUtils.formatDate(new Date(), "yyyy-MM-dd");
38+
String today = RuleEngineApiUtils.formatDate(new Date(), DEFAULT_DATE_FORMAT);
3639
String sessionDate = studentCourse.getSessionDate() + "/01";
3740

3841
try {
39-
Date temp = toLastDayOfMonth(RuleEngineApiUtils.parseDate(sessionDate, "yyyy/MM/dd"));
40-
sessionDate = RuleEngineApiUtils.formatDate(temp, "yyyy-MM-dd");
42+
Date temp = toLastDayOfMonth(RuleEngineApiUtils.parseDate(sessionDate, DATE_FORMAT));
43+
sessionDate = RuleEngineApiUtils.formatDate(temp, DEFAULT_DATE_FORMAT);
4144
} catch (ParseException pe) {
4245
logger.error("ERROR: {}" , pe.getMessage());
4346
}

api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/MatchCreditsRule.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import java.util.*;
1717
import java.util.stream.Collectors;
1818

19+
import static ca.bc.gov.educ.api.ruleengine.util.RuleEngineApiConstants.DATE_FORMAT;
20+
1921
@EqualsAndHashCode(callSuper = true)
2022
@Data
2123
@Component
@@ -140,7 +142,7 @@ public void splitSortStudentCourses(List<StudentCourse> studentCourses, LocalDat
140142
List<StudentCourse> coursesOnOrBeforeStartDate = new ArrayList<>();
141143
for (StudentCourse sc : studentCourses) {
142144
String courseSessionDate = sc.getSessionDate() + "/01";
143-
LocalDate temp = RuleEngineApiUtils.parseLocalDate(courseSessionDate, "yyyy/MM/dd");
145+
LocalDate temp = RuleEngineApiUtils.parseLocalDate(courseSessionDate, DATE_FORMAT);
144146

145147
if (adultStartDate != null && temp != null && temp.isAfter(adultStartDate)) {
146148
coursesAfterStartDate.add(sc);

api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/MinAdultCoursesRule.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import java.util.List;
1818
import java.util.stream.Collectors;
1919

20+
import static ca.bc.gov.educ.api.ruleengine.util.RuleEngineApiConstants.DATE_FORMAT;
21+
2022
@EqualsAndHashCode(callSuper = true)
2123
@Data
2224
@Component
@@ -65,7 +67,7 @@ public RuleData fire() {
6567

6668
for (StudentCourse sc : tempStudentCourseList) {
6769
String courseSessionDate = sc.getSessionDate() + "/01";
68-
LocalDate temp = RuleEngineApiUtils.parseLocalDate(courseSessionDate, "yyyy/MM/dd");
70+
LocalDate temp = RuleEngineApiUtils.parseLocalDate(courseSessionDate, DATE_FORMAT);
6971

7072
// Get Adult Start date from the Data Object
7173
LocalDate adultStartDate = ruleProcessorData.getGradStatus().getAdultStartDate();
@@ -131,7 +133,7 @@ public RuleData fire() {
131133

132134
for (StudentCourse sc : tempStudentCourseList) {
133135
String courseSessionDate = sc.getSessionDate() + "/01";
134-
LocalDate temp = RuleEngineApiUtils.parseLocalDate(courseSessionDate, "yyyy/MM/dd");
136+
LocalDate temp = RuleEngineApiUtils.parseLocalDate(courseSessionDate, DATE_FORMAT);
135137

136138
// Get Adult Start date from the Data Object
137139
LocalDate adultStartDate = ruleProcessorData.getGradStatus().getAdultStartDate();

api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsDuplicateAssmtRule.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import java.text.ParseException;
1818
import java.util.*;
1919

20+
import static ca.bc.gov.educ.api.ruleengine.util.RuleEngineApiConstants.DATE_FORMAT;
21+
2022
@Data
2123
@Component
2224
@NoArgsConstructor
@@ -44,8 +46,8 @@ public RuleData fire() {
4446
&& !studentAssessmentsList.get(i).isDuplicate()
4547
&& !studentAssessmentsList.get(j).isDuplicate()) {
4648
try {
47-
Date sessionDate1 = toLastDayOfMonth(RuleEngineApiUtils.parseDate(studentAssessmentsList.get(i).getSessionDate() + "/01", "yyyy/MM/dd"));
48-
Date sessionDate2 = toLastDayOfMonth(RuleEngineApiUtils.parseDate(studentAssessmentsList.get(j).getSessionDate() + "/01", "yyyy/MM/dd"));
49+
Date sessionDate1 = toLastDayOfMonth(RuleEngineApiUtils.parseDate(studentAssessmentsList.get(i).getSessionDate() + "/01", DATE_FORMAT));
50+
Date sessionDate2 = toLastDayOfMonth(RuleEngineApiUtils.parseDate(studentAssessmentsList.get(j).getSessionDate() + "/01", DATE_FORMAT));
4951
String sDate1 = RuleEngineApiUtils.formatDate(sessionDate1, RuleEngineApiConstants.DEFAULT_DATE_FORMAT);
5052
String sDate2 = RuleEngineApiUtils.formatDate(sessionDate2, RuleEngineApiConstants.DEFAULT_DATE_FORMAT);
5153

api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsDuplicateCrseRule.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import java.text.ParseException;
1717
import java.util.*;
1818

19+
import static ca.bc.gov.educ.api.ruleengine.util.RuleEngineApiConstants.DATE_FORMAT;
20+
1921
@Data
2022
@Component
2123
@NoArgsConstructor
@@ -51,8 +53,8 @@ public RuleData fire() {
5153
continue;
5254
}
5355
try {
54-
Date sessionDate1 = toLastDayOfMonth(RuleEngineApiUtils.parseDate(studentCourseList.get(i).getSessionDate() + "/01", "yyyy/MM/dd"));
55-
Date sessionDate2 = toLastDayOfMonth(RuleEngineApiUtils.parseDate(studentCourseList.get(j).getSessionDate() + "/01", "yyyy/MM/dd"));
56+
Date sessionDate1 = toLastDayOfMonth(RuleEngineApiUtils.parseDate(studentCourseList.get(i).getSessionDate() + "/01", DATE_FORMAT));
57+
Date sessionDate2 = toLastDayOfMonth(RuleEngineApiUtils.parseDate(studentCourseList.get(j).getSessionDate() + "/01", DATE_FORMAT));
5658
String sDate1 = RuleEngineApiUtils.formatDate(sessionDate1, RuleEngineApiConstants.DEFAULT_DATE_FORMAT);
5759
String sDate2 = RuleEngineApiUtils.formatDate(sessionDate2, RuleEngineApiConstants.DEFAULT_DATE_FORMAT);
5860

api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsFailedCrseRule.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import java.text.ParseException;
1818
import java.util.*;
1919

20+
import static ca.bc.gov.educ.api.ruleengine.util.RuleEngineApiConstants.DATE_FORMAT;
21+
2022
@Data
2123
@Component
2224
@NoArgsConstructor
@@ -36,7 +38,7 @@ public RuleData fire() {
3638
boolean inProgressCourse = false;
3739
for (StudentCourse studentCourse : studentCourseList) {
3840
try {
39-
Date sessionDate = toLastDayOfMonth(RuleEngineApiUtils.parseDate(studentCourse.getSessionDate() + "/01", "yyyy/MM/dd"));
41+
Date sessionDate = toLastDayOfMonth(RuleEngineApiUtils.parseDate(studentCourse.getSessionDate() + "/01", DATE_FORMAT));
4042
String sDate = RuleEngineApiUtils.formatDate(sessionDate, RuleEngineApiConstants.DEFAULT_DATE_FORMAT);
4143
String today = RuleEngineApiUtils.formatDate(cal.getTime(), RuleEngineApiConstants.DEFAULT_DATE_FORMAT);
4244
int diff = RuleEngineApiUtils.getDifferenceInMonths(sDate,today);

api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsRule.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
import java.util.Date;
1818
import java.util.List;
1919

20+
import static ca.bc.gov.educ.api.ruleengine.util.RuleEngineApiConstants.DATE_FORMAT;
21+
import static ca.bc.gov.educ.api.ruleengine.util.RuleEngineApiConstants.DEFAULT_DATE_FORMAT;
22+
2023
@Data
2124
@Component
2225
@NoArgsConstructor
@@ -33,12 +36,12 @@ public RuleData fire() {
3336
List<StudentCourse> studentCourseList = RuleProcessorRuleUtils.getUniqueStudentCourses(ruleProcessorData.getStudentCourses(),ruleProcessorData.isProjected());
3437

3538
for (StudentCourse studentCourse : studentCourseList) {
36-
String today = RuleEngineApiUtils.formatDate(new Date(), "yyyy-MM-dd");
39+
String today = RuleEngineApiUtils.formatDate(new Date(), DEFAULT_DATE_FORMAT);
3740
String sessionDate = studentCourse.getSessionDate() + "/01";
3841

3942
try {
40-
Date temp = toLastDayOfMonth(RuleEngineApiUtils.parseDate(sessionDate, "yyyy/MM/dd"));
41-
sessionDate = RuleEngineApiUtils.formatDate(temp, "yyyy-MM-dd");
43+
Date temp = toLastDayOfMonth(RuleEngineApiUtils.parseDate(sessionDate, DATE_FORMAT));
44+
sessionDate = RuleEngineApiUtils.formatDate(temp, DEFAULT_DATE_FORMAT);
4245
} catch (ParseException pe) {
4346
logger.error("ERROR: {}",pe.getMessage());
4447
}

0 commit comments

Comments
 (0)