<?php

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

    /**
     * Obtener log especificos
     *
     * @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 cuenta, auxiliar, tercero ';
        }

        //solo imprime log la primera vez de consulta
        if ($rowStart == 0) {
            /*
             * variables por defecto para el registro de log
             */
            $id_tabla = 'null';
            $id_vigencia = 'null';
            $id_cen_op = 'null';

            $id_cia = 'null';
            if (isset($request['id_cia'])) {
                $id_cia = $request['id_cia'];
            }

            //obtener id maestro tabla
            $id_mae_bd = "null";

            //1 - indica operacion de consulta
            $id_ope_bd = 1;

            //id del maestro tercero
            $id_mae_ter = 1;
            if (isset($request['id_username'])) {
                $id_mae_ter = $request['id_username'];
            }
            $usuario = 'admin';
            if (isset($request['username'])) {
                if (!is_null($request['username']) && $request['username'] != '') {
                    $usuario = $request['username'];
                }
            }
            $comando = 'saldos_cuentas_tercero';
//            if (isset($request['comando'])) {
//                $comando = $request['comando'];
//            }
            //construir observacion
            $observacion = "'Se consulto log especifico la funcionalidad: " . $comando . "'";

            $id_punto_venta_log = 'null';
            if (isset($request['punto_venta_log'])) {
                $id_punto_venta_log = $request['punto_venta_log'];
            }

            /*
             * registro de consulta en tabla de log
             */
            $sql = CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion, $id_punto_venta_log);
        }

        /*
         * Manejo de errores
         */
        try {

            /*
             * Variables obligatorias
             */
            $anho = $request['id_vigencia'];
            $mes = $request['id_periodo_contable'] * 1;

            /*
             * Variables opcionales
             */
            //tercero
            if (isset($request['id_mae_ter'])) {
                $whereTercero = " " . $request['id_mae_ter'];
            } else {
                $whereTercero = ' ';
            }


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

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

    select distinct * from (

        SELECT 

        ID_CLASE_CUENTA,
        ID_GRUPO_CUENTA,
        ID_CUENTA_MAYOR,
        ID_CATALOGO,
        ID_AUXILIAR,
        ID_MAE_TER,
        NATURALEZA,
        CUENTA,
        AUXILIAR,
        SUBAUXILIAR,
        TERCERO,
        NOMBRE_CUENTA,
        NOMBRE_TERCERO,
        SALDO_ANTERIOR,
        MVTO_DEBITO,
        MVTO_CREDITO,
        NUEVO_SALDO,
        ID_CIA,
        ID_VIGENCIA,
        ID_PERIODO_CONTABLE
        FROM
        (

          /** INICIA BALANCE */
          /* Clase Cuenta*/


          /* Grupo Cuenta*/


          /* Cuenta Mayor*/


          /* Subcuenta sin terceros SIN AUXILIAR */


          /* Subcuenta con terceros SIN AUXILIAR*/
          SELECT *
          FROM
            (SELECT cla.ID_CLASE_CUENTA,
              gru.ID_GRUPO_CUENTA,
              cue.ID_CUENTA_MAYOR,
              cat.ID_CATALOGO,
              NULL AS ID_AUXILIAR,
              ter.ID_MAE_TER,
              cue.NATURALEZA,
              sal.SUBCUENTA           AS CUENTA,
              NULL                    AS AUXILIAR,
              NULL                    AS SUBAUXILIAR,
              cat.nombre              AS NOMBRE_CUENTA,
              ter.NITOCC              AS TERCERO,
              ter.NOMBRE              AS NOMBRE_TERCERO,
              SUM(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
              SUM(sal.DEBITO)         AS MVTO_DEBITO,
              SUM(sal.CREDITO)        AS MVTO_CREDITO,
              SUM(sal.SALDO_ACTUAL)   AS NUEVO_SALDO,
              /**Llave de la vista*/
              sal.ID_CIA,
              sal.ID_VIGENCIA,
              sal.ID_PERIODO_CONTABLE
            FROM CN_SALDO@CONTABILIDAD.ANM.LOCAL sal
            JOIN CN_CATALOGO@CONTABILIDAD.ANM.LOCAL cat
            ON sal.ID_CIA           = cat.ID_CIA
            AND sal.ID_CATALOGO     = cat.ID_CATALOGO
            AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
            AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
            AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA
            JOIN CN_CUENTA_MAYOR@CONTABILIDAD.ANM.LOCAL cue
            ON sal.ID_CIA           = cue.ID_CIA
            AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
            AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
            AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA
            JOIN CN_GRUPO_CUENTA@CONTABILIDAD.ANM.LOCAL gru
            ON sal.ID_CIA           = gru.ID_CIA
            AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
            AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA
            JOIN CN_CLASE_CUENTA@CONTABILIDAD.ANM.LOCAL cla
            ON sal.ID_CIA           = cla.ID_CIA
            AND sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA
            JOIN CN_MAE_TER@CONTABILIDAD.ANM.LOCAL ter
            ON sal.ID_CIA          = ter.ID_CIA
            AND sal.ID_MAE_TER     = ter.ID_MAE_TER

              where
              sal.id_vigencia = $anho
              and sal.id_periodo_contable = $mes
              and sal.id_cia = 1
              --Filtro Digitos Cuenta

              --Filtro cuenta auxiliar y/0 tercero
              and sal.id_auxiliar is null
              and  ( sal.id_mae_ter = $whereTercero ) 

             having 
             sum(  case sal.id_mae_ter when $whereTercero then 1 else 0 end  ) > 0

            GROUP BY cla.ID_CLASE_CUENTA,
              gru.ID_GRUPO_CUENTA,
              cue.ID_CUENTA_MAYOR,
              cat.ID_CATALOGO,
              cat.nombre,
              ter.ID_MAE_TER,
              cue.NATURALEZA,
              sal.SUBCUENTA,
              ter.NITOCC,
              ter.NOMBRE,
              /**Llave de la vista*/
              sal.ID_CIA,
              sal.ID_VIGENCIA,
              sal.ID_PERIODO_CONTABLE
            )
          UNION

          /* Auxiliares sin terceros*/


          /* Auxiliares con terceros*/
          SELECT *
          FROM
            (SELECT cla.ID_CLASE_CUENTA,
              gru.ID_GRUPO_CUENTA,
              cue.ID_CUENTA_MAYOR,
              cat.ID_CATALOGO,
              aux.ID_AUXILIAR,
              ter.ID_MAE_TER,
              cue.NATURALEZA,
              sal.SUBCUENTA           AS CUENTA,
              aux.COD_AUX             AS AUXILIAR,
              NULL                    AS SUBAUXILIAR,
              aux.nombre              AS NOMBRE_CUENTA,
              ter.NITOCC              AS TERCERO,
              ter.NOMBRE              AS NOMBRE_TERCERO,
              SUM(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
              SUM(sal.DEBITO)         AS MVTO_DEBITO,
              SUM(sal.CREDITO)        AS MVTO_CREDITO,
              SUM(sal.SALDO_ACTUAL)   AS NUEVO_SALDO,
              /**Llave de la vista*/
              sal.ID_CIA,
              sal.ID_VIGENCIA,
              sal.ID_PERIODO_CONTABLE
            FROM CN_SALDO@CONTABILIDAD.ANM.LOCAL sal
            JOIN CN_AUXILIAR@CONTABILIDAD.ANM.LOCAL aux
            ON sal.ID_CIA           = aux.ID_CIA
            AND sal.ID_AUXILIAR     = aux.ID_AUXILIAR
            AND sal.ID_CATALOGO     = aux.ID_CATALOGO
            AND sal.ID_CUENTA_MAYOR = aux.ID_CUENTA_MAYOR
            AND sal.ID_GRUPO_CUENTA = aux.ID_GRUPO_CUENTA
            AND sal.ID_CLASE_CUENTA = aux.ID_CLASE_CUENTA
            JOIN CN_CATALOGO@CONTABILIDAD.ANM.LOCAL cat
            ON sal.ID_CIA           = cat.ID_CIA
            AND sal.ID_CATALOGO     = cat.ID_CATALOGO
            AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
            AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
            AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA
            JOIN CN_CUENTA_MAYOR@CONTABILIDAD.ANM.LOCAL cue
            ON sal.ID_CIA           = cue.ID_CIA
            AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
            AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
            AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA
            JOIN CN_GRUPO_CUENTA@CONTABILIDAD.ANM.LOCAL gru
            ON sal.ID_CIA           = gru.ID_CIA
            AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
            AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA
            JOIN CN_CLASE_CUENTA@CONTABILIDAD.ANM.LOCAL cla
            ON sal.ID_CIA           = cla.ID_CIA
            AND sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA
            JOIN CN_MAE_TER@CONTABILIDAD.ANM.LOCAL ter
            ON sal.ID_CIA      = ter.ID_CIA
            AND sal.ID_MAE_TER = ter.ID_MAE_TER

              where
              sal.id_vigencia = $anho
              and sal.id_periodo_contable = $mes
              and sal.id_cia = 1
              --Filtro Digitos Cuenta

              --Filtro cuenta auxiliar y/0 tercero

              and  ( sal.id_mae_ter = $whereTercero ) 

             having 
             sum(  case sal.id_mae_ter when $whereTercero then 1 else 0 end  ) > 0

            GROUP BY cla.ID_CLASE_CUENTA,
              gru.ID_GRUPO_CUENTA,
              cue.ID_CUENTA_MAYOR,
              cat.ID_CATALOGO,
              aux.nombre,
              aux.ID_AUXILIAR,
              ter.ID_MAE_TER,
              cue.NATURALEZA,
              sal.SUBCUENTA,
              aux.COD_AUX,
              ter.NOMBRE,
              ter.NITOCC,
              /**Llave de la vista*/
              sal.ID_CIA,
              sal.ID_VIGENCIA,
              sal.ID_PERIODO_CONTABLE
            )

          /* NO ESTA EN USO SUB AUXILIARES */    
          

          /* Sub auxiliares con terceros*/
          

          /* Sub auxiliares sin terceros*/
          
            /** TERMINA BALANCE **/
        )

    )
                    
    where nuevo_saldo > 0

)
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 distinct * from (

        SELECT 

        ID_CLASE_CUENTA,
        ID_GRUPO_CUENTA,
        ID_CUENTA_MAYOR,
        ID_CATALOGO,
        ID_AUXILIAR,
        ID_MAE_TER,
        NATURALEZA,
        CUENTA,
        AUXILIAR,
        SUBAUXILIAR,
        TERCERO,
        NOMBRE_CUENTA,
        NOMBRE_TERCERO,
        SALDO_ANTERIOR,
        MVTO_DEBITO,
        MVTO_CREDITO,
        NUEVO_SALDO,
        ID_CIA,
        ID_VIGENCIA,
        ID_PERIODO_CONTABLE
        FROM
        (

          /** INICIA BALANCE */
          /* Clase Cuenta*/


          /* Grupo Cuenta*/


          /* Cuenta Mayor*/


          /* Subcuenta sin terceros SIN AUXILIAR */


          /* Subcuenta con terceros SIN AUXILIAR*/
          SELECT *
          FROM
            (SELECT cla.ID_CLASE_CUENTA,
              gru.ID_GRUPO_CUENTA,
              cue.ID_CUENTA_MAYOR,
              cat.ID_CATALOGO,
              NULL AS ID_AUXILIAR,
              ter.ID_MAE_TER,
              cue.NATURALEZA,
              sal.SUBCUENTA           AS CUENTA,
              NULL                    AS AUXILIAR,
              NULL                    AS SUBAUXILIAR,
              cat.nombre              AS NOMBRE_CUENTA,
              ter.NITOCC              AS TERCERO,
              ter.NOMBRE              AS NOMBRE_TERCERO,
              SUM(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
              SUM(sal.DEBITO)         AS MVTO_DEBITO,
              SUM(sal.CREDITO)        AS MVTO_CREDITO,
              SUM(sal.SALDO_ACTUAL)   AS NUEVO_SALDO,
              /**Llave de la vista*/
              sal.ID_CIA,
              sal.ID_VIGENCIA,
              sal.ID_PERIODO_CONTABLE
            FROM CN_SALDO@CONTABILIDAD.ANM.LOCAL sal
            JOIN CN_CATALOGO@CONTABILIDAD.ANM.LOCAL cat
            ON sal.ID_CIA           = cat.ID_CIA
            AND sal.ID_CATALOGO     = cat.ID_CATALOGO
            AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
            AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
            AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA
            JOIN CN_CUENTA_MAYOR@CONTABILIDAD.ANM.LOCAL cue
            ON sal.ID_CIA           = cue.ID_CIA
            AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
            AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
            AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA
            JOIN CN_GRUPO_CUENTA@CONTABILIDAD.ANM.LOCAL gru
            ON sal.ID_CIA           = gru.ID_CIA
            AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
            AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA
            JOIN CN_CLASE_CUENTA@CONTABILIDAD.ANM.LOCAL cla
            ON sal.ID_CIA           = cla.ID_CIA
            AND sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA
            JOIN CN_MAE_TER@CONTABILIDAD.ANM.LOCAL ter
            ON sal.ID_CIA          = ter.ID_CIA
            AND sal.ID_MAE_TER     = ter.ID_MAE_TER

              where
              sal.id_vigencia = $anho
              and sal.id_periodo_contable = $mes
              and sal.id_cia = 1
              --Filtro Digitos Cuenta

              --Filtro cuenta auxiliar y/0 tercero
              and sal.id_auxiliar is null
              and  ( sal.id_mae_ter = $whereTercero ) 

             having 
             sum(  case sal.id_mae_ter when $whereTercero then 1 else 0 end  ) > 0

            GROUP BY cla.ID_CLASE_CUENTA,
              gru.ID_GRUPO_CUENTA,
              cue.ID_CUENTA_MAYOR,
              cat.ID_CATALOGO,
              cat.nombre,
              ter.ID_MAE_TER,
              cue.NATURALEZA,
              sal.SUBCUENTA,
              ter.NITOCC,
              ter.NOMBRE,
              /**Llave de la vista*/
              sal.ID_CIA,
              sal.ID_VIGENCIA,
              sal.ID_PERIODO_CONTABLE
            )
          UNION

          /* Auxiliares sin terceros*/


          /* Auxiliares con terceros*/
          SELECT *
          FROM
            (SELECT cla.ID_CLASE_CUENTA,
              gru.ID_GRUPO_CUENTA,
              cue.ID_CUENTA_MAYOR,
              cat.ID_CATALOGO,
              aux.ID_AUXILIAR,
              ter.ID_MAE_TER,
              cue.NATURALEZA,
              sal.SUBCUENTA           AS CUENTA,
              aux.COD_AUX             AS AUXILIAR,
              NULL                    AS SUBAUXILIAR,
              aux.nombre              AS NOMBRE_CUENTA,
              ter.NITOCC              AS TERCERO,
              ter.NOMBRE              AS NOMBRE_TERCERO,
              SUM(sal.SALDO_ANTERIOR) AS SALDO_ANTERIOR,
              SUM(sal.DEBITO)         AS MVTO_DEBITO,
              SUM(sal.CREDITO)        AS MVTO_CREDITO,
              SUM(sal.SALDO_ACTUAL)   AS NUEVO_SALDO,
              /**Llave de la vista*/
              sal.ID_CIA,
              sal.ID_VIGENCIA,
              sal.ID_PERIODO_CONTABLE
            FROM CN_SALDO@CONTABILIDAD.ANM.LOCAL sal
            JOIN CN_AUXILIAR@CONTABILIDAD.ANM.LOCAL aux
            ON sal.ID_CIA           = aux.ID_CIA
            AND sal.ID_AUXILIAR     = aux.ID_AUXILIAR
            AND sal.ID_CATALOGO     = aux.ID_CATALOGO
            AND sal.ID_CUENTA_MAYOR = aux.ID_CUENTA_MAYOR
            AND sal.ID_GRUPO_CUENTA = aux.ID_GRUPO_CUENTA
            AND sal.ID_CLASE_CUENTA = aux.ID_CLASE_CUENTA
            JOIN CN_CATALOGO@CONTABILIDAD.ANM.LOCAL cat
            ON sal.ID_CIA           = cat.ID_CIA
            AND sal.ID_CATALOGO     = cat.ID_CATALOGO
            AND sal.ID_CUENTA_MAYOR = cat.ID_CUENTA_MAYOR
            AND sal.ID_GRUPO_CUENTA = cat.ID_GRUPO_CUENTA
            AND sal.ID_CLASE_CUENTA = cat.ID_CLASE_CUENTA
            JOIN CN_CUENTA_MAYOR@CONTABILIDAD.ANM.LOCAL cue
            ON sal.ID_CIA           = cue.ID_CIA
            AND sal.ID_CUENTA_MAYOR = cue.ID_CUENTA_MAYOR
            AND sal.ID_GRUPO_CUENTA = cue.ID_GRUPO_CUENTA
            AND sal.ID_CLASE_CUENTA = cue.ID_CLASE_CUENTA
            JOIN CN_GRUPO_CUENTA@CONTABILIDAD.ANM.LOCAL gru
            ON sal.ID_CIA           = gru.ID_CIA
            AND sal.ID_GRUPO_CUENTA = gru.ID_GRUPO_CUENTA
            AND sal.ID_CLASE_CUENTA = gru.ID_CLASE_CUENTA
            JOIN CN_CLASE_CUENTA@CONTABILIDAD.ANM.LOCAL cla
            ON sal.ID_CIA           = cla.ID_CIA
            AND sal.ID_CLASE_CUENTA = cla.ID_CLASE_CUENTA
            JOIN CN_MAE_TER@CONTABILIDAD.ANM.LOCAL ter
            ON sal.ID_CIA      = ter.ID_CIA
            AND sal.ID_MAE_TER = ter.ID_MAE_TER

              where
              sal.id_vigencia = $anho
              and sal.id_periodo_contable = $mes
              and sal.id_cia = 1
              --Filtro Digitos Cuenta

              --Filtro cuenta auxiliar y/0 tercero

              and  ( sal.id_mae_ter = $whereTercero ) 

             having 
             sum(  case sal.id_mae_ter when $whereTercero then 1 else 0 end  ) > 0

            GROUP BY cla.ID_CLASE_CUENTA,
              gru.ID_GRUPO_CUENTA,
              cue.ID_CUENTA_MAYOR,
              cat.ID_CATALOGO,
              aux.nombre,
              aux.ID_AUXILIAR,
              ter.ID_MAE_TER,
              cue.NATURALEZA,
              sal.SUBCUENTA,
              aux.COD_AUX,
              ter.NOMBRE,
              ter.NITOCC,
              /**Llave de la vista*/
              sal.ID_CIA,
              sal.ID_VIGENCIA,
              sal.ID_PERIODO_CONTABLE
            )

          /* NO ESTA EN USO SUB AUXILIARES */    
          

          /* Sub auxiliares con terceros*/
          

          /* Sub auxiliares sin terceros*/
          
            /** TERMINA BALANCE **/
        )

    )
                    
    where nuevo_saldo > 0                    

    $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("[saldos_cuentas_tercero] 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());
        }
    }

}
