public function validate($validator, $value, $arguments)
 {
     $career_subject = CareerSubjectPeer::retrieveByPK($value['career_subject_id']);
     $c = new Criteria();
     $c->add(CareerSubjectPeer::SUBJECT_ID, $value['subject_id']);
     $c->add(CareerSubjectPeer::CAREER_ID, $career_subject->getCareerId());
     if (CareerSubjectPeer::doSelect($c)) {
         throw new sfValidatorError($validator, 'invalid');
     }
     return $value;
 }
 protected function execute($arguments = array(), $options = array())
 {
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'] ? $options['connection'] : null)->getConnection();
     $this->createContextInstance('backend');
     $c = new Criteria();
     //$c->add(CareerStudentPeer::STUDENT_ID, 1080);
     $school_year = SchoolYearPeer::retrieveCurrent();
     try {
         $connection->beginTransaction();
         foreach (CareerStudentPeer::doSelect($c) as $career_student) {
             $student = $career_student->getStudent();
             $career_school_year = CareerSchoolYearPeer::retrieveByCareerAndSchoolYear($career_student->getCareer(), $school_year);
             $student_career_school_year = StudentCareerSchoolYearPeer::getCurrentForStudentAndCareerSchoolYear($student, $career_school_year);
             if (is_null($student_career_school_year)) {
                 $this->logSection("Continue", '1');
                 continue;
             }
             $year = $student_career_school_year->getYear();
             $c = new Criteria();
             $c->add(CareerSubjectPeer::CAREER_ID, $career_student->getCareerId());
             $c->add(CareerSubjectPeer::YEAR, $year);
             foreach (CareerSubjectPeer::doSelect($c) as $career_subject) {
                 if (StudentCareerSubjectAllowedPeer::doCountStudentAndCareerSubject($student, $career_subject) == 0) {
                     $obj = new StudentCareerSubjectAllowed();
                     $obj->setStudentId($student->getId());
                     $obj->setCareerSubject($career_subject);
                     $obj->save($connection);
                     $this->logSection("Allowed agregado: ", $career_subject->getId());
                 }
             }
         }
         $connection->commit();
     } catch (PropelException $e) {
         $connection->rollback();
         throw $e;
     }
 }
 /**
  * This method try to find if there are new CareerSubjects for our Career, recently
  * created but without a CareerSubjectSchoolYear created
  *
  */
 public function checkCareerSubjectOptionsIntegrity()
 {
     $criteria = new Criteria();
     $criteria->addJoin(CareerSubjectSchoolYearPeer::CAREER_SCHOOL_YEAR_ID, CareerSchoolYearPeer::ID, Criteria::INNER_JOIN);
     $criteria->addAnd(CareerSchoolYearPeer::CAREER_ID, $this->getCareerId());
     $all_career_subjects_sy = array_map(create_function('$cs', 'return $cs->getCareerSubjectId();'), CareerSubjectSchoolYearPeer::doSelect($criteria));
     $criteria->clear();
     $criteria->addAnd(CareerSubjectPeer::CAREER_ID, $this->getCareerId());
     $criteria->addAnd(CareerSubjectPeer::ID, $all_career_subjects_sy, Criteria::NOT_IN);
     $con = Propel::getConnection(SchoolYearPeer::DATABASE_NAME);
     try {
         foreach (CareerSubjectPeer::doSelect($criteria) as $career_subject) {
             $career_subject_school_year = new CareerSubjectSchoolYear();
             $career_subject_school_year->setCareerSchoolYear($this);
             $career_subject_school_year->setCareerSubject($career_subject);
             $career_subject_school_year->save($con);
         }
         $con->commit();
     } catch (PropelPDOException $e) {
         $con->rollBack();
         throw $e;
     }
 }
 /**
  * This method returns a Criteria with the career_subjects that can be passed by equivalence of the student.
  *
  * @param integer $career_id
  * @param Student $student
  *
  * @return Criteria $c
  */
 public function getCareerSubjectsForEquivalenceCriteria($career_id, Student $student)
 {
     $c = new Criteria();
     //Quito las materias ya approbadas por el estudiante
     $c->add(StudentApprovedCareerSubjectPeer::STUDENT_ID, $student->getId());
     $c->clearSelectColumns();
     $c->addSelectColumn(StudentApprovedCareerSubjectPeer::CAREER_SUBJECT_ID);
     $pdo = StudentApprovedCareerSubjectPeer::doSelectStmt($c);
     $already_approved_ids = $pdo->fetchAll(PDO::FETCH_COLUMN);
     //Ahora chequeo que materias puede rendir.
     $c = new Criteria();
     $c->add(CareerSubjectPeer::CAREER_ID, $career_id);
     $c->add(CareerSubjectPeer::ID, $already_approved_ids, Criteria::NOT_IN);
     $career_subjects = CareerSubjectPeer::doSelect($c);
     $career_subject_available = array();
     foreach ($career_subjects as $career_subject) {
         if ($this->canAddEquivalenceFor($career_subject, $student)) {
             $career_subject_available[] = $career_subject->getId();
         }
     }
     $c = new Criteria();
     $c->add(CareerSubjectPeer::CAREER_ID, $career_id);
     $c->add(CareerSubjectPeer::ID, $career_subject_available, Criteria::IN);
     return $c;
 }
