/**
  * @see TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     // Si la busqueda permite buscar solo activos e inactivos
     if ($subOperation == 'fetchJoined') {
         $sql = 'select apppruebas_codigo,apppruebas_descripcion,pv.pruebas_clasificacion_codigo,pruebas_clasificacion_descripcion,apppruebas_marca_menor,apppruebas_marca_mayor,apppruebas_multiple,' . 'apppruebas_verifica_viento,apppruebas_viento_individual,apppruebas_viento_limite_normal,apppruebas_viento_limite_multiple,' . 'apppruebas_nro_atletas,apppruebas_factor_manual,apppruebas_protected,pv.activo,pv.xmin as "versionId" from  tb_app_pruebas_values pv ' . 'inner join tb_pruebas_clasificacion pc on pc.pruebas_clasificacion_codigo=pv.pruebas_clasificacion_codigo';
     } else {
         if ($subOperation == 'fetchDescriptions') {
             $sql = 'SELECT apppruebas_codigo,apppruebas_descripcion FROM  tb_app_pruebas_values pv ';
         } else {
             $sql = 'select apppruebas_codigo,apppruebas_descripcion,pruebas_clasificacion_codigo,apppruebas_marca_menor,apppruebas_marca_mayor,apppruebas_multiple,apppruebas_viento_individual,' . 'apppruebas_verifica_viento,apppruebas_viento_limite_normal,apppruebas_viento_limite_multiple,apppruebas_nro_atletas,apppruebas_factor_manual,apppruebas_protected,activo,xmin as "versionId" from  tb_app_pruebas_values pv ';
         }
     }
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where pv.activo=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         $sql .= ' and ' . $where;
     }
     if (isset($constraints)) {
         $orderby = $constraints->getSortFieldsAsString();
         if ($orderby !== NULL) {
             $sql .= ' order by ' . $orderby;
         }
     }
     // No es necesario paginacion aqui
     $sql = str_replace('like', 'ilike', $sql);
     return $sql;
 }
 /**
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     // Si la busqueda permite buscar solo activos e inactivos
     if ($subOperation == 'fetchJoined') {
         $sql = 'select pruebas_clasificacion_codigo,pruebas_clasificacion_descripcion,pruebas_tipo_codigo,pc.unidad_medida_codigo,um.unidad_medida_regex_e,um.unidad_medida_regex_m,um.unidad_medida_tipo,' . 'pc.activo,pc.xmin as "versionId" from  tb_pruebas_clasificacion pc ' . 'inner join tb_unidad_medida um on um.unidad_medida_codigo=pc.unidad_medida_codigo ';
     } else {
         $sql = 'select pruebas_clasificacion_codigo,pruebas_clasificacion_descripcion,pruebas_tipo_codigo,unidad_medida_codigo,activo,xmin as "versionId" from  tb_pruebas_clasificacion pc';
     }
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where pc.activo=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         $sql .= ' and ' . $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;
     }
     return $sql;
 }
 /**
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     // Si la busqueda permite buscar solo activos e inactivos
     $sql = 'SELECT paises_codigo,paises_descripcion,paises_entidad,paises_use_apm,paises_use_docid,regiones_codigo,activo,xmin AS "versionId" FROM  tb_paises ';
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where "activo"=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         $sql .= ' and ' . $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);
     return $sql;
 }
 /**
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     // Si la busqueda permite buscar solo activos e inactivos
     //        $sql = 'select usuario_perfil_id,usuarios_id,perfil_id,activo,xmin as "versionId"';
     if ($subOperation == 'fetchFull') {
         $sql = 'select usuario_perfil_id,usuarios_id,up.perfil_id,up.activo,up.xmin as "versionId",sys_systemcode from tb_sys_usuario_perfiles up
                 inner join tb_sys_perfil pr on pr.perfil_id = up.perfil_id ';
     } else {
         $sql = 'select usuario_perfil_id,usuarios_id,up.perfil_id,up.activo,up.xmin as "versionId" from tb_sys_usuario_perfiles up ';
     }
     /*  if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where activo=TRUE ';
         } */
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         $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;
     }
     return $sql;
 }
 /**
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     if ($subOperation == 'fetchJoined') {
         $sql = 'select competencias_codigo,competencias_descripcion,comp.competencia_tipo_codigo,ct.competencia_tipo_descripcion,comp.categorias_codigo,cat.categorias_descripcion,' . 'comp.paises_codigo,pais.paises_descripcion,comp.ciudades_codigo,ciu.ciudades_descripcion,ciu.ciudades_altura,EXTRACT(YEAR FROM competencias_fecha_inicio) as agno,competencias_fecha_inicio,competencias_fecha_final,competencias_es_oficial,competencias_clasificacion,comp.activo,comp.xmin as "versionId" from  tb_competencias comp ' . 'left join tb_competencia_tipo ct on ct.competencia_tipo_codigo = comp.competencia_tipo_codigo ' . 'left join tb_categorias cat on cat.categorias_codigo = comp.categorias_codigo ' . 'left join tb_paises pais on pais.paises_codigo = comp.paises_codigo ' . 'left join tb_ciudades ciu on ciu.ciudades_codigo = comp.ciudades_codigo ';
     } else {
         $sql = 'select competencias_codigo,competencias_descripcion,comp.competencia_tipo_codigo,comp.categorias_codigo,' . 'comp.paises_codigo,comp.ciudades_codigo,competencias_fecha_inicio,competencias_fecha_final,competencias_es_oficial,' . 'competencias_clasificacion,comp.activo,comp.xmin as "versionId" from  tb_competencias comp';
     }
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where comp.activo=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         $sql .= ' and ' . $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);
     return $sql;
 }
 /**
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     // Si la busqueda permite buscar solo activos e inactivos
     $sql = 'select clubes_codigo,clubes_descripcion,clubes_persona_contacto,clubes_telefono_oficina,clubes_telefono_celular,clubes_email,clubes_direccion,clubes_web_url,activo,xmin as "versionId" from  tb_clubes ';
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where "activo"=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         $sql .= ' and ' . $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);
     return $sql;
 }
 /**
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     // Si la busqueda permite buscar solo activos e inactivos
     $sql = 'select entrenadores_codigo,entrenadores_ap_paterno,entrenadores_ap_materno,entrenadores_nombres,entrenadores_nombre_completo,entrenadores_nivel_codigo,activo,xmin as "versionId" from  tb_entrenadores ';
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where "activo"=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         $sql .= ' and ' . $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;
     }
     return $sql;
 }
 /**
  * @see TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     // Si la busqueda permite buscar solo activos e inactivos
     if ($subOperation == 'fetchJoined') {
         $sql = 'select atletas_carnets_id,atletas_carnets_agno::CHARACTER VARYING as atletas_carnets_agno,atletas_carnets_numero,catl.atletas_codigo,atletas_nombre_completo,atletas_carnets_fecha,catl.activo,catl.xmin as "versionId" from  tb_atletas_carnets catl ' . 'inner join tb_atletas atl on catl.atletas_codigo = atl.atletas_codigo ';
     } else {
         $sql = 'select atletas_carnets_id,atletas_carnets_agno::CHARACTER VARYING as atletas_carnets_agno,atletas_carnets_numero,atletas_codigo,atletas_carnets_fecha,activo,xmin as "versionId" from  tb_atletas_carnets catl';
     }
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where catl.activo=TRUE ';
     }
     // Que pasa si el campo a buscar existe en ambas partes del join?
     $where = $constraints->getFilterFieldsAsString();
     if ($this->activeSearchOnly == TRUE) {
         if (strlen($where) > 0) {
             $sql .= ' and ' . $where;
         }
     } else {
         $sql .= ' where ' . $where;
     }
     if (isset($constraints)) {
         $orderby = $constraints->getSortFieldsAsString();
         if ($orderby !== NULL) {
             $sql .= ' order by ' . $orderby;
         }
     }
     $sql = str_replace('like', 'ilike', $sql);
     return $sql;
 }
 /**
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     // Si la busqueda permite buscar solo activos e inactivos
     if ($subOperation == 'fetchWithPesos') {
         $sql = 'select categorias_codigo,categorias_descripcion,appcat_peso ' . 'from  tb_categorias c ' . 'inner join tb_app_categorias_values cv on cv.appcat_codigo = c.categorias_validacion';
     } else {
         $sql = 'select categorias_codigo,categorias_descripcion,categorias_edad_inicial,categorias_edad_final,categorias_valido_desde,' . 'categorias_validacion,categorias_protected,activo,xmin as "versionId" from  tb_categorias c';
     }
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where c.activo=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         $sql .= ' and ' . $where;
     }
     if (isset($constraints)) {
         $orderby = $constraints->getSortFieldsAsString();
         if ($orderby !== NULL) {
             $sql .= ' order by ' . $orderby;
         }
     }
     //echo $sql;
     return $sql;
 }
 /**
  * @{inheritdoc}
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     if ($subOperation == 'fetchJoined') {
         $sql = 'SELECT postas_detalle_id,postas_id,pd.atletas_codigo,atletas_nombre_completo,pd.activo,pd.xmin AS "versionId" ' . 'FROM  tb_postas_detalle pd ' . 'inner join tb_atletas atl on atl.atletas_codigo = pd.atletas_codigo';
     } else {
         $sql = 'SELECT postas_detalle_id,postas_id,atletas_codigo,activo,xmin AS "versionId" FROM  tb_postas_detalle pd';
     }
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where pd.activo=TRUE ';
     }
     $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);
     return $sql;
 }
 /**
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     if ($subOperation == 'fetchJoined') {
         $sql = 'select entrenadoresatletas_id,entrenadores_codigo,eatl.atletas_codigo,atletas_nombre_completo,entrenadoresatletas_desde,entrenadoresatletas_hasta,eatl.activo,eatl.xmin as "versionId" from  tb_entrenadores_atletas eatl ' . 'inner join tb_atletas atl on eatl.atletas_codigo = atl.atletas_codigo ';
     } else {
         $sql = 'select entrenadoresatletas_id,entrenadores_codigo,atletas_codigo,entrenadoresatletas_desde,entrenadoresatletas_hasta,activo,xmin as "versionId" from  tb_entrenadores_atletas eatl';
     }
     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 ($this->activeSearchOnly == TRUE) {
         if (strlen($where) > 0) {
             $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;
     }
     return $sql;
 }
 /**
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     if ($subOperation == 'fetchJoined') {
         $sql = 'select ligasclubes_id,ligas_codigo,lc.clubes_codigo,clubes_descripcion,ligasclubes_desde,ligasclubes_hasta,lc.activo,lc.xmin as "versionId" from  tb_ligas_clubes lc ' . 'inner join tb_clubes club on lc.clubes_codigo = club.clubes_codigo ';
     } else {
         $sql = 'select ligasclubes_id,ligas_codigo,clubes_codigo,ligasclubes_desde,ligasclubes_hasta,activo,xmin as "versionId" from  tb_ligas_clubes lc ';
     }
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where "lc.activo"=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if ($this->activeSearchOnly == TRUE) {
         if (strlen($where) > 0) {
             $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);
     return $sql;
 }
 /**
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     // Si la busqueda permite buscar solo activos e inactivos
     $sql = 'select records_tipo_codigo,records_tipo_descripcion,records_tipo_abreviatura,records_tipo_tipo,records_tipo_clasificacion,' . 'records_tipo_peso,records_tipo_protected,activo,xmin as "versionId" from  tb_records_tipo ';
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where "activo"=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         $sql .= ' and ' . $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);
     return $sql;
 }
 /**
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     // Si la busqueda permite buscar solo activos e inactivos
     //  $sql = 'select pruebas_detalle_id,pruebas_codigo,pruebas_detalle_prueba_codigo,pruebas_detalle_orden,activo,xmin as "versionId" from  tb_pruebas_detalle pd';
     if ($subOperation == 'fetchJoined') {
         $sql = 'select pruebas_detalle_id,pd.pruebas_codigo,pruebas_detalle_prueba_codigo,pr.pruebas_descripcion,pruebas_detalle_orden,pd.activo,pd.xmin as "versionId" from  tb_pruebas_detalle pd ' . 'inner join tb_pruebas pr on pr.pruebas_codigo = pd.pruebas_detalle_prueba_codigo ';
     } else {
         $sql = 'select pruebas_detalle_id,pruebas_codigo,pruebas_detalle_prueba_codigo,pruebas_detalle_orden,activo,xmin as "versionId" from  tb_pruebas_detalle pd';
     }
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where pd.activo=TRUE ';
     }
     // Que pasa si el campo a buscar existe en ambas partes del join?
     $where = $constraints->getFilterFieldsAsString();
     if ($this->activeSearchOnly == TRUE) {
         if (strlen($where) > 0) {
             $sql .= ' and ' . $where;
         }
     } else {
         $sql .= ' where ' . $where;
     }
     if (isset($constraints)) {
         $orderby = $constraints->getSortFieldsAsString();
         if ($orderby !== NULL) {
             $sql .= ' order by ' . $orderby;
         }
     }
     // Dado que la relacion padres a hijos es en la misma tabla se requiere precisar a cual lado del
     // join pertenece la llave principal.
     $sql = str_replace('"pruebas_codigo"', 'pd.pruebas_codigo', $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 pruebas_codigo,pruebas_descripcion,pruebas_generica_codigo,cla.pruebas_clasificacion_descripcion,pr.categorias_codigo,cat.categorias_descripcion,pruebas_sexo,' . 'pruebas_record_hasta,pruebas_anotaciones,pg.apppruebas_multiple,pruebas_protected,pr.activo,pr.xmin as "versionId" from  tb_pruebas pr ' . 'inner join tb_categorias cat on pr.categorias_codigo = cat.categorias_codigo ' . 'inner join tb_app_pruebas_values pg on pg.apppruebas_codigo = pr.pruebas_generica_codigo ' . 'inner join tb_pruebas_clasificacion cla on pg.pruebas_clasificacion_codigo = cla.pruebas_clasificacion_codigo ';
     } else {
         if ($subOperation == 'fetchJoinedFull') {
             $sql = 'select pruebas_codigo,pruebas_descripcion,pruebas_sexo,pr.categorias_codigo,categorias_descripcion,pg.apppruebas_marca_menor,pg.apppruebas_marca_mayor,apppruebas_multiple,' . 'apppruebas_verifica_viento,unidad_medida_regex_e,unidad_medida_regex_m,unidad_medida_tipo,pc.unidad_medida_codigo,pr.activo,pr.xmin as "versionId" ' . ' 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 ' . 'inner join tb_categorias cat on cat.categorias_codigo = pr.categorias_codigo ';
         } else {
             $sql = 'select pruebas_codigo,pruebas_descripcion,pruebas_generica_codigo,categorias_codigo,pruebas_sexo,' . 'pruebas_record_hasta,pruebas_anotaciones,pruebas_protected,activo,xmin as "versionId" from  tb_pruebas pr';
         }
     }
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where pr.activo=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         if ($this->activeSearchOnly == TRUE) {
             $sql .= ' and ' . $where;
         } else {
             $sql .= ' where ' . $where;
         }
     }
     // Para la sub operacion fetchJoinedFull acotamos que no se presenten la pruebas que pertenecen
     // a combinadas , ya que estan no pueden ser agregadas independientemente a un resultado.
     // Asi mismo no mostramos las postas ya que no se soporta operaciones sobre ellas en este DAO
     // eso debe hacerse por los resultados de competencias/pruebas.
     if ($subOperation == 'fetchJoinedFull') {
         // ya existe where
         if (strpos($sql, 'where') !== false) {
             $sql = str_replace('where', 'where apppruebas_nro_atletas <= 1 and pr.pruebas_codigo not in (select pruebas_detalle_prueba_codigo from tb_pruebas_detalle) and ', $sql);
         } else {
             $sql .= ' where apppruebas_nro_atletas <= 1 and pr.pruebas_codigo not in (select pruebas_detalle_prueba_codigo from tb_pruebas_detalle)';
         }
     }
     //       echo $sql;
     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('"categorias_codigo"', 'pr.categorias_codigo', $sql);
     $sql = str_replace('like', 'ilike', $sql);
     return $sql;
 }
 /**
  * El orden ya esta prefijado ignorara cual parametro en ese sentido.
  *
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     // Si la busqueda permite buscar solo activos e inactivos
     $sql = 'select sys_systemcode,menu_id,menu_codigo,menu_descripcion,menu_accesstype,menu_parent_id,menu_orden,activo,xmin as "versionId" from  tb_sys_menu ';
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where "activo"=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         $sql .= ' and ' . $where;
     }
     $sql .= ' order by menu_parent_id,menu_orden';
     return $sql;
 }
 /**
  * @see TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     // Si la busqueda permite buscar solo activos e inactivos
     $sql = 'select entrenadores_nivel_codigo,entrenadores_nivel_descripcion,entrenadores_nivel_protected,activo,xmin as "versionId" from  tb_entrenadores_nivel ';
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where "activo"=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         $sql .= ' and ' . $where;
     }
     if (isset($constraints)) {
         $orderby = $constraints->getSortFieldsAsString();
         if ($orderby !== NULL) {
             $sql .= ' order by ' . $orderby;
         }
     }
     return $sql;
 }
 /**
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     $sql = 'select usuarios_id,usuarios_code,usuarios_password,usuarios_nombre_completo,usuarios_admin,activo,xmin as "versionId" from  tb_usuarios c';
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where c.activo=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         $sql .= ' and ' . $where;
     }
     if (isset($constraints)) {
         $orderby = $constraints->getSortFieldsAsString();
         if ($orderby !== NULL) {
             $sql .= ' order by ' . $orderby;
         }
     }
     $sql = str_replace('like', 'ilike', $sql);
     //echo $sql;
     return $sql;
 }
 /**
  * @{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)
 {
     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)
 {
     if ($subOperation == 'fetchJoined') {
         $sql = 'SELECT
                       atletas_resultados_id,
                       ar.competencias_pruebas_id,
                       ar.atletas_codigo,
                       atletas_nombre_completo,
                       atletas_resultados_resultado,
                       atletas_resultados_puntos,
                       atletas_resultados_puesto,
                       atletas_resultados_viento,
                       ar.postas_id,
                       (CASE WHEN ar.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 = ar.postas_id
                            GROUP BY pd.postas_id)
                       ELSE
                         NULL
                       END ) AS postas_atletas,
                       ar.activo, 
                       ar.xmin AS "versionId"
                     FROM tb_atletas_resultados ar
                     INNER JOIN tb_atletas AT ON AT.atletas_codigo = ar.atletas_codigo ';
     } else {
         $sql = 'select atletas_resultados_id,atletas_codigo,competencias_pruebas_id,atletas_resultados_resultado,atletas_resultados_puesto,atletas_resultados_puntos' . ',atletas_resultados_viento,atletas_resultados_protected,' . 'activo,xmin as "versionId" from  tb_atletas_resultados';
     }
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where ar.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('"competencias_pruebas_id"', 'ar.competencias_pruebas_id', $sql);
     //   echo $sql;
     return $sql;
 }
 /**
  * HAce un fetch a todos los registros de 2 manera la normal y la fetchWithAccess , esta segunda
  * hace un join al menu para determinar los accesos permitidos , es basicamente para uso del GUI
  * al definir los perfiles.
  *
  * @see \TSLBasicRecordDAO::getFetchQuery()
  */
 protected function getFetchQuery(\TSLDataModel &$record = NULL, \TSLRequestConstraints &$constraints = NULL, $subOperation = NULL)
 {
     $sql = 'select perfdet_id,perfil_id,perfdet_accessdef,perfdet_accleer,perfdet_accagregar,perfdet_accactualizar,perfdet_acceliminar,' . 'perfdet_accimprimir,pd.activo,pd.xmin as "versionId" ';
     if ($subOperation === 'fetchWithAccess') {
         $sql .= ',pd.menu_id,menu_accesstype ,menu_descripcion,menu_parent_id,menu_orden from tb_sys_perfil_detalle pd  ';
         $sql .= 'left join tb_sys_menu m on m.menu_id = pd.menu_id  ';
     } else {
         $sql .= ' from tb_sys_perfil_detalle pd  ';
     }
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where pd.activo=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         $sql .= ' and ' . $where;
     }
     // Si la solicitud es la lista preparada con join para basicamente el GUI
     // el orden siempre sera menu_orden
     if ($subOperation === 'fetchWithAccess') {
         $sql .= ' order by menu_orden';
     } else {
         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;
     }
     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)
 {
     // Si la busqueda permite buscar solo activos e inactivos
     $sql = 'select perfil_id,sys_systemcode,perfil_codigo,perfil_descripcion,activo,xmin as "versionId" from tb_sys_perfil';
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where activo=TRUE ';
     }
     $where = $constraints->getFilterFieldsAsString();
     if (strlen($where) > 0) {
         $sql .= ' and ' . $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;
     }
     return $sql;
 }
 /**
  * Parseara los parametros para formar los constraints basados en los
  * datos del request.
  *
  * En el caso de SmarClient esos son basicamente :
  * _startRow = primera fila a enviar del total de los resultados.
  * _endRow = Ultima fila a enviar del total de los resultados.
  * @todo  Agregar el resto conforme se vayan implementando.
  *
  *
  * @param Object $constraintData para el caso de este processor basado en
  * JSON , el string que contiene el objeto Json con los valores requeridos.
  * @param \TSLRequestConstraints $constraints referencia a un objeto constraints
  * si a existe uno creado.
  *
  * @return \TSLRequestConstraints la estructura de los constraints a procesar.
  */
 public function &process($constraintData, &$constraints = NULL)
 {
     $startRow = 0;
     $endRow = 0;
     // Si el parametro no es valido retornamos un arreglo en blanco
     if (!isset($constraintData) || is_null($constraintData)) {
         return NULL;
     }
     if (isset($constraintData['_startRow'])) {
         $startRow = $constraintData['_startRow'];
     }
     if (isset($constraintData['_endRow'])) {
         $endRow = $constraintData['_endRow'];
     }
     // Creamos si no se envia uno para usar.
     if (!isset($constraints) || $constraints === NULL) {
         $constraints = new TSLRequestConstraints();
     }
     // Campos de sort (primer intento un solo campo).
     // El sort viene con un negativo adelante si es descendente
     if (isset($constraintData['_sortBy'])) {
         $pos = strpos($constraintData['_sortBy'], '-');
         if ($pos !== FALSE) {
             $constraints->addSortField(substr($constraintData['_sortBy'], 1), 'DESC');
         } else {
             $constraints->addSortField($constraintData['_sortBy'], 'ASC');
         }
     }
     // Seteamos los datos
     $constraints->setStartRow($startRow);
     $constraints->setEndRow($endRow);
     // Vemos si tenemos que procesar un advanced filter
     // De lo contrario solo efectuamos un filtro normal.
     if (isset($constraintData['_acriteria'])) {
         $afilter = json_decode($constraintData['_acriteria']);
         foreach ($afilter->criteria as $elem) {
             $constraints->addFilterField($elem->fieldName, $elem->value, $elem->operator);
         }
     } else {
         // Los campos de filtro , para el smartClient son todos aquellos que
         // no tienen el underscore delante.
         foreach ($constraintData as $key => $value) {
             // Si empieza con op o libid o parentId son parametros para otors usos no
             // son campos.
             if (!strcmp($key, "op") || !strcmp($key, "libid") || !strcmp($key, "parentId")) {
                 continue;
             }
             // Si no empieza con underscore o _isc (isomorphic smartclient identificador)
             $pos = strpos($key, '_');
             $pos2 = strpos($key, 'isc_');
             if (!($pos === 0 || $pos2 === 0)) {
                 if (isset($constraintData['_textMatchStyle'])) {
                     $constraints->addFilterField($key, $value, $constraintData['_textMatchStyle']);
                 } else {
                     $constraints->addFilterField($key, $value, $constraintData[$key]);
                 }
             }
         }
     }
     return $constraints;
 }
 /**
  * @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)
 {
     /* @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;
 }
    /**
     * @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)
 {
     if ($subOperation == 'fetchJoined') {
         $sql = 'SELECT * FROM (
                 SELECT
                 records_id,
                 records_tipo_codigo,
                 rec.atletas_resultados_id,
                 rec.categorias_codigo,
                 apppruebas_codigo,
                 apppruebas_descripcion,
                  (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,
               (CASE WHEN eatl.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 = eatl.postas_id
                    GROUP BY pd.postas_id)
                ELSE
                  atletas_nombre_completo
                END ) AS atletas_nombre_completo,
                 atl.atletas_sexo,
                 fn_get_marca_normalizada_tonumber(fn_get_marca_normalizada_totext(atletas_resultados_resultado, um.unidad_medida_codigo, cp.competencias_pruebas_manual, pv.apppruebas_factor_manual), um.unidad_medida_codigo) AS numb_resultado,
                 atletas_resultados_resultado,
                 ciudades_altura,
                 coalesce((CASE WHEN apppruebas_viento_individual = TRUE THEN eatl.atletas_resultados_viento ELSE competencias_pruebas_viento END),0.00) AS competencias_pruebas_viento,
                 competencias_pruebas_fecha,
                 co.competencias_descripcion || \' / \' || ciudades_descripcion || \' / \'  || paises_descripcion AS lugar,
                 --co.competencias_descripcion,
                 --ciudades_descripcion,
                 --paises_descripcion,
                 eatl.postas_id,
                 rec.activo,
                 rec.xmin AS "versionId"
                 FROM tb_records rec
             INNER JOIN tb_atletas_resultados eatl ON eatl.atletas_resultados_id = rec.atletas_resultados_id
             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
             ) rec';
     } else {
         $sql = 'SELECT records_id,records_tipo_codigo,atletas_resultados_id,categorias_codigo,records_id_origen,records_protected,activo,xmin AS "versionId" FROM  tb_records rec';
     }
     if ($this->activeSearchOnly == TRUE) {
         // Solo activos
         $sql .= ' where "rec.activo"=TRUE ';
     }
     // Que pasa si el campo a buscar existe en ambas partes del join?
     $where = $constraints->getFilterFieldsAsString();
     //  echo $where;
     if ($this->activeSearchOnly == TRUE) {
         if (strlen($where) > 0) {
             $sql .= ' and ' . $where;
         }
     } else {
         if (strlen($where) > 0) {
             $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);
     return $sql;
 }