<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of actions
 *
 * @author ManuelEnriqueParedesLopez
 */
class novedad_vac_solitActions extends sfQuery {

    protected $table_names = array(
        'NO_NOVEDAD_VAC_SOLIT_V',
        'NO_NOVEDAD_VAC',
        'NO_DATOS_FUNCIONARIO_V',
        'NO_TIPO_NOV_VAC',
        'NO_PERIODO_V',
        'NO_TIPO_PERIODO',
        'NO_CAUSA_VACAC',
        'INTERCEROS_V'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'NO_NOVEDAD_VAC,LEFT' =>
        array(
            'id_novedad_vac' => 'NO_NOVEDAD_VAC_SOLIT_V'
        ),
        'NO_DATOS_FUNCIONARIO_V,LEFT' =>
        array(
            'id_tipo_doc' => 'NO_NOVEDAD_VAC_SOLIT_V',
            'num_doc' => 'NO_NOVEDAD_VAC_SOLIT_V'
        ),
        'NO_TIPO_NOV_VAC,LEFT' =>
        array(
            'id_tipo_nov_vac' => 'NO_NOVEDAD_VAC'
        ),
        'NO_PERIODO_V,LEFT' =>
        array(
            'id_periodo' => 'NO_NOVEDAD_VAC_SOLIT_V'
        ),
        'NO_TIPO_PERIODO,LEFT' =>
        array(
            'id_tipo_periodo' => 'NO_PERIODO_V'
        ),
        'NO_CAUSA_VACAC,LEFT' =>
        array(
            'id_causa_vacac' => 'NO_NOVEDAD_VAC'
        ),
        'INTERCEROS_V,LEFT' =>
        array(
            'id_jefe-id_mae_ter' => 'NO_NOVEDAD_VAC_SOLIT_V'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'NO_NOVEDAD_VAC_SOLIT_V' =>
        array(
            'id_novedad_vac_solit' => 'id_novedad_vac_solit',
            'id_tipo_doc' => 'id_tipo_doc',
            'num_doc' => 'num_doc',
            'id_causa_vacac' => 'id_causa_vacac',
            'fecha_per_cau' => 'fecha_per_cau',
            'fecha_ini' => 'fecha_ini',
            'fecha_fin' => 'fecha_fin',
            'num_dias_vac' => 'num_dias_vac',
            'num_dias_hab' => 'num_dias_hab',
            'observaciones' => 'observaciones',
            'id_jefe' => 'id_jefe',
            'id_periodo' => 'id_periodo',
            'fecha_registro' => 'fecha_registro',
            'estado' => 'estado',
            'fecha_estado' => 'fecha_estado',
            'usuario_estado' => 'usuario_estado',
            'obser_estado' => 'obser_estado',
            'aprobado' => 'aprobado',
            'fecha_aprobado' => 'fecha_aprobado',
            'obser_aprobado' => 'obser_aprobado',
            'estado_general' => 'estado_general',
            'desc_estado_general' => 'desc_estado_general',
            'usuario_estado_general' => 'usuario_estado_general',
            'obs_estado_general' => 'obs_estado_general',
            'fecha_estado_general' => 'fecha_estado_general',
            'solicitud_anul' => 'solicitud_anul',
            'fecha_solicitud_anul' => 'fecha_solicitud_anul',
            'solicitud_anul_obs' => 'solicitud_anul_obs',
            'cancelado' => 'cancelado',
            'anulado' => 'anulado',
            'fecha_anulado' => 'fecha_anulado',
            'anulado_obs' => 'anulado_obs',
            'aplazada' => 'aplazada',
            'fecha_aplazada' => 'fecha_aplazada',
            'interrumpida' => 'interrumpida',
            'fecha_interrumpida' => 'fecha_interrumpida',
            'fecha_desde_interrupcion' => 'fecha_desde_interrupcion',
            'dias_habiles_disfru' => 'dias_habiles_disfru',
            'dias_habiles_pend' => 'dias_habiles_pend',
            'nueva_fecha_disfrute' => 'nueva_fecha_disfrute',
            'justificacion' => 'justificacion',
            'id_nov_vac_solit_origen' => 'id_nov_vac_solit_origen',
            'id_novedad_vac_reint' => 'id_novedad_vac_reint',
            'aplica_filtro_nov' => 'aplica_filtro_nov'
        ),
        'NO_DATOS_FUNCIONARIO_V' =>
        array(
            'nombre_completo' => 'nombre_completo',
            'nombre_apellido' => 'nombre_apellido'
        ),
        'NO_TIPO_NOV_VAC' =>
        array(
            'codigo' => 'codigo',
            'descripcion' => 'descripcion',
            'codigo,||, - ,||,descripcion' => 'completo_tipvac'
        ),
        'NO_PERIODO_V' =>
        array(
            'id_meses' => 'id_meses',
            'id_anhos' => 'id_anhos',
            'periodo' => 'periodo'
        ),
        'NO_TIPO_PERIODO' =>
        array(
            'descripcion' => 'descripcion_periodo'
        ),
        'NO_CAUSA_VACAC' =>
        array(
            'fecha_ini' => 'fecha_ini_causa',
            'fecha_fin' => 'fecha_fin_causa',
            'dias_disfrutados' => 'dias_disfrutados_causa',
            'saldos_dias' => 'saldo_dias_causa'
        ),
        'INTERCEROS_V' =>
        array(
            'razon_soc' => 'jefe',
            'num_doc' => 'num_doc_jefe'
        )
    ); //por cada tabla especificar los campos del select
    protected $fields_orderBy = array(
        'num_doc', 'fecha_registro'
    ); //campos para el ordenamiento de la consulta


    /*
     * 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
     * rownum,start - rownum,end / estos campos para uso del Grid live GWT, numero fijo de filas de consulta
     */
    protected $table_field_conditions = array(
        'NO_NOVEDAD_VAC_SOLIT_V' =>
        array(
            'id_novedad_vac_solit,a' => array('!=' => array(-1)),
            'id_novedad_vac_solit,b' => array('=' => array('id_novedad_vac_solit')),
            'id_tipo_doc' => array('=' => array('id_tipo_doc')),
            'num_doc' => array('=' => array('num_doc')),
            'id_causa_vacac' => array('=' => array('id_causa_vacac')),
            //'fecha_registro' => array('BETWEENFECHA' => array('fecha_ini', 'fecha_fin')),
            'fecha_ini' => array('BETWEENFECHA' => array('fecha_ini', 'fecha_fin')),
            'fecha_fin' => array('BETWEENFECHA' => array('fecha_ini', 'fecha_fin')),
            'estado_general' => array('IN' => array('estado_general')),
            'estado' => array('IN' => array('estado_solit')),
            'id_jefe' => array('=' => array('id_jefe')),
            'aprobado' => array('=' => array('aprobado')),
            'aplazada' => array('=' => array('aplazada')),
            'interrumpida' => array('=' => array('interrumpida')),
            'aplica_filtro_nov' => array('=' => array('aplica_filtro_nov')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        ),
        'INTERCEROS_V' =>
        array(
            'num_doc' => array('=' => array('num_doc_jefe'))
        )
    ); //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'; //Para eliminar filas repetidas

    /*
     * Variable manejo de log
     */
    //true - consulta de administracion
    protected $is_admin = false;
    //si es servicio para filtro agregar campo
    protected $filtro = 'Solicitud Novedad Vacaciones';
    //true - la tabla principal de busqueda no es una vista
    protected $is_filtro = true;



    /*
     * ------------VARIABLES PARA SERVICIOS CRUD
     */
    protected $id_name = 'id_novedad_vac_solit'; //identificador de la tabla
    protected $id_names = array('id_novedad_vac_solit'); //llave primaria
    protected $field_names = array('id_tipo_doc', 'num_doc', 'id_causa_vacac', 'fecha_per_cau',
        'fecha_ini', 'fecha_fin', 'num_dias_vac', 'num_dias_hab', 'observaciones', 'id_jefe', 'id_periodo',
        'fecha_registro', 'id_novedad_vac', 'estado', 'fecha_estado', 'usuario_estado', 'obser_estado', 'aprobado'
        , 'fecha_aprobado', 'obser_aprobado', 'solicitud_anul', 'fecha_solicitud_anul', 'solicitud_anul_obs',
        'cancelado', 'anulado', 'fecha_anulado', 'anulado_obs'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'NO_NOVEDAD_VAC_SOLIT'; //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_vac_solit'; //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;

    /**
     * 
     * @param type $Action
     * @param sfWebRequest $request
     * @param type $list_data_post
     * @return string
     * 
     * bandera_editar
     * 1 - Aprueba
     * 2 - Solicita ANulacion
     * 3 - Cancela
     * 4 - Rechaza
     * 5 - Anula
     */
    protected function postprocessRequest($Action, sfWebRequest $request, $list_data_post) {

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

        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {
            $id_novedad_vac_solit = $list_data_post[0]['id_novedad_vac_solit'];
            //LLamar envioNotificacion
            $this->envioNotificacion($request, $id_novedad_vac_solit);
        }

        //accion update
        if ($Action == "UPDATE") {
            if (isset($request['bandera_editar'])) {
                /*
                 * (SGC-1, ANM-2, SGR-3, CYC-4, COL-5, INCI-6, LOCAL-7)
                 */

                $array = sfYaml::load(dirname(__FILE__) . '/../../../config/app-gwt.yml');

                $int = 0;
                foreach ($array as $routeName => $routeData) {
                    //echo $routeName . "\n";
                    if ('entidad_cliente' == $routeName) {
                        foreach ($routeData as $key => $value) {
                            //echo $value . "\n";
                            if ($key == 'value') {
                                $entidadCliente = $value;
                            }
                        }
                    }
                    if ('correoEnvio' == $routeName) {
                        foreach ($routeData as $key => $value) {
                            //echo $value . "\n";
                            if ($key == 'value') {
                                $correoEnvio = $value;
                            }
                        }
                    }
                    if ('jasper_url_local' == $routeName) {
                        foreach ($routeData as $key => $value) {
                            //echo $value . "\n";
                            if ($key == 'value') {
                                $url_jasper = $value;
                            }
                        }
                    }
                    if ('serviceHtml_url' == $routeName) {
                        foreach ($routeData as $key => $value) {
                            if ($key == 'value') {
                                $url_html = $value;
                            }
                        }
                    }


                    $int++;
                }


                $this->logMessage('Entro en ENVIO DE CORREOS');


                $this->logMessage('CONSULTO VARIABLES DE ARCHIVOS!!!');

                $id_mae_ter = $list_data_post[0]['id_jefe'];
                $username = $request['username'];
                $num_doc = $list_data_post[0]['num_doc'];
                $bandera_editar = $request['bandera_editar'];
                $id_novedad_vac_solit = $list_data_post[0]['id_novedad_vac_solit'];

                $sql = "
                         SELECT tab0.dia_sistema||' de '||tab0.mes_sistema||' del '||anho_sistema AS FECHA_SISTEMA
                            from(
                             select LPAD(to_char(sysdate,'dd'),2,'0') as dia_sistema,
                             trim(initcap(to_char(sysdate,'MONTH','nls_date_language=spanish'))) as mes_sistema,
                             sysdate as fecha_registro,
                             TO_CHAR(sysdate,'yyyy') as anho_sistema
                             from dual
                         )tab0
                         ";

                $records = CN_TABLE::executeSQL($sql);
                $fecha_creacion = $records[0]['fecha_sistema'];
                $fecha_registro = $records[0]['fecha_registro'];


                /* $sql = "
                  select du.mail, ter.RAZON_SOC,
                  df.email, df.primer_nombre || ' ' || df.segundo_nombre as razon_social,
                  dff.primer_nombre || ' ' || dff.segundo_nombre as razon_sociall
                  from interceros ter

                  left join (
                  SELECT
                  du.*,
                  row_number() over (
                  PARTITION BY du.id_mae_ter
                  ORDER BY du.id_mt_ubi desc
                  ) AS rn
                  from intercer_du du
                  )du
                  on du.id_mae_ter = ter.id_mae_ter
                  and du.rn = 1
                  left join usuario userr
                  on userr.username= '" . $username . "'" .
                  " left join datos_funcionario df
                  on df.num_doc = userr.num_doc" .
                  " LEFT JOIN datos_funcionario dff on dff.num_doc= '" . $num_doc . "'" .
                  " WHERE ter.id_mae_ter=" . $id_mae_ter; */
                $sql = <<<EOD
select 
  du_jefe.mail as mail_solicitante, 
  ter.primer_nombre || ' ' || ter.segundo_nombre || ' ' || ter.primer_apellido || ' ' || ter.segundo_apellido as razon_solicitante,
  du_jefe.mail as mail_jefe,
  terjefe.RAZON_SOC as razon_jefe
from NO_NOVEDAD_VAC_SOLIT tab0
left join datos_funcionario ter on ter.NUM_DOC = tab0.NUM_DOC
left join interceros terjefe on terjefe.id_mae_ter = tab0.ID_JEFE
left join (
      SELECT
       du.*,
       row_number() over (
        PARTITION BY du.id_mae_ter
        ORDER BY du.id_mt_ubi desc
       ) AS rn
       from intercer_du du   
    )du_jefe
    on du_jefe.id_mae_ter = terjefe.id_mae_ter
    and du_jefe.rn = 1
WHERE tab0.ID_NOVEDAD_VAC_SOLIT = $id_novedad_vac_solit                        
EOD;

                $records = CN_TABLE::executeSQL($sql);
                $email = $records[0]['mail_solicitante'];
                $razon = $records[0]['razon_solicitante'];

                $email_dos = $records[0]['mail_jefe'];
                $razon_dos = $records[0]['razon_jefe'];

                $razon_socc = $records[0]['razon_solicitante'];

                $currentUri = "";

                //PARAMETROS GENERALES

                $request["email_envio"] = $correoEnvio;

                $adjunto = false;
                $array_adjuntos = array();
                //$ruta = "";

                /*
                 * Variable Memcache
                 */

                $progress_key = $request['progress_key'] . $request['username'];
                $this->logMessage("Valor de progress_key: " . $progress_key);

                //$array_adjuntos = array();

                $documento = 'ANM';
                $tipo_doc = '1';
                $email = $email;
                $nombre = '';
                $rol = '';

                $parametros = $documento . ";" . $tipo_doc . ";" . $nombre . ";" . $email . ";Envio notificacion";
                $parametros_dos = $documento . ";" . $tipo_doc . ";" . $nombre . ";" . $email_dos . ";Envio notificacion";

                $datos_usuario = array();

                if ($parametros != "") {
                    //$datos_usuario = explode('/', $parametros);
                    $datos_usuario = array(
                        '0' => $parametros
                    );
                }
                if ($parametros_dos != "") {
                    //$datos_usuario_dos = explode('/', $parametros_dos);
                    $datos_usuario_dos = array(
                        '0' => $parametros_dos
                    );
                }

                switch ($bandera_editar):
                    case '1'://Aprobado
                        $subject = "Aprobación Novedad de Vacaciones";

                        //CUERPO DEL MENSAJE
                        $body = "<html><body> </body></html>";
                        //Body
                        $body = <<<EOD
                    <html><body> 
                    <br/>
                    Bogotá, $fecha_creacion
                    <br/>
                    <br/>

                    <br/><br/>
                    Se informa que se aprueba la Solicitud de las Vacaciones del funcionario $razon_socc con número de identidad $num_doc <br/><br/>

                    <br/><br/>
                    </body></html>
EOD;
                        break;
                    case '2'://Solicitud_anulacion
                        $this->envioSolicitudAnulacion($request, $id_novedad_vac_solit);
                        break;
                    case '3'://Cancelacion
                        $subject = "Cancelacion Novedad de Vacaciones";

                        //CUERPO DEL MENSAJE
                        $body = "<html><body> </body></html>";
                        //Body
                        $body = <<<EOD
                        <html><body> 
                        <br/>
                        Bogotá, $fecha_creacion
                        <br/>
                        <br/>


                        <br/><br/>
                        Se informa que se cancela la solicitud de vacaciones del funcionario $razon_socc con número de identidad $num_doc <br/><br/>

                        <br/><br/>
                        </body></html>
EOD;
                        break;
                    case '4'://Rechazado
                        $subject = "Rechazo Novedad de Vacaciones";

                        //CUERPO DEL MENSAJE
                        $body = "<html><body> </body></html>";
                        //Body
                        $body = <<<EOD
                        <html><body> 
                        <br/>
                        Bogotá, $fecha_creacion
                        <br/>
                        <br/>


                        <br/><br/>
                        Se informa que se rechaza la solicitud de vacaciones del funcionario $razon_socc con número de identidad $num_doc <br/><br/>

                        <br/><br/>
                        </body></html>
EOD;
                        break;
                    case '5'://Anulado
                        $subject = "Anulacion Novedad de Vacaciones";

                        //CUERPO DEL MENSAJE
                        $body = "<html><body> </body></html>";
                        //Body
                        $body = <<<EOD
                        <html><body> 
                        <br/>
                        Bogotá, $fecha_creacion
                        <br/>
                        <br/>


                        <br/><br/>
                        Se informa que se anula la solicitud de vacaciones del funcionario $razon_socc con número de identidad $num_doc <br/><br/>

                        <br/><br/>
                        </body></html>
EOD;
                        break;
                endswitch;

                if ($bandera_editar != 2) {

                    $request['mensaje'] = $body;
                    $request['subject'] = $subject;

                    CN_TABLE::envioCorreo($request, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $body, 'entidad', true);

                    CN_TABLE::envioCorreo($request, $datos_usuario_dos, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $body, 'entidad', true);
                }
            }
        }

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

        return $request;
    }

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

            //  $estado=$request['id_estado'];
            // $request['estado']=$estado;
        }

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

        //accion remove
        //validar remove de novedad vacac - 20140611
        if ($Action == "REMOVE") {
            
        }

        return $request;
    }

    protected function validateAdd(sfWebRequest $request) {

        $errors = null;

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

        $fecha_ini = $request['fecha_ini'];
        $id_causa_vacac = $request['id_causa_vacac'];
        $num_dias = $request['num_dias_hab'];
        //$id_tipo_nov_vac = $request['id_tipo_nov_vac'];

        $id_jefe = $request['id_jefe'];

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

        $sql = <<<EOD
SELECT * FROM NO_CAUSA_VACAC WHERE ID_CAUSA_VACAC = $id_causa_vacac
EOD;

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

        $logger = sfContext::getInstance()->getLogger();

        $fecha_causa = $results[0]['fecha_fin'];
        $dias_saldo = $results[0]['saldos_dias'];
        $date1 = strtotime($fecha_ini);
        $date2 = strtotime($fecha_causa);

        $logger->info("Fecha novedad " . $fecha_ini);
        $logger->info("Fecha causa " . $fecha_causa);
        $logger->info("dias_disfrute " . $num_dias);
        $logger->info("dias saldo " . $dias_saldo);

        /**
         * Si la novedad permite vac anticipada no valida fechas - 20190917
         * Se agrega 19 y 14 reintegro - 20200117
         */
        //if ($id_tipo_nov_vac != 2 && $id_tipo_nov_vac != 19 && $id_tipo_nov_vac != 14) { 
        $logger->info("Compara " . $date1 . " < " . $date2);
        if ($date1 < $date2) {

            $errors['mensaje'] = "La fecha de Inicio de la Novedad debe ser mayor o igual a la fecha Final de Causación asociada al Funcionario.";
            $errors['servicio'] = "solicitud_novedad_vacaciones";
        }
        //Validar fecha Inicio mayor a 2 meses de la fecha actual
        $fecha_actual = date("d-m-Y");
        //sumo 2 meses
        $logger->info("Fecha minima solicitud " . date("d-m-Y", strtotime($fecha_actual . "+ 2 month")));
        $fecha_min_solicitud = strtotime($fecha_actual . "+ 2 month");
        $logger->info("Fecha minima solicitud " . $fecha_min_solicitud);
        $logger->info("Compara " . $date1 . " < " . $fecha_min_solicitud);
        if ($date1 < $fecha_min_solicitud) {
            $errors['mensaje'] = "La fecha de Inicio de la Novedad debe ser mayor a dos meses a partir de la fecha actual.";
            $errors['servicio'] = "solicitud_novedad_vacaciones";
        }
        //Valida Dias saldo
        if ($num_dias > $dias_saldo) {
            $errors['mensaje'] = "El numero de dias registrados no puede superar el saldo";
            $errors['servicio'] = "causacion_vacaciones";
        }
        
        
                $sql = <<<EOD
        SELECT ID_PARAM_GEN,
               FECHA_SOLICITUD_INI,
               FECHA_SOLICITUD_FIN
        FROM NO_PARAM_GEN
        WHERE 1=1 AND ID_PARAM_GEN = 1                      

EOD;

        $fechas = CN_TABLE::executeSQL($sql);
        
        
        $actual = new DateTime();
        $fecha_limite = new DateTime('2022-02-01 00:00');
        $fecha_min_registro = new DateTime($fechas[0]['fecha_solicitud_ini']);
        $fecha_max_registro = new DateTime($fechas[0]['fecha_solicitud_fin']);
        //if($actual > $fecha_limite) {
        if($actual < $fecha_min_registro || $actual > $fecha_max_registro) {
            // 20220219 Se comenta validacion ticket 28546
            $errors['mensaje'] = "No es posible registrar solicitud de vacaciones, debido al rango de fechas de solicitud, parametrizadas en parámetros generales de nómina. cualquier inquietud comunicarse con el área de nómina";
            $errors['servicio'] = "causacion_vacaciones";
        }
        //valor por defecto


        /*
         *  Validar la operación, ya sea por SQL
         */
        $sql = <<<EOD
SELECT
    nov.*
FROM no_novedad_vac nov

join no_tipo_nov_vac tip
on tip.id_tipo_nov_vac = nov.id_tipo_nov_vac

where
nov.id_tipo_doc = $id_tipo_doc
and nov.num_doc = $num_doc

and (
    nov.fecha_ini BETWEEN to_date('$fecha_ini','yyyy-mm-dd') and to_date('$fecha_fin','yyyy-mm-dd')
    or
    nov.fecha_fin BETWEEN to_date('$fecha_ini','yyyy-mm-dd') and to_date('$fecha_fin','yyyy-mm-dd')
    or
    to_date('$fecha_ini','yyyy-mm-dd') BETWEEN nov.fecha_ini and nov.fecha_fin
    or
    to_date('$fecha_fin','yyyy-mm-dd') BETWEEN nov.fecha_ini and nov.fecha_fin
)
EOD;
        $results = CN_TABLE::executeSQL($sql);

        /*
         *  Generar errores en $errors
         */
        if (count($results) > 0) {
            $errors['mensaje'] = "Ya existe una novedad de vacaciones en el rango ingresado, favor verificar.";
            $errors['servicio'] = "novedad_vac";
        }


        /*
         *  Validar la operación, ya sea por SQL
         */
        $sql = <<<EOD
SELECT
    *
FROM no_novedad_kardex

where
id_tipo_doc = $id_tipo_doc
and num_doc = $num_doc
and estado = 1
and (
    fecha_ini BETWEEN to_date('$fecha_ini','yyyy-mm-dd') and to_date('$fecha_fin','yyyy-mm-dd')
    or
    fecha_fin BETWEEN to_date('$fecha_ini','yyyy-mm-dd') and to_date('$fecha_fin','yyyy-mm-dd')
    or
    to_date('$fecha_ini','yyyy-mm-dd') BETWEEN fecha_ini and fecha_fin
    or
    to_date('$fecha_fin','yyyy-mm-dd') BETWEEN fecha_ini and fecha_fin
) 
EOD;
        $results = CN_TABLE::executeSQL($sql);


        /*
         *  Generar errores en $errors
         */
        //if ($operador) {//solo para vac no reintegros
        if (count($results) > 0) {
            $errors['mensaje'] = "Ya existe una novedad de kardex en el rango ingresado, favor verificar.";
            $errors['servicio'] = "novedad_vac";
        }
        //}



        /*
         *  Validar la operación, ya sea por SQL
         */
        $sql = <<<EOD
SELECT
    *
FROM no_novedad_vac_solit
where
id_tipo_doc = $id_tipo_doc
and num_doc = $num_doc
and anulado = 0
and cancelado = 0
and estado = 1
and id_causa_vacac = $id_causa_vacac 
EOD;

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

        /*
         *  Generar errores en $errors
         */
        if (count($results) > 0) {
            $errors['mensaje'] = "Ya existe una solicitud de vacaciones para el periodo de causación, favor verificar.";
            $errors['servicio'] = "no_novedad_vac_solit";
        }

        /*
         *  Validar la operación, ya sea por SQL
         */
        $sql = <<<EOD
SELECT
    *
FROM interceros
where
id_mae_ter = $id_jefe
and num_doc = '$num_doc' 
EOD;

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

        /*
         *  Generar errores en $errors
         */
        if (count($results) > 0) {
            $errors['mensaje'] = "No puede registrar el jefe con el mismo usuario de la novedad, favor verificar.";
            $errors['servicio'] = "interceros";
        }

        return $errors;
    }

    protected function validateRemove(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

        ///validar remove de novedad vacac - 20140611
        $id_novedad_vac = $request['id_novedad_vac'];
        $id_periodo = $request['id_periodo'];

        /*
         *  Validar la operación, ya sea por SQL
         */
        $sql = <<<EOD
SELECT * FROM NO_NOVEDAD_VAC_SOLIT WHERE id_novedad_vac = $id_novedad_vac
EOD;

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

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

        /*
         *  Generar errores en $errors
         */
        if ($id_periodo != $id_periodo_nov) {
            $errors['mensaje'] = "La novedad de vacación no corresponde al periodo en el cual esta ejecutando la nómina actual. Favor Verificar antes de Anular";
            $errors['servicio'] = "no_novedad_vac_solit";
        }


        return $errors;
    }

    protected function validateUpdate(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Correo de notificacion de aprobacion - 20200304
     * 
     * @param type $request
     * @param type $id_filtro
     */
    public function envioNotificacion($request, $id_filtro) {

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

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

        $int = 0;
        $correoEnvio = "";
        $service_url = "";
        foreach ($array as $routeName => $routeData) {
            if ('service_url_local' == $routeName) {
                foreach ($routeData as $key => $value) {
                    if ($key == 'value') {
                        $service_url = $value;
                    }
                }
            }
            if ('correoEnvio' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $correoEnvio = $value;
                    }
                }
            }
            $int++;
        }

        /**
         * Envio de correo de error - 20190911
         */
        $logger->info("Envio de correo inicio ");

        //URL de servicio correo
        $url = $service_url . "curl_envio_correo/list.json";

        $comando = $request['comando'];
        $id_username = $request['id_username'];
        $username = $request['username'];

        //obtener id maestro tabla
        $id_mae_bd = CN_TABLE::consultarIdTablaBD('NO_NOVEDAD_VAC_SOLIT');

        //Sql
        $sql = <<<EOD
select 
                
usu.primer_nombre || ' ' || usu.segundo_nombre as username,
'$comando' as comando,               
avoc.id_novedad_vac_solit as id_tabla,
'$id_mae_bd' as id_mae_bd,
'$id_username' as id_username,
                
avoc.id_novedad_vac_solit,


ter.id_tipo_doc,
ter.num_doc,
ter.razon_soc,

du.mail as correo,
                
'$correoEnvio' as email_envio,
'' as mensaje_extra,
'' as mensaje_firma,
'Se informa que se realizó la solicitud de vacaciones, por parte del Funcionario ' || tab.nombre_apellido  || ' con número de identidad ' || tab.num_doc || 
    '. \nPuede Verificar la solicitud en el sistema, ya que esta se encuentra pendiente de su Aprobación.'   as mensaje,
'Solicitud  Novedad de Vacaciones' as subject,                        
                
--datos de envio
ter.num_doc as num_doc_env,
ter.id_tipo_doc as id_tipo_doc_env,
ter.razon_soc as razon_social_env,
du.mail as correo_env,

--datos de envio usuario
usu.num_doc as num_doc_usu,
usu.id_tipo_doc as id_tipo_doc_usu,
usu.primer_nombre || ' ' || usu.segundo_nombre as razon_social_usu,
usu.email as correo_usu

from NO_NOVEDAD_VAC_SOLIT avoc
                
left join NO_DATOS_FUNCIONARIO_V tab
on tab.id_tipo_doc=avoc.id_tipo_doc and tab.num_doc=avoc.num_doc

left join interceros_v ter
on ter.id_mae_ter = avoc.id_jefe

left join (
  SELECT
   du.*,
   row_number() over (
    PARTITION BY du.id_mae_ter
    ORDER BY du.id_mt_ubi desc
   ) AS rn
   from intercer_du du   
)du
on du.id_mae_ter = ter.id_mae_ter
and du.rn = 1                

left join usuario userr
on userr.username= '$username'
                
left join datos_funcionario usu
on usu.num_doc = userr.num_doc

where
avoc.id_novedad_vac_solit = $id_filtro

EOD;
        //Ejecutar SQL
        $records = CN_TABLE::executeSQL($sql);

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

        if (count($records) > 0) {

            /**
             * Datos de envio
             *
              $params = array(
              'user_from' => 'webservice',
              'recipients' => $recipients,
              'asunto' => 'Error webservie_sigm_consulta',
              'body' => $body
              );
             * 
             */
            $record = $records[0];

            foreach ($record as $key => $value) {
                $params[$key] = $value;
            }

            if ($service_url != null) {
                CN_TABLE::curlPostAsync($url, $params);
            }
        }

        $logger->info("Envio de correo fin");
    }

    /**
     * Correo de notificacion de aprobacion - 20200304
     * 
     * @param type $request
     * @param type $id_filtro
     */
    public function envioSolicitudAnulacion($request, $id_filtro) {

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

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

        $int = 0;
        $correoEnvio = "";
        $service_url = "";
        foreach ($array as $routeName => $routeData) {
            if ('service_url_local' == $routeName) {
                foreach ($routeData as $key => $value) {
                    if ($key == 'value') {
                        $service_url = $value;
                    }
                }
            }
            if ('correoEnvio' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $correoEnvio = $value;
                    }
                }
            }
            $int++;
        }

        /**
         * Envio de correo de error - 20190911
         */
        $logger->info("Envio de correo inicio ");

        //URL de servicio correo
        $url = $service_url . "curl_envio_correo/list.json";

        $comando = $request['comando'];
        $id_username = $request['id_username'];
        $username = $request['username'];

        //obtener id maestro tabla
        $id_mae_bd = CN_TABLE::consultarIdTablaBD('NO_NOVEDAD_VAC_SOLIT');

        //Sql
        $sql = <<<EOD
select 
                
usu.primer_nombre || ' ' || usu.segundo_nombre as username,
'$comando' as comando,               
avoc.id_novedad_vac_solit as id_tabla,
'$id_mae_bd' as id_mae_bd,
'$id_username' as id_username,
                
avoc.id_novedad_vac_solit,


ter.id_tipo_doc,
ter.num_doc,
ter.razon_soc,

du.mail as correo,
                
'$correoEnvio' as email_envio,
solicitud_anul_obs as mensaje_extra,
'' as mensaje_firma,
'Se informa que se realizó la solicitud de anulación de novedad de vacaciones, por parte del Funcionario ' || tab.nombre_apellido  || ' con número de identidad ' || tab.num_doc || 
    '. \nPuede Verificar la solicitud en el sistema.'   as mensaje,
'SOLICITUD ANULACION NOVEDAD DE VACACIONES' as subject,                        
                
--datos de envio
ter.num_doc as num_doc_env,
ter.id_tipo_doc as id_tipo_doc_env,
ter.razon_soc as razon_social_env,
du.mail as correo_env,

--datos de envio usuario
usu.num_doc as num_doc_usu,
usu.id_tipo_doc as id_tipo_doc_usu,
usu.primer_nombre || ' ' || usu.segundo_nombre as razon_social_usu,
usu.email as correo_usu

from NO_NOVEDAD_VAC_SOLIT avoc
                
left join NO_DATOS_FUNCIONARIO_V tab
on tab.id_tipo_doc=avoc.id_tipo_doc and tab.num_doc=avoc.num_doc

left join interceros_v ter
on ter.id_mae_ter = avoc.id_jefe

left join (
  SELECT
   du.*,
   row_number() over (
    PARTITION BY du.id_mae_ter
    ORDER BY du.id_mt_ubi desc
   ) AS rn
   from intercer_du du   
)du
on du.id_mae_ter = ter.id_mae_ter
and du.rn = 1                

left join usuario userr
on userr.username= '$username'
                
left join datos_funcionario usu
on usu.num_doc = userr.num_doc

where
avoc.id_novedad_vac_solit = $id_filtro

EOD;
        //Ejecutar SQL
        $records = CN_TABLE::executeSQL($sql);

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

        if (count($records) > 0) {

            /**
             * Datos de envio
             *
              $params = array(
              'user_from' => 'webservice',
              'recipients' => $recipients,
              'asunto' => 'Error webservie_sigm_consulta',
              'body' => $body
              );
             * 
             */
            $record = $records[0];

            foreach ($record as $key => $value) {
                $params[$key] = $value;
            }

            if ($service_url != null) {
                CN_TABLE::curlPostAsync($url, $params);
            }
        }

        $logger->info("Envio de correo fin");
    }

}
