<?php

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

    protected $table_names = array(
        'NO_AFILIA_FONDO',
        'NO_DATOS_FUNCIONARIO_V',
        'NO_CLASE_FONDO',
        'NO_MAE_FONDOS',
        'NO_TIPO_APORTE',
        'NO_PERIODO',
        'NO_TIPO_PERIODO'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'NO_DATOS_FUNCIONARIO_V' =>
        array(
            'id_tipo_doc' => 'NO_AFILIA_FONDO',
            'num_doc' => 'NO_AFILIA_FONDO'
        ),
        'NO_CLASE_FONDO' =>
        array(
            'id_clase_fondo' => 'NO_AFILIA_FONDO'
        ),
        'NO_MAE_FONDOS' =>
        array(
            'id_mae_fondos' => 'NO_AFILIA_FONDO'
        ),
        'NO_TIPO_APORTE' =>
        array(
            'id_tipo_aporte' => 'NO_AFILIA_FONDO'
        ),
        'NO_PERIODO' =>
        array(
            'id_periodo' => 'NO_AFILIA_FONDO'
        ),
        'NO_TIPO_PERIODO' =>
        array(
            'id_tipo_periodo' => 'NO_PERIODO'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'NO_AFILIA_FONDO' =>
        array(
            'id_afilia_fondo' => 'id_afilia_fondo',
            'id_tipo_doc' => 'id_tipo_doc',
            'num_doc' => 'num_doc',
            'id_clase_fondo' => 'id_clase_fondo',
            'id_mae_fondos' => 'id_mae_fondos',
            'num_afiliacion' => 'num_afiliacion',
            'numero_doc' => 'numero_doc',
            'fecha_doc' => 'fecha_doc',
            'fecha_ingreso' => 'fecha_ingreso',
            'fecha_retiro' => 'fecha_retiro',
            'id_tipo_aporte' => 'id_tipo_aporte',
            'centro_trabajo' => 'centro_trabajo',
            'riesgo' => 'riesgo',
            'estado' => 'estado',
            'id_periodo' => 'id_periodo'
        ),
        'NO_DATOS_FUNCIONARIO_V' =>
        array(
            'nombre_completo' => 'nombre_completo'
        ),
        'NO_MAE_FONDOS' =>
        array(
            'codigo' => 'codigo_fondo',
            'razon_social' => 'razon_social',
            'codigo,||, - ,||,razon_social' => 'completo_fondo'
        ),
        'NO_CLASE_FONDO' =>
        array(
            'codigo' => 'codigo_clase',
            'descripcion' => 'descripcion_clase',
            'codigo,||, - ,||,descripcion' => 'completo_clase'
        ),
        'NO_TIPO_APORTE' =>
        array(
            'codigo' => 'codigo_aporte',
            'descripcion' => 'descripcion_aporte',
            'codigo,||, - ,||,descripcion' => 'completo_aporte'
        ),
        'NO_PERIODO' =>
        array(
            'id_meses' => 'id_meses',
            'id_anhos' => 'id_anhos'
        ),
        'NO_TIPO_PERIODO' =>
        array(
            'descripcion' => 'descripcion_periodo'
        )
    ); //por cada tabla especificar los campos del select

    /*
     * OPCIONES DE FILTRO:
     *
     * LIKEALLPLUS- busqueda comparativa de la cadena dividida por los espacios en blanco en cualquier posición
     * LIKEALL - busqueda comparativa de la cadena en cualquier posición
     * LIKE - busqueda en la cadena que inicie por la variable de filtro
     *
     * _filtroNull / para filtro de not null o null - type debe ser is - para todas las variables
     * TYPE NULL / para filtro de not null o null con el valor de campo desde gwt
     * EJEMPLO: 'titular' => array('NULL' => array('titular')),
     *
     * rownum,start - rownum,end / estos campos para uso del Grid live GWT, numero fijo de filas de consulta
     */
    protected $table_field_conditions = array(
        'NO_AFILIA_FONDO' => array(
            'id_afilia_fondo,a' => array('!=' => array(-1)),
            'id_afilia_fondo,b' => array('=' => array('id_afilia_fondo')),
            'id_tipo_doc' => array('=' => array('id_tipo_doc')),
            'num_doc' => array('=' => array('num_doc')),
            'id_clase_fondo' => array('=' => array('id_clase_fondo')),
            'id_mae_fondos' => array('=' => array('id_mae_fondos')),
            'num_afiliacion' => array('=' => array('num_afiliacion')),
            'id_tipo_aporte' => array('=' => array('id_tipo_aporte')),
            'estado' => array('=' => array('estado')),
            'id_periodo' => array('=' => array('id_periodo_filtro')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        )
    ); //por cada tabla se dan los campos, opcion de filtro y variable que entra para los posibles filtros
    protected $table_field_or_conditions = array(); // filtros de condicion or
//    protected $query_qualifier = 'DISTINCT'; //Variable para el sql para eliminar filas repetidas
    protected $fields_orderBy = array(
        'num_doc', 'codigo_clase', 'fecha_ingreso'
    ); //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_afilia_fondo'; //identificador de la tabla - solo si es un dato no llave compuesta
    protected $id_names = array('id_afilia_fondo'); //llave primaria
    protected $field_names = array('id_tipo_doc', 'num_doc', 'id_clase_fondo',
        'id_mae_fondos', 'num_afiliacion', 'numero_doc', 'fecha_doc', 'fecha_ingreso',
        'fecha_retiro', 'id_tipo_aporte', 'centro_trabajo', 'riesgo', 'estado', 'id_periodo'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'NO_AFILIA_FONDO'; //tabla en la cual se aplican los cambios
    protected $has_activo = true; //si posee campo en la tabla de nombre activo ---- ESTADO PARA REGALIAS - CARTERA
    protected $has_vigencia = false; //si posee vigencia
    protected $has_cen_op = false; //si posee centro de operacion
    protected $has_id_cia = false; //si posee compañia
    protected $has_secuencia = false; //si posee secuencia la tabla - true si es por tabla, false - trigger
//    protected $en_mayuscula = true; // si se pone, se puede poner en mayucula con true y en minuscula con false, de lo contrario la pone tal cual la BD

    /*
     * campos para fecha sistema
     */
//    protected $campo_fecha_sistema = array(
//        'fecha_crea'
//    );

    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_afilia_fondo'; //identificador unico de la tabla
    //false - Registrar log para list - consultar
    protected $log_list = false;
    //false - Registrar log para add - update - remove
    protected $log_crud = false;

    /**
     * Construccion de observacion perzonalizada
     * 
     * Toda variable para tomarla del request con el formato:
     * &request-variable&
     * 
     * false - observacion por defecto
     *
     * @var string 
     */
    protected $observacion_list = false;
    protected $observacion_add = false;
    protected $observacion_update = false;
    protected $observacion_remove = false;

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

        //valor por defecto
        $errors = null;

        /*
         * Variables request
         */
        $id_tipo_doc = $request['id_tipo_doc'];
        $num_doc = $request['num_doc'];
        $id_clase_fondo = $request['id_clase_fondo'];

        /*
         * Valida solo para pension - 20131105
         */
        if ($id_clase_fondo == 1) {

            /*
             *  Validar la operación, ya sea por SQL
             */
            $sql = <<<EOD
select * 
from no_pension_func
where
id_tipo_doc = $id_tipo_doc
and num_doc = '$num_doc'
and estado = 1
EOD;
            $records = CN_TABLE::executeSQL($sql);
            /*
             *  Generar errores en $errors
             */
            if (count($records) > 0) {
                $errors['mensaje'] = "El funcionario ya posee un registro de pensión activo.";
                $errors['servicio'] = "afilia_fondo";
            }
        }

        return $errors;
    }

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

        //valor por defecto
        $errors = null;

        /*
         * Variables request
         */
//        $id_tipo_doc = $request['id_tipo_doc'];
//        $num_doc = $request['num_doc'];
//        $id_clase_fondo = $request['id_clase_fondo'];

        /*
         *  Validar la operación, ya sea por SQL
         */
//        $sql = <<<EOD
//select * 
//from no_afilia_fondo
//where
//id_tipo_doc = $id_tipo_doc
//and num_doc = '$num_doc'
//and id_clase_fondo = $id_clase_fondo 
//EOD;
//        $records = CN_TABLE::executeSQL($sql);
        /*
         *  Generar errores en $errors
         */
//        if (count($records) > 0) {
//            $errors['mensaje'] = "Ya posee un registro de fondo, para la clase de fondo selecionado.";
//            $errors['servicio'] = "afilia_fondo";
//        }

        return $errors;
    }

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

        //valor por defecto
        $errors = null;

        $id_afilia_fondo = $request['id_afilia_fondo'];
        $id_periodo = $request['id_periodo'];

        /*
         *  Validar la operación, ya sea por SQL
         */
        $sql = <<<EOD
select 
* 
from no_afilia_fondo
where
id_afilia_fondo = $id_afilia_fondo
and estado = 1
and id_periodo != $id_periodo  
EOD;
        $records = CN_TABLE::executeSQL($sql);
        /*
         *  Generar errores en $errors
         */
        if (count($records) > 0) {
            $errors['mensaje'] = "No puede eliminar el registro, no fue creado en el periodo activo.";
            $errors['servicio'] = "afilia_fondo";
        }

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

            /*
             * Variables request
             */
            $fecha_retiro = $request['fecha_retiro_ant'];
            $fecha_ingreso = $request['fecha_ingreso'];
            $id_tipo_doc = $request['id_tipo_doc'];
            $num_doc = $request['num_doc'];
            $id_clase_fondo = $request['id_clase_fondo'];

            $sql = <<<EOD
update no_afilia_fondo 
set estado = 0, fecha_retiro = to_date( '$fecha_retiro', 'yyyy-mm-dd')
where
estado = 1
and id_tipo_doc = $id_tipo_doc
and num_doc = '$num_doc' 
and id_clase_fondo = $id_clase_fondo 
and fecha_retiro is null
EOD;
            CN_TABLE::executeSQL($sql);

            /*
             * Se traen las afiliaciones que estan anuladas 
             * para tomar el ultimo registro se ordenan descendente el id_afilia_fondo - 20130507
             */
            $sql = <<<EOD
SELECT id_mae_fondos, id_tipo_aporte
    from no_afilia_fondo
    where
estado = 0
and id_tipo_doc = $id_tipo_doc
and num_doc = '$num_doc' 
and id_clase_fondo = $id_clase_fondo 
and fecha_retiro is not null
order by id_afilia_fondo desc
EOD;

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

            if (count($results) > 0) {

                $id_mae_fondos = $results[0]['id_mae_fondos'];
                $id_tipo_aporte = $results[0]['id_tipo_aporte'];
                $id_periodo = $request['id_periodo'];


                //CONSULTO LOS CONCEPTOS QUE APLICAN DE ACUERDO A LOS FONDOS

                $sql = "select descto.porcentaje_func AS PORCENTAJE, descto.rango_desde, descto.rango_hasta, foncon.id_concep_nomina
                      from no_descto_detalle descto
                      LEFT JOIN no_fondo_concepto foncon ON foncon.id_descuento_ss = descto.id_descuento_ss
                      where foncon.id_mae_fondos = $id_mae_fondos and descto.id_tipo_aporte = $id_tipo_aporte";

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

                //RECORRO LOS CONCEPTOS PARA VERIFICAR CUALES APLICAN TENIENDO EN CUENTA EL RANGO DE APLICACION (SMDLV)

                foreach ($results as $conceptos) {

                    $rango_desde = $conceptos['rango_desde'];
                    $rango_hasta = $conceptos['rango_hasta'];

                    $sql = "select estado.*,
                            (
                            select salario.valor_mensual 
                            from no_smdlv salario
                            join no_param_gen param ON param.id_anhos = salario.vigencia
                            ) AS SALARIO
                          from no_concepto_func estado
                          join no_param_concep parametros ON parametros.id_concep_basica = estado.id_concep_nomina
                          where estado.estado=1 and estado.actual=1 and estado.id_tipo_doc = $id_tipo_doc and estado.num_doc='$num_doc'";

                    $results = CN_TABLE::executeSQL($sql);
                    $asignacion_basica = $results[0]['valor'];
                    $salario = $results[0]['valor'];
                    $num_salarios = round($asignacion_basica / $salario, 2);

                    $id_concepto = $conceptos['id_concep_nomina'];

                    if ($num_salarios >= $rango_desde && $num_salarios <= $rango_hasta) {

                        //solo registros activos
                        $sql = <<<EOD
UPDATE NO_CONCEPTO_FUNC SET ESTADO = 0, ACTUAL = 0, FECHA_HASTA = to_date('$fecha_retiro','YYYY-MM-DD')
   WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc 
       and ID_CONCEP_NOMINA = $id_concepto and ESTADO = 1
EOD;
                        CN_TABLE::executeSQL($sql);

                        /*
                         * Actualizacion de no_concepto_periodo - 20130319
                         * Se elimina registro en vez de actualizar solo la fecha, para evitar repeticion de fondos en un periodo
                         */

//                        $sql = <<<EOD
//            UPDATE NO_CONCEPTO_PERIODO SET FECHA_HASTA = to_date('$fecha_retiro','YYYY-MM-DD')
//               WHERE ID_TIPO_DOC = $id_tipo_doc AND NUM_DOC = $num_doc and ID_CONCEP_NOMINA = $id_concepto AND PERIODO= $id_periodo
//EOD;
//                        CN_TABLE::executeSQL($sql);

                        $sql = <<<EOD
delete from NO_CONCEPTO_PERIODO 
where id_concepto_periodo in (
  select tab.id_concepto_periodo FROM NO_CONCEPTO_PERIODO tab
  join no_periodo per 
  on tab.PERIODO = per.id_periodo
   WHERE tab.ID_TIPO_DOC = $id_tipo_doc AND tab.NUM_DOC = $num_doc 
       and tab.ID_CONCEP_NOMINA = $id_concepto AND tab.PERIODO = $id_periodo
       and to_date('$fecha_ingreso','YYYY-MM-DD') < per.fecha_fin 
) 
EOD;
                        CN_TABLE::executeSQL($sql);
                    }
                }
            }
            //$request['fecha_retiro'] = null;
        }

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

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

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

            try {
                /**
                 * Eliminacion de afiliacion, borra concepto funcionario y periodo - 20151120
                 */
                $id_afilia_fondo = $request['id_afilia_fondo'];
                $id_periodo = $request['id_periodo'];

                /*
                 *  Validar la operación, ya sea por SQL
                 */
                $sql = <<<EOD
select 
* 
from no_afilia_fondo
where
id_afilia_fondo = $id_afilia_fondo
and estado = 1
and id_periodo = $id_periodo  
EOD;
                $records = CN_TABLE::executeSQL($sql);

                $id_tipo_doc = $records[0]['id_tipo_doc'];
                $num_doc = $records[0]['num_doc'];
                $id_mae_fondos = $records[0]['id_mae_fondos'];
                $id_tipo_aporte = $records[0]['id_tipo_aporte'];

                //CONSULTO LOS CONCEPTOS QUE APLICAN DE ACUERDO A LOS FONDOS

                $sql = "select descto.porcentaje_func AS PORCENTAJE, descto.rango_desde, descto.rango_hasta, foncon.id_concep_nomina, connom.id_tipo_concepto
                      from no_descto_detalle descto
                      LEFT JOIN no_fondo_concepto foncon ON foncon.id_descuento_ss = descto.id_descuento_ss
                      left join no_concep_nomina connom on foncon.id_concep_nomina = connom.id_concep_nomina
                      where foncon.id_mae_fondos = $id_mae_fondos and descto.id_tipo_aporte = $id_tipo_aporte";

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

                foreach ($results as $conceptos) {

                    $id_concepto = $conceptos['id_concep_nomina'];
                    $porcentaje = $conceptos['porcentaje'];

                    $sql = <<<EOD
delete from no_concepto_func
where
id_tipo_doc = $id_tipo_doc
and num_doc = '$num_doc'
and id_concep_nomina = $id_concepto
and porcentaje = $porcentaje
and estado = 1 
EOD;

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

                    //borra concepto periodo 
                    $sql = <<<EOD
delete from no_concepto_periodo
where
id_tipo_doc = $id_tipo_doc
and num_doc = '$num_doc'
and periodo = $id_periodo
and id_concep_nomina = $id_concepto
and porcentaje = $porcentaje 
EOD;

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

                $this->conn->commit();
            } catch (Exception $e) {

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

        return $request;
    }

    /**
     * Acciones posteriores a la original
     * 
     * return sfWebRequest Changed Request with additional parameters.
     * 
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest 
     */
    protected function postprocessRequest($Action, sfWebRequest $request, $list_data_post) {

        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a postprocessRequest - " . $list_data_post);

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

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

            try {

                $id_tipo_doc = $list_data_post[0]['id_tipo_doc'];
                $num_doc = $list_data_post[0]['num_doc'];
                $fecha_ingre = $list_data_post[0]['fecha_ingreso'];
                $fecha_retiro = $list_data_post[0]['fecha_retiro'];
                $id_mae_fondos = $list_data_post[0]['id_mae_fondos'];
                $id_clase_fondo = $list_data_post[0]['id_clase_fondo'];
                $id_tipo_aporte = $list_data_post[0]['id_tipo_aporte'];
                $id_periodo = $list_data_post[0]['id_periodo'];

                //CONSULTO LOS CONCEPTOS QUE APLICAN DE ACUERDO A LOS FONDOS

                $sql = "select descto.porcentaje_func AS PORCENTAJE, descto.rango_desde, descto.rango_hasta, foncon.id_concep_nomina, connom.id_tipo_concepto
                      from no_descto_detalle descto
                      LEFT JOIN no_fondo_concepto foncon ON foncon.id_descuento_ss = descto.id_descuento_ss
                      left join no_concep_nomina connom on foncon.id_concep_nomina = connom.id_concep_nomina
                      where foncon.id_mae_fondos = $id_mae_fondos and descto.id_tipo_aporte = $id_tipo_aporte";

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

                //RECORRO LOS CONCEPTOS PARA VERIFICAR CUALES APLICAN TENIENDO EN CUENTA EL RANGO DE APLICACION (SMDLV)

                foreach ($results as $conceptos) {

                    $rango_desde = $conceptos['rango_desde'];
                    $rango_hasta = $conceptos['rango_hasta'];

                    $sql = "select estado.*,
                            (
                            select salario.valor_mensual 
                            from no_smdlv salario
                            join no_param_gen param ON param.id_anhos = salario.vigencia
                            ) AS SALARIO
                          from no_concepto_func estado
                          join no_param_concep parametros ON parametros.id_concep_basica = estado.id_concep_nomina
                          where estado.estado = 1 and estado.actual = 1 and estado.id_tipo_doc = $id_tipo_doc and estado.num_doc='$num_doc'";

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

                    $asignacion_basica = $results[0]['valor'];
                    $salario = $results[0]['valor'];
                    $num_salarios = round($asignacion_basica / $salario, 2);
                    $id_concepto = $conceptos['id_concep_nomina'];
                    $id_tipo_concepto = $conceptos['id_tipo_concepto'];
                    $porcentaje = $conceptos['porcentaje'];

                    if ($num_salarios >= $rango_desde && $num_salarios <= $rango_hasta) {

                        //CREO EL REGISTRO EN LA TABLA NO_CONCEPTO_FUNC

                        if ($fecha_retiro != "" && $id_tipo_concepto != 4) {

                            $sql = <<<EOD
            INSERT INTO NO_CONCEPTO_FUNC (ID_TIPO_DOC,NUM_DOC,ID_CONCEP_NOMINA,PORCENTAJE,ESTADO,ACTUAL,FECHA_DESDE,FECHA_HASTA)
                VALUES($id_tipo_doc,$num_doc,$id_concepto,$porcentaje,1,1,to_date('$fecha_ingre','YYYY-MM-DD'),to_date('$fecha_retiro','YYYY-MM-DD'))
EOD;
                        } elseif ($id_tipo_concepto != 4) {
                            $sql = <<<EOD
            INSERT INTO NO_CONCEPTO_FUNC (ID_TIPO_DOC,NUM_DOC,ID_CONCEP_NOMINA,PORCENTAJE,ESTADO,ACTUAL,FECHA_DESDE)
                VALUES($id_tipo_doc,$num_doc,$id_concepto,$porcentaje,1,1,to_date('$fecha_ingre','YYYY-MM-DD'))
EOD;
                        }
                        $this->conn->execute($sql);

                        if ($id_tipo_concepto != 4) {
                            $sql = <<<EOD
            SELECT * FROM NO_PERIODO WHERE ID_PERIODO = $id_periodo 
EOD;
                            $results = CN_TABLE::executeSQL($sql);
                            $parametros = CN_TABLE::executeSQL($sql);
                            $id_anhos = $parametros[0]['id_anhos'];
                            $id_meses = $parametros[0]['id_meses'];
                            $id_periodo = $parametros[0]['id_periodo'];
                            $id_tipo_periodo = $results[0]['id_tipo_periodo'];

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

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


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

                            /**
                             * NOM-93 :: SGC-Validar registro en concepto periodo - 20150331
                             */
                            $sql = <<<EOD
select per.* from no_periodo per 
     WHERE 
     per.id_periodo = $id_periodo
       and to_date('$fecha_ingre','YYYY-MM-DD') between per.fecha_ini and per.fecha_fin
EOD;
                            $results_aplica = CN_TABLE::executeSQL($sql);

                            if (count($results_aplica) > 0) {
                                $aplica_insert = true;
                            } else {
                                $aplica_insert = false;
                            }

                            /*
                             * ($num_dias - TO_NUMBER(to_char(to_date('$fecha_ingre','YYYY-MM-DD'),'DD')))+1
                             * validar nuevo registros - 20150331
                             */
                            if ($aplica_insert && $id_tipo_concepto != 4) {
                                $sql = <<<EOD
INSERT INTO NO_CONCEPTO_PERIODO (ID_ANHOS,ID_MESES,PERIODO,ID_TIPO_DOC,NUM_DOC,ID_CONCEP_NOMINA,FECHA_DESDE,FECHA_HASTA,PORCENTAJE,NUM_DIAS)
    VALUES($id_anhos,$id_meses,$id_periodo,$id_tipo_doc,$num_doc,$id_concepto,
        to_date('$fecha_ingre','YYYY-MM-DD'),last_day(to_date('$fecha_ingre','YYYY-MM-DD')),
            $porcentaje, ($num_dias-to_char( to_date('$fecha_ingre','YYYY-MM-DD'),'dd') ) + 1 )
EOD;
                                $this->conn->execute($sql);
                            } else {

                                /**
                                 * NOM-224 :: COL-Por favor actualizar la validación en el cambio de Fondos.
                                 * Si la fecha desde cuando inicia es anterior al inicio del periodo actual, debe actualizar el CONCEPTO-PERIODO actual.
                                 * Eliminar los del fondo anterior y adicionar los conceptos del nuevo fondo.  - 20151203
                                 */
                                $sql = <<<EOD
select per.* from no_periodo per 
     WHERE 
     per.id_periodo = $id_periodo
       and to_date('$fecha_ingre','YYYY-MM-DD') < per.fecha_ini 
EOD;
                                $results_aplica = CN_TABLE::executeSQL($sql);

                                if (count($results_aplica) > 0) {

                                    $sql = <<<EOD
INSERT INTO NO_CONCEPTO_PERIODO (ID_ANHOS,ID_MESES,PERIODO,ID_TIPO_DOC,NUM_DOC,ID_CONCEP_NOMINA,FECHA_DESDE,FECHA_HASTA,PORCENTAJE,NUM_DIAS)
    VALUES($id_anhos,$id_meses,$id_periodo,$id_tipo_doc,$num_doc,$id_concepto,
        (select per.fecha_ini from no_periodo per WHERE   per.id_periodo = $id_periodo),(select per.fecha_fin from no_periodo per WHERE   per.id_periodo = $id_periodo),
            $porcentaje, ($num_dias) )
EOD;
                                    $this->conn->execute($sql);
                                }
                            }
                        }
                    }
                }

                $this->conn->commit();
            } catch (Exception $e) {

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

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

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

        return $request;
    }

}
