<?php

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

    protected $table_names = array(
        'NO_NOMBRAMIENTO_V',
        'NO_ESTADO_FUNC_V', //Se agrega para conocer el ultimo cargo que tiene(por el periodo activo) - 20150204
        'NO_DP_V',
        'NO_DATOS_FUNCIONARIO_V',
        'RH_SA_NIV2',
        'NO_PERIODO',
        'NO_TIPO_PERIODO',
        'NO_CLASE_PLANTA'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'NO_ESTADO_FUNC_V' =>
        array(
            'id_tipo_doc' => 'NO_NOMBRAMIENTO_V',
            'num_doc' => 'NO_NOMBRAMIENTO_V'
        ),
        'NO_DP_V' =>
        array(
            'id_dp' => 'NO_ESTADO_FUNC_V'
        ),
        'NO_DATOS_FUNCIONARIO_V' =>
        array(
            'id_tipo_doc' => 'NO_NOMBRAMIENTO_V',
            'num_doc' => 'NO_NOMBRAMIENTO_V'
        ),
        'RH_SA_NIV2' =>
        array(
            'id_sa_niv2' => 'NO_NOMBRAMIENTO_V'
        ),
        'NO_PERIODO' =>
        array(
            'id_periodo' => 'NO_NOMBRAMIENTO_V'
        ),
        'NO_TIPO_PERIODO' =>
        array(
            'id_tipo_periodo' => 'NO_PERIODO'
        ),
        'NO_CLASE_PLANTA,LEFT' =>
        array(
            'id_clase_planta' => 'NO_NOMBRAMIENTO_V'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'NO_NOMBRAMIENTO_V' =>
        array(
            'id_nombramiento' => 'id_nombramiento',
            'id_tipo_doc' => 'id_tipo_doc',
            'num_doc' => 'num_doc',
            'id_dp' => 'id_dp',
            'contrato' => 'contrato',
            'doc_nombra' => 'doc_nombra',
            'fecha_nombra' => 'fecha_nombra',
            'fecha_ingreso' => 'fecha_ingreso',
            'fecha_termina' => 'fecha_termina',
            'dias_mes' => 'dias_mes',
            'horas_mes' => 'horas_mes',
            'estado' => 'estado',
            'asignacion_basica' => 'asignacion_basica_nom',
            'id_sa_niv2' => 'id_sa_niv2',
            'id_periodo' => 'id_periodo',
            'id_clase_planta' => 'id_clase_planta',
            'fecha_retiro' => 'fecha_retiro',
            'solucion_continuidad' => 'solucion_continuidad',
            'no_acta' => 'no_acta',
            'fecha_acta' => 'fecha_acta',
            'num_meses' => 'num_meses'//campo nuevo de no. meses de contrato - 20210309
        ),
        'NO_DATOS_FUNCIONARIO_V' =>
        array(
            'nombre_completo' => 'nombre_completo'
        ),
        'NO_ESTADO_FUNC_V' =>
        array(
            'id_estado_func' => 'id_estado_func'
        ),
        'NO_DP_V' =>
        array(
            'id_cen_op' => 'id_cen_op',
            'centro' => 'centro',
            'area' => 'area',
            'nom_titular' => 'nom_titular',
            'nom_encarga' => 'nom_encarga',
            'naturaleza' => 'naturaleza',
            'componente' => 'componente',
            'asignacion_basica' => 'asignacion_basica'
        ),
        'RH_SA_NIV2' =>
        array(
            'nombre' => 'tipo_nombra'
        ),
        'NO_PERIODO' =>
        array(
            'id_meses' => 'id_meses',
            'id_anhos' => 'id_anhos'
        ),
        'NO_TIPO_PERIODO' =>
        array(
            'descripcion' => 'descripcion_periodo'
        ),
        'NO_CLASE_PLANTA' =>
        array(
            'codigo' => 'codigo_clase',
            'descripcion' => 'descripcion_clase'
        )
    ); //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(
        'NO_NOMBRAMIENTO_V' => array(
            'id_nombramiento,a' => array('!=' => array(-1)),
            'id_nombramiento,b' => array('=' => array('id_mae_fondos')),
            'id_dp' => array('=' => array('id_dp')),
            'id_tipo_doc' => array('=' => array('id_tipo_doc')),
            'num_doc' => array('=' => array('num_doc')),
            'id_periodo' => array('=' => array('id_periodo_filtro')),
            'estado' => array('=' => array('estado')),
            'id_clase_planta' => array('=' => array('id_clase_planta')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        ),
        'NO_ESTADO_FUNC_V' => array(
            'periodo' => array('=' => array('id_periodo'))
        )
    ); //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 $fields_orderBy = array(
        'num_doc'
    ); //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_nombramiento'; //identificador de la tabla
    protected $id_names = array('id_nombramiento'); //llave primaria
    protected $field_names = array('id_tipo_doc', 'num_doc', 'id_dp', 'contrato', 'doc_nombra', 'fecha_nombra', 'fecha_ingreso',
        'fecha_termina', 'dias_mes', 'horas_mes', 'estado', 'asignacion_basica', 'id_sa_niv2', 'id_periodo', 'id_clase_planta',
        'solucion_continuidad', 'no_acta', 'fecha_acta', 'num_meses'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'NO_NOMBRAMIENTO'; //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

    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_nombramiento'; //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;

        $id_nombramiento = $request['id_nombramiento'];
        $id_tipo_doc = $request['id_tipo_doc'];
        $num_doc = $request['num_doc'];
        $solucion_continuidad = 0;
        if (isset($request['solucion_continuidad']) && $request['solucion_continuidad'] == 'true') {
            $solucion_continuidad = 1;
        }

        /*
         *  Validar la operación, ya sea por SQL
         */
        //Si una persona esta nombrada en otro cargo,
        //no permite registrarse como nuevo - 20130516
        $sql = <<<EOD
select * from no_nombramiento 
    where id_tipo_doc = $id_tipo_doc and num_doc = '$num_doc' and estado = 1
EOD;

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

        if (count($results) > 0) {
            $errors['mensaje'] = "El funcionario ya esta registrado en algun Nombramiento. Favor Verificar funcionario.";
            $errors['servicio'] = "no_nombramiento";
        }

        /**
         * Validacion del primer nombramiento no puede ser de continuidad - 20230125::LAVILA
         */
        if ($solucion_continuidad == 1) {
            $sql = <<<EOD
SELECT
* 
FROM no_nombramiento
where id_tipo_doc = $id_tipo_doc and num_doc = '$num_doc' 
EOD;

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

            if (count($results) == 0) {
                $errors['mensaje'] = "El funcionario no puede registrarse con Solución de Continuidad. Favor Verificar funcionario.";
                $errors['servicio'] = "no_nombramiento";
            }
        }



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

        $id_nombramiento = $request['id_nombramiento'];

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

        $sql = <<<EOD
SELECT * FROM NO_NOMBRAMIENTO WHERE ID_NOMBRAMIENTO=$id_nombramiento
EOD;

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

        $num_doc = $results[0]['num_doc'];
        $id_tipo_doc = $results[0]['id_tipo_doc'];
        $id_periodo = $results[0]['id_periodo'];

        $sql = <<<EOD
SELECT * FROM NO_AFILIA_FONDO WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ID_PERIODO = $id_periodo AND ESTADO = 1
EOD;

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

        if (count($results) > 0) {
            $errors['mensaje'] = "El funcionario ya tiene registrado Afiliacion a Fondos. Favor Verificar antes de Anular";
            $errors['servicio'] = "no_nombramiento";
        }


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

            //Toma valores de no_param_gen - 20160614
            $sql = <<<EOD
select * from no_param_gen
where 
id_param_gen = 1 
EOD;

            $results = CN_TABLE::executeSQL($sql);
            $request['horas_mes'] = $results[0]['horas_contrato'];
            //Se verifica y valida correctamente no esta en la parametrica sino llega de GWT - 20230825::LAVILA
            //$solucion_continuidad = $results[0]['solucion_continuidad'];
            $solucion_continuidad = 0;
            if (isset($request['solucion_continuidad']) && $request['solucion_continuidad'] == 'true') {
                $solucion_continuidad = 1;
            }

            $id_sa_niv2 = $request['id_sa_niv2'];
            $id_dp = $request['id_dp'];
            $num_doc = $request['num_doc'];

            //Tabla de tipos de nombramiento / vinculacion - 20131008
            $sql = <<<EOD
SELECT * FROM rh_sa_niv2 where id_sa_niv2 = $id_sa_niv2 
EOD;

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

            $titular = 0;
            $encargado = 0;
            $cambia_tit_eng = 0;

            /*
             * Valida que hay registros - 20131008
             */
            if (count($results) > 0) {

                $titular = $results[0]['titular'];
                $encargado = $results[0]['encargado'];
                $cambia_tit_eng = $results[0]['cambia_tit_eng'];
            }

            $logger->info("Entro a preprocessRequest - Titular: " . $titular . " - Encargado: " . $encargado);

            /*
             * Cambio de id por campos en tabla RH_DP,
             * validacion para campos de titular y encargado - 20131008
             */
            // SI EL TIPO DE NOMBRAMIENTO ES NOMBRAMIENTO ORDINARIO => ID_SA_NIV2 IGUAL A 4
            // SE DEBE GUARDAR EN LA TABLA ID_DP
            // NUM_DOC EN EL CAMPO DE TITULAR
            // NUM_DOC EN EL CAMPO ENCARGADO
            if ($titular == 1 && $encargado == 1) {
                $sql = <<<EOD
UPDATE RH_DP SET TITULAR = '$num_doc', ENCARGADO = '$num_doc' WHERE ID_DP = $id_dp
EOD;
            } else if ($titular == 1 && $encargado == 0) {

                // SI EL TIPO DE NOMBRAMIENTO ES APROBACION PERIODO DE PRUEBA => ID_SA_NIV2 IGUAL A 2
                // SE DEBE GUARDAR EN LA TABLA ID_DP
                // NUM_DOC EN EL CAMPO DE TITULAR
                // NULL EN EL CAMPO ENCARGADO
                if ($cambia_tit_eng == 1) {
                    $sql = <<<EOD
UPDATE RH_DP SET TITULAR = '$num_doc', ENCARGADO = null WHERE ID_DP = $id_dp
EOD;
                } else {

                    // SI EL TIPO DE NOMBRAMIENTO ES NOMBRAMIENTO ORDINARIO CARRERA => ID_SA_NIV2 IGUAL A 23
                    // SE DEBE GUARDAR EN LA TABLA ID_DP
                    // NUM_DOC EN EL CAMPO DE TITULAR
                    $sql = <<<EOD
UPDATE RH_DP SET TITULAR = '$num_doc' WHERE ID_DP = $id_dp
EOD;
                }
            } else if ($titular == 0 && $encargado == 1) {

                // SI EL TIPO DE NOMBRAMIENTO ES PERIODO DE PRUEBA => ID_SA_NIV2 IGUAL A 1
                // SE DEBE GUARDAR EN LA TABLA ID_DP
                // NULL EN EL CAMPO DE TITULAR
                // NUM_DOC EN EL CAMPO ENCARGADO
                if ($cambia_tit_eng == 1) {
                    $sql = <<<EOD
UPDATE RH_DP SET TITULAR = null, ENCARGADO ='$num_doc' WHERE ID_DP = $id_dp
EOD;
                } else {

                    // SI EL TIPO DE NOMBRAMIENTO ES PROVISIONAL => ID_SA_NIV2 IGUAL A 10
                    // SE DEBE GUARDAR EN LA TABLA ID_DP
                    // NUM_DOC EN EL CAMPO ENCARGADO
                    $sql = <<<EOD
UPDATE RH_DP SET ENCARGADO ='$num_doc' WHERE ID_DP = $id_dp
EOD;
                }
            }

            CN_TABLE::executeSQL($sql);

            /*
              // SI EL TIPO DE NOMBRAMIENTO ES PERIODO DE PRUEBA => ID_SA_NIV2 IGUAL A 1
              // SE DEBE GUARDAR EN LA TABLA ID_DP
              // NULL EN EL CAMPO DE TITULAR
              // NUM_DOC EN EL CAMPO ENCARGADO
              if ($id_sa_niv2 == 1) {

              $sql = <<<EOD
              UPDATE RH_DP SET TITULAR = null, ENCARGADO ='$num_doc' WHERE ID_DP= $id_dp
              EOD;
              }

              // SI EL TIPO DE NOMBRAMIENTO ES APROBACION PERIODO DE PRUEBA => ID_SA_NIV2 IGUAL A 2
              // SE DEBE GUARDAR EN LA TABLA ID_DP
              // NUM_DOC EN EL CAMPO DE TITULAR
              // NULL EN EL CAMPO ENCARGADO
              if ($id_sa_niv2 == 2) {

              $sql = <<<EOD
              UPDATE RH_DP SET TITULAR = '$num_doc', ENCARGADO = null WHERE ID_DP= $id_dp
              EOD;
              }

              // SI EL TIPO DE NOMBRAMIENTO ES NOMBRAMIENTO ORDINARIO => ID_SA_NIV2 IGUAL A 4
              // SE DEBE GUARDAR EN LA TABLA ID_DP
              // NUM_DOC EN EL CAMPO DE TITULAR
              // NUM_DOC EN EL CAMPO ENCARGADO
              if ($id_sa_niv2 == 4) {

              $sql = <<<EOD
              UPDATE RH_DP SET TITULAR = '$num_doc', ENCARGADO = '$num_doc' WHERE ID_DP= $id_dp
              EOD;
              }

              // SI EL TIPO DE NOMBRAMIENTO ES PROVISIONAL => ID_SA_NIV2 IGUAL A 10
              // SE DEBE GUARDAR EN LA TABLA ID_DP
              // NUM_DOC EN EL CAMPO ENCARGADO
              if ($id_sa_niv2 == 10) {

              $sql = <<<EOD
              UPDATE RH_DP SET ENCARGADO = '$num_doc' WHERE ID_DP= $id_dp
              EOD;
              }

              // SI EL TIPO DE NOMBRAMIENTO ES NOMBRAMIENTO ORDINARIO CARRERA => ID_SA_NIV2 IGUAL A 23
              // SE DEBE GUARDAR EN LA TABLA ID_DP
              // NUM_DOC EN EL CAMPO DE TITULAR
              if ($id_sa_niv2 == 23) {

              $sql = <<<EOD
              UPDATE RH_DP SET TITULAR = '$num_doc' WHERE ID_DP= $id_dp
              EOD;
              }

              CN_TABLE::executeSQL($sql);
             */

            /**
             * Actualizar concepto_func por registros de un anterior empleo - 20141027
             */
            $sql = <<<EOD
update NO_CONCEPTO_FUNC set ESTADO = 0 , ACTUAL = 0 
where 
ID_TIPO_DOC = 1 AND NUM_DOC = $num_doc 
EOD;

            CN_TABLE::executeSQL($sql);

            /**
             * Se actualizan registros anteriores de otro empleo tabla NO_CAUSA_VACAC, para quitar dias de saldo - 20141027
             */
            $sql = <<<EOD
update NO_CAUSA_VACAC set DIAS_DISFRUTADOS = DIAS_DISFRUTADOS + SALDOS_DIAS, SALDOS_DIAS = 0
where 
ID_TIPO_DOC = 1 AND NUM_DOC = $num_doc 
and SALDOS_DIAS > 0 
EOD;

            if ($solucion_continuidad == 0) {
                CN_TABLE::executeSQL($sql);
            }
        }

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

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

            $id_nombramiento = $request['id_nombramiento'];

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


            $sql = <<<EOD
            INSERT INTO NO_ANUL_NOMBRAMIENTO (ID_TIPO_DOC,NUM_DOC,ID_DP,CONTRATO,DOC_NOMBRA,FECHA_NOMBRA,FECHA_INGRESO,FECHA_TERMINA,DIAS_MES,HORAS_MES,ESTADO,
ASIGNACION_BASICA,ID_SA_NIV2,ID_PERIODO,ID_CLASE_PLANTA,FECHA_RETIRO)

            SELECT ID_TIPO_DOC,NUM_DOC,ID_DP,CONTRATO,DOC_NOMBRA,FECHA_NOMBRA,FECHA_INGRESO,FECHA_TERMINA,DIAS_MES,HORAS_MES,ESTADO,
