/**
  * 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);
 }