<?php

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

    protected $table_names = array(
        'NO_NOV_PERSONAL_V',
        'NO_NOVEDADES',
        'NO_DATOS_FUNCIONARIO_V'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'NO_NOVEDADES' =>
        array(
            'id_novedad' => 'NO_NOV_PERSONAL_V'
        ),
        'NO_DATOS_FUNCIONARIO_V' =>
        array(
            'id_tipo_doc' => 'NO_NOV_PERSONAL_V',
            'num_doc' => 'NO_NOV_PERSONAL_V'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'NO_NOV_PERSONAL_V' =>
        array(
            'id_novedad_personal' => 'id_novedad_personal',
            'id_tipo_doc' => 'id_tipo_doc',
            'num_doc' => 'num_doc',
            'id_novedad' => 'id_novedad',
            'fecha_inicial' => 'fecha_inicial',
            'fecha_terminacion' => 'fecha_terminacion',
            'doc_soporte' => 'doc_soporte',
            'fecha_soporte' => 'fecha_soporte',
            'id_dp_ini' => 'id_dp_ini',
            'id_dp_fin' => 'id_dp_fin',
            'cargo1' => 'cargo1',
            'cargo2' => 'cargo2',
            'id_periodo' => 'id_periodo',
            'estado' => 'estado'
        ),
        'NO_NOVEDADES' =>
        array(
            'codigo' => 'codigo_novedad',
            'descripcion' => 'descripcion_novedad',
            'codigo,||, - ,||,descripcion' => 'completo_novedad'
        ),
        'NO_DATOS_FUNCIONARIO_V' =>
        array(
            'nombre_completo' => 'nombre_completo'
        )
    ); //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_NOV_PERSONAL_V' => array(
            'id_novedad_personal,a' => array('!=' => array(-1)),
            'id_novedad_personal,b' => array('=' => array('id_novedad_personal')),
            'id_novedad' => array('=' => array('id_novedad')),
            'num_doc' => array('=' => array('num_doc')),
            'id_tipo_doc' => array('=' => array('id_tipo_doc')),
            'id_periodo' => array('=' => array('id_periodo_filtro')),
            'estado' => array('=' => array('estado')),
            '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 $fields_orderBy = array(
        'nombre_completo'
    ); //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_personal'; //identificador de la tabla
    protected $id_names = array('id_novedad_personal'); //llave primaria
    protected $field_names = array('id_tipo_doc', 'num_doc', 'id_novedad', 'fecha_inicial', 'fecha_terminacion', 'doc_soporte', 'fecha_soporte',
        'id_dp_ini', 'id_dp_fin', 'id_periodo', 'num_doc', 'estado', 'id_novedad_ajuste'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'NO_NOVEDAD_PERSONAL'; //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_novedad_personal'; //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;

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Update
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateUpdate(sfWebRequest $request) {

//valor por defecto
        $errors = null;

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

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

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

//Validación para el tipo de novedad, no aplica para retiro esta no actualiza salario, solo estado - 20130828
        $asignacion_basica = 0;

        /*
         * Procesar Request
         */
//accion add
        if ($Action == "ADD") {

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

            try {

                $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_inicial'];
                $fecha_hasta = $list_data_post[0]['fecha_terminacion'];
                $id_dp = $list_data_post[0]['id_dp_fin'];
                $id_dp_ini = $list_data_post[0]['id_dp_ini'];
                $id_periodo = $list_data_post[0]['id_periodo'];
                $id_novedad = $list_data_post[0]['id_novedad'];
                $id_novedad_ajuste = $list_data_post[0]['id_novedad_ajuste'];

                $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'];
                $fecha_desde_periodo = $results[0]['fecha_ini'];
                $fecha_desde_periodo = explode(' ', $fecha_desde_periodo);
                $fecha_desde_periodo = $fecha_desde_periodo[0];
                $fecha_hasta_periodo = $results[0]['fecha_fin'];
                $fecha_hasta_periodo = explode(' ', $fecha_hasta_periodo);
                $fecha_hasta_periodo = $fecha_hasta_periodo[0];

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

//ENCARGO - COMISION
                if ($id_novedad == 3 || $id_novedad == 7) {

                    $sql = <<<EOD
            SELECT ID_CONCEP_BASICA FROM NO_PARAM_CONCEP
EOD;

                    $results = CN_TABLE::executeSQL($sql);
//CONCEPTO DE ASIGNACION BASICA
                    $id_concep_basica = $results[0]['id_concep_basica'];

// AB del cargo anterior - 20141106
                    $sql = <<<EOD
SELECT ASIGNACION_BASICA, ID_CEN_OP, ID_EA FROM NO_DP_V WHERE ID_DP = $id_dp_ini
EOD;
                    $results = CN_TABLE::executeSQL($sql);
//ASIGNACION BASICA DEL NUEVO CARGO
                    $asignacion_basica_ant = $results[0]['asignacion_basica'];

                    $sql = <<<EOD
            SELECT ASIGNACION_BASICA, ID_CEN_OP, ID_EA FROM NO_DP_V WHERE ID_DP = $id_dp
EOD;
                    $results = CN_TABLE::executeSQL($sql);
//ASIGNACION BASICA DEL NUEVO CARGO
                    $asignacion_basica = $results[0]['asignacion_basica'];
                    $id_cen_op = $results[0]['id_cen_op'];
                    $id_ea = $results[0]['id_ea'];

//BUSCO EN LA TABLA NO_CONCEPTO_FUNC EL CONCEPTO DE ASIGNACION ACTUAL Y PONGO ESTADO = 0 Y ACTUAL = 0
                    /**
                     * Solo al concepto actual -20140930 
                     */
                    $sql = <<<EOD
UPDATE NO_CONCEPTO_FUNC SET ESTADO = 0, ACTUAL = 0,
       fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD') - 1
    WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ID_CONCEP_NOMINA = $id_concep_basica
    and actual = 1                        
EOD;

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

//CREO EL NUEVO REGISTRO EN LA TABLA NO_CONCEPTO_FUNC

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

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

//BUSCO EN LA TABLA NO_ESTADO_FUNC EL ESTADO ACTUAL Y LE PONGO ACTUAL = 0
                    /**
                     * Se cambia por el registro del periodo 
                     */
                    $sql = <<<EOD
            UPDATE NO_ESTADO_FUNC SET ACTUAL = 0 WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND PERIODO = $id_periodo
EOD;

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


//CREO EL NUEVO REGISTRO EN LA TABLA NO_CONCEPTO_FUNC

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



                    /**
                     * Validar fecha de inicio de la novedad - 20140930
                     */
                    $date1 = new DateTime($fecha_ingre);
                    $date2 = new DateTime($fecha_hasta);
                    $date3 = new DateTime($fecha_hasta_periodo);
                    $date4 = new DateTime($fecha_desde_periodo);

                    if ($date1 >= $date4 && $date1 <= $date3) {

                        $logger->info("Fecha inicial de la novedad en el periodo a liquidar");

//ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO LA FECHA FINAL DE LA ULTIMA NOVEDAD A LA 
//FECHA INMEDIATAMENTE ANTERIOR A LA FECHA INICIAL DE LA NUEVA NOVEDAD
                        /**
                         * Tomar los dias entre las fechas DIAS_RANGO_MES_SIN_TREINTAYUNO - 20140930
                         */
                        $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1, 
   -- num_dias = $num_dias - ( ($num_dias - TO_NUMBER(to_char(to_date('$fecha_ingre','YYYY-MM-DD'),'DD'))) + 1 )
      num_dias = DIAS_RANGO_MES_SIN_TREINTAYUNO(fecha_desde, to_date('$fecha_ingre','YYYY-MM-DD')-1, $id_meses) 
                                
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

    from no_concepto_periodo conc

    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

) 
EOD;

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


                        /**
                         * Borrar registro si la fecha desde es menor a la fecha hasta, para controlar registros de doble encargo - 20140930
                         */
//                        $sql = <<<EOD
//delete from NO_CONCEPTO_PERIODO 
//WHERE id_concepto_periodo IN(
//
//    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO
//
//    from no_concepto_periodo conc
//
//    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
//        and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo
//
//)
//and no_concepto_periodo.fecha_hasta < no_concepto_periodo.fecha_desde
//EOD;
//                        $this->conn->execute($sql);
//CREO EL NUEVO REGISTRO DE NO_CONCEPTO_PERIODO

                        $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);
                    } elseif ($date1 < $date4) {

                        $logger->info("Fecha inicial antes del periodo a liquidar");


//ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO el valor - 20140930

                        $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO SET  
    valor = $asignacion_basica         
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO
    from no_concepto_periodo conc
    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)
EOD;

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


                        /**
                         * Ajustar el valor correspondiente con el ingreso de un ajuste del nuevo salario 
                         * y el reintegro del sueldo anterior. - 20141106
                         */
//Ajuste AB
                        $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,
        (select nvl(ID_CONCEP_AJUSTE ,ID_CONCEP_NOMINA ) as ID_CONCEP_AJUSTE from no_concep_nomina where ID_CONCEP_NOMINA = $id_concep_basica ),
        to_date('$fecha_ingre','YYYY-MM-DD'),
        to_date('$fecha_desde_periodo','YYYY-MM-DD')-1,$asignacion_basica,
        (FECHA_RANGO_SIN_TREINTAYUNO(to_date('$fecha_ingre','yyyy-mm-dd'),to_date('$fecha_desde_periodo','yyyy-mm-dd')-1 ))
    )                             
EOD;


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

//Reintegro AB
                        $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,
        (select nvl(ID_CONCEP_REIN ,ID_CONCEP_NOMINA ) as ID_CONCEP_REIN from no_concep_nomina where ID_CONCEP_NOMINA = $id_concep_basica ),
        to_date('$fecha_ingre','YYYY-MM-DD'),
        to_date('$fecha_desde_periodo','YYYY-MM-DD')-1,$asignacion_basica_ant,
        (FECHA_RANGO_SIN_TREINTAYUNO(to_date('$fecha_ingre','yyyy-mm-dd'),to_date('$fecha_desde_periodo','yyyy-mm-dd')-1 ))
    ) 
EOD;


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



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

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

                    $sql = <<<EOD
            UPDATE RH_DP SET ENCARGADO = null, TITULAR = null WHERE ID_DP= $id_dp_ini
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'];
//SI PARA LA ASIGNACION BASICA LE CORRESPONDEN LOS CONCEPTOS
                            if ($asignacion_basica >= $rango_minimo && $asignacion_basica <= $rango_maximo) {

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

                                $sql = <<<EOD
            SELECT * FROM NO_CONCEPTO_FUNC WHERE ID_CONCEP_NOMINA = $id_concep_ab AND ID_TIPO_DOC = $id_tipo_doc
                                    AND NUM_DOC = $num_doc AND ACTUAL = 1 AND ESTADO = 1
EOD;

                                $results = CN_TABLE::executeSQL($sql);
//VERIFICO QUE NO LOS TENGA, SI NO, ENTONCES SE LOS CREO EN NO_CONCEPTO_FUNC Y EN NO_CONCEPTO_PERIODO
                                if (count($results) == 0) {

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

//validar que la fecha no supere el inicio del periodo - 20140930
                                    if ($date1 < $date4) {
                                        $fecha_ingre = $fecha_desde_periodo;
                                    }


                                    $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);
                                }
                            } else {
//SI PARA LA ASIGNACION BASICA NO LE CORRESPONDEN LOS CONCEPTOS

                                $sql = <<<EOD
            SELECT * FROM NO_CONCEPTO_FUNC WHERE ID_CONCEP_NOMINA = $id_concep_ab AND ID_TIPO_DOC = $id_tipo_doc
                                    AND NUM_DOC = $num_doc AND ACTUAL = 1 AND ESTADO = 1
EOD;

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

//VERIFICO SI TIENE CREADOS LOS CONCEPTOS, SI LOS TIENE LOS INHABILITO
                                if (count($results) > 0) {

                                    $sql = <<<EOD
            UPDATE NO_CONCEPTO_FUNC SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1 
                WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ID_CONCEP_NOMINA = $id_concep_ab
EOD;

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

//validar que la fecha no supere el inicio del periodo - 20140930
                                    if ($date1 < $date4) {


                                        $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO 
    SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1,
      num_dias =  0                      
        
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

    from no_concepto_periodo conc

    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_ab and conc.periodo = $id_periodo

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

                                        $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO 
    SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1,
      num_dias =  case when ((to_date('$fecha_ingre','YYYY-MM-DD')-1)-fecha_desde + 1) > 30 
          then 30 else (to_date('$fecha_ingre','YYYY-MM-DD')-1-fecha_desde + 1) end                           
        
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

    from no_concepto_periodo conc

    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_ab and conc.periodo = $id_periodo

) 
EOD;
                                        $this->conn->execute($sql);
                                    }
                                }
                            }
                        }
                    }
                }//FIN ENCARGO
