<?php

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

    protected $table_names = array(
        'RVC_NOVEDAD_CONTRATISTA_V',
        'RVC_TIPO_REGIMEN',
        'RVC_TIPO_RIESGO'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'RVC_TIPO_REGIMEN,LEFT' =>
        array(
            'id_tipo_regimen' => 'RVC_NOVEDAD_CONTRATISTA_V'
        ),
        'RVC_TIPO_RIESGO,LEFT' =>
        array(
            'id_tipo_riesgo' => 'RVC_NOVEDAD_CONTRATISTA_V'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'RVC_NOVEDAD_CONTRATISTA_V' =>
        array(
            'id_novedad_contratista' => 'id_novedad_contratista',
            'id_contratista' => 'id_contratista',
            'rut' => 'rut',
            'adjunto_rut' => 'adjunto_rut',
            'id_tipo_regimen' => 'id_tipo_regimen',
            'mas_empleados' => 'mas_empleados',
            'declarante_renta' => 'declarante_renta',
            'pensionado' => 'pensionado',
            'adjunto_pensionado' => 'adjunto_pensionado',
            'id_fondo_salud' => 'id_fondo_salud',
            'id_fondo_pension' => 'id_fondo_pension',
            'id_caja_comp' => 'id_caja_comp',
            'id_fondo_arl' => 'id_fondo_arl',
            'id_tipo_riesgo' => 'id_tipo_riesgo',
            'adjunto_arl' => 'adjunto_arl',
            'fecha_log' => 'fecha_log',
            'usuario_log' => 'usuario_log',
            'codigo_fondo_salud' => 'codigo_fondo_salud',
            'razon_social_fondo_salud' => 'razon_social_fondo_salud',
            'codigo_fondo_pension' => 'codigo_fondo_pension',
            'razon_social_fondo_pension' => 'razon_social_fondo_pension',
            'codigo_caja_comp' => 'codigo_caja_comp',
            'razon_social_caja_comp' => 'razon_social_caja_comp',
            'codigo_fondo_arl' => 'codigo_fondo_arl',
            'razon_social_fondo_arl' => 'razon_social_fondo_arl',
            'id_tip_ter' => 'id_tip_ter',
            'descripcion_tertip' => 'descripcion_tertip',
            'id_tipo_doc' => 'id_tipo_doc',
            'descripcion_tipdoc' => 'descripcion_tipdoc',
            'num_doc' => 'num_doc',
            'razon_social' => 'razon_social',
            'correo' => 'correo',
            'id_ciudad' => 'id_ciudad',
            'ciudad' => 'ciudad'
        ),
        'RVC_TIPO_REGIMEN' =>
        array(
            'descripcion' => 'descripcion_reg',
            'aplica_iva' => 'aplica_iva_reg'
        ),
        'RVC_TIPO_RIESGO' =>
        array(
            'codigo' => 'codigo_rie',
            'descripcion' => 'descripcion_rie',
            'valor' => 'valor_rie',
            'codigo,||, - ,||,valor' => 'completo_rie'
        )
    ); //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
     *
     * _filtroNull / para filtro de not null o null - type debe ser is - para todas las variables
     * TYPE NULL / para filtro de not null o null con el valor de campo desde gwt
     * EJEMPLO: 'titular' => array('NULL' => array('titular')),
     *
     * rownum,start - rownum,end / estos campos para uso del Grid live GWT, numero fijo de filas de consulta
     */
    protected $table_field_conditions = array(
        'RVC_NOVEDAD_CONTRATISTA_V' => array(
            'id_novedad_contratista,a' => array('!=' => array(-1)),
            'id_novedad_contratista,b' => array('=' => array('id_novedad_contratista')),
            'id_contratista' => array('=' => array('id_contratista')),
            'id_tipo_regimen' => array('=' => array('id_tipo_regimen')),
            'id_tipo_riesgo' => array('=' => array('id_tipo_riesgo')),
            '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(
    ); // filtros de condicion or
//    protected $query_qualifier = 'DISTINCT'; //Variable para el sql para eliminar filas repetidas
    protected $fields_orderBy = array(
        'id_contratista', 'id_novedad_contratista desc', 'fecha_log desc'
    ); //campos para el ordenamiento de la consulta
//    protected $table_field_obligatory = array('id_debito'); //campos obligatorios de filtro - estan en el request

    /*
     * Variables manejo de log
     */
    //true - consulta de administracion
    protected $is_admin = true;
    //si es servicio para filtro agregar campo
//    protected $filtro = 'Area';
    //true - la tabla principal de busqueda no es una vista
    protected $is_filtro = true;



    /*
     * ------------VARIABLES PARA SERVICIOS CRUD
     */
    protected $id_name = 'id_novedad_contratista'; //identificador de la tabla - solo si es un dato no llave compuesta
    protected $id_names = array('id_novedad_contratista'); //llave primaria
    protected $field_names = array('id_contratista', 'rut', 'adjunto_rut', 'id_tipo_regimen', 'mas_empleados',
        'declarante_renta', 'pensionado', 'adjunto_pensionado', 'id_fondo_salud', 'id_fondo_pension', 'id_caja_comp',
        'id_fondo_arl', 'id_tipo_riesgo', 'adjunto_arl', 'fecha_log', 'usuario_log',
        'id_tip_ter', 'id_tipo_doc', 'num_doc', 'razon_social', 'correo', 'id_ciudad'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'RVC_NOVEDAD_CONTRATISTA'; //tabla en la cual se aplican los cambios
    protected $has_activo = true; //si posee campo en la tabla de nombre activo ---- ESTADO PARA REGALIAS - CARTERA
    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 - true si es por tabla, false - trigger
//    protected $en_mayuscula = true; // si se pone, se puede poner en mayucula con true y en minuscula con false, de lo contrario la pone tal cual la BD

    /*
     * campos para fecha sistema
     */
//    protected $campo_fecha_sistema = array(
//        'fecha_crea'
//    );

    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_novedad_contratista'; //identificador unico de la tabla
    //false - Registrar log para list - consultar
    protected $log_list = false;
    //false - Registrar log para add - update - remove
    protected $log_crud = false;

    /**
     * Construccion de observacion perzonalizada
     * 
     * Toda variable para tomarla del request con el formato:
     * &request-variable&
     * 
     * false - observacion por defecto
     *
     * @var string 
     */
    protected $observacion_list = false;
    protected $observacion_add = false;
    protected $observacion_update = false;
    protected $observacion_remove = false;

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

        /*
         * Variables request
         */

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

        /*
         * Variables request
         */

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

        /*
         * Variables request
         */

        /*
         *  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") {

            $request['usuario_log'] = $request['username'];
            //$request['fecha_log'] = CN_TABLE::fechaSistema();
        }

        //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") {

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

            try {

                $id_novedad_contratista = $list_data_post[0]['id_novedad_contratista'];
                $id_contratista = $list_data_post[0]['id_contratista'];

                $sql = <<<EOD
select 
* 
from rvc_novedad_contratista
where
id_novedad_contratista = $id_novedad_contratista
and id_contratista = $id_contratista 
EOD;
                $results_aplica = CN_TABLE::executeSQL($sql);

                $rut = $results_aplica[0]['rut'];
                $adjunto_rut = $results_aplica[0]['adjunto_rut'];
                $id_tipo_regimen = $results_aplica[0]['id_tipo_regimen'];
                $mas_empleados = $results_aplica[0]['mas_empleados'];
                $declarante_renta = $results_aplica[0]['declarante_renta'];
                $pensionado = $results_aplica[0]['pensionado'];
                $adjunto_pensionado = $results_aplica[0]['adjunto_pensionado'];
                $id_fondo_salud = $results_aplica[0]['id_fondo_salud'];
                $id_fondo_pension = $results_aplica[0]['id_fondo_pension'];
                $id_caja_comp = $results_aplica[0]['id_caja_comp'];
                $id_fondo_arl = $results_aplica[0]['id_fondo_arl'];
                $id_tipo_riesgo = $results_aplica[0]['id_tipo_riesgo'];
                $adjunto_arl = $results_aplica[0]['adjunto_arl'];
                $id_tip_ter = $results_aplica[0]['id_tip_ter'];
                $id_tipo_doc = $results_aplica[0]['id_tipo_doc'];
                $num_doc = $results_aplica[0]['num_doc'];
                $razon_social = $results_aplica[0]['razon_social'];
                $id_ciudad = $results_aplica[0]['id_ciudad'];
                $correo = $results_aplica[0]['correo'];

                $usuario_log = $results_aplica[0]['usuario_log'];

                //Datos de insert - 20181216
                $numero_rut = $request['numero_rut'];
                $id_pais = $request['id_pais'];
                $id_depto = $request['id_depto'];
                $codmun = $request['codmun'];
                $direccion = $request['direccion'];
                $telefono = $request['telefono'];
                $correo_alternativo = $request['correo_alternativo'];
                $actividad_principal = $request['actividad_principal'];
                $fecha_act_principal = $request['fecha_act_principal'];
                $actividad_secundaria = $request['actividad_secundaria'];
                $fecha_act_secundaria = '';
                if (isset($request['actividad_secundaria'])) {
                    $fecha_act_secundaria = $request['fecha_act_secundaria'];
                }
                $otra_actividad_una = $request['otra_actividad_una'];
                $otra_actividad_dos = $request['otra_actividad_dos'];
                $ocupacion = $request['ocupacion'];
                $num_establecimientos = $request['num_establecimientos'];

                /**
                 * Registros de RUT - 20181216
                 */
                $sql = <<<EOD
Insert into RVC_NOVEDAD_CONTRA_RUT (ID_NOVEDAD_CONTRA_RUT,ID_CONTRATISTA,FECHA_LOG,USUARIO_LOG,
    NUMERO_RUT,ID_PAIS,ID_DEPTO,CODMUN,DIRECCION,TELEFONO,CORREO_ALTERNATIVO,
        ACTIVIDAD_PRINCIPAL,FECHA_ACT_PRINCIPAL,ACTIVIDAD_SECUNDARIA,FECHA_ACT_SECUNDARIA,
            OTRA_ACTIVIDAD_UNA,OTRA_ACTIVIDAD_DOS,OCUPACION,NUM_ESTABLECIMIENTOS) 
values (null,'$id_contratista',sysdate,'$usuario_log',
    '$numero_rut','$id_pais','$id_depto','$codmun','$direccion','$telefono','$correo_alternativo',
        '$actividad_principal',to_date('$fecha_act_principal','yyyy-mm-dd'),'$actividad_secundaria',to_date('$fecha_act_secundaria','yyyy-mm-dd'),
            '$otra_actividad_una','$otra_actividad_dos','$ocupacion','$num_establecimientos') 
EOD;
                $this->conn->execute($sql);


                /**
                 * Actualiza registros de contratista segun novedad
                 */
                $sql = <<<EOD
update rvc_contratista 
set rut = nvl('$rut',0),
adjunto_rut = '$adjunto_rut',
id_tipo_regimen = '$id_tipo_regimen',
mas_empleados = nvl('$mas_empleados',0),
declarante_renta = nvl('$declarante_renta',0),
pensionado = nvl('$pensionado',0),
adjunto_pensionado = '$adjunto_pensionado',
id_fondo_salud = '$id_fondo_salud',
id_fondo_pension = '$id_fondo_pension',
id_caja_comp = '$id_caja_comp',
id_fondo_arl = '$id_fondo_arl',
id_tipo_riesgo = '$id_tipo_riesgo',
adjunto_arl = '$adjunto_arl',
id_tip_ter = '$id_tip_ter',
id_tipo_doc = '$id_tipo_doc',
num_doc = '$num_doc',
razon_social = '$razon_social',
id_ciudad = '$id_ciudad',
correo = '$correo',
                        
numero_rut = '$numero_rut',                  
id_pais = '$id_pais',                  
id_depto = '$id_depto',                  
codmun = '$codmun',                  
direccion = '$direccion',                  
telefono = '$telefono',                  
correo_alternativo = '$correo_alternativo',                  
actividad_principal = '$actividad_principal',                  
fecha_act_principal = '$fecha_act_principal',                  
actividad_secundaria = '$actividad_secundaria',                  
fecha_act_secundaria = '$fecha_act_secundaria',                  
otra_actividad_una = '$otra_actividad_una',                  
otra_actividad_dos = '$otra_actividad_dos',                  
ocupacion = '$ocupacion',                  
num_establecimientos = '$num_establecimientos'
                        
where
id_contratista = $id_contratista
EOD;
                $this->conn->execute($sql);

                //COMMIT DE TODAS LAS TRANSACCIONES
                $this->conn->commit();
            } catch (Exception $e) {

                //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
                $this->conn->rollback();
            }
        }

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

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

        return $request;
    }

}
