<?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',
            'responsable_fact_elect' => 'responsable_fact_elect',
            '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',
            'fecha_genera_rut' => 'fecha_genera_rut',
            'id_actividad_ciiu' => 'id_actividad_ciiu',
            'id_dian_actividad' => 'id_dian_actividad'
        ),
        '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', 'fecha_genera_rut', 'responsable_fact_elect', 'id_actividad_ciiu', 'id_dian_actividad'); //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'];
        $id_ciudad = $request['id_ciudad'];
        $id_actividad_ciiu = $request['id_actividad_ciiu'];
        /*
         *  Validar la operación, ya sea por SQL
         */
        /*
         * (SGC-1, ANM-2, SGR-3, CYC-4, COL-5, INCI-6, LOCAL-7)
         */
        $array = sfYaml::load(dirname(__FILE__) . '/../../../../api/config/app-gwt.yml');
        $int = 0;
        foreach ($array as $routeName => $routeData) {
            //echo $routeName . "\n";
            if ('entidad_cliente' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $entidadCliente = $value;
                    }
                }
            }
            $int++;
        }
        // Validacion de correo solo SGC
        if($entidadCliente == "1") {
            $email = $request['correo'];;
            if(!CN_TABLE::emailValido($email,"SI","sgc.gov.co")) {
                $errors['mensaje'] = "El email corporativo del contratista no es un email valido.";
                $errors['servicio'] = "co_contratista";
            }
        }

        /*
         *  Generar errores en $errors
         */
        // Validad Id_actividad_ciuu si aplica para la ciudad
        if(empty($id_actividad_ciiu) && !empty($id_ciudad)) {
            $sql = <<<EOD
select * from RVC_ACTIVIDAD_CIIU where id_ciudad = $id_ciudad
EOD;
            $records = CN_TABLE::executeSQL($sql);
            if(count($records)>0) {
                $errors['mensaje'] = "Debe establecer la actividad CIUU para la ciudad seleccionada.";
                $errors['servicio'] = "novedad_datos_contra";
            }
        }
        //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'] = "novedad_datos_contra";
            }
        }

        //20200925 Valida Fecha RUT si aplica RUT UPDATE
        $sql = <<<EOD
SELECT APLICA_RUT_UPDATE, FECHA_RUT_UPDATE
FROM rvc_param_gen
where
id = 1
EOD;
        $records = CN_TABLE::executeSQL($sql);
        if ($records[0]['aplica_rut_update'] == 1) {
            $adjunto_rut = $request['adjunto_rut'];
            $fecha_genera_rut = $request['fecha_genera_rut'];
            if (empty($adjunto_rut) || empty($fecha_genera_rut)) {
                $errors['mensaje'] = "El RUT y la Fecha de generacion del RUT son necesarios para registrar la novedad.";
                $errors['servicio'] = "novedad_datos_contra";
            } else {
                // $fecha_min_rut = $records[0]['fecha_rut_update']
                $sql = <<<EOD
select 
aplica_rut_update,
fecha_rut_update,
case 
   when fecha_rut_update > to_date('$fecha_genera_rut','YYYY-MM-DD') then 1 else 0 end as viola_fecha_rut_min,
to_char(fecha_rut_update, 'dd/mm/yyyy') as fecha_min_rut                               
from rvc_param_gen 
where id=1 
EOD;
                $records = CN_TABLE::executeSQL($sql);
                if ($records[0]['viola_fecha_rut_min'] == "1") {
                    $fecha_min_rut = $records[0]['fecha_min_rut'];
                    $errors['mensaje'] = "No es posible registrar la novedad. la fecha generacion RUT minima permitida es $fecha_min_rut.";
                    $errors['servicio'] = "novedad_datos_contra";
                }
            }
        }

        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 {

                /*
                 * (SGC-1, ANM-2, SGR-3, CYC-4, COL-5, INCI-6, LOCAL-7)
                 */
                $array = sfYaml::load(dirname(__FILE__) . '/../../../config/app-gwt.yml');

                $int = 0;
                foreach ($array as $routeName => $routeData) {
                    //echo $routeName . "\n";
                    if ('entidad_cliente' == $routeName) {
                        foreach ($routeData as $key => $value) {
                            //echo $value . "\n";
                            if ($key == 'value') {
                                $entidadCliente = $value;
                            }
                        }
                    }
                    if ('entidad_nombre' == $routeName) {
                        foreach ($routeData as $key => $value) {
                            //echo $value . "\n";
                            if ($key == 'value') {
                                $entidadNombre = $value;
                            }
                        }
                    }
                    if ('correoEnvio' == $routeName) {
                        foreach ($routeData as $key => $value) {
                            //echo $value . "\n";
                            if ($key == 'value') {
                                $correoEnvio = $value;
                            }
                        }
                    }
                    if ('correoEnvioPresup' == $routeName) {
                        foreach ($routeData as $key => $value) {
                            //echo $value . "\n";
                            if ($key == 'value') {
                                $correoEnvioPresup = $value;
                            }
                        }
                    }
                    $int++;
                }

                $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'];
                $responsable_fact_elect = $results_aplica[0]['responsable_fact_elect'];
                $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'];
                $id_actividad_ciiu = $results_aplica[0]['id_actividad_ciiu'];
                $actividad_principal = $results_aplica[0]['actividad_principal'];
                $id_dian_actividad = $results_aplica[0]['id_dian_actividad'];
                $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_genera_rut = $request['fecha_genera_rut'];
                $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),