//RETIRO
                else if ($id_novedad == 1) {

// Agrupacion de concepto para retiro Trello Nomina Card #92 - 20130617
                    $id_agrup_concep = 104;

                    $sql = <<<EOD
SELECT ID_CONCEP_BASICA FROM NO_PARAM_CONCEP
EOD;

                    $results = CN_TABLE::executeSQL($sql);
//CONCEPTO DE ASIGNACION BASICA
                    $id_concep_basica = $results[0]['id_concep_basica'];


                    /*
                     * BUSCO EN LA TABLA NO_CONCEPTO_FUNC EL CONCEPTO DE ASIGNACION ACTUAL 
                     * Y PONGO ESTADO = 0 Y ACTUAL = 0
                     * Se actualiza fecha_hasta solo cuando es nula, se coloca la de retiro 
                     * y que los conceptos de la agrupacion 104 no se cambien el estado o actual a 0 - 20130508
                     */
                    $sql = <<<EOD
update no_concepto_func set 
    estado = case when id_concep_nomina in (select det.ID_CONCEP_NOMINA from NO_AGRUP_DETA det where DET.ID_AGRUP_CONCEPTO = $id_agrup_concep) 
        then estado else 0 end, 
    actual = 1, 
    fecha_hasta = case when fecha_hasta is null then to_date('$fecha_ingre','YYYY-MM-DD')-1 else fecha_hasta end
    WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc
EOD;

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



                    /*
                     * ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO LA FECHA FINAL DE LA ULTIMA NOVEDAD 
                     * A LA FECHA INMEDIATAMENTE ANTERIOR A LA FECHA INICIAL DE LA NUEVA NOVEDAD
                     * Al retirar el funcionario modifico dias de incapacidad y rentigros, no debe modificar estos registros - 20141126
                     */
                    $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO SET fecha_hasta=to_date('$fecha_ingre','YYYY-MM-DD')-1

WHERE id_concepto_periodo IN(
    select conc.id_concepto_periodo ID_CONCEPTO_PERIODO
    from no_concepto_periodo conc
    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.periodo = $id_periodo
        and conc.id_concep_nomina not in (select distinct id_concep_nomina from no_concep_ka)
        and conc.id_concep_nomina not in (select distinct id_concep_nomina from no_concep_vac)
        and conc.id_concep_nomina not in (select distinct nvl(id_concep_ajuste,0) from no_concep_nomina)
        and conc.id_concep_nomina not in (select distinct nvl(id_concep_rein,0) from no_concep_nomina)
)
EOD;

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

                    /*
                     * Dias de resta de kardex - 20130508
                     * Se coloca estado 1 en el filtro de no_novedad_kardex, para tomar solo las activas - 20130917
                     */
                    $sql = <<<EOD
select 
nvl(sum(dias_rango_mes_sin_treintayuno(novkar.fecha_ini,novkar.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo ))),0) as dias 
from no_novedad_kardex novkar
left join no_tip_nov_ka tipnov
on tipnov.id_tip_nov_ka = novkar.id_tip_nov_ka
where tipnov.afecta_antigu = 1 and novkar.id_tipo_doc = $id_tipo_doc and novkar.num_doc = $num_doc and novkar.estado = 1
EOD;

                    $results = CN_TABLE::executeSQL($sql);
                    $dias_kardex = $results[0]['dias'];

                    /*
                     * Se actualiza numero de dias por rango de fechas - 20130407
                     * Se restan dias de kardex que afectan antiguedad - 20130508
                     * Al retirar el funcionario modifico dias de incapacidad y rentigros, no debe modificar estos registros - 20141126
                     */
                    $sql = <<<EOD
update no_concepto_periodo set num_dias = case when 

( case when (fecha_hasta-fecha_desde + 1) > 30 
    then 30 else (fecha_hasta-fecha_desde + 1) end - ($dias_kardex) ) < 0 then 0 else
( case when (fecha_hasta-fecha_desde + 1) > 30 
    then 30 else (fecha_hasta-fecha_desde + 1) end - ($dias_kardex) )    end
        
WHERE id_concepto_periodo IN(
    select conc.id_concepto_periodo ID_CONCEPTO_PERIODO
    from no_concepto_periodo conc
    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.periodo = $id_periodo
        and conc.id_concep_nomina not in (select distinct id_concep_nomina from no_concep_ka)
        and conc.id_concep_nomina not in (select distinct id_concep_nomina from no_concep_vac)
        and conc.id_concep_nomina not in (select distinct nvl(id_concep_ajuste,0) from no_concep_nomina)
        and conc.id_concep_nomina not in (select distinct nvl(id_concep_rein,0) from no_concep_nomina)
)
EOD;

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

                    $sql = <<<EOD
UPDATE NO_ESTADO_FUNC SET ACTUAL = 0 
    WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
        and PERIODO = $id_periodo
EOD;
                    $this->conn->execute($sql);

//Se trae el periodo de liqdef si ya esta creado - 20130828
                    $sql = <<<EOD
select 
period.id_periodo 
from no_periodo period 
where 
(period.id_anhos || lpad(period.id_meses,2,'0')) = (select id_anhos || lpad(id_meses,2,'0') from no_periodo where id_periodo = $id_periodo) 
and id_tipo_periodo = 5 
EOD;
                    $results = CN_TABLE::executeSQL($sql);

                    /*
                     * Si el periodo de liquidacion definitiva esta creado, genera el registro en NO_ESTADO_FUNC - 20130828
                     */
                    if (count($results) > 0) {

                        $id_periodo_def = $results[0]['id_periodo'];

                        $sql = <<<EOD
Insert into NO_ESTADO_FUNC (ID_TIPO_DOC,NUM_DOC,ID_DP,ID_ANHOS,ID_MESES,PERIODO,ACTUAL,ID_EA,ID_CEN_OP) 

select 
ID_TIPO_DOC,
NUM_DOC,
ID_DP,
ID_ANHOS,
ID_MESES,
$id_periodo_def as PERIODO,
ACTUAL,
ID_EA,
ID_CEN_OP
from NO_ESTADO_FUNC
WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
        and PERIODO = $id_periodo
EOD;
                        $this->conn->execute($sql);
                    }


                    $sql = <<<EOD
 UPDATE RH_DP SET 
   TITULAR   =  case when $num_doc = TITULAR then NULL else TITULAR end, 
   ENCARGADO =  case when $num_doc = ENCARGADO then NULL else ENCARGADO end 
 WHERE ID_DP = $id_dp 
EOD;
                    $this->conn->execute($sql);

//ACTUALIZO NO_NOMBRAMIENTO ESTADO = 0 Y FECHA DE RETIRO                     
                    $sql = <<<EOD
            UPDATE NO_NOMBRAMIENTO SET ESTADO=0,FECHA_TERMINA=to_date('$fecha_ingre','YYYY-MM-DD')-1,FECHA_RETIRO=to_date('$fecha_ingre','YYYY-MM-DD') 
                WHERE ID_TIPO_DOC=$id_tipo_doc AND NUM_DOC=$num_doc
EOD;

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


//ACTUALIZO no_bonifica_servicios ESTADO = 0 - 20130506
                    $sql = <<<EOD
update no_bonifica_servicios set estado = 0 where id_tipo_doc = $id_tipo_doc and num_doc = $num_doc
EOD;

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

                    /**
                     * Al retirar cambia novedad procedimineto rete - 20141111
                     */
                    $sql = <<<EOD
SELECT * FROM NO_NOVEDAD_PROCED_RETE
where
id_tipo_doc = $id_tipo_doc
and num_doc = $num_doc
and estado = 1
order by
num_doc, fecha_inicial desc  
EOD;
                    $results = CN_TABLE::executeSQL($sql);

//actualiza registro de la ultima novedad por el estado y fecha
                    if (count($results) > 0) {


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

                        /*
                         * Se cambia $fecha_ingre por $fecha_ingre_orig, para guardar fechas de la novedad en concepto_periodo - 20130918
                         */
                        $sql = <<<EOD
update NO_NOVEDAD_PROCED_RETE set fecha_terminacion = to_date('$fecha_ingre','YYYY-MM-DD')-1, 
  estado =  0
where
id_tipo_doc = $id_tipo_doc
and num_doc = $num_doc  
and id_novedad_proced_rete = $id_novedad_proced_rete 
EOD;
                        $this->conn->execute($sql);
                    }
                }

