Esempio n. 1
0
 /**
  * Pagina de resultados de la jornada ordenados por grado/categoría/puesto
  * @param {array} $jornada datos de la jornada
  * @param {object} $insc objeto de tipo Inscripcion con las inscripciones de la prueba
  */
 function createJornadaDataPage($jornada, $insc)
 {
     // create Excel sheet
     $jdatapage = $this->myWriter->addNewSheetAndMakeItCurrent();
     $name = $this->normalizeSheetName("Data " . $jornada['Nombre']);
     $jdatapage->setName($name);
     // write table header
     $this->writeTableHeader();
     $rondas = Jornadas::enumerateRondasByJornada($jornada['ID'])['rows'];
     // obtenemos los datos "personales" de los perros de la jornada
     $lista = $insc->inscritosByJornada($jornada['ID'], false)['rows'];
     $eq = new Equipos("excel_printInscripciones", $this->prueba['ID'], $jornada['ID']);
     $inscritos = array();
     foreach ($lista as $perro) {
         // add team information
         $perro['Equipo'] = $eq->getTeamByPerro($perro['Perro'])['Nombre'];
         // reindexamos las inscripciones por el PerroID
         $inscritos[$perro['Perro']] = $perro;
     }
     // obtenemos todas las clasificaciones de la jornada
     $clas = new Clasificaciones("excel_Clasificaciones", $this->prueba['ID'], $jornada['ID']);
     $results = array();
     foreach ($rondas as $ronda) {
         $mangas = array($ronda['Manga1'], $ronda['Manga2']);
         $clasifRonda = $clas->clasificacionFinal($ronda['Rondas'], $mangas, $ronda['Mode']);
         $results = array_merge($results, $clasifRonda['rows']);
     }
     // OK ya tenemos los datos de toda la jornada; ahora a ordenar por grado,categoría y puesto
     usort($results, function ($a, $b) {
         $res = strcmp($a['Grado'], $b['Grado']);
         if ($res != 0) {
             return $res;
         }
         $res = strcmp($a['Categoria'], $b['Categoria']);
         if ($res != 0) {
             return $res;
         }
         return $a['Puesto'] > $b['Puesto'] ? 1 : -1;
     });
     // componemos la fila Excel anyiadiendo datos personales
     //
     // 'Dorsal',
     // 'Nombre','NombreLargo','Genero','Raza','Licencia','LOE_RRC','Categoria','Grado','NombreGuia','NombreClub','Pais', // datos del perro
     // 'Equipo','Celo','Observaciones', // datos de la inscripcion en la jornada
     // 'F1','R1','E1','N1','Tiempo1','Penal1', // datos de la manga 1
     // 'F2','R2','E2','N2','Tiempo2','Penal2', // datos de la manga 2
     //  // TODO: handle series with more than 2 rounds
     // 'Tiempo','Penalizacion','Calificacion'
     foreach ($results as $perro) {
         $row = array();
         // si el perro no esta en la lista de inscritos, marca error e ignora entrada
         if (!array_key_exists($perro['Perro'], $inscritos)) {
             $this->myLogger->error("Encontrada Clasificacion para perro no inscrito:" . $perro['Perro']);
             continue;
         }
         $pdata =& $inscritos[$perro['Perro']];
         $pdata['Done'] = 1;
         // mark perro inscrito _and_ with clasification
         // datos personales
         $row[] = $perro['Dorsal'];
         $row[] = $pdata['Nombre'];
         $row[] = $pdata['NombreLargo'];
         $row[] = $pdata['Genero'];
         $row[] = $pdata['Raza'];
         $row[] = $pdata['Licencia'];
         $row[] = $pdata['LOE_RRC'];
         $row[] = $pdata['Categoria'];
         $row[] = $pdata['Grado'];
         $row[] = $pdata['NombreGuia'];
         $row[] = $pdata['NombreClub'];
         $row[] = $pdata['Pais'];
         // Datos de la inscripcion
         $row[] = $pdata['Equipo'];
         $row[] = $pdata['Celo'];
         $row[] = $pdata['Observaciones'];
         // resultados manga 1
         $row[] = $perro['F1'];
         // Manga 1: faltas + tocados
         $row[] = $perro['R1'];
         // Manga 1: rehuses
         $row[] = $perro['E1'];
         // Manga 1: eliminado
         $row[] = $perro['N1'];
         // manga 1: no presentado
         $row[] = $perro['T1'];
         // manga 1: tiempo
         $row[] = $perro['P1'];
         // manga 1: penalizacion
         // resultados manga 2
         $row[] = $perro['F2'];
         // Manga 2: faltas + tocados
         $row[] = $perro['R2'];
         // Manga 2: rehuses
         $row[] = $perro['E2'];
         // Manga 2: eliminado
         $row[] = $perro['N2'];
         // manga 2: no presentado
         $row[] = $perro['T2'];
         // manga 2: tiempo
         $row[] = $perro['P2'];
         // manga 2: penalizacion
         // datos globales de clasificacion
         $row[] = $perro['Tiempo'];
         $row[] = $perro['Penalizacion'];
         $row[] = $perro['Calificacion'];
         // !!finaly!! add perro to excel table
         $this->myWriter->addRow($row);
     }
     // por ultimo metemos las inscripciones que no tienen resultado asociado
     foreach ($inscritos as $pdata) {
         if (array_key_exists('Done', $pdata)) {
             continue;
         }
         // already done
         $row = array();
         // datos personales
         $row[] = $pdata['Dorsal'];
         $row[] = $pdata['Nombre'];
         $row[] = $pdata['NombreLargo'];
         $row[] = $pdata['Genero'];
         $row[] = $pdata['Raza'];
         $row[] = $pdata['Licencia'];
         $row[] = $pdata['LOE_RRC'];
         $row[] = $pdata['Categoria'];
         $row[] = $pdata['Grado'];
         $row[] = $pdata['NombreGuia'];
         $row[] = $pdata['NombreClub'];
         $row[] = $pdata['Pais'];
         // add perro without results to excel table
         $this->myWriter->addRow($row);
     }
 }
/**
 * 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 */
}