<?php

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

    protected $table_names = array(
        'COM_PLAN_RESOL_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_RESOL_COMIS_V',
            'vigencia' => 'COM_PLAN_RESOL_COMIS_V'
        ),
        'COMISIONES_V' =>
        array(
            'id_comisiones' => 'COM_PLAN_RESOL_COMIS_V',
            'vigencia_comisiones-vigencia' => 'COM_PLAN_RESOL_COMIS_V'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'COM_PLAN_RESOL_COMIS_V' =>
        array(
            'id_plan_comisiones' => 'id_plan_comisiones',
            'vigencia' => 'vigencia',
            'id_comisiones' => 'id_comisiones',
            'vigencia_comisiones' => 'vigencia_comisiones',
            'id_resol_comis' => 'id_resol_comis',
            'fecha_log' => 'fecha_log',
            'usuario_log' => 'usuario_log',
            'estado' => 'estado',
            'fecha_estado' => 'fecha_estado',
            'id_usuario_estado' => 'id_usuario_estado',
            'observaciones_estado' => 'observaciones_estado',
            'nivel_rechazo' => 'nivel_rechazo',
            'firmado' => 'firmado',
            'fecha_firmado' => 'fecha_firmado',
            'id_usuario_firmado' => 'id_usuario_firmado',
            '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',
            'num_doc_terlog' => 'num_doc_terlog',
            'razon_soc_terlog' => 'razon_soc_terlog',
            'num_doc_tersup' => 'num_doc_tersup',
            'razon_soc_tersup' => 'razon_soc_tersup',
            'correo_terlog' => 'correo_terlog',
            'correo_tersup' => 'correo_tersup',
            'num_doc_terest' => 'num_doc_terest',
            'razon_soc_terest' => 'razon_soc_terest',
            'num_doc_terfir' => 'num_doc_terfir',
            'razon_soc_terfir' => 'razon_soc_terfir',
            'num_doc_teraut' => 'num_doc_teraut',
            'razon_soc_teraut' => 'razon_soc_teraut',
            'cdp' => 'cdp',
            'vigencia_cdp' => 'vigencia_cdp',
            'cdp,||, - ,||,vigencia_cdp' => 'completo_cdp',
            'id_cdp_resol' => 'id_cdp_resol',
            'resolucion' => 'resolucion',
            'tipo_comisionado' => 'tipo_comisionado',
            'adjunto_firmado_digital' => 'adjunto_firmado_digital'
        ),
        '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_RESOL_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')),
            'id_resol_comis' => array('=' => array('id_resol_comis')),
            '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', 'resolucion', 'id_plan_comisiones', 'vigencia_comisiones', 'id_comisiones'
    ); //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;

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

        /*
         *  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 de la Resolucion
     * 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'];
            $id_resol_comis = $request['id_resol_comis'];

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

            /*
             * obtener id maestro tabla
             */
            $id_mae_bd = CN_TABLE::consultarIdTablaBD('COM_PLAN_RESOL_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_resol_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;
                        }
                    }
                }
                $url_presup = "http://10.0.100.66/presupuesto/web/pr_resolucion_comis/";
                $int++;
            }


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

            switch ($tipo_boton) {
                //Rechazado
                case 0:
                    // por defecto rechazo 1
                    $this->logMessage("Rechazar======================================================");
                    $nivel_rechazo = '1';
                    if (isset($request['nivel_rechazo'])) {
                        $nivel_rechazo = $request['nivel_rechazo'];
                    }
                    //actualizar como rechazado
                    $sql = <<<EOD
update com_plan_resol_comis 
set estado = 0,
fecha_estado = SYSDATE,
id_usuario_estado = '$id_usuario_estado',
observaciones_estado = '$observaciones_estado',
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 id_resol_comis = $id_resol_comis                        
and estado = 1
EOD;

                    //Consulta datos envio correo
                    //Sql
                    $this->conn->execute($sql);
                    $sql = <<<EOD
SELECT
placom.id_plan_comisiones,
placom.vigencia,
placom.id_comisiones,
placom.vigencia_comisiones,
placom.id_resol_comis,
--comis.descomi as prefijo,
'$correoEnvio' as email_envio,
'Observacion: '||placom.observaciones_estado as mensaje_extra,
'' as mensaje_firma,
'Se realiza el rechazo de la resolucion No. '|| placom.id_resol_comis ||' 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_resol_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];
                        $id_resol_comis = $records[0]['id_resol_comis'];

                        //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
                        );
                        //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
                        );
                        //PARAMETROS STANDART                 
                        $subject = "Rechazo - Resolucion por Supervisor: " . $num_doc_tersup . " No." . $id_resol_comis . " - " . $vigencia_comisiones . "; ";
                        $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;
                //2-Firmado
                case 2:

                    //$id_supervisor = $request['id_supervisor'];
                    //Actualizacion 20190422 al firmar tambien se aprueba ya que el paso de aprobado se omite para que luego de firmado revisado 
                    //continue con el firmado digital
                    //actualizar como autorizado
                    $sql = <<<EOD
update com_plan_resol_comis 
set firmado = 1,
fecha_firmado = SYSDATE,
id_usuario_firmado = '$id_usuario_estado',
autorizado = 1,
fecha_autorizado = SYSDATE,
observacion_aut = 'Autorizado automaticamente al firmar',
id_usuario_autorizado = '$id_usuario_estado' 
where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $id_vigencia 
and id_comisiones = $id_comisiones
and vigencia_comisiones = $vigencia_comisiones
and id_resol_comis = $id_resol_comis                        
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,
placom.id_resol_comis,
--comis.descomi as prefijo,
'$correoEnvio' as email_envio,
--'Observacion: '||placom.observacion_aut as mensaje_extra,
'' as mensaje_firma,
'Se realiza la Firma de la resolucion No. '|| placom.id_resol_comis ||' 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_resol_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];
                        $id_resol_comis = $records[0]['id_resol_comis'];

                        //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
                        );
                        //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
                        );
                        //PARAMETROS STANDART                 
                        $subject = "Firmado - Resolucion por Supervisor: " . $num_doc_tersup . " No." . $id_resol_comis . " - " . $vigencia_comisiones . "; ";
                        $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-Aprobado
                case 4:

                    //$id_supervisor = $request['id_supervisor'];
                    //actualizar como autorizado
                    $sql = <<<EOD
update com_plan_resol_comis 
set autorizado = 1,
fecha_autorizado = SYSDATE,
observacion_aut = '$observaciones_estado',
id_usuario_autorizado = '$id_usuario_estado'                   
where
id_plan_comisiones = $id_plan_comisiones
and vigencia = $id_vigencia 
and id_comisiones = $id_comisiones
and vigencia_comisiones = $vigencia_comisiones
and id_resol_comis = $id_resol_comis                        
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,
placom.id_resol_comis,
--comis.descomi as prefijo,
'$correoEnvio' as email_envio,
'Observacion: '||placom.observacion_aut as mensaje_extra,
'' as mensaje_firma,
'Se realiza la aprobación de la resolucion No. '|| placom.id_resol_comis ||' 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_resol_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];
                        $id_resol_comis = $records[0]['id_resol_comis'];

                        //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
                        );
                        //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
                        );
                        //PARAMETROS STANDART                 
                        $subject = "Aprobado - Resolucion por Supervisor: " . $num_doc_tersup . " No." . $id_resol_comis . " - " . $vigencia_comisiones . "; ";
                        $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_resol_comis] Exitoso");
            } else {
                $this->conn->rollback();
                $this->status = 1;
                $this->mensajeError = $mensaje;
                $this->list_data = array();
                $this->logMessage("[com_plan_resol_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_resol_comis] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

}