//ASCENSO
                else if ($id_novedad == 2) {


                    $sql = <<<EOD
            SELECT ID_CONCEP_BASICA FROM NO_PARAM_CONCEP
EOD;

                    $results = CN_TABLE::executeSQL($sql);
//CONCEPTO DE ASIGNACION BASICA
                    $id_concep_basica = $results[0]['id_concep_basica'];

// AB del cargo anterior - 20141106
                    $sql = <<<EOD
SELECT ASIGNACION_BASICA, ID_CEN_OP, ID_EA FROM NO_DP_V WHERE ID_DP = $id_dp_ini
EOD;
                    $results = CN_TABLE::executeSQL($sql);
//ASIGNACION BASICA DEL NUEVO CARGO
                    $asignacion_basica_ant = $results[0]['asignacion_basica'];


                    $sql = <<<EOD
            SELECT ASIGNACION_BASICA, ID_CEN_OP, ID_EA FROM NO_DP_V WHERE ID_DP = $id_dp
EOD;
                    $results = CN_TABLE::executeSQL($sql);
//ASIGNACION BASICA DEL NUEVO CARGO
                    $asignacion_basica = $results[0]['asignacion_basica'];
                    $id_cen_op = $results[0]['id_cen_op'];
                    $id_ea = $results[0]['id_ea'];

//BUSCO EN LA TABLA NO_CONCEPTO_FUNC EL CONCEPTO DE ASIGNACION ACTUAL 
//Y PONGO ESTADO=0 Y ACTUAL = 0

                    $sql = <<<EOD
UPDATE NO_CONCEPTO_FUNC SET ESTADO=0, ACTUAL=0, 
 fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1  
     WHERE ID_TIPO_DOC=$id_tipo_doc AND NUM_DOC=$num_doc AND ID_CONCEP_NOMINA=$id_concep_basica
EOD;

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

//CREO EL NUEVO REGISTRO EN LA TABLA NO_CONCEPTO_FUNC

                    $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'),null)
EOD;

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

//BUSCO EN LA TABLA NO_ESTADO_FUNC EL ESTADO ACTUAL Y LE PONGO ACTUAL = 0

                    $sql = <<<EOD
            UPDATE NO_ESTADO_FUNC SET ACTUAL=0 WHERE ID_TIPO_DOC=$id_tipo_doc AND NUM_DOC=$num_doc and PERIODO = $id_periodo
EOD;

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


//CREO EL NUEVO REGISTRO EN LA TABLA NO_ESTADO_FUNC

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



                    /**
                     * Validar fecha de inicio de la novedad - 20140930
                     */
                    $date1 = new DateTime($fecha_ingre);
                    $date2 = new DateTime($fecha_hasta);
                    $date3 = new DateTime($fecha_hasta_periodo);
                    $date4 = new DateTime($fecha_desde_periodo);



                    if ($date1 >= $date4 && $date1 <= $date3) {
//ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO LA FECHA FINAL DE LA ULTIMA NOVEDAD A LA FECHA INMEDIATAMENTE ANTERIOR A LA FECHA INICIAL DE LA NUEVA NOVEDAD

                        $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO 
    SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1,
      num_dias =  case when ((to_date('$fecha_ingre','YYYY-MM-DD')-1)-fecha_desde + 1) > 30 
          then 30 else (to_date('$fecha_ingre','YYYY-MM-DD')-1-fecha_desde + 1) end                           
        
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc=$id_tipo_doc and conc.num_doc=$num_doc and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)

EOD;

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

//CREO EL NUEVO REGISTRO DE NO_CONCEPTO_PERIODO
                        /**
                         * Se cambia el calculo de dias para tomar en base a 30 dias mes - 20141007
                         */
                        $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,
            --case when (last_day(to_date('$fecha_ingre','YYYY-MM-DD'))-to_date('$fecha_ingre','YYYY-MM-DD')+1) > 30 
            --then 30 else (last_day(to_date('$fecha_ingre','YYYY-MM-DD'))-to_date('$fecha_ingre','YYYY-MM-DD')+1) end   
            case when $num_dias - TO_NUMBER(to_char(to_date('$fecha_ingre','YYYY-MM-DD'),'DD')) +1 > 30 
            then 30 else $num_dias - TO_NUMBER(to_char(to_date('$fecha_ingre','YYYY-MM-DD'),'DD')) +1 end                  
) 
EOD;


                        $this->conn->execute($sql);
                    } elseif ($date1 < $date4) {

                        $logger->info("Fecha inicial antes del periodo a liquidar");


//ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO el valor - 20140930

                        $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO SET  
    valor = $asignacion_basica         
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO
    from no_concepto_periodo conc
    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)
EOD;

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


                        /**
                         * Ajustar el valor correspondiente con el ingreso de un ajuste del nuevo salario 
                         * y el reintegro del sueldo anterior. - 20141106
                         */
//Ajuste AB
                        $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,
        (select nvl(ID_CONCEP_AJUSTE ,ID_CONCEP_NOMINA ) as ID_CONCEP_AJUSTE from no_concep_nomina where ID_CONCEP_NOMINA = $id_concep_basica ),
        to_date('$fecha_ingre','YYYY-MM-DD'),
        to_date('$fecha_desde_periodo','YYYY-MM-DD')-1,$asignacion_basica,
        (FECHA_RANGO_SIN_TREINTAYUNO(to_date('$fecha_ingre','yyyy-mm-dd'),to_date('$fecha_desde_periodo','yyyy-mm-dd')-1 ))
    )                             
EOD;


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

//Reintegro AB
                        $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,
        (select nvl(ID_CONCEP_REIN ,ID_CONCEP_NOMINA ) as ID_CONCEP_REIN from no_concep_nomina where ID_CONCEP_NOMINA = $id_concep_basica ),
        to_date('$fecha_ingre','YYYY-MM-DD'),
        to_date('$fecha_desde_periodo','YYYY-MM-DD')-1,$asignacion_basica_ant,
        (FECHA_RANGO_SIN_TREINTAYUNO(to_date('$fecha_ingre','yyyy-mm-dd'),to_date('$fecha_desde_periodo','yyyy-mm-dd')-1 ))
    ) 
EOD;


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



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

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

                    $sql = <<<EOD
            UPDATE RH_DP SET TITULAR = NULL, ENCARGADO= NULL WHERE ID_DP= $id_dp_ini
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'];
//SI PARA LA ASIGNACION BASICA LE CORRESPONDEN LOS CONCEPTOS
                            if ($asignacion_basica >= $rango_minimo && $asignacion_basica <= $rango_maximo) {

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

                                $sql = <<<EOD
            SELECT * FROM NO_CONCEPTO_FUNC WHERE ID_CONCEP_NOMINA = $id_concep_ab AND ID_TIPO_DOC = $id_tipo_doc
                                    AND NUM_DOC = $num_doc AND ACTUAL = 1 AND ESTADO = 1
EOD;

                                $results = CN_TABLE::executeSQL($sql);
//VERIFICO QUE NO LOS TENGA, SI NO, ENTONCES SE LOS CREO EN NO_CONCEPTO_FUNC Y EN NO_CONCEPTO_PERIODO
                                if (count($results) == 0) {

                                    $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);
                                }
                            } else {
//SI PARA LA ASIGNACION BASICA NO LE CORRESPONDEN LOS CONCEPTOS

                                $sql = <<<EOD
            SELECT * FROM NO_CONCEPTO_FUNC WHERE ID_CONCEP_NOMINA = $id_concep_ab AND ID_TIPO_DOC = $id_tipo_doc
                                    AND NUM_DOC = $num_doc AND ACTUAL = 1 AND ESTADO = 1
EOD;

                                $results = CN_TABLE::executeSQL($sql);
//VERIFICO SI TIENE CREADOS LOS CONCEPTOS, SI LOS TIENE LOS INHABILITO
                                if (count($results) > 0) {

                                    $sql = <<<EOD
            UPDATE NO_CONCEPTO_FUNC SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1 WHERE ID_TIPO_DOC=$id_tipo_doc AND NUM_DOC=$num_doc AND ID_CONCEP_NOMINA=$id_concep_ab
EOD;

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


//validar que la fecha no supere el inicio del periodo - 20140930
                                    if ($date1 < $date4) {


                                        $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO 
    SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1,
      num_dias =  0                      
        
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

    from no_concepto_periodo conc

    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_ab and conc.periodo = $id_periodo

) 
EOD;
                                        $this->conn->execute($sql);
                                    } else {
                                        $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO 
    SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1,
      num_dias =  case when ((to_date('$fecha_ingre','YYYY-MM-DD')-1)-fecha_desde + 1) > 30 
          then 30 else (to_date('$fecha_ingre','YYYY-MM-DD')-1-fecha_desde + 1) end                           
        
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
    and conc.id_concep_nomina = $id_concep_ab and conc.periodo = $id_periodo

) 
EOD;
                                        $this->conn->execute($sql);
                                    }
                                }
                            }
                        }
                    }
                }//FIN ASCENSO
//INCORPORACION
                else if ($id_novedad == 6) {


                    $sql = <<<EOD
            SELECT ID_CONCEP_BASICA FROM NO_PARAM_CONCEP
EOD;

                    $results = CN_TABLE::executeSQL($sql);
//CONCEPTO DE ASIGNACION BASICA
                    $id_concep_basica = $results[0]['id_concep_basica'];

                    $sql = <<<EOD
            SELECT ASIGNACION_BASICA, ID_CEN_OP, ID_EA FROM NO_DP_V WHERE ID_DP = $id_dp
EOD;
                    $results = CN_TABLE::executeSQL($sql);
//ASIGNACION BASICA DEL NUEVO CARGO
                    $asignacion_basica = $results[0]['asignacion_basica'];
                    $id_cen_op = $results[0]['id_cen_op'];
                    $id_ea = $results[0]['id_ea'];

//BUSCO EN LA TABLA NO_CONCEPTO_FUNC EL CONCEPTO DE ASIGNACION ACTUAL Y PONGO ESTADO=0 Y ACTUAL = 0

                    $sql = <<<EOD
UPDATE NO_CONCEPTO_FUNC SET ESTADO=0, ACTUAL=0, 
 fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1             
   WHERE ID_TIPO_DOC=$id_tipo_doc AND NUM_DOC=$num_doc AND ID_CONCEP_NOMINA=$id_concep_basica
EOD;

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

//CREO EL NUEVO REGISTRO EN LA TABLA NO_CONCEPTO_FUNC

                    $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'), null)
EOD;

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

//BUSCO EN LA TABLA NO_ESTADO_FUNC EL ESTADO ACTUAL Y LE PONGO ACTUAL = 0

                    $sql = <<<EOD
            UPDATE NO_ESTADO_FUNC SET ACTUAL=0 WHERE ID_TIPO_DOC=$id_tipo_doc AND NUM_DOC=$num_doc and PERIODO = $id_periodo
EOD;

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


//CREO EL NUEVO REGISTRO EN LA TABLA NO_ESTADO_FUNC

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

//ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO LA FECHA FINAL DE LA ULTIMA NOVEDAD A LA FECHA INMEDIATAMENTE ANTERIOR A LA FECHA INICIAL DE LA NUEVA NOVEDAD

                    $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO 
    SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1,
      num_dias =  case when ((to_date('$fecha_ingre','YYYY-MM-DD')-1)-fecha_desde + 1) > 30 
          then 30 else (to_date('$fecha_ingre','YYYY-MM-DD')-1-fecha_desde + 1) end                           
        
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc=$id_tipo_doc and conc.num_doc=$num_doc and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)

EOD;

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

//CREO EL NUEVO REGISTRO DE NO_CONCEPTO_PERIODO

                    $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,
                            case when (last_day(to_date('$fecha_ingre','YYYY-MM-DD'))-to_date('$fecha_ingre','YYYY-MM-DD')+1) > 30 
          then 30 else (last_day(to_date('$fecha_ingre','YYYY-MM-DD'))-to_date('$fecha_ingre','YYYY-MM-DD')) end   )
