/** * Selecciona los partidos en juego y ejecuta sus turnos correspondientes. * * @route JugadorNum12/scripts/ejecutarturno * @return void */ public function actionEjecutarTurno() { Yii::import('application.components.Partido'); $tiempo = time(); $primerTurno = Partido::PRIMER_TURNO; $ultimoTurno = Partido::ULTIMO_TURNO; $busqueda = new CDbCriteria(); $busqueda->addCondition(':bTiempo >= hora'); $busqueda->addCondition('turno >= :bPrimerTurno'); $busqueda->addCondition('turno <= :bUltimoTurno'); $busqueda->params = array(':bTiempo' => $tiempo, ':bPrimerTurno' => $primerTurno, ':bUltimoTurno' => $ultimoTurno); $partidos = Partidos::model()->findAll($busqueda); foreach ($partidos as $partido) { $transaction = Yii::app()->db->beginTransaction(); try { $partido = new Partido($partido->id_partido); $partido->jugarse(); $transaction->commit(); } catch (Exception $ex) { $transaction->rollback(); throw $ex; } } }
private function actualizaSiguientePartido($id_equipo) { //Tomar hora actual $tiempo = time(); $primerTurno = Partido::PRIMER_TURNO; //Generar criterio de búsqueda para conocer el siguiente encuentro $busqueda = new CDbCriteria(); $busqueda->addCondition(':bTiempo <= hora'); $busqueda->addCondition('turno = :bPrimerTurno'); $busqueda->addCondition('((equipos_id_equipo_1 = :bequipo) OR (equipos_id_equipo_2 = :bequipo))'); $busqueda->params = array(':bTiempo' => $tiempo, ':bPrimerTurno' => $primerTurno, ':bequipo' => $id_equipo); $busqueda->order = 'hora ASC'; //Buscamos el siguiente partido $partidos = Partidos::model()->find($busqueda); $equipo = Equipos::model()->findByPk($id_equipo); if ($equipo === null) { throw new Exception("El equipo no existe (Partido.php).", 404); } if ($partidos === null) { //Si no hay más partidos que jugar esta temporada, el siguiente será NULL $equipo->partidos_id_partido = null; } else { //Asignamos el siguiente partido $equipo->partidos_id_partido = $partidos->id_partido; } //Guardamos los datos if (!$equipo->save()) { throw new Exception("Error al situar proximo partido.", 404); } }
/** * Devuelve el modelo de datos basado en la clave primaria dada por la variable GET * * > Funcion predeterminada de Yii * * @param int $id id del modelo que se va a cargar * @throws \CHttpException El modelo de datos no se encuentra * @return \AccionesGrupales modelo de datos */ public function loadModel($id) { $model = Partidos::model()->findByPk($id); if ($model === null) { throw new CHttpException(404, 'The requested page does not exist.'); } return $model; }
<?php /**** SCRIPT DE TURNOS DE PARTIDOS ****/ //1.- Seleccionar partidos para los que haya que generar un nuevo turno (activos) //2.- Iterar sobre la lista de partidos resultante //Selecciono partidos con hora mayor que la de la tabla <<Partidos>> y //turnos entre 0 y 10 $tiempo = time(); $primerTurno = Partido::PRIMER_TURNO; $ultimoTurno = Partido::ULTIMO_TURNO; $busqueda = new CDbCriteria(); $busqueda->addCondition("'" . $tiempo . "' >= hora"); $busqueda->addCondition("turno >= '" . $primerTurno . "' "); $busqueda->addCondition("turno <= '" . $ultimoTurno . "' "); $partidos = Partidos::model()->findAll($busqueda); foreach ($partidos as $partido) { $partido = new Partido($partido->id_partido); $partido->jugarse(); } /****/
/** * Funcion auxiliar que toma la lista de partidos divididos por jornadas * * @static * * @return array asociativo con los partidos divididos en jornadas */ public static function partidosPorJornadas() { // Obtener la lista de partidos $listaPartidos = Partidos::model()->findAll(); // Crear array inicial de datos $parPorJornadas = array(); // Agregar datos al array foreach ($listaPartidos as $p) { $parPorJornadas[$p->jornada][] = $p; } return $parPorJornadas; }
/** Funcion auxiliar que modifica la tabla de partidos. A diferencia del * aumento normal de factores, éste se hace de forma proporcional. * * @paremetro partido en el que modificamos sus factores * @paremetro equipo al que pertenece * @parametro columna sobre la que modificamos (moral,ambiente,ind.ofensivo...) * @parametro proporción de recursos que aumentamos * @devuelve flag de error */ public function aumentar_factores_prop($id_partido, $id_equipo, $columna, $proporcion) { //Cojo el modelo correspondiente a ese id $partido = Partidos::model()->findByPK($id_partido); //Comprobación de seguridad if ($partido === null) { throw new CHttpException(404, "Partido no encontrado. (aumentar_factores_prop,Helper.php)"); } //Comrpuebo si juega de local o de visitante if ($partido->equipos_id_equipo_1 == $id_equipo) { $factor = self::$datos_factores['local'][$columna]; //Aumentar proporcionalmente $valor_nuevo = $partido->{$factor} + $partido->{$factor} * $proporcion; //Si fallara tiene que ser por el $factor,comprobar si es asi $partido->setAttributes(array('' . $factor . '' => $valor_nuevo)); if ($partido->save()) { return 0; } else { return -1; } } else { if ($partido->equipos_id_equipo_2 == $id_equipo) { $factor = self::$datos_factores['visitante'][$columna]; //Aumentar proporcionalmente $valor_nuevo = $partido->{$factor} + $partido->{$factor} * $proporcion; //Si fallara tiene que ser por el $factor,comprobar si es asi $partido->setAttributes(array('' . $factor . '' => $valor_nuevo)); if ($partido->save()) { return 0; } else { return -1; } } else { //Si ha llegado aqui por alguna cosa, es que no coincide con ninguno de //los id de los equipo del partido return -1; } } }