/**
  * Constructor
  * @param {integer} $prueba Prueba ID
  * @param {integer} $jornada Jormada ID
  * @param {integer} $manga Manga ID
  * @throws Exception
  */
 function __construct($prueba, $jornada)
 {
     parent::__construct('Portrait', "print_equiposByJornada", $prueba, $jornada);
     if ($prueba <= 0 || $jornada <= 0) {
         $this->errormsg = "print_teamsByJornada: either prueba or jornada data are invalid";
         throw new Exception($this->errormsg);
     }
     // comprobamos que estamos en una jornada por equipos
     $flag = intval($this->jornada->Equipos3) + intval($this->jornada->Equipos4);
     if ($flag == 0) {
         $this->errormsg = "print_teamsByJornada: Jornada {$jornada} has no Team competition declared";
         throw new Exception($this->errormsg);
     }
     // Datos de equipos de la jornada
     $m = new Equipos("print_teamsByJornada", $prueba, $jornada);
     $teams = $m->getTeamsByJornada();
     // reindexamos por ID y anyadimos un campo extra "Perros" con los perros del equipo
     $this->equipos = array();
     foreach ($teams as &$equipo) {
         $equipo['Perros'] = $m->getPerrosByTeam($equipo['ID']);
         $this->equipos[$equipo['ID']] = $equipo;
     }
     // Datos de los participantes (indexados por ID de perro)
     $m = new DBObject("print_teamsByJornada");
     $r = $m->__select("*", "Resultados", "(Jornada={$jornada})", "", "");
     $this->perros = array();
     foreach ($r['rows'] as $item) {
         $this->perros[intval($item['Perro'])] = $item;
     }
     // finalmente internacionalizamos cabeceras
     $this->cellHeader = array(_('Dorsal'), _('Name'), _('Breed'), _('Lic'), _('Category'), _('Handler'), $this->strClub, _('Heat'), _('Comments'));
 }
 /**
  * Constructor
  * @param {integer} $prueba Prueba ID
  * @param {integer} $jornada Jormada ID
  * @param {integer} $manga Manga ID
  * @throws Exception
  */
 function __construct($prueba, $jornada, $manga)
 {
     parent::__construct('Portrait', "print_ordenDeSalida", $prueba, $jornada);
     if ($prueba <= 0 || $jornada <= 0 || $manga <= 0) {
         $this->errormsg = "printOrdenDeSalida: either prueba/jornada/ manga/orden data are invalid";
         throw new Exception($this->errormsg);
     }
     // Datos de la manga
     $m = new Mangas("printOrdenDeSalida", $jornada);
     $this->manga = $m->selectByID($manga);
     // Datos del orden de salida
     $o = new OrdenSalida("printOrdenDeSalida", $manga);
     $os = $o->getData();
     $this->orden = $os['rows'];
     $this->categoria = "L";
     $this->cellHeader = array(_('Order'), _('Dorsal'), _('Name'), _('Breed'), _('Lic'), _('Handler'), $this->strClub, _('Heat'), _('Comments'));
     // obtenemos los datos de equipos de la jornada indexados por el ID del equipo
     $eq = new Equipos("print_ordenDeSalida", $prueba, $jornada);
     $this->teams = array();
     foreach ($eq->getTeamsByJornada() as $team) {
         $this->teams[$team['ID']] = $team;
     }
 }
