/**
  * 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;
     }
 }
Example #2
0
 /**
  * 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()");
 }
Example #5
0
 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);
 }
Example #6
0
 /**
  * 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++;
     }
 }
Example #9
0
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 */
}