EOD;


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

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

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

                    $sql = <<<EOD
            UPDATE RH_DP SET TITULAR = NULL, ENCARGADO= NULL WHERE ID_DP= $id_dp_ini
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'];
//SI PARA LA ASIGNACION BASICA LE CORRESPONDEN LOS CONCEPTOS
                            if ($asignacion_basica >= $rango_minimo && $asignacion_basica <= $rango_maximo) {

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

                                $sql = <<<EOD
            SELECT * FROM NO_CONCEPTO_FUNC WHERE ID_CONCEP_NOMINA = $id_concep_ab AND ID_TIPO_DOC = $id_tipo_doc
                                    AND NUM_DOC = $num_doc AND ACTUAL = 1 AND ESTADO = 1
EOD;

                                $results = CN_TABLE::executeSQL($sql);
//VERIFICO QUE NO LOS TENGA, SI NO, ENTONCES SE LOS CREO EN NO_CONCEPTO_FUNC Y EN NO_CONCEPTO_PERIODO
                                if (count($results) == 0) {

                                    $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);
                                }
                            } else {
//SI PARA LA ASIGNACION BASICA NO LE CORRESPONDEN LOS CONCEPTOS

                                $sql = <<<EOD
            SELECT * FROM NO_CONCEPTO_FUNC WHERE ID_CONCEP_NOMINA = $id_concep_ab AND ID_TIPO_DOC = $id_tipo_doc
                                    AND NUM_DOC = $num_doc AND ACTUAL = 1 AND ESTADO = 1
EOD;

                                $results = CN_TABLE::executeSQL($sql);
//VERIFICO SI TIENE CREADOS LOS CONCEPTOS, SI LOS TIENE LOS INHABILITO
                                if (count($results) > 0) {

                                    $sql = <<<EOD
            UPDATE NO_CONCEPTO_FUNC SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1 WHERE ID_TIPO_DOC=$id_tipo_doc AND NUM_DOC=$num_doc AND ID_CONCEP_NOMINA=$id_concep_ab
EOD;

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

                                    $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO 
    SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1,
      num_dias =  case when ((to_date('$fecha_ingre','YYYY-MM-DD')-1)-fecha_desde + 1) > 30 
          then 30 else (to_date('$fecha_ingre','YYYY-MM-DD')-1-fecha_desde + 1) end                           
        
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc=$id_tipo_doc and conc.num_doc=$num_doc and conc.id_concep_nomina = $id_concep_ab and conc.periodo = $id_periodo

)

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

//TERMINACION DE ENCARGO
                else if ($id_novedad == 4) {


//SELECCIONO EL CONCEPTO DE ASIGNACIÓN BÁSICA

                    $sql = <<<EOD
            SELECT ID_CONCEP_BASICA FROM NO_PARAM_CONCEP
EOD;

                    $results = CN_TABLE::executeSQL($sql);
//CONCEPTO DE ASIGNACION BASICA
                    $id_concep_basica = $results[0]['id_concep_basica'];

                    $sql = <<<EOD
            SELECT ID_DP_INI, ID_DP_FIN FROM NO_NOVEDAD_PERSONAL WHERE ID_NOVEDAD = 3 AND ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ESTADO=1
EOD;

                    $results = CN_TABLE::executeSQL($sql);
//TRAIGO EL CARGO ANTERIOR AL ENCARGO 
                    $id_dp_ini = $results[0]['id_dp_ini'];
//TRAIGO EL CARGO DEL ENCARGO 
                    $id_dp_fin = $results[0]['id_dp_fin'];


                    // AB del cargo anterior - 20141106
                    $sql = <<<EOD
SELECT ASIGNACION_BASICA, ID_CEN_OP, ID_EA FROM NO_DP_V WHERE ID_DP = $id_dp_fin
EOD;
                    $results = CN_TABLE::executeSQL($sql);
//ASIGNACION BASICA DEL NUEVO CARGO
                    $asignacion_basica_fin = $results[0]['asignacion_basica'];



                    $sql = <<<EOD
            SELECT ASIGNACION_BASICA,ID_CEN_OP,ID_EA FROM NO_DP_V WHERE ID_DP = $id_dp_ini
EOD;
                    $results = CN_TABLE::executeSQL($sql);

//ASIGNACION BASICA DEL NUEVO CARGO
                    $asignacion_basica = $results[0]['asignacion_basica'];
                    /*
                     * Validar que los registros no son null - 20130618
                     */
                    $id_cen_op = 'null';
                    if (!is_null($results[0]['id_cen_op'])) {
                        $id_cen_op = $results[0]['id_cen_op'];
                    }
                    $id_ea = 'null';
                    if (!is_null($results[0]['id_ea'])) {
                        $id_ea = $results[0]['id_ea'];
                    }



//SETEO CON ESTADO = 0 LA NOVEDAD DE ENCARGO

                    $sql = <<<EOD
            UPDATE NO_NOVEDAD_PERSONAL SET ESTADO = 0 WHERE ID_NOVEDAD = 3 AND ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc
EOD;

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

//BUSCO EN LA TABLA NO_ESTADO_FUNC EL ESTADO ACTUAL Y LE PONGO ACTUAL = 0

                    $sql = <<<EOD
            UPDATE NO_ESTADO_FUNC SET ACTUAL=0 WHERE ID_TIPO_DOC=$id_tipo_doc AND NUM_DOC=$num_doc and PERIODO = $id_periodo
EOD;

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


//CREO EL NUEVO REGISTRO EN LA TABLA NO_ESTADO_FUNC

                    $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_ini,$id_anhos,$id_meses,$id_periodo,1,$id_cen_op,$id_ea)  
EOD;


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


//BUSCO EN LA TABLA NO_CONCEPTO_FUNC EL CONCEPTO DE ASIGNACION ACTUAL Y PONGO ESTADO = 0 Y ACTUAL = 0

                    $sql = <<<EOD
UPDATE NO_CONCEPTO_FUNC SET ESTADO = 0, ACTUAL = 0 
    WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
        AND ID_CONCEP_NOMINA = $id_concep_basica
        and ACTUAL = 1
EOD;

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

//CREO EL NUEVO REGISTRO EN LA TABLA NO_CONCEPTO_FUNC

                    $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')+1, null )
EOD;

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


//ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO LA FECHA FINAL DE LA ULTIMA NOVEDAD A LA 
//FECHA INMEDIATAMENTE ANTERIOR A LA FECHA INICIAL DE LA NUEVA NOVEDAD

                    $sql = <<<EOD
            
select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
    
and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

EOD;

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


                    $id_concep_periodo = $results[0]['id_concepto_periodo'];

                    $sql = <<<EOD
            
select conc.*

from no_concepto_periodo conc

where conc.id_concepto_periodo = $id_concep_periodo



EOD;

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


                    $fecha_ini_per = $concepto[0]['fecha_desde'];
                    $fecha_fin_per = $concepto[0]['fecha_hasta'];



                    $date1 = new DateTime($fecha_ini_per);
                    $date2 = new DateTime($fecha_ingre);

                    /**
                     * Valida si la fecha de la novedad es la misma del primer dia del periodo
                     */
                    if ($date1 == $date2) {

                        $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD'), num_dias = 1 
    
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
    and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)

EOD;


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

//CREO EL NUEVO REGISTRO DE NO_CONCEPTO_PERIODO

                        $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')+1,
                    (select fecha_fin from no_periodo where id_periodo = $id_periodo),$asignacion_basica,
		($num_dias - TO_NUMBER(to_char(to_date('$fecha_ingre','YYYY-MM-DD'),'DD'))))
EOD;


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

                        /*
                         * Validar que la terminacion no sea en un siguiente periodo - 20140114
                         */
                        $sql = <<<EOD
select 
ID_PERIODO,
ID_ANHOS,
ID_MESES,
FECHA_INI,
to_char(FECHA_INI,'YYYY-MM-DD') as fecha_desde,
FECHA_FIN,
to_char(FECHA_FIN,'YYYY-MM-DD') as fecha_hasta,
ID_TIPO_PERIODO,
ESTADO,
FECHA_CIERRE,
FECHA_CIERRE_NOV,
ACTIVO,
MAX_DED_NOLEY,
FECHA_PAGO,
NUM_DOC_PAGO    
from no_periodo where id_periodo = $id_periodo
EOD;

                        $periodo = CN_TABLE::executeSQL($sql);
                        $fecha_ini_per = $periodo[0]['fecha_desde'];
                        $date4 = new DateTime($fecha_ini_per);
                        $fecha_fin_per = $periodo[0]['fecha_hasta'];
                        $date3 = new DateTime($fecha_fin_per);

                        /*
                         * Validar que la terminacion no sea en un siguiente periodo - 20140114
                         */
                        if ($date2 >= $date4 && $date2 <= $date3) {

                            $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD') 
    
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
    and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)

EOD;


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

                            $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO 
    SET num_dias = case 
                    when fecha_hasta < fecha_desde then 0
                    when (fecha_hasta - fecha_desde) + 1 >= 30 then 30 
                   else (fecha_hasta - fecha_desde) + 1 end  
    
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
    and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)

EOD;


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

//CREO EL NUEVO REGISTRO DE NO_CONCEPTO_PERIODO

                            $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')+1,
                    (select fecha_fin from no_periodo where id_periodo = $id_periodo),$asignacion_basica,
		($num_dias - TO_NUMBER(to_char(to_date('$fecha_ingre','YYYY-MM-DD'),'DD'))))
EOD;


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


                            /*
                             * Recalcular num_dias
                             */
                            /*
                             * si la fecha de terminación es menor que la fecha inicial del periodo debe colocar en número de días (0) - 20130813
                             * case when ((to_date('$fecha_ingre','YYYY-MM-DD')-1)-fecha_desde + 1) > 30 then 30 
                             * when ((to_date('$fecha_ingre','YYYY-MM-DD')-1)-fecha_desde + 1) < 0 then 0
                             * else (to_date('$fecha_ingre','YYYY-MM-DD')-1-fecha_desde + 1) end 
                             */
                            /*
                             * Se valida rango de fechas y numero de dias - 20140114
                             */
                            $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO SET 
      num_dias =  
      case  
            when fecha_desde < (select FECHA_INI from no_periodo where id_periodo = $id_periodo) then $num_dias
            when fecha_desde > fecha_hasta then 0
            when ($num_dias - TO_NUMBER(to_char(fecha_desde,'DD'))+1)  <= 0 then 0 
            else ($num_dias - TO_NUMBER(to_char(fecha_desde,'DD'))+1) end                          
        
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
    and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)

EOD;
                            $this->conn->execute($sql);
                        } else if ($date2 < $date4) {
                            /*
                             * Si la terminacion es antes del periodo - 20141126
                             */
                            $logger->info("Si la terminacion es antes del periodo");
                            //ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO el valor - 20140930

                            $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO SET  
    valor = $asignacion_basica         
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO
    from no_concepto_periodo conc
    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)
EOD;

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


                            /**
                             * Ajustar el valor correspondiente con el ingreso de un ajuste del nuevo salario 
                             * y el reintegro del sueldo anterior. - 20141106
                             */
//Ajuste AB
                            $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,
        (select nvl(ID_CONCEP_AJUSTE ,ID_CONCEP_NOMINA ) as ID_CONCEP_AJUSTE from no_concep_nomina where ID_CONCEP_NOMINA = $id_concep_basica ),
        to_date('$fecha_ingre','YYYY-MM-DD'),
        to_date('$fecha_desde_periodo','YYYY-MM-DD')-1,$asignacion_basica,
        (FECHA_RANGO_SIN_TREINTAYUNO(to_date('$fecha_ingre','yyyy-mm-dd'),to_date('$fecha_desde_periodo','yyyy-mm-dd')-1 ))
    )                             
EOD;


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

//Reintegro AB
                            $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,
        (select nvl(ID_CONCEP_REIN ,ID_CONCEP_NOMINA ) as ID_CONCEP_REIN from no_concep_nomina where ID_CONCEP_NOMINA = $id_concep_basica ),
        to_date('$fecha_ingre','YYYY-MM-DD'),
        to_date('$fecha_desde_periodo','YYYY-MM-DD')-1,$asignacion_basica_fin,
        (FECHA_RANGO_SIN_TREINTAYUNO(to_date('$fecha_ingre','yyyy-mm-dd'),to_date('$fecha_desde_periodo','yyyy-mm-dd')-1 ))
    ) 
