<?php

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

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

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

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


        $cia = $request['id_cia'];
        $cen_op = $request['id_cen_op'];
        $vig_perIni = $request['vig_perIni'];
        $vig_perFin = $request['vig_perFin'];



        if (isset($request['id_clase_cuenta_ini']) && isset($request['id_clase_cuenta_fin'])) {

//            $whereClase = 'and ( id_clase_cuenta = ' . $request['id_clase_cuenta'] . ' or id_clase_cuenta is null ) ';
            $whereClase = 'and ( id_clase_cuenta between ' . $request['id_clase_cuenta_ini'] . ' and ' . $request['id_clase_cuenta_fin'] . ' or id_clase_cuenta is null ) ';
        } else {

//            $whereClase = ' ( id_clase_cuenta is null ) ';
            $whereClase = ' ';
        }

        if (isset($request['id_grupo_cuenta_ini']) && isset($request['id_grupo_cuenta_fin'])) {

            $whereGrupo = 'and ( id_grupo_cuenta between ' . $request['id_grupo_cuenta_ini'] . ' and ' . $request['id_grupo_cuenta_fin'] . ' or id_grupo_cuenta is null ) ';
        } else {

//            $whereGrupo = ' ( id_grupo_cuenta is null ) ';
            $whereGrupo = ' ';
        }

        if (isset($request['id_cuenta_mayor_ini']) && isset($request['id_cuenta_mayor_fin'])) {

            $whereCuenta = 'and  ( id_cuenta_mayor between ' . $request['id_cuenta_mayor_ini'] . ' and ' . $request['id_cuenta_mayor_fin'] . ' or id_cuenta_mayor is null ) ';
        } else {

//            $whereCuenta = ' ( id_cuenta_mayor is null ) ';
            $whereCuenta = ' ';
        }

        if (isset($request['id_catalogo_ini']) && isset($request['id_catalogo_fin'])) {

            $whereCatalogo = 'and  ( id_catalogo between ' . $request['id_catalogo_ini'] . ' and ' . $request['id_catalogo_fin'] . ' or id_catalogo is null ) ';
        } else {

//            $whereCatalogo = ' ( id_catalogo is null ) ';
            $whereCatalogo = ' ';
        }

        if (isset($request['id_auxiliar'])) {

            $whereAuxiliar = 'and  ( id_auxiliar = ' . $request['id_auxiliar'] . ' or id_auxiliar is null ) ';
        } else {

            $whereAuxiliar = ' ';
        }

        //variable para anexar a la consulta, si hay tercero en el filtro
        //para obtener las cuentas superiores
