<?php

/**
 * usuario_cen_op actions.
 *
 * @package    inventario
 * @subpackage usuario_cen_op
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class usuario_cen_opActions extends sfQuery {
    /*
     * ------------VARIABLES PARA SERVICIOS DE CONSULTA - LIST
     */

    protected $table_names = array(
        'RVSP_USUARIO_CEN_OP',
        'CENTRO_OPERACION',
        'USUARIO'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'CENTRO_OPERACION' =>
        array(
            'id_cen_op' => 'RVSP_USUARIO_CEN_OP'
        ),
        'USUARIO' =>
        array(
            'username' => 'RVSP_USUARIO_CEN_OP'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'RVSP_USUARIO_CEN_OP' =>
        array(
            'username' => 'username',
            'id_cen_op' => 'id_cen_op',
            'estado' => 'estado'
        ),
        'CENTRO_OPERACION' =>
        array(
            'nom_cen_op' => 'nom_cen_op'
        ),
        'USUARIO' =>
        array(
            'num_doc' => 'num_doc',
            'nombre' => 'nombre',
            'apellido' => 'apellido',
            'num_doc,||, - ,||,nombre,||, ,||,apellido' => 'completo'
        )
    ); //por cada tabla especificar los campos del select
    /*
     * OPCIONES DE FILTRO:
     *
     * LIKEALLPLUS- busqueda comparativa de la cadena dividida por los espacios en blanco en cualquier posición
     * LIKEALL - busqueda comparativa de la cadena en cualquier posición
     * LIKE - busqueda en la cadena que inicie por la variable de filtro
     *
     * rownum,start - rownum,end / estos campos para uso del Grid live GWT, numero fijo de filas de consulta
     */
    protected $table_field_conditions = array(
        'RVSP_USUARIO_CEN_OP' =>
        array(
            'estado' => array('=' => array(1)),
            'id_cen_op' => array('=' => array('id_cen_op')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        )
    ); //por cada tabla se dan los campos, opcion de filtro y variable que entra para los posibles filtros
//    protected $table_field_or_conditions = array(
//        'CA_USUARIO_PUNTO' =>
//        array(
//            'num_doc' => array('LIKE' => array('input', '%')),
//            'razon_soc' => array('LIKEALLPLUS' => array('input', '%'))
//        )
//    ); // filtros de condicion or
    protected $fields_orderBy = array(
        'id_cen_op'
    ); //campos para el ordenamiento de la consulta
//    protected $query_qualifier = 'DISTINCT'; //Para eliminar filas repetidas
    //  protected $table_field_obligatory = array('username', 'es_pos'); //campos obligatorios de filtro - estan en el request

    /*
     * Variable manejo de log
     */
    //si es servicio para filtro agregar campo
    protected $filtro = 'usuario_cen_op';
    //true - la tabla principal de busqueda no es una vista
    protected $is_filtro = true;

    /*
     * ------------VARIABLES PARA SERVICIOS CRUD
     */
    protected $id_name = 'username'; //identificador de la tabla
    protected $id_names = array('username', 'id_cen_op'); //llave primaria
    protected $field_names = array('estado'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'RVSP_USUARIO_CEN_OP'; //tabla en la cual se aplican los cambios
    protected $has_activo = false; //si posee campo en la tabla de nombre activo ---- ESTADO PARA REGALIAS
    protected $has_vigencia = false; //si posee vigencia
    protected $has_cen_op = false; //si posee centro de operacion
    protected $has_id_cia = false; //si posee compañia    
    protected $has_secuencia = false; //si posee secuencia la tabla

    /*
     * Manejo de registro log
     */
    protected $id_unico = 'username'; //identificador unico de la tabla

    /**
     * Metodo remove, se coloca por problemas del campo de texto username - 20160831
     *
     * @param sfRequest $request A request object
     */

    public function executeRemove(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");

        /*
         * variables de filtro
         */
        $nitocc = $request['nitocc'];
        $id_username = $request['id_username'];
        $comando = $request['comando'];
        if (isset($request['username'])) {
            $username = $request['username'];
            $id_cen_op = $request['id_cen_op'];
        }

        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        $this->conn->beginTransaction();

        /*
         * Manejo de errores
         */
        try {

            $fecha_sistema = CN_TABLE::fechaSistema();

            //guardar log
            // Solo registra log la primera vez de consulta
            //Operaciones: 1-CONSULTAR, 2-ACTUALIZAR, 3-ADICIONAR, 4-ELIMINAR, 5-ANULAR
            $id_ope_bd = 4;
            //obtener id maestro tabla
            $id_mae_bd = CN_TABLE::consultarIdTablaBD('RVSP_USUARIO_CEN_OP');
            //registro de consulta en tabla de log- la observacion puede o no enviarse ($request, $id_ope_bd, $id_mae_bd, $observacion)
            $sql = CN_TABLE::registrarLog($request, $id_ope_bd, $id_mae_bd, // observacion
                            "Se Elimino el usuario: " . $username . " al " . $id_cen_op);


            //delete RVSP_USUARIO_CEN_OP
            $sql = <<<EOD
delete from RVSP_USUARIO_CEN_OP i WHERE (i.username = '$username' AND i.id_cen_op = $id_cen_op) 
EOD;

            CN_TABLE::executeSQL($sql, true);



            //COMMIT DE TODAS LAS TRANSACCIONES
            $this->conn->commit();
            $this->status = 0;
            $this->list_data = array();
            $this->logMessage("[REMOVE_RVSP_USUARIO_CEN_OP] Consulta exitosa");
        } catch (Exception $e) {
            //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
            $this->conn->rollback();

            $this->status = 1;
            $this->mensajeError = "[ADD_RVSP_USUARIO_CEN_OP] Ocurrio un error: verificar registro";
            $this->list_data = array();
            $this->logMessage("[REMOVE_RVSP_USUARIO_CEN_OP] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

    /**
     * Metodo list de accesos
     *
     * @param sfRequest $request A request object
     */
    public function executeAdd(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");

        /*
         * variables de filtro
         */
        //leer variable gwt
        if (isset($request['username'])) {
            $username = $request['username'];
            $id_cen_op = $request['id_cen_op'];
        }

        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        $this->conn->beginTransaction();
        /*
         * 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;
            }

            $fecha_sistema = CN_TABLE::fechaSistema();

            //guardar log
            // Solo registra log la primera vez de consulta
            //Operaciones: 1-CONSULTAR, 2-ACTUALIZAR, 3-ADICIONAR, 4-ELIMINAR, 5-ANULAR
            $id_ope_bd = 3;
            //obtener id maestro tabla
            $id_mae_bd = CN_TABLE::consultarIdTablaBD('RVSP_USUARIO_CEN_OP');
            //registro de consulta en tabla de log- la observacion puede o no enviarse ($request, $id_ope_bd, $id_mae_bd, $observacion)
            $sql = CN_TABLE::registrarLog($request, $id_ope_bd, $id_mae_bd, // observacion
                            'Se agrego el usuario: ' . $username . ' al ' . $id_cen_op);


            //update det_contrato
            $sql = <<<EOD
   
 INSERT INTO RVSP_USUARIO_CEN_OP (username, id_cen_op, estado) VALUES ('$username', $id_cen_op, 1)

EOD;

            CN_TABLE::executeSQL($sql, true);



            //COMMIT DE TODAS LAS TRANSACCIONES

            $this->conn->commit();
            $this->status = 0;
            $this->list_data = array();
            $this->logMessage("[ADD_RVSP_USUARIO_CEN_OP] Consulta exitosa");
        } catch (Exception $e) {
            //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
            $this->conn->rollback();

            $this->status = 1;
            $this->mensajeError = "[ADD_RVSP_USUARIO_CEN_OP] Ocurrio un error: verificar registro.";
            $this->list_data = array();
            $this->logMessage("[ADD_RVSP_USUARIO_CEN_OP] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

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

}
