<?php

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

    /**
     * Servicio de list
     * lista los datos del informe
     *
     * @param sfRequest $request A request object
     */
    public function executeList(sfWebRequest $request) {

        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");

        /*
         * manejo de errores
         */
        try {


            /*
             * Obtener variables del request
             */
            /*
             * Variables globales
             */
            //id_periodo
            $id_periodo = $request['id_periodo_filtro'];
            $id_periodo_actual = $request['id_periodo'];
            $this->type_combo_text = $combo_text = $request['combo_text'];

            /*
             * Opcionales
             */
            //Funcionario num_doc
            $num_doc = null;
            $whereFuncionarioNumDoc = "";
            if (isset($request['num_doc'])) {
                $num_doc = $request['num_doc'];
                $whereFuncionarioNumDoc = " AND tab0.num_doc = '" . $request['num_doc'] . "'";
            }
            //Funcionario id_tipo_doc 
            $id_tipo_doc = null;
            $whereFuncionarioTipoDoc = "";
            if (isset($request['id_tipo_doc'])) {
                $id_tipo_doc = $request['id_tipo_doc'];
                $whereFuncionarioTipoDoc = " AND tab0.id_tipo_doc = " . $request['id_tipo_doc'];
            }
            $whereClasePlanta = "";
            if (isset($request['id_clase_planta'])) {
                $id_clase_planta = $request['id_clase_planta'];
                $whereClasePlanta = " AND tab0.id_clase_planta = " . $request['id_clase_planta'];
            }

            $id_tipo_atributo_contab = 0;
            if (isset($request['id_tipo_atributo_contab'])) {
                $id_tipo_atributo_contab = $request['id_tipo_atributo_contab'];
            }

            $id_agrup_rec = 0;
            if (isset($request['id_agrup_rec'])) {
                $id_agrup_rec = $request['id_agrup_rec'];
            }
            $this->type_combo_text_adic = "";
            if ($id_agrup_rec == 5) {
                $this->type_combo_text_adic = "_PN";
            }
            if ($id_agrup_rec == 6) {
                $this->type_combo_text_adic = "_RP";
            }

            /*
             * Array de resultados
             */
            $resultado = array();

            //cabecera
            if ($combo_text == 1) {

                /*
                 * Tomar nomina mensulay adicional para el valor remunerado - 20210524
                 * Se coloca periodo de DEF id-5 para omitir y traer los registros - 20220307::LAVILA
                 */
                $sql = <<<EOD
select

RN,
CODIGO_INSTITUTO_SIIF,
TIPO_NOMINA,
CODIGO_SIIF_BF,
NUM_DOC,
PRIMER_NOMBRE,
SEGUNDO_NOMBRE,
PRIMER_APELLIDO,
SEGUNDO_APELLIDO,
NIT_BN,
CUENTA_ID,
NUM_CUENTA,
VALOR_REMUNERACION

from(
                        
select
rownum as rn,
tab.*,

(select codigo_instituto_siif from no_param_gen where id_param_gen = 1) as codigo_instituto_siif,
REPLACE(tab.codigo_siif,'0','') as codigo_siif_bf,
1 as tipo_nomina

from(

select
tab0.* ,
(select distinct periodo.periodo from no_periodo_v periodo where periodo.id_periodo = $id_periodo ) as periodo,

--Asignación Básica + Gastos de representación
concep.valor as valor_remuneracion


from(

    select
    id_clase_planta,
    id_periodo,
    case when estado = 0 then null else id_bn end as id_bn,
    case when estado = 0 then null else id end as tipo_cuenta,
    id_tipo_doc,
    replace(codigo_siif,'0','0') as codigo_siif,
    num_doc,
    nombre_apellido,
                PRIMER_NOMBRE,
                SEGUNDO_NOMBRE,
                PRIMER_APELLIDO,
                SEGUNDO_APELLIDO,
    case when estado = 0 then 'CH' else 'AC' end as medio_pago,
    case when estado = 0 then null else replace(tipo_iden,'0','0') end as tipo_iden,
    case when estado = 0 then null else nit_bn end as nit_bn,
    case when estado = 0 then null else banco end as banco,
    codigo_ach,
    descripcion,
    case when estado = 0 then null else nombre_corto end as nombre_corto,
    case when estado = 0 then null else id end as cuenta_id,
    case when estado = 0 then null else num_cuenta end as num_cuenta,
    sum(nvl(valor_dev,0)) as valor_dev,
    sum(nvl(valor_ded,0)) as valor_ded,
    sum(nvl(valor,0)) as valor,
    sum(nvl(valor_nac,0)) as valor_nac,
    sum(nvl(valor_pro,0)) as valor_pro,
    11 as tipo_cuenta_pagar

    from(

        select
        tab7.id_clase_planta,
        rub.descripcion as descripcion_rub, rub.rubro as  codigo_rubro, rub.id_tipo_atributo_contab,
        tab5.operador,
        tab.valor as valorsum,

        tab1.num_doc,tab6.nombre_apellido,
                tab6.PRIMER_NOMBRE,
                tab6.SEGUNDO_NOMBRE,
                tab6.PRIMER_APELLIDO,
                tab6.SEGUNDO_APELLIDO,
        tab3.codigo||' - '||tab3.descripcion as banco, tab3.codigo_ach,
        tab2.num_cuenta,
        case when nvl(tab2.estado,0) = 0 and tab7.estado = 0 and tab2.fecha_terminacion <= tab7.fecha_termina then 1 else nvl(tab2.estado,0) end as estado,
        case when tab5.operador = 1 then tab1.valor_liquidado
             when tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else (tab1.valor_liquidado * -1) end as valor,
        case when nvl(recbf.id_agrup_rec,agrup.id_agrup_rec) = 5
            then
            case when tab5.operador = 1 then tab1.valor_liquidado
                 when tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else (tab1.valor_liquidado * -1) end
            else 0 end as valor_nac,
        case when nvl(recbf.id_agrup_rec,agrup.id_agrup_rec) = 6
            then
            case when tab5.operador = 1 then tab1.valor_liquidado
                 when tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else (tab1.valor_liquidado * -1) end
            else 0 end as valor_pro,

        /*
        case when tab5.operador = 1 and tab5.id_rubro is not null then tab1.valor_liquidado
             when tab5.operador = 0 and tab5.id_rubro is not null and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else 0 end as valor_dev,
        case when tab5.operador = 0 and tab5.id_tipo_concepto_org != 1 then tab1.valor_liquidado
             when tab5.operador = 1 and tab5.id_rubro is null and tab5.id_tipo_concepto_org != 1 then (tab1.valor_liquidado * -1) else 0 end as valor_ded,*/

        /*validar si es concepto es de reintegro, que no tenga concepto original se coloca en deducido - 20200819
        o es reintegro y no tiene rubro - 20200916
        */
        case
            when ( esrein.id_concep_nomina is not null and tab5.id_rubro is null ) then 0
            when ( esrein.id_concep_nomina is not null and conorig.id_concep_nomina is null ) then 0

            when tab5.operador = 1 and tab5.id_rubro is not null then tab1.valor_liquidado
            when tab5.operador = 0 and tab5.id_rubro is not null and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1)
        else 0 end as valor_dev,
        case
            when ( esrein.id_concep_nomina is null or ( esrein.id_concep_nomina is not null and conorig.id_concep_nomina is null ) or  ( esrein.id_concep_nomina is not null and tab5.id_rubro is null ) )
                and tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then tab1.valor_liquidado
            when ( esrein.id_concep_nomina is null or ( esrein.id_concep_nomina is not null and conorig.id_concep_nomina is null ) or  ( esrein.id_concep_nomina is not null and tab5.id_rubro is null ) )
                and tab5.operador = 1 and tab5.id_rubro is null and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1)
            when tab5.operador = 0 and tab5.id_tipo_concepto_org != 1 then tab1.valor_liquidado
            when tab5.operador = 1 and tab5.id_rubro is null and tab5.id_tipo_concepto_org != 1 then (tab1.valor_liquidado * -1)
        else 0 end as valor_ded,

        tab1.id_periodo,
        tab1.id_tipo_doc, tab3.id_bn, terbn.NUM_DOC as nit_bn, tipiden.codigo_siif as tipo_iden,
        tab4.id,
        tab4.descripcion,
        tab4.nombre_corto,
        tab8.codigo_siif
        from no_liquida_nomina tab1

        left join no_concep_nomina tab5 on tab5.id_concep_nomina = tab1.id_concep_nomina
        left join pr_rubro_presup_v rub on  rub.id_rubro = tab5.id_rubro
                        
        left join pr_rubro_agrup_rec agrup on agrup.id_rubro = tab5.id_rubro
        /*segun separacion topa el otro rec - 20210420*/
        left join no_funcionario_agrup_rec_bf recbf on recbf.id_tipo_doc = tab1.id_tipo_doc and recbf.num_doc = tab1.num_doc and recbf.id_periodo = $id_periodo
        and agrup.id_agrup_rec = 5
                        
        left join no_datos_funcionario_v tab6  on tab6.id_tipo_doc = tab1.id_tipo_doc and tab6.num_doc = tab1.num_doc

        --join no_pago_func tab2 on tab2.id_tipo_doc = tab1.id_tipo_doc and tab2.num_doc = tab1.num_doc
        left join (
          SELECT
           aut.*,
           ROW_NUMBER() OVER (
            partition by aut.num_doc
            ORDER BY aut.num_doc asc, aut.fecha_activacion desc, aut.id_pago_func desc
           ) AS rn
          from no_pago_func aut
        )tab2
        on tab1.id_tipo_doc = tab2.id_tipo_doc and tab1.num_doc = tab2.num_doc
        and tab2.rn = 1
        left join no_nombramiento_v tab7  ON tab7.id_tipo_doc = tab1.id_tipo_doc and tab7.num_doc = tab1.num_doc

        left join ts_bn tab3 on tab3.id_bn = tab2.id_bn
        left join interceros terbn
        on terbn.id_mae_ter = tab3.id_mae_ter
        left join tipo_identificacion tipiden
        on tipiden.id_tipo_identificacion = terbn.id_tipo_doc

        left join ts_tc tab4 on tab4.id = tab2.tipo_cuenta

        join tipo_documento tab8 on tab8.id_tipo_doc = tab1.id_tipo_doc

        left join(

            select

            tab.id_periodo,
            tab.id_tipo_doc,
            tab.num_doc,
            tab.nombre_apellido,
                tab.PRIMER_NOMBRE,
                tab.SEGUNDO_NOMBRE,
                tab.PRIMER_APELLIDO,
                tab.SEGUNDO_APELLIDO,
            tab.estado,

            sum(nvl(tab.valor,0)) as valor,
            sum(nvl(tab.valor_dev,0)) as valor_dev,
            sum(nvl(tab.valor_ded,0)) as valor_ded

            from(

                select
                rub.descripcion as descripcion_rub, rub.rubro as  codigo_rubro, rub.id_tipo_atributo_contab,
                tab5.operador,
                tab1.num_doc,tab6.nombre_apellido,
                tab6.PRIMER_NOMBRE,
                tab6.SEGUNDO_NOMBRE,
                tab6.PRIMER_APELLIDO,
                tab6.SEGUNDO_APELLIDO,

                case when nvl(tab2.estado,0) = 0 and tab7.estado = 0 and tab2.fecha_terminacion <= tab7.fecha_termina then 1 else nvl(tab2.estado,0) end as estado,
        case when tab5.operador = 1 then tab1.valor_liquidado
             when tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else (tab1.valor_liquidado * -1) end as valor,
        case when tab5.operador = 1 then tab1.valor_liquidado
             when tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else 0 end as valor_dev,
        case when tab5.operador = 0 and tab5.id_tipo_concepto_org != 1 then tab1.valor_liquidado else 0 end as valor_ded,
                tab1.id_periodo,
                tab1.id_tipo_doc

                from no_liquida_nomina tab1

                left join no_concep_nomina tab5 on tab5.id_concep_nomina = tab1.id_concep_nomina
                left join pr_rubro_presup_v rub on  rub.id_rubro = tab5.id_rubro
                left join no_datos_funcionario_v tab6  on tab6.id_tipo_doc = tab1.id_tipo_doc and tab6.num_doc = tab1.num_doc

                --join no_pago_func tab2 on tab2.id_tipo_doc = tab1.id_tipo_doc and tab2.num_doc = tab1.num_doc
                left join (
                  SELECT
                   aut.*,
                   ROW_NUMBER() OVER (
                    partition by aut.num_doc
                    ORDER BY aut.num_doc asc, aut.fecha_activacion desc, aut.id_pago_func desc
                   ) AS rn
                  from no_pago_func aut
                )tab2
                on tab1.id_tipo_doc = tab2.id_tipo_doc and tab1.num_doc = tab2.num_doc
                and tab2.rn = 1
                left join no_nombramiento_v tab7  ON tab7.id_tipo_doc = tab1.id_tipo_doc and tab7.num_doc = tab1.num_doc


                where
                tab1.id_periodo = $id_periodo
                and tab5.pago_func = 1

                and (case when tab5.operador = 0 then 1 else (case when nvl(rub.id_tipo_atributo_contab,1) = 1 then 1 else 0 end) end) = 1

            )tab

            group by
            tab.id_periodo,
            tab.id_tipo_doc,
            tab.num_doc,
            tab.nombre_apellido,
                tab.PRIMER_NOMBRE,
                tab.SEGUNDO_NOMBRE,
                tab.PRIMER_APELLIDO,
                tab.SEGUNDO_APELLIDO,
            tab.estado

        )tab
        on tab.id_periodo = tab1.id_periodo
        and tab.id_tipo_doc = tab1.id_tipo_doc
        and tab.num_doc = tab1.num_doc

        left join(

            select
              liq.id_tipo_doc,
              liq.num_doc,
              concep.id_concep_rein as id_concep_nomina,
              liq.id_periodo,
              sum(liq.valor_liquidado) as valor_liquidado

            from no_concep_nomina concep

            left join no_liquida_nomina liq
            on concep.id_concep_nomina = liq.id_concep_nomina

            where
            concep.id_concep_rein is not null
            and concep.id_tipo_concepto = 1
            AND concep.id_rubro is not null

              group by
              liq.id_tipo_doc,
              liq.num_doc,
              concep.id_concep_rein,
              liq.id_periodo
        )conorig
        on conorig.id_concep_nomina = tab5.id_concep_nomina
          and conorig.id_tipo_doc = tab1.id_tipo_doc
          and conorig.num_doc = tab1.num_doc
          and conorig.id_periodo = tab1.id_periodo

        left join(

            select
              concep.*
            from no_concep_nomina concep

            where
            concep.id_concep_nomina in (select no_concep_nomina.id_concep_rein from no_concep_nomina
                    where
                    id_concep_rein is not null
                    and id_tipo_concepto = 1
                    AND id_rubro is not null)
        )esrein
        on esrein.id_concep_nomina = tab5.id_concep_nomina

        where
        tab1.id_periodo = $id_periodo
        and tab5.pago_func = 1
        /*Filtra seegun atributo contable del rubro*/
        and (case when 0 = $id_tipo_atributo_contab then 1
                  when tab5.operador = 0
                  then (case when tab.valor >= 0 and 1 = $id_tipo_atributo_contab then 1
                             when tab.valor <  0 and 2 = $id_tipo_atributo_contab then 1
                             else 0 end)
                  else (case when nvl(rub.id_tipo_atributo_contab,1) = $id_tipo_atributo_contab
                             then 1
                             else 0 end) end
            ) = 1
        /*Se coloca filtro de id_agrup_rec - 20210317*/
        and (case when 0 = nvl($id_agrup_rec,0) then 1
                  else (case when nvl(nvl(recbf.id_agrup_rec,agrup.id_agrup_rec),5) = $id_agrup_rec then 1
                             when nvl(nvl(recbf.id_agrup_rec,agrup.id_agrup_rec),6) = $id_agrup_rec then 1
                        else 0 end)
                  end
            ) = 1

    )
    group by
    id_clase_planta,
    codigo_siif,
    num_doc,nombre_apellido,
                PRIMER_NOMBRE,
                SEGUNDO_NOMBRE,
                PRIMER_APELLIDO,
                SEGUNDO_APELLIDO,
    tipo_iden,
    nit_bn,
    banco,codigo_ach,
    num_cuenta,descripcion,id_periodo,
    id_tipo_doc, id_bn, id, nombre_corto, estado

)tab0

left join(

    select

    concep.num_doc,
    concep.id_tipo_doc,
    sum(concep.valor) as valor

    from (

        SELECT
        concep.num_doc,
        concep.id_tipo_doc,
        concep.id_concep_nomina,
        concep.valor,
        concep.fecha_desde,
        concep.fecha_hasta,
           ROW_NUMBER() OVER (
            partition by concep.num_doc, concep.id_concep_nomina
            ORDER BY concep.num_doc, per.id_tipo_periodo, concep.fecha_desde desc, concep.fecha_hasta desc
           ) AS rn

        FROM no_concepto_periodo concep

        left join no_periodo per
        on per.id_periodo = concep.periodo

        where
        per.id_tipo_periodo in (1,2)
        and concep.id_anhos = ( select distinct periodo.id_anhos from no_periodo_v periodo where periodo.id_periodo = $id_periodo )
        and concep.id_meses = ( select distinct periodo.id_meses from no_periodo_v periodo where periodo.id_periodo = $id_periodo )
        and concep.id_concep_nomina in ( select no_param_concep.id_concep_basica from no_param_concep union select no_param_concep.id_concep_gasto_repre from no_param_concep)
        and concep.id_periodo_ajuste is null

    )concep

    where
    concep.rn = 1

    group by
    concep.num_doc,
    concep.id_tipo_doc

)concep
on concep.num_doc = tab0.num_doc
and concep.id_tipo_doc = tab0.id_tipo_doc

where
1 = 1
$whereFuncionarioNumDoc $whereFuncionarioTipoDoc
$whereClasePlanta

and (

    tab0.num_doc not in (
     select nom.num_doc from no_nombramiento_v nom
      where nom.fecha_retiro is not null
      and (select no_periodo.fecha_ini from no_periodo
            where id_periodo = $id_periodo) > trunc(last_day( nom.fecha_termina ))
    )

    or

    (select distinct periodo.id_tipo_periodo from no_periodo_v periodo where periodo.id_periodo = $id_periodo) in (6,7,2,5)

)
/*validar valor de nacion y propio - 20210317*/
and (tab0.valor_nac + tab0.valor_pro) > 0                     
                        
order by
tab0.num_doc

)tab 
                        
)                        
EOD;
            }

            //deducciones
            if ($combo_text == 2) {

                //Sql
                $sql = <<<EOD
select

RN,
CODIGO_DESC,
TIPO_BENE_BF,
NIT_BENE,
NULL AS TC,
NULL AS NC,
NULL AS BG,
NULL AS TF,
VALOR_DED                        
                        
from(
                        
Select
rownum as rn,
tab0.*

from(
select
--tab.sec,
tab.tipo_bene,
REPLACE(tab.tipo_bene,'0','') as tipo_bene_bf,
tab.nit_bene,
tab.nombre_bene,
tab.codigo_desc,
/*listagg (tab.codigo_concep, ',' ) WITHIN GROUP (ORDER BY tab.codigo_concep)*/WM_CONCAT(distinct tab.codigo_concep) as codigo_concep,
/*listagg (tab.descripcion_concep, ',' ) WITHIN GROUP (ORDER BY tab.descripcion_concep)*/WM_CONCAT(distinct tab.descripcion_concep) as descripcion_concep,
tab.id_periodo,
--tab.id_bn,
--tab.tipo_cuenta,
--tab.id_tipo_doc,
--tab.codigo_siif,
--tab.num_doc,
--tab.nombre_apellido,
--tab.medio_pago,
--tab.tipo_iden,
--tab.nit_bn,
--tab.banco,
--tab.codigo_ach,
--tab.descripcion,
--tab.nombre_corto,
--tab.num_cuenta,
sum(tab.valor_dev) as valor_dev,
sum(tab.valor_ded) - sum(tab.valor_rein) as valor_ded,
sum(tab.valor_rein) as valor_rein,
sum(tab.valor) as valor,
tab.periodo,
--case when sum(tab.valor_base) <= 0 then round(sum(tab.valor_ded)*100/max(tab.porcentaje),-3) else round(sum(tab.valor_base),-3) end as valor_base,
--(max(tab.porcentaje)/100) as porcentaje,
0 as tag

from(

select
tabrn.rn as sec,
tab0.* ,
(select distinct periodo.periodo from no_periodo_v periodo where periodo.id_periodo = $id_periodo ) as periodo


from(

    select
    id_clase_planta,
    case when estado = 0 then null else replace(tipo_bene,'0','0') end as tipo_bene,
    case when estado = 0 then null else nit_bene end as nit_bene,
    case when estado = 0 then null else nombre_bene end as nombre_bene,
    codigo_desc,
    codigo_concep,
    descripcion_concep,
    id_periodo,
    case when estado = 0 then null else id_bn end as id_bn,
    case when estado = 0 then null else id end as tipo_cuenta,
    id_tipo_doc,
    codigo_siif,
    num_doc,
    nombre_apellido,
    case when estado = 0 then 'CH' else 'AC' end as medio_pago,
    case when estado = 0 then null else replace(tipo_iden,'0','') end as tipo_iden,
    case when estado = 0 then null else nit_bn end as nit_bn,
    case when estado = 0 then null else banco end as banco,
    codigo_ach,
    descripcion,
    case when estado = 0 then null else nombre_corto end as nombre_corto,
    case when estado = 0 then null else num_cuenta end as num_cuenta,
    valor_dev,
    valor_ded,
    valor_rein,
    valor,
    valor_base,
    porcentaje
    /*
    sum(nvl(valor_dev,0)) as valor_dev,
    sum(nvl(valor_ded,0)) as valor_ded,
    sum(nvl(valor,0)) as valor
    */

    from(

        select distinct
        tab1.id_liquida_nomina,
        tab7.id_clase_planta,
        rub.descripcion as descripcion_rub, rub.rubro as  codigo_rubro, rub.id_tipo_atributo_contab,

        case when dednoley.id_concep_nomina is not null then nvl(tercon_dednoley.num_doc, tercon.num_doc) else tercon.num_doc end as nit_bene,
        case when dednoley.id_concep_nomina is not null then nvl(tercon_dednoley.razon_soc, tercon.razon_soc) else tercon.razon_soc end as nombre_bene,
        case when dednoley.id_concep_nomina is not null then nvl(tipiden_dednoley.codigo_siif, tipiden_con.codigo_siif) else tipiden_con.codigo_siif end as tipo_bene,

        dednoley.id_concep_nomina as concep_dednoley,
        dednoley.id_mae_ter as ter_dednoley,
        tercon_dednoley.num_doc as nit_dednoley,
        tercon_dednoley.razon_soc as razsoc_dednoley,
        tercon.Num_Doc as nit_con,
        Tercon.Razon_Soc as razsoc_con,
        tab8.codigo_siif as codigo_desc,
        tab5.codigo as codigo_concep, tab5.descripcion as descripcion_concep,
        tab1.num_doc,tab6.nombre_apellido,tab3.codigo||' - '||tab3.descripcion as banco, tab3.codigo_ach,
        tab2.num_cuenta,
        case when nvl(tab2.estado,0) = 0 and tab7.estado = 0 and tab2.fecha_terminacion <= tab7.fecha_termina then 1 else nvl(tab2.estado,0) end as estado,
        case when tab5.operador = 1 then tab1.valor_liquidado else (tab1.valor_liquidado * -1) end as valor,
        case when tab5.operador = 1 then tab1.valor_liquidado else 0 end as valor_dev,
        case when tab5.operador = 0 then tab1.valor_liquidado else 0 end as valor_ded,
        nvl(rein.valor_liquidado,0) as valor_rein,
        tab1.id_periodo,
        tab1.id_tipo_doc, tab3.id_bn, terbn.NUM_DOC as nit_bn, tipiden.codigo_siif as tipo_iden,
        tab4.id,
        tab4.descripcion,
        tab4.nombre_corto,
        tab18.codigo_siif,

        case when tab1.id_concep_nomina = (SELECT id_concep_rete FROM no_param_concep where id_param_concep = 1) then nvl(tab1.valor_base,0) else null end as valor_base,
        case when tab1.id_concep_nomina = (SELECT id_concep_rete FROM no_param_concep where id_param_concep = 1) then tab1.porcentaje else null end as porcentaje

        from no_liquida_nomina tab1

        left join no_concep_nomina tab5 on tab5.id_concep_nomina = tab1.id_concep_nomina
        left join pr_rubro_presup_v rub on  rub.id_rubro = tab5.id_rubro
        left join no_lista_conceptos_siif tab8 on tab8.id_lista_conceptos_siif = tab5.id_lista_conceptos_siif

        left join Interceros_v tercon  on tercon.id_mae_ter = Tab5.Id_Acreedor
        left join no_ded_noley dednoley on dednoley.id_concep_nomina = tab5.id_concep_nomina and dednoley.id_tipo_doc = tab1.id_tipo_doc and dednoley.num_doc = tab1.num_doc and dednoley.estado = 1
        left join interceros_v tercon_dednoley  on tercon_dednoley.id_mae_ter = dednoley.id_mae_ter

        left join tipo_identificacion tipiden_con on tipiden_con.id_tipo_identificacion = tercon.id_tipo_doc
        left join tipo_identificacion tipiden_dednoley on tipiden_dednoley.id_tipo_identificacion = tercon_dednoley.id_tipo_doc

        left join no_datos_funcionario_v tab6  on tab6.id_tipo_doc = tab1.id_tipo_doc and tab6.num_doc = tab1.num_doc

        --join no_pago_func tab2 on tab2.id_tipo_doc = tab1.id_tipo_doc and tab2.num_doc = tab1.num_doc
        left join (
          SELECT
           aut.*,
           ROW_NUMBER() OVER (
            partition by aut.num_doc
            ORDER BY aut.num_doc asc, aut.fecha_activacion desc, aut.id_pago_func desc
           ) AS rn
          from no_pago_func aut
        )tab2
        on tab1.id_tipo_doc = tab2.id_tipo_doc and tab1.num_doc = tab2.num_doc
        and tab2.rn = 1
        left join no_nombramiento_v tab7  ON tab7.id_tipo_doc = tab1.id_tipo_doc and tab7.num_doc = tab1.num_doc

        left join ts_bn tab3 on tab3.id_bn = tab2.id_bn
        left join interceros terbn
        on terbn.id_mae_ter = tab3.id_mae_ter
        left join tipo_identificacion tipiden
        on tipiden.id_tipo_identificacion = terbn.id_tipo_doc

        left join ts_tc tab4 on tab4.id = tab2.tipo_cuenta

        join tipo_documento tab18 on tab18.id_tipo_doc = tab1.id_tipo_doc

          left join(
               select
              liq.id_tipo_doc,
              liq.num_doc,
              liq.id_concep_nomina,
              liq.id_periodo,
              sum(liq.valor_liquidado) as valor_liquidado
              from no_liquida_nomina liq
              left join no_concep_nomina concep
              on concep.id_concep_nomina = liq.id_concep_nomina

              where
              liq.id_periodo = $id_periodo
              and liq.id_concep_nomina in (select no_concep_nomina.id_concep_rein from no_concep_nomina)

              and concep.id_rubro is null
              and concep.id_lista_conceptos_siif is not null

              group by
              liq.id_tipo_doc,
              liq.num_doc,
              liq.id_concep_nomina,
              liq.id_periodo
          )rein
          on rein.id_tipo_doc = tab1.id_tipo_doc
          and rein.num_doc = tab1.num_doc
          and rein.id_concep_nomina = tab5.id_concep_rein
          and rein.id_periodo = tab1.id_periodo

        left join(

            select

            tab.id_periodo,
            tab.id_tipo_doc,
            tab.num_doc,
            tab.nombre_apellido,
            tab.estado,

            sum(nvl(tab.valor,0)) as valor,
            sum(nvl(valor_nac,0)) as valor_nac,
            sum(nvl(valor_pro,0)) as valor_pro,

            sum(nvl(tab.valor_dev,0)) as valor_dev,
            sum(nvl(tab.valor_ded,0)) as valor_ded,
            
            max(rec1001.id_agrup_rec1001) as id_agrup_rec1001

            from(

                select
                rub.descripcion as descripcion_rub, rub.rubro as  codigo_rubro, rub.id_tipo_atributo_contab,
                tab5.operador,
                tab1.num_doc,tab6.nombre_apellido,

                case when nvl(tab2.estado,0) = 0 and tab7.estado = 0 and tab2.fecha_terminacion <= tab7.fecha_termina then 1 else nvl(tab2.estado,0) end as estado,

                case when nvl(recbf.id_agrup_rec,agrup.id_agrup_rec) = 5
                    then
                    case when tab5.operador = 1 then tab1.valor_liquidado
                         when tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else (tab1.valor_liquidado * -1) end
                    else 0 end as valor_nac,
                case when nvl(recbf.id_agrup_rec,agrup.id_agrup_rec) = 6
                    then
                    case when tab5.operador = 1 then tab1.valor_liquidado
                         when tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else (tab1.valor_liquidado * -1) end
                    else 0 end as valor_pro,

                case when tab5.operador = 1 then tab1.valor_liquidado
                     when tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else (tab1.valor_liquidado * -1) end as valor,
                case when tab5.operador = 1 then tab1.valor_liquidado
                     when tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else 0 end as valor_dev,
                case when tab5.operador = 0 and tab5.id_tipo_concepto_org != 1 then tab1.valor_liquidado else 0 end as valor_ded,
                tab1.id_periodo,
                tab1.id_tipo_doc

                from no_liquida_nomina tab1

                left join no_concep_nomina tab5 on tab5.id_concep_nomina = tab1.id_concep_nomina
                left join pr_rubro_presup_v rub on  rub.id_rubro = tab5.id_rubro
                        
                left join pr_rubro_agrup_rec agrup on agrup.id_rubro = tab5.id_rubro
                /*segun separacion tope el otro rec - 20210420*/
                left join no_funcionario_agrup_rec_bf recbf on recbf.id_tipo_doc = tab1.id_tipo_doc and recbf.num_doc = tab1.num_doc and recbf.id_periodo = $id_periodo
                and agrup.id_agrup_rec = 5
                        
                left join no_datos_funcionario_v tab6  on tab6.id_tipo_doc = tab1.id_tipo_doc and tab6.num_doc = tab1.num_doc


                --join no_pago_func tab2 on tab2.id_tipo_doc = tab1.id_tipo_doc and tab2.num_doc = tab1.num_doc
                left join (
                  SELECT
                   aut.*,
                   ROW_NUMBER() OVER (
                    partition by aut.num_doc
                    ORDER BY aut.num_doc asc, aut.fecha_activacion desc, aut.id_pago_func desc
                   ) AS rn
                  from no_pago_func aut
                )tab2
                on tab1.id_tipo_doc = tab2.id_tipo_doc and tab1.num_doc = tab2.num_doc
                and tab2.rn = 1
                left join no_nombramiento_v tab7  ON tab7.id_tipo_doc = tab1.id_tipo_doc and tab7.num_doc = tab1.num_doc


                where
                tab1.id_periodo = $id_periodo
                and tab5.pago_func = 1

                /*and (case when tab5.operador = 0 then 1 else (case when nvl(rub.id_tipo_atributo_contab,1) = 1 then 1 else 0 end) end) = 1*/

                /*and tab5.id_rubro is null*//* and tab5.id_lista_conceptos_siif is not null*/

            )tab
        
            left join(
                select 
                nvl(rec.id_agrup_rec,5) as id_agrup_rec1001
                from no_concep_nomina con
                left join pr_rubro_agrup_rec rec on rec.id_rubro = con.id_rubro
                where con.id_concep_nomina in (select max(id_concep_basica) from no_param_concep)
            )rec1001
            on rec1001.id_agrup_rec1001 != 0

            group by
            tab.id_periodo,
            tab.id_tipo_doc,
            tab.num_doc,
            tab.nombre_apellido,
            tab.estado

        )tab
        on tab.id_periodo = tab1.id_periodo
        and tab.id_tipo_doc = tab1.id_tipo_doc
        and tab.num_doc = tab1.num_doc

        left join(

            select
              liq.id_tipo_doc,
              liq.num_doc,
              concep.id_concep_rein as id_concep_nomina,
              liq.id_periodo,
              sum(liq.valor_liquidado) as valor_liquidado

            from no_concep_nomina concep

            left join no_liquida_nomina liq
            on concep.id_concep_nomina = liq.id_concep_nomina

            where
            concep.id_concep_rein is not null
            and concep.id_tipo_concepto = 1
            AND concep.id_rubro is not null

              group by
              liq.id_tipo_doc,
              liq.num_doc,
              concep.id_concep_rein,
              liq.id_periodo
        )conorig
        on conorig.id_concep_nomina = tab5.id_concep_nomina
          and conorig.id_tipo_doc = tab1.id_tipo_doc
          and conorig.num_doc = tab1.num_doc
          and conorig.id_periodo = tab1.id_periodo

        left join(

            select
              concep.*
            from no_concep_nomina concep

            where
            concep.id_concep_nomina in (select no_concep_nomina.id_concep_rein from no_concep_nomina
                    where
                    id_concep_rein is not null
                    and id_tipo_concepto = 1
                    AND id_rubro is not null)
        )esrein
        on esrein.id_concep_nomina = tab5.id_concep_nomina

        where
        tab1.id_periodo = $id_periodo
        and tab5.pago_func = 1
        and tab5.id_tipo_concepto != 1

        /*and tab5.id_rubro is null*/ and tab5.id_lista_conceptos_siif is not null

        /*validar si es concepto es de reintegro, que no tenga concepto original - 20200819
        o es reintegro y no tiene rubro - 20200916
        */
        and (
            esrein.id_concep_nomina is null
            or ( esrein.id_concep_nomina is not null and conorig.id_concep_nomina is null )
            or ( esrein.id_concep_nomina is not null and tab5.id_rubro is null )
        )

        /*Filtra seegun atributo contable del rubro - 20201218:se activa nuevamente para CEV*/
        and (case when 0 = $id_tipo_atributo_contab then 1
                  when tab5.operador = 0
                  then (case when tab.valor >= 0 and 1 = $id_tipo_atributo_contab then 1
                             when tab.valor <  0 and 2 = $id_tipo_atributo_contab then 1
                             else 0 end)
                  else (case when nvl(rub.id_tipo_atributo_contab,1) = $id_tipo_atributo_contab
                             then 1
                             else 0 end) end
            ) = 1

        /*Se coloca filtro de id_agrup_rec - 20210317*/
        and (case when 0 = nvl($id_agrup_rec,0) then 1
                  else 
                  /* Cambio de validacion para veirifcar parametro de recurso primero del 1001-AB, valor de deduccion alcanza segun nacion o propios - 20240821::LAVILA */
                    (case 
                        when tab.id_agrup_rec1001 = 5 
                        then (case when nvl($id_agrup_rec,0) = 5 and (tab.valor_nac - tab.valor_ded) >= 0 then 1
                             when nvl($id_agrup_rec,0) = 6 and (tab.valor_nac - tab.valor_ded) <  0 and (tab.valor_pro - tab.valor_ded) >=  0 then 1
                            else 0 end)
                        when tab.id_agrup_rec1001 = 6 
                        then (case when nvl($id_agrup_rec,0) = 6 and (tab.valor_pro - tab.valor_ded) >= 0 then 1
                             when nvl($id_agrup_rec,0) = 5 and (tab.valor_pro - tab.valor_ded) <  0 and (tab.valor_nac - tab.valor_ded) >=  0 then 1
                            else 0 end)
                    else 0 end)
                        
                  /*else (case when nvl($id_agrup_rec,0) = 5 and (tab.valor_nac - tab.valor_ded) >= 0 then 1
                             when nvl($id_agrup_rec,0) = 6 and (tab.valor_nac - tab.valor_ded) <  0 and (tab.valor_pro - tab.valor_ded) >=  0 then 1
                        else 0 end)*/
                  end
            ) = 1
    )
    /*
    group by
    codigo_siif,
    num_doc,nombre_apellido,
    tipo_iden,
    nit_bn,
    banco,codigo_ach,
    num_cuenta,descripcion,id_periodo,
    id_tipo_doc, id_bn, id, nombre_corto, estado
    */

)tab0

left join (
    select
    rownum as rn,
    id_tipo_doc,
    num_doc from (

              select distinct
              tab1.id_tipo_doc,
              tab1.num_doc
              from no_liquida_nomina tab1

              left join no_concep_nomina tab5 on tab5.id_concep_nomina = tab1.id_concep_nomina
              left join pr_rubro_presup_v rub on  rub.id_rubro = tab5.id_rubro

              left join no_nombramiento_v tab0  ON tab0.id_tipo_doc = tab1.id_tipo_doc and tab0.num_doc = tab1.num_doc
              where
              tab1.id_periodo = $id_periodo
              $whereClasePlanta
              and ( nvl(rub.id_tipo_atributo_contab,1) = $id_tipo_atributo_contab or 0 = $id_tipo_atributo_contab)
              and ( tab5.operador = 1 or 0 = $id_tipo_atributo_contab)

              and tab1.valor_liquidado != 0

              order by
              tab1.num_doc

    )
)tabrn
on tabrn.id_tipo_doc = tab0.id_tipo_doc
and tabrn.num_doc = tab0.num_doc

where
1 = 1
$whereFuncionarioNumDoc $whereFuncionarioTipoDoc
$whereClasePlanta

order by
tab0.num_doc, tab0.codigo_desc

)tab

having
/*sum(tab.valor_ded) != 0*/
(sum(tab.valor_ded) - sum(tab.valor_rein)) != 0

group by
--tab.sec,
tab.tipo_bene,
tab.nit_bene,
tab.nombre_bene,
tab.codigo_desc,
tab.id_periodo,
--tab.id_bn,
--tab.tipo_cuenta,
--tab.id_tipo_doc,
--tab.codigo_siif,
--tab.num_doc,
--tab.nombre_apellido,
--tab.medio_pago,
--tab.tipo_iden,
--tab.nit_bn,
--tab.banco,
--tab.codigo_ach,
--tab.descripcion,
--tab.nombre_corto,
--tab.num_cuenta,
tab.periodo


order by
tab.codigo_desc,
tab.nit_bene

)tab0 
                        
)
EOD;
            }

            //pagos
            if ($combo_text == 3) {

                /*                 * *
                 * Se coloca periodo de DEF id-5 para omitir y traer los registros - 20220307::LAVILA
                 */
                //Sql
                $sql = <<<EOD
select

RN,
CODIGO_SIIF_BF,
NUM_DOC,
VALOR_DEV_FILTRO,
VALOR_DED_RETE_FILTRO,
VALOR_DED_FILTRO-VALOR_DED_RETE_FILTRO AS VALOR_DED_FILTRO,
VALOR_FILTRO

from(
                        
select
rownum as rn,
tab.*,

/*valores nuevos segun filtro - 20210317*/
/*case when nvl($id_agrup_rec,0) = 5 then tab.valor_nac
     when nvl($id_agrup_rec,0) = 6 then tab.valor_pro
     else tab.valor_dev end as valor_dev_filtro,
case when nvl($id_agrup_rec,0) = 5 and (tab.valor_nac - tab.valor_ded) >= 0 then tab.valor_ded
     when nvl($id_agrup_rec,0) = 6 and (tab.valor_nac - tab.valor_ded) <  0 and (tab.valor_pro - tab.valor_ded) >=  0 then tab.valor_ded
     when nvl($id_agrup_rec,0) = 0 then tab.valor_ded
     else 0 end as valor_ded_filtro,
case when nvl($id_agrup_rec,0) = 5 and (tab.valor_nac - tab.valor_ded) >= 0 then tab.valor_ded_rete
     when nvl($id_agrup_rec,0) = 6 and (tab.valor_nac - tab.valor_ded) <  0 and (tab.valor_pro - tab.valor_ded) >=  0 then tab.valor_ded_rete
     when nvl($id_agrup_rec,0) = 0 then tab.valor_ded_rete
     else 0 end as valor_ded_rete_filtro,

(case when nvl($id_agrup_rec,0) = 5 then tab.valor_nac
     when nvl($id_agrup_rec,0) = 6 then tab.valor_pro
     else tab.valor end)
-
(case when nvl($id_agrup_rec,0) = 5 and (tab.valor_nac - tab.valor_ded) >= 0 then tab.valor_ded
     when nvl($id_agrup_rec,0) = 6 and (tab.valor_nac - tab.valor_ded) <  0 and (tab.valor_pro - tab.valor_ded) >=  0 then tab.valor_ded
     else 0 end) as valor_filtro,*/
     
/* Cambio de validacion para veirifcar parametro de recurso primero del 1001-AB, valor de deduccion alcanza segun nacion o propios - 20240821::LAVILA */
rec1001.id_agrup_rec1001,
case when nvl($id_agrup_rec,0) = 5 then tab.valor_nac
     when nvl($id_agrup_rec,0) = 6 then tab.valor_pro
     else tab.valor_dev end as valor_dev_filtro,
case when rec1001.id_agrup_rec1001 = 5 and nvl($id_agrup_rec,0) = 5 and (tab.valor_nac - tab.valor_ded) >= 0 then tab.valor_ded
     when rec1001.id_agrup_rec1001 = 5 and nvl($id_agrup_rec,0) = 6 and (tab.valor_nac - tab.valor_ded) <  0 and (tab.valor_pro - tab.valor_ded) >=  0 then tab.valor_ded
     when rec1001.id_agrup_rec1001 = 6 and nvl($id_agrup_rec,0) = 6 and (tab.valor_pro - tab.valor_ded) >= 0 then tab.valor_ded
     when rec1001.id_agrup_rec1001 = 6 and nvl($id_agrup_rec,0) = 5 and (tab.valor_pro - tab.valor_ded) <  0 and (tab.valor_nac - tab.valor_ded) >=  0 then tab.valor_ded
     when nvl($id_agrup_rec,0) = 0 then tab.valor_ded
     else 0 end as valor_ded_filtro,
case when rec1001.id_agrup_rec1001 = 5 and nvl($id_agrup_rec,0) = 5 and (tab.valor_nac - tab.valor_ded) >= 0 then tab.valor_ded_rete
     when rec1001.id_agrup_rec1001 = 5 and nvl($id_agrup_rec,0) = 6 and (tab.valor_nac - tab.valor_ded) <  0 and (tab.valor_pro - tab.valor_ded) >=  0 then tab.valor_ded_rete
     when rec1001.id_agrup_rec1001 = 6 and nvl($id_agrup_rec,0) = 6 and (tab.valor_pro - tab.valor_ded) >= 0 then tab.valor_ded_rete
     when rec1001.id_agrup_rec1001 = 6 and nvl($id_agrup_rec,0) = 5 and (tab.valor_pro - tab.valor_ded) <  0 and (tab.valor_nac - tab.valor_ded) >=  0 then tab.valor_ded_rete
     when nvl($id_agrup_rec,0) = 0 then tab.valor_ded_rete
     else 0 end as valor_ded_rete_filtro,

(case when nvl($id_agrup_rec,0) = 5 then tab.valor_nac
     when nvl($id_agrup_rec,0) = 6 then tab.valor_pro
     else tab.valor end)
-
(case when rec1001.id_agrup_rec1001 = 5 and nvl($id_agrup_rec,0) = 5 and (tab.valor_nac - tab.valor_ded) >= 0 then tab.valor_ded
     when rec1001.id_agrup_rec1001 = 5 and nvl($id_agrup_rec,0) = 6 and (tab.valor_nac - tab.valor_ded) <  0 and (tab.valor_pro - tab.valor_ded) >=  0 then tab.valor_ded
     when rec1001.id_agrup_rec1001 = 6 and nvl($id_agrup_rec,0) = 6 and (tab.valor_pro - tab.valor_ded) >= 0 then tab.valor_ded
     when rec1001.id_agrup_rec1001 = 6 and nvl($id_agrup_rec,0) = 5 and (tab.valor_pro - tab.valor_ded) <  0 and (tab.valor_nac - tab.valor_ded) >=  0 then tab.valor_ded
     else 0 end) as valor_filtro,

(select codigo_instituto_siif from no_param_gen where id_param_gen = 1) as codigo_instituto_siif,
REPLACE(tab.codigo_siif,'0','') as codigo_siif_bf,
1 as tipo_nomina

from(

select
tab0.* ,
(select distinct periodo.periodo from no_periodo_v periodo where periodo.id_periodo = $id_periodo ) as periodo,

--Asignación Básica + Gastos de representación
concep.valor as valor_remuneracion


from(

    select
    id_clase_planta,
    id_periodo,
    case when estado = 0 then null else id_bn end as id_bn,
    case when estado = 0 then null else id end as tipo_cuenta,
    id_tipo_doc,
    replace(codigo_siif,'0','0') as codigo_siif,
    num_doc,
    nombre_apellido,
                PRIMER_NOMBRE,
                SEGUNDO_NOMBRE,
                PRIMER_APELLIDO,
                SEGUNDO_APELLIDO,
    case when estado = 0 then 'CH' else 'AC' end as medio_pago,
    case when estado = 0 then null else replace(tipo_iden,'0','0') end as tipo_iden,
    case when estado = 0 then null else nit_bn end as nit_bn,
    case when estado = 0 then null else banco end as banco,
    codigo_ach,
    descripcion,
    case when estado = 0 then null else nombre_corto end as nombre_corto,
    case when estado = 0 then null else id end as cuenta_id,
    case when estado = 0 then null else num_cuenta end as num_cuenta,
    sum(nvl(valor_dev,0)) as valor_dev,
    sum(nvl(valor_ded,0)) as valor_ded,
    sum(nvl(valor_ded_rete,0)) as valor_ded_rete,
    sum(nvl(valor,0)) as valor,
    sum(nvl(valor_nac,0)) as valor_nac,
    sum(nvl(valor_pro,0)) as valor_pro,
    11 as tipo_cuenta_pagar

    from(

        select
        tab7.id_clase_planta,
        rub.descripcion as descripcion_rub, rub.rubro as  codigo_rubro, rub.id_tipo_atributo_contab,
        tab5.operador,
        tab.valor as valorsum,

        tab1.num_doc,tab6.nombre_apellido,
                tab6.PRIMER_NOMBRE,
                tab6.SEGUNDO_NOMBRE,
                tab6.PRIMER_APELLIDO,
                tab6.SEGUNDO_APELLIDO,
        tab3.codigo||' - '||tab3.descripcion as banco, tab3.codigo_ach,
        tab2.num_cuenta,
        case when nvl(tab2.estado,0) = 0 and tab7.estado = 0 and tab2.fecha_terminacion <= tab7.fecha_termina then 1 else nvl(tab2.estado,0) end as estado,
        case when tab5.operador = 1 then tab1.valor_liquidado
             when tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else (tab1.valor_liquidado * -1) end as valor,
        case when nvl(recbf.id_agrup_rec,agrup.id_agrup_rec) = 5
            then
            case when tab5.operador = 1 then tab1.valor_liquidado
                 when tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else (tab1.valor_liquidado * -1) end
            else 0 end as valor_nac,
        case when nvl(recbf.id_agrup_rec,agrup.id_agrup_rec) = 6
            then
            case when tab5.operador = 1 then tab1.valor_liquidado
                 when tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else (tab1.valor_liquidado * -1) end
            else 0 end as valor_pro,

        /*
        case when tab5.operador = 1 and tab5.id_rubro is not null then tab1.valor_liquidado
             when tab5.operador = 0 and tab5.id_rubro is not null and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else 0 end as valor_dev,
        case when tab5.operador = 0 and tab5.id_tipo_concepto_org != 1 then tab1.valor_liquidado
             when tab5.operador = 1 and tab5.id_rubro is null and tab5.id_tipo_concepto_org != 1 then (tab1.valor_liquidado * -1) else 0 end as valor_ded,*/

        /*validar si es concepto es de reintegro, que no tenga concepto original se coloca en deducido - 20200819
        o es reintegro y no tiene rubro - 20200916
        */
        case
            when ( esrein.id_concep_nomina is not null and tab5.id_rubro is null ) then 0
            when ( esrein.id_concep_nomina is not null and conorig.id_concep_nomina is null ) then 0

            when tab5.operador = 1 and tab5.id_rubro is not null then tab1.valor_liquidado
            when tab5.operador = 0 and tab5.id_rubro is not null and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1)
        else 0 end as valor_dev,
        case
            when ( esrein.id_concep_nomina is null or ( esrein.id_concep_nomina is not null and conorig.id_concep_nomina is null ) or  ( esrein.id_concep_nomina is not null and tab5.id_rubro is null ) )
                and tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then tab1.valor_liquidado
            when ( esrein.id_concep_nomina is null or ( esrein.id_concep_nomina is not null and conorig.id_concep_nomina is null ) or  ( esrein.id_concep_nomina is not null and tab5.id_rubro is null ) )
                and tab5.operador = 1 and tab5.id_rubro is null and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1)
            when tab5.operador = 0 and tab5.id_tipo_concepto_org != 1 then tab1.valor_liquidado
            when tab5.operador = 1 and tab5.id_rubro is null and tab5.id_tipo_concepto_org != 1 then (tab1.valor_liquidado * -1)
        else 0 end as valor_ded,
        /*retencion*/
        case
            when tab1.id_concep_nomina in (select id_concep_rete from no_param_concep union select id_concep_rete_proc1 from no_param_concep)
            then
                case
                        when ( esrein.id_concep_nomina is null or ( esrein.id_concep_nomina is not null and conorig.id_concep_nomina is null ) or  ( esrein.id_concep_nomina is not null and tab5.id_rubro is null ) )
                        and tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then tab1.valor_liquidado
                    when ( esrein.id_concep_nomina is null or ( esrein.id_concep_nomina is not null and conorig.id_concep_nomina is null ) or  ( esrein.id_concep_nomina is not null and tab5.id_rubro is null ) )
                        and tab5.operador = 1 and tab5.id_rubro is null and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1)
                    when tab5.operador = 0 and tab5.id_tipo_concepto_org != 1 then tab1.valor_liquidado
                    when tab5.operador = 1 and tab5.id_rubro is null and tab5.id_tipo_concepto_org != 1 then (tab1.valor_liquidado * -1)
                else 0 end
        else 0 end as valor_ded_rete,

        tab1.id_periodo,
        tab1.id_tipo_doc, tab3.id_bn, terbn.NUM_DOC as nit_bn, tipiden.codigo_siif as tipo_iden,
        tab4.id,
        tab4.descripcion,
        tab4.nombre_corto,
        tab8.codigo_siif
        from no_liquida_nomina tab1

        left join no_concep_nomina tab5 on tab5.id_concep_nomina = tab1.id_concep_nomina
        left join pr_rubro_presup_v rub on  rub.id_rubro = tab5.id_rubro
                        
        left join pr_rubro_agrup_rec agrup on agrup.id_rubro = tab5.id_rubro
        /*segun separacion tope el otro rec - 20210420*/
        left join no_funcionario_agrup_rec_bf recbf on recbf.id_tipo_doc = tab1.id_tipo_doc and recbf.num_doc = tab1.num_doc and recbf.id_periodo = $id_periodo
        and agrup.id_agrup_rec = 5
                        
        left join no_datos_funcionario_v tab6  on tab6.id_tipo_doc = tab1.id_tipo_doc and tab6.num_doc = tab1.num_doc

        --join no_pago_func tab2 on tab2.id_tipo_doc = tab1.id_tipo_doc and tab2.num_doc = tab1.num_doc
        left join (
          SELECT
           aut.*,
           ROW_NUMBER() OVER (
            partition by aut.num_doc
            ORDER BY aut.num_doc asc, aut.fecha_activacion desc, aut.id_pago_func desc
           ) AS rn
          from no_pago_func aut
        )tab2
        on tab1.id_tipo_doc = tab2.id_tipo_doc and tab1.num_doc = tab2.num_doc
        and tab2.rn = 1
        left join no_nombramiento_v tab7  ON tab7.id_tipo_doc = tab1.id_tipo_doc and tab7.num_doc = tab1.num_doc

        left join ts_bn tab3 on tab3.id_bn = tab2.id_bn
        left join interceros terbn
        on terbn.id_mae_ter = tab3.id_mae_ter
        left join tipo_identificacion tipiden
        on tipiden.id_tipo_identificacion = terbn.id_tipo_doc

        left join ts_tc tab4 on tab4.id = tab2.tipo_cuenta

        join tipo_documento tab8 on tab8.id_tipo_doc = tab1.id_tipo_doc

        left join(

            select

            tab.id_periodo,
            tab.id_tipo_doc,
            tab.num_doc,
            tab.nombre_apellido,
                tab.PRIMER_NOMBRE,
                tab.SEGUNDO_NOMBRE,
                tab.PRIMER_APELLIDO,
                tab.SEGUNDO_APELLIDO,
            tab.estado,

            sum(nvl(tab.valor,0)) as valor,
            sum(nvl(tab.valor_dev,0)) as valor_dev,
            sum(nvl(tab.valor_ded,0)) as valor_ded

            from(

                select
                rub.descripcion as descripcion_rub, rub.rubro as  codigo_rubro, rub.id_tipo_atributo_contab,
                tab5.operador,
                tab1.num_doc,tab6.nombre_apellido,
                tab6.PRIMER_NOMBRE,
                tab6.SEGUNDO_NOMBRE,
                tab6.PRIMER_APELLIDO,
                tab6.SEGUNDO_APELLIDO,

                case when nvl(tab2.estado,0) = 0 and tab7.estado = 0 and tab2.fecha_terminacion <= tab7.fecha_termina then 1 else nvl(tab2.estado,0) end as estado,
        case when tab5.operador = 1 then tab1.valor_liquidado
             when tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else (tab1.valor_liquidado * -1) end as valor,
        case when tab5.operador = 1 then tab1.valor_liquidado
             when tab5.operador = 0 and tab5.id_tipo_concepto_org = 1 then (tab1.valor_liquidado * -1) else 0 end as valor_dev,
        case when tab5.operador = 0 and tab5.id_tipo_concepto_org != 1 then tab1.valor_liquidado else 0 end as valor_ded,
                tab1.id_periodo,
                tab1.id_tipo_doc

                from no_liquida_nomina tab1

                left join no_concep_nomina tab5 on tab5.id_concep_nomina = tab1.id_concep_nomina
                left join pr_rubro_presup_v rub on  rub.id_rubro = tab5.id_rubro
                left join no_datos_funcionario_v tab6  on tab6.id_tipo_doc = tab1.id_tipo_doc and tab6.num_doc = tab1.num_doc

                --join no_pago_func tab2 on tab2.id_tipo_doc = tab1.id_tipo_doc and tab2.num_doc = tab1.num_doc
                left join (
                  SELECT
                   aut.*,
                   ROW_NUMBER() OVER (
                    partition by aut.num_doc
                    ORDER BY aut.num_doc asc, aut.fecha_activacion desc, aut.id_pago_func desc
                   ) AS rn
                  from no_pago_func aut
                )tab2
                on tab1.id_tipo_doc = tab2.id_tipo_doc and tab1.num_doc = tab2.num_doc
                and tab2.rn = 1
                left join no_nombramiento_v tab7  ON tab7.id_tipo_doc = tab1.id_tipo_doc and tab7.num_doc = tab1.num_doc


                where
                tab1.id_periodo = $id_periodo
                and tab5.pago_func = 1

                and (case when tab5.operador = 0 then 1 else (case when nvl(rub.id_tipo_atributo_contab,1) = 1 then 1 else 0 end) end) = 1

            )tab

            group by
            tab.id_periodo,
            tab.id_tipo_doc,
            tab.num_doc,
            tab.nombre_apellido,
                tab.PRIMER_NOMBRE,
                tab.SEGUNDO_NOMBRE,
                tab.PRIMER_APELLIDO,
                tab.SEGUNDO_APELLIDO,
            tab.estado

        )tab
        on tab.id_periodo = tab1.id_periodo
        and tab.id_tipo_doc = tab1.id_tipo_doc
        and tab.num_doc = tab1.num_doc

        left join(

            select
              liq.id_tipo_doc,
              liq.num_doc,
              concep.id_concep_rein as id_concep_nomina,
              liq.id_periodo,
              sum(liq.valor_liquidado) as valor_liquidado

            from no_concep_nomina concep

            left join no_liquida_nomina liq
            on concep.id_concep_nomina = liq.id_concep_nomina

            where
            concep.id_concep_rein is not null
            and concep.id_tipo_concepto = 1
            AND concep.id_rubro is not null

              group by
              liq.id_tipo_doc,
              liq.num_doc,
              concep.id_concep_rein,
              liq.id_periodo
        )conorig
        on conorig.id_concep_nomina = tab5.id_concep_nomina
          and conorig.id_tipo_doc = tab1.id_tipo_doc
          and conorig.num_doc = tab1.num_doc
          and conorig.id_periodo = tab1.id_periodo

        left join(

            select
              concep.*
            from no_concep_nomina concep

            where
            concep.id_concep_nomina in (select no_concep_nomina.id_concep_rein from no_concep_nomina
                    where
                    id_concep_rein is not null
                    and id_tipo_concepto = 1
                    AND id_rubro is not null)
        )esrein
        on esrein.id_concep_nomina = tab5.id_concep_nomina

        where
        tab1.id_periodo = $id_periodo
        and tab5.pago_func = 1
        /*Filtra seegun atributo contable del rubro*/
        and (case when 0 = $id_tipo_atributo_contab then 1
                  when tab5.operador = 0
                  then (case when tab.valor >= 0 and 1 = $id_tipo_atributo_contab then 1
                             when tab.valor <  0 and 2 = $id_tipo_atributo_contab then 1
                             else 0 end)
                  else (case when nvl(rub.id_tipo_atributo_contab,1) = $id_tipo_atributo_contab
                             then 1
                             else 0 end) end
            ) = 1

    )
    group by
    id_clase_planta,
    codigo_siif,
    num_doc,nombre_apellido,
                PRIMER_NOMBRE,
                SEGUNDO_NOMBRE,
                PRIMER_APELLIDO,
                SEGUNDO_APELLIDO,
    tipo_iden,
    nit_bn,
    banco,codigo_ach,
    num_cuenta,descripcion,id_periodo,
    id_tipo_doc, id_bn, id, nombre_corto, estado

)tab0

