@@ -38,6 +38,11 @@ public RuleData fire() {
38
38
List <GradRequirement > requirementsMet = new ArrayList <>();
39
39
List <GradRequirement > requirementsNotMet = new ArrayList <>();
40
40
41
+ List <CourseRequirement > courseRequirements = ruleProcessorData .getCourseRequirements ();
42
+ if (courseRequirements == null ) {
43
+ courseRequirements = new ArrayList <>();
44
+ }
45
+
41
46
List <StudentCourse > courseList = RuleProcessorRuleUtils .getUniqueStudentCourses (
42
47
obj .getStudentCoursesOptionalProgram (), ruleProcessorData .isProjected ());
43
48
List <OptionalProgramRequirement > careerProgramRulesMatch = obj .getOptionalProgramRules ()
@@ -57,8 +62,16 @@ public RuleData fire() {
57
62
while (studentCourseIterator .hasNext ()) {
58
63
59
64
StudentCourse sc = studentCourseIterator .next ();
60
- for (OptionalProgramRequirement pR :careerProgramRulesMatch ) {
61
- if (pR .getOptionalProgramRequirementCode ().getRequiredLevel () == null || pR .getOptionalProgramRequirementCode ().getRequiredLevel ().trim ().compareTo ("" ) == 0 ) {
65
+ List <CourseRequirement > matchedCourseRequirements = courseRequirements .stream ()
66
+ .filter (cr -> sc .getCourseCode ().compareTo (cr .getCourseCode ()) == 0
67
+ && sc .getCourseLevel ().compareTo (cr .getCourseLevel ()) == 0 )
68
+ .toList ();
69
+
70
+ for (OptionalProgramRequirement pR :careerProgramRulesMatch ) {
71
+ long matchedCount = matchedCourseRequirements .stream ()
72
+ .filter (cr -> cr .getRuleCode ().getCourseRequirementCode ().compareTo (pR .getOptionalProgramRequirementCode ().getOptProReqCode ()) == 0 )
73
+ .count ();
74
+ if (matchedCount > 0 && (pR .getOptionalProgramRequirementCode ().getRequiredLevel () == null || pR .getOptionalProgramRequirementCode ().getRequiredLevel ().trim ().compareTo ("" ) == 0 )) {
62
75
requiredCredits = Integer .parseInt (pR .getOptionalProgramRequirementCode ().getRequiredCredits ());
63
76
if (totalCredits + sc .getCredits () <= requiredCredits ) {
64
77
totalCredits += sc .getCredits ();
0 commit comments