EOD;


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


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

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

                    $sql = <<<EOD
            UPDATE RH_DP SET ENCARGADO= NULL WHERE ID_DP= $id_dp_fin
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'];
//SI PARA LA ASIGNACION BASICA LE CORRESPONDEN LOS CONCEPTOS
                            if ($asignacion_basica >= $rango_minimo && $asignacion_basica <= $rango_maximo) {

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

                                $sql = <<<EOD
            SELECT * FROM NO_CONCEPTO_FUNC WHERE ID_CONCEP_NOMINA = $id_concep_ab AND ID_TIPO_DOC = $id_tipo_doc
                                    AND NUM_DOC = $num_doc AND ACTUAL = 1 AND ESTADO = 1
EOD;

                                $results = CN_TABLE::executeSQL($sql);
//VERIFICO QUE NO LOS TENGA, SI NO, ENTONCES SE LOS CREO EN NO_CONCEPTO_FUNC Y EN NO_CONCEPTO_PERIODO
                                if (count($results) == 0) {

                                    $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')+1)
EOD;

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

//validar que la fecha no supere el inicio del periodo - 20140930
                                    if ($date1 < $date4) {
                                        $fecha_ingre = $fecha_desde_periodo;
                                    }

                                    $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')+1,
                    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')) )
EOD;
                                    $this->conn->execute($sql);
                                }
                            } else {
//SI PARA LA ASIGNACION BASICA NO LE CORRESPONDEN LOS CONCEPTOS

                                $sql = <<<EOD
            SELECT * FROM NO_CONCEPTO_FUNC WHERE ID_CONCEP_NOMINA = $id_concep_ab AND ID_TIPO_DOC = $id_tipo_doc
                                    AND NUM_DOC = $num_doc AND ACTUAL = 1 AND ESTADO = 1
EOD;

                                $results = CN_TABLE::executeSQL($sql);
//VERIFICO SI TIENE CREADOS LOS CONCEPTOS, SI LOS TIENE LOS INHABILITO
                                if (count($results) > 0) {

                                    $sql = <<<EOD
            UPDATE NO_CONCEPTO_FUNC SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD') 
                WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ID_CONCEP_NOMINA=$id_concep_ab
EOD;

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

//si la fecha de terminación es menor que la fecha inicial del periodo debe colocar en número de días (0) - 20130813
                                    $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO 
    SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD'),
      num_dias =  
          case when ((to_date('$fecha_ingre','YYYY-MM-DD'))-fecha_desde + 1) > 30 then 30 
               when ((to_date('$fecha_ingre','YYYY-MM-DD'))-fecha_desde + 1) < 0 then 0
          else (to_date('$fecha_ingre','YYYY-MM-DD')-fecha_desde + 1) end                           
        
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
    and conc.id_concep_nomina = $id_concep_ab and conc.periodo = $id_periodo

)

EOD;
                                    $this->conn->execute($sql);
                                }
                            }
                        }
                    }
                }
                /*
                 * ID-5 09-PRORROGA ENCARGO - 20130906
                 */ else if ($id_novedad == 5) {

                    $sql = <<<EOD
SELECT ID_CONCEP_BASICA FROM NO_PARAM_CONCEP
EOD;

                    $results = CN_TABLE::executeSQL($sql);
//CONCEPTO DE ASIGNACION BASICA
                    $id_concep_basica = $results[0]['id_concep_basica'];


//En la novedad "Prorroga de encargo"  modificar la fecha final del encargo original
                    $sql = <<<EOD
UPDATE NO_NOVEDAD_PERSONAL SET FECHA_TERMINACION = to_date('$fecha_hasta','YYYY-MM-DD') 
    WHERE ID_NOVEDAD = 3 AND ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ID_NOVEDAD_PERSONAL = $id_novedad_ajuste
EOD;

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

                    /*
                     * BUSCO EN LA TABLA NO_CONCEPTO_FUNC EL CONCEPTO DE ASIGNACION ACTUAL ACTUALIZA LA FECHA_HASTA
                     */
                    $sql = <<<EOD
UPDATE NO_CONCEPTO_FUNC SET FECHA_HASTA = to_date('$fecha_hasta','YYYY-MM-DD') 
    WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
        AND ID_CONCEP_NOMINA = $id_concep_basica
        and ACTUAL = 1
EOD;

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


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

                $this->conn->beginTransaction();

//ACTUALIZAR SUELDOS DE COMISIONES - 20130618
                if ($id_novedad == 4 || $id_novedad == 3 || $id_novedad == 2 || $id_novedad == 6 || $id_novedad == 7) {

                    $sql = <<<EOD
            UPDATE TERCEROS SET SUELDO = $asignacion_basica WHERE NITOCC = $num_doc
EOD;

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

//                    try {
//                        // ACTUALIZA EL SUELDO EN EL SGR - 20130618
//                        $sql = <<<EOD
//            UPDATE ERP_SGR.TERCEROS SET SUELDO = $asignacion_basica WHERE NITOCC = $num_doc
//EOD;
////                        $this->conn->execute($sql);
//                    } catch (Exception $exc) {
////                        echo $exc->getTraceAsString();
//                        $logger->info("If ROLLBACK ...");
//                    }
                } elseif ($id_novedad == 1) {

                    $sql = <<<EOD
            UPDATE TERCEROS SET ESTADO = 0 WHERE NITOCC = $num_doc
EOD;

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

//                    try {
//                        // ACTUALIZA EL SUELDO EN EL SGR - 20130618
//
//                        $sql = <<<EOD
//            UPDATE ERP_SGR.TERCEROS SET ESTADO = 0 WHERE NITOCC = $num_doc
//EOD;
////                        $this->conn->execute($sql);
//                    } catch (Exception $exc) {
////                        echo $exc->getTraceAsString();
//                        $logger->info("Else ROLLBACK ...");
//                    }
                }


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

//Actualiza sueldos del ERP_SGR - 20130618
                $this->actualizarSueldos($id_novedad, $asignacion_basica, $num_doc);
            } catch (Exception $e) {

//ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
                $this->conn->rollback();
                $logger->info("[ADD Exception] ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR.");
                $logger->info("[ADD Exception] " . $e->getMessage());
            } catch (PDOException $e) {
                $this->conn->rollback();
                $logger->info("[ADD PDOException] ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR.");
                $logger->info("[ADD PDOException] " . $e->getMessage());
            }
        }

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

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

            try {


                $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_inicial'];
                $fecha_ingre = explode(' ', $fecha_ingre);
                $fecha_ingre = $fecha_ingre[0];
                $fecha_hasta = $list_data_post[0]['fecha_terminacion'];
                $fecha_hasta = explode(' ', $fecha_hasta);
                $fecha_hasta = $fecha_hasta[0];
                $id_dp = $list_data_post[0]['id_dp_fin'];
                $id_dp_ini = $list_data_post[0]['id_dp_ini'];
                $id_periodo = $list_data_post[0]['id_periodo'];
                $id_novedad = $list_data_post[0]['id_novedad'];

                $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'];
                $fecha_desde_periodo = $results[0]['fecha_ini'];
                $fecha_desde_periodo = explode(' ', $fecha_desde_periodo);
                $fecha_desde_periodo = $fecha_desde_periodo[0];
                $fecha_hasta_periodo = $results[0]['fecha_fin'];
                $fecha_hasta_periodo = explode(' ', $fecha_hasta_periodo);
                $fecha_hasta_periodo = $fecha_hasta_periodo[0];

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

//ENCARGO - COMISION
                if ($id_novedad == 3 || $id_novedad == 7) {

                    $sql = <<<EOD
            SELECT ID_CONCEP_BASICA FROM NO_PARAM_CONCEP
EOD;

                    $results = CN_TABLE::executeSQL($sql);
//CONCEPTO DE ASIGNACION BASICA
                    $id_concep_basica = $results[0]['id_concep_basica'];



                    $sql = <<<EOD
            SELECT ASIGNACION_BASICA, ID_CEN_OP, ID_EA FROM NO_DP_V WHERE ID_DP = $id_dp_ini
EOD;
                    $results = CN_TABLE::executeSQL($sql);
//ASIGNACION BASICA DEL NUEVO CARGO
                    $asignacion_basica = $results[0]['asignacion_basica'];
                    $id_cen_op = $results[0]['id_cen_op'];
                    $id_ea = $results[0]['id_ea'];

                    $sql = <<<EOD
            SELECT ASIGNACION_BASICA, ID_CEN_OP, ID_EA FROM NO_DP_V WHERE ID_DP = $id_dp
EOD;
                    $results = CN_TABLE::executeSQL($sql);
//ASIGNACION BASICA DEL NUEVO CARGO
                    $asignacion_basica_fin = $results[0]['asignacion_basica'];

//BUSCO EN LA TABLA NO_CONCEPTO_FUNC EL CONCEPTO DE ASIGNACION ACTUAL DELETE el registro - 20140930

                    $sql = <<<EOD
DELETE FROM NO_CONCEPTO_FUNC WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ID_CONCEP_NOMINA = $id_concep_basica
    and actual = 1
EOD;

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

//CREO EL NUEVO REGISTRO EN LA TABLA NO_CONCEPTO_FUNC

                    $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'),null)
EOD;

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

//BUSCO EN LA TABLA NO_ESTADO_FUNC EL ESTADO ACTUAL Y LE PONGO ACTUAL = 0
                    /*
                     * Se cambia por el periodo de registro
                     */

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

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


//CREO EL NUEVO REGISTRO EN LA TABLA NO_ESTADO_FUNC

                    $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_ini,$id_anhos,$id_meses,$id_periodo,1,$id_cen_op, $id_ea)
EOD;


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


                    /**
                     * Validar fecha de inicio de la novedad - 20140930
                     */
                    $date1 = new DateTime($fecha_ingre);
                    $date2 = new DateTime($fecha_hasta);
                    $date3 = new DateTime($fecha_hasta_periodo);
                    $date4 = new DateTime($fecha_desde_periodo);

                    if ($date1 >= $date4 && $date1 <= $date3) {

                        $logger->info("Fecha inicial de la novedad en el periodo a liquidar");

//ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO LA FECHA FINAL DE LA ULTIMA NOVEDAD A LA 
//FECHA INMEDIATAMENTE ANTERIOR A LA FECHA INICIAL DE LA NUEVA NOVEDAD

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

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

//CREO EL NUEVO REGISTRO DE NO_CONCEPTO_PERIODO

                        $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO SET                            
    --NUM_DIAS = $num_dias, 
    NUM_DIAS = $num_dias - TO_NUMBER(to_char(fecha_desde,'DD')) + 1, 
    --fecha_desde = to_date('$fecha_desde_periodo','YYYY-MM-DD'), 
    fecha_hasta = to_date('$fecha_hasta_periodo','YYYY-MM-DD')
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO
    from no_concepto_periodo conc
    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)         
EOD;


                        $this->conn->execute($sql);
                    } elseif ($date1 < $date4) {

                        $logger->info("Fecha inicial antes del periodo a liquidar");

//ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO el valor - 20140930

                        $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO SET  
    valor = $asignacion_basica         
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO
    from no_concepto_periodo conc
    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)
EOD;

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

                        /**
                         * Ajustar el valor correspondiente con el ingreso de un ajuste del nuevo salario 
                         * y el reintegro del sueldo anterior. - 20141106
                         */
//Ajuste AB
                        $sql = <<<EOD
DELETE FROM NO_CONCEPTO_PERIODO 
WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
    AND ID_CONCEP_NOMINA = (select nvl(ID_CONCEP_AJUSTE ,ID_CONCEP_NOMINA ) as ID_CONCEP_AJUSTE from no_concep_nomina where ID_CONCEP_NOMINA = $id_concep_basica )
    AND PERIODO = $id_periodo AND FECHA_DESDE = to_date('$fecha_ingre','YYYY-MM-DD')                               
EOD;


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

//Reintegro AB
                        $sql = <<<EOD
DELETE FROM NO_CONCEPTO_PERIODO 
WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
    AND ID_CONCEP_NOMINA = (select nvl(ID_CONCEP_REIN ,ID_CONCEP_NOMINA ) as ID_CONCEP_REIN from no_concep_nomina where ID_CONCEP_NOMINA = $id_concep_basica )
    AND PERIODO = $id_periodo AND FECHA_DESDE = to_date('$fecha_ingre','YYYY-MM-DD')         