responsable_fact_elect = nvl('$responsable_fact_elect',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',
id_actividad_ciiu = $id_actividad_ciiu,
id_dian_actividad = '$id_dian_actividad',
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',
fecha_genera_rut = '$fecha_genera_rut'
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);


                /**
                 * Actualizar datos de tesoreria de datos pago, para todas las entidades - 20210615::LAVILA
                 */
                $logger->info("Actualizar segun entidadCliente - " . $entidadCliente);
                $tag_correo = false;
                if ($entidadCliente != 0) {
                    //sentencia sql 
                    $sql = <<<EOD
SELECT
    *
FROM ts_reg_ach_distri
where
id_tercero in (SELECT interceros.id_mae_ter FROM interceros where interceros.num_doc = '$num_doc')
order by
secuencia desc,
id_reg_ach desc
EOD;
                    $results_reg = CN_TABLE::executeSQL($sql);

                    if (count($results_reg) > 0) {
                        $logger->info("Actualizar registro pagos de " . $num_doc);

                        $id_reg_ach_distri = $results_reg[0]['id_reg_ach_distri'];

                        //cast de tipo_:cuenta segun tabla TS_TC y campo de reg_ach_dDistri
                        $sql = <<<EOD
update ts_reg_ach_distri 
set id_bn = $id_bn, codigo_ach = (select codigo_ach from ts_bn where id_bn = $id_bn), 
    num_cuenta = '$num_cuenta', 
    tipo_cuenta = case when $tipo_cuenta = 1 then 7 when $tipo_cuenta = 2 then 1 else $tipo_cuenta end
where id_reg_ach_distri = $id_reg_ach_distri
EOD;
                        $this->conn->execute($sql);
                    } else {
                        $logger->info("Crear registro pagos de " . $num_doc);

                        //cast de tipo_:cuenta segun tabla TS_TC y campo de reg_ach_dDistri
                        $sql = <<<EOD
insert into TS_REG_ACH (ID_REG_ACH,ID_TERCERO,USUARIOLOG,FECHALOG,APLICA_REGALIAS) 
values (null,(SELECT min(interceros.id_mae_ter) FROM interceros where interceros.num_doc = '$num_doc'),
    '$num_doc',trunc(sysdate),'0')
EOD;
                        $this->conn->execute($sql);

                        //cast de tipo_:cuenta segun tabla TS_TC y campo de reg_ach_dDistri
                        $sql = <<<EOD
insert into TS_REG_ACH_DISTRI (ID_REG_ACH_DISTRI,ID_REG_ACH,
    ID_BN,CODIGO_ACH,NUM_CUENTA,TIPO_CUENTA,
NOMBRE_CUENTA,DOC_NUM,ID_TIPO_IDENTIFICACION,CONF_ACH,ADJUNTO,SECUENCIA,ID_TERCERO,OBSERVACIONES) 
values (null,(SELECT min(id_reg_ach) FROM ts_reg_ach where id_tercero = (SELECT min(interceros.id_mae_ter) FROM interceros where interceros.num_doc = '$num_doc')),
    '$id_bn',(select codigo_ach from ts_bn where id_bn = $id_bn),'$num_cuenta',case when $tipo_cuenta = 1 then 7 when $tipo_cuenta = 2 then 1 else $tipo_cuenta end,
'$razon_social','$num_doc','1','1',null,'1',(SELECT min(interceros.id_mae_ter) FROM interceros where interceros.num_doc = '$num_doc'),'RVC')
EOD;
                        $this->conn->execute($sql);
                    }

                    /**
                     * Actualizar tabla TERCEROS - 20210615::LAVILA
                     * Se valida si existe el tercero no se borra, ni se crea
                     */
                    $sql = <<<EOD
select * FROM TERCEROS WHERE 1=1 AND NITOCC = '$num_doc'                              
EOD;
                    $ter = CN_TABLE::executeSQL($sql);

                    if (count($ter) > 0) {

                        if ($entidadCliente == 1 || $entidadCliente == 2) {
                            $sql = <<<EOD
                               
    SELECT tab0.num_doc AS nitocc,
       NVL(tab0.id_tip_ter,1) AS tipter,
       tab0.razon_social AS razsoc,
       tab2.nombre AS ciudad,
       NVL(tab0.telefono,'') AS telefo,
       NVL(tab0.telefono,'') AS telfax,
       NVL(tab0.direccion,'') AS direcc,
       tab0.estado AS estado,
       NVL(tab0.correo,'') AS email,
       NVL(tab3.valor_mensualizado,0) AS sueldo,
       '' AS cargo,
       '' AS codreg,
       3 AS id_tipo_traba_contra,
       to_char(SYSDATE,'yyyy-mm-dd') AS fecha_act,
       '' AS cargo_texto
FROM RVC_CONTRATISTA tab0
  LEFT JOIN CIUDAD tab2 ON tab0.id_ciudad = tab2.id
  LEFT JOIN (SELECT tab4.*
             FROM (SELECT aut.*,
                          ROW_NUMBER() OVER (PARTITION BY aut.id_contratista ORDER BY aut.fecha_contrato DESC) AS rn
                   FROM RVC_CONTRATO aut) tab4
             WHERE 1 = 1
             AND   tab4.rn = 1) tab3 ON tab3.id_contratista = tab0.id_contratista
WHERE 1 = 1      AND tab0.id_contratista=$id_contratista                     
EOD;


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

                            $tipter = $contratista[0]['tipter'];
                            $razon_soc = $contratista[0]['razsoc'];
                            $ciudad = $contratista[0]['ciudad'];
                            $telefono = $contratista[0]['telefo'];
                            $telfax = $contratista[0]['telfax'];
                            $direc = $contratista[0]['direcc'];
                            $estado = $contratista[0]['estado'];
                            $email = $contratista[0]['email'];
                            $sueldo = $contratista[0]['sueldo'];
                            $cargo = $contratista[0]['cargo'];
                            $codigo_reg = $contratista[0]['codreg'];
                            $tipo_traba_contra = $contratista[0]['id_tipo_traba_contra'];
                            $fecha_act = $contratista[0]['fecha_act'];
                            $cargo_text = $contratista[0]['cargo_texto'];

                            $sql = <<<EOD
    UPDATE TERCEROS
   SET TIPTER = lpad('$tipter',2,'0'),
       RAZSOC = '$razon_soc',
       CIUDAD = '$ciudad',
       TELEFO = '$telefono',
       TELFAX = '$telfax',
       DIRECC = '$direc',
       ESTADO = $estado,
       EMAIL = '$email',
       SUELDO = $sueldo,
       CARGO = '$cargo',
       CODREG = '$codigo_reg',
       ID_TIPO_TRABA_CONTRA = $tipo_traba_contra,
       FECHA_ACT = to_date('$fecha_act','yyyy-mm-dd'),
       CARGO_TEXTO = '$cargo_text'
WHERE NITOCC = '$num_doc'
EOD;



                            $this->conn->execute($sql);
                        }
                    } else {


                        $sql = <<<EOD
INSERT INTO TERCEROS
(
  NITOCC,
  TIPTER,
  RAZSOC,
  CIUDAD,
  TELEFO,
  TELFAX,
  DIRECC,
  ESTADO,
  EMAIL,
  SUELDO,
  CARGO,
  CODREG,
  ID_TIPO_TRABA_CONTRA,
  FECHA_ACT,
  CARGO_TEXTO
)
SELECT tab0.num_doc AS nitocc,
       lpad(NVL(tab0.id_tip_ter,1),2,'0') AS tipter,
       tab0.razon_social AS razsoc,
       tab2.nombre AS ciudad,
       NVL(tab0.telefono,'') AS telefo,
       NVL(tab0.telefono,'') AS telfax,
       NVL(tab0.direccion,'') AS direcc,
       tab0.estado AS estado,
       NVL(tab0.correo,'') AS email,
       NVL(tab3.valor_mensualizado,0) AS sueldo,
       '' AS cargo,
       '' AS codreg,
       3 AS id_tipo_traba_contra,
       SYSDATE AS fecha_act,
       '' AS cargo_texto
FROM RVC_CONTRATISTA tab0
  LEFT JOIN TERCEROS tab1 ON tab0.num_doc = tab1.nitocc
  LEFT JOIN CIUDAD tab2 ON tab0.id_ciudad = tab2.id
  LEFT JOIN (SELECT tab4.*
             FROM (SELECT aut.*,
                          ROW_NUMBER() OVER (PARTITION BY aut.id_contratista ORDER BY aut.fecha_contrato DESC) AS rn
                   FROM RVC_CONTRATO aut) tab4
             WHERE 1 = 1
             AND   tab4.rn = 1) tab3 ON tab3.id_contratista = tab0.id_contratista
WHERE 1 = 1
AND tab0.id_contratista=$id_contratista                                  
AND   tab1.nitocc IS NULL    
EOD;

                        $this->conn->execute($sql);
                    }

                    /*
                     * Actualizar INTERCEROS
                     */
                    //sentencia sql                
                    $sql = <<<EOD
update interceros set pnombre = '$pnombre', snombre = '$snombre', papellido = '$papellido', sapellido = '$sapellido',
    RAZON_SOC = '$razon_social'
    where id_mae_ter in (SELECT interceros.id_mae_ter FROM interceros where interceros.num_doc = '$num_doc') and estado_ter = 1 
EOD;
                    //ejecuta el sql
                    $this->conn->execute($sql);

                    //sentencia sql
                    $sql = <<<EOD
SELECT * FROM INTERCER_DU where ID_MAE_TER = (SELECT min(interceros.id_mae_ter) FROM interceros where interceros.num_doc = '$num_doc')  
EOD;
                    //ejecuta el sql
                    $resultado_terdu = CN_TABLE::executeSQL($sql);

                    //Valida si es crear o actualizar tabla - 20160628
                    if (count($resultado_terdu) == 0) {

                        $sql = <<<EOD
Insert into INTERCER_DU (ID_MT_UBI,ID_MAE_TER,ID_LOC_DIR,WEB_SITE,MAIL,CONTACTO,CARGO_CON,AP_AEREO,MAIL_CON,ID_PAIS,COPDEPTO,CIUDAD,CODMUN) 
values (null,(SELECT min(interceros.id_mae_ter) FROM interceros where interceros.num_doc = '$num_doc'),'1',null,'$email',null,null,null,null,'$id_pais',
    (SELECT coddepto FROM departamento where id_depto = $id_depto),(select nombre from ciudad where id = $id_ciudad),'$codmun') 
EOD;

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

                        $id_mt_ubi = $resultado_terdu[0]['id_mt_ubi'];

                        //sentencia sql                
                        $sql = <<<EOD
update INTERCER_DU set ciudad = (select nombre from ciudad where id = $id_ciudad), 
    COPDEPTO = (SELECT coddepto FROM departamento where id_depto = $id_depto), 
    id_pais = $id_pais, codmun = '$codmun', MAIL = '$email'                   
where id_mt_ubi = $id_mt_ubi 
EOD;
                        //ejecuta el sql
                        $this->conn->execute($sql);
                    }

                    //sentencia sql
                    $sql = <<<EOD
SELECT * FROM INTERCER_DU where ID_MAE_TER = (SELECT min(interceros.id_mae_ter) FROM interceros where interceros.num_doc = '$num_doc')  
EOD;
                    //ejecuta el sql
                    $resultado_terdu = CN_TABLE::executeSQL($sql);

                    $id_mt_ubi = $resultado_terdu[0]['id_mt_ubi'];

                    //sentencia sql
                    $sql = <<<EOD
SELECT * FROM INTERCER_DU_DIR where ID_MT_UBI = $id_mt_ubi order by estado desc
EOD;
                    //ejecuta el sql
                    $resultado_terdudir = CN_TABLE::executeSQL($sql);

                    if (count($resultado_terdudir) > 0) {

                        $id_ubi_dir = $resultado_terdudir[0]['id_ubi_dir'];

                        //sentencia sql                
                        $sql = <<<EOD
update INTERCER_DU_DIR set  direccion = nvl('$direccion',direccion) , tel = nvl('$telefono',tel) , 
    ciudad = (select nombre from ciudad where id = $id_ciudad), CODDEPTO = (SELECT coddepto FROM departamento where id_depto = $id_depto)  
where ID_UBI_DIR = $id_ubi_dir 
EOD;
                        //ejecuta el sql
                        $this->conn->execute($sql);
                    } else {
                        //sentencia sql                
                        $sql = <<<EOD
Insert into INTERCER_DU_DIR (ID_UBI_DIR,ID_MT_UBI,ID_TIP_DIR,DIRECCION,TEL,FAX,ID_PAIS,CODDEPTO,CIUDAD,ESTADO,PRINCIPAL,CIUDAD_DANE,DEPTO_DANE) 
    values (null,$id_mt_ubi,1,'$direccion','$telefono',null,$id_pais,(SELECT coddepto FROM departamento where id_depto = $id_depto),
        (select nombre from ciudad where id = $id_ciudad),1,1,null,null) 
EOD;
                        //ejecuta el sql
                        $this->conn->execute($sql);
                    }

                    /**
                     * Envio de correo si cambia la cuenta o banco
                     */
                    //Sql
                    $sql = <<<EOD
 select distinct
cont.id_contratista,
cont.id_bn,
cont.tipo_cuenta,
cont.num_cuenta,
cont.adjunto_certif_bancaria
                            
from rvc_contratista_v cont

where
(
cont.id_bn != '$id_bn'
or cont.tipo_cuenta != '$tipo_cuenta'
or cont.num_cuenta != '$num_cuenta'
or cont.adjunto_certif_bancaria != '$adjunto_certif_bancaria'
)

and cont.id_contratista = $id_contratista 
EOD;
                    //Ejecutar SQL
                    $records = CN_TABLE::executeSQL($sql);

                    $this->logMessage("Envio correo contratistas");

                    if (count($records) > 0) {
                        $tag_correo = true;
                    }
                }


                /**
                 * Actualiza rvc_contratista datos pago
                 */
                $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);



                /**
                 * Envio de correo si cambia la cuenta o banco
                 */
                //Sql
                $sql = <<<EOD
