<?php

/**
 * inf_ingre_reten_cargo actions.
 *
 * @package    nomina
 * @subpackage inf_ingre_reten_cargo
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class inf_ingre_reten_cargoActions extends sfActions {

    /**
     * Executes list action
     *
     * @param sfRequest $request A request object
     */
    public function executeList(sfWebRequest $request) {

        //Revisar que sea post
        //$this->forward404Unless($request->isMethod('post'));
        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("--------------------------------------------------*  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");

        /*
         * Paginacion
         */
        if (isset($request['_startRow'])) {
            $rowStart = $request['_startRow'];
        } else {
            $rowStart = 0;
        }

        if (isset($request['_endRow'])) {
            $rowEnd = $request['_endRow'];
        } else {
            $rowEnd = 75;
        }

        //ordenar consulta
        if (isset($request['_sortBy'])) {
            $sortBy = " Order by " . $request['_sortBy'];
        } else {
            $sortBy = 'ORDER BY
tab0.codigo_cargo,
tab0.nombre,
tab0.area,
nvl(SUBSTR(tab0.agrupacion_orden, 2 ), tab0.agrupacion_orden) ';
        }


        /*
         * Manejo de errores
         */
        try {
            /*
             * Variables obligatorias
             */
            $periodo_filtro = $request['id_periodo_filtro'];
            $periodo = $request['id_periodo'];
            $id_anhos = $request['id_anhos'];
            $fecha_ini = $request['fecha_ini'];
            $fecha_fin = $request['fecha_fin'];

            /*
             * Variables opcionales
             */
            //funcionario
            if (isset($request['num_doc'])) {
                $whereFuncionarioNumDoc = " AND tab0.num_doc = " . $request['num_doc'];
            } else {
                $whereFuncionarioNumDoc = ' ';
            }
            //funcionario
            if (isset($request['id_tipo_doc'])) {
                $whereFuncionarioTipoDoc = " AND tab0.id_tipo_doc = " . $request['id_tipo_doc'];
            } else {
                $whereFuncionarioTipoDoc = ' ';
            }
            //Clase Fondo
            if (isset($request['id_clase_fondo'])) {
                $whereClaseFondo = " AND tab0.id_clase_fondo = " . $request['id_clase_fondo'];
            } else {
                $whereClaseFondo = ' ';
            }
            //MaestroFondos
            if (isset($request['id_mae_fondos'])) {
                $whereMaestroFondos = " AND tab0.id_mae_fondos = " . $request['id_mae_fondos'];
            } else {
                $whereMaestroFondos = ' ';
            }
            //Area
            if (isset($request['id_area'])) {
                $whereArea = " AND tab0.id_ea = " . $request['id_area'];
            } else {
                $whereArea = ' ';
            }
            //ComponenteEscala
            if (isset($request['id_com_esc'])) {
                $whereComponenteEscala = " AND tab0.id_comp_es = " . $request['id_com_esc'];
            } else {
                $whereComponenteEscala = ' ';
            }

            /*
             * Variables opcionales
             */
            //clase planta
            if (isset($request['id_clase_planta'])) {
                $whereClasePlanta = " AND tab0.id_clase_planta = " . $request['id_clase_planta'];
            } else {
                $whereClasePlanta = ' ';
            }

            //sentencia sql
            $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD"
EOD;
            //ejecuta y obtiene el resultado del sql
            CN_TABLE::executeSQL($sql);

            /*
             * sql que trae los resultados
             * por los filtros, para totalizar las filas
             */
            $sql = <<<EOD
select count(*) as count from (

    select

    tab0.id_comp_es,
    tab0.id_ea,
    tab0.codigo_cargo,
    tab0.denominacion_comp,
    tab0.nombre,
    tab0.area,
    nvl(SUBSTR(tab0.agrupacion_orden, 2 ), tab0.agrupacion_orden) as agrupacion_orden,
    tab0.nombre_agrup,
    sum(tab0.valor_enero) as valor_enero,
    sum(tab0.valor_febrero) as valor_febrero,
    sum(tab0.valor_marzo) as valor_marzo,
    sum(tab0.valor_abril) as valor_abril,
    sum(tab0.valor_mayo) as valor_mayo,
    sum(tab0.valor_junio) as valor_junio,
    sum(tab0.valor_julio) as valor_julio,
    sum(tab0.valor_agosto) as valor_agosto,
    sum(tab0.valor_septiembre) as valor_septiembre,
    sum(tab0.valor_octubre) as valor_octubre,
    sum(tab0.valor_noviembre) as valor_noviembre,
    sum(tab0.valor_diciembre) as valor_diciembre,
    sum(tab0.valor_total) as valor_total

    from(

          SELECT DISTINCT

          saniv.nombre,
          cargo.codigo_comp,
          cargo.grado_comp,
          cargo.codigo_comp || cargo.grado_comp as codigo_cargo,
          cargo.denominacion_comp,
          cargo.area,
            cargo.id_ea,
            cargo.id_comp_es,
          tab6.id_dp,

          tab0.id_certif_ingre_reten_inf as id_certif_ingre_reten_inf, tab0.id_tipo_doc as id_tipo_doc, tab0.num_doc as num_doc, tab0.id_anhos as id_anhos,
          tab0.id_concep_nomina as id_concep_nomina, tab0.valor_enero as valor_enero, tab0.valor_febrero as valor_febrero, tab0.valor_marzo as valor_marzo,
          tab0.valor_abril as valor_abril, tab0.valor_mayo as valor_mayo, tab0.valor_junio as valor_junio, tab0.valor_julio as valor_julio,
          tab0.valor_agosto as valor_agosto, tab0.valor_septiembre as valor_septiembre, tab0.valor_octubre as valor_octubre,
          tab0.valor_noviembre as valor_noviembre, tab0.valor_diciembre as valor_diciembre, tab0.valor_total as valor_total,
          tab0.agrupacion_orden, tab5.nombre_agrup,
          tab1.tipo_documento as tipo_documento, tab1.primer_nombre as primer_nombre, tab1.segundo_nombre as segundo_nombre, tab1.primer_apellido as primer_apellido,
          tab1.segundo_apellido as segundo_apellido, tab1.nombre_completo as nombre_completo, tab1.nombre_apellido as nombre_apellido, to_char(tab1.fecha_nace, 'YYYY-MM-DD') as fecha_nace,
          tab1.email as email, tab1.tel as telefono, tab1.direccion as direccion, tab1.pais_nace as pais_nace, tab1.depto_nace as depto_nace, tab1.muni_nace as muni_nace, tab1.genero as genero, tab1.estado_civil as estado_civil, tab1.tipo_sangre as tipo_sangre, tab2.codigo as codigo, tab2.descripcion as descripcion, tab2.codigo||' - '||tab2.descripcion as completo, tab2.id_tipo_concepto as id_tipo_concepto, tab2.abreviatura as abreviatura, tab2.operador as operador, tab2.operadoropcional as operadoropcional, tab2.cod2 as cod2, tab2.cod3 as cod3, tab2.id_concep_ajuste as id_concep_ajuste, tab2.id_concep_rein as id_concep_rein, tab2.id_acreedor as id_acreedor, tab2.id_rubro as id_rubro, tab2.id_cpo as id_cpo, tab2.estado as estado, tab2.aplica_descuento as aplica_descuento, tab2.id_clase_fondo as id_clase_fondo, tab2.usa_dias_calen as usa_dias_calen, tab3.id_consecutivo_certif as id_consecutivo_certif, tab3.secuencia as secuencia, tab4.codigo as codigo_tipcon, tab4.descripcion as descripcion_tipcon, tab4.orden as orden_tipcon, tab4.codigo||' - '||tab4.descripcion as completo_tipcon

          FROM NO_CERTIF_INGRE_RETEN_INF tab0
          JOIN NO_DATOS_FUNCIONARIO_V tab1 ON tab0.id_tipo_doc = tab1.id_tipo_doc AND tab0.num_doc = tab1.num_doc
          JOIN NO_CONCEPTOS_V tab2 ON tab0.id_concep_nomina = tab2.id_concep_nomina
          LEFT JOIN NO_CONSECUTIVO_CERTIF tab3 ON tab0.id_tipo_doc = tab3.id_tipo_doc AND tab0.num_doc = tab3.num_doc AND tab0.id_anhos = tab3.id_anhos
          JOIN NO_TIPO_CONCEPTO tab4 ON tab2.id_tipo_concepto = tab4.id_tipo_concepto

          left join(
              select

              row_number() over (
              partition by estfun.num_doc
              order by estfun.num_doc, estfun.id_anhos desc, estfun.id_meses desc
              ) AS rn,
              estfun.*

              from no_estado_func estfun
              join no_periodo per
              on per.id_periodo = estfun.periodo
              where
              1 = 1
              --and estfun.num_doc = 10011338
              and per.id_tipo_periodo = 1
              and per.fecha_ini <= to_date('$fecha_fin','yyyy-mm-dd')
          )tab6
          ON tab0.id_tipo_doc = tab6.id_tipo_doc AND tab6.num_doc = tab0.num_doc
          and tab6.rn = 1

          left join no_dp_v cargo
          on cargo.id_dp = tab6.id_dp

          left join NO_NOMBRAMIENTO_V tab7
          on tab0.id_tipo_doc = tab7.id_tipo_doc AND tab7.num_doc = tab1.num_doc

          left join RH_SA_NIV2 saniv
          on saniv.id_sa_niv2 = tab7.id_sa_niv2

          left join no_agrup_nombre tab5 on tab5.id_agrup = tab0.agrupacion_orden

          WHERE
          tab0.id_certif_ingre_reten_inf != '-1'
          and tab0.agrupacion_orden != '-1'
          AND tab0.id_anhos = $id_anhos
          $whereFuncionarioNumDoc $whereFuncionarioTipoDoc

    )tab0

    where
    1 = 1 
    $whereArea $whereComponenteEscala 

    group by
    tab0.id_comp_es,
    tab0.id_ea,
    tab0.codigo_cargo,
    tab0.denominacion_comp,
    tab0.nombre,
    tab0.area,
    tab0.agrupacion_orden,
    tab0.nombre_agrup
        
)
EOD;


            $total_record_count = CN_TABLE::executeSQL($sql);
            $total_record_count = $total_record_count[0]["count"];


            //obtener el listado de recaudos
            $sql = <<<EOD
SELECT * FROM ( SELECT row_.*, ROWNUM rownum_ FROM (

    select

    tab0.id_comp_es,
    tab0.id_ea,
    tab0.codigo_cargo,
    tab0.denominacion_comp,
    tab0.nombre,
    tab0.area,
    nvl(SUBSTR(tab0.agrupacion_orden, 2 ), tab0.agrupacion_orden) as agrupacion_orden,
    tab0.nombre_agrup,
    sum(tab0.valor_enero) as valor_enero,
    sum(tab0.valor_febrero) as valor_febrero,
    sum(tab0.valor_marzo) as valor_marzo,
    sum(tab0.valor_abril) as valor_abril,
    sum(tab0.valor_mayo) as valor_mayo,
    sum(tab0.valor_junio) as valor_junio,
    sum(tab0.valor_julio) as valor_julio,
    sum(tab0.valor_agosto) as valor_agosto,
    sum(tab0.valor_septiembre) as valor_septiembre,
    sum(tab0.valor_octubre) as valor_octubre,
    sum(tab0.valor_noviembre) as valor_noviembre,
    sum(tab0.valor_diciembre) as valor_diciembre,
    sum(tab0.valor_total) as valor_total

    from(

          SELECT DISTINCT

          saniv.nombre,
          cargo.codigo_comp,
          cargo.grado_comp,
          cargo.codigo_comp || cargo.grado_comp as codigo_cargo,
          cargo.denominacion_comp,
          cargo.area,
            cargo.id_ea,
            cargo.id_comp_es,
          tab6.id_dp,

          tab0.id_certif_ingre_reten_inf as id_certif_ingre_reten_inf, tab0.id_tipo_doc as id_tipo_doc, tab0.num_doc as num_doc, tab0.id_anhos as id_anhos,
          tab0.id_concep_nomina as id_concep_nomina, tab0.valor_enero as valor_enero, tab0.valor_febrero as valor_febrero, tab0.valor_marzo as valor_marzo,
          tab0.valor_abril as valor_abril, tab0.valor_mayo as valor_mayo, tab0.valor_junio as valor_junio, tab0.valor_julio as valor_julio,
          tab0.valor_agosto as valor_agosto, tab0.valor_septiembre as valor_septiembre, tab0.valor_octubre as valor_octubre,
          tab0.valor_noviembre as valor_noviembre, tab0.valor_diciembre as valor_diciembre, tab0.valor_total as valor_total,
          tab0.agrupacion_orden, tab5.nombre_agrup,
          tab1.tipo_documento as tipo_documento, tab1.primer_nombre as primer_nombre, tab1.segundo_nombre as segundo_nombre, tab1.primer_apellido as primer_apellido,
          tab1.segundo_apellido as segundo_apellido, tab1.nombre_completo as nombre_completo, tab1.nombre_apellido as nombre_apellido, to_char(tab1.fecha_nace, 'YYYY-MM-DD') as fecha_nace,
          tab1.email as email, tab1.tel as telefono, tab1.direccion as direccion, tab1.pais_nace as pais_nace, tab1.depto_nace as depto_nace, tab1.muni_nace as muni_nace, tab1.genero as genero, tab1.estado_civil as estado_civil, tab1.tipo_sangre as tipo_sangre, tab2.codigo as codigo, tab2.descripcion as descripcion, tab2.codigo||' - '||tab2.descripcion as completo, tab2.id_tipo_concepto as id_tipo_concepto, tab2.abreviatura as abreviatura, tab2.operador as operador, tab2.operadoropcional as operadoropcional, tab2.cod2 as cod2, tab2.cod3 as cod3, tab2.id_concep_ajuste as id_concep_ajuste, tab2.id_concep_rein as id_concep_rein, tab2.id_acreedor as id_acreedor, tab2.id_rubro as id_rubro, tab2.id_cpo as id_cpo, tab2.estado as estado, tab2.aplica_descuento as aplica_descuento, tab2.id_clase_fondo as id_clase_fondo, tab2.usa_dias_calen as usa_dias_calen, tab3.id_consecutivo_certif as id_consecutivo_certif, tab3.secuencia as secuencia, tab4.codigo as codigo_tipcon, tab4.descripcion as descripcion_tipcon, tab4.orden as orden_tipcon, tab4.codigo||' - '||tab4.descripcion as completo_tipcon

          FROM NO_CERTIF_INGRE_RETEN_INF tab0
          JOIN NO_DATOS_FUNCIONARIO_V tab1 ON tab0.id_tipo_doc = tab1.id_tipo_doc AND tab0.num_doc = tab1.num_doc
          JOIN NO_CONCEPTOS_V tab2 ON tab0.id_concep_nomina = tab2.id_concep_nomina
          LEFT JOIN NO_CONSECUTIVO_CERTIF tab3 ON tab0.id_tipo_doc = tab3.id_tipo_doc AND tab0.num_doc = tab3.num_doc AND tab0.id_anhos = tab3.id_anhos
          JOIN NO_TIPO_CONCEPTO tab4 ON tab2.id_tipo_concepto = tab4.id_tipo_concepto

          left join(
              select

              row_number() over (
              partition by estfun.num_doc
              order by estfun.num_doc, estfun.id_anhos desc, estfun.id_meses desc
              ) AS rn,
              estfun.*

              from no_estado_func estfun
              join no_periodo per
              on per.id_periodo = estfun.periodo
              where
              1 = 1
              --and estfun.num_doc = 10011338
              and per.id_tipo_periodo = 1
              and per.fecha_ini <= to_date('$fecha_fin','yyyy-mm-dd')
          )tab6
          ON tab0.id_tipo_doc = tab6.id_tipo_doc AND tab6.num_doc = tab0.num_doc
          and tab6.rn = 1

          left join no_dp_v cargo
          on cargo.id_dp = tab6.id_dp

          left join NO_NOMBRAMIENTO_V tab7
          on tab0.id_tipo_doc = tab7.id_tipo_doc AND tab7.num_doc = tab1.num_doc

          left join RH_SA_NIV2 saniv
          on saniv.id_sa_niv2 = tab7.id_sa_niv2

          left join no_agrup_nombre tab5 on tab5.id_agrup = tab0.agrupacion_orden

          WHERE
          tab0.id_certif_ingre_reten_inf != '-1'
          and tab0.agrupacion_orden != '-1'
          AND tab0.id_anhos = $id_anhos
          $whereFuncionarioNumDoc $whereFuncionarioTipoDoc

    )tab0

    where
    1 = 1 
    $whereArea $whereComponenteEscala 

    group by
    tab0.id_comp_es,
    tab0.id_ea,
    tab0.codigo_cargo,
    tab0.denominacion_comp,
    tab0.nombre,
    tab0.area,
    tab0.agrupacion_orden,
    tab0.nombre_agrup

$sortBy
          
) row_ WHERE ROWNUM <=  $rowEnd   ) where rownum_ >  $rowStart
EOD;
            //ejecuta y obtiene el resultado del sql
            $resultado = CN_TABLE::executeSQL($sql);


            $this->totalRows = $total_record_count;
            $this->startRow = $rowStart;
            $this->endRow = $rowStart + count($resultado);
            $this->list_data = $resultado;
            $this->logMessage("[inf_ingre_reten_cargo] Consulta exitosa.");
        } catch (Exception $e) {

            $this->status = 1;
            $this->totalRows = 0;
            $this->startRow = 0;
            $this->endRow = 0;
            $this->list_data = array();
            $this->logMessage("ERROR!!!");
            $this->logMessage($e->getMessage());
        }
    }

    /**
     * Metodo para sumar 
     *
     * @param sfWebRequest $request
     */
    public function executeSum(sfWebRequest $request) {

        //Revisar que sea post
        //$this->forward404Unless($request->isMethod('post'));
        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("--------------------------------------------------/  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");

        /*
         * Paginacion
         */
        if (isset($request['_startRow'])) {
            $rowStart = $request['_startRow'];
        } else {
            $rowStart = 0;
        }

        if (isset($request['_endRow'])) {
            $rowEnd = $request['_endRow'];
        } else {
            $rowEnd = 75;
        }

        //ordenar consulta
        if (isset($request['_sortBy'])) {
            $sortBy = " Order by " . $request['_sortBy'];
        } else {
            $sortBy = 'ORDER BY
tab.codigo_cargo,
tab.nombre,
tab.area,
nvl(SUBSTR(tab.agrupacion_orden, 2 ), tab.agrupacion_orden) ';
        }

        //manejo de errores
        try {
            /*
             * Variables obligatorias
             */
            $periodo_filtro = $request['id_periodo_filtro'];
            $periodo = $request['id_periodo'];
            $id_anhos = $request['id_anhos'];
            $fecha_ini = $request['fecha_ini'];
            $fecha_fin = $request['fecha_fin'];

            /*
             * Variables opcionales
             */
            //funcionario
            if (isset($request['num_doc'])) {
                $whereFuncionarioNumDoc = " AND tab0.num_doc = " . $request['num_doc'];
            } else {
                $whereFuncionarioNumDoc = ' ';
            }
            //funcionario
            if (isset($request['id_tipo_doc'])) {
                $whereFuncionarioTipoDoc = " AND tab0.id_tipo_doc = " . $request['id_tipo_doc'];
            } else {
                $whereFuncionarioTipoDoc = ' ';
            }
            //Clase Fondo
            if (isset($request['id_clase_fondo'])) {
                $whereClaseFondo = " AND tab0.id_clase_fondo = " . $request['id_clase_fondo'];
            } else {
                $whereClaseFondo = ' ';
            }
            //MaestroFondos
            if (isset($request['id_mae_fondos'])) {
                $whereMaestroFondos = " AND tab0.id_mae_fondos = " . $request['id_mae_fondos'];
            } else {
                $whereMaestroFondos = ' ';
            }

            /*
             * Variables opcionales
             */
            //clase planta
            if (isset($request['id_clase_planta'])) {
                $whereClasePlanta = " AND tab0.id_clase_planta = " . $request['id_clase_planta'];
            } else {
                $whereClasePlanta = ' ';
            }

            //obtener el listado de recaudos
            $sql = <<<EOD
SELECT

'Total: ' || count(*) as fondo

FROM (  

select

tab.codigo_cargo,
tab.denominacion_comp,
tab.nombre,
tab.area,
nvl(SUBSTR(tab.agrupacion_orden, 2 ), tab.agrupacion_orden) as agrupacion_orden,
tab.nombre_agrup,
sum(tab.valor_enero) as valor_enero,
sum(tab.valor_febrero) as valor_febrero,
sum(tab.valor_marzo) as valor_marzo,
sum(tab.valor_abril) as valor_abril,
sum(tab.valor_mayo) as valor_mayo,
sum(tab.valor_junio) as valor_junio,
sum(tab.valor_julio) as valor_julio,
sum(tab.valor_agosto) as valor_agosto,
sum(tab.valor_septiembre) as valor_septiembre,
sum(tab.valor_octubre) as valor_octubre,
sum(tab.valor_noviembre) as valor_noviembre,
sum(tab.valor_diciembre) as valor_diciembre,
sum(tab.valor_total) as valor_total

from(

      SELECT DISTINCT

      saniv.nombre,
      cargo.codigo_comp,
      cargo.grado_comp,
      cargo.codigo_comp || cargo.grado_comp as codigo_cargo,
      cargo.denominacion_comp,
      cargo.area,
      tab6.id_dp,

      tab0.id_certif_ingre_reten_inf as id_certif_ingre_reten_inf, tab0.id_tipo_doc as id_tipo_doc, tab0.num_doc as num_doc, tab0.id_anhos as id_anhos,
      tab0.id_concep_nomina as id_concep_nomina, tab0.valor_enero as valor_enero, tab0.valor_febrero as valor_febrero, tab0.valor_marzo as valor_marzo,
      tab0.valor_abril as valor_abril, tab0.valor_mayo as valor_mayo, tab0.valor_junio as valor_junio, tab0.valor_julio as valor_julio,
      tab0.valor_agosto as valor_agosto, tab0.valor_septiembre as valor_septiembre, tab0.valor_octubre as valor_octubre,
      tab0.valor_noviembre as valor_noviembre, tab0.valor_diciembre as valor_diciembre, tab0.valor_total as valor_total,
      tab0.agrupacion_orden, tab5.nombre_agrup,
      tab1.tipo_documento as tipo_documento, tab1.primer_nombre as primer_nombre, tab1.segundo_nombre as segundo_nombre, tab1.primer_apellido as primer_apellido,
      tab1.segundo_apellido as segundo_apellido, tab1.nombre_completo as nombre_completo, tab1.nombre_apellido as nombre_apellido, to_char(tab1.fecha_nace, 'YYYY-MM-DD') as fecha_nace,
      tab1.email as email, tab1.tel as telefono, tab1.direccion as direccion, tab1.pais_nace as pais_nace, tab1.depto_nace as depto_nace, tab1.muni_nace as muni_nace, tab1.genero as genero, tab1.estado_civil as estado_civil, tab1.tipo_sangre as tipo_sangre, tab2.codigo as codigo, tab2.descripcion as descripcion, tab2.codigo||' - '||tab2.descripcion as completo, tab2.id_tipo_concepto as id_tipo_concepto, tab2.abreviatura as abreviatura, tab2.operador as operador, tab2.operadoropcional as operadoropcional, tab2.cod2 as cod2, tab2.cod3 as cod3, tab2.id_concep_ajuste as id_concep_ajuste, tab2.id_concep_rein as id_concep_rein, tab2.id_acreedor as id_acreedor, tab2.id_rubro as id_rubro, tab2.id_cpo as id_cpo, tab2.estado as estado, tab2.aplica_descuento as aplica_descuento, tab2.id_clase_fondo as id_clase_fondo, tab2.usa_dias_calen as usa_dias_calen, tab3.id_consecutivo_certif as id_consecutivo_certif, tab3.secuencia as secuencia, tab4.codigo as codigo_tipcon, tab4.descripcion as descripcion_tipcon, tab4.orden as orden_tipcon, tab4.codigo||' - '||tab4.descripcion as completo_tipcon

      FROM NO_CERTIF_INGRE_RETEN_INF tab0
      JOIN NO_DATOS_FUNCIONARIO_V tab1 ON tab0.id_tipo_doc = tab1.id_tipo_doc AND tab0.num_doc = tab1.num_doc
      JOIN NO_CONCEPTOS_V tab2 ON tab0.id_concep_nomina = tab2.id_concep_nomina
      LEFT JOIN NO_CONSECUTIVO_CERTIF tab3 ON tab0.id_tipo_doc = tab3.id_tipo_doc AND tab0.num_doc = tab3.num_doc AND tab0.id_anhos = tab3.id_anhos
      JOIN NO_TIPO_CONCEPTO tab4 ON tab2.id_tipo_concepto = tab4.id_tipo_concepto

      left join(
          select

          row_number() over (
          partition by estfun.num_doc
          order by estfun.num_doc, estfun.id_anhos desc, estfun.id_meses desc
          ) AS rn,
          estfun.*

          from no_estado_func estfun
          join no_periodo per
          on per.id_periodo = estfun.periodo
          where
          1 = 1
          --and estfun.num_doc = 10011338
          and per.id_tipo_periodo = 1
          and per.fecha_ini <= to_date('$fecha_fin','yyyy-mm-dd')
      )tab6
      ON tab0.id_tipo_doc = tab6.id_tipo_doc AND tab6.num_doc = tab0.num_doc
      and tab6.rn = 1

      left join no_dp_v cargo
      on cargo.id_dp = tab6.id_dp

      left join NO_NOMBRAMIENTO_V tab7
      on tab0.id_tipo_doc = tab7.id_tipo_doc AND tab7.num_doc = tab1.num_doc

      left join RH_SA_NIV2 saniv
      on saniv.id_sa_niv2 = tab7.id_sa_niv2

      left join no_agrup_nombre tab5 on tab5.id_agrup = tab0.agrupacion_orden

      WHERE
      tab0.id_certif_ingre_reten_inf != '-1'
      and tab0.agrupacion_orden != '-1'
      AND tab0.id_anhos = $id_anhos
    $whereFuncionarioNumDoc $whereFuncionarioTipoDoc

)tab

group by
tab.codigo_cargo,
tab.denominacion_comp,
tab.nombre,
tab.area,
tab.agrupacion_orden,
tab.nombre_agrup
    
$sortBy

)
EOD;
            //ejecuta y obtiene el resultado del sql
            $resultado = CN_TABLE::executeSQL($sql);

            $this->totalRows = count($resultado);
            $this->startRow = 0;
            $this->endRow = count($resultado);
            $this->list_data = $resultado;
        } catch (Exception $e) {

            $this->status = 1;
            $this->totalRows = 0;
            $this->startRow = 0;
            $this->endRow = 0;
            $this->list_data = array();
            $this->logMessage("ERROR!!!");
            $this->logMessage($e->getMessage());
        }
    }

}
