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