/** * 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 */ }