EOD;


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




                    $sql = <<<EOD
            UPDATE RH_DP SET ENCARGADO = null WHERE ID_DP= $id_dp
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'];
//SI PARA LA ASIGNACION BASICA LE CORRESPONDEN LOS CONCEPTOS
                            if ($asignacion_basica >= $rango_minimo && $asignacion_basica <= $rango_maximo) {

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

                                $sql = <<<EOD
            SELECT * FROM NO_CONCEPTO_FUNC WHERE ID_CONCEP_NOMINA = $id_concep_ab AND ID_TIPO_DOC = $id_tipo_doc
                                    AND NUM_DOC = $num_doc AND ACTUAL = 1 AND ESTADO = 1
EOD;

                                $results = CN_TABLE::executeSQL($sql);
//VERIFICO QUE NO LOS TENGA, SI NO, ENTONCES SE LOS CREO EN NO_CONCEPTO_FUNC Y EN NO_CONCEPTO_PERIODO
                                if (count($results) == 0) {

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


//validar que la fecha no supere el inicio del periodo - 20140930
                                    if ($date1 < $date4) {
                                        $fecha_ingre = $fecha_desde_periodo;
                                    }


                                    $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);
                                }
                            } else {
//SI PARA LA ASIGNACION BASICA NO LE CORRESPONDEN LOS CONCEPTOS

                                $sql = <<<EOD
            SELECT * FROM NO_CONCEPTO_FUNC WHERE ID_CONCEP_NOMINA = $id_concep_ab AND ID_TIPO_DOC = $id_tipo_doc
                                    AND NUM_DOC = $num_doc AND ACTUAL = 1 AND ESTADO = 1
EOD;

                                $results = CN_TABLE::executeSQL($sql);
//VERIFICO SI TIENE CREADOS LOS CONCEPTOS, SI LOS TIENE LOS INHABILITO
                                if (count($results) > 0) {

                                    $sql = <<<EOD
            UPDATE NO_CONCEPTO_FUNC SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1 
                WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ID_CONCEP_NOMINA = $id_concep_ab
EOD;

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


//validar que la fecha no supere el inicio del periodo - 20140930
                                    if ($date1 < $date4) {


                                        $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO 
    SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1,
      num_dias =  0                      
        
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

    from no_concepto_periodo conc

    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_ab and conc.periodo = $id_periodo

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

                                        $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO 
    SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1,
      num_dias =  case when ((to_date('$fecha_ingre','YYYY-MM-DD')-1)-fecha_desde + 1) > 30 
          then 30 else (to_date('$fecha_ingre','YYYY-MM-DD')-1-fecha_desde + 1) end                           
        
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc=$id_tipo_doc and conc.num_doc=$num_doc and conc.id_concep_nomina = $id_concep_ab and conc.periodo = $id_periodo

)

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

//RETIRO
                else if ($id_novedad == 1) {

                    $sql = <<<EOD
            SELECT ID_CONCEP_BASICA FROM NO_PARAM_CONCEP
EOD;

                    $results = CN_TABLE::executeSQL($sql);
//CONCEPTO DE ASIGNACION BASICA
                    $id_concep_basica = $results[0]['id_concep_basica'];


                    /*
                     * BUSCO EN LA TABLA NO_CONCEPTO_FUNC EL CONCEPTO DE ASIGNACION ACTUAL 
                     * Y PONGO ESTADO = 0 Y ACTUAL = 0
                     * Se actualiza fecha_hasta solo cuando es nula, se coloca la de retiro - 20130508
                     */
                    $sql = <<<EOD
update no_concepto_func set 
    estado = case when id_concep_nomina = (select no_param_concep.id_concep_basica from no_param_concep) then estado else 0 end, 
    actual = 1, 
    fecha_hasta = case when fecha_hasta is null then to_date('$fecha_ingre','YYYY-MM-DD')-1 else fecha_hasta end
    WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc
EOD;

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



                    /*
                     * ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO LA FECHA FINAL DE LA ULTIMA NOVEDAD 
                     * A LA FECHA INMEDIATAMENTE ANTERIOR A LA FECHA INICIAL DE LA NUEVA NOVEDAD
                     * Al retirar el funcionario modifico dias de incapacidad y rentigros, no debe modificar estos registros - 20141126
                     */
                    $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO SET fecha_hasta=to_date('$fecha_ingre','YYYY-MM-DD')-1

WHERE id_concepto_periodo IN(
    select conc.id_concepto_periodo ID_CONCEPTO_PERIODO
    from no_concepto_periodo conc
    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.periodo = $id_periodo
        and conc.id_concep_nomina not in (select distinct id_concep_nomina from no_concep_ka)
        and conc.id_concep_nomina not in (select distinct id_concep_nomina from no_concep_vac)
        and conc.id_concep_nomina not in (select distinct nvl(id_concep_ajuste,0) from no_concep_nomina)
        and conc.id_concep_nomina not in (select distinct nvl(id_concep_rein,0) from no_concep_nomina)
)
EOD;

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

                    /*
                     * Dias de resta de kardex - 20130508
                     * Se coloca estado 1 en el filtro de no_novedad_kardex - 20130917
                     */
                    $sql = <<<EOD
select 
nvl(sum(dias_rango_mes_sin_treintayuno(novkar.fecha_ini,novkar.fecha_fin,(select id_meses from no_periodo where id_periodo =  $id_periodo ))),0) as dias 
from no_novedad_kardex novkar
left join no_tip_nov_ka tipnov
on tipnov.id_tip_nov_ka = novkar.id_tip_nov_ka
where tipnov.afecta_antigu = 1 and novkar.id_tipo_doc = $id_tipo_doc and novkar.num_doc = $num_doc and novkar.estado = 1
EOD;

                    $results = CN_TABLE::executeSQL($sql);
                    $dias_kardex = $results[0]['dias'];

                    /*
                     * Se actualiza numero de dias por rango de fechas - 20130407
                     * Se restan dias de kardex que afectan antiguedad - 20130508
                     * Al retirar el funcionario modifico dias de incapacidad y rentigros, no debe modificar estos registros - 20141126
                     */
                    $sql = <<<EOD
update no_concepto_periodo set num_dias = case when 

( case when (fecha_hasta-fecha_desde + 1) > 30 
    then 30 else (fecha_hasta-fecha_desde + 1) end - ($dias_kardex) ) < 0 then 0 else
( case when (fecha_hasta-fecha_desde + 1) > 30 
    then 30 else (fecha_hasta-fecha_desde + 1) end - ($dias_kardex) )    end
        
WHERE id_concepto_periodo IN(
    select conc.id_concepto_periodo ID_CONCEPTO_PERIODO
    from no_concepto_periodo conc
    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.periodo = $id_periodo
        and conc.id_concep_nomina not in (select distinct id_concep_nomina from no_concep_ka)
        and conc.id_concep_nomina not in (select distinct id_concep_nomina from no_concep_vac)
        and conc.id_concep_nomina not in (select distinct nvl(id_concep_ajuste,0) from no_concep_nomina)
        and conc.id_concep_nomina not in (select distinct nvl(id_concep_rein,0) from no_concep_nomina)
)
EOD;

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

                    $sql = <<<EOD
UPDATE NO_ESTADO_FUNC SET ACTUAL = 0 
    WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
        and PERIODO = $id_periodo
EOD;
                    $this->conn->execute($sql);




                    $sql = <<<EOD
            UPDATE RH_DP SET ENCARGADO = NULL, TITULAR= NULL WHERE ID_DP= $id_dp
EOD;
                    $this->conn->execute($sql);

//ACTUALIZO NO_NOMBRAMIENTO ESTADO = 0 Y FECHA DE RETIRO                     
                    $sql = <<<EOD
            UPDATE NO_NOMBRAMIENTO SET ESTADO=0,FECHA_TERMINA=to_date('$fecha_ingre','YYYY-MM-DD')-1,FECHA_RETIRO=to_date('$fecha_ingre','YYYY-MM-DD') 
                WHERE ID_TIPO_DOC=$id_tipo_doc AND NUM_DOC=$num_doc
EOD;

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


//ACTUALIZO no_bonifica_servicios ESTADO = 0 - 20130506
                    $sql = <<<EOD
update no_bonifica_servicios set estado = 0 where id_tipo_doc = $id_tipo_doc and num_doc = $num_doc
EOD;

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


                    /**
                     * Al retirar cambia novedad procedimineto rete - 20141111
                     */
                    $sql = <<<EOD
SELECT * FROM NO_NOVEDAD_PROCED_RETE
where
id_tipo_doc = $id_tipo_doc
and num_doc = $num_doc
order by
num_doc, fecha_terminacion desc  
EOD;
                    $results = CN_TABLE::executeSQL($sql);

//actualiza registro de la ultima novedad por el estado y fecha
                    if (count($results) > 0) {


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

                        /*
                         * Se cambia $fecha_ingre por $fecha_ingre_orig, para guardar fechas de la novedad en concepto_periodo - 20130918
                         */
                        $sql = <<<EOD
update NO_NOVEDAD_PROCED_RETE set fecha_terminacion = null, 
  estado =  1
where
id_tipo_doc = $id_tipo_doc
and num_doc = $num_doc  
and id_novedad_proced_rete = $id_novedad_proced_rete 
EOD;
                        $this->conn->execute($sql);
                    }
                }

//ASCENSO
                else if ($id_novedad == 2) {

                    $sql = <<<EOD
            SELECT ID_CONCEP_BASICA FROM NO_PARAM_CONCEP
EOD;

                    $results = CN_TABLE::executeSQL($sql);
//CONCEPTO DE ASIGNACION BASICA
                    $id_concep_basica = $results[0]['id_concep_basica'];

                    $sql = <<<EOD
            SELECT ASIGNACION_BASICA, ID_CEN_OP, ID_EA FROM NO_DP_V WHERE ID_DP = $id_dp_ini
EOD;
                    $results = CN_TABLE::executeSQL($sql);
//ASIGNACION BASICA DEL NUEVO CARGO
                    $asignacion_basica = $results[0]['asignacion_basica'];
                    $id_cen_op = $results[0]['id_cen_op'];
                    $id_ea = $results[0]['id_ea'];

                    $sql = <<<EOD
            SELECT ASIGNACION_BASICA, ID_CEN_OP, ID_EA FROM NO_DP_V WHERE ID_DP = $id_dp
EOD;
                    $results = CN_TABLE::executeSQL($sql);
//ASIGNACION BASICA DEL NUEVO CARGO
                    $asignacion_basica_fin = $results[0]['asignacion_basica'];


//BUSCO EN LA TABLA NO_CONCEPTO_FUNC EL CONCEPTO DE ASIGNACION ACTUAL DELETE el registro - 20140930

                    $sql = <<<EOD
DELETE FROM NO_CONCEPTO_FUNC WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ID_CONCEP_NOMINA = $id_concep_basica
    and actual = 1
EOD;

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


//CREO EL NUEVO REGISTRO EN LA TABLA NO_CONCEPTO_FUNC

                    $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'),null)
EOD;

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


//BUSCO EN LA TABLA NO_ESTADO_FUNC EL ESTADO ACTUAL Y LE PONGO ACTUAL = 0
                    /*
                     * Se cambia por el periodo de registro
                     */

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

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


//CREO EL NUEVO REGISTRO EN LA TABLA NO_ESTADO_FUNC

                    $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_ini,$id_anhos,$id_meses,$id_periodo,1,$id_cen_op, $id_ea)
EOD;


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


                    /**
                     * Validar fecha de inicio de la novedad - 20140930
                     */
                    $date1 = new DateTime($fecha_ingre);
                    $date2 = new DateTime($fecha_hasta);
                    $date3 = new DateTime($fecha_hasta_periodo);
                    $date4 = new DateTime($fecha_desde_periodo);

                    if ($date1 >= $date4 && $date1 <= $date3) {


//ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO LA FECHA FINAL DE LA ULTIMA NOVEDAD A LA 
//FECHA INMEDIATAMENTE ANTERIOR A LA FECHA INICIAL DE LA NUEVA NOVEDAD

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

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


//CREO EL NUEVO REGISTRO DE NO_CONCEPTO_PERIODO

                        $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO SET   
    NUM_DIAS = $num_dias - TO_NUMBER(to_char(fecha_desde,'DD')) + 1, 
    fecha_hasta = to_date('$fecha_hasta_periodo','YYYY-MM-DD')
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO
    from no_concepto_periodo conc
    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)         
EOD;

                        $this->conn->execute($sql);
                    } elseif ($date1 < $date4) {

                        $logger->info("Fecha inicial antes del periodo a liquidar");

//ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO el valor - 20140930

                        $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO SET  
    valor = $asignacion_basica         
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO
    from no_concepto_periodo conc
    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)
EOD;

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

                        /**
                         * Ajustar el valor correspondiente con el ingreso de un ajuste del nuevo salario 
                         * y el reintegro del sueldo anterior. - 20141106
                         */
//Ajuste AB
                        $sql = <<<EOD
DELETE FROM NO_CONCEPTO_PERIODO 
WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
    AND ID_CONCEP_NOMINA = (select nvl(ID_CONCEP_AJUSTE ,ID_CONCEP_NOMINA ) as ID_CONCEP_AJUSTE from no_concep_nomina where ID_CONCEP_NOMINA = $id_concep_basica )
    AND PERIODO = $id_periodo AND FECHA_DESDE = to_date('$fecha_ingre','YYYY-MM-DD')                               
EOD;


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

//Reintegro AB
                        $sql = <<<EOD
DELETE FROM NO_CONCEPTO_PERIODO 
WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
    AND ID_CONCEP_NOMINA = (select nvl(ID_CONCEP_REIN ,ID_CONCEP_NOMINA ) as ID_CONCEP_REIN from no_concep_nomina where ID_CONCEP_NOMINA = $id_concep_basica )
    AND PERIODO = $id_periodo AND FECHA_DESDE = to_date('$fecha_ingre','YYYY-MM-DD')         
EOD;


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



                    $sql = <<<EOD
            UPDATE RH_DP SET TITULAR = null WHERE ID_DP = $id_dp
EOD;

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


                    $sql = <<<EOD
            UPDATE RH_DP SET TITULAR = NULL, ENCARGADO = '$num_doc' WHERE ID_DP= $id_dp_ini
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'];
//SI PARA LA ASIGNACION BASICA LE CORRESPONDEN LOS CONCEPTOS
                            if ($asignacion_basica >= $rango_minimo && $asignacion_basica <= $rango_maximo) {

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

                                $sql = <<<EOD
            SELECT * FROM NO_CONCEPTO_FUNC WHERE ID_CONCEP_NOMINA = $id_concep_ab AND ID_TIPO_DOC = $id_tipo_doc
                                    AND NUM_DOC = $num_doc AND ACTUAL = 1 AND ESTADO = 1
EOD;

                                $results = CN_TABLE::executeSQL($sql);
//VERIFICO QUE NO LOS TENGA, SI NO, ENTONCES SE LOS CREO EN NO_CONCEPTO_FUNC Y EN NO_CONCEPTO_PERIODO
                                if (count($results) == 0) {

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


//validar que la fecha no supere el inicio del periodo - 20140930
                                    if ($date1 < $date4) {
                                        $fecha_ingre = $fecha_desde_periodo;
                                    }


                                    $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);
                                }
                            } else {
//SI PARA LA ASIGNACION BASICA NO LE CORRESPONDEN LOS CONCEPTOS

                                $sql = <<<EOD
            SELECT * FROM NO_CONCEPTO_FUNC WHERE ID_CONCEP_NOMINA = $id_concep_ab AND ID_TIPO_DOC = $id_tipo_doc
                                    AND NUM_DOC = $num_doc AND ACTUAL = 1 AND ESTADO = 1
EOD;

                                $results = CN_TABLE::executeSQL($sql);
//VERIFICO SI TIENE CREADOS LOS CONCEPTOS, SI LOS TIENE LOS INHABILITO
                                if (count($results) > 0) {

                                    $sql = <<<EOD
            UPDATE NO_CONCEPTO_FUNC SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1 
                WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ID_CONCEP_NOMINA = $id_concep_ab
EOD;

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


//validar que la fecha no supere el inicio del periodo - 20140930
                                    if ($date1 < $date4) {


                                        $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO 
    SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1,
      num_dias =  0                      
        
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

    from no_concepto_periodo conc

    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_ab and conc.periodo = $id_periodo

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

                                        $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO 
    SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1,
      num_dias =  case when ((to_date('$fecha_ingre','YYYY-MM-DD')-1)-fecha_desde + 1) > 30 
          then 30 else (to_date('$fecha_ingre','YYYY-MM-DD')-1-fecha_desde + 1) end                           
        
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc=$id_tipo_doc and conc.num_doc=$num_doc and conc.id_concep_nomina = $id_concep_ab and conc.periodo = $id_periodo

)

EOD;
                                        $this->conn->execute($sql);
                                    }
                                }
                            }
                        }
                    }
                }//FIN ASCENSO