Esempio n. 3
0
 /**
  * Evalua el resultado de una competicion por equipos
  * @param {array} $r1 datos de la manga 1
  * @param {array} $r2 datos de la manga 2
  */
 function evalFinalEquipos($r1, $r2, $mindogs, $mode)
 {
     // Datos de equipos de la jornada
     $eobj = new Equipos("evalFinalEquipos", $this->prueba->ID, $this->jornada->ID);
     $tbj = $eobj->getTeamsByJornada();
     // reindexamos equipos por ID y aniadimos campos para evaluar clasificacion
     $teams = array();
     foreach ($tbj as $equipo) {
         if ($equipo['Nombre'] === "-- Sin asignar --") {
             continue;
         }
         // comprobamos la categoria. si no coincide tiramos el equipo
         $modes = array("L", "M", "S", "MS", "LMS", "T", "LM", "ST", "LMST");
         if (!category_match($equipo['Categorias'], $modes[$mode])) {
             continue;
         }
         $r = array_merge($equipo, array('C1' => 0, 'C2' => 0, 'T1' => 0, 'T2' => 0, 'P1' => 0, 'P2' => 0, 'Tiempo' => 0, 'Penalizacion' => 0));
         $teams[$equipo['ID']] = $r;
     }
     // procesamos manga 1. Se asume que los resultados ya vienen ordenados por puesto,
     // de manera que se contabilizan solo los mindogs primeros perros de cada equipo
     if ($r1 != null) {
         foreach ($r1['rows'] as $resultado) {
             $eq = $resultado['Equipo'];
             if (!array_key_exists($eq, $teams)) {
                 $this->myLogger->notice("evalFinalEquipos(): Prueba:{$this->prueba->ID} Jornada:{$this->jornada->ID} Manga:1 Equipo:{$eq} no existe");
                 continue;
             }
             if ($teams[$eq]['C1'] >= $mindogs) {
                 continue;
             }
             $teams[$eq]['C1']++;
             $teams[$eq]['T1'] += $resultado['Tiempo'];
             $teams[$eq]['P1'] += $resultado['Penalizacion'];
             $teams[$eq]['Tiempo'] += $resultado['Tiempo'];
             $teams[$eq]['Penalizacion'] += $resultado['Penalizacion'];
         }
     }
     // procesamos manga 2
     if ($r2 != null) {
         foreach ($r2['rows'] as $resultado) {
             $eq = $resultado['Equipo'];
             if (!array_key_exists($eq, $teams)) {
                 $this->myLogger->notice("evalFinalEquipos(): Prueba:{$this->prueba->ID} Jornada:{$this->jornada->ID} Manga:2 Equipo:{$eq} no existe");
                 continue;
             }
             if ($teams[$eq]['C2'] >= $mindogs) {
                 continue;
             }
             $teams[$eq]['C2']++;
             $teams[$eq]['T2'] += $resultado['Tiempo'];
             $teams[$eq]['P2'] += $resultado['Penalizacion'];
             $teams[$eq]['Tiempo'] += $resultado['Tiempo'];
             $teams[$eq]['Penalizacion'] += $resultado['Penalizacion'];
         }
     }
     // rellenamos huecos hasta completar mindogs
     foreach ($teams as &$team) {
         // 100:Eliminado 200:NoPresentado 400:Pendiente
         for ($n = $team['C1']; $n < $mindogs; $n++) {
             $team['P1'] += 400;
             $team['Penalizacion'] += 400;
         }
         for ($n = $team['C2']; $n < $mindogs; $n++) {
             $team['P2'] += 400;
             $team['Penalizacion'] += 400;
         }
     }
     // eliminamos el indice del array
     $final = array_values($teams);
     // re-ordenamos los datos en base a la puntuacion
     usort($final, function ($a, $b) {
         if ($a['Penalizacion'] == $b['Penalizacion']) {
             return $a['Tiempo'] > $b['Tiempo'] ? 1 : -1;
         }
         return $a['Penalizacion'] > $b['Penalizacion'] ? 1 : -1;
     });
     // retornamos resultado
     return $final;
 }
Esempio n. 4
0
 /**
  * Gestion de resultados en Equipos3/Equipos4
  * Agrupa los resultados por equipos y genera una lista de equipos ordenados por resultados
  * @param {array} resultados de la manga ordenados por participante
  * @param {int} prueba PruebaID
  * @param {int} jornada JornadaID
  * @param {int} $mindogs minimun number of dogs on a team
  * @return {array} datos de equipos de la manga ordenados por resultados de equipo
  */
 static function getTeamResults($resultados, $prueba, $jornada, $mindogs = 4)
 {
     // Datos de equipos de la jornada. obtenemos prueba y jornada del primer elemento del array
     $m = new Equipos("getTeamResults", $prueba, $jornada);
     $teams = $m->getTeamsByJornada();
     // reindexamos por ID y anyadimos un campos extra Tiempo, penalizacion y el array de resultados del equipo
     $equipos = array();
     foreach ($teams as &$equipo) {
         $equipo['Resultados'] = array();
         $equipo['Tiempo'] = 0.0;
         $equipo['Penalizacion'] = 0.0;
         $equipos[$equipo['ID']] = $equipo;
     }
     // now fill team members array.
     // notice that $resultados is already sorted by results
     foreach ($resultados as &$result) {
         $teamid = $result['Equipo'];
         $equipo =& $equipos[$teamid];
         array_push($equipo['Resultados'], $result);
         // suma el tiempo y penalizaciones de los tres/cuatro primeros
         if (count($equipo['Resultados']) <= $mindogs) {
             $equipo['Tiempo'] += floatval($result['Tiempo']);
             $equipo['Penalizacion'] += floatval($result['Penalizacion']);
         }
     }
     // rastrea los equipos con menos de $mindogs participantes y marca los que faltan
     // no presentados
     $teams = array();
     foreach ($equipos as &$equipo) {
         switch (count($equipo['Resultados'])) {
             case 0:
                 continue;
                 // ignore team
                 break;
             case 1:
                 $equipo['Penalizacion'] += 400.0;
                 // required team member undeclared
                 // no break
             // required team member undeclared
             // no break
             case 2:
                 if ($mindogs == 3) {
                     $equipo['Penalizacion'] += 400.0;
                 }
                 // required team member undeclared
                 // no break;
             // required team member undeclared
             // no break;
             case 3:
                 if ($mindogs == 4) {
                     $equipo['Penalizacion'] += 400.0;
                 }
                 // required team member undeclared
                 // no break;
             // required team member undeclared
             // no break;
             case 4:
                 array_push($teams, $equipo);
                 // add team to result to remove unused/empty teams
                 break;
             default:
                 $myLogger = new Logger("Resultados::getTreamResults()");
                 $myLogger->error("Equipo {$equipo['ID']} : '{$equipo['Nombre']}' con exceso de participantes:" . count($equipo['Resultados']));
                 break;
         }
     }
     // finally sort equipos by result instead of id
     usort($teams, function ($a, $b) {
         if ($a['Penalizacion'] == $b['Penalizacion']) {
             return $a['Tiempo'] > $b['Tiempo'] ? 1 : -1;
         }
         return $a['Penalizacion'] > $b['Penalizacion'] ? 1 : -1;
     });
     return $teams;
 }