<?php

/**
 * balance_contrato_estado actions.
 *
 * @package    radicacionVirtualCuentas
 * @subpackage balance_contrato_estado
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class balance_contrato_estadoActions extends sfActions {

    /**
     * 
     * @param sfWebRequest $request
     */
    public function executeList(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 {

            /**
             * Datos Generales - 20181226
             */
            $sql = <<<EOD
select 
* 
from rvc_param_gen
where
id = 1  
EOD;
            $results_param = CN_TABLE::executeSQL($sql);

            $aplica_apertura_anho = $results_param[0]['aplica_apertura_anho'];
            $mensaje_apertura_anho = $results_param[0]['mensaje_apertura_anho'];
            $aplica_cierre_anho = $results_param[0]['aplica_cierre_anho'];
            $mensaje_cierre_anho = $results_param[0]['mensaje_cierre_anho'];

            $nitocc = $request['nitocc'];

            $validar_acta_inicio = 0;
            //viene la variable si es por formato de pago - 20181217
            if (isset($request['validar_acta_inicio']) && $request['validar_acta_inicio'] == 1) {
                $validar_acta_inicio = 1;
            }
            //viene la variable si es por registro de contrato - 20190114
            if (isset($request['aplica_apertura_regcontra']) && $request['aplica_apertura_regcontra'] == 1) {
                $aplica_apertura_anho = 1;
            }

            /*
             * Valida si tiene novedad de actualizacion
             * Verifica las 3 tablas de novedad segun contratista y un registro por año - 20181226
             */
            $sql = <<<EOD
select
case when  

nvl(
    (select 
    count(id_novedad_contratista) from rvc_novedad_contratista
    where id_contratista in (SELECT
    id_contratista
    FROM rvc_contratista
    where
    num_doc = '$nitocc') and EXTRACT(YEAR FROM fecha_log) = EXTRACT(YEAR FROM sysdate) ) 
,0) = 0 then 0 

when
nvl(
    (select 
    count(id_novedad_contra_rut) from rvc_novedad_contra_rut
    where id_contratista in (SELECT
    id_contratista
    FROM rvc_contratista
    where
    num_doc = '$nitocc') and EXTRACT(YEAR FROM fecha_log) = EXTRACT(YEAR FROM sysdate) ) 
,0) = 0 then 0

when
nvl(
    (select 
    count(id_pago_contra) from rvc_pago_contra
    where id_contratista in (SELECT
    id_contratista
    FROM rvc_contratista
    where
    num_doc = '$nitocc') and EXTRACT(YEAR FROM fecha_log) = EXTRACT(YEAR FROM sysdate) ) 
,0) = 0 then 0

else 1 end tiene_novedad
   
from dual 
EOD;

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

            $tiene_novedad = 1;
            if (count($records) > 0) {
                $tiene_novedad = $records[0]['tiene_novedad'];
            }

            if ($aplica_apertura_anho == 1 && $validar_acta_inicio == 0 && $tiene_novedad == 0) {

                $status = 1;

                $mensaje_apertura_anho = str_replace(array("\r", "\n"), '</br></br>', $mensaje_apertura_anho);

                $mensaje = <<<EOD
$mensaje_apertura_anho</br></br>
EOD;
            } else {

                //viene la variable si es por registro de contrato, no valida cierre - 20190114
                if (isset($request['aplica_apertura_regcontra']) && $request['aplica_apertura_regcontra'] == 1) {
                    $validar_acta_inicio = 1;
                    $aplica_cierre_anho = 0;
                }

                //Verificar registro de acta inicio
                //Se toma el ultimo contrato para validación - 20181217
                /* $sql = <<<EOD
                  SELECT
                  nvl(tab2.aplica_balance_contrato,0) as aplica_balance_contrato,
                  case when tab3.id_acta_inicio is not null then 1 else 0 end as tag_acta_balac

                  FROM RVC_CONTRATISTA tab2

                  left join rvc_contrato tab1 on tab1.id_contratista = tab2.id_contratista

                  left join rvc_acta_inicio tab3 on tab3.id_contrato = tab1.id_contrato

                  where
                  tab2.num_doc = '$nitocc'
                  and tab2.estado = 1
                  --and tab1.estado = 1

                  order by
                  tab1.id_contrato desc
                  EOD; */
                //Se toma segun numero de contrato y no id, por si tiene mas de uno registrado - 20181217
                $sql = <<<EOD
select * from (

    select
    
    max(tab0.aplica_balance_contrato) as aplica_balance_contrato,
    max(tab0.tag_acta_balac) as tag_acta_balac
    
    from(
    
        SELECT
        tab2.num_doc,
        nvl(tab2.aplica_balance_contrato,0) as aplica_balance_contrato,
        case when tab3.id_acta_inicio is not null then 1 else 0 end as tag_acta_balac
        
        FROM RVC_CONTRATISTA tab2
        
        left join rvc_contrato tab1 on tab1.id_contratista = tab2.id_contratista
        
        left join rvc_acta_inicio tab3 on tab3.id_contrato = tab1.id_contrato
        
        where
        tab2.num_doc = '$nitocc' 
        and tab2.estado = 1  
        --and tab1.estado = 1
            
        order by
        tab1.id_contrato desc
    
    )tab0 

)

where
aplica_balance_contrato is not null 
EOD;

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

                if (count($records) > 0) {

                    //$aplica_balance_contrato = $records[0]['aplica_balance_contrato'];
                    $aplica_balance_contrato = 1; //Para todos valida - 20181211
                    $tag_acta_balac = $records[0]['tag_acta_balac'];

                    //Valida que tenga registro de acta de inicio y balance contrato - 20181207
                    //Se deja activo para todos los contratistas - 20181214
                    if (($aplica_cierre_anho == 1 && $aplica_balance_contrato == 1 && $tag_acta_balac == 0) || $validar_acta_inicio == 0) {
                        $status = 1;

                        $mensaje_cierre_anho = str_replace(array("\r", "\n"), '</br></br>', $mensaje_cierre_anho);

                        /**
                         * Señor Contratist@,</br></br>
                          El grupo de recursos financieros lo invita a realizar el registro de Acta de Inicio y Balance del Contrato(aplica al finalizar el contrato), que se encuentra en el menú cierre de año. Esta información es necesaria para que el sistema le permita hacer la radicación de su ultimo cobro.</br></br>
                          Nota: Por instrucción de la vicepresidencia administrativa y financiera el horario de radicación estará habilitado del 10 al 14 de diciembre entre 7:30 am / 12:00m
                         * 
                          Señor Contratist@,</br></br>
                          El sistema solo le va a solicitar la actualización de la información de su acta de inicio y la elaboración del balance de contrato se suspende. Nadie deberá elaborar el balance del contrato por el sistema, para este proceso deberán utilizar el formato físico que se encuentra en isolución firmarlo y hacerlo llegar en físico al grupo de recursos financieros, en los casos que aplique la elaboración.</br></br>
                          Nota: Por contingencia presentada en contratación por la suscripción de las prórrogas, el RCV habilitara su horario de 07:30am a 4:30pm del 17 de diciembre al 21 de diciembre.
                         * 
                          Señor Contratist@,</br></br>
                          El grupo de recursos financieros le informa que despúes de las 5:00pm del día de hoy 21 de Diciembre, el sistema queda inactivo para radicar.</br></br>
                         * 
                          Señor Contratist@,</br></br>
                          El Grupo de recursos Financieros les informa que quienes tengan las cuentas en estado rechazado o no la hayan elaborado, deben corregir o elaborarla el día de hoy 24 de Diciembre; hasta las 03:00pm.</br></br>
                         */
                        /* $mensaje = <<<EOD
                          Estimado Contratista:</br></br>
                          El Grupo de Recursos Financieros le informa que el RVC estará habilitado el 27 de diciembre de 2018, de 7:00 a.m. a 5:00 p.m., para que sean radicadas aquellas cuentas que estan pendiente de este trámite.</br></br>
                          El pago de estás cuentas se efectuará en el 2019.</br></br>
                          EOD; */
                        $mensaje = <<<EOD
$mensaje_cierre_anho</br></br>
EOD;
                    }
                } else {
                    //sin contrato 
                }
            }

            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            if ($status == 0) {
                $this->conn->commit();
                $this->status = 0;
                $this->list_data = $response;
                $this->logMessage("[balance_contrato_estado] Exitoso");
            } else {
                $this->conn->rollback();
                $this->status = 1;
                $this->mensajeError = $mensaje;
                $this->list_data = array();
                $this->logMessage("[balance_contrato_estado] 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 = "[balance_contrato_estado] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[balance_contrato_estado] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

    /**
     * Actualizar el estado del formato de pago
     * tipo_boton
     * 1-Firmado
     * 2-Revisado
     * 3-Autorizado
     * 4-Radicado
     * 5-Rechazado
     * 6-Aprobado
     * 7-Reactivacion
     * 
     * tipo_trans
     * 1-Contratista
     * 2-Apoyo Supervisor
     * 3-Supervisor
     * 4-Financiera
     *
     * @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 por defecto para el registro de log
             */
            $id_tabla = $request['id_acta_inicio'];

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

            /**
              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'];
                }
            }

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

            //construir observacion
            $observacion_log = "'Se actualizo tabla de acta_inicio desde la funcionalidad: " . $comando . "'";
            $subject = "";

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


            /*
             * Variables de filtro
             */
            $tipo_boton = $request['tipo_boton'];
            $tipo_trans = $request['tipo_trans'];
            $id_acta_inicio = $request['id_acta_inicio'];
            $anho_completo = date('Y'); //anho completo cuatro digitos

            $usuario_estado = $request['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;
                        }
                    }
                }
                $int++;
            }

            //Opcion segun boton
            switch ($tipo_boton) {
                //FIRMADO
                case 1:
                    //actualizar como contratista
                    $sql = <<<EOD
update rvc_acta_inicio 
set firmado = 1,
fecha_firmado = SYSDATE,
usuario_firmado = '$usuario_estado'
where
id_acta_inicio = $id_acta_inicio
and estado = 1
EOD;
                    $this->conn->execute($sql);

                    /**
                     * Envio correo al apoyo si tiene, sino al supervisor
                     */
                    $this->logMessage("Envio correo al apoyo si tiene, sino al supervisor");
                    //Consulta datos envio correo
                    //Sql
                    $sql = <<<EOD
select 
acta.id_acta_inicio,
con.id_anhos,
con.num_contrato,
contra.id_tipo_doc,
contra.num_doc,
contra.razon_social,
contra.correo as correo,
'$correoEnvio' as email_envio,
'Observacion: '||acta.OBSERVACION_AUT as mensaje_extra,
'' as mensaje_firma,
'Se realiza la firma del balance de contrato '|| con.num_contrato ||' por el contratista '|| contra.num_doc||' '||contra.razon_social ||' del supervisor ' || tersup.num_doc ||' '|| tersup.razon_soc || '.' as mensaje,
--datos de envio
contra.num_doc as num_doc_env,
contra.id_tipo_doc as id_tipo_doc_env,
contra.razon_social as razon_social_env,
contra.correo as correo_env,
                            
--Datos correo apoyo
nvl(terapo.num_doc,'') as num_doc_apoyo,
nvl(terapo.id_tipo_doc,'') as id_tipo_doc_apoyo,
nvl(terapo.razon_soc,'') as razon_soc_apoyo,
nvl(apo.correo,'') as correo_apoyo,

--Datos correo supervisor
nvl(tersup.num_doc,'') as num_doc_sup,
nvl(tersup.id_tipo_doc,'') as id_tipo_doc_sup,
nvl(tersup.razon_soc,'') as razon_soc_sup,
nvl(sup.correo,'') as correo_sup,
'Fueron Notificados:</br>
El contratista '||contra.num_doc||' '||contra.razon_social||'</br>
El Apoyo al Supervisor: '|| case when terapo.num_doc is not null then terapo.razon_soc else 'No aplica' end ||'</br>' as mensaje_extra_sup
                            
from rvc_acta_inicio acta

left join rvc_contrato con
on acta.id_contrato = con.id_contrato

left join rvc_contratista contra
on acta.id_contratista = contra.id_contratista

left join rvc_apoyo_supervisor apo
on acta.id_apoyo_supervisor = apo.id_apoyo_supervisor

left join interceros_v terapo
on terapo.id_mae_ter = apo.id_mae_ter

left join rvc_supervisor sup
on acta.id_supervisor = sup.id_supervisor

left join interceros_v tersup
on tersup.id_mae_ter = sup.id_mae_ter

where
acta.id_acta_inicio = $id_acta_inicio  
EOD;
                    //Ejecutar SQL
                    $records = CN_TABLE::executeSQL($sql);

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

                    if (count($records) > 0) {

                        $report_params = $records[0];
                        $num_contrato = $records[0]['num_contrato'];
                        $num_doc = $records[0]['num_doc'];

                        //Ejemplo de la persona que se envia el correo: 
                        //123;1;pepito perez;correo@gmal.com
                        $num_doc_env = $records[0]['num_doc_env'];
                        $id_tipo_doc_env = $records[0]['id_tipo_doc_env'];
                        $razon_social_env = $records[0]['razon_social_env'];
                        $correo_env = $records[0]['correo_env'];
                        //DATOS APOYO - 20180620
                        $num_doc_apo = $records[0]['num_doc_apoyo'];
                        $id_tipo_doc_apo = $records[0]['id_tipo_doc_apoyo'];
                        $razon_social_apo = $records[0]['razon_social_apoyo'];
                        $correo_apo = $records[0]['correo_apoyo'];
                        //DATOS SUPERVISOR - 20180620
                        $num_doc_sup = $records[0]['num_doc_sup'];
                        $id_tipo_doc_sup = $records[0]['id_tipo_doc_sup'];
                        $razon_social_sup = $records[0]['razon_social_sup'];
                        $correo_sup = $records[0]['correo_sup'];

                        $datos_usuario = array(
                            '0' => $num_doc_env . ';' . $id_tipo_doc_env . ';' . $razon_social_env . ';' . $correo_env
                        );

                        $subject = "Firmado - Balance Contrato por Contratista:" . $num_doc . " del Contrato:" . $num_contrato;
                        $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, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);


                        //ENVIAMOS CORREO A APOYO - 20180620
                        if ($num_doc_apo != '') {
                            $datos_usuario = array(
                                '0' => $num_doc_apo . ';' . $id_tipo_doc_apo . ';' . $razon_social_apo . ';' . $correo_apo
                            );

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

                        //ENVIAMOS CORREO A Supervisor - 20180620
                        $mensaje_extra_sup = $records[0]['mensaje_extra_sup'];

                        $datos_usuario = array(
                            '0' => $num_doc_sup . ';' . $id_tipo_doc_sup . ';' . $razon_social_sup . ';' . $correo_sup . ';' . $mensaje_extra_sup
                        );

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

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

                    //construir observacion
                    $observacion_log = "'Balance Contrato firmado del proceso del asunto: " . $subject . "'";

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

                    break;

                //AUTORIZADO
                case 3:

                    $id_supervisor = $request['id_supervisor'];
                    $nombre_reporte = "Balance de Contrato.pdf";

                    //actualizar como supervisor
                    $sql = <<<EOD
update rvc_acta_inicio 
set autorizado = 1,
fecha_autorizado = SYSDATE,
observacion_aut = '$observaciones_estado',
usuario_autorizado = '$id_supervisor'
where
id_acta_inicio = $id_acta_inicio
and estado = 1
EOD;
                    $this->conn->execute($sql);

                    $this->conn->commit();

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

                    /**
                     * Generar PDF por Jasper - 20181211
                     */
                    $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_jasper;
                    $url = $url . 'balance_contrato&format=PDF&PARAM_id_mod=24&PARAM_username=websafi&PARAM_nitocc=800189921&PARAM_id_username=946';
                    $url = $url . '&PARAM_id_acta_inicio=' . $id_acta_inicio;
                    $url = $url . '&PARAM_id_anhos=' . $anho_completo;
                    $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
                     */


                    /**
                     * Envio correo al apoyo si tiene, sino al supervisor
                     */
                    $this->logMessage("Envio correo al contratista");
                    //Consulta datos envio correo
                    //Sql
                    $sql = <<<EOD
select 
acta.id_acta_inicio,
con.id_anhos,
con.num_contrato,
contra.id_tipo_doc,
contra.num_doc,
contra.razon_social,
contra.correo as correo,
'$correoEnvio' as email_envio,
'Observacion: '||acta.OBSERVACION_AUT as mensaje_extra,
'' as mensaje_firma,
'Se realiza la autorización del balance de contrato '|| con.num_contrato ||' asignado al contratista '|| contra.num_doc||' '||contra.razon_social ||' por el supervisor ' || tersup.num_doc ||' '|| tersup.razon_soc || '.' as mensaje,
--datos de envio
contra.num_doc as num_doc_env,
contra.id_tipo_doc as id_tipo_doc_env,
contra.razon_social as razon_social_env,
contra.correo as correo_env,
                            
--Datos correo apoyo
nvl(terapo.num_doc,'') as num_doc_apoyo,
nvl(terapo.id_tipo_doc,'') as id_tipo_doc_apoyo,
nvl(terapo.razon_soc,'') as razon_soc_apoyo,
nvl(apo.correo,'') as correo_apoyo,

--Datos correo supervisor
nvl(tersup.num_doc,'') as num_doc_sup,
nvl(tersup.id_tipo_doc,'') as id_tipo_doc_sup,
nvl(tersup.razon_soc,'') as razon_soc_sup,
nvl(sup.correo,'') as correo_sup,
'Fueron Notificados:</br>
El contratista '||contra.num_doc||' '||contra.razon_social||'</br>
El Apoyo al Supervisor: '|| case when terapo.num_doc is not null then terapo.razon_soc else 'No aplica' end ||'</br>' as mensaje_extra_sup
                            
from rvc_acta_inicio acta

left join rvc_contrato con
on acta.id_contrato = con.id_contrato

left join rvc_contratista contra
on acta.id_contratista = contra.id_contratista

left join rvc_apoyo_supervisor apo
on acta.id_apoyo_supervisor = apo.id_apoyo_supervisor

left join interceros_v terapo
on terapo.id_mae_ter = apo.id_mae_ter

left join rvc_supervisor sup
on acta.id_supervisor = sup.id_supervisor

left join interceros_v tersup
on tersup.id_mae_ter = sup.id_mae_ter

where
acta.id_acta_inicio = $id_acta_inicio  
EOD;
                    //Ejecutar SQL
                    $records = CN_TABLE::executeSQL($sql);

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

                    if (count($records) > 0) {

                        $report_params = $records[0];
                        $num_contrato = $records[0]['num_contrato'];
                        $num_doc = $records[0]['num_doc'];
                        $mensaje_extra = $records[0]['mensaje_extra'];

                        //Ejemplo de la persona que se envia el correo: 
                        //123;1;pepito perez;correo@gmal.com
                        $num_doc_env = $records[0]['num_doc_env'];
                        $id_tipo_doc_env = $records[0]['id_tipo_doc_env'];
                        $razon_social_env = $records[0]['razon_social_env'];
                        $correo_env = $records[0]['correo_env'];
                        //DATOS APOYO - 20180620
                        $num_doc_apo = $records[0]['num_doc_apoyo'];
                        $id_tipo_doc_apo = $records[0]['id_tipo_doc_apoyo'];
                        $razon_social_apo = $records[0]['razon_social_apoyo'];
                        $correo_apo = $records[0]['correo_apoyo'];
                        //DATOS SUPERVISOR - 20180620
                        $num_doc_sup = $records[0]['num_doc_sup'];
                        $id_tipo_doc_sup = $records[0]['id_tipo_doc_sup'];
                        $razon_social_sup = $records[0]['razon_social_sup'];
                        $correo_sup = $records[0]['correo_sup'];

                        $datos_usuario = array(
                            '0' => $num_doc_env . ';' . $id_tipo_doc_env . ';' . $razon_social_env . ';' . $correo_env . ';' . $mensaje_extra
                        );

                        $subject = "Autorizado - Balance Contrato por Supervisor:" . $num_doc . " del Contrato:" . $num_contrato;
                        $currentUri = '';
                        $ruta = getcwd() . "/uploads/balance_contrato";
                        $adjunto = true;
                        $progress_key = $request['comando'] . $request['username'];
                        $array_adjuntos = array(
                            $nombre_reporte => $nombre_reporte
                        );
                        $entidad_cliente = $entidadCliente;
                        $entidad_nombre = $entidadNombre;
                        $addAddress = true;

                        $this->logMessage("Subject: " . $subject);

                        CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);


                        //ENVIAMOS CORREO A APOYO - 20180620
                        if ($num_doc_apo != '') {
                            $datos_usuario = array(
                                '0' => $num_doc_apo . ';' . $id_tipo_doc_apo . ';' . $razon_social_apo . ';' . $correo_apo . ';' . $mensaje_extra
                            );

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

                        //ENVIAMOS CORREO A Supervisor - 20180620
                        $mensaje_extra_sup = $records[0]['mensaje_extra_sup'];

                        //Se deja copia a luz.zapata@anm.gov.co, maria.peralta@anm.gov.co y yenny.saavedra@anm.gov.co
                        $datos_usuario = array(
                            '0' => $num_doc_sup . ';' . $id_tipo_doc_sup . ';' . $razon_social_sup . ';' . $correo_sup . ';' . $mensaje_extra_sup,
                            '1' => '51831952' . ';' . $id_tipo_doc_sup . ';' . 'LUZ ELENA ZAPATA' . ';' . 'luz.zapata@anm.gov.co',
                            '2' => '52333467' . ';' . $id_tipo_doc_sup . ';' . 'MARIA ISABEL PERALTA RAMIREZ' . ';' . 'maria.peralta@anm.gov.co',
                            '3' => '38244073' . ';' . $id_tipo_doc_sup . ';' . 'YENNY SAAVEDRA POSADA' . ';' . 'yenny.saavedra@anm.gov.co'
                        );

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

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

                    //construir observacion
                    $observacion_log = "'Balance Contrato autorizado del proceso del asunto: " . $subject . "'";

                    /*
                     * registro de consulta en tabla de log
                     */
                    $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_mae_ter, $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("[balance_contrato_estado] Exitoso");
            } else {
                $this->conn->rollback();
                $this->status = 1;
                $this->mensajeError = $mensaje;
                $this->list_data = array();
                $this->logMessage("[balance_contrato_estado] 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 = "[balance_contrato_estado] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[balance_contrato_estado] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

}