select distinct
cont.id_contratista,
cont.id_bn,
cont.tipo_cuenta,
cont.num_cuenta,
cont.adjunto_certif_bancaria,
                            
cont.id_tipo_doc,
cont.num_doc,
cont.razon_social,
cont.correo as correo,
'$correoEnvio' as email_envio,
'' as mensaje_extra,
'' as mensaje_firma,
'El contratista '|| cont.razon_social ||' identificado con '|| tipdoc.abreviacion ||' No. '|| cont.num_doc ||' ha efectuado cambio de cuenta bancaria por la siguiente:<br/>
<br/>
No. '|| cont.num_cuenta ||' <br/>
Tipo de cuenta '|| tstc.descripcion ||' <br/>
Banco:  '|| tsbn.DESCRIPCION ||' <br/>
<br/>
Se hace la solicitud teniendo en cuenta que el cambio aplicará una vez se efectúe el proceso de creación en el aplicativo SIIF Nación y/o SPGR,y la cuenta quede en estado ACTIVA para los siguientes pagos asociados con su contrato vigente '|| contra.num_contrato ||'. <br/>
Esta solicitud también es para inactivar la cuenta bancaria que se encuentre activa a la fecha.<br/>
<br/>
Se anexa soporte.' as mensaje,

--datos de envio
cont.num_doc as num_doc_env,
cont.id_tipo_doc as id_tipo_doc_env,
'Radicacion Presupuesto' as razon_social_env,
'$correoEnvioPresup' as correo_env
                            
