/** * 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; } }
/** * Delete jornada with provided ID * @param {integer} jornada name primary key * @return "" on success ; otherwise null */ function delete($jornadaid) { $this->myLogger->enter(); if ($jornadaid <= 0) { return $this->error("Invalid Jornada ID"); } // borramos cada una de las mangas de esta jornada $mng = new Mangas("deleteJornada", $jornadaid); $res = $mng->selectByJornada(); if (!is_array($res)) { return $res; } // error foreach ($res['rows'] as $manga) { $mng->deleteByID($manga['ID']); } // borramos cada una de las tandas de la jornada $tnd = new Tandas("jornadas::delete()", $this->prueba, $jornadaid); $tnd->removeJornada(); // Borramos equipos de esta prueba/jornada $res = $this->query("DELETE FROM Equipos WHERE ( Jornada = {$jornadaid} );"); if (!$res) { return $this->error($this->conn->error); } // y borramos la propia jornada $res = $this->query("DELETE FROM Jornadas WHERE ( ID = {$jornadaid} );"); if (!$res) { return $this->error($this->conn->error); } $this->myLogger->leave(); return ""; }
$this->SetFont($this->getFontName(), 'B', 11); // bold 11px $this->Cell($this->pos[13], 6, $puesto, 'LR', 0, $this->align[13], true); $this->Ln(); $rowcount++; } // Línea de cierre $this->Cell(array_sum($this->pos), 0, '', 'T'); $this->myLogger->leave(); } } // Consultamos la base de datos try { $idprueba = http_request("Prueba", "i", 0); $idjornada = http_request("Jornada", "i", 0); $idmanga = http_request("Manga", "i", 0); $mode = http_request("Mode", "i", 0); $mngobj = new Mangas("printResultadosByManga", $idjornada); $manga = $mngobj->selectByID($idmanga); $resobj = new Resultados("printResultadosByManga", $idprueba, $idmanga); $resultados = $resobj->getResultados($mode); // throw exception if pending dogs // Creamos generador de documento $pdf = new ResultadosByManga($idprueba, $idjornada, $manga, $resultados, $mode); $pdf->AliasNbPages(); $pdf->composeTable(); $pdf->Output("resultadosByManga.pdf", "D"); // "D" means open download dialog } catch (Exception $e) { die($e->getMessage()); }
/** * 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()"); }
public function getAll() { if (!$this->application->request->isGet()) { throw new Exception('Method not allowed', 405); } $mangas = Mangas::find(array('order' => 'name ASC')); if (!$mangas) { throw new Exception('Query not executed', 500); } if ($mangas->count() == 0) { return array('code' => 204, 'content' => 'No Manga instance found'); } $output = array(); foreach ($mangas as $m) { $mArr = $manga->toArray(); $mgNames = array(); foreach ($mArr['genres'] as $mg) { $mg = MangaGenre::findFirst($mg); array_push($mgNames, $mg->getName()); } $mArr['genres'] = $mgNames; array_push($output, $mArr); } return array('code' => 200, 'content' => $output); }
/** * 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; }
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()); }
function printFormulario() { $cols = array(_("Category"), _("Dist") . ".", _("Obst") . ".", _("Spd") . ".", _("SCT"), _("MCT")); $size = array(20, 15, 12.5, 12.5, 15, 15); $mng = new Mangas("printFormularioTRS", $this->jornada->ID); // obtenemos la lista de mangas de la jornada $mangas = $mng->selectByJornada()['rows']; for ($count = 0; $count < count($mangas); $count++) { if ($count % 8 == 0) { $this->AddPage(); $this->Ln(15); } $manga1 = $mangas[$count]; $manga2 = null; if (array_key_exists($count + 1, $mangas)) { $manga2 = $mangas[$count + 1]; } // cabecera $this->ac_header(2, 12); $this->Cell(90, 10, $manga1['Descripcion'], 'LTBR', 0, 'L', true); if ($manga2 != null) { $this->Cell(10, 10, "", 0, 0, 0, false); $this->Cell(90, 10, $manga2['Descripcion'], 'LTBR', 0, 'L', true); } $this->Ln(); // columnas $this->ac_row(1, 10); $this->Cell(20, 10, $cols[0], 'LRB', 0, 'C', true); for ($n = 1; $n < count($size); $n++) { $this->Cell($size[$n], 10, $cols[$n], "RB", 0, "C", true); } if ($manga2 != null) { $this->Cell(10, 10, "", 0, 0, 0, false); $this->Cell(20, 10, $cols[0], 'LRB', 0, 'C', true); for ($n = 1; $n < count($size); $n++) { $this->Cell($size[$n], 10, $cols[$n], "RB", 0, "C", true); } } $this->Ln(); // datos $this->ac_row(0, 10); $this->Cell(20, 10, $this->federation->getCategory('L'), 'LRB', 0, 'C', true); for ($n = 1; $n < count($size); $n++) { $this->Cell($size[$n], 10, "", "RB", 0, "C", true); } if ($manga2 != null) { $this->Cell(10, 10, "", 0, 0, 0, false); $this->Cell(20, 10, $this->federation->getCategory('L'), 'LRB', 0, 'C', true); for ($n = 1; $n < count($size); $n++) { $this->Cell($size[$n], 10, "", "RB", 0, "C", true); } } $this->Ln(); $this->Cell(20, 10, $this->federation->getCategory('M'), 'LRB', 0, 'C', true); for ($n = 1; $n < count($size); $n++) { $this->Cell($size[$n], 10, "", "RB", 0, "C", true); } if ($manga2 != null) { $this->Cell(10, 10, "", 0, 0, 0, false); $this->Cell(20, 10, $this->federation->getCategory('M'), 'LRB', 0, 'C', true); for ($n = 1; $n < count($size); $n++) { $this->Cell($size[$n], 10, "", "RB", 0, "C", true); } } $this->Ln(); $this->Cell(20, 10, $this->federation->getCategory('S'), 'LRB', 0, 'C', true); for ($n = 1; $n < count($size); $n++) { $this->Cell($size[$n], 10, "", "RB", 0, "C", true); } if ($manga2 != null) { $this->Cell(10, 10, "", 0, 0, 0, false); $this->Cell(20, 10, $this->federation->getCategory('S'), 'LRB', 0, 'C', true); for ($n = 1; $n < count($size); $n++) { $this->Cell($size[$n], 10, "", "RB", 0, "C", true); } } $this->Ln(); if (intval($this->federation->get('Heights')) == 4) { $this->Cell(20, 10, $this->federation->getCategory('T'), 'LRB', 0, 'C', true); for ($n = 1; $n < count($size); $n++) { $this->Cell($size[$n], 10, "", "RB", 0, "C", true); } if ($manga2 != null) { $this->Cell(10, 10, "", 0, 0, 0, false); $this->Cell(20, 10, $this->federation->getCategory('T'), 'LRB', 0, 'C', true); for ($n = 1; $n < count($size); $n++) { $this->Cell($size[$n], 10, "", "RB", 0, "C", true); } } $this->Ln(); } $this->Ln(5); $count++; } }
if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ require_once __DIR__ . "/../logging.php"; require_once __DIR__ . "/../tools.php"; require_once __DIR__ . "/../auth/AuthManager.php"; require_once __DIR__ . "/classes/Mangas.php"; try { $result = null; $prueba = http_request("Prueba", "i", 0); $jornada = http_request("Jornada", "i", 0); $operation = http_request("Operation", "s", null); $manga = http_request("Manga", "i", 0); if ($operation === null) { throw new Exception("Call to mangaFunctions without 'Operation' requested"); } $mangas = new Mangas("mangaFunctions", $jornada); $am = new AuthManager("mangaFunctions"); switch ($operation) { // no direct "insert", as created/destroyed from jornadaFunctions case "update": $am->access(PERMS_OPERATOR); $result = $mangas->update($manga); break; case "sharejuez": $am->access(PERMS_OPERATOR); $result = $mangas->shareJuez(); break; // no direct delete as created/destroyed from jornadaFunctions // no direct delete as created/destroyed from jornadaFunctions case "enumerate": $result = $mangas->selectByJornada();
/** * Comprueba y actualiza las referencias de una inscripcion en una jornada * @param {object} $inscripcion Datos de la inscripcion * @param {object} $jornada Datos de la jornada * @param {object} $perro Datos del perro */ function inscribePerroEnJornada($inscripcion, $jornada, $perro) { $myConfig = Config::getInstance(); $myLogger = new Logger("inscribePerroEnJornada", $myConfig->getEnv("debug_level")); $j = $jornada['ID']; $p = $jornada['Prueba']; $idperro = $inscripcion['Perro']; $g = $perro['Grado']; // buscamos la lista de mangas de esta jornada $mobj = new Mangas("inscribePerroEnJornada", $jornada['ID']); $mangas = $mobj->selectByJornada(); if (!$mangas) { throw new Exception("No hay mangas definidas para la jornada {$j} de la prueba {$p}"); } foreach ($mangas['rows'] as $manga) { $mid = $manga['ID']; $mtype = $manga['Tipo']; $mgrado = $manga['Grado']; $inscribir = false; // comprobamos si el perro tiene que estar en esta manga switch ($mtype) { case 1: // 'Pre Agility Manga 1', 'P.A.' if ($g === 'P.A.') { $inscribir = true; } break; case 2: // 'Pre Agility Manga 2', 'P.A.' if ($g === 'P.A.') { $inscribir = true; } break; case 3: // 'Agility Grado I Manga 1', 'GI' // 'Agility Grado I Manga 1', 'GI' case 4: // 'Agility Grado I Manga 2', 'GI' if ($g === 'GI') { $inscribir = true; } break; case 5: // 'Agility Grado II', 'GII' if ($g === 'GII') { $inscribir = true; } break; case 6: // 'Agility Grado III', 'GIII' if ($g === 'GIII') { $inscribir = true; } break; case 7: // 'Agility Abierta', '-' // 'Agility Abierta', '-' case 8: // 'Agility Equipos (3 mejores)', '-' // 'Agility Equipos (3 mejores)', '-' case 9: // 'Agility Equipos (Conjunta)', '-' $inscribir = true; break; case 10: // 'Jumping Grado II', 'GII' if ($g === 'GII') { $inscribir = true; } break; case 11: // 'Jumping Grado III', 'GIII' if ($g === 'GIII') { $inscribir = true; } break; case 12: // 'Jumping Abierta', '-' // 'Jumping Abierta', '-' case 13: // 'Jumping Equipos (3 mejores)', '-' // 'Jumping Equipos (3 mejores)', '-' case 14: // 'Jumping Equipos (Conjunta)', '-' // 'Jumping Equipos (Conjunta)', '-' case 15: // 'Ronda K.O.', '-' // 'Ronda K.O.', '-' case 16: // 'Manga especial', '-' $inscribir = true; break; default: throw new Exception("Tipo de manga {$mtype} desconocido. Manga:{$mid} Jornada:{$j} Prueba:{$p}"); break; } // Verificamos el orden de salida de la manga $os = new OrdenSalida("inscribePerroEnJornada", $manga['ID']); $orden = $os->getOrden(); $myLogger->info("OrdenDeSalida Prueba:{$p} Jornada:{$j} Manga:{$mid} Tipo:{$mtype} Grado:{$mgrado} es:\n{$orden}"); if ($inscribir == false) { $myLogger->info("Eliminando Perro:{$idperro} Grado:{$g} del orden de salida grado:{$mgrado}"); $os->removeFromList($idperro); } else { $myLogger->info("Insertando Perro:{$idperro} Grado:{$g} en del orden de salida gradp:{$mgrado}"); $os->insertIntoList($idperro); } $orden = $os->getOrden(); $myLogger->info("Nuevo OrdenDeSalidada: \n{$orden}"); // verificamos la tabla de resultados de esta manga $rs = new Resultados("inscribePerroEnJornada::Resultados", $jornada['Prueba'], $mid); if ($inscribir == false) { $myLogger->info("Borrando Perro:{$idperro} Grado:{$g} de Resultados manga:{$mid}"); // borramos entrada del perro en la tabla de resultados de la manga $rs->delete($idperro); } else { $eqobj = new Equipos("inscribePerroEnJornada", $p, $j); // nos aseguramos de que existe una entrada $myLogger->info("Insertando Perro:{$idperro} Grado:{$g} en Resultados manga:{$mid}"); // en la tabla de resultados de esta manga para este perro $res = $rs->insertByData($perro, $inscripcion, $eqobj->getTeamByPerro($idperro)); if ($res !== "") { // esta funcion es in "insert on duplicate key update"... // no deberia fallar si ya existe una entrada en la tabla de resultados $myLogger->error("Failed: Insert into Resultados perro:{$idperro} Prueba:{$p} Jornada:{$j} Manga:{$mid}"); $myLogger->error($res); } } } /* foreach */ }