/** * @{inheritdoc} * @see \TSLBasicRecordDAO::getFetchQuery() */ protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL) { if ($subOperation === 'fetchJoinedWithNames') { $postas_id = $constraints->getFilterField('postas_id'); if ($postas_id) { $sql = 'SELECT * FROM ( SELECT po.postas_id,postas_descripcion,array_to_string(ARRAY(SELECT unnest(array_agg(atl.atletas_ap_paterno)) ORDER BY 1),\',\') AS postas_atletas FROM tb_postas po LEFT JOIN tb_postas_detalle pd ON pd.postas_id = po.postas_id LEFT JOIN tb_atletas atl ON atl.atletas_codigo = pd.atletas_codigo WHERE po.postas_id=' . $postas_id . ' GROUP BY po.postas_id ORDER BY postas_descripcion ) res'; $constraints->removeFilterField('postas_id'); } else { $sql = 'SELECT * FROM ( SELECT po.postas_id,postas_descripcion,array_to_string(ARRAY(SELECT unnest(array_agg(atl.atletas_ap_paterno)) ORDER BY 1),\',\') AS postas_atletas FROM tb_postas po LEFT JOIN tb_postas_detalle pd ON pd.postas_id = po.postas_id LEFT JOIN tb_atletas atl ON atl.atletas_codigo = pd.atletas_codigo WHERE po.competencias_pruebas_id=' . $constraints->getFilterField('competencias_pruebas_id') . ' GROUP BY po.postas_id ORDER BY postas_descripcion ) res'; $constraints->removeFilterField('competencias_pruebas_id'); } } else { $sql = 'SELECT postas_id,postas_descripcion,competencias_pruebas_id,activo,xmin AS "versionId" FROM tb_postas '; } if ($this->activeSearchOnly == TRUE && $subOperation != 'fetchJoinedWithNames') { // Solo activos $sql .= ' where activo=TRUE '; } $where = $constraints->getFilterFieldsAsString(); if (strlen($where) > 0) { if ($this->activeSearchOnly == TRUE && $subOperation != 'fetchJoinedWithNames') { $sql .= ' and ' . $where; } else { $sql .= ' where ' . $where; } } if (isset($constraints)) { $orderby = $constraints->getSortFieldsAsString(); if ($orderby !== NULL) { $sql .= ' order by ' . $orderby; } } // Chequeamos paginacion $startRow = $constraints->getStartRow(); $endRow = $constraints->getEndRow(); if ($endRow > $startRow) { $sql .= ' LIMIT ' . ($endRow - $startRow) . ' OFFSET ' . $startRow; } $sql = str_replace('like', 'ilike', $sql); //echo $sql; return $sql; }
/** * @see \TSLBasicRecordDAO::getFetchQuery() */ protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL) { $sql = ''; if ($subOperation == 'fetchRecordsResumen') { $sql = 'select * from sp_view_resumen_records_por_prueba_categorias(\'' . $constraints->getFilterField('apppruebas_codigo') . '\',\'' . $constraints->getFilterField('atletas_sexo') . '\',' . '\'' . $constraints->getFilterField('records_tipo_codigo') . '\',' . '\'' . $constraints->getFilterField('fecha_desde') . '\',\'' . $constraints->getFilterField('fecha_hasta') . '\',\'' . $constraints->getFilterField('categorias_codigo') . '\',' . $constraints->getFilterField('incluye_manuales') . ',' . $constraints->getFilterField('incluye_altura') . ',null)'; } return $sql; }
/** * @see \TSLBasicRecordDAO::getFetchQuery() */ protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL) { if ($subOperation == 'fetchJoined') { $sql = 'select eatl.competencias_pruebas_id,eatl.competencias_pruebas_origen_id,eatl.competencias_codigo,atletas_resultados_id,eatl.pruebas_codigo,competencias_pruebas_fecha,' . '(case when apppruebas_viento_individual = TRUE THEN ar.atletas_resultados_viento ELSE competencias_pruebas_viento END) as competencias_pruebas_viento,' . 'competencias_pruebas_manual,competencias_pruebas_tipo_serie,competencias_pruebas_nro_serie,' . 'competencias_pruebas_anemometro, competencias_pruebas_material_reglamentario, competencias_pruebas_origen_combinada, competencias_pruebas_observaciones, ' . 'coalesce(atletas_codigo,\'' . $constraints->getFilterField('atletas_codigo') . '\') as atletas_codigo,atletas_resultados_resultado,atletas_resultados_puntos,atletas_resultados_puesto,pr.pruebas_descripcion,apppruebas_marca_menor,' . 'apppruebas_marca_menor,apppruebas_verifica_viento,unidad_medida_regex_e,unidad_medida_tipo,unidad_medida_regex_m,' . 'eatl.activo,ar.xmin as "versionId" ' . 'from tb_competencias_pruebas eatl ' . 'left join tb_atletas_resultados ar on ar.competencias_pruebas_id = eatl.competencias_pruebas_id ' . 'inner join tb_pruebas pr on pr.pruebas_codigo =eatl.pruebas_codigo ' . 'inner join tb_app_pruebas_values pv on pv.apppruebas_codigo = pr.pruebas_generica_codigo ' . 'inner join tb_pruebas_clasificacion cl on cl.pruebas_clasificacion_codigo = pv.pruebas_clasificacion_codigo ' . 'inner join tb_unidad_medida um on um.unidad_medida_codigo = cl.unidad_medida_codigo '; // 'where competencias_pruebas_origen_id is not null and atletas_codigo=\'46658908\''; } else { if ($subOperation == 'fetchDetalleForPrueba') { $sql = 'select * from sp_view_prueba_resultados_detalle(' . $constraints->getFilterField('atletas_resultados_id') . ') '; $constraints->removeFilterField('atletas_resultados_id'); } else { $sql = 'select competencias_pruebas_id,atletas_resultados_id,atletas_codigo,competencias_codigo,' . '(case when apppruebas_viento_individual = TRUE THEN eatl.atletas_resultados_viento ELSE competencias_pruebas_viento END) as competencias_pruebas_viento,' . 'competencias_pruebas_manual,' . 'pruebas_codigo,competencias_pruebas_origen_combinada,competencias_pruebas_fecha,' . 'competencias_pruebas_tipo_serie,competencias_pruebas_nro_serie,' . 'competencias_pruebas_anemometro,competencias_pruebas_material_reglamentario,' . 'competencias_pruebas_observaciones,atletas_resultados_resultado,atletas_resultados_puntos,atletas_resultados_puesto,' . 'activo,xmin as "versionId" from tb_atletas_resultados eatl ' . 'inner join tb_competencias_pruebas cp on cp.competencias_pruebas_id = eatl.competencias_pruebas_id ' . 'inner join tb_pruebas pr on pr.pruebas_codigo =eatl.pruebas_codigo ' . 'inner join tb_app_pruebas_values pv on pv.apppruebas_codigo = pr.pruebas_generica_codigo '; } } if ($this->activeSearchOnly == TRUE) { // Solo activos $sql .= ' where eatl.activo=TRUE '; } // Que pasa si el campo a buscar existe en ambas partes del join? $where = $constraints->getFilterFieldsAsString(); if (strlen($where) > 0) { if ($this->activeSearchOnly == TRUE) { $sql .= ' and ' . $where; } else { $sql .= ' where ' . $where; } } if (isset($constraints)) { $orderby = $constraints->getSortFieldsAsString(); if ($orderby !== NULL) { $sql .= ' order by ' . $orderby; } } // Chequeamos paginacion $startRow = $constraints->getStartRow(); $endRow = $constraints->getEndRow(); if ($endRow > $startRow) { $sql .= ' LIMIT ' . ($endRow - $startRow) . ' OFFSET ' . $startRow; } $sql = str_replace('"atletas_resultados_id"', 'eatl.atletas_resultados_id', $sql); return $sql; }
/** * @see \TSLBasicRecordDAO::getFetchQuery() */ protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL) { /* @var $record CompetenciasPruebasModel */ if ($subOperation == 'fetchPruebasPorCompetencia') { // Aqui solo se devolveran las pruebas genericas que componen una competencia , por ende // se espera coo parametro el codigo de competencia, es similar a la anterior pero esperando diferente // parametro , las separa por comodidad. La lista solo contendra las pruebas ya actualmente // definidas como parte de la competencia $where = $constraints->getFilterFieldsAsString(); $sql = 'select cp.competencias_pruebas_id,cp.competencias_codigo, pr.pruebas_codigo, cp.competencias_pruebas_fecha,cp.competencias_pruebas_viento,cp.competencias_pruebas_manual, cp.competencias_pruebas_origen_combinada, cp.competencias_pruebas_tipo_serie,cp.competencias_pruebas_nro_serie,cp.competencias_pruebas_anemometro, cp.competencias_pruebas_material_reglamentario, cp.competencias_pruebas_observaciones, pr.pruebas_generica_codigo, pv.apppruebas_descripcion, pr.pruebas_descripcion || \' (\' || (case when pruebas_sexo = \'F\' then \'Damas\' else \'Varones\' end) || \')\' as pruebas_descripcion, pv.apppruebas_multiple, (case when cp.competencias_pruebas_tipo_serie IN (\'SU\',\'FI\') then cp.competencias_pruebas_tipo_serie else (cp.competencias_pruebas_tipo_serie || \'-\' || cp.competencias_pruebas_nro_serie) end) as serie, cp.competencias_pruebas_origen_id,pruebas_sexo,cp.xmin as "versionId" from tb_competencias_pruebas cp inner join tb_pruebas pr on pr.pruebas_codigo = cp.pruebas_codigo inner join tb_app_pruebas_values pv on pv.apppruebas_codigo = pr.pruebas_generica_codigo where ' . str_replace('"competencias_', 'cp."competencias_', $where) . 'order by pruebas_sexo,apppruebas_descripcion,cp.competencias_pruebas_tipo_serie,cp.competencias_pruebas_nro_serie'; } else { if ($subOperation == 'fetchCompetenciasResultadoPrueba') { // Devuelve los datos de una tleta para una especifica prueba , si la prueba es null retornara todos // sus resultados. $sql = 'select * from sp_view_resultados_competencia_especifica(\'' . $constraints->getFilterField('competencias_codigo') . '\',\'' . $constraints->getFilterField('pruebas_codigo') . '\',\'' . $constraints->getFilterField('pruebas_sexo') . '\',null,null) '; $constraints->removeFilterField('pruebas_codigo'); $constraints->removeFilterField('competencias_codigo'); $constraints->removeFilterField('pruebas_sexo'); // echo $sql; } else { if ($subOperation == 'fetchPruebasValidasForCompetencia') { // Lista de todas las competencias posibles de crear para una determinada competencia esten creadas o no, por la // posibilidad que se requiere crear series o grupos, Si una combinada es parte ya de la competencia , no // aparecera en esta lista, ya que no se puede definir 2 veces. // // El query busca todas las posibles pruebas para la categoria de la competencia , menos la combinadas ya definidasd // Devuelve informacion complemnetaria de las pruebas para su posible trabajo/validacion en el lado solicitante. $sql = 'select * from ( select pruebas_codigo,pruebas_descripcion || \' (\' || (case when pruebas_sexo = \'F\' then \'Damas\' else \'Varones\' end) || \')\' as pruebas_descripcion, pruebas_generica_codigo, pr.categorias_codigo, pruebas_sexo, pg.apppruebas_multiple, pg.apppruebas_verifica_viento, pg.apppruebas_descripcion, pg.apppruebas_viento_individual, pg.apppruebas_nro_atletas, unidad_medida_tipo, unidad_medida_regex_e, unidad_medida_regex_m, (SELECT competencias_pruebas_id FROM tb_competencias_pruebas where pruebas_codigo = (select pruebas_codigo from tb_pruebas_detalle where pruebas_detalle_prueba_codigo=pr.pruebas_codigo) and competencias_codigo=\'' . $constraints->getFilterField('competencias_codigo') . '\') as competencias_pruebas_origen_id from tb_pruebas pr inner join tb_app_pruebas_values pg on pg.apppruebas_codigo = pr.pruebas_generica_codigo inner join tb_pruebas_clasificacion pc on pc.pruebas_clasificacion_codigo = pg.pruebas_clasificacion_codigo inner join tb_unidad_medida um on um.unidad_medida_codigo = pc.unidad_medida_codigo where pr.categorias_codigo = (select categorias_codigo from tb_competencias where competencias_codigo=\'' . $constraints->getFilterField('competencias_codigo') . '\')) results '; $constraints->removeFilterField('competencias_codigo'); } else { $sql = 'select cp.competencias_pruebas_id,cp.competencias_codigo, cp.pruebas_codigo, cp.competencias_pruebas_fecha,cp.competencias_pruebas_viento,cp.competencias_pruebas_manual, cp.competencias_pruebas_origen_combinada, cp.competencias_pruebas_tipo_serie,cp.competencias_pruebas_nro_serie,cp.competencias_pruebas_anemometro, cp.competencias_pruebas_material_reglamentario, cp.competencias_pruebas_observaciones,cp.competencias_pruebas_origen_id, competencias_pruebas_origen_combinada, cp.xmin as "versionId" from tb_competencias_pruebas cp '; } } if ($this->activeSearchOnly == TRUE) { // Solo activos $sql .= ' where eatl.activo = TRUE '; } // Que pasa si el campo a buscar existe en ambas partes del join? $where = $constraints->getFilterFieldsAsString(); if (strlen($where) > 0) { if ($this->activeSearchOnly == TRUE) { $sql .= ' and ' . $where; } else { $sql .= ' where ' . $where; } } if (isset($constraints)) { $orderby = $constraints->getSortFieldsAsString(); if ($orderby !== NULL) { $sql .= ' order by ' . $orderby; } } // Chequeamos paginacion $startRow = $constraints->getStartRow(); $endRow = $constraints->getEndRow(); if ($endRow > $startRow) { $sql .= ' LIMIT ' . ($endRow - $startRow) . ' OFFSET ' . $startRow; } } $sql = str_replace('like', 'ilike', $sql); // echo $sql; return $sql; }
/** * @see \TSLBasicRecordDAO::getFetchQuery() */ protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL) { $sql = ''; // Construyo el arreglo pgsql de atletas $prefix = ''; $atletasArray = '\'{'; for ($i = 1; $i <= 5; $i++) { $atleta_num = 'atletas_codigo_0' . $i; if ($constraints->getFilterField($atleta_num)) { $atletasArray .= $prefix . $constraints->getFilterField($atleta_num) . ''; } $prefix = ','; } $atletasArray .= '}\''; if ($subOperation == 'fetchResultadosPorPrueba') { $sql = 'select * from sp_view_resumen_resultados_por_prueba_atletas(\'' . $constraints->getFilterField('apppruebas_codigo') . '\'' . ',' . $atletasArray . ',' . '\'' . $constraints->getFilterField('atletas_sexo') . '\',' . '\'' . $constraints->getFilterField('fecha_desde') . '\',\'' . $constraints->getFilterField('fecha_hasta') . '\',\'' . $constraints->getFilterField('categorias_desde') . '\',\'' . $constraints->getFilterField('categorias_hasta') . '\',' . $constraints->getFilterField('incluye_manuales') . ',' . $constraints->getFilterField('incluye_observadas') . ',null)'; } else { if ($subOperation == 'fetchResultadosPorPruebaTopN') { $sql = 'select * from sp_view_resumen_topn_resultados_por_prueba_atletas(\'' . $constraints->getFilterField('apppruebas_codigo') . '\'' . ',' . $atletasArray . ',' . '\'' . $constraints->getFilterField('atletas_sexo') . '\',' . '\'' . $constraints->getFilterField('fecha_desde') . '\',\'' . $constraints->getFilterField('fecha_hasta') . '\',\'' . $constraints->getFilterField('categorias_desde') . '\',\'' . $constraints->getFilterField('categorias_hasta') . '\',' . $constraints->getFilterField('incluye_manuales') . ',' . $constraints->getFilterField('incluye_observadas') . ',' . $constraints->getFilterField('n_records') . ')'; } } // $sql = str_replace('"competencias_pruebas_id"', 'ar.competencias_pruebas_id', $sql); // echo $sql; return $sql; }
/** * @see TSLBasicRecordDAO::getFetchQuery() */ protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL) { if ($subOperation == 'fetchForList') { // USamos un campo virtual que es atletas_agno el cual es computado , por ende se usa un select /// extermo para que el where lo pueda usar. $sql = 'select atletas_codigo ,atletas_nombre_completo,atletas_sexo,' . 'paises_codigo from tb_atletas a'; } else { if ($subOperation == 'fetchForListByPosta') { // USamos un campo virtual que es atletas_agno el cual es computado , por ende se usa un select /// extermo para que el where lo pueda usar. $atletas_codigo = $constraints->getFilterField('atletas_codigo'); if ($atletas_codigo) { $where = $constraints->getFilterFieldsAsString(); $sql = 'SELECT a.atletas_codigo, a.atletas_nombre_completo FROM tb_atletas a '; if (strlen($where) > 0) { $sql .= ' where ' . $where; } } else { $sql = 'SELECT a.atletas_codigo, a.atletas_nombre_completo FROM tb_atletas a WHERE atletas_sexo = (SELECT pr.pruebas_sexo FROM tb_postas ps INNER JOIN tb_competencias_pruebas cp ON cp.competencias_pruebas_id = ps.competencias_pruebas_id INNER JOIN tb_pruebas pr ON pr.pruebas_codigo = cp.pruebas_codigo WHERE ps.postas_id = ' . $constraints->getFilterField('postas_id') . ') '; $constraints->removeFilterField('postas_id'); $where = $constraints->getFilterFieldsAsString(); if (strlen($where) > 0) { $sql .= ' and ' . $where . ' and a.atletas_protected=FALSE '; } else { $sql .= 'and a.atletas_protected=FALSE '; } } } else { if ($subOperation == 'fetchForListByPrueba') { // USamos un campo virtual que es atletas_agno el cual es computado , por ende se usa un select /// extermo para que el where lo pueda usar. $sql = 'SELECT DISTINCT CASE WHEN ar.postas_id IS NULL THEN a.atletas_codigo ELSE pd.atletas_codigo END AS atletas_codigo, CASE WHEN ar.postas_id IS NOT NULL THEN (SELECT atletas_nombre_completo FROM tb_atletas WHERE atletas_codigo = pd.atletas_codigo) ELSE atletas_nombre_completo END AS atletas_nombre_completo FROM tb_atletas a INNER JOIN tb_atletas_resultados ar ON ar.atletas_codigo = a.atletas_codigo INNER JOIN tb_competencias_pruebas cp ON cp.competencias_pruebas_id = ar.competencias_pruebas_id INNER JOIN tb_pruebas pc ON pc.pruebas_codigo = cp.pruebas_codigo LEFT JOIN tb_postas po ON po.competencias_pruebas_id = cp.competencias_pruebas_id AND po.postas_id = ar.postas_id LEFT JOIN tb_postas_detalle pd ON pd.postas_id = ar.postas_id '; } else { if ($subOperation == 'fetchForListByPruebaGenerica') { $sql = 'SELECT DISTINCT -- IMPORTANTE , si es una posta dado que no existe un unico codigo de atleta -- lo simulamos con el concatenado ordenado de los codigos de los atletas de las postas. -- Si se desea ubicar a una posta DEBERA ENVIARSE el valor de atletas_resultados_id del resultado -- si no la respuesta sera incorrecta. (CASE WHEN ar.postas_id IS NOT NULL THEN (SELECT array_to_string(ARRAY(SELECT unnest(array_agg(atl.atletas_codigo)) ORDER BY 1), \',\') FROM tb_postas_detalle pd INNER JOIN tb_postas po ON po.postas_id = pd.postas_id INNER JOIN tb_atletas atl ON atl.atletas_codigo = pd.atletas_codigo WHERE pd.postas_id = ar.postas_id GROUP BY pd.postas_id) ELSE a.atletas_codigo END) AS atletas_codigo, (CASE WHEN ar.postas_id IS NOT NULL THEN (SELECT array_to_string(ARRAY(SELECT unnest(array_agg(atl.atletas_ap_paterno)) ORDER BY 1), \',\') FROM tb_postas_detalle pd INNER JOIN tb_postas po ON po.postas_id = pd.postas_id INNER JOIN tb_atletas atl ON atl.atletas_codigo = pd.atletas_codigo WHERE pd.postas_id = ar.postas_id GROUP BY pd.postas_id) ELSE atletas_nombre_completo END) AS atletas_nombre_completo FROM tb_atletas a INNER JOIN tb_atletas_resultados ar ON ar.atletas_codigo = a.atletas_codigo INNER JOIN tb_competencias_pruebas cp ON cp.competencias_pruebas_id = ar.competencias_pruebas_id INNER JOIN tb_pruebas pc ON pc.pruebas_codigo = cp.pruebas_codigo INNER JOIN tb_app_pruebas_values pv ON pv.apppruebas_codigo = pc.pruebas_generica_codigo'; } else { if ($subOperation == 'fetchForListForResultados') { $sql = 'SELECT * FROM (SELECT atletas_codigo ,atletas_nombre_completo,atletas_sexo,activo FROM tb_atletas WHERE atletas_protected != TRUE ) a'; } else { // USamos un campo virtual que es atletas_agno el cual es computado , por ende se usa un select /// extermo para que el where lo pueda usar. $sql = 'SELECT * FROM (SELECT atletas_codigo ,atletas_ap_paterno ,atletas_ap_materno,atletas_nombres,atletas_nombre_completo,atletas_sexo,' . 'atletas_nro_documento,atletas_nro_pasaporte,paises_codigo,atletas_fecha_nacimiento,EXTRACT(YEAR FROM atletas_fecha_nacimiento)::CHARACTER VARYING AS atletas_agno,atletas_telefono_casa,' . 'atletas_telefono_celular,atletas_email,atletas_direccion,atletas_observaciones,atletas_talla_ropa_buzo,atletas_talla_ropa_poloshort,atletas_talla_zapatillas,atletas_norma_zapatillas,' . 'atletas_url_foto,atletas_protected,activo,xmin AS "versionId" FROM tb_atletas WHERE atletas_protected != TRUE) a'; } } } } } if ($this->activeSearchOnly == TRUE) { // Solo activos if ($subOperation == 'fetchForListByPosta') { $sql .= ' and a.activo=TRUE '; } else { $sql .= ' where a.activo=TRUE '; } } if ($subOperation !== 'fetchForListByPosta') { $where = $constraints->getFilterFieldsAsString(); if (strlen($where) > 0) { if ($this->activeSearchOnly == TRUE) { $sql .= ' and ' . $where; } else { $sql .= ' where ' . $where; } } } if (isset($constraints)) { $orderby = $constraints->getSortFieldsAsString(); if ($orderby !== NULL) { $sql .= ' order by ' . $orderby; } } $sql = str_replace('"atletas_codigo"', 'a.atletas_codigo', $sql); // Chequeamos paginacion $startRow = $constraints->getStartRow(); $endRow = $constraints->getEndRow(); if ($endRow > $startRow) { $sql .= ' LIMIT ' . ($endRow - $startRow) . ' OFFSET ' . $startRow; } $sql = str_replace('like', 'ilike', $sql); // echo $sql; return $sql; }
/** * @see TSLBasicRecordDAO::getFetchQuery() */ protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL) { /* @var $record AtletasPruebasResultadosModel */ // Las 2 primeras operaciones no requieren proceso alguno de parametors fuera del modelo, como filtros , limites ,etc if ($subOperation == 'fetchPruebasPorAtleta') { // Aqui solo se devolveran en que pruebas genericas ha participado historicamente el atleta especificado, se espera el codigo de atleta como parametro $atletas_codigo = $constraints->getFilterField('atletas_codigo'); $sql = 'SELECT DISTINCT pv.apppruebas_codigo,pv.apppruebas_descripcion FROM tb_atletas_resultados ar INNER JOIN tb_competencias_pruebas cp ON cp.competencias_pruebas_id = ar.competencias_pruebas_id INNER JOIN tb_pruebas pr ON pr.pruebas_codigo = cp.pruebas_codigo INNER JOIN tb_app_pruebas_values pv ON pv.apppruebas_codigo = pr.pruebas_generica_codigo WHERE ar.atletas_codigo = \'' . $atletas_codigo . '\'' . 'UNION ALL SELECT DISTINCT pv.apppruebas_codigo,pv.apppruebas_descripcion FROM tb_postas_detalle pd INNER JOIN tb_postas po ON po.postas_id = pd.postas_id INNER JOIN tb_competencias_pruebas cp ON cp.competencias_pruebas_id = po.competencias_pruebas_id INNER JOIN tb_atletas_resultados ar on ar.competencias_pruebas_id = cp.competencias_pruebas_id INNER JOIN tb_pruebas pr ON pr.pruebas_codigo = cp.pruebas_codigo INNER JOIN tb_app_pruebas_values pv ON pv.apppruebas_codigo = pr.pruebas_generica_codigo WHERE pd.atletas_codigo = \'' . $atletas_codigo . '\'' . ' ORDER BY apppruebas_descripcion'; $constraints->removeFilterField('atletas_codigo'); } else { if ($subOperation == 'fetchPruebasPorCompetencia') { // Aqui solo se devolveran las pruebas genericas que componen una competencia , por ende // se espera coo parametro el codigo de competencia, es similar a la anterior pero esperando diferente // parametro , las separa por comodidad. $where = $constraints->getFilterFieldsAsString(); $sql = 'SELECT DISTINCT pv.apppruebas_codigo,pv.apppruebas_descripcion FROM tb_atletas_resultados ar ' . 'INNER JOIN tb_competencias_pruebas cp ON cp.competencias_pruebas_id = ar.competencias_pruebas_id ' . 'INNER JOIN tb_pruebas pr ON pr.pruebas_codigo = cp.pruebas_codigo ' . 'INNER JOIN tb_app_pruebas_values pv ON pv.apppruebas_codigo = pr.pruebas_generica_codigo ' . 'WHERE' . $where . 'order BY apppruebas_descripcion'; } else { if ($subOperation == 'fetchForRecords') { // Aqui solo se devolveran las pruebas genericas de uno o mas atletas , se espera como filto un atleta y // una prueba para una seleccion afinada. Se retiran las pruebas con viento ilegal $atletas_codigo = $constraints->getFilterField('atletas_codigo'); $apppruebas_codigo = $constraints->getFilterField('apppruebas_codigo'); $constraints->removeFilterField('atletas_codigo'); $constraints->removeFilterField('apppruebas_codigo'); $sql = 'SELECT * FROM (SELECT atletas_resultados_id, (CASE WHEN eatl.postas_id IS NOT NULL THEN (SELECT array_to_string(ARRAY(SELECT unnest(array_agg(atl.atletas_codigo)) ORDER BY 1), \',\') FROM tb_postas_detalle pd INNER JOIN tb_postas po ON po.postas_id = pd.postas_id INNER JOIN tb_atletas atl ON atl.atletas_codigo = pd.atletas_codigo WHERE pd.postas_id = eatl.postas_id GROUP BY pd.postas_id) ELSE atl.atletas_codigo END) AS atletas_codigo, apppruebas_codigo, (CASE WHEN coalesce((CASE WHEN apppruebas_viento_individual = TRUE THEN eatl.atletas_resultados_viento ELSE competencias_pruebas_viento END), 0.00) > apppruebas_viento_limite_normal THEN -10000.00 ELSE coalesce((CASE WHEN apppruebas_viento_individual = TRUE THEN eatl.atletas_resultados_viento ELSE competencias_pruebas_viento END), 0.00) END) AS competencias_pruebas_viento, co.categorias_codigo, co.competencias_descripcion, ciudades_descripcion, paises_descripcion, ciudades_altura, competencias_pruebas_fecha, atletas_resultados_resultado AS numb_resultado FROM tb_atletas_resultados eatl INNER JOIN tb_competencias_pruebas cp ON cp.competencias_pruebas_id = eatl.competencias_pruebas_id INNER JOIN tb_atletas atl ON eatl.atletas_codigo = atl.atletas_codigo INNER JOIN tb_pruebas pr ON pr.pruebas_codigo = cp.pruebas_codigo INNER JOIN tb_app_pruebas_values pv ON pv.apppruebas_codigo = pr.pruebas_generica_codigo INNER JOIN tb_competencias co ON co.competencias_codigo = cp.competencias_codigo INNER JOIN tb_ciudades ciu ON ciu.ciudades_codigo = co.ciudades_codigo INNER JOIN tb_paises pa ON pa.paises_codigo = ciu.paises_codigo INNER JOIN tb_pruebas_clasificacion cl ON cl.pruebas_clasificacion_codigo = pv.pruebas_clasificacion_codigo INNER JOIN tb_unidad_medida um ON um.unidad_medida_codigo = cl.unidad_medida_codigo where apppruebas_codigo=\'' . $apppruebas_codigo . '\' and competencias_pruebas_anemometro = TRUE AND competencias_pruebas_material_reglamentario = TRUE AND -- competencias_pruebas_manual = false and atletas_resultados_resultado != \'0\' AND atletas_resultados_resultado IS NOT NULL AND atletas_resultados_resultado <> \'\' ) res WHERE res.competencias_pruebas_viento != -10000.00 AND atletas_codigo = \'' . $atletas_codigo . '\' ' . 'ORDER BY competencias_pruebas_fecha'; } else { if ($subOperation == 'fetchJoined') { $sql = 'SELECT * FROM (' . 'SELECT atletas_resultados_id, cp.pruebas_codigo, eatl.atletas_codigo, -- Esto para resolver los casos de postas (CASE WHEN eatl.postas_id IS NOT NULL THEN (SELECT max(postas_descripcion) || \' - \' || array_to_string(ARRAY(SELECT unnest(array_agg(atl.atletas_ap_paterno)) ORDER BY 1), \',\') FROM tb_postas_detalle pd INNER JOIN tb_postas po ON po.postas_id = pd.postas_id INNER JOIN tb_atletas atl ON atl.atletas_codigo = pd.atletas_codigo WHERE pd.postas_id = eatl.postas_id GROUP BY pd.postas_id) ELSE atletas_nombre_completo END ) AS atletas_nombre_completo, pr.pruebas_descripcion, cp.competencias_pruebas_tipo_serie, cp.competencias_pruebas_nro_serie, cp.competencias_codigo, (CASE WHEN apppruebas_viento_individual = TRUE THEN eatl.atletas_resultados_viento ELSE competencias_pruebas_viento END) AS competencias_pruebas_viento, atletas_resultados_puesto, competencias_pruebas_manual, apppruebas_multiple, co.categorias_codigo, competencias_pruebas_material_reglamentario, competencias_pruebas_anemometro, co.competencias_descripcion, ciudades_descripcion, paises_descripcion, atl.atletas_sexo, ciudades_altura, competencias_pruebas_observaciones, atletas_resultados_protected, competencias_pruebas_fecha, atletas_resultados_resultado, atletas_resultados_puntos, (CASE WHEN competencias_pruebas_tipo_serie IN (\'SU\', \'FI\') THEN competencias_pruebas_tipo_serie ELSE (competencias_pruebas_tipo_serie || \'-\' || competencias_pruebas_nro_serie) END) AS serie, (CASE WHEN competencias_pruebas_material_reglamentario = FALSE OR competencias_pruebas_anemometro = FALSE OR competencias_pruebas_manual = TRUE OR ciudades_altura = TRUE THEN TRUE ELSE FALSE END) AS obs, eatl.competencias_pruebas_id, eatl.postas_id, eatl.activo, eatl.xmin AS "versionId" FROM tb_atletas_resultados eatl INNER JOIN tb_competencias_pruebas cp ON cp.competencias_pruebas_id = eatl.competencias_pruebas_id INNER JOIN tb_atletas atl ON eatl.atletas_codigo = atl.atletas_codigo INNER JOIN tb_pruebas pr ON pr.pruebas_codigo = cp.pruebas_codigo INNER JOIN tb_app_pruebas_values pv ON pv.apppruebas_codigo = pr.pruebas_generica_codigo INNER JOIN tb_competencias co ON co.competencias_codigo = cp.competencias_codigo INNER JOIN tb_ciudades ciu ON ciu.ciudades_codigo = co.ciudades_codigo INNER JOIN tb_paises pa ON pa.paises_codigo = ciu.paises_codigo WHERE competencias_pruebas_origen_combinada = FALSE' . ' ) answer '; } else { if ($subOperation == 'fetchAtletasResultadoPrueba') { // Devuelve los datos de una tleta para una especifica prueba , si la prueba es null retornara todos // sus resultados. $sql = 'SELECT * FROM sp_view_resultados_atleta(\'' . $constraints->getFilterField('atletas_codigo') . '\',\'' . $constraints->getFilterField('apppruebas_codigo') . '\',NULL,NULL) '; $constraints->removeFilterField('apppruebas_codigo'); $constraints->removeFilterField('atletas_codigo'); } else { $sql = 'select atletas_resultados_id, atletas_codigo, competencias_codigo, pruebas_codigo,' . 'atletas_resultados_viento, atletas_resultados_puesto, atletas_resultados_manual,' . 'competencias_pruebas_fecha, competencias_pruebas_viento,' . 'competencias_pruebas_tipo_serie, competencias_pruebas_nro_serie, competencias_pruebas_anemometro,' . 'competencias_pruebas_material_reglamentario, competencias_pruebas_manual, competencias_pruebas_observaciones,' . 'atletas_resultados_resultado, atletas_resultados_puntos, ' . 'atletas_resultados_puesto, activo, xmin as "versionId" from tb_atletas_resultados eatl ' . 'inner join tb_competencias_pruebas cp on cp.competencias_pruebas_id = eatl.competencias_pruebas_id ' . 'inner join tb_pruebas pr on pr.pruebas_codigo = cp.pruebas_codigo ' . 'inner join tb_app_pruebas_values pv on pv.apppruebas_codigo = pr.pruebas_generica_codigo '; } } if ($this->activeSearchOnly == TRUE) { // Solo activos $sql .= ' where eatl.activo = TRUE '; } // Que pasa si el campo a buscar existe en ambas partes del join? $where = $constraints->getFilterFieldsAsString(); if (strlen($where) > 0) { if ($this->activeSearchOnly == TRUE) { $sql .= ' and ' . $where; } else { $sql .= ' where ' . $where; } } // TRUCO: dado que en pantalla se muestra e resultado para formato visual , ese // campo no puede ser usado para el sort , en este caso se cambia por el real // uniformizado. (norm_resultado) // Asi mismo para el fetch principal de todas las pruebas , retiramos de la pantalla principal aquellas // que son parte de una prueba combinada, ya que estas se editaran a traves de las mismas. if ($subOperation == 'fetchAtletasResultadoPrueba') { $sql = str_replace('atletas_resultados_resultado', 'norm_resultado', $sql); } // order by? if (isset($constraints)) { $orderby = $constraints->getSortFieldsAsString(); if ($orderby !== NULL) { $sql .= ' order by ' . $orderby; } } // Chequeamos paginacion $startRow = $constraints->getStartRow(); $endRow = $constraints->getEndRow(); if ($endRow > $startRow) { $sql .= ' LIMIT ' . ($endRow - $startRow) . ' OFFSET ' . $startRow; } } } } $sql = str_replace('like', 'ilike', $sql); // echo $sql; return $sql; }