/** * Calcula el orden de salida de una manga en funcion del orden inverso al resultado de su manga "hermana" * @return {string} nuevo orden de salida; null on error */ function reverse($mode = 8) { $this->myLogger->enter(); // fase 1: buscamos la "manga hermana" $mhandler = new Mangas("OrdenSalida::reverse()", $this->jornada['ID']); $hermanas = $mhandler->getHermanas($this->manga['ID']); if (!is_array($hermanas)) { return $this->error("Error find hermanas info for jornada:{$this->jornada['ID']} and manga:{$this->manga['ID']}"); } if ($hermanas[1] == null) { return $this->error("Cannot reverse order: Manga:{$this->manga['ID']} of Jornada:{$this->jornada['ID']} has no brother"); } // fase 2: evaluamos resultados de la manga hermana $this->myLogger->trace("El orden de salida original para manga:{$this->manga['ID']} jornada:{$this->jornada['ID']} es:\n{$hermanas[0]->Orden_Salida}"); // En funcion del tipo de recorrido tendremos que leer diversos conjuntos de Resultados switch ($hermanas[0]->Recorrido) { case 0: // Large,medium,small (3-heighs) Large,medium,small,tiny (4-heights) $this->invierteResultados($hermanas[1], 0); $this->invierteResultados($hermanas[1], 1); $this->invierteResultados($hermanas[1], 2); if ($this->federation->get('Heights') == 4) { $this->invierteResultados($hermanas[1], 5); } break; case 1: // Large,medium+small (3heights) Large+medium,Small+tiny (4heights) if ($this->federation->get('Heights') == 3) { $this->invierteResultados($hermanas[1], 0); $this->invierteResultados($hermanas[1], 3); } else { $this->invierteResultados($hermanas[1], 6); $this->invierteResultados($hermanas[1], 7); } break; case 2: // conjunta L+M+S (3 heights) L+M+S+T (4heights) if ($this->federation->get('Heights') == 3) { $this->invierteResultados($hermanas[1], 4); } else { $this->invierteResultados($hermanas[1], 8); } break; } $nuevo = $this->getOrden(); $this->myLogger->trace("El orden de salida nuevo para manga:{$this->manga['ID']} jornada:{$this->jornada['ID']} es:\n{$nuevo}"); $this->myLogger->leave(); return $nuevo; }
/** * Evalua el puesto en que ha quedado un perro determinado en la clasificacion final * hay que tener en cuenta que en esta clasificacion, el perro en cuestion todavia * no tiene los datos de (al menos) una manga almacenados, con lo que si nos lo encontramos, * habrá que quitar "1 pendiente" y substituirlo por los datos que tenemos * * Esta funcion no tiene en cuenta pruebas por equipos ni ko. simplemente considera las dos primeras * mangas (o solo la primera, si no hay manga hermana * *@param {integer} $mode Modo 0:L 1:M 2:S 3:M+S 4:L+M+S 5:T 6:L+M 7:S+T 8:L+M+S+T *@param {array} $perro datos del perro (Perro,Faltas,Tocados,Rehuses,Eliminado,NoPresentado,Tiempo,IDManga) *@return {array} requested data or error */ function getPuestoFinal($mode, $perro) { $result = null; $myManga = $perro['Manga']; // buscamos la manga hermana $mng = new Mangas("getPuestoFinal", $this->jornada->ID); $hermanas = $mng->getHermanas($myManga); $id1 = intval($hermanas[0]->ID); $id2 = 0; $r1 = new Resultados("Clasificaciones::getPuestoFinal", $this->prueba->ID, $id1); $c1 = $r1->getPenalizaciones($mode, $myManga == $id1 ? $perro : null); $c2 = null; if ($hermanas[1] != null) { $id2 = intval($hermanas[1]->ID); $r2 = new Resultados("Clasificaciones::getPuestoFinal", $this->prueba->ID, $id2); $c2 = $r2->getPenalizaciones($mode, $myManga == $id2 ? $perro : null); } $result = $this->evalPenalizacionFinal(array($id1, $id2), $c1, $c2); if ($result == null) { return null; } // null result -> error if (!is_array($result)) { $this->myLogger->error($result); return $result; } // iterate result to find our dog $table = $result['rows']; $size = $result['total']; $idperro = intval($perro['Perro']); // en el caso de que todavia no haya clasificaciones, la tabla esta vacia y nuestro perro va el primero :-) if ($size == 0) { return array('success' => true, 'puesto' => 1, 'penalizacion' => 0); } // buscamos el puesto en el que finalmente ha quedado $myPerro y lo retornamos for ($idx = 0; $idx < $size; $idx++) { if ($table[$idx]['Perro'] != $idperro) { continue; } return array('success' => true, 'puesto' => 1 + $idx, 'penalizacion' => $table[$idx]['Penalizacion']); } //arriving here means error: perro not found return $this->error("Perro:{$idperro} not found in clasificaciones::getPuesto()"); }
break; } $rowcount++; $orden++; } // Línea de cierre $this->Cell(array_sum($this->pos), 0, '', 'T'); $this->myLogger->leave(); } } // Consultamos la base de datos try { $prueba = http_request("Prueba", "i", 0); $jornada = http_request("Jornada", "i", 0); $manga = http_request("Manga", "i", 0); $mode = http_request("Mode", "i", 0); // Datos de la manga y su manga hermana $m = new Mangas("printEntradaDeDatos", $jornada); $mangas = $m->getHermanas($manga); // Datos del orden de salida $o = new OrdenSalida("printEntradaDeDatos", $manga); $orden = $o->getData(); // Creamos generador de documento $pdf = new EntradaDeDatos($prueba, $jornada, $mangas, $orden['rows'], $mode); $pdf->AliasNbPages(); $pdf->composeTable(); $pdf->Output("entradaDeDatos.pdf", "D"); // "D" means open download dialog } catch (Exception $e) { die("Error accessing database: " . $e->getMessage()); }