from rvc_contratista_v cont

left join TIPO_DOCUMENTO tipdoc
on tipdoc.id_tipo_doc = cont.id_tipo_doc

left join ts_tc tstc
on tstc.id = cont.tipo_cuenta

left join ts_bn tsbn
on tsbn.id_bn = cont.id_bn

left join rvc_contrato contra
on contra.id_contratista = cont.id_contratista
and contra.estado = 1

where
cont.id_contratista = $id_contratista
EOD;
                //Ejecutar SQL
                $records = CN_TABLE::executeSQL($sql);

                $this->logMessage("Envio correo contratistas");

                if (count($records) > 0 && $tag_correo) {

                    $this->logMessage("ENTRO Envio correo contratistas");

                    $report_params = $records[0];
                    $id_contratista = $records[0]['id_contratista'];
                    $num_doc = $records[0]['num_doc'];
                    $razon_social = $records[0]['razon_social'];

                    //Ejemplo de la persona que se envia el correo: 
                    //123;1;pepito perez;correo@gmal.com
                    $num_doc_env = $records[0]['num_doc_env'];
                    $id_tipo_doc_env = $records[0]['id_tipo_doc_env'];
                    $razon_social_env = $records[0]['razon_social_env'];
                    $correo_env = $records[0]['correo_env'];
                    $datos_usuario = array(
                        '0' => $num_doc_env . ';' . $id_tipo_doc_env . ';' . $razon_social_env . ';' . $correo_env
                    );

                    $subject = "Actualización Información Bancaria - Contratista: $num_doc-$razon_social";
                    $currentUri = '';
                    $ruta = getcwd() . "/uploads/adj_contratistas";
                    $adjunto = true;
                    $progress_key = $request['comando'] . $request['username'];
                    $array_adjuntos = array(
                        $adjunto_certif_bancaria => $adjunto_certif_bancaria
                    );
                    $entidad_cliente = $entidadCliente;
                    $entidad_nombre = $entidadNombre;
                    $addAddress = true;

                    $this->logMessage("Subject: " . $subject);

                    CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                }

                $this->logMessage("FIN Envio correo");


                //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 :".$e->getMessage());
            }
        }

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

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

        return $request;
    }

}
