<?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_afilia_arl' => 'fecha_afilia_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',
            'tarifa_caja_comp' => 'tarifa_caja_comp',
            'adjunto_caja_comp' => 'adjunto_caja_comp',
            'adjunto_fondo_salud' => 'adjunto_fondo_salud',
            'adjunto_fondo_pension' => 'adjunto_fondo_pension',
            'profesion' => 'profesion',
            'fecha_afilia_salud' => 'fecha_afilia_salud',
            'fecha_afilia_pension' => 'fecha_afilia_pension',
            'por_administrador' => 'por_administrador',
        ),
        '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')),
            'por_administrador' => array('=' => array('por_administrador')),
            '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', 'fecha_afilia_arl', 'tarifa_caja_comp',
        'adjunto_caja_comp', 'adjunto_fondo_salud', 'adjunto_fondo_pension', 'profesion', 'fecha_afilia_salud', 'fecha_afilia_pension',
        'por_administrador'); //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
         */
        $caja_comp = $request['id_caja_comp'];
        $tarifa_caja_comp = $request['tarifa_caja_comp'];
        
        /*
         *  Validar la operación, ya sea por SQL
         */
        

        /*
         *  Generar errores en $errors
         */
        //Si la caja de compensacion no es el codigo 168 (NINGUNA) se valida que la tarifa no sea 0
        if(!empty($caja_comp) && $caja_comp != 168){
            if($tarifa_caja_comp=="0"){
                    $errors['mensaje'] = "La tarifa caja compensación (%), no puede ser cero (0).";
                    $errors['servicio'] = "com_plan_comisionados_placom";
                }   
        }

        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['razon_social'] = $request['pnombre'] . " " . $request['snombre'] . " " . $request['papellido'] . " " . $request['sapellido'];
            //$request['fecha_log'] = CN_TABLE::fechaSistema();

            /**
             * Campos nuevos de actualizacion - 20181226
             */
            $request['fecha_activacion'] = 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'];
                //$fecha_afilia_arl = $results_aplica[0]['fecha_afilia_arl'];
                $tarifa_caja_comp = empty($results_aplica[0]['tarifa_caja_comp']) ? 0 : $results_aplica[0]['tarifa_caja_comp'];
                $adjunto_caja_comp = $results_aplica[0]['adjunto_caja_comp'];
                $adjunto_fondo_salud = $results_aplica[0]['adjunto_fondo_salud'];
                $adjunto_fondo_pension = $results_aplica[0]['adjunto_fondo_pension'];
                $profesion = $results_aplica[0]['profesion'];

                $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'];
                $pnombre = $request['pnombre'];
                $snombre = $request['snombre'];
                $papellido = $request['papellido'];
                $sapellido = $request['sapellido'];
                $correo_alternativo = $request['correo_alternativo'];
                $actividad_principal = $request['actividad_principal'];
                $fecha_act_principal = $request['fecha_act_principal'];
                $actividad_secundaria = $request['actividad_secundaria'];
                $fecha_afilia_arl = $request['fecha_afilia_arl'];
                $fecha_afilia_salud = $request['fecha_afilia_salud'];
                $fecha_afilia_pension = $request['fecha_afilia_pension'];
                $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',
pnombre = '$pnombre',
snombre = '$snombre',
papellido = '$papellido',
sapellido = '$sapellido',
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',
fecha_afilia_arl = '$fecha_afilia_arl',
fecha_afilia_salud = '$fecha_afilia_salud',
fecha_afilia_pension = '$fecha_afilia_pension',
tarifa_caja_comp = $tarifa_caja_comp,
adjunto_caja_comp = '$adjunto_caja_comp',
adjunto_fondo_salud = '$adjunto_fondo_salud',
adjunto_fondo_pension = '$adjunto_fondo_pension',
profesion = '$profesion'   
where
id_contratista = $id_contratista
EOD;
                $this->conn->execute($sql);


                /**
                 * Campos nuevos de actualizacion - 20181226
                 */
                $fecha_activacion = $request['fecha_activacion'];

                //$id_pago_contra = $request['id_pago_contra'];
                $id_bn = $request['id_bn'];
                $tipo_cuenta = $request['tipo_cuenta'];
                $num_cuenta = $request['num_cuenta'];
                $adjunto_certif_bancaria = $request['adjunto_certif_bancaria'];
                $adjunto_aprobacion_supervisor = $request['adjunto_aprobacion_supervisor'];


                $sql = <<<EOD
update rvc_pago_contra set estado = 0,
fecha_terminacion = to_date('$fecha_activacion','yyyy-mm-dd') - 1
where 
estado = 1
and id_contratista = $id_contratista                      
EOD;
                $this->conn->execute($sql);
                
                
                $sql = <<<EOD
Insert into RVC_PAGO_CONTRA (ID_PAGO_CONTRA,ID_CONTRATISTA,ID_BN,TIPO_CUENTA,NUM_CUENTA,
    ESTADO,FECHA_ACTIVACION,FECHA_TERMINACION,
        ADJUNTO_CERTIF_BANCARIA,ADJUNTO_APROBACION_SUPERVISOR,
            FECHA_LOG,USUARIO_LOG) 
values (null,'$id_contratista','$id_bn','$tipo_cuenta','$num_cuenta',
    '1',to_date('$fecha_activacion','yyyy-mm-dd'),null,
        '$adjunto_certif_bancaria','$adjunto_aprobacion_supervisor',sysdate,'$usuario_log')                      
EOD;
                $this->conn->execute($sql);


                $sql = <<<EOD
update rvc_contratista 
set id_bn = '$id_bn',
tipo_cuenta = '$tipo_cuenta',
num_cuenta = '$num_cuenta',
adjunto_certif_bancaria = '$adjunto_certif_bancaria',
adjunto_aprobacion_supervisor = '$adjunto_aprobacion_supervisor'
where
id_contratista = $id_contratista
EOD;
                $this->conn->execute($sql);
                
                //20190606 Actualizamos las cajas en los formatos de pago del contratista en caso de ser un cambio por administrador
                //el ultimo en estado aprobado y todos los estado pendiente
                $por_administrador = $request["por_administrador"];
                $logger->info("por_administrador :".$por_administrador);
                if($por_administrador=="true"){
                    $logger->info("Entro a cambios en formatos de pago por_administrador ");
                    $sql = <<<EOD
update rvc_formato_pago 
set 
id_fondo_salud = '$id_fondo_salud',
id_fondo_pension = '$id_fondo_pension',
id_caja_comp = '$id_caja_comp',
id_fondo_arl = '$id_fondo_arl'
where
id_formato_pago in (select max(id_formato_pago) as id_formato_pago from rvc_formato_pago_v tab0
where estado_general = 6 and id_contratista = $id_contratista and id_anhos = extract(YEAR from sysdate))
EOD;
                $this->conn->execute($sql);
                    
                }    
                
                //COMMIT DE TODAS LAS TRANSACCIONES
                $this->conn->commit();
                    $logger->info("COMMIT DE TODAS LAS TRANSACCIONES");
            } catch (Exception $e) {

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

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

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

        return $request;
    }

}