ASIGNACION_BASICA,ID_SA_NIV2,ID_PERIODO,ID_CLASE_PLANTA,FECHA_RETIRO
            FROM NO_NOMBRAMIENTO WHERE ID_NOMBRAMIENTO=$id_nombramiento
EOD;

            CN_TABLE::executeSQL($sql);

            $sql = <<<EOD
SELECT * FROM NO_NOMBRAMIENTO WHERE ID_NOMBRAMIENTO=$id_nombramiento
EOD;

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

            $num_doc = $results[0]['num_doc'];
            $id_tipo_doc = $results[0]['id_tipo_doc'];
            $id_periodo = $results[0]['id_periodo'];
            $id_dp = $results[0]['id_dp'];

            $sql = <<<EOD
DELETE FROM NO_ESTADO_FUNC 
    WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
        AND PERIODO in (SELECT ID_PERIODO FROM no_periodo where  ID_ANHOS = (SELECT ID_ANHOS FROM no_periodo where id_periodo = $id_periodo ) 
            and ID_MESES = (SELECT ID_MESES FROM no_periodo where id_periodo = $id_periodo ) and ID_TIPO_PERIODO in ( 1 , 2 ))
        AND ACTUAL = 1 
EOD;

            CN_TABLE::executeSQL($sql);

            $sql = <<<EOD