left join(

    select

    concep.num_doc,
    concep.id_tipo_doc,
    sum(concep.valor) as valor

    from (

        SELECT
        concep.num_doc,
        concep.id_tipo_doc,
        concep.id_concep_nomina,
        concep.valor,
        concep.fecha_desde,
        concep.fecha_hasta,
           ROW_NUMBER() OVER (
            partition by concep.num_doc, concep.id_concep_nomina
            ORDER BY concep.num_doc desc, concep.fecha_desde desc, concep.fecha_hasta desc
           ) AS rn

        FROM no_concepto_periodo concep

        left join no_periodo per
        on per.id_periodo = concep.periodo

        where
        per.id_tipo_periodo = 1
        and concep.id_anhos = ( select distinct periodo.id_anhos from no_periodo_v periodo where periodo.id_periodo = $id_periodo )
        and concep.id_meses = ( select distinct periodo.id_meses from no_periodo_v periodo where periodo.id_periodo = $id_periodo )
        and concep.id_concep_nomina in ( select no_param_concep.id_concep_basica from no_param_concep union select no_param_concep.id_concep_gasto_repre from no_param_concep)
        and concep.id_periodo_ajuste is null

    )concep

    where
    concep.rn = 1

    group by
    concep.num_doc,
    concep.id_tipo_doc

)concep
on concep.num_doc = tab0.num_doc
and concep.id_tipo_doc = tab0.id_tipo_doc