//TERMINACION DE ENCARGO
                else if ($id_novedad == 4) {


//SELECCIONO EL CONCEPTO DE ASIGNACIÓN BÁSICA

                    $sql = <<<EOD
            SELECT ID_CONCEP_BASICA FROM NO_PARAM_CONCEP
EOD;

                    $results = CN_TABLE::executeSQL($sql);
//CONCEPTO DE ASIGNACION BASICA
                    $id_concep_basica = $results[0]['id_concep_basica'];

                    $sql = <<<EOD
    SELECT * FROM NO_NOVEDAD_PERSONAL WHERE ID_NOVEDAD = 3 
        AND ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ESTADO = 0
        order by
        fecha_inicial desc 
EOD;

                    $results = CN_TABLE::executeSQL($sql);
//TRAIGO EL CARGO ANTERIOR AL ENCARGO 
                    $id_dp_ini = $results[0]['id_dp_ini'];
//TRAIGO EL CARGO DEL ENCARGO 
                    $id_dp_fin = $results[0]['id_dp_fin'];
                    $fecha_fin_enc = $results[0]['fecha_terminacion'];
                    $fecha_fin_enc = explode(' ', $fecha_fin_enc);
                    $fecha_fin_enc = $fecha_fin_enc[0];
                    $id_novedad_personal_enc = $results[0]['id_novedad_personal'];



                    $sql = <<<EOD
            SELECT ASIGNACION_BASICA,ID_CEN_OP,ID_EA FROM NO_DP_V WHERE ID_DP = $id_dp_ini
EOD;
                    $results = CN_TABLE::executeSQL($sql);

//ASIGNACION BASICA DEL NUEVO CARGO
                    $asignacion_basica = $results[0]['asignacion_basica'];



                    // AB del cargo anterior - 20141106
                    $sql = <<<EOD
SELECT ASIGNACION_BASICA, ID_CEN_OP, ID_EA FROM NO_DP_V WHERE ID_DP = $id_dp_fin
EOD;
                    $results = CN_TABLE::executeSQL($sql);
//ASIGNACION BASICA DEL NUEVO CARGO
                    $asignacion_basica_fin = $results[0]['asignacion_basica'];


                    /*
                     * Validar que los registros no son null - 20130618
                     */
                    $id_cen_op = 'null';
                    if (!is_null($results[0]['id_cen_op'])) {
                        $id_cen_op = $results[0]['id_cen_op'];
                    }
                    $id_ea = 'null';
                    if (!is_null($results[0]['id_ea'])) {
                        $id_ea = $results[0]['id_ea'];
                    }

                    //SETEO la ultima CON ESTADO = 1 LA NOVEDAD DE ENCARGO

                    $sql = <<<EOD
UPDATE NO_NOVEDAD_PERSONAL SET ESTADO = 1 
    WHERE ID_NOVEDAD = 3 AND ID_TIPO_DOC = $id_tipo_doc 
        AND NUM_DOC = $num_doc
        and id_novedad_personal = $id_novedad_personal_enc 
EOD;

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

//BUSCO EN LA TABLA NO_ESTADO_FUNC EL ESTADO ACTUAL Y LE PONGO ACTUAL = 0

                    $sql = <<<EOD
            UPDATE NO_ESTADO_FUNC SET ACTUAL=0 WHERE ID_TIPO_DOC=$id_tipo_doc AND NUM_DOC=$num_doc and PERIODO = $id_periodo
EOD;

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


//CREO EL NUEVO REGISTRO EN LA TABLA NO_ESTADO_FUNC

                    $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_fin,$id_anhos,$id_meses,$id_periodo,1,$id_cen_op,$id_ea)  
EOD;


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


//BUSCO EN LA TABLA NO_CONCEPTO_FUNC EL CONCEPTO DE ASIGNACION ACTUAL Y PONGO ESTADO = 0 Y ACTUAL = 0

                    $sql = <<<EOD
UPDATE NO_CONCEPTO_FUNC SET ESTADO = 0, ACTUAL = 0, 
    fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')
    WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
        AND ID_CONCEP_NOMINA = $id_concep_basica
        and ACTUAL = 1
EOD;

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

//actualiza REGISTRO EN LA TABLA NO_CONCEPTO_FUNC del encargo 

                    $sql = <<<EOD
UPDATE NO_CONCEPTO_FUNC SET ESTADO = 1, ACTUAL = 1 
    WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
        AND ID_CONCEP_NOMINA = $id_concep_basica
        and ACTUAL = 0 and fecha_hasta = to_date('$fecha_fin_enc','YYYY-MM-DD')
EOD;

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


//ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO LA FECHA FINAL DE LA ULTIMA NOVEDAD A LA 
//FECHA INMEDIATAMENTE ANTERIOR A LA FECHA INICIAL DE LA NUEVA NOVEDAD

                    $sql = <<<EOD
            
select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
    
and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

EOD;

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


                    $id_concep_periodo = $results[0]['id_concepto_periodo'];

                    $sql = <<<EOD
            
select conc.*

from no_concepto_periodo conc

where conc.id_concepto_periodo = $id_concep_periodo



EOD;

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


                    $fecha_ini_per = $concepto[0]['fecha_desde'];
                    $fecha_fin_per = $concepto[0]['fecha_hasta'];



                    $date1 = new DateTime($fecha_ini_per);
                    $date2 = new DateTime($fecha_ingre);



                    /**
                     * Valida si la fecha de la novedad es la misma del primer dia del periodo
                     */
                    if ($date1 == $date2) {


                        //BUSCO EN LA TABLA NO_CONCEPTO_FUNC EL CONCEPTO DE ASIGNACION ACTUAL DELETE el registro - 20140930

                        $sql = <<<EOD
DELETE FROM NO_CONCEPTO_PERIODO 
    WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

    from no_concepto_periodo conc

    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

) 
EOD;

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


                        $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO SET fecha_hasta = to_date('$fecha_hasta_periodo','YYYY-MM-DD'), num_dias = 30 
    
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
    and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)