delete from no_nov_tip_nombra where ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ID_PERIODO = $id_periodo 
EOD;

            CN_TABLE::executeSQL($sql);

            $sql = <<<EOD
DELETE FROM NO_CONCEPTO_FUNC WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ESTADO = 1 AND ACTUAL = 1
EOD;

            CN_TABLE::executeSQL($sql);

            $sql = <<<EOD
DELETE FROM NO_CONCEPTO_PERIODO WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND PERIODO = $id_periodo
EOD;

            CN_TABLE::executeSQL($sql);

            $sql = <<<EOD
DELETE FROM NO_AFILIA_FONDO WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ID_PERIODO = $id_periodo
EOD;

            CN_TABLE::executeSQL($sql);

            $sql = <<<EOD
DELETE FROM NO_LIQUIDA_NOMINA WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ID_PERIODO = $id_periodo
EOD;

            CN_TABLE::executeSQL($sql);

            $sql = <<<EOD
           UPDATE RH_DP SET ENCARGADO = NULL, TITULAR= NULL WHERE ID_DP= $id_dp
EOD;

            CN_TABLE::executeSQL($sql);

            /**
             * Al anular elimna el procedimiento 2 de retefuente - 20150429
             */
            $sql = <<<EOD
DELETE FROM NO_NOVEDAD_PROCED_RETE WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ID_PERIODO = $id_periodo
EOD;

            CN_TABLE::executeSQL($sql);

            /**
             * Borra las causacion de vacaciones creadas posterior a la fecha del periodo - 20131021
             */
            $sql = <<<EOD