Exemple #5
0
 /**
  * This method returns an array of the CareerSubjects that arent associated with a course of this division.
  * In the specific case of an optative careersubject, check if the choices arent been already added.
  *
  * @return <array>  CareerSubject[]
  */
 public function getUnrelatedCareerSubjects()
 {
     $career_subject_ids = array_map(create_function('$o', 'return $o->getId();'), $this->getCareerSubjects());
     $c = new Criteria();
     $c->add(CareerSubjectPeer::CAREER_ID, $this->getCareerSchoolYear()->getCareerId());
     $c->add(CareerSubjectPeer::YEAR, $this->getYear());
     $c->add(CareerSubjectPeer::IS_OPTION, false);
     $c->add(CareerSubjectPeer::ID, $career_subject_ids, Criteria::NOT_IN);
     // Recorremos las careerSubject que no estan agregadas ya a un curso de la division
     $unrelated = array();
     foreach (CareerSubjectPeer::doSelect($c) as $cs) {
         //Si tiene opciones, entonces chequamos que no esten agregadas las opciones.
         if ($cs->getHasChoices()) {
             $csy = CareerSubjectSchoolYearPeer::retrieveByCareerSubjectAndSchoolYear($cs, $this->getSchoolYear());
             $career_subject_school_year_ids = array_map(create_function('$o', 'return $o->getChoiceCareerSubjectSchoolYearId();'), $csy->getChoices());
             $c = new Criteria();
             $c->add(CoursePeer::DIVISION_ID, $this->getId());
             $c->addJoin(CourseSubjectPeer::COURSE_ID, CoursePeer::ID);
             $c->add(CourseSubjectPeer::CAREER_SUBJECT_SCHOOL_YEAR_ID, $career_subject_school_year_ids, Criteria::IN);
             if (CourseSubjectPeer::doCount($c) == 0) {
                 $unrelated[] = $cs;
             }
         } else {
             $unrelated[] = $cs;
         }
     }
     return $unrelated;
 }
 protected function doSave($con = null)
 {
     if (!$this->isValid()) {
         throw $this->getErrorSchema();
     }
     if (is_null($con)) {
         $con = $this->getConnection();
     }
     // Delete only the subjects off the selected career
     $c = new Criteria();
     $c->add(StudentCareerSubjectAllowedPeer::STUDENT_ID, $this->object->getPrimaryKey());
     // added:
     $subc = new Criteria();
     $subc->clearSelectColumns();
     $subc->addSelectColumn(CareerSubjectPeer::ID);
     $subc->add(CareerSubjectPeer::CAREER_ID, $this->getValue("career_id"));
     $stmt = CareerSubjectPeer::doSelectStmt($subc);
     $ids = $stmt->fetchAll(PDO::FETCH_COLUMN);
     $c->add(StudentCareerSubjectAllowedPeer::CAREER_SUBJECT_ID, $ids, Criteria::IN);
     $allowed = StudentCareerSubjectAllowedPeer::doSelectOne($c, $con);
     if ($allowed) {
         // Se consulta si el alumno esta en trayectorias antes de eliminarlo
         $student_id = $this->object->getPrimaryKey();
         $criteria = new Criteria();
         $criteria->add(PathwayStudentPeer::STUDENT_ID, $student_id);
         $pathway = PathwayStudentPeer::doSelectOne($criteria, $con);
         if (!$pathway) {
             StudentCareerSubjectAllowedPeer::doDelete($c, $con);
         }
     }
     $year = $this->getValue('year');
     $career_school_year = CareerSchoolYearPeer::retrieveByCareerAndSchoolYear(CareerPeer::retrieveByPK($this->getValue('career_id')), SchoolYearPeer::retrieveCurrent());
     //First update the year at student_career_school_year
     //    var_dump($career_school_year);die();
     $student_career_school_year = StudentCareerSchoolYearPeer::getCurrentForStudentAndCareerSchoolYear($this->getObject(), $career_school_year);
     //    if (!$student_career_school_year)
     //    {
     //      $student_career_school_year = new StudentCareerSchoolYear();
     //      $student_career_school_year->setCareerSchoolYear($career_school_year);
     //      $student_career_school_year->setStudent($this->getObject());
     //      $student_career_school_year->save();
     //    }
     $career_student = CareerStudentPeer::retrieveByCareerAndStudent($this->getValue('career_id'), $this->getObject()->getId());
     try {
         $con->beginTransaction();
         $student_career_school_year->setYear($year);
         $student_career_school_year->save($con);
         $c = new Criteria();
         $c->add(CareerSubjectPeer::CAREER_ID, $this->getValue('career_id'));
         $c->add(CareerSubjectPeer::YEAR, $year);
         foreach (CareerSubjectPeer::doSelect($c) as $career_subject) {
             $obj = new StudentCareerSubjectAllowed();
             $obj->setStudentId($this->object->getPrimaryKey());
             $obj->setCareerSubject($career_subject);
             $obj->save($con);
         }
         $prev_school_year = SchoolYearPeer::retrieveLastYearSchoolYear($career_school_year->getSchoolYear());
         if ($prev_school_year) {
             $prev_student_career_school_year = StudentCareerSchoolYearPeer::retrieveCareerSchoolYearForStudentAndYear($this->getObject(), $prev_school_year);
         }
         if (!empty($prev_student_career_school_year)) {
             $prev_student_career_school_year = array_shift($prev_student_career_school_year);
             if ($year <= $prev_student_career_school_year->getYear()) {
                 $prev_student_career_school_year->setStatus(StudentCareerSchoolYearStatus::REPPROVED);
                 $prev_student_career_school_year->save($con);
             }
         }
         $con->commit();
     } catch (PropelException $e) {
         $con->rollBack();
         throw $e;
     }
 }