<?php

/**
 * ci_cons_est_cuenta actions.
 *
 * @package    nomina
 * @subpackage ci_cons_est_cuenta
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class ci_cons_est_cuentaActions 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.no_obligacion, tab0.sec ';
        }



        /*
         * Manejo de errores
         */
        try {
            /*
             * Variables obligatorias
             */
            $periodo_filtro = $request['id_periodo_filtro'];
            $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 = ' ';
            }
            //Tercero
            if (isset($request['num_doc'])) {
                $whereTercero = " AND tab0.id_mae_ter = " . $request['id_mae_ter'];
            } else {
                $whereTercero = ' ';
            }
            //no_radicado
            if (isset($request['no_radicado'])) {
                $whereNoRadicado = " AND tab0.no_radicado = '" . $request['no_radicado'] . "'";
            } else {
                $whereNoRadicado = ' ';
            }
            //no_obligacion
            if (isset($request['no_obligacion'])) {
                $whereNoObligacion = " AND tab0.no_obligacion = '" . $request['no_obligacion'] . "'";
            } else {
                $whereNoObligacion = ' ';
            }
            //no_rp
            if (isset($request['no_rp'])) {
                $whereNoRp = " AND tab0.no_rp = '" . $request['no_rp'] . "'";
            } else {
                $whereNoRp = ' ';
            }
            //no_orden_pago
            if (isset($request['no_orden_pago'])) {
                $whereNoOrdenPago = " AND tab0.no_orden_pago = '" . $request['no_orden_pago'] . "'";
            } else {
                $whereNoOrdenPago = ' ';
            }

            //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);


            /**
             * Consulta Estado de la Cuenta - 20160808
             */
            $sql = <<<EOD
select count(*) as count from (

select 
tab0.id_pago_obl,
tab0.id_emision_pago,
tab0.fecha_pago,
tab0.nro_orden_pago as no_orden_pago,
tab0.valor_pago,
tab0.no_radicado as no_radicado,
tab0.fecha_cxp,
tab0.valor_cxp,
tab0.vigencia,
tab0.clacta,
tab0.no_obligacion as no_obligacion,  
tab0.sec, 
tab0.fecha, 
tab0.id_rp as no_rp, 
tab0.bloq,
tab0.tercero, 
tab0.id_mae_ter,
tab0.num_doc,
tab0.tercer,
tab0.id_rp, 
tab0.vrbruto,
tab0.vr_iva,
tab0.vr_imp,
tab0.cruce,
tab0.vr_neto,
tab0.estado as estado_txt,
tab0.observa,
tab0.vig,
tab0.ano_fiscal,
tab0.usuario
    
from(

    select distinct 
    pag.id_pago_obl,
    pag.id_emision_pago,
    emi.fecha_proc as fecha_pago,
    pag.nro_orden_pago,
    pag.valor as valor_pago,
    obl.id_cpx as no_radicado,
    cxp.fecha_proceso as fecha_cxp,
    cxp.valor_cxp as valor_cxp,
    decode(obl.id_vigencia,1,'VIG',2,'CXP','RES') as vigencia,clase.descripcion as clacta,
    obl.id_obligacion as no_obligacion, obl.secuencia as sec, 
    obl.fecha_proceso as fecha, 
    obl.id_rp as rp, obl.bloqueo_pago as bloq,
    inte.razon_soc as tercero, inte.id_mae_ter,
    case when ter.num_doc is null then inte.num_doc else ter.num_doc end as num_doc,
    case when ter.num_doc is null then inte.razon_soc else ter.razon_soc end as tercer,
    obl.id_rp as id_rp, 
    
    nvl(oval.valor_obligacion,0) as vrbruto,
    nvl(oiva.valor_iva,0) as vr_iva,
    nvl(deduce.valor_impuesto,0)+nvl(oacr.valor,0) as vr_imp,
    nvl(cruce.valor_impuesto,0) as cruce,
    nvl(oval.valor_obligacion,0)- nvl(deduce.valor_impuesto,0)-nvl(oacr.valor,0)+nvl(cruce.valor_impuesto,0) as vr_neto,
                    
    (
        case when estado.estado is null
        then 'Activa'
        else estado.estado
        end
    ) as estado,
    obl.observaciones as observa,obl.id_vigencia as vig, obl.ano_fiscal,
    --obl.usuario
    (select max(nombre || ' ' || apellido) from usuario where username = obl.usuario) as usuario
    
    
    from ts_obligacion obl
    
    left join ts_cxp cxp on obl.id_cpx = cxp.id_cxp  
    and obl.id_vigencia = cxp.id_vigencia 
    and obl.ano_fiscal = cxp.ano_fiscal
    
    left join pr_rp_comis rpcom on obl.id_rp =rpcom.id and obl.id_vigencia=rpcom.id_vigencia and obl.ano_fiscal=rpcom.vigencia
    left join pr_rp rp on obl.id_rp=rp.id and obl.id_vigencia=rp.id_vigencia and obl.ano_fiscal=rp.vigencia
    
    left join
    (
        select ter.id_tercero,ter.id_obligacion, ter.secuencia, ter.vigencia, ter.id_vigencia, inter.num_doc,inter.razon_soc
        from ts_obliga_tercero ter
        left join interceros_v inter on inter.id_mae_ter = ter.id_tercero
    )ter on obl.id_obligacion = ter.id_obligacion
    and obl.secuencia = ter.secuencia
    and obl.id_vigencia = ter.id_vigencia
    and obl.ano_fiscal = ter.vigencia
    
    left join interceros_v inte on rp.id_tercero=inte.id_mae_ter or rpcom.id_mae_ter=inte.id_mae_ter
    
    left join 
    (
        select oval.id_obligacion,oval.secuencia,oval.id_vigencia,oval.ano_fiscal,
        sum(oval.valor_obligacion) as valor_obligacion
        from ts_obligacion_val oval group by oval.id_obligacion, oval.secuencia, oval.id_vigencia, oval.ano_fiscal 
    )oval on obl.id_obligacion = oval.id_obligacion
    and obl.secuencia = oval.secuencia
    and obl.ano_fiscal = oval.ano_fiscal
    and obl.id_vigencia = oval.id_vigencia
    
    left join ts_cp clase on obl.id_clase_cxp = clase.id_cp
    
    left join(
        select ded.id_obligacion, ded.secuencia, ded.ano_fiscal, ded.id_vigencia, sum(ded.valor_impuesto) as valor_impuesto
        from ts_deducciones ded
        group by ded.id_obligacion, ded.secuencia, ded.ano_fiscal, ded.id_vigencia
    )deduce on obl.id_obligacion = deduce.id_obligacion
    and obl.secuencia = deduce.secuencia
    and obl.id_vigencia = deduce.id_vigencia
    and obl.ano_fiscal = deduce.ano_fiscal
    
    left join(
        select ded.id_obligacion, ded.secuencia, ded.ano_fiscal, ded.id_vigencia, sum(ded.valor_impuesto) as valor_impuesto
        from ts_deducciones ded
        where ded.id_im = 22
        group by ded.id_obligacion, ded.secuencia, ded.ano_fiscal, ded.id_vigencia
    )cruce on obl.id_obligacion = cruce.id_obligacion
    and obl.secuencia = cruce.secuencia
    and obl.id_vigencia = cruce.id_vigencia
    and obl.ano_fiscal = cruce.ano_fiscal
    
    left join 
    (
        select oacr.id_obligacion,oacr.secuencia,oacr.id_vigencia,oacr.vigencia,sum(oacr.valor) as valor
        from ts_obliga_acreedores oacr group by oacr.id_obligacion, oacr.secuencia, oacr.id_vigencia, oacr.vigencia    
    )oacr on obl.id_obligacion = oacr.id_obligacion
    and obl.secuencia = oacr.secuencia
    and obl.ano_fiscal = oacr.vigencia
    and obl.id_vigencia = oacr.id_vigencia
    
    left join (
        select obl.id_obligacion, obl.secuencia, obl.id_vigencia, obl.ano_fiscal,
        (
            case when count(anulobl.fecha_proceso) > 0
            then 'Anulado'
            else
            (
                case when (count(pag.id_pago_obl)- count(anul.fecha_anul)) > 0
                then 'Pagado'
                else 'Activo'
                end
            )
            end
        ) as estado
        from ts_obligacion obl
        left join ts_pago_obl pag on obl.ano_fiscal = pag.vigencia
        and obl.id_vigencia = pag.id_vigencia
        and pag.id_obligacion = obl.id_obligacion
        and pag.secuencia = obl.secuencia and pag.id_clase_pago is null
        left join ts_emision_pago emi on emi.id_emision_pago = pag.id_emision_pago
            and emi.fecha_proc  <= to_date('$fecha_fin', 'YYYY-MM-DD')
        left join ts_anul_pagos anul on pag.id_pago_obl = anul.id_pago_obl
            and anul.fecha_anul  <= to_date('$fecha_fin', 'YYYY-MM-DD')
        left join ts_anul_obligacion anulobl on anulobl.id_obligacion = obl.id_obligacion 
            and anulobl.secuencia = obl.secuencia and anulobl.id_vigencia=obl.id_vigencia and anulobl.vigencia=obl.ano_fiscal
            and anulobl.fecha_proceso  <= to_date('$fecha_fin', 'YYYY-MM-DD')
        where 
        obl.ano_fiscal = $id_anhos
        group by obl.id_obligacion, obl.secuencia, obl.id_vigencia, obl.ano_fiscal
    )estado on obl.id_obligacion = estado.id_obligacion and obl.secuencia = estado.secuencia
    and obl.id_vigencia = estado.id_vigencia 
    and obl.ano_fiscal = estado.ano_fiscal
    
    left join ts_obligacion_iva oiva 
    on obl.id_obligacion = oiva.id_obligacion 
    and obl.secuencia = oiva.secuencia and obl.ano_fiscal = oiva.ano_fiscal 
    and obl.id_vigencia = oiva.id_vigencia
    
    left join ts_pago_obl pag
    on obl.id_obligacion = pag.id_obligacion 
    and obl.secuencia = pag.secuencia 
    and obl.ano_fiscal = pag.vigencia 
    and obl.id_vigencia = pag.id_vigencia
    and pag.estado is null
    
    left join ts_emision_pago emi
    on emi.id_emision_pago = pag.id_emision_pago
    
    where 
    obl.ano_fiscal = $id_anhos
    --and obl.id_obligacion = 3246
    and obl.fecha_proceso >= to_date('$fecha_ini', 'YYYY-MM-DD')
    and obl.fecha_proceso  <= to_date('$fecha_fin', 'YYYY-MM-DD')
    

)tab0
where 
1 = 1 
$whereTercero
$whereNoRadicado  $whereNoObligacion
$whereNoRp   $whereNoOrdenPago   
   
)
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_pago_obl,
tab0.id_emision_pago,
tab0.fecha_pago,
tab0.nro_orden_pago as no_orden_pago,
tab0.valor_pago,
tab0.no_radicado as no_radicado,
tab0.fecha_cxp,
tab0.valor_cxp,
tab0.vigencia,
tab0.clacta,
tab0.no_obligacion as no_obligacion,  
tab0.sec, 
tab0.fecha, 
tab0.id_rp as no_rp, 
tab0.bloq,
tab0.tercero, 
tab0.id_mae_ter,
tab0.num_doc,
tab0.tercer,
tab0.id_rp, 
tab0.vrbruto,
tab0.vr_iva,
tab0.vr_imp,
tab0.cruce,
tab0.vr_neto,
tab0.estado as estado_txt,
tab0.observa,
tab0.vig,
tab0.ano_fiscal,
tab0.usuario
    
from(

    select distinct 
    pag.id_pago_obl,
    pag.id_emision_pago,
    emi.fecha_proc as fecha_pago,
    pag.nro_orden_pago,
    pag.valor as valor_pago,
    obl.id_cpx as no_radicado,
    cxp.fecha_proceso as fecha_cxp,
    cxp.valor_cxp as valor_cxp,
    decode(obl.id_vigencia,1,'VIG',2,'CXP','RES') as vigencia,clase.descripcion as clacta,
    obl.id_obligacion as no_obligacion, obl.secuencia as sec, 
    obl.fecha_proceso as fecha, 
    obl.id_rp as rp, obl.bloqueo_pago as bloq,
    inte.razon_soc as tercero, inte.id_mae_ter,
    case when ter.num_doc is null then inte.num_doc else ter.num_doc end as num_doc,
    case when ter.num_doc is null then inte.razon_soc else ter.razon_soc end as tercer,
    obl.id_rp as id_rp, 
    
    nvl(oval.valor_obligacion,0) as vrbruto,
    nvl(oiva.valor_iva,0) as vr_iva,
    nvl(deduce.valor_impuesto,0)+nvl(oacr.valor,0) as vr_imp,
    nvl(cruce.valor_impuesto,0) as cruce,
    nvl(oval.valor_obligacion,0)- nvl(deduce.valor_impuesto,0)-nvl(oacr.valor,0)+nvl(cruce.valor_impuesto,0) as vr_neto,
                    
    (
        case when estado.estado is null
        then 'Activa'
        else estado.estado
        end
    ) as estado,
    obl.observaciones as observa,obl.id_vigencia as vig, obl.ano_fiscal,
    --obl.usuario
    (select max(nombre || ' ' || apellido) from usuario where username = obl.usuario) as usuario
    
    
    from ts_obligacion obl
    
    left join ts_cxp cxp on obl.id_cpx = cxp.id_cxp  
    and obl.id_vigencia = cxp.id_vigencia 
    and obl.ano_fiscal = cxp.ano_fiscal
    
    left join pr_rp_comis rpcom on obl.id_rp =rpcom.id and obl.id_vigencia=rpcom.id_vigencia and obl.ano_fiscal=rpcom.vigencia
    left join pr_rp rp on obl.id_rp=rp.id and obl.id_vigencia=rp.id_vigencia and obl.ano_fiscal=rp.vigencia
    
    left join
    (
        select ter.id_tercero,ter.id_obligacion, ter.secuencia, ter.vigencia, ter.id_vigencia, inter.num_doc,inter.razon_soc
        from ts_obliga_tercero ter
        left join interceros_v inter on inter.id_mae_ter = ter.id_tercero
    )ter on obl.id_obligacion = ter.id_obligacion
    and obl.secuencia = ter.secuencia
    and obl.id_vigencia = ter.id_vigencia
    and obl.ano_fiscal = ter.vigencia
    
    left join interceros_v inte on rp.id_tercero=inte.id_mae_ter or rpcom.id_mae_ter=inte.id_mae_ter
    
    left join 
    (
        select oval.id_obligacion,oval.secuencia,oval.id_vigencia,oval.ano_fiscal,
        sum(oval.valor_obligacion) as valor_obligacion
        from ts_obligacion_val oval group by oval.id_obligacion, oval.secuencia, oval.id_vigencia, oval.ano_fiscal 
    )oval on obl.id_obligacion = oval.id_obligacion
    and obl.secuencia = oval.secuencia
    and obl.ano_fiscal = oval.ano_fiscal
    and obl.id_vigencia = oval.id_vigencia
    
    left join ts_cp clase on obl.id_clase_cxp = clase.id_cp
    
    left join(
        select ded.id_obligacion, ded.secuencia, ded.ano_fiscal, ded.id_vigencia, sum(ded.valor_impuesto) as valor_impuesto
        from ts_deducciones ded
        group by ded.id_obligacion, ded.secuencia, ded.ano_fiscal, ded.id_vigencia
    )deduce on obl.id_obligacion = deduce.id_obligacion
    and obl.secuencia = deduce.secuencia
    and obl.id_vigencia = deduce.id_vigencia
    and obl.ano_fiscal = deduce.ano_fiscal
    
    left join(
        select ded.id_obligacion, ded.secuencia, ded.ano_fiscal, ded.id_vigencia, sum(ded.valor_impuesto) as valor_impuesto
        from ts_deducciones ded
        where ded.id_im = 22
        group by ded.id_obligacion, ded.secuencia, ded.ano_fiscal, ded.id_vigencia
    )cruce on obl.id_obligacion = cruce.id_obligacion
    and obl.secuencia = cruce.secuencia
    and obl.id_vigencia = cruce.id_vigencia
    and obl.ano_fiscal = cruce.ano_fiscal
    
    left join 
    (
        select oacr.id_obligacion,oacr.secuencia,oacr.id_vigencia,oacr.vigencia,sum(oacr.valor) as valor
        from ts_obliga_acreedores oacr group by oacr.id_obligacion, oacr.secuencia, oacr.id_vigencia, oacr.vigencia    
    )oacr on obl.id_obligacion = oacr.id_obligacion
    and obl.secuencia = oacr.secuencia
    and obl.ano_fiscal = oacr.vigencia
    and obl.id_vigencia = oacr.id_vigencia
    
    left join (
        select obl.id_obligacion, obl.secuencia, obl.id_vigencia, obl.ano_fiscal,
        (
            case when count(anulobl.fecha_proceso) > 0
            then 'Anulado'
            else
            (
                case when (count(pag.id_pago_obl)- count(anul.fecha_anul)) > 0
                then 'Pagado'
                else 'Activo'
                end
            )
            end
        ) as estado
        from ts_obligacion obl
        left join ts_pago_obl pag on obl.ano_fiscal = pag.vigencia
        and obl.id_vigencia = pag.id_vigencia
        and pag.id_obligacion = obl.id_obligacion
        and pag.secuencia = obl.secuencia and pag.id_clase_pago is null
        left join ts_emision_pago emi on emi.id_emision_pago = pag.id_emision_pago
            and emi.fecha_proc  <= to_date('$fecha_fin', 'YYYY-MM-DD')
        left join ts_anul_pagos anul on pag.id_pago_obl = anul.id_pago_obl
            and anul.fecha_anul  <= to_date('$fecha_fin', 'YYYY-MM-DD')
        left join ts_anul_obligacion anulobl on anulobl.id_obligacion = obl.id_obligacion 
            and anulobl.secuencia = obl.secuencia and anulobl.id_vigencia=obl.id_vigencia and anulobl.vigencia=obl.ano_fiscal
            and anulobl.fecha_proceso  <= to_date('$fecha_fin', 'YYYY-MM-DD')
        where 
        obl.ano_fiscal = $id_anhos
        group by obl.id_obligacion, obl.secuencia, obl.id_vigencia, obl.ano_fiscal
    )estado on obl.id_obligacion = estado.id_obligacion and obl.secuencia = estado.secuencia
    and obl.id_vigencia = estado.id_vigencia 
    and obl.ano_fiscal = estado.ano_fiscal
    
    left join ts_obligacion_iva oiva 
    on obl.id_obligacion = oiva.id_obligacion 
    and obl.secuencia = oiva.secuencia and obl.ano_fiscal = oiva.ano_fiscal 
    and obl.id_vigencia = oiva.id_vigencia
    
    left join ts_pago_obl pag
    on obl.id_obligacion = pag.id_obligacion 
    and obl.secuencia = pag.secuencia 
    and obl.ano_fiscal = pag.vigencia 
    and obl.id_vigencia = pag.id_vigencia
    and pag.estado is null
    
    left join ts_emision_pago emi
    on emi.id_emision_pago = pag.id_emision_pago
    
    where 
    obl.ano_fiscal = $id_anhos
    --and obl.id_obligacion = 3246
    and obl.fecha_proceso >= to_date('$fecha_ini', 'YYYY-MM-DD')
    and obl.fecha_proceso  <= to_date('$fecha_fin', 'YYYY-MM-DD')
    

)tab0
where 
1 = 1 
$whereTercero
$whereNoRadicado  $whereNoObligacion
$whereNoRp   $whereNoOrdenPago  
                    
$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("[ci_cons_est_cuenta] 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 tab0.no_obligacion, tab0.sec ';
        }

        //manejo de errores
        try {
            /*
             * Variables obligatorias
             */
            $periodo_filtro = $request['id_periodo_filtro'];
            $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 = ' ';
            }
            //Tercero
            if (isset($request['num_doc'])) {
                $whereTercero = " AND tab0.id_mae_ter = " . $request['id_mae_ter'];
            } else {
                $whereTercero = ' ';
            }
            //no_radicado
            if (isset($request['no_radicado'])) {
                $whereNoRadicado = " AND tab0.no_radicado = '" . $request['no_radicado'] . "'";
            } else {
                $whereNoRadicado = ' ';
            }
            //no_obligacion
            if (isset($request['no_obligacion'])) {
                $whereNoObligacion = " AND tab0.no_obligacion = '" . $request['no_obligacion'] . "'";
            } else {
                $whereNoObligacion = ' ';
            }
            //no_rp
            if (isset($request['no_rp'])) {
                $whereNoRp = " AND tab0.no_rp = '" . $request['no_rp'] . "'";
            } else {
                $whereNoRp = ' ';
            }
            //no_orden_pago
            if (isset($request['no_orden_pago'])) {
                $whereNoOrdenPago = " AND tab0.no_orden_pago = '" . $request['no_orden_pago'] . "'";
            } else {
                $whereNoOrdenPago = ' ';
            }

            //obtener el listado de recaudos
            // Filtro de conceptos para pago . and concep.pago_func = 1 - 20140428
            $sql = <<<EOD