DELETE from no_causa_vacac WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
and fecha_ini >= to_date(  (select id_anhos ||'-'|| lpad(id_meses,2,'0') || '-01' from no_periodo where id_periodo = $id_periodo) ,'YYYY-MM-DD')
EOD;

            CN_TABLE::executeSQL($sql);

            /**
             * Inactiva bonificaciones anteriores - 20200617
             */
            $sql = <<<EOD
update NO_BONIFICA_SERVICIOS set estado = 0 
    where ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc and estado = 1 
EOD;

            CN_TABLE::executeSQL($sql);
        }

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

            /* $id_sa_niv2 = $list_data_post[0]['id_sa_niv2'];

             */

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

                $id_nombramiento = $list_data_post[0]['id_nombramiento'];
                $id_tipo_doc = $list_data_post[0]['id_tipo_doc'];
                $num_doc = $list_data_post[0]['num_doc'];
                $fecha_ingre = $list_data_post[0]['fecha_ingreso'];
                $fecha_hasta = $list_data_post[0]['fecha_termina'];
                $asignacion_basica = $list_data_post[0]['asignacion_basica'];
                $id_dp = $list_data_post[0]['id_dp'];
                $id_periodo = $list_data_post[0]['id_periodo'];
                $solucion_continuidad = $list_data_post[0]['solucion_continuidad'];
                $usuario = $request['username'];

                /*
                 * Colocarle en 0 el valor ultimo para las personas nuevas/retiradas - 20131211
                 * Se quita del cierre del periodo y se mueve al nombramiento, por el calculo del retro y sin continuidad - 20150625
                 */
                if ($solucion_continuidad == 0) {
                    $logger->info("Sin Continuidad");

                    $sql = <<<EOD
update NO_ULTIMO_VALOR set VALOR = 0 
where num_doc in ($num_doc) 
EOD;

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


                $sql = <<<EOD
            SELECT * FROM RH_DP WHERE ID_DP= $id_dp
EOD;

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

                $id_cen_op = $results[0]['id_cen_op'];
                if ($id_cen_op == "" || $id_cen_op == null)
                    $id_cen_op = "null";
                $id_ea = $results[0]['id_ea'];
                if ($id_ea == "" || $id_ea == null)
                    $id_ea = "null";


                //UNA VEZ CREADO EL NOMBRAMIENTO SE DEBE CREAR EL CONCEPTO DE ASIGNACION BASICA
                //SEGUN TABLA NO_PARAM_CONCEP SE REALIZA LA BUSQUEDA DEL CAMPO ID_CONCEP_BASICA
                $sql = <<<EOD
            SELECT ID_CONCEP_BASICA FROM NO_PARAM_CONCEP
EOD;

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

                $id_concep_basica = $results[0]['id_concep_basica'];

                $sql = <<<EOD
            SELECT * FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo 
EOD;
                $results = CN_TABLE::executeSQL($sql);

                $id_anhos = $results[0]['id_anhos'];
                $id_meses = $results[0]['id_meses'];
                $id_periodo = $results[0]['id_periodo'];
                $id_tipo_periodo = $results[0]['id_tipo_periodo'];

                $sql = <<<EOD
            SELECT * FROM NO_TIPO_PERIODO WHERE ID_TIPO_PERIODO = $id_tipo_periodo 
EOD;
                $results = CN_TABLE::executeSQL($sql);

                $num_dias = $results[0]['no_dias_mes'];

                /**
                 * Se omite no tomar la fecha de termina para actualizar la fecha_hasta de NO_CONCEPTO_FUNC, por las novedades de prorroga TC - 20210715::LAVILA
                 */
//                if (!is_null($fecha_hasta)) {
//                    $sql = <<<EOD
//            INSERT INTO NO_CONCEPTO_FUNC (ID_TIPO_DOC,NUM_DOC,ID_CONCEP_NOMINA,VALOR,ESTADO,ACTUAL,FECHA_DESDE,FECHA_HASTA)
//                VALUES($id_tipo_doc,$num_doc,$id_concep_basica,$asignacion_basica,1,1,to_date('$fecha_ingre','YYYY-MM-DD'),to_date('$fecha_hasta','YYYY-MM-DD'))
//EOD;
//                } else {
                $sql = <<<EOD
            INSERT INTO NO_CONCEPTO_FUNC (ID_TIPO_DOC,NUM_DOC,ID_CONCEP_NOMINA,VALOR,ESTADO,ACTUAL,FECHA_DESDE)
                VALUES($id_tipo_doc,$num_doc,$id_concep_basica,$asignacion_basica,1,1,to_date('$fecha_ingre','YYYY-MM-DD'))
EOD;
                //}
                $this->conn->execute($sql);

                $sql = <<<EOD
            INSERT INTO NO_CONCEPTO_PERIODO (ID_ANHOS,ID_MESES,PERIODO,ID_TIPO_DOC,NUM_DOC,ID_CONCEP_NOMINA,FECHA_DESDE,FECHA_HASTA,VALOR,NUM_DIAS)
                VALUES($id_anhos,$id_meses,$id_periodo,$id_tipo_doc,$num_doc,$id_concep_basica,to_date('$fecha_ingre','YYYY-MM-DD'),last_day(to_date('$fecha_ingre','YYYY-MM-DD')),$asignacion_basica,
                    ($num_dias - TO_NUMBER(to_char(to_date('$fecha_ingre','YYYY-MM-DD'),'DD')))+1)

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

                $sql = <<<EOD
            INSERT INTO NO_ESTADO_FUNC (ID_TIPO_DOC,NUM_DOC,ID_DP,ID_ANHOS,ID_MESES,PERIODO,ACTUAL,ID_CEN_OP,ID_EA)
                VALUES($id_tipo_doc,$num_doc,$id_dp,$id_anhos,$id_meses,$id_periodo,1,$id_cen_op,$id_ea)
EOD;
                $this->conn->execute($sql);

                //Valida si es nomina adicional - 20141027
                if ($id_tipo_periodo == 2) {

                    $sql = <<<EOD
SELECT ID_PERIODO FROM no_periodo where  ID_ANHOS = (SELECT ID_ANHOS FROM no_periodo where id_periodo = $id_periodo ) 
                    and ID_MESES = (SELECT ID_MESES FROM no_periodo where id_periodo = $id_periodo ) and ID_TIPO_PERIODO in ( 1 )
EOD;
                    $results = CN_TABLE::executeSQL($sql);

                    //valida que exista el periodo mensual - 20141027
                    if (count($results) > 0) {

                        /**
                         * Inserta un registro para el periodo mensual - 20141027
                         */
                        $sql = <<<EOD
            INSERT INTO NO_ESTADO_FUNC (ID_TIPO_DOC,NUM_DOC,ID_DP,ID_ANHOS,ID_MESES,PERIODO,ACTUAL,ID_CEN_OP,ID_EA)
                VALUES($id_tipo_doc,$num_doc,$id_dp,$id_anhos,$id_meses,
                (SELECT ID_PERIODO FROM no_periodo where  ID_ANHOS = (SELECT ID_ANHOS FROM no_periodo where id_periodo = $id_periodo ) 
                    and ID_MESES = (SELECT ID_MESES FROM no_periodo where id_periodo = $id_periodo ) and ID_TIPO_PERIODO in ( 1 ))    
                ,1,$id_cen_op,$id_ea)
EOD;
                        $this->conn->execute($sql);
                    }
                }

                //Se valida que tenga parametrizado concepto de bonificacion para poder generar registro - 20200513::LAVILA
                $sql = <<<EOD
SELECT id_concep_bonif FROM no_param_concep 
where id_concep_bonif is not null 
EOD;
                $results_concep_bonif = CN_TABLE::executeSQL($sql);

                //valida que exista el periodo mensual - 20141027
                if (count($results_concep_bonif) > 0) {
                    //SE CREA REGISTRO EN LA TABLA DE BONIFICACION POR SERVICIOS
                    $sql = <<<EOD
INSERT INTO NO_BONIFICA_SERVICIOS (ID_TIPO_DOC,NUM_DOC,FECHA_INGRESA,FECHA_BONIFICA,ESTADO,ID_PERIODO)
    VALUES($id_tipo_doc,$num_doc,to_date('$fecha_ingre','YYYY-MM-DD'),to_date('$fecha_ingre','YYYY-MM-DD') + interval '1' year,1,$id_periodo)
EOD;
                    if ($solucion_continuidad == 0) {
                        $logger->info("Sin Continuidad NO_BONIFICA_SERVICIOS");
                        $this->conn->execute($sql);
                    }
                }

                //SE CREA REGISTRO EN LA TABLA NO_CAUSA_VACAC
                $num_dias_vac = 15;
                if ($entidadCliente == 9) {
                    $num_dias_vac = 25; //dias cev publica - 20191126
                }
                /*
                 * Se agrego al crear nombramiento la causacion de vacaciones - 20130905
                 */
                $sql = <<<EOD
INSERT INTO NO_CAUSA_VACAC (ID_TIPO_DOC,NUM_DOC,FECHA_INI,FECHA_FIN,NUM_DIAS,DIAS_DISFRUTADOS,SALDOS_DIAS)
    VALUES($id_tipo_doc,$num_doc,to_date('$fecha_ingre','YYYY-MM-DD'), (to_date('$fecha_ingre','YYYY-MM-DD') + interval '1' year) - 1 , $num_dias_vac,0,$num_dias_vac)
EOD;

                if ($solucion_continuidad == 0) {
                    $logger->info("Sin Continuidad NO_CAUSA_VACAC");
                    $this->conn->execute($sql);
                }

                /**
                 * Al crear el funcionario en el nombramiento crea el procedimiento 2 de retefuente - 20150429
                 * Al crear el funcionario en el nombramiento crea el procedimiento 1 de retefuente - 20190218
                 */
                $sql = <<<EOD
Insert into NO_NOVEDAD_PROCED_RETE (ID_NOVEDAD_PROCED_RETE,ID_TIPO_DOC,NUM_DOC,ID_TIPO_PROCED_RETE,ID_PERIODO,
    OBSERVACION,FECHA_INICIAL,FECHA_TERMINACION,DECLARA_RENTA,ESTADO) 
    values (null,$id_tipo_doc,'$num_doc','1',$id_periodo,'Registro Procedimiento 1 por Nombramiento',to_date('$fecha_ingre','YYYY-MM-DD'),null,0,1) 
EOD;

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

                //VERIFICAR SI SE ADICIONA CONCEPTOS ASOCIADOS A LA ASIGNACION BASICA

                $sql = <<<EOD
SELECT * FROM NO_CONCEP_AB WHERE ESTADO = 1
and id_concep_nomina not in (select no_param_concep.id_concep_bonif from no_param_concep)                         
EOD;
                $results = CN_TABLE::executeSQL($sql);

                if (count($results) > 0) {

                    //RECORRO CADA UNO DE LOS CONCEPTOS QUE ESTEN ASOCIADOS

                    foreach ($results as $conceptos) {

                        $rango_minimo = $conceptos['rango_minimo'];
                        $rango_maximo = $conceptos['rango_maximo'];
                        $id_concep_ab = $conceptos['id_concep_nomina'];
                        $valor_fijo = $conceptos['valor_fijo'];

                        if ($asignacion_basica >= $rango_minimo && $asignacion_basica <= $rango_maximo) {

                            $logger->info("-----ENTRE A GUARDAR CONCEPTOS DE ASIGNACION------------- ");

                            $sql = <<<EOD
            INSERT INTO NO_CONCEPTO_FUNC (ID_TIPO_DOC,NUM_DOC,ID_CONCEP_NOMINA,VALOR,ESTADO,ACTUAL,FECHA_DESDE)
                VALUES($id_tipo_doc,$num_doc,$id_concep_ab,$valor_fijo,1,1,to_date('$fecha_ingre','YYYY-MM-DD'))
EOD;

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

                            $sql = <<<EOD
            INSERT INTO NO_CONCEPTO_PERIODO (ID_ANHOS,ID_MESES,PERIODO,ID_TIPO_DOC,NUM_DOC,ID_CONCEP_NOMINA,FECHA_DESDE,FECHA_HASTA,VALOR,NUM_DIAS)
                VALUES($id_anhos,$id_meses,$id_periodo,$id_tipo_doc,$num_doc,$id_concep_ab,to_date('$fecha_ingre','YYYY-MM-DD'),last_day(to_date('$fecha_ingre','YYYY-MM-DD')),$valor_fijo,
                    $num_dias - TO_NUMBER(to_char(to_date('$fecha_ingre','YYYY-MM-DD'),'DD')) +1)
EOD;
                            $this->conn->execute($sql);
                        }
                    }
                }


                $this->conn->commit();

                /**
                 * Al nombrar una persona en diciembre se coloca para liqudiacion de prima de navidad concepto 1017, 
                 * por los dias proporcionales a diciembre 31,
                 * quemado id con el codigo 1017 - 20151221
                 */
                $this->conn->beginTransaction();

                if ($id_meses == 12) {

                    $sql = <<<EOD
INSERT INTO NO_CONCEPTO_PERIODO (ID_ANHOS,ID_MESES,PERIODO,ID_TIPO_DOC,NUM_DOC,ID_CONCEP_NOMINA,FECHA_DESDE,FECHA_HASTA,VALOR,NUM_DIAS)
    VALUES($id_anhos,$id_meses,$id_periodo,$id_tipo_doc,$num_doc, nvl((select id_concep_nomina from no_concep_nomina where codigo = '1017'),17),
to_date('$fecha_ingre','YYYY-MM-DD'),last_day(to_date('$fecha_ingre','YYYY-MM-DD')), null,
    $num_dias - TO_NUMBER(to_char(to_date('$fecha_ingre','YYYY-MM-DD'),'DD')) +1)
EOD;
                    $this->conn->execute($sql);
                }

                $this->conn->commit();

                $this->conn->beginTransaction();

                //CREAR FUNCIONARIO EN EL MAESTRO DE TERCEROS DE TESORERIA Y DE COMISIONES

                $sql = <<<EOD
            SELECT * FROM NO_DATOS_FUNCIONARIO_V WHERE NUM_DOC = $num_doc
EOD;
                $results = CN_TABLE::executeSQL($sql);

                $primer_nombre = $results[0]['primer_nombre'];
                $segundo_nombre = $results[0]['segundo_nombre'];
                $primer_apellido = $results[0]['primer_apellido'];
                $segundo_apellido = $results[0]['segundo_apellido'];
                $nombre_completo = $results[0]['nombre_apellido'];
                $email = $results[0]['email'];

                //COMISIONES
                $sql = <<<EOD
SELECT * FROM TERCEROS WHERE NITOCC = '$num_doc'
EOD;
                $results = CN_TABLE::executeSQL($sql);

                if (count($results) == 0) {

                    $sql = <<<EOD
            INSERT INTO TERCEROS (NITOCC,TIPTER,RAZSOC,ESTADO,EMAIL,SUELDO,CODREG,ID_TIPO_TRABA_CONTRA)
                VALUES($num_doc,'02','$nombre_completo',1,'$email',$asignacion_basica,00,3)
EOD;
                    $this->conn->execute($sql);
                } else {

                    $sql = <<<EOD
                UPDATE TERCEROS SET TIPTER='02', EMAIL= '$email', sueldo = $asignacion_basica
                          WHERE NITOCC = $num_doc
EOD;
                    $this->conn->execute($sql);
                }

                $this->conn->commit();
                $logger->info("COMMIT DE TODAS LAS TRANSACCIONES.");

                $this->conn->beginTransaction();
                //TESORERIA

                $sql = <<<EOD
SELECT * FROM INTERCEROS WHERE NUM_DOC = '$num_doc'
EOD;
                $results = CN_TABLE::executeSQL($sql);

                if (count($results) == 0) {

                    $sql = <<<EOD
            INSERT INTO INTERCEROS (ID_NAT_JUR,ID_TIP_TER,ID_TIPO_DOC,NUM_DOC,PNOMBRE,SNOMBRE,ESTADO_TER,PAPELLIDO,SAPELLIDO)
                VALUES(22,1,1,'$num_doc','$primer_nombre','$segundo_nombre',1,'$primer_apellido','$segundo_apellido')
EOD;
                    $this->conn->execute($sql);

                    $this->conn->commit();

                    $this->conn->beginTransaction();

                    $sql = <<<EOD
SELECT ID_MAE_TER FROM INTERCEROS WHERE NUM_DOC = '$num_doc'
EOD;
                    $results = CN_TABLE::executeSQL($sql);

                    $id_mae_ter = $results[0]['id_mae_ter'];

                    $sql = <<<EOD
            INSERT INTO INTERCER_DU (ID_MAE_TER,MAIL)
                VALUES($id_mae_ter,'$email')
EOD;
                    $this->conn->execute($sql);
                }

                /**
                 * Incidente #39921, registro de convocatoria - 20250515::LAVILA
                 */
                $sql = <<<EOD
update no_cargo_convocatoria set estado = 0, fecha_anu = trunc(sysdate), usuario_anu = '$usuario', id_nombramiento = $id_nombramiento 
    where id_cargo_convocatoria in (select id_cargo_convocatoria from rh_dp where id_dp = $id_dp) and estado = 1 
EOD;
                $this->conn->execute($sql);

                $sql = <<<EOD
update rh_dp set id_cargo_convocatoria = '' where id_dp = $id_dp
EOD;
                $this->conn->execute($sql);

                //COMMIT DE TODAS LAS TRANSACCIONES
                $this->conn->commit();
                //LLAMA AL METODO QUE CREA FUNCIONARIOS EN EL SGR
                $this->crearTerceros($num_doc, $asignacion_basica);
            } catch (Exception $e) {
                //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
                $this->conn->rollback();
                $logger->info("[Exception] ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR.");
                $logger->info("[Exception] " . $e->getMessage());
            } catch (PDOException $e) {
                $this->conn->rollback();
                $logger->info("[PDOException] ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR.");
                $logger->info("[PDOException] " . $e->getMessage());
            }
        }

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

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

        return $request;
    }

    /**
     * Crea Funcionarios en el SGR
     * @param type $asignacion_basica
     * @param type $num_doc
     */
    public function crearTerceros($num_doc, $asignacion_basica) {

        $logger = sfContext::getInstance()->getLogger();
        $logger->info("[crearTerceros] Actualiza sueldos del ERP_SGR.");

        /*
         * (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;
        $entidadCliente = 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++;
        }

        $this->conn->beginTransaction();

        try {

            //CREAR TERCERO


            /*
             * Verifica la entidad - 20151022
             */
            if ($entidadCliente == 1 || $entidadCliente == 2) {//SGR
                $sql = <<<EOD
SELECT * FROM NO_DATOS_FUNCIONARIO_V WHERE NUM_DOC = $num_doc
EOD;
                $results = CN_TABLE::executeSQL($sql);

                $primer_nombre = $results[0]['primer_nombre'];
                $segundo_nombre = $results[0]['segundo_nombre'];
                $primer_apellido = $results[0]['primer_apellido'];
                $segundo_apellido = $results[0]['segundo_apellido'];
                $nombre_completo = $results[0]['nombre_apellido'];
                $email = $results[0]['email'];

                //COMISIONES
                $sql = <<<EOD
SELECT * FROM ERP_SGR.TERCEROS WHERE NITOCC = '$num_doc'
EOD;
                $results = CN_TABLE::executeSQL($sql);

                if (count($results) == 0) {

                    $sql = <<<EOD
INSERT INTO ERP_SGR.TERCEROS (NITOCC,TIPTER,RAZSOC,ESTADO,EMAIL,SUELDO,CODREG,ID_TIPO_TRABA_CONTRA)
    VALUES($num_doc,'02','$nombre_completo',1,'$email',$asignacion_basica,00,3)
EOD;
                    $this->conn->execute($sql);
                } else {

                    $sql = <<<EOD
UPDATE ERP_SGR.TERCEROS SET TIPTER='02', EMAIL= '$email', sueldo = $asignacion_basica
          WHERE NITOCC = $num_doc
EOD;
                    $this->conn->execute($sql);
                }
            }
            $this->conn->commit();

            $this->conn->beginTransaction();
            /*
             * Verifica la entidad - 20151022
             */
            if ($entidadCliente == 5) {//CONTROL COMISIONES
                //ACTUALIZAR SUELDOS DE CONTROL DE COMISIONES
                $sql = <<<EOD
select 
confunc.id_tipo_doc,
confunc.num_doc,
confunc.valor,
confunc.fecha_desde,
nom.estado,
nom.fecha_retiro,
ter.num_doc as num,
ter.sueldo,
ter.estado as est,
confunc.valor - ter.sueldo as dif,
tab.valor as val,
confunc.valor - tab.valor as dif_new,
dat.primer_nombre || ' ' || dat.segundo_nombre || ' ' || dat.primer_apellido || ' ' || dat.segundo_apellido as nom,
dat.email,
dat.fecha_nace

from no_concepto_func confunc

left join datos_funcionario dat
on dat.id_tipo_doc = confunc.id_tipo_doc and dat.num_doc = confunc.num_doc
left join no_nombramiento_v nom
on nom.id_tipo_doc = confunc.id_tipo_doc and nom.num_doc = confunc.num_doc
left join com_tercero ter
on ter.num_doc = confunc.num_doc

left join (

    select 
    confunc.id_tipo_doc,
    confunc.num_doc,
    round(sum(confunc.valor)) as valor
    from no_concepto_func confunc
    where confunc.estado = 1
    and confunc.id_concep_nomina in (select id_concep_nomina from no_agrup_deta where no_agrup_deta.id_agrup_concepto = 89)
    group by
    confunc.id_tipo_doc,
    confunc.num_doc

)tab
on tab.num_doc = confunc.num_doc
and tab.id_tipo_doc = confunc.id_tipo_doc

where confunc.id_concep_nomina = 1
and confunc.num_doc = $num_doc
and confunc.actual = 1
and confunc.estado = 1
order by
confunc.num_doc  
EOD;
                $results = CN_TABLE::executeSQL($sql);

                //CONTROL DE COMISIONES
                $sql = <<<EOD
SELECT * FROM COM_TERCERO WHERE NUM_DOC = '$num_doc'
EOD;
                $results_com = CN_TABLE::executeSQL($sql);

                //verifica que exista
                if (count($results_com) == 0) {
                    if (count($results) > 0) {

                        //datos de la consulta
                        $asignacion_basica = $results[0]['val'];
                        $nom = $results[0]['nom'];
                        $email = $results[0]['email'];

                        $sql = <<<EOD
Insert into COM_TERCERO (ID_TERCERO,NOMBRE,EMAIL,NUM_DOC,ESTADO,SUELDO,TIPTER,TELEFONO,CELULAR,
    BANCO,NUMERO_CUENTA,TIPO_CUENTA,CARGO,ID_TIPO_DOC,NUMERO_CONTRATO,APLICA_IVA,PORCENTAJE_IVA,FECHA_NACIMIENTO) 
values (null,'$nom','$email','$num_doc',1,$asignacion_basica,'01',null,null,
    null,null,null,null,1,null,0,null,null) 
EOD;
                        $this->conn->execute($sql);
                    }
                } else {

                    $sql = <<<EOD
UPDATE COM_TERCERO SET SUELDO = $asignacion_basica WHERE NUM_DOC = '$num_doc' 
EOD;
                    $this->conn->execute($sql);
                }
            }
            $this->conn->commit();

            /* YA no es necesario, ya que se actualiza desde oracle triggers - 20151021
              $this->conn->beginTransaction();
              //TESORERIA

              $sql = <<<EOD
              SELECT * FROM ERP_SGR.INTERCEROS WHERE NUM_DOC = '$num_doc'
              EOD;
              $results = CN_TABLE::executeSQL($sql);

              if (count($results) == 0) {

              $sql = <<<EOD
              INSERT INTO ERP_SGR.INTERCEROS (ID_NAT_JUR,ID_TIP_TER,ID_TIPO_DOC,NUM_DOC,PNOMBRE,SNOMBRE,ESTADO_TER,PAPELLIDO,SAPELLIDO)
              VALUES(22,1,1,'$num_doc','$primer_nombre','$segundo_nombre',1,'$primer_apellido','$segundo_apellido')
              EOD;
              $this->conn->execute($sql);

              $this->conn->commit();

              $this->conn->beginTransaction();

              $sql = <<<EOD
              SELECT ID_MAE_TER FROM ERP_SGR.INTERCEROS WHERE NUM_DOC = '$num_doc'
              EOD;
              $results = CN_TABLE::executeSQL($sql);

              $id_mae_ter = $results[0]['id_mae_ter'];

              $sql = <<<EOD
              INSERT INTO ERP_SGR.INTERCER_DU (ID_MAE_TER,MAIL)
              VALUES($id_mae_ter,'$email')
              EOD;
              $this->conn->execute($sql);
              }
              $this->conn->commit();
              //COMMIT DE TODAS LAS TRANSACCIONES */
            $logger->info("[crearTerceros] 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("[crearTerceros Exception] ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR.");
            $logger->info("[crearTerceros Exception] " . $e->getMessage());
        } catch (PDOException $e) {
            $this->conn->rollback();
            $logger->info("[crearTerceros PDOException] ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR.");
            $logger->info("[crearTerceros PDOException] " . $e->getMessage());
        }
    }
}
