<?php

/**
 * aud_mov_aux_nocorr actions.
 *
 * @package    Sofhouse
 * @subpackage aud_mov_aux_nocorr
 * @author     Software House
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class aud_mov_aux_nocorrActions extends sfActions {

    /**
     * Metodo del servicio list - consulta 
     *
     * @param sfWebRequest $request
     */
    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");
        }
        $this->logMessage("--------------------------------------------------/  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");

        /*
         * Variables globales
         */
        $modulo = sfConfig::get('app_modulo');
        $usuarioERP = sfConfig::get('app_usuarioERP');
        $claveERP = sfConfig::get('app_claveERP');
        $usuarioERPContab = sfConfig::get('app_usuarioERPContab');
        $claveERPContab = sfConfig::get('app_claveERPContab');


        /*
         * Manejo de errores
         */
        try {

            /*
             * 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 cad.fecha_cad   ';
            }



            //solo imprime log la primera vez de consulta
            if ($rowStart == 0) {

                /*
                 * variables por defecto para el registro de log
                 */
                $id_tabla = 'null';

                //validar vigencia
                $id_vigencia = 'null';
                if (isset($request['id_vigencia'])) {
                    $id_vigencia = $request['id_vigencia'];
                }

                //validar centro de operacion
                $id_cen_op = 'null';
                if (isset($request['id_cen_op'])) {
                    $id_cen_op = $request['id_cen_op'];
                }

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

                //id maestro tabla - para consulta informes no es necesario
                $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 = 'sin comando';
                if (isset($request['comando'])) {
                    $comando = $request['comando'];
                }

                /*
                 * construir observacion
                 */
                $informe = 'sin especificar';

                //sentencia sql
                $sql = <<<EOD
select * from CREDENCIAL
where ID_MOD = 6
and comando = '$comando'
EOD;

                //ejecuta y obtiene el resultado del sql
                $resultado = CN_TABLE::executeOCI_SQL_List($sql, $usuarioERP, $claveERP);

                if (count($resultado) > 0) {
                    $informe = $resultado[0]['NOMBRE'];
                }

                //observacion para el log
                $observacion = "'Se consulto informe: " . $informe . " desde la funcionalidad: " . $comando . "'";

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

                //ejecuta el sql
                CN_TABLE::executeSQL($sql);
            }

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


            /*
             * Obtener variables del request
             */
            $id_cia = $request['id_cia'];
            $whereVigencia = ' ';
            if (isset($request['id_vigencia'])) {
                $whereVigencia = ' and cad.id_vigencia = ' . $request['id_vigencia'];
            }
            $wherePeriodo = ' ';
            if (isset($request['id_periodo_contable'])) {
                $wherePeriodo = ' and cad.id_periodo_contable = ' . $request['id_periodo_contable'];
            }
            $whereCenOp = ' ';
            if (isset($request['id_cen_op'])) {
                $whereCenOp = ' and cad.id_cen_op = ' . $request['id_cen_op'];
            }
            $whereDigitos = ' ';
            if (isset($request['digitos'])) {
                $whereDigitos = ' and subc.digitos = ' . $request['digitos'];
            }


            /*
             * sql que trae los resultados
             * por los filtros, para totalizar las filas
             */
            $sql = <<<EOD
select count(*) as count from(
  
SELECT 
subc.digitos as cuenta,
subc.nombre,
aux.cod_aux,
mov.*,
cad.fecha_cad,
cad.id_periodo_contable,
per.nom_periodo,
ter.nitocc,
ter.nombre as nombre_ter,
ter.nitocc || ' ' || ter.nombre as tercero,
aux.nombre as nombre_aux,
aux.cod_aux || ' ' || aux.nombre as auxiliar

FROM (

SELECT * FROM (

SELECT 

subc.digitos,
mov.* 

FROM cn_movimiento_contable mov

left join cn_subc_digitos_aux subc
on mov.id_auxiliar = subc.id_auxiliar 
and mov.id_catalogo = subc.id_catalogo
and mov.id_cuenta_mayor = subc.id_cuenta_mayor
and mov.id_grupo_cuenta = subc.id_grupo_cuenta
and mov.id_clase_cuenta = subc.id_clase_cuenta

where 
mov.id_auxiliar is not null

)

where
digitos is null

)mov

join cn_subc_digitos subc
on mov.id_catalogo = subc.id_catalogo
and mov.id_cuenta_mayor = subc.id_cuenta_mayor
and mov.id_grupo_cuenta = subc.id_grupo_cuenta
and mov.id_clase_cuenta = subc.id_clase_cuenta
and mov.id_cia = subc.id_cia 

join cn_auxiliar aux
on mov.id_cia = aux.id_cia
and mov.id_auxiliar = aux.id_auxiliar

join cn_control_cad cad
on cad.id_cad = mov.id_cad
and cad.id_cia = mov.id_cia
and cad.id_vigencia = mov.id_vigencia
and cad.id_cen_op = mov.id_cen_op

join cn_periodo_contable per
on per.id_periodo_contable = cad.id_periodo_contable

left join cn_mae_ter ter
on ter.id_cia = mov.id_cia
and ter.id_mae_ter = mov.id_mae_ter

where 
cad.id_cia =  $id_cia  
$whereVigencia $wherePeriodo 
$whereCenOp $whereDigitos

$sortBy

)tabla

