<?php

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

    // Validate
    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Add
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateAdd(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Update
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateUpdate(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Remove
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateRemove(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Acciones anteriores a la original
     * 
     * return sfWebRequest Changed Request with additional parameters.
     * 
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest 
     */
    protected function preprocessRequest($Action, sfWebRequest $request) {

        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a preprocessRequest");

        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {
            
        }

        //accion update
        if ($Action == "UPDATE") {
            
        }

        //accion remove
        if ($Action == "REMOVE") {
            
        }

        return $request;
    }

    /**
     * Acciones posteriores a la original
     * 
     * return sfWebRequest Changed Request with additional parameters.
     * 
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest 
     */
    protected function postprocessRequest($Action, sfWebRequest $request, $list_data_post) {

        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a postprocessRequest - " . $list_data_post);

        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {
            
        }

        //accion update
        if ($Action == "UPDATE") {
            
        }

        //accion remove
        if ($Action == "REMOVE") {
            
        }

        return $request;
    }

    /**
     * Metodo list de accesos
     *
     * @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");

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

            /*
             * variables de filtro
             */

            $whereCaja = ' ';
            if (isset($request['id_caja'])) {
                $whereCaja = " AND tab0.id_caja = '" . $request['id_caja'] . "' ";
            }
            $wherePuntoVenta = ' ';
            if (isset($request['id_punto_venta'])) {
                $wherePuntoVenta = " AND tab0.id_punto_venta= '" . $request['id_punto_venta'] . "' ";
            }
            $whereSesion = ' ';
            if (isset($request['sesion'])) {
                $whereSesion = " AND tab0.sesion= '" . $request['sesion'] . "' ";
            }
            $whereEstado = ' ';
            if (isset($request['estado'])) {
                if ($request['estado'] != 'false') {
                    if ($request['estado'] == 'true') {
                        $request['estado'] = 1;
                    }
                    $whereEstado = " AND tab0.estado= '" . $request['estado'] . "' ";
                }
            }
            $whereFechaEstado = ' ';
            if (isset($request['fecha_ini']) && isset($request['fecha_fin'])) {
                $whereFechaEstado = " AND trunc(tab0.fecha_estado) between to_date('" . $request['fecha_ini'] . "','yyyy-mm-dd') and to_date('" . $request['fecha_fin'] . "','yyyy-mm-dd')";
            }

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

            //id de companhia
            $id_cia = 'null';
            if (isset($request['id_cia'])) {
                $id_cia = $request['id_cia'];
            }

            //1 - indica operacion de consultar
            //2 - indica operacion de actualizar
            //3 - indica operacion de adicionar
            //4 - indica operacion de eliminar
            //5 - indica operacion de anular
            $id_ope_bd = 1;

            //obtener id maestro tabla
            $id_mae_bd = CN_TABLE::consultarIdTablaBD('ca_usuario');

            //id del usuario
            $id_usuario = 'null';
            if (isset($request['id_usuario_log'])) {
                $id_usuario = $request['id_usuario_log'];
            }
            //id del tercero del usuario
            $id_tercero = 'null';
            if (isset($request['id_tercero_log'])) {
                $id_tercero = $request['id_tercero_log'];
            }
            //comando de funcionalidad
            $cod_func = 'sin comando';
            if (isset($request['cod_func'])) {
                $cod_func = $request['cod_func'];
            }

            //construir observacion
            $observacion = "'Se consulto reimpresion Apertura / Cierre";

            /*
             * registro de consulta en tabla de log
             */
            //$sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_usuario, $cod_func, $observacion);

            /*
             * sql que trae los resultados
             * por los filtros, para totalizar las filas
             * estado caja para conocer fechas de cierre - 20160830
             */
            $sql = <<<EOD
select count(*) as count from(

SELECT table1.*,  
(
    SELECT count(id_factura) 
    FROM ca_factura_pos 
    WHERE estado=1 AND id_caja=table1.id_caja AND sec_factura BETWEEN table1.factura_inicial AND table1.factura_final
    and trunc(fecha_facturacion) between (select trunc(est.fecha_estado) from ca_estado_caja est where est.id_estado_caja = (
     select id_estado_caja 
            from ca_estado_caja 
            where sesion = (select sesion from ca_estado_caja where id_estado_caja = table1.id_estado_caja)
            and id_punto_venta = (select id_punto_venta from ca_estado_caja where id_estado_caja = table1.id_estado_caja)
            and id_caja = (select id_caja from ca_estado_caja where id_estado_caja = table1.id_estado_caja)
            and estado = 1    
   ))
    and (select trunc(est.fecha_estado) from ca_estado_caja est where est.id_estado_caja = table1.id_estado_caja)
)AS transacciones_efectivas,

(
    SELECT count(id_factura) 
    FROM ca_factura_pos 
    WHERE  id_caja=table1.id_caja AND sec_factura BETWEEN table1.factura_inicial AND table1.factura_final
    and trunc(fecha_facturacion) between (select trunc(est.fecha_estado) from ca_estado_caja est where est.id_estado_caja = (
     select id_estado_caja 
            from ca_estado_caja 
            where sesion = (select sesion from ca_estado_caja where id_estado_caja = table1.id_estado_caja)
            and id_punto_venta = (select id_punto_venta from ca_estado_caja where id_estado_caja = table1.id_estado_caja)
            and id_caja = (select id_caja from ca_estado_caja where id_estado_caja = table1.id_estado_caja)
            and estado = 1
    ))
    and (select trunc(est.fecha_estado) from ca_estado_caja est where est.id_estado_caja = table1.id_estado_caja)
)AS transacciones

FROM ( SELECT  tab0.*, tab1.nombre AS nombre, tab1.encabezado, 
 CASE 
 WHEN tab0.estado =1 THEN tab0.num_factura
 ELSE (SELECT num_factura from CA_ESTADO_CAJA where id_punto_venta=tab0.id_punto_venta and id_caja=tab0.id_caja and sesion=tab0.sesion and estado=1)
 END 
 AS factura_inicial,
 
 CASE 
 WHEN tab0.estado = 0 THEN tab0.num_factura
 ELSE null
 END 
 AS factura_final,
 
 ter.num_doc, ter.razon_soc
 
 FROM CA_ESTADO_CAJA tab0
 JOIN ca_punto_venta tab1 ON tab0.id_punto_venta=tab1.id_punto_venta
 JOIN ca_caja tab2 ON tab0.id_caja=tab2.id_caja 
 join ca_ejecutivo_cuenta tab3 on tab3.id_punto_venta = tab0.id_punto_venta and tab3.id_mae_ter = tab0.cajero
 join interceros_v ter on ter.id_mae_ter = tab3.id_mae_ter
                    
 where tab2.bloqueado=0 $whereCaja $wherePuntoVenta $whereSesion $whereEstado $whereFechaEstado
 )table1


)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 el registo de usuario si se encuentra autenticado
                 */
                $sql = <<<EOD
SELECT * FROM ( SELECT row_.*, ROWNUM rownum_ FROM (
 
SELECT table1.*,  

(
    SELECT count(id_factura) 
    FROM ca_factura_pos 
    WHERE estado=1 AND id_caja=table1.id_caja AND sec_factura BETWEEN table1.factura_inicial AND table1.factura_final
    and trunc(fecha_facturacion) between (select trunc(est.fecha_estado) from ca_estado_caja est where est.id_estado_caja = (
     select id_estado_caja 
            from ca_estado_caja 
            where sesion = (select sesion from ca_estado_caja where id_estado_caja = table1.id_estado_caja)
            and id_punto_venta = (select id_punto_venta from ca_estado_caja where id_estado_caja = table1.id_estado_caja)
            and id_caja = (select id_caja from ca_estado_caja where id_estado_caja = table1.id_estado_caja)
            and estado = 1
    ))
    and (select trunc(est.fecha_estado) from ca_estado_caja est where est.id_estado_caja = table1.id_estado_caja)
)AS transacciones_efectivas,

(
    SELECT count(id_factura) 
    FROM ca_factura_pos 
    WHERE  id_caja=table1.id_caja AND sec_factura BETWEEN table1.factura_inicial AND table1.factura_final
    and trunc(fecha_facturacion) between (select trunc(est.fecha_estado) from ca_estado_caja est where est.id_estado_caja = (
     select id_estado_caja 
            from ca_estado_caja 
            where sesion = (select sesion from ca_estado_caja where id_estado_caja = table1.id_estado_caja)
            and id_punto_venta = (select id_punto_venta from ca_estado_caja where id_estado_caja = table1.id_estado_caja)
            and id_caja = (select id_caja from ca_estado_caja where id_estado_caja = table1.id_estado_caja)
            and estado = 1
    ))
    and (select trunc(est.fecha_estado) from ca_estado_caja est where est.id_estado_caja = table1.id_estado_caja)
)AS transacciones

FROM ( SELECT  tab0.*, tab1.nombre AS nombre, tab1.encabezado, 
 CASE 
 WHEN tab0.estado =1 THEN tab0.num_factura
 ELSE (SELECT num_factura from CA_ESTADO_CAJA where id_punto_venta=tab0.id_punto_venta and id_caja=tab0.id_caja and sesion=tab0.sesion and estado=1)
 END 
 AS factura_inicial,
 
 CASE 
 WHEN tab0.estado = 0 THEN tab0.num_factura
 ELSE null
 END 
 AS factura_final,
 
 ter.num_doc, ter.razon_soc
 
 FROM CA_ESTADO_CAJA tab0
 JOIN ca_punto_venta tab1 ON tab0.id_punto_venta=tab1.id_punto_venta
 JOIN ca_caja tab2 ON tab0.id_caja=tab2.id_caja 
 join ca_ejecutivo_cuenta tab3 on tab3.id_punto_venta = tab0.id_punto_venta and tab3.id_mae_ter = tab0.cajero
 join interceros_v ter on ter.id_mae_ter = tab3.id_mae_ter
                        
 where tab2.bloqueado=0 $whereCaja $wherePuntoVenta $whereSesion $whereEstado $whereFechaEstado
 )table1

order by table1.fecha_estado
    
) row_ WHERE ROWNUM <=  $rowEnd   ) where rownum_ >  $rowStart 
EOD;

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

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

                $id_usuario = 0;
                $this->logMessage("[inf_reimp_estado] No Exitoso");
                $mensaje = "[inf_reimp_estado] No hay registros de consulta.";
                $this->list_data = array();
                $this->logMessage($mensaje);
            }
        } catch (Exception $e) {

            $this->status = 1;
            $this->mensajeError = "ERROR!!!";
            $this->list_data = array();
            $this->logMessage("ERROR!!!");
            $this->logMessage($e->getMessage());
        }
    }

}