EOD;


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

                        /*
                         * Validar que la terminacion no sea en un siguiente periodo - 20140114
                         */
                        $sql = <<<EOD
select 
ID_PERIODO,
ID_ANHOS,
ID_MESES,
FECHA_INI,
to_char(FECHA_INI,'YYYY-MM-DD') as fecha_desde,
FECHA_FIN,
to_char(FECHA_FIN,'YYYY-MM-DD') as fecha_hasta,
ID_TIPO_PERIODO,
ESTADO,
FECHA_CIERRE,
FECHA_CIERRE_NOV,
ACTIVO,
MAX_DED_NOLEY,
FECHA_PAGO,
NUM_DOC_PAGO    
from no_periodo where id_periodo = $id_periodo
EOD;

                        $periodo = CN_TABLE::executeSQL($sql);
                        $fecha_ini_per = $periodo[0]['fecha_desde'];
                        $date4 = new DateTime($fecha_ini_per);
                        $fecha_fin_per = $periodo[0]['fecha_hasta'];
                        $date3 = new DateTime($fecha_fin_per);

                        /*
                         * Validar que la terminacion no sea en un siguiente periodo - 20140114
                         */
                        if ($date2 >= $date4 && $date2 <= $date3) {
                            $sql = <<<EOD
DELETE FROM NO_CONCEPTO_PERIODO 
    WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

    from no_concepto_periodo conc

    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

) 
EOD;

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


                            $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO SET fecha_hasta = to_date('$fecha_hasta_periodo','YYYY-MM-DD'), num_dias = 30 
    
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
    and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)

EOD;


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


                            /*
                             * Recalcular num_dias
                             */
                            /*
                             * si la fecha de terminación es menor que la fecha inicial del periodo debe colocar en número de días (0) - 20130813
                             * case when ((to_date('$fecha_ingre','YYYY-MM-DD')-1)-fecha_desde + 1) > 30 then 30 
                             * when ((to_date('$fecha_ingre','YYYY-MM-DD')-1)-fecha_desde + 1) < 0 then 0
                             * else (to_date('$fecha_ingre','YYYY-MM-DD')-1-fecha_desde + 1) end 
                             */
                            /*
                             * Se valida rango de fechas y numero de dias - 20140114
                             */
                            $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO SET 
      num_dias =  
      case  
            when fecha_desde < (select FECHA_INI from no_periodo where id_periodo = $id_periodo) then $num_dias
            when fecha_desde > fecha_hasta then 0
            when ($num_dias - TO_NUMBER(to_char(fecha_desde,'DD'))+1)  <= 0 then 0 
            else ($num_dias - TO_NUMBER(to_char(fecha_desde,'DD'))+1) end                          
        
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
    and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)

EOD;
                            $this->conn->execute($sql);
                        } else if ($date2 < $date4) {
                            /*
                             * Si la terminacion es antes del periodo - 20141126
                             */
                            $logger->info("Si la terminacion es antes del periodo");
                            //ACTUALIZO LA TABLA NO_CONCEPTO_PERIODO el valor - 20140930

                            $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO SET  
    valor = $asignacion_basica_fin         
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO
    from no_concepto_periodo conc
    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_basica and conc.periodo = $id_periodo

)
EOD;

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

                            /**
                             * Ajustar el valor correspondiente con el ingreso de un ajuste del nuevo salario 
                             * y el reintegro del sueldo anterior. - 20141106
                             */
//Ajuste AB
                            $sql = <<<EOD
DELETE FROM NO_CONCEPTO_PERIODO 
WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
    AND ID_CONCEP_NOMINA = (select nvl(ID_CONCEP_AJUSTE ,ID_CONCEP_NOMINA ) as ID_CONCEP_AJUSTE from no_concep_nomina where ID_CONCEP_NOMINA = $id_concep_basica )
    AND PERIODO = $id_periodo AND FECHA_DESDE = to_date('$fecha_ingre','YYYY-MM-DD')                               
EOD;


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

//Reintegro AB
                            $sql = <<<EOD
DELETE FROM NO_CONCEPTO_PERIODO 
WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
    AND ID_CONCEP_NOMINA = (select nvl(ID_CONCEP_REIN ,ID_CONCEP_NOMINA ) as ID_CONCEP_REIN from no_concep_nomina where ID_CONCEP_NOMINA = $id_concep_basica )
    AND PERIODO = $id_periodo AND FECHA_DESDE = to_date('$fecha_ingre','YYYY-MM-DD')         
EOD;


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



                    $sql = <<<EOD
            UPDATE RH_DP SET TITULAR = null WHERE ID_DP = $id_dp_ini
EOD;

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


                    $sql = <<<EOD
            UPDATE RH_DP SET ENCARGADO = '$num_doc' WHERE ID_DP= $id_dp_fin
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);

                    $asignacion_basica = $asignacion_basica_fin;
                    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'];
//SI PARA LA ASIGNACION BASICA LE CORRESPONDEN LOS CONCEPTOS
                            if ($asignacion_basica >= $rango_minimo && $asignacion_basica <= $rango_maximo) {

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

                                $sql = <<<EOD
            SELECT * FROM NO_CONCEPTO_FUNC WHERE ID_CONCEP_NOMINA = $id_concep_ab AND ID_TIPO_DOC = $id_tipo_doc
                                    AND NUM_DOC = $num_doc AND ACTUAL = 1 AND ESTADO = 1
EOD;

                                $results = CN_TABLE::executeSQL($sql);
//VERIFICO QUE NO LOS TENGA, SI NO, ENTONCES SE LOS CREO EN NO_CONCEPTO_FUNC Y EN NO_CONCEPTO_PERIODO
                                if (count($results) == 0) {

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


//validar que la fecha no supere el inicio del periodo - 20140930
                                    if ($date1 < $date4) {
                                        $fecha_ingre = $fecha_desde_periodo;
                                    }


                                    $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);
                                }
                            } else {
//SI PARA LA ASIGNACION BASICA NO LE CORRESPONDEN LOS CONCEPTOS

                                $sql = <<<EOD
            SELECT * FROM NO_CONCEPTO_FUNC WHERE ID_CONCEP_NOMINA = $id_concep_ab AND ID_TIPO_DOC = $id_tipo_doc
                                    AND NUM_DOC = $num_doc AND ACTUAL = 1 AND ESTADO = 1
EOD;

                                $results = CN_TABLE::executeSQL($sql);
//VERIFICO SI TIENE CREADOS LOS CONCEPTOS, SI LOS TIENE LOS INHABILITO
                                if (count($results) > 0) {

                                    $sql = <<<EOD
            UPDATE NO_CONCEPTO_FUNC SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1 
                WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc AND ID_CONCEP_NOMINA = $id_concep_ab
EOD;

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


//validar que la fecha no supere el inicio del periodo - 20140930
                                    if ($date1 < $date4) {


                                        $sql = <<<EOD
UPDATE NO_CONCEPTO_PERIODO 
    SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1,
      num_dias =  0                      
        
WHERE id_concepto_periodo IN(

    select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

    from no_concepto_periodo conc

    where conc.id_tipo_doc = $id_tipo_doc and conc.num_doc = $num_doc 
        and conc.id_concep_nomina = $id_concep_ab and conc.periodo = $id_periodo

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

                                        $sql = <<<EOD
            
UPDATE NO_CONCEPTO_PERIODO 
    SET fecha_hasta = to_date('$fecha_ingre','YYYY-MM-DD')-1,
      num_dias =  case when ((to_date('$fecha_ingre','YYYY-MM-DD')-1)-fecha_desde + 1) > 30 
          then 30 else (to_date('$fecha_ingre','YYYY-MM-DD')-1-fecha_desde + 1) end                           
        
WHERE id_concepto_periodo IN(

select max(conc.id_concepto_periodo) ID_CONCEPTO_PERIODO

from no_concepto_periodo conc

where conc.id_tipo_doc=$id_tipo_doc and conc.num_doc=$num_doc and conc.id_concep_nomina = $id_concep_ab and conc.periodo = $id_periodo

)

EOD;
                                        $this->conn->execute($sql);
                                    }
                                }
                            }
                        }
                    }
                }//FIN Terminacion encargo

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


//ACTUALIZAR SUELDOS DE COMISIONES - 20130618
                $this->conn->beginTransaction();


                if ($id_novedad == 4 || $id_novedad == 3 || $id_novedad == 2 || $id_novedad == 6 || $id_novedad == 7) {

                    $sql = <<<EOD
            UPDATE TERCEROS SET SUELDO = $asignacion_basica WHERE NITOCC = $num_doc
EOD;

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

//                    try {
//                        // ACTUALIZA EL SUELDO EN EL SGR - 20130618
//                        $sql = <<<EOD
//            UPDATE ERP_SGR.TERCEROS SET SUELDO = $asignacion_basica WHERE NITOCC = $num_doc
//EOD;
//                        //$this->conn->execute($sql);
//                    } catch (Exception $exc) {
////                        echo $exc->getTraceAsString();
//                        $logger->info("If ROLLBACK ...");
//                    }
                } elseif ($id_novedad == 1) {

                    $sql = <<<EOD
            UPDATE TERCEROS SET ESTADO = 1 WHERE NITOCC = $num_doc
EOD;

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

//                    try {
//                        // ACTUALIZA EL SUELDO EN EL SGR - 20130618
//
//                        $sql = <<<EOD
//            UPDATE ERP_SGR.TERCEROS SET ESTADO = 1 WHERE NITOCC = $num_doc
//EOD;
//                        $this->conn->execute($sql);
//                    } catch (Exception $exc) {
////                        echo $exc->getTraceAsString();
//                        $logger->info("Else ROLLBACK ...");
//                    }
                }


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

//Actualiza sueldos del ERP_SGR - 20130618
                $this->actualizarSueldos($id_novedad, $asignacion_basica, $num_doc);
            } catch (Exception $e) {

//ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
                $this->conn->rollback();
                $logger->info("[UPDATE Exception] ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR.");
                $logger->info("[UPDATE Exception] " . $e->getMessage());
            } catch (PDOException $e) {
                $this->conn->rollback();
                $logger->info("[UPDATE PDOException] ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR.");
                $logger->info("[UPDATE PDOException] " . $e->getMessage());
            }
        }

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

        return $request;
    }

    /**
     * Actualiza sueldos del ERP_SGR
     * @param type $id_novedad
     * @param type $asignacion_basica
     * @param type $num_doc
     */
    public function actualizarSueldos($id_novedad, $asignacion_basica, $num_doc) {

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

        $this->conn->beginTransaction();

        try {

//ACTUALIZAR SUELDOS DE COMISIONES

            if ($id_novedad == 4 || $id_novedad == 3 || $id_novedad == 2 || $id_novedad == 6 || $id_novedad == 7) {

                $sql = <<<EOD
UPDATE ERP_SGR.TERCEROS SET SUELDO = $asignacion_basica WHERE NITOCC = $num_doc
EOD;
                $this->conn->execute($sql);
            } elseif ($id_novedad == 1) {

                $sql = <<<EOD
UPDATE ERP_SGR.TERCEROS SET ESTADO = 0 WHERE NITOCC = $num_doc
EOD;
                $this->conn->execute($sql);
            }

            $this->conn->commit();
            $logger->info("[actualizarSueldos] 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("[actualizarSueldos Exception] ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR.");
            $logger->info("[actualizarSueldos Exception] " . $e->getMessage());
        } catch (PDOException $e) {
            $this->conn->rollback();
            $logger->info("[actualizarSueldos PDOException] ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR.");
            $logger->info("[actualizarSueldos PDOException] " . $e->getMessage());
        }
    }

}