EOD;


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

            //validar si hay registros
            if ($total_record_count > 0) {

                /*
                 * Obtiene los accesos para un perfil
                 */
                $sql = <<<EOD
SELECT * FROM ( SELECT row_.*, ROWNUM rownum_ FROM (
    
SELECT 
subc.digitos as cuenta,
subc.nombre,
aux.cod_aux,
mov.*,
cad.fecha_cad,
cad.id_periodo_contable,
per.nom_periodo,
ter.nitocc,
ter.nombre as nombre_ter,
ter.nitocc || ' ' || ter.nombre as tercero,
aux.nombre as nombre_aux,
aux.cod_aux || ' ' || aux.nombre as auxiliar

FROM (

SELECT * FROM (

SELECT 

subc.digitos,
mov.* 

FROM cn_movimiento_contable mov

left join cn_subc_digitos_aux subc
on mov.id_auxiliar = subc.id_auxiliar 
and mov.id_catalogo = subc.id_catalogo
and mov.id_cuenta_mayor = subc.id_cuenta_mayor
and mov.id_grupo_cuenta = subc.id_grupo_cuenta
and mov.id_clase_cuenta = subc.id_clase_cuenta

where 
mov.id_auxiliar is not null

)

where
digitos is null

)mov

join cn_subc_digitos subc
on mov.id_catalogo = subc.id_catalogo
and mov.id_cuenta_mayor = subc.id_cuenta_mayor
and mov.id_grupo_cuenta = subc.id_grupo_cuenta
and mov.id_clase_cuenta = subc.id_clase_cuenta
and mov.id_cia = subc.id_cia 

join cn_auxiliar aux
on mov.id_cia = aux.id_cia
and mov.id_auxiliar = aux.id_auxiliar

join cn_control_cad cad
on cad.id_cad = mov.id_cad
and cad.id_cia = mov.id_cia
and cad.id_vigencia = mov.id_vigencia
and cad.id_cen_op = mov.id_cen_op

join cn_periodo_contable per
on per.id_periodo_contable = cad.id_periodo_contable

left join cn_mae_ter ter
on ter.id_cia = mov.id_cia
and ter.id_mae_ter = mov.id_mae_ter
 
where 
cad.id_cia =  $id_cia  
$whereVigencia $wherePeriodo 
$whereCenOp $whereDigitos
    
$sortBy  
            
) row_ WHERE ROWNUM <=  $rowEnd   ) where rownum_ >  $rowStart
EOD;

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


                $this->totalRows = $total_record_count;
                $this->startRow = $rowStart;
                $this->endRow = $rowStart + count($records);
                $this->list_data = $records;
                $this->logMessage("[aud_mov_aux_nocorr] Consulta exitosa.");
            } else {

                $mensaje = "[aud_mov_aux_nocorr] No hay registros de consulta.";
                $this->status = 1;
                $this->totalRows = 0;
                $this->startRow = 0;
                $this->endRow = 0;
                $this->mensajeError = $mensaje;
                $this->list_data = array();
                $this->logMessage($mensaje);
            }
        } catch (Exception $e) {
            $this->status = 1;
            $this->totalRows = 0;
            $this->startRow = 0;
            $this->endRow = 0;
            $this->mensajeError = "[aud_mov_aux_nocorr] ERROR!!!";
            $this->list_data = array();
            $this->logMessage("[aud_mov_aux_nocorr] ERROR!!!");
            $this->logMessage($e->getMessage());
        }
    }

}