SELECT

'TOTALES' as no_radicado,
'Cantidad de Obl. '  as clacta,
count(no_obligacion) as no_obligacion,

SUM(valor_cxp)  as valor_cxp,
SUM(vrbruto)  as vrbruto,
SUM(vr_iva)  as vr_iva,
SUM(vr_imp)  as vr_imp,
SUM(vr_neto)  as vr_neto

FROM (   

select 
tab0.id_pago_obl,
tab0.id_emision_pago,
tab0.fecha_pago,
tab0.nro_orden_pago as no_orden_pago,
tab0.valor_pago,
tab0.no_radicado as no_radicado,
tab0.fecha_cxp,
tab0.valor_cxp,
tab0.vigencia,
tab0.clacta,
tab0.no_obligacion as no_obligacion,  
tab0.sec, 
tab0.fecha, 
tab0.id_rp as no_rp, 
tab0.bloq,
tab0.tercero, 
tab0.id_mae_ter,
tab0.num_doc,
tab0.tercer,
tab0.id_rp, 
tab0.vrbruto,
tab0.vr_iva,
tab0.vr_imp,
tab0.cruce,
tab0.vr_neto,
tab0.estado as estado_txt,
tab0.observa,
tab0.vig,
tab0.ano_fiscal,
tab0.usuario
    
from(

    select distinct 
    pag.id_pago_obl,
    pag.id_emision_pago,
    emi.fecha_proc as fecha_pago,
    pag.nro_orden_pago,
    pag.valor as valor_pago,
    obl.id_cpx as no_radicado,
    cxp.fecha_proceso as fecha_cxp,
    cxp.valor_cxp as valor_cxp,
    decode(obl.id_vigencia,1,'VIG',2,'CXP','RES') as vigencia,clase.descripcion as clacta,
    obl.id_obligacion as no_obligacion, obl.secuencia as sec, 
    obl.fecha_proceso as fecha, 
    obl.id_rp as rp, obl.bloqueo_pago as bloq,
    inte.razon_soc as tercero, inte.id_mae_ter,
    case when ter.num_doc is null then inte.num_doc else ter.num_doc end as num_doc,
    case when ter.num_doc is null then inte.razon_soc else ter.razon_soc end as tercer,
    obl.id_rp as id_rp, 
    
    nvl(oval.valor_obligacion,0) as vrbruto,
    nvl(oiva.valor_iva,0) as vr_iva,
    nvl(deduce.valor_impuesto,0)+nvl(oacr.valor,0) as vr_imp,
    nvl(cruce.valor_impuesto,0) as cruce,
    nvl(oval.valor_obligacion,0)- nvl(deduce.valor_impuesto,0)-nvl(oacr.valor,0)+nvl(cruce.valor_impuesto,0) as vr_neto,
                    
    (
        case when estado.estado is null
        then 'Activa'
        else estado.estado
        end
    ) as estado,
    obl.observaciones as observa,obl.id_vigencia as vig, obl.ano_fiscal,
    --obl.usuario
    (select max(nombre || ' ' || apellido) from usuario where username = obl.usuario) as usuario
    
    
    from ts_obligacion obl
    
    left join ts_cxp cxp on obl.id_cpx = cxp.id_cxp  
    and obl.id_vigencia = cxp.id_vigencia 
    and obl.ano_fiscal = cxp.ano_fiscal
    
    left join pr_rp_comis rpcom on obl.id_rp =rpcom.id and obl.id_vigencia=rpcom.id_vigencia and obl.ano_fiscal=rpcom.vigencia
    left join pr_rp rp on obl.id_rp=rp.id and obl.id_vigencia=rp.id_vigencia and obl.ano_fiscal=rp.vigencia
    
    left join
    (
        select ter.id_tercero,ter.id_obligacion, ter.secuencia, ter.vigencia, ter.id_vigencia, inter.num_doc,inter.razon_soc
        from ts_obliga_tercero ter
        left join interceros_v inter on inter.id_mae_ter = ter.id_tercero
    )ter on obl.id_obligacion = ter.id_obligacion
    and obl.secuencia = ter.secuencia
    and obl.id_vigencia = ter.id_vigencia
    and obl.ano_fiscal = ter.vigencia
    
    left join interceros_v inte on rp.id_tercero=inte.id_mae_ter or rpcom.id_mae_ter=inte.id_mae_ter
    
    left join 
    (
        select oval.id_obligacion,oval.secuencia,oval.id_vigencia,oval.ano_fiscal,
        sum(oval.valor_obligacion) as valor_obligacion
        from ts_obligacion_val oval group by oval.id_obligacion, oval.secuencia, oval.id_vigencia, oval.ano_fiscal 
    )oval on obl.id_obligacion = oval.id_obligacion
    and obl.secuencia = oval.secuencia
    and obl.ano_fiscal = oval.ano_fiscal
    and obl.id_vigencia = oval.id_vigencia
    
    left join ts_cp clase on obl.id_clase_cxp = clase.id_cp
    
    left join(
        select ded.id_obligacion, ded.secuencia, ded.ano_fiscal, ded.id_vigencia, sum(ded.valor_impuesto) as valor_impuesto
        from ts_deducciones ded
        group by ded.id_obligacion, ded.secuencia, ded.ano_fiscal, ded.id_vigencia
    )deduce on obl.id_obligacion = deduce.id_obligacion
    and obl.secuencia = deduce.secuencia
    and obl.id_vigencia = deduce.id_vigencia
    and obl.ano_fiscal = deduce.ano_fiscal
    
    left join(
        select ded.id_obligacion, ded.secuencia, ded.ano_fiscal, ded.id_vigencia, sum(ded.valor_impuesto) as valor_impuesto
        from ts_deducciones ded
        where ded.id_im = 22
        group by ded.id_obligacion, ded.secuencia, ded.ano_fiscal, ded.id_vigencia
    )cruce on obl.id_obligacion = cruce.id_obligacion
    and obl.secuencia = cruce.secuencia
    and obl.id_vigencia = cruce.id_vigencia
    and obl.ano_fiscal = cruce.ano_fiscal
    
    left join 
    (
        select oacr.id_obligacion,oacr.secuencia,oacr.id_vigencia,oacr.vigencia,sum(oacr.valor) as valor
        from ts_obliga_acreedores oacr group by oacr.id_obligacion, oacr.secuencia, oacr.id_vigencia, oacr.vigencia    
    )oacr on obl.id_obligacion = oacr.id_obligacion
    and obl.secuencia = oacr.secuencia
    and obl.ano_fiscal = oacr.vigencia
    and obl.id_vigencia = oacr.id_vigencia
    
    left join (
        select obl.id_obligacion, obl.secuencia, obl.id_vigencia, obl.ano_fiscal,
        (
            case when count(anulobl.fecha_proceso) > 0
            then 'Anulado'
            else
            (
                case when (count(pag.id_pago_obl)- count(anul.fecha_anul)) > 0
                then 'Pagado'
                else 'Activo'
                end
            )
            end
        ) as estado
        from ts_obligacion obl
        left join ts_pago_obl pag on obl.ano_fiscal = pag.vigencia
        and obl.id_vigencia = pag.id_vigencia
        and pag.id_obligacion = obl.id_obligacion
        and pag.secuencia = obl.secuencia and pag.id_clase_pago is null
        left join ts_emision_pago emi on emi.id_emision_pago = pag.id_emision_pago
            and emi.fecha_proc  <= to_date('$fecha_fin', 'YYYY-MM-DD')
        left join ts_anul_pagos anul on pag.id_pago_obl = anul.id_pago_obl
            and anul.fecha_anul  <= to_date('$fecha_fin', 'YYYY-MM-DD')
        left join ts_anul_obligacion anulobl on anulobl.id_obligacion = obl.id_obligacion 
            and anulobl.secuencia = obl.secuencia and anulobl.id_vigencia=obl.id_vigencia and anulobl.vigencia=obl.ano_fiscal
            and anulobl.fecha_proceso  <= to_date('$fecha_fin', 'YYYY-MM-DD')
        where 
        obl.ano_fiscal = $id_anhos
        group by obl.id_obligacion, obl.secuencia, obl.id_vigencia, obl.ano_fiscal
    )estado on obl.id_obligacion = estado.id_obligacion and obl.secuencia = estado.secuencia
    and obl.id_vigencia = estado.id_vigencia 
    and obl.ano_fiscal = estado.ano_fiscal
    
    left join ts_obligacion_iva oiva 
    on obl.id_obligacion = oiva.id_obligacion 
    and obl.secuencia = oiva.secuencia and obl.ano_fiscal = oiva.ano_fiscal 
    and obl.id_vigencia = oiva.id_vigencia
    
    left join ts_pago_obl pag
    on obl.id_obligacion = pag.id_obligacion 
    and obl.secuencia = pag.secuencia 
    and obl.ano_fiscal = pag.vigencia 
    and obl.id_vigencia = pag.id_vigencia
    and pag.estado is null
    
    left join ts_emision_pago emi
    on emi.id_emision_pago = pag.id_emision_pago
    
    where 
    obl.ano_fiscal = $id_anhos
    --and obl.id_obligacion = 3246
    and obl.fecha_proceso >= to_date('$fecha_ini', 'YYYY-MM-DD')
    and obl.fecha_proceso  <= to_date('$fecha_fin', 'YYYY-MM-DD')
    

)tab0
where 
1 = 1 
$whereTercero
$whereNoRadicado  $whereNoObligacion
$whereNoRp   $whereNoOrdenPago  

)

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());
        }
    }

}
