public static function retrieveByCareerSubjectAndSchoolYear(CareerSubject $cs, SchoolYear $school_year = null) { if (is_null($school_year)) { $school_year = SchoolYearPeer::retrieveCurrent(); } $c = new Criteria(); $c->add(CareerSchoolYearPeer::CAREER_ID, $cs->getCareerId()); $c->add(CareerSchoolYearPeer::SCHOOL_YEAR_ID, $school_year->getId()); $c->addJoin(CareerSchoolYearPeer::ID, self::CAREER_SCHOOL_YEAR_ID, Criteria::INNER_JOIN); $c->add(self::CAREER_SUBJECT_ID, $cs->getId()); return self::doSelectOne($c); }
/** * Returns an array of CareerSubjects that has $career_subject as their correlative * * @param CareerSubject $career_subject * @param Criteria $criteria * @param PropelPDO $con * @return array CareerSubject[] */ public function getCareerSubjectCorrelativesOf(CareerSubject $career_subject, Criteria $criteria = null, PropelPDO $con = null) { if ($career_subject->getIsChoice()) { return array(); } //If choice it can't have correlatives /* Criteria used for retrieveing custom correlatives */ $criteria1 = is_null($criteria) ? new Criteria() : $criteria; // Join CareerSubject with Correlatives for those cases where has_correlative_previous_year is false $criteria1->addJoin(CareerSubjectPeer::ID, CorrelativePeer::CAREER_SUBJECT_ID, Criteria::INNER_JOIN); $criteria1->addAnd(CareerSubjectPeer::CAREER_ID, $career_subject->getCareerId()); $criteria1->addAnd(CareerSubjectPeer::ID, $career_subject->getId(), Criteria::NOT_EQUAL); $criteria1->addAnd(CorrelativePeer::CORRELATIVE_CAREER_SUBJECT_ID, $career_subject->getId()); $criteria1->addAnd(CareerSubjectPeer::HAS_CORRELATIVE_PREVIOUS_YEAR, 0); $custom_correlatives_ids = array_map(create_function('$rs', 'return $rs->getId();'), CareerSubjectPeer::doSelect($criteria1)); /* Criteria used for retrieving calculated correlatives by HAS_CORRELATIVE_PREVIOUS_YEAR */ $criteria2 = is_null($criteria) ? new Criteria() : $criteria; // Fetch those subjects with year gerater than career_subject->getYear() $criteria2->addAnd(CareerSubjectPeer::YEAR, $career_subject->getYear() + 1); //Only consider next year career_subjects $criteria2->addAnd(CareerSubjectPeer::HAS_CORRELATIVE_PREVIOUS_YEAR, 1); $criteria2->addAnd(CareerSubjectPeer::CAREER_ID, $career_subject->getCareerId()); $criteria2->addAnd(CareerSubjectPeer::ID, $career_subject->getId(), Criteria::NOT_EQUAL); if (!is_null($orientation = $career_subject->getOrientation())) { /* If career_subject is orientation, then correlatives are only career_subjects * with the same orientation */ $criteria2->addAnd(CareerSubjectPeer::ORIENTATION_ID, $orientation->getId()); } if (!is_null($sub_orientation = $career_subject->getSubOrientation())) { /* If career_subject is orientation, then correlatives are only career_subjects * with the same orientation */ $criteria2->addAnd(CareerSubjectPeer::SUB_ORIENTATION_ID, $sub_orientation->getId()); } $calculated_correlatives_ids = array_map(create_function('$rs', 'return $rs->getId();'), CareerSubjectPeer::doSelect($criteria2)); $c = new Criteria(); $c->add(CareerSubjectPeer::ID, array_merge($calculated_correlatives_ids, $custom_correlatives_ids), Criteria::IN); return CareerSubjectPeer::doSelect($c); }