/** * This method returns the available students for a course subject. If $filter_by_orientation == true then filter by orientation too. * * @param CourseSubject $course_subject * @param Criteria $criteria * @param Boolean $filter_by_orientation * @return Criteria */ public function getAvailableStudentsForCourseSubjectCriteria(CourseSubject $course_subject, $criteria = null, $filter_by_orientation = true) { $criteria = is_null($criteria) ? new Criteria() : $criteria; //IF the course_subject is a option, the cheks are in the parent optional //die(var_dump($course_subject->getCareerSubjectSchoolYear()->getCareerSubject()->getIsOption())); $career_subject_school_year = $course_subject->getCareerSubjectSchoolYear()->getCareerSubject()->getIsOption() ? $course_subject->getCareerSubjectSchoolYear()->getOptionalCareerSubjectSchoolYear() : $course_subject->getCareerSubjectSchoolYear(); $career_subject = $career_subject_school_year->getCareerSubject(); //Students inscripted in the career $criteria->addJoin(StudentPeer::ID, CareerStudentPeer::STUDENT_ID, Criteria::INNER_JOIN); $criteria->addAnd(CareerStudentPeer::CAREER_ID, $career_subject->getCareerId()); //If $filter_by_orientation == true then checks for orientation in the criteria if ($filter_by_orientation && !is_null($career_subject->getOrientation())) { $criteria->addJoin(CareerStudentPeer::ORIENTATION_ID, $career_subject->getOrientationId()); } if ($filter_by_orientation && !is_null($career_subject->getSubOrientation())) { $criteria->addJoin(CareerStudentPeer::SUB_ORIENTATION_ID, $career_subject->getSubOrientationId()); } //Students inscripted in the school_year $criteria->addJoin(StudentPeer::ID, SchoolYearStudentPeer::STUDENT_ID, Criteria::INNER_JOIN); $criteria->addAnd(SchoolYearStudentPeer::SCHOOL_YEAR_ID, $career_subject_school_year->getCareerSchoolYear()->getSchoolYearId()); //Check if the students has the corresponds allows required to course this subject $criteria->addJoin(StudentPeer::ID, StudentCareerSubjectAllowedPeer::STUDENT_ID); $criteria->addAnd(StudentCareerSubjectAllowedPeer::CAREER_SUBJECT_ID, $career_subject->getId()); //Criteria for eliminate students inscripted in other course_subject of the same course $already_criteria = new Criteria(); $already_criteria->clearSelectColumns(); $already_criteria->addSelectColumn(CourseSubjectStudentPeer::STUDENT_ID); $already_criteria->addJoin(CourseSubjectPeer::ID, CourseSubjectStudentPeer::COURSE_SUBJECT_ID); $already_criteria->add(CourseSubjectPeer::COURSE_ID, $course_subject->getCourseId()); $already_criteria->add(CourseSubjectStudentPeer::COURSE_SUBJECT_ID, $course_subject->getId(), Criteria::NOT_EQUAL); $pdo_statement = CourseSubjectStudentPeer::doSelectStmt($already_criteria); $student_already_ids = $pdo_statement->fetchAll(PDO::FETCH_COLUMN); if (count($student_already_ids)) { $criteria->addAnd(StudentPeer::ID, $student_already_ids, Criteria::NOT_IN); } return $criteria; }