/**
  * Get every CareerSubjectSchoolYear that has been marked as 'is_option' that is
  * available for $career_subject_school_year (the optional CareerSubject).
  *
  * @param  CareerSubjectSchoolYear $career_subject The optional CareerSubject.
  * @param  Boolean       $exclude_related, if its true excludes the related options
  * @param  PropelPDO     $con            Database connection (can be null).
  *
  * @return Criteria
  */
 public function getAvailableChoicesForCareerSubjectSchoolYearCriteria(CareerSubjectSchoolYear $career_subject_school_year, $exclude_related = true, $exclude_repetead = true, PropelPDO $con = null)
 {
     /* First try to get every CareerSubject objects that are options and are being used as option, so we wont consider them */
     $career_subject = $career_subject_school_year->getCareerSubject();
     $criteria = new Criteria();
     $related = array_map(create_function('$option', 'return $option->getChoiceCareerSubjectSchoolYearId();'), $career_subject_school_year->getOptionalCareerSubjectsRelatedByCareerSubjectSchoolYearId());
     if ($exclude_repetead) {
         $criteria->addJoin(CareerSubjectSchoolYearPeer::ID, OptionalCareerSubjectPeer::CHOICE_CAREER_SUBJECT_SCHOOL_YEAR_ID, Criteria::INNER_JOIN);
         $criteria->addJoin(CareerSubjectSchoolYearPeer::CAREER_SUBJECT_ID, CareerSubjectPeer::ID, Criteria::INNER_JOIN);
         $criteria->addJoin(CareerSubjectSchoolYearPeer::CAREER_SCHOOL_YEAR_ID, CareerSchoolYearPeer::ID, Criteria::INNER_JOIN);
         $criteria->addAnd(CareerSubjectPeer::IS_OPTION, true);
         $criteria->addAnd(CareerSubjectPeer::YEAR, $career_subject->getYear());
         $criteria->addAnd(CareerSubjectPeer::CAREER_ID, $career_subject->getCareerId());
         $criteria->addAnd(CareerSchoolYearPeer::SCHOOL_YEAR_ID, $career_subject_school_year->getSchoolYear()->getId());
         //At this point discard related options to career_subject_school_year
         $criteria->addAnd(CareerSubjectSchoolYearPeer::ID, $related, Criteria::NOT_IN);
         $options_used = CareerSubjectSchoolYearPeer::doSelect($criteria);
         $not_to_consider = array_map(create_function('$cssy', 'return $cssy->getId();'), $options_used);
     }
     // Now try to see which career subjects are available
     $criteria->clear();
     $criteria->addJoin(CareerSubjectSchoolYearPeer::CAREER_SUBJECT_ID, CareerSubjectPeer::ID, Criteria::INNER_JOIN);
     $criteria->addJoin(CareerSubjectSchoolYearPeer::CAREER_SCHOOL_YEAR_ID, CareerSchoolYearPeer::ID, Criteria::INNER_JOIN);
     $criteria->addAnd(CareerSubjectPeer::IS_OPTION, true);
     $criteria->addAnd(CareerSubjectPeer::YEAR, $career_subject->getYear());
     $criteria->addAnd(CareerSubjectPeer::CAREER_ID, $career_subject->getCareerId());
     // Dont forget to consider orientation
     $criteria->addAnd(CareerSubjectPeer::ORIENTATION_ID, $career_subject->getOrientationId());
     $criteria->addAnd(CareerSchoolYearPeer::SCHOOL_YEAR_ID, $career_subject_school_year->getSchoolYear()->getId());
     //Excludes the optional related of the excluded_ids. This is for double list that needs the owns related
     if ($exclude_related) {
         $criteria->addAnd(CareerSubjectSchoolYearPeer::ID, $related, Criteria::NOT_IN);
     }
     // Don't consider objects related to other optional career subject!
     if ($exclude_repetead) {
         $criteria->addAnd(CareerSubjectSchoolYearPeer::ID, $not_to_consider, Criteria::NOT_IN);
     }
     return $criteria;
 }