<?php

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

    protected $table_names = array(
        'COM_PLAN_PROGRAM_COMIS_V',
        'COM_PLAN_COMISIONES_V',
        'COMISIONES_V'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'COM_PLAN_COMISIONES_V' =>
        array(
            'id_plan_comisiones' => 'COM_PLAN_PROGRAM_COMIS_V',
            'vigencia' => 'COM_PLAN_PROGRAM_COMIS_V'
        ),
        'COMISIONES_V' =>
        array(
            'id_comisiones' => 'COM_PLAN_PROGRAM_COMIS_V',
            'vigencia_comisiones-vigencia' => 'COM_PLAN_PROGRAM_COMIS_V'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'COM_PLAN_PROGRAM_COMIS_V' =>
        array(
            'id_plan_comisiones' => 'id_plan_comisiones',
            'vigencia' => 'vigencia',
            'id_comisiones' => 'id_comisiones',
            'vigencia_comisiones' => 'vigencia_comisiones',
            'fecha_log' => 'fecha_log',
            'usuario_log' => 'usuario_log',
            'cdp' => 'cdp',
            'vigencia_cdp' => 'vigencia_cdp',
            'cdp,||, - ,||,vigencia_cdp' => 'completo_cdp',
            'estado' => 'estado',
            'fecha_estado' => 'fecha_estado',
            'id_usuario_estado' => 'id_usuario_estado',
            'observaciones_estado' => 'observaciones_estado',
            'nivel_rechazo' => 'nivel_rechazo',
            'autorizado' => 'autorizado',
            'fecha_autorizado' => 'fecha_autorizado',
            'id_usuario_autorizado' => 'id_usuario_autorizado',
            'observacion_aut' => 'observacion_aut',
            'estado_general' => 'estado_general',
            'desc_estado_general' => 'desc_estado_general',
            'fecha_estado_general' => 'fecha_estado_general',
            'usuario_estado_general' => 'usuario_estado_general',
            'obs_estado_general' => 'obs_estado_general'
        ),
        'COM_PLAN_COMISIONES_V' =>
        array(
            'id_area' => 'id_area_planea',
            'tipcomi' => 'tipcomi_planea',
            'fecha' => 'fecha_planea',
            'observaciones' => 'observaciones',
            'fecha_log' => 'fecha_log_planea',
            'usuario_log' => 'usuario_log_planea',
            'estado' => 'estado_planea'
        ),
        'COMISIONES_V' =>
        array(
            'marca_automatico' => 'marca_automatico',
            'tipcomi' => 'tipcomi',
            'vobo' => 'vobo',
            'id_proyectos' => 'id_proyectos',
            'activo' => 'activo',
            'fecha' => 'fecha',
            'cod_area' => 'cod_area',
            'area' => 'area',
            'sigla' => 'sigla',
            'descomi' => 'descomi',
            'observ' => 'observ',
            'dcomi' => 'dcomi',
            'ano_fiscal' => 'ano_fiscal',
            'cod_proyecto' => 'cod_proyecto',
            'proyecto' => 'proyecto',
            'valor' => 'valor',
            'valor_gasto' => 'valor_gasto',
            'viaticos' => 'viaticos',
            'acumulado_gastos' => 'acumulado_gastos',
            'taxis' => 'taxis',
            'tarifa' => 'tarifa',
            'cod_proyecto,||, - ,||,proyecto' => 'completo_proyecto',
            'num_doc_tersup,||, - ,||,razon_soc_tersup' => 'completo_supervisor',
            'num_doc_terlog,||, - ,||,razon_soc_terlog' => 'completo_programador'
        )
    ); //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(
        'COM_PLAN_PROGRAM_COMIS_V' => array(
            'id_plan_comisiones,a' => array('!=' => array(-1)),
            'id_plan_comisiones,b' => array('=' => array('id_plan_comisiones')),
            'vigencia' => array('=' => array('vigencia')),
            'id_comisiones' => array('=' => array('id_comisiones')),
            'vigencia_comisiones' => array('=' => array('vigencia_comisiones')),
            'fecha_log' => array('BETWEENFECHA' => array('fecha_ini', 'fecha_fin')),
            'usuario_log' => array('=' => array('usuario_log')),
            'cdp' => array('=' => array('cdp')),
            'vigencia_cdp' => array('=' => array('vigencia_cdp')),
            'estado_general' => array('IN' => array('estado_general')),
            'id_proyectos' => array('=' => array('id_proyectos')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        ),
        'COMISIONES_V' => array(
            'id_area' => array('=' => array('id_area')),
            'tipcomi' => array('=' => array('tipcomi')),
            'id_proyectos' => array('=' => array('id_proyectos')),
            'vobo' => array('=' => array('vobo'))
        )
    ); //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(
        'vigencia', 'id_plan_comisiones', 'vigencia_comisiones', 'id_comisiones', 'cdp'
    ); //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;

    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_plan_comisiones'; //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;
        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a Validate Update");

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

        }

        //accion update
        if ($Action == "UPDATE") {
            $tipo_boton = $request['tipo_boton'];
            $tipo_trans = $request['tipo_trans'];
            if($tipo_trans==2){
                switch ($tipo_boton) {
                    //Autorizado
                    case 4:
                        //Validacion de dias de antelacion para poder aprobar plan de comision
                        //Se queman las variables mientras se agregan campos y se crea tabla COM_PARAN_GEN en ANM
                        //20190821 se quita aplica dias anticipacion
                        $aplica_dias_antelacion_aprobacion = 0;
                        $cant_dias_antelacion = 2;
                        
                        if($aplica_dias_antelacion_aprobacion == 1){
                            $id_plan_comisiones = $request['id_plan_comisiones'];
                            $id_vigencia = $request['vigencia'];
                            $id_comisiones = $request['id_comisiones'];
                            $vigencia_comisiones = $request['vigencia_comisiones'];
                            
                            $sql = <<<EOD
select tab0.id_plan_comisiones,tab1.num_doc,tab1.RAZSOC,tab1.FECHA_SALIDA 
from com_plan_program_comis tab0 
left join COM_PLAN_COMISIONADOS_PLACOM_V tab1 on tab1.ID_PLAN_COMISIONES=tab0.ID_PLAN_COMISIONES and tab1.VIGENCIA = tab0.VIGENCIA
where
tab0.id_plan_comisiones = $id_plan_comisiones
and tab0.vigencia = $id_vigencia 
and tab0.id_comisiones = $id_comisiones
and tab0.vigencia_comisiones = $vigencia_comisiones 
and tab0.estado = 1
EOD;
                            $record = $this->conn->execute($sql);
                            $date_limit = strtotime("+".$cant_dias_antelacion." days", time());
                            foreach($record as $rec){
                                $fecha_salida = $rec['fecha_salida'];
                                if($fecha_salida <=$date_limit){
                                    //Error validacion de dias
                                    $errors['mensaje'] = "No se puede aprobar ya que la fecha de salida de comisionado es menor a 2 dias de la fecha actual";
                                    $errors['servicio'] = "com_plan_aprob_plan_comis";
                                }
                                
                            }
                            
                        }
                        break;

                default:
                    break;
                }
            }
            
            
        }

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


        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") {
            $request['fecha_log'] = CN_TABLE::fechaSistema();
            $request['usuario_log'] = $request['id_username'];
        }

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

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

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

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

        return $request;
    }

    /**
     * Actualizar el estado Planeación de Comisión
     * tipo_boton
     * 0-Rechazado
     * 1-Pendiente
     * 2-Firmado
     * 3-Revisado/NA
     * 4-Autorizado
     * 
     * tipo_trans
     * 1-Ordenador Gasto
     * 2-Supervisor
     *
     * @param sfRequest $request A request object
     */
    public function executeUpdate(sfWebRequest $request) {

        //Revisar que sea post
        //$this->forward404Unless($request->isMethod('post'));
        //Guardar los parametros del request en el log
        $this->logMessage("---function executeUpdate");
        $this->logMessage("---BEGIN Logging request");

        $status = 0;
        $response = array();
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("--------------------------------------------------* Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");

        $records = array();

        /**
         * Abrir nueva conexion con la Base de Datos
         */
        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        $this->conn->beginTransaction();

        /*
         * Formato de fecha
         */
        //Sql
        $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD HH24:MI:SS" 
EOD;
        //Ejecutar SQL
        CN_TABLE::executeSQL($sql);

        try {

            /**
             * Variables globales
             */
            $id_plan_comisiones = $request['id_plan_comisiones'];
            $id_vigencia = $request['vigencia'];
            $id_comisiones = $request['id_comisiones'];
            $vigencia_comisiones = $request['vigencia_comisiones'];

            /*
             * variables por defecto para el registro de log
             */
            $id_tabla = $id_plan_comisiones;

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

            /**
              1	CONSULTAR
              2	ACTUALIZAR
              3	ADICIONAR
              4	ELIMINAR
              5	ANULAR
             */
            $id_ope_bd = 2;

            //id del maestro tercero
            $id_mae_ter = 1;
            if (isset($request['id_username'])) {
                $id_mae_ter = $request['id_username'];
            }

            //username
            $username = 'admin';
            if (isset($request['username'])) {
                if (!is_null($request['username']) && $request['username'] != '') {
                    $username = $request['username'];
                }
            }
            //usuario
            $usuario = '0';
            if (isset($request['id_username'])) {
                if (!is_null($request['id_username']) && $request['id_username'] != '') {
                    $usuario = $request['id_username'];
                }
            }

            //comando de la funcionalidad
            $comando = 'sin comando';
            if (isset($request['comando'])) {
                $comando = $request['comando'];
            }

            //construir observacion
            $observacion_log = "'Se intenta actualizar tabla de com_plan_program_comis desde la funcionalidad: " . $comando . "'";
            $subject = "";

            /*
             * registro de consulta en tabla de log
             */
            $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $usuario, $username, $comando, $observacion_log);

            /*
             * Variables de filtro
             */
            $tipo_boton = $request['tipo_boton'];
            $tipo_trans = $request['tipo_trans'];

            $id_usuario_estado = $request['id_username'];
            $fecha_estado = CN_TABLE::fechaSistema();

            $observaciones_estado = '';
            if (isset($request['observaciones'])) {
                $observaciones_estado = $request['observaciones'];
            }

            /*
             * (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 ('entidad_nombre' == $routeName) {
                    foreach ($routeData as $key => $value) {
                        //echo $value . "\n";
                        if ($key == 'value') {
                            $entidadNombre = $value;
                        }
                    }
                }
                if ('correoEnvio' == $routeName) {
                    foreach ($routeData as $key => $value) {
                        //echo $value . "\n";
                        if ($key == 'value') {
                            $correoEnvio = $value;
                        }
                    }
                }
                if ('jasper_url' == $routeName) {
                    foreach ($routeData as $key => $value) {
                        //echo $value . "\n";
                        if ($key == 'value') {
                            $url_jasper = $value;
                        }
                    }
                }
                //$url_presup = "http://10.0.100.66/presupuesto/web/index.php/pr_resolucion_comis/";
                $int++;
            }


            /**
             * Opciones de actualizacion - 20181102
             */
            $mensaje = "Opciones de actualizacion";
            $this->logMessage($mensaje);

            switch ($tipo_boton) {
                //Rechazado
                case 0:
                    //Actualizacion de estado
                    //20190812 Se asigna el usuario actual del sistema como quien actualiza el estado
                    //$id_supervisor = $request['id_supervisor'];
                    $id_supervisor = $id_usuario_estado;
                    
                    // por defecto rechazo 2
                    $nivel_rechazo = '2';
                    if (isset($request['nivel_rechazo'])) {
                        $nivel_rechazo = $request['nivel_rechazo'];
                    }
                    

                    //actualizar como rechazado
                    $sql = <<<EOD
update com_plan_program_comis 
set estado = 0,
fecha_estado = SYSDATE,
observaciones_estado = '$observaciones_estado',
id_usuario_estado = '$id_supervisor',
nivel_rechazo = $nivel_rechazo
where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $id_vigencia 
and id_comisiones = $id_comisiones
and vigencia_comisiones = $vigencia_comisiones 
and estado = 1
EOD;
                    $this->conn->execute($sql);
                    
                    /**
                     * Envio correo al responsable,supervisor
                     */
                    $this->logMessage("Envio correo al responsable,supervisor.");
                    //Consulta datos envio correo
                    //Sql
                    $sql = <<<EOD
SELECT
placom.id_plan_comisiones,
placom.vigencia,
placom.id_comisiones,
placom.vigencia_comisiones,
comis.descomi as prefijo,
'$correoEnvio' as email_envio,
'Observacion: '||placom.observaciones_estado as mensaje_extra,
'' as mensaje_firma,
'Se realiza el rechazo del plan de comisión No.'|| placom.id_comisiones ||' - ' || placom.vigencia_comisiones || '; ' || comis.descomi || ', verificar en control de comisiones.' as mensaje,

--Datos correo responsable
nvl(placom.num_doc_terlog,'') as num_doc,
nvl(placom.razon_soc_terlog,'') as razon_soc,
nvl(placom.correo_terlog,'') as correo,

--Datos correo supervisor
nvl(placom.num_doc_tersup,'') as num_doc_tersup,
nvl(placom.razon_soc_tersup,'') as razon_soc_tersup,
nvl(placom.correo_tersup,'') as correo_tersup
    
FROM com_plan_program_comis_v placom

left join comisiones_v comis
on comis.id_comisiones = placom.id_comisiones
and comis.vigencia = placom.vigencia_comisiones 

where
placom.id_plan_comisiones = $id_plan_comisiones
and placom.vigencia = $id_vigencia 
and placom.id_comisiones = $id_comisiones
and placom.vigencia_comisiones = $vigencia_comisiones 
EOD;
                    //Ejecutar SQL
                    $records = CN_TABLE::executeSQL($sql);

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

                    if (count($records) > 0) {

                        $report_params = $records[0];
                        $prefijo = $records[0]['prefijo'];
                        $mensaje_extra = $records[0]['mensaje_extra'];
                        
                        //Ejemplo de la persona que se envia el correo: 
                        //123;1;pepito perez;correo@gmal.com
                        //DATOS RESPONSABLE
                        $num_doc = $records[0]['num_doc'];
                        $id_tipo_doc = 1;
                        $razon_soc = $records[0]['razon_soc'];
                        $correo = $records[0]['correo'];
                        $datos_usuario = array(
                            '0' => $num_doc . ';' . $id_tipo_doc . ';' . $razon_soc . ';' . $correo .';'. $mensaje_extra
                        );
                        //DATOS SUPERVISOR
                        $num_doc_tersup = $records[0]['num_doc_tersup'];
                        $id_tipo_doc_tersup = 1;
                        $razon_soc_tersup = $records[0]['razon_soc_tersup'];
                        $correo_tersup = $records[0]['correo_tersup'];
                        $datos_usuario_tersup = array(
                            '0' => $num_doc_tersup . ';' . $id_tipo_doc_tersup . ';' . $razon_soc_tersup . ';' . $correo_tersup.';'. $mensaje_extra
                        );
                        //PARAMETROS STANDART                 
                        $subject = "Rechazado - Plan de Comision por Supervisor: " . $num_doc_tersup . " No." . $id_comisiones . " - " . $vigencia_comisiones . "; " . $prefijo;
                        $currentUri = '';
                        $ruta = '';
                        $adjunto = false;
                        $progress_key = $request['comando'] . $request['username'];
                        $array_adjuntos = array();
                        $entidad_cliente = $entidadCliente;
                        $entidad_nombre = $entidadNombre;
                        $addAddress = true;

                        $this->logMessage("Subject: " . $subject);
                        CN_TABLE::envioCorreo($report_params, $datos_usuario_tersup, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                        CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                    
                    }
                    /**
                      1	CONSULTAR
                      2	ACTUALIZAR
                      3	ADICIONAR
                      4	ELIMINAR
                      5	ANULAR
                     */
                    $id_ope_bd = 2;

                    //construir observacion
                    $observacion_log = "'Programación de comision autorizado por proceso del asunto: " . $subject . "'";

                    /*
                     * registro de consulta en tabla de log
                     */
                    $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $usuario, $username, $comando, $observacion_log);

                    break;
                //4-Autorizado
                case 4:
                    //VALIDACION dias limite aprobacion
                    $nombre_reporte = 'resolucion_comis';
                    //20190821 se quita aplica dias anticipacion
                    $aplica_dias_antelacion_aprobacion = 0;
                    $cant_dias_antelacion = 2;
                    $date_validate = 0;

                    if($aplica_dias_antelacion_aprobacion == 1){
                        $this->logMessage("Validando fecha 2 dias");

                        $sql = <<<EOD
select tab0.id_plan_comisiones as id_plan_comisiones,tab1.num_doc as num_doc,tab1.RAZSOC as RAZSOC,tab1.fecha_salida as fecha_salida
from com_plan_program_comis tab0 
left join COM_PLAN_COMISIONADOS_PLACOM_V tab1 on tab1.ID_PLAN_COMISIONES=tab0.ID_PLAN_COMISIONES and tab1.VIGENCIA = tab0.VIGENCIA
where
tab0.id_plan_comisiones = $id_plan_comisiones
and tab0.vigencia = $id_vigencia 
and tab0.id_comisiones = $id_comisiones
and tab0.vigencia_comisiones = $vigencia_comisiones 
and tab0.estado = 1
EOD;
                        $records = CN_TABLE::executeSQL($sql);
                        $date_limit = strtotime("today +".$cant_dias_antelacion." days");
                        //$date_limit= date_format($date_limit, 'Y-m-d');
                        $this->logMessage("fecha limite: ".date('Y-m-d',$date_limit));
                        foreach ($records as $rec){
                            $fecha_salida = strtotime($rec['fecha_salida']);
                            $this->logMessage("fecha Salida comisionado: ".date('Y-m-d',$fecha_salida));
                            if($fecha_salida <= $date_limit){
                                //Error validacion de dias
                                $name = $rec['razsoc'];
                                $date_validate = 1;
                                $mensaje = "No se puede aprobar el plan ya que la fecha de salida del comisionado $name es menor a 2 dias de la fecha actual";
                                $this->logMessage("No se puede aprobar por fecha");
                                $status = 1;
                                //$errors['mensaje'] = 
                                //$errors['servicio'] = "com_plan_aprob_plan_comis";
                            }

                        }

                    }
                    if($date_validate == 0){

                        //20190812 Se asigna el usuario actual del sistema como quien actualiza el estado
                        //$id_supervisor = $request['id_supervisor'];
                        $id_supervisor = $id_usuario_estado;

                        //actualizar como autorizado
                        $sql = <<<EOD
update com_plan_program_comis 
set autorizado = 1,
fecha_autorizado = SYSDATE,
observacion_aut = '$observaciones_estado',
id_usuario_autorizado = '$id_supervisor'                   
where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $id_vigencia 
and id_comisiones = $id_comisiones
and vigencia_comisiones = $vigencia_comisiones 
and estado = 1
EOD;
                        $this->conn->execute($sql);

                        //Consulta com_plan_program_comis para obtener CDP
                        $sql = <<<EOD
SELECT
    *
FROM com_plan_program_comis 

where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $id_vigencia 
and id_comisiones = $id_comisiones
and vigencia_comisiones = $vigencia_comisiones 
EOD;
                        //Ejecutar SQL
                        $records_cdp = CN_TABLE::executeSQL($sql);
                        $cdp = $records_cdp[0]['cdp'];

                        /**
                         * Crear registros de resolucion - 20181220
                         */
                        //Consecutivo de comis resol
                        $sql = <<<EOD
SELECT
    *
FROM pr_consecutivo_comis
order by
id_consecutivo_comis desc  
EOD;
                        //Ejecutar SQL
                        $records_consec = CN_TABLE::executeSQL($sql);

                        $prefijo_resol = $records_consec[0]['prefijo_resol'];
                        
                        $consecutivo_resol = $records_consec[0]['consecutivo_resol'];

                        //Consulta planta
                        $sql = <<<EOD
SELECT
tab0.*,
(SELECT
max(id)
FROM firma_rp
where
upper(tipo_firma) like '%FUNC%'
and estado = 1
) as id_firma 
    
FROM comisionados_planta tab0

where
tab0.id_comision = $id_comisiones
and tab0.vigencia = $vigencia_comisiones
EOD;
                        //Ejecutar SQL
                        $records_planta = CN_TABLE::executeSQL($sql);

                        if (count($records_planta) > 0) {

                            $id_firma = $records_planta[0]['id_firma'];
                            //20190218 el consecutivo de la resolucion se asigna al moemnto de firmar
                            //$resolucion = $prefijo_resol . '-' . str_pad($consecutivo_resol, 4, "0", STR_PAD_LEFT);

                            //Resgistra resolucion comis                 
                            $sql = <<<EOD
Insert into PR_RESOL_COMIS (ID,ID_CDP,TIPO_COMISIONADO,RESOLUCION,
    FECHA_FUNCIONARIO,FECHA_COMISIONADO,FIRMA,ID_VIGENCIA,VIGENCIA,
        ID_COMISION,EDICION_PDF,MARCA_AUTOMATICO) 
values (null,'$cdp','1', null,
    trunc(sysdate),null,'$id_firma','1','$vigencia_comisiones',
        '$id_comisiones','0','1')
EOD;
                            //Ejecutar SQL
                            $this->conn->execute($sql);

                            //id de resol creada
                            $sql = <<<EOD
SELECT max(id) as id_resolucion FROM pr_resol_comis 
    where id_cdp = $cdp and tipo_comisionado = 1
EOD;
                            //Ejecutar SQL
                            $records_resol = CN_TABLE::executeSQL($sql);
                            $id_resolucion = $records_resol[0]['id_resolucion'];

                            //crea registro en com_plan_resol_comis  
                            //20200713 se agrega firmado y aprobado automatico al crear ticket 17185
                            $sql = <<<EOD
Insert into COM_PLAN_RESOL_COMIS (ID_PLAN_COMISIONES,VIGENCIA,ID_COMISIONES,VIGENCIA_COMISIONES,
    ID_RESOL_COMIS,FECHA_LOG,USUARIO_LOG,ESTADO,FIRMADO,FECHA_FIRMADO,ID_USUARIO_FIRMADO,AUTORIZADO,FECHA_AUTORIZADO,
    OBSERVACION_AUT,ID_USUARIO_AUTORIZADO) 
values ($id_plan_comisiones,$id_vigencia,$id_comisiones,$vigencia_comisiones,
    $id_resolucion,sysdate,$usuario,1, 1,sysdate,$usuario,1,sysdate,'Autorizado automaticamente al crear',$usuario)  
EOD;
                            //Ejecutar SQL
                            $this->conn->execute($sql);

                            //genera log resoluciones                
                            $sql = <<<EOD
Insert into PR_LOG_RESOLUCION (ID_RESOL_COMIS,ID_CDP,ID_VIGENCIA,VIGENCIA,
    USUARIO,FECHA_LOG,DETALLE,RESOLUCION) 
values (null,'$cdp','1','$vigencia_comisiones',
    '$username',sysdate,'Creacion Resolución de Comisiones','$resolucion')
EOD;
                            //Ejecutar SQL
                            $this->conn->execute($sql);

                            /**
                             * Generar PDF por presupuesto - 20181221
                             */
                            $this->logMessage("Generar PDF por Jasper");
                            //$url = sfConfig::get('app-gwt_jasper_url');
                            //echo $url;
                            //$ch = curl_init("http://www.sofhouse.net/");
                            /*
                             * $ch = curl_init("http://soporte14.sofhouse.net/jasperphp/whereExecuteReportCartera.php
                             * ?uri=%2Freports%2Fcartera%2Fnota_credito&PARAM_id_credito=33960&PARAM_valor=181480&format=HTML");
                             */

                            //URL de envio inicio
                            /*$url = $url_presup;
                            $url = $url . 'pdf?format=PDF&PARAM_id_mod=20&PARAM_username=websafi&PARAM_nitocc=800189921&PARAM_id_username=946';
                            $url = $url . '&id_resolucion=' . $id_resolucion;
                            $url = $url . '&id_cdp=' . $cdp;
                            $url = $url . '&resolucion=' . $resolucion;
                            $url = $url . '&vigencia=' . $vigencia_comisiones;
                            $url = $url . '&activo=' . '0';
                            $url = $url . '&tipo=' . '1';
                            $url = $url . '&envio_correo=false&adjunto_modulo=false';*/
                            /*$url = $url_jasper;
                            $url = $url . 'registro_acta_inicio&format=PDF&PARAM_id_mod=24&PARAM_username=websafi&PARAM_nitocc=800189921&PARAM_id_username=946';
                            $url = $url . '&PARAM_id_resolucion=' . $id_resolucion;
                            $url = $url . '&PARAM_vigencia=' . $vigencia_comisiones;
                            $url = $url . '&PARAM_envio_correo=false&PARAM_tag_adjunto_modulo=true';
                            $url = $url . '&PARAM_nombre_reporte=' . str_replace(' ', ':', $nombre_reporte);

                            $this->logMessage($url);
                            $ch = curl_init($url);

                            //Parametros de retorno en cURL
                            curl_setopt($ch, CURLOPT_HEADER, 0);
                            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Skip SSL Verification

                            //Ejecuta la petición
                            $rta = curl_exec($ch);
                            //Se cierra la conexión
                            curl_close($ch);*/

    //                $arrayRespuesta = json_decode($rta, true);
                            //Verifica el status, si es diferente de 0, ocurrio un error 
    //                if ($arrayRespuesta['response']['status'] != 0) {
    //                    $this->logMessage("[Error] Me llamo desde el CURL");
                            //echo "<h3>Me llamo desde el cURL</h3>";
    //              $mensaje=$arrayRespuesta['response']['data'];
    //              $this->status = 3;
    //              $a = $mensaje[0]['mensaje'];
    //              $b = htmlspecialchars($a, ENT_QUOTES);
    //              $this->mensajeError = $b;
    //              $this->list_data = array();
    //                }
                            //URL de envio se limpia
                            $url = '';

                            /*
                             * FIN Generacion de PDFs
                             */

                        //    $consecutivo_resol++;
                        }

                        //Consulta contrato  
                        $sql = <<<EOD
SELECT
tab0.*,
(SELECT
max(id)
FROM firma_rp
where
upper(tipo_firma) like '%CONT%'
and estado = 1
) as id_firma 
    
FROM comisionados_contrato tab0

where
tab0.id_comision = $id_comisiones
and tab0.vigencia = $vigencia_comisiones
EOD;
                        //Ejecutar SQL
                        $records_contrato = CN_TABLE::executeSQL($sql);

                        if (count($records_contrato) > 0) {

                            $id_firma = $records_contrato[0]['id_firma'];

                            //$resolucion = $prefijo_resol . '-' . str_pad($consecutivo_resol, 4, "0", STR_PAD_LEFT);

                            //Resgistra resolucion comis  comisionados                
                            $sql = <<<EOD
Insert into PR_RESOL_COMIS (ID,ID_CDP,TIPO_COMISIONADO,RESOLUCION,
    FECHA_FUNCIONARIO,FECHA_COMISIONADO,FIRMA,ID_VIGENCIA,VIGENCIA,
        ID_COMISION,EDICION_PDF,MARCA_AUTOMATICO) 
values (null,'$cdp','2', null,
    null,trunc(sysdate),'$id_firma','1','$vigencia_comisiones',
        '$id_comisiones','0','1')
EOD;
                            //Ejecutar SQL
                            $this->conn->execute($sql);

                            //id de resol creada
                            $sql = <<<EOD
SELECT max(id) as id_resolucion FROM pr_resol_comis 
    where id_cdp = $cdp and tipo_comisionado = 2
EOD;
                            //Ejecutar SQL
                            $records_resol = CN_TABLE::executeSQL($sql);
                            $id_resolucion = $records_resol[0]['id_resolucion'];

                            //crea registro en com_plan_resol_comis             
                            $sql = <<<EOD
Insert into COM_PLAN_RESOL_COMIS (ID_PLAN_COMISIONES,VIGENCIA,ID_COMISIONES,VIGENCIA_COMISIONES,
    ID_RESOL_COMIS,FECHA_LOG,USUARIO_LOG,ESTADO) 
values ($id_plan_comisiones,$id_vigencia,$id_comisiones,$vigencia_comisiones,
    $id_resolucion,sysdate,$usuario,1)  
EOD;
                            //Ejecutar SQL
                            $this->conn->execute($sql);

                            //genera log resoluciones                
                            $sql = <<<EOD
Insert into PR_LOG_RESOLUCION (ID_RESOL_COMIS,ID_CDP,ID_VIGENCIA,VIGENCIA,
    USUARIO,FECHA_LOG,DETALLE,RESOLUCION) 
values (null,'$cdp','1','$vigencia_comisiones',
    '$username',sysdate,'Creacion Resolución de Comisiones','$resolucion')
EOD;
                            //Ejecutar SQL
                            $this->conn->execute($sql);

                            /**
                             * Generar PDF por presupuesto - 20181221
                             */
                            $this->logMessage("Generar PDF por Jasper");
                            //$url = sfConfig::get('app-gwt_jasper_url');
                            //echo $url;
                            //$ch = curl_init("http://www.sofhouse.net/");
                            /*
                             * $ch = curl_init("http://soporte14.sofhouse.net/jasperphp/whereExecuteReportCartera.php
                             * ?uri=%2Freports%2Fcartera%2Fnota_credito&PARAM_id_credito=33960&PARAM_valor=181480&format=HTML");
                             */

                            //URL de envio inicio
                            /*$url = $url_presup;
                            $url = $url . 'pdf?format=PDF&PARAM_id_mod=20&PARAM_username=websafi&PARAM_nitocc=800189921&PARAM_id_username=946';
                            $url = $url . '&id_resolucion=' . $id_resolucion;
                            $url = $url . '&id_cdp=' . $cdp;
                            $url = $url . '&resolucion=' . $resolucion;
                            $url = $url . '&vigencia=' . $vigencia_comisiones;
                            $url = $url . '&activo=' . '0';
                            $url = $url . '&tipo=' . '2';
                            $url = $url . '&envio_correo=false&adjunto_modulo=false';

                            $this->logMessage($url);
                            $ch = curl_init($url);

                            //Parametros de retorno en cURL
                            curl_setopt($ch, CURLOPT_HEADER, 0);
                            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Skip SSL Verification

                            //Ejecuta la petición
                            $rta = curl_exec($ch);
                            //Se cierra la conexión
                            curl_close($ch);*/

    //                $arrayRespuesta = json_decode($rta, true);
                            //Verifica el status, si es diferente de 0, ocurrio un error 
    //                if ($arrayRespuesta['response']['status'] != 0) {
    //                    $this->logMessage("[Error] Me llamo desde el CURL");
                            //echo "<h3>Me llamo desde el cURL</h3>";
    //              $mensaje=$arrayRespuesta['response']['data'];
    //              $this->status = 3;
    //              $a = $mensaje[0]['mensaje'];
    //              $b = htmlspecialchars($a, ENT_QUOTES);
    //              $this->mensajeError = $b;
    //              $this->list_data = array();
    //                }
                            //URL de envio se limpia
                            $url = '';

                            /*
                             * FIN Generacion de PDFs
                             */

                        //    $consecutivo_resol++;
                        }

                        //Actualiza consecutivo de comis resol
                       /* $sql = <<<EOD
update pr_consecutivo_comis 
set consecutivo_resol = $consecutivo_resol 
where id_consecutivo_comis = 1
EOD;*/
                        //Ejecutar SQL
                        //20190218 comentado codigo que genera numero de rsolucion
                        //$this->conn->execute($sql);

                        /**
                         * Envio correo al responsable,supervisor
                         */
                        $this->logMessage("Envio correo al responsable,supervisor.");
                        //Consulta datos envio correo
                        //Sql
                        $sql = <<<EOD
SELECT
placom.id_plan_comisiones,
placom.vigencia,
placom.id_comisiones,
placom.vigencia_comisiones,
comis.descomi as prefijo,
'$correoEnvio' as email_envio,
'Observacion: '||placom.observacion_aut as mensaje_extra,
'' as mensaje_firma,
'Se realiza la autorización de la plan de comisión No.'|| placom.id_comisiones ||' - ' || placom.vigencia_comisiones || '; ' || comis.descomi || ', verificar en control de comisiones.' as mensaje,

--Datos correo responsable
nvl(placom.num_doc_terlog,'') as num_doc,
nvl(placom.razon_soc_terlog,'') as razon_soc,
nvl(placom.correo_terlog,'') as correo,

--Datos correo supervisor
nvl(placom.num_doc_tersup,'') as num_doc_tersup,
nvl(placom.razon_soc_tersup,'') as razon_soc_tersup,
nvl(placom.correo_tersup,'') as correo_tersup
    
FROM com_plan_program_comis_v placom

left join comisiones_v comis
on comis.id_comisiones = placom.id_comisiones
and comis.vigencia = placom.vigencia_comisiones 

where
placom.id_plan_comisiones = $id_plan_comisiones
and placom.vigencia = $id_vigencia 
and placom.id_comisiones = $id_comisiones
and placom.vigencia_comisiones = $vigencia_comisiones 
EOD;
                        //Ejecutar SQL
                        $records = CN_TABLE::executeSQL($sql);

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

                        if (count($records) > 0) {

                            $report_params = $records[0];
                            $prefijo = $records[0]['prefijo'];
                            $mensaje_extra = $records[0]['mensaje_extra'];

                            //Ejemplo de la persona que se envia el correo: 
                            //123;1;pepito perez;correo@gmal.com
                            //DATOS RESPONSABLE
                            $num_doc = $records[0]['num_doc'];
                            $id_tipo_doc = 1;
                            $razon_soc = $records[0]['razon_soc'];
                            $correo = $records[0]['correo'];
                            $datos_usuario = array(
                                '0' => $num_doc . ';' . $id_tipo_doc . ';' . $razon_soc . ';' . $correo. ';' .$mensaje_extra
                            );
                            //DATOS SUPERVISOR
                            $num_doc_tersup = $records[0]['num_doc_tersup'];
                            $id_tipo_doc_tersup = 1;
                            $razon_soc_tersup = $records[0]['razon_soc_tersup'];
                            $correo_tersup = $records[0]['correo_tersup'];
                            $datos_usuario_tersup = array(
                                '0' => $num_doc_tersup . ';' . $id_tipo_doc_tersup . ';' . $razon_soc_tersup . ';' . $correo_tersup. ';' .$mensaje_extra
                            );
                            //PARAMETROS STANDART                 
                            $subject = "Autorizado - Plan de Comision por Supervisor: " . $num_doc_tersup . " No." . $id_comisiones . " - " . $vigencia_comisiones . "; " . $prefijo;
                            $currentUri = '';
                            $ruta = '';
                            $adjunto = false;
                            $progress_key = $request['comando'] . $request['username'];
                            $array_adjuntos = array();
                            $entidad_cliente = $entidadCliente;
                            $entidad_nombre = $entidadNombre;
                            $addAddress = true;

                            $this->logMessage("Subject: " . $subject);
                            CN_TABLE::envioCorreo($report_params, $datos_usuario_tersup, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                            CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                        }

                        /**
                          1	CONSULTAR
                          2	ACTUALIZAR
                          3	ADICIONAR
                          4	ELIMINAR
                          5	ANULAR
                         */
                        $id_ope_bd = 2;

                        //construir observacion
                        $observacion_log = "'Programación de comision autorizado por proceso del asunto: " . $subject . "'";

                        /*
                         * registro de consulta en tabla de log
                         */
                        $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $usuario, $username, $comando, $observacion_log);
                    }
                    break;

                default:
                    break;
            }



            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            if ($status == 0) {
                $this->conn->commit();
                $this->status = 0;
                $this->list_data = $response;
                $this->logMessage("[com_plan_aprob_plan_comis] Exitoso");
            } else {
                $this->conn->rollback();
                $this->status = 1;
                $this->mensajeError = $mensaje;
                $this->list_data = array();
                $this->logMessage("[com_plan_aprob_plan_comis] ERROR!");
                $this->logMessage($mensaje);
            }
        } catch (Exception $e) {

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

            $this->status = 1;
            $this->mensajeError = "[com_plan_aprob_plan_comis] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[com_plan_aprob_plan_comis] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

}