//        $sql_tercero = "";
//
//        //validar tercero
//        if (isset($request['id_mae_ter'])) {
//            $whereTercero = 'and  ( id_mae_ter = ' . $request['id_mae_ter'] . ' ) ';
//
//            //obtener los terceros con o sin auxiliar para el filtro
//
//            $sql = 'select * from (
//                    select distinct
//                        BOTON,
//                        ID_CLASE_CUENTA,
//                        ID_GRUPO_CUENTA,
//                        ID_CUENTA_MAYOR,
//                        ID_CATALOGO,
//                        ID_AUXILIAR,
//                        ID_MAE_TER,
//                        NOMBRE_CUENTA,
//                        CUENTA,
//                        AUXILIAR,
//                        TERCERO,
//                        ID_CIA,
//                        ID_CEN_OP
//                    from (
//                        select *
//                        from CN_RES_ANL_AUX
//                        where
//                            vig_per between ' . $vig_perIni . ' and ' . $vig_perFin . '
//                            and ID_CEN_OP = ' . $cen_op . ' and ID_cia = ' . $cia . '
//                            ' . $whereClase . ' ' . $whereGrupo . ' ' . $whereCuenta . ' ' . $whereCatalogo . '
//                                ' . $whereAuxiliar . ' ' . $whereTercero . '
//                    )
//                )';
//
//            //ejecutar sql
//            $records = CN_TABLE::executeSQL($sql);
//
//            $union = false;
//
//            //validar si hay terceros para el filtro
//            if (count($records) > 0) {
//                foreach ($records as $rec) {
//
//                    if ($union) {
////                        $sql_tercero .= ' union ';
//                    }
//
//                    $sql_tercero .= '
//                        select *
//                        from CN_RES_ANL_AUX
//                        where
//                            vig_per between ' . $vig_perIni . ' and ' . $vig_perFin . '
//                            and ID_CEN_OP = ' . $cen_op . ' and ID_cia = ' . $cia . '
//
//                            and ( id_clase_cuenta = ' . $rec['id_clase_cuenta'] . ' or id_clase_cuenta is null )
//                            and ( id_grupo_cuenta = ' . $rec['id_grupo_cuenta'] . ' or id_grupo_cuenta is null )
//                            and  ( id_cuenta_mayor = ' . $rec['id_cuenta_mayor'] . ' or id_cuenta_mayor is null )
//                            and  ( id_catalogo = ' . $rec['id_catalogo'] . ' or id_catalogo is null )
//
//                            and  ( id_auxiliar is null  )
//                            and ( id_mae_ter is null ) 
//                            
//                    union 
//
//                    ';
//                }
//                $union = true;
//            }
//
////            $whereTercero = 'and  ( id_mae_ter = ' . $request['id_mae_ter'] . ' or id_mae_ter is null ) '; 20110805 modificacion
//        } else {
//
//            $whereTercero = ' ';
//        }

        /*
         * Obtener sql de vista
         */
        $sql_filtros = $this->consultaSQL($request);
        //sentencia sql
        $sql = <<<EOD
select count(*) as count from (
    select distinct 
            lib.BOTON,
            lib.ID_CLASE_CUENTA,
            lib.ID_GRUPO_CUENTA,
            lib.ID_CUENTA_MAYOR,
            lib.ID_CATALOGO,
            lib.ID_AUXILIAR,
            lib.ID_MAE_TER,
            lib.NOMBRE_CUENTA,
            lib.CUENTA,
            lib.AUXILIAR,
            lib.TERCERO,
            lib.ID_CIA,
            lib.ID_CEN_OP from (
        $sql_filtros
    )lib
) 
EOD;

        //ejecuta el sql y se obtiene las filas de la consulta
        $total_record_count = CN_TABLE::executeSQL($sql);
        $total_record_count = $total_record_count[0]['count'];


        /*
         * Obtiene las vigencias/periodo que se encuentre en la tabla de saldos
         */
        //sentencia sql
        $sql = <<<EOD
