<?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_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')),
            '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'); //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'];

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

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

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

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

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

        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 {

                $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'];

                $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'];


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

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

                //SE CREA REGISTRO EN LA TABLA NO_CAUSA_VACAC
                /*
                 * 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 , 15,0,15)
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
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();

                $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);
                }
                $this->conn->commit();
                //LLAMA AL METODO QUE CREA FUNCIONARIOS EN EL SGR
                $this->crearTerceros($num_doc, $asignacion_basica);
                //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("[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.");

        $this->conn->beginTransaction();

        try {

            //CREAR TERCERO


            $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();
            //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());
        }
    }

}