where
1 = 1
$whereFuncionarioNumDoc $whereFuncionarioTipoDoc
$whereClasePlanta

and (

    tab0.num_doc not in (
     select nom.num_doc from no_nombramiento_v nom
      where nom.fecha_retiro is not null
      and (select no_periodo.fecha_ini from no_periodo
            where id_periodo = $id_periodo) > trunc(last_day( nom.fecha_termina ))
    )

    or

    (select distinct periodo.id_tipo_periodo from no_periodo_v periodo where periodo.id_periodo = $id_periodo) in (6,7,2,5)

)
/*validar valor de nacion y propio - 20210317*/
and (case when nvl($id_agrup_rec,0) = 5 then tab0.valor_nac
          when nvl($id_agrup_rec,0) = 6 then tab0.valor_pro
     else (tab0.valor_nac + tab0.valor_pro) end) > 0
                        
order by
tab0.num_doc

)tab 
        
left join(
    select 
    nvl(rec.id_agrup_rec,5) as id_agrup_rec1001
    from no_concep_nomina con
    left join pr_rubro_agrup_rec rec on rec.id_rubro = con.id_rubro
    where con.id_concep_nomina in (select max(id_concep_basica) from no_param_concep)
)rec1001
on rec1001.id_agrup_rec1001 != 0
                        
)
EOD;
            }

            //realiza la conexion a la base de datos
            $conn = Doctrine_Manager::connection();
            $resultado = $conn->execute($sql)->fetchAll();

            $this->totalRows = count($resultado);
            $this->logMessage("[gen_archivos_siif_pago_bf_pagos] Total Filas: " . count($resultado));
            $this->startRow = 0;
            $this->endRow = count($resultado);
            $this->list_data = $resultado;

            /*
             * variables para tipo de archivo de salida
             */
            $this->type = "txt";
        } 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());

            /*
             * variables para tipo de archivo de salida
             */
            $this->type = "txt";
        }
    }

}