SELECT * FROM ( SELECT row_.*, ROWNUM rownum_ FROM (
    select distinct 
            lib.BOTON,
            lib.ID_CLASE_CUENTA,
            lib.ID_GRUPO_CUENTA,
            lib.ID_CUENTA_MAYOR,
            lib.ID_CATALOGO,
            lib.ID_AUXILIAR,
            lib.ID_MAE_TER,
            lib.NOMBRE_CUENTA,
            lib.CUENTA,
            lib.AUXILIAR,
            lib.TERCERO,
            lib.ID_CIA,
            lib.ID_CEN_OP from (
        $sql_filtros
    )
    lib
    ORDER BY
    lib.CUENTA ASC,
      NVL(lib.AUXILIAR,'000') ASC,
       NVL(lib.TERCERO,'0000000000') ASC
) row_ WHERE ROWNUM <= $rowEnd ) where rownum_ > $rowStart 
EOD;

        //Ejecuta sql
        $records = CN_TABLE::executeSQL($sql);

        $this->list_data = $records;
        //totales de filas y de consulta
        $this->logMessage('record_count = ' . count($records));
        $this->logMessage('total_record_count = ' . $total_record_count);
        $this->totalRows = $total_record_count;
        $this->startRow = $request['_startRow'];
        $this->endRow = $this->startRow + count($records);
    }

    /**
     * Metodo de construccion SQL para filtros de digitos de cuenta
     *
     * @param sfWebRequest $request
     * @return type 
     */
    public function consultaSQL(sfWebRequest $request) {


        /*
         * Tomar variables del request
         */

        $cia = $request['id_cia'];
        $cen_op = $request['id_cen_op'];
        $vig_perIni = $request['vig_perIni'];
        $vig_perFin = $request['vig_perFin'];

        /*
         * construccion de sql para variables  de cuentas
         */
        $whereClase = ' ';
        $whereGrupo = ' ';
        $whereCuenta = ' ';
        $whereCatalogo = ' ';
        //and sal.subcuenta between '411003' and '481590' 
        //and sal.subcuenta between RPAD('4',6,'0') and RPAD('4',6,'9')
        if (isset($request['subc_ini']) && isset($request['subc_fin'])) {

            $cant_ini = strlen($request['subc_ini']);
            $cant_fin = strlen($request['subc_fin']);
            $this->logMessage("Cant subc_ini: " . $cant_ini . " - Cant subc_fin: " . $cant_fin);

            //and cla.DIGITO between 4  and 5 
            //clase
            $whereClase = "and cla.DIGITO between RPAD('" . substr($request['subc_ini'], 0, 1) . "',1,'0') and RPAD('" . substr($request['subc_fin'], 0, 1) . "',1,'9') ";

            //grupo            
            $whereGrupo = "and cla.DIGITO || gru.DIGITO between RPAD('" . substr($request['subc_ini'], 0, 2) . "',2,'0') and RPAD('" . substr($request['subc_fin'], 0, 2) . "',2,'9') ";

            //cuenta            
            $whereCuenta = "and cla.DIGITO || gru.DIGITO ||cue.DIGITOS between RPAD('" . substr($request['subc_ini'], 0, 4) . "',4,'0') and RPAD('" . substr($request['subc_fin'], 0, 4) . "',4,'9') ";

            //catalogo            
            $whereCatalogo = "and cla.DIGITO || gru.DIGITO ||cue.DIGITOS ||cat.DIGITOS between RPAD('" . substr($request['subc_ini'], 0, 6) . "',6,'0') and RPAD('" . substr($request['subc_fin'], 0, 6) . "',6,'9') ";
        }

        //Auxiliar 
        if (isset($request['id_auxiliar'])) {
            if (isset($request['id_mae_ter'])) {
                $whereAuxiliar = 'and  ( mov.id_auxiliar = ' . $request['id_auxiliar'] . ' ) ';
            } else {
                $whereAuxiliar = 'and  ( mov.id_auxiliar = ' . $request['id_auxiliar'] . ' ) ';
            }
        } else {
            $whereAuxiliar = ' ';
        }

        //Tercero
        if (isset($request['id_mae_ter'])) {
            if (isset($request['id_auxiliar'])) {
                $whereTercero = 'and  ( mov.id_mae_ter = ' . $request['id_mae_ter'] . ' or mov.id_mae_ter is null ) ';
            } else {
                $whereTercero = 'and  ( mov.id_mae_ter = ' . $request['id_mae_ter'] . ' ) ';
            }
//            $comodinTercero = ' case mov.id_mae_ter when ' . $request['id_mae_ter'] . ' then 1 else 0 end ';
        } else {
            $whereTercero = ' ';
//            $comodinTercero = 1;
        }

        /*
         * sql que trae el balance
         * por los filtros, para totalizar las filas
         */
        //sentencia sql
        $sql = <<<EOD
select 
    "BOTON",
    "ID_CLASE_CUENTA",
    "ID_GRUPO_CUENTA",
    "ID_CUENTA_MAYOR",
    "ID_CATALOGO",
    "ID_AUXILIAR",
    "ID_MAE_TER",
    "NOMBRE_CUENTA",
    "CUENTA",
    "AUXILIAR",
    "TERCERO",
    "ID_CIA",
    "ID_CEN_OP",
    "VIG_PER"
  FROM
    (
    
    /*clases con movimiento*/
    SELECT 'false' AS BOTON,
      mov.ID_CLASE_CUENTA,
      NULL       AS ID_GRUPO_CUENTA,
      NULL       AS ID_CUENTA_MAYOR,
      NULL       AS ID_CATALOGO,
      NULL       AS ID_AUXILIAR,
      NULL       AS ID_MAE_TER,
      cla.NOMBRE AS NOMBRE_CUENTA,
      cla.DIGITO AS CUENTA,
      NULL       AS AUXILIAR,
      NULL       AS TERCERO,
      /*saldos*/
      /*llave de la vista*/
      mov.id_cia,
      mov.ID_CEN_OP,
      mov.ID_VIGENCIA
      || substr( '00'
      || mov.id_periodo_contable , -2,2 ) as vig_per
    FROM CN_MOVIMIENTO_VIGPER mov
    JOIN CN_CLASE_CUENTA cla
    on mov.id_cia          =cla.id_cia
    AND mov.ID_CLASE_CUENTA=cla.ID_CLASE_CUENTA
    
    where
    mov.vig_per between $vig_perIni and $vig_perFin
    and mov.ID_CEN_OP = $cen_op and mov.ID_cia = $cia
    --Filtro Digitos Cuenta  
    $whereClase
    $whereTercero
                            
    UNION
    
    /*grupo cuenta con movimiento*/
    SELECT 'false' AS BOTON,
      mov.ID_CLASE_CUENTA,
      mov.ID_GRUPO_CUENTA,
      NULL       AS ID_CUENTA_MAYOR,
      NULL       AS ID_CATALOGO,
      NULL       AS ID_AUXILIAR,
      NULL       AS ID_MAE_TER,
      gru.NOMBRE AS NOMBRE_CUENTA,
      cla.DIGITO
      ||gru.DIGITO AS CUENTA,
      NULL         AS AUXILIAR,
      NULL         AS TERCERO,
      /*llave de la vista*/
      mov.ID_CIA,
      mov.ID_CEN_OP,
      mov.ID_VIGENCIA
      || SUBSTR( '00'
      || mov.ID_PERIODO_CONTABLE , -2,2 ) AS VIG_PER
    FROM CN_MOVIMIENTO_VIGPER mov
    JOIN CN_GRUPO_CUENTA gru
    ON mov.ID_CIA           = gru.ID_CIA
    AND mov.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA
    JOIN CN_CLASE_CUENTA cla
    ON mov.ID_CIA           = cla.ID_CIA
    AND mov.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA
    
    where
    mov.vig_per between $vig_perIni and $vig_perFin
    and mov.ID_CEN_OP = $cen_op and mov.ID_cia = $cia
    --Filtro Digitos Cuenta
    $whereGrupo
    $whereTercero
    
    UNION
    
    /*cuentas mayores con movimiento*/
    SELECT  'false' AS BOTON,
      mov.ID_CLASE_CUENTA,
      mov.ID_GRUPO_CUENTA,
      mov.ID_CUENTA_MAYOR,
      NULL ID_CATALOGO,
      NULL       AS ID_AUXILIAR,
      NULL       AS ID_MAE_TER,
      cue.NOMBRE AS NOMBRE_CUENTA,
      cla.DIGITO
      ||gru.DIGITO
      ||cue.DIGITOS AS CUENTA,
      NULL          AS AUXILIAR,
      NULL          AS TERCERO,
      /*llave de la vista*/
      mov.ID_CIA,
      mov.ID_CEN_OP,
      mov.ID_VIGENCIA
      || SUBSTR( '00'
      || mov.ID_PERIODO_CONTABLE , -2,2 ) AS VIG_PER
    FROM CN_MOVIMIENTO_VIGPER mov
    JOIN CN_CUENTA_MAYOR cue
    ON mov.ID_CIA           = cue.ID_CIA
    AND mov.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA
    JOIN CN_GRUPO_CUENTA gru
    ON mov.ID_CIA           = gru.ID_CIA
    AND mov.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA
    JOIN CN_CLASE_CUENTA cla
    ON mov.ID_CIA           = cla.ID_CIA
    AND mov.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA
    
    where
    mov.vig_per between $vig_perIni and $vig_perFin
    and mov.ID_CEN_OP = $cen_op and mov.ID_cia = $cia
    --Filtro Digitos Cuenta
    $whereCuenta
    $whereTercero
    
    UNION
    
    /*catalogo con movimiento sin auxiliar sin tercero*/
    SELECT  'true' AS BOTON,
      mov.ID_CLASE_CUENTA,
      mov.ID_GRUPO_CUENTA,
      mov.ID_CUENTA_MAYOR,
      mov.ID_CATALOGO,
      NULL       AS ID_AUXILIAR,
      NULL       AS ID_MAE_TER,
      cat.NOMBRE AS NOMBRE_CUENTA,
      cla.DIGITO
      ||gru.DIGITO
      ||cue.DIGITOS
      ||cat.DIGITOS AS CUENTA,
      NULL          AS AUXILIAR,
      NULL          AS TERCERO,
      /*llave de la vista*/
      mov.ID_CIA,
      mov.ID_CEN_OP,
      mov.ID_VIGENCIA
      || SUBSTR( '00'
      || mov.ID_PERIODO_CONTABLE , -2,2 ) AS VIG_PER
    FROM CN_MOVIMIENTO_VIGPER mov
    JOIN CN_CATALOGO cat
    ON mov.ID_CIA           = cat.ID_CIA
    AND mov.ID_CATALOGO     = cat.ID_CATALOGO
    AND mov.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA
    JOIN CN_CUENTA_MAYOR cue
    ON mov.ID_CIA           = cue.ID_CIA
    AND mov.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA
    JOIN CN_GRUPO_CUENTA gru
    ON mov.ID_CIA           = gru.ID_CIA
    AND mov.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA
    JOIN CN_CLASE_CUENTA cla
    ON mov.ID_CIA           = cla.ID_CIA
    AND mov.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA

    where
    mov.vig_per between $vig_perIni and $vig_perFin
    and mov.ID_CEN_OP = $cen_op and mov.ID_cia = $cia  
    --Filtro Digitos Cuenta
    $whereCatalogo  
    $whereTercero

    and mov.ID_AUXILIAR  IS NULL
    and mov.id_mae_ter     is null
    
    UNION
    
    /*catalogo con movimiento con auxiliar*/
    SELECT  'false' AS BOTON,
      mov.ID_CLASE_CUENTA,
      mov.ID_GRUPO_CUENTA,
      mov.ID_CUENTA_MAYOR,
      mov.ID_CATALOGO,
      NULL       AS ID_AUXILIAR,
      NULL       AS ID_MAE_TER,
      cat.NOMBRE AS NOMBRE_CUENTA,
      cla.DIGITO
      ||gru.DIGITO
      ||cue.DIGITOS
      ||cat.DIGITOS AS CUENTA,
      NULL          AS AUXILIAR,
      NULL          AS TERCERO,
      /*llave de la vista*/
      mov.ID_CIA,
      mov.ID_CEN_OP,
      mov.ID_VIGENCIA
      || SUBSTR( '00'
      || mov.ID_PERIODO_CONTABLE , -2,2 ) AS VIG_PER
    FROM CN_MOVIMIENTO_VIGPER mov
    JOIN CN_AUXILIAR aux
    ON mov.ID_AUXILIAR      = aux.ID_AUXILIAR
    AND mov.ID_CATALOGO     = aux.ID_CATALOGO
    AND mov.ID_CUENTA_MAYOR = aux.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = aux.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = aux.ID_CLASE_CUENTA
    JOIN CN_CATALOGO cat
    ON mov.ID_CIA           = cat.ID_CIA
    AND mov.ID_CATALOGO     = cat.ID_CATALOGO
    AND mov.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA
    JOIN CN_CUENTA_MAYOR cue
    ON mov.ID_CIA           = cue.ID_CIA
    AND mov.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA
    JOIN CN_GRUPO_CUENTA gru
    ON mov.ID_CIA           = gru.ID_CIA
    AND mov.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA
    JOIN CN_CLASE_CUENTA cla
    ON mov.ID_CIA           = cla.ID_CIA
    AND mov.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA
        
    where
    mov.vig_per between $vig_perIni and $vig_perFin
    and mov.ID_CEN_OP = $cen_op and mov.ID_cia = $cia
    --Filtro Digitos Cuenta
    $whereCatalogo
    $whereAuxiliar
    $whereTercero
    
    UNION
    
    /*catalogo con movimiento con tercer*/
    SELECT  'false' AS BOTON,
      mov.ID_CLASE_CUENTA,
      mov.ID_GRUPO_CUENTA,
      mov.ID_CUENTA_MAYOR,
      mov.ID_CATALOGO,
      NULL       AS ID_AUXILIAR,
      NULL       AS ID_MAE_TER,
      cat.NOMBRE AS NOMBRE_CUENTA,
      cla.DIGITO
      ||gru.DIGITO
      ||cue.DIGITOS
      ||cat.DIGITOS AS CUENTA,
      NULL          AS AUXILIAR,
      NULL          AS TERCERO,
      /*llave de la vista*/
      mov.ID_CIA,
      mov.ID_CEN_OP,
      mov.ID_VIGENCIA
      || SUBSTR( '00'
      || mov.ID_PERIODO_CONTABLE , -2,2 ) AS VIG_PER
    FROM CN_MOVIMIENTO_VIGPER mov
    JOIN CN_MAE_TER ter
    ON mov.ID_CIA      = ter.ID_CIA
    AND mov.ID_MAE_TER = ter.ID_MAE_TER
    JOIN CN_CATALOGO cat
    ON mov.ID_CIA           = cat.ID_CIA
    AND mov.ID_CATALOGO     = cat.ID_CATALOGO
    AND mov.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA
    JOIN CN_CUENTA_MAYOR cue
    ON mov.ID_CIA           = cue.ID_CIA
    AND mov.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA
    JOIN CN_GRUPO_CUENTA gru
    ON mov.ID_CIA           = gru.ID_CIA
    AND mov.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA
    JOIN CN_CLASE_CUENTA cla
    ON mov.ID_CIA           = cla.ID_CIA
    and mov.id_clase_cuenta = cla.id_clase_cuenta
    
    where
    mov.vig_per between $vig_perIni and $vig_perFin
    and mov.ID_CEN_OP = $cen_op and mov.ID_cia = $cia
    --Filtro Digitos Cuenta
    $whereCatalogo
    $whereTercero
    
    
    UNION
    
    /*catalogo con movimiento con auxiliar con tercer*/
    SELECT  'false' AS BOTON,
      mov.ID_CLASE_CUENTA,
      mov.ID_GRUPO_CUENTA,
      mov.ID_CUENTA_MAYOR,
      mov.ID_CATALOGO,
      NULL       AS ID_AUXILIAR,
      NULL       AS ID_MAE_TER,
      cat.NOMBRE AS NOMBRE_CUENTA,
      cla.DIGITO
      ||gru.DIGITO
      ||cue.DIGITOS
      ||cat.DIGITOS AS CUENTA,
      NULL          AS AUXILIAR,
      NULL          AS TERCERO,
      /*llave de la vista*/
      mov.ID_CIA,
      mov.ID_CEN_OP,
      mov.ID_VIGENCIA
      || SUBSTR( '00'
      || mov.ID_PERIODO_CONTABLE , -2,2 ) AS VIG_PER
    FROM CN_MOVIMIENTO_VIGPER mov
    JOIN CN_MAE_TER ter
    ON mov.ID_CIA      = ter.ID_CIA
    AND mov.ID_MAE_TER = ter.ID_MAE_TER
    JOIN CN_AUXILIAR aux
    ON mov.ID_AUXILIAR      = aux.ID_AUXILIAR
    AND mov.ID_CATALOGO     = aux.ID_CATALOGO
    AND mov.ID_CUENTA_MAYOR = aux.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = aux.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = aux.ID_CLASE_CUENTA
    JOIN CN_CATALOGO cat
    ON mov.ID_CIA           = cat.ID_CIA
    AND mov.ID_CATALOGO     = cat.ID_CATALOGO
    AND mov.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA
    JOIN CN_CUENTA_MAYOR cue
    ON mov.ID_CIA           = cue.ID_CIA
    AND mov.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA
    JOIN CN_GRUPO_CUENTA gru
    ON mov.ID_CIA           = gru.ID_CIA
    AND mov.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA
    JOIN CN_CLASE_CUENTA cla
    on mov.id_cia           = cla.id_cia
    AND mov.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA
    
    where
    mov.vig_per between $vig_perIni and $vig_perFin
    and mov.ID_CEN_OP = $cen_op and mov.ID_cia = $cia
    --Filtro Digitos Cuenta
    $whereCatalogo
    $whereAuxiliar
    $whereTercero
    
    
    UNION
    
    /*Auxiliares con movimiento sin tercero*/
    SELECT  'true' AS BOTON,
      mov.ID_CLASE_CUENTA,
      mov.ID_GRUPO_CUENTA,
      mov.ID_CUENTA_MAYOR,
      mov.ID_CATALOGO,
      mov.ID_AUXILIAR,
      NULL       AS ID_MAE_TER,
      aux.NOMBRE AS NOMBRE_CUENTA,
      cla.DIGITO
      ||gru.DIGITO
      ||cue.DIGITOS
      ||cat.DIGITOS AS CUENTA,
      aux.COD_AUX   AS AUXILIAR,
      NULL          AS TERCERO,
      /*llave de la vista*/
      mov.ID_CIA,
      mov.ID_CEN_OP,
      mov.ID_VIGENCIA
      || SUBSTR( '00'
      || mov.ID_PERIODO_CONTABLE , -2,2 ) AS VIG_PER
    FROM CN_MOVIMIENTO_VIGPER mov
    JOIN CN_AUXILIAR aux
    ON mov.ID_AUXILIAR      = aux.ID_AUXILIAR
    AND mov.ID_CATALOGO     = aux.ID_CATALOGO
    AND mov.ID_CUENTA_MAYOR = aux.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = aux.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = aux.ID_CLASE_CUENTA
    JOIN CN_CATALOGO cat
    ON mov.ID_CIA           = cat.ID_CIA
    AND mov.ID_CATALOGO     = cat.ID_CATALOGO
    AND mov.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA
    JOIN CN_CUENTA_MAYOR cue
    ON mov.ID_CIA           = cue.ID_CIA
    AND mov.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA
    JOIN CN_GRUPO_CUENTA gru
    ON mov.ID_CIA           = gru.ID_CIA
    AND mov.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA
    JOIN CN_CLASE_CUENTA cla
    ON mov.ID_CIA           = cla.ID_CIA
    AND mov.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA
    
    where
    mov.vig_per between $vig_perIni and $vig_perFin
    and mov.ID_CEN_OP = $cen_op and mov.ID_cia = $cia
    --Filtro Digitos Cuenta
    $whereCatalogo
    $whereAuxiliar
    $whereTercero
    
    --and mov.ID_MAE_TER   IS NULL
    
    union
    
    /*Terceros con movimiento sin auxiliar*/
    SELECT  'true' AS BOTON,
      mov.ID_CLASE_CUENTA,
      mov.ID_GRUPO_CUENTA,
      mov.ID_CUENTA_MAYOR,
      mov.ID_CATALOGO,
      NULL AS ID_AUXILIAR,
      mov.ID_MAE_TER,
      ter.NOMBRE AS NOMBRE_CUENTA,
      cla.DIGITO
      ||gru.DIGITO
      ||cue.DIGITOS
      ||cat.DIGITOS AS CUENTA,
      NULL          AS AUXILIAR,
      ter.NITOCC    AS TERCERO,
      /*llave de la vista*/
      mov.ID_CIA,
      mov.ID_CEN_OP,
      mov.ID_VIGENCIA
      || SUBSTR( '00'
      || mov.ID_PERIODO_CONTABLE , -2,2 ) AS VIG_PER
    FROM CN_MOVIMIENTO_VIGPER mov
    JOIN CN_MAE_TER ter
    ON mov.ID_CIA      = ter.ID_CIA
    AND mov.ID_MAE_TER = ter.ID_MAE_TER
    JOIN CN_CATALOGO cat
    ON mov.ID_CIA           = cat.ID_CIA
    AND mov.ID_CATALOGO     = cat.ID_CATALOGO
    AND mov.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA
    JOIN CN_CUENTA_MAYOR cue
    ON mov.ID_CIA           = cue.ID_CIA
    AND mov.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA
    JOIN CN_GRUPO_CUENTA gru
    ON mov.ID_CIA           = gru.ID_CIA
    AND mov.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA
    JOIN CN_CLASE_CUENTA cla
    ON mov.ID_CIA           = cla.ID_CIA
    AND mov.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA
    
    where
    mov.vig_per between $vig_perIni and $vig_perFin
    and mov.ID_CEN_OP = $cen_op and mov.ID_cia = $cia
    --Filtro Digitos Cuenta
    $whereCatalogo
    $whereTercero
    
    and mov.id_auxiliar  is null
    
    UNION
    
    /*Auxiliares y terceros con movimiento*/
    SELECT  'true' AS BOTON,
      mov.ID_CLASE_CUENTA,
      mov.ID_GRUPO_CUENTA,
      mov.ID_CUENTA_MAYOR,
      mov.ID_CATALOGO,
      mov.ID_AUXILIAR,
      mov.ID_MAE_TER,
      aux.NOMBRE
      || ' - '
      || ter.NOMBRE AS NOMBRE_CUENTA,
      cla.DIGITO
      ||gru.DIGITO
      ||cue.DIGITOS
      ||cat.DIGITOS AS CUENTA,
      aux.COD_AUX   AS AUXILIAR,
      ter.NITOCC    AS TERCERO,
      /*llave de la vista*/
      mov.ID_CIA,
      mov.ID_CEN_OP,
      mov.ID_VIGENCIA
      || SUBSTR( '00'
      || mov.ID_PERIODO_CONTABLE , -2,2 ) AS VIG_PER
    FROM CN_MOVIMIENTO_VIGPER mov
    JOIN CN_MAE_TER ter
    ON mov.ID_CIA      = ter.ID_CIA
    AND mov.ID_MAE_TER = ter.ID_MAE_TER
    JOIN CN_AUXILIAR aux
    ON mov.ID_AUXILIAR      = aux.ID_AUXILIAR
    AND mov.ID_CATALOGO     = aux.ID_CATALOGO
    AND mov.ID_CUENTA_MAYOR = aux.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = aux.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = aux.ID_CLASE_CUENTA
    JOIN CN_CATALOGO cat
    ON mov.ID_CIA           = cat.ID_CIA
    AND mov.ID_CATALOGO     = cat.ID_CATALOGO
    AND mov.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA
    JOIN CN_CUENTA_MAYOR cue
    ON mov.ID_CIA           = cue.ID_CIA
    AND mov.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
    AND mov.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA
    JOIN CN_GRUPO_CUENTA gru
    ON mov.ID_CIA           = gru.ID_CIA
    AND mov.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
    AND mov.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA
    JOIN CN_CLASE_CUENTA cla
    ON mov.ID_CIA           = cla.ID_CIA
    AND mov.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA
    
    where
    mov.vig_per between $vig_perIni and $vig_perFin
    and mov.ID_CEN_OP = $cen_op and mov.ID_cia = $cia
    --Filtro Digitos Cuenta
    $whereCatalogo
    $whereAuxiliar
    $whereTercero
    
)   
EOD;

        return $sql;
    }

}
