<?php

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

    /**
     * Executes index action
     *
     * @param sfRequest $request A request object
     */
    public function executeUpdate(sfWebRequest $request) {
        $mensaje = '';
        $status = 0;
        $texto_firmados = '';

        $progress_key = $request['progress_key'] . $request['username'];

        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        //$this->conn->beginTransaction();
        //Parametros Libreria
        $nombre_certificado_digital = $request['nombrearchivo_cert'];
        $certificado_digital = getcwd() . "/uploads/certificados/" . $nombre_certificado_digital;
        $cert_password = $request['cert_password'];
        $cert_usuario = $request['cert_usuario'];
        $id_firma = $request['id_firma'];
        $firma_rp = $request['firma_rp'];
        $sql = <<<EOD
select * from PARAM_FIRMA_ELECTRONICA where id = $id_firma                
EOD;
        $records = CN_TABLE::executeSQL($sql);

        $serial = $records[0]['serial'];
        $firma_prov = $records[0]['id_firma_elec_prov'];

        $this->logMessage("Datos firmado----------------------------------");
        $this->logMessage("usuario_firma:" . $cert_usuario);
        //$this->logMessage("pass_usu_firma:".$cert_password);
        //$this->logMessage("serial:".$serial);
        $this->logMessage("Firma Proveedor:" . $firma_prov);

        //Ruta libreria  
        $root = getcwd() . "/js/certicamaras";
        $this->logMessage("serial:" . $serial);
        $apiPath = "$root/api/wrapperSign4J/WrapperSign4J.jar";
        //tipo de firma
        $signType = "PADES";
        //ruta del archivo properties
        $xmlConfigPath = "$root/config/properties.xml";
        //ruta archivo a firmar
        $fileToSignPath = "";
        //ruta para guardar el archivo firmado
        $fileSignedPath = "";

        //Parametros token
        //si es certiToken
        $isCertiToken = "true";
        //ruta del certificado de firma o usuario de certitoken
        $signP12Path = $cert_usuario; //usuario certitoken o base de datos
        //$signP12Path = "$root/resources/certificate/certificadoPJJE_Eventos2016.p12";
        //password del certificado de firma o password de certitoken
        $signP12Password = $cert_password; // clave token, ésta debe ser la que ingrese el usuario
        //Serial certificado cuando es certitoken
        $serialCert = $serial; // CONFIGURADO PARA LA FIRMA
        //Emisor del certificado cuando es certitoken
        $issuerCert = "CN=AC SUB CERTICAMARA, O=CERTICAMARA S.A, OU=NIT 830084433-7, C=CO, ST=DISTRITO CAPITAL, L=BOGOTA, STREET=www.certicamara.com";
        //si se requiere estampa
        $stamp = "false";
        // tipo de autenticacion estampa // user - cert
        $stampType = "user";
        /* @var $stampP12Path string Utilizado en el caso que se estampe este es mandatorio al configurado en el properties */
        $stampP12Path = "AB20160912321";
        /* @var $stampP12Password string Utilizado en el caso que se estampe este es mandatorio al configurado en el properties */
        $stampP12Password = "Certi123*";
        // si se requiere que tenga LTV(Long Term Validation) si se colaca true automaticamente el estampado sera "true" tambien
        $ltv = "false";


        $signReason = "XXXXXX :: Agencia Nacional de Minería"; //Descripción asunto de firma
        $signLocation = "Bogota";
        $contentSignature = "";

        //validacion que se coloca en la imagen por parte del lector de pdf
        $imageValidation = "true";

        /** numero de la pagina del documento(-1 ultima pagina) (0 en todas las paginas) o para colocarlos en varias paginas enviamos numeros separados por comas */
        $numPages = "-1";
        /* buscar el string ingresado y colocar la imagen encima, si no se requiere buscar colocar la palabra "null" */
        $stringToFind = "null";
        $pdfSignTypeConstants = "CERTIFIED_FORM_FILLING_AND_ANNOTATIONS";
        /**
         * @var $signImageAttrs string Atributos que se configuran si se quiere la firma visible:
         * <page>,
         * <lowerLeftX>,<lowerLeftY>,
         * <upperRightX>,<upperRightY>,
         * <pdf2SignImagePath>,
         * <signFieldName>,<contentSignature>
         */
        $signImageAttrs = "$numPages,200,40,450,110," /** uno numero es la pagina del documento(-1 ultima pagina)(string "buscar el string y colocar la imagen encima ") */
                //. "$root/resources/in/IMAGEN_FIRMA_ESCANEADA.EXTENSION,"
                . "$root/resources/in/firma.jpg,"
                . "Firma Digital Agencia Nacional de Mineria,$contentSignature,$imageValidation,$stringToFind";

        //$signImageAttrs = null;
        $policyXmlEpes = "null";


        //parametros
        $tipo_trans = 0;
        if (isset($request['tipo_trans'])) {
            $tipo_trans = $request['tipo_trans'];
        }
        //datos usuario operacion
        $id_usuario_estado = $request['id_username'];
        $fecha_estado = CN_TABLE::fechaSistema();

        $id_resol_comis = '';
        if (isset($request['ids_resol_comis'])) {
            $id_resol_comis = $request['ids_resol_comis'];
        }
        $id_plan_comisiones = '';
        if (isset($request['id_plan_comisiones'])) {
            $id_plan_comisiones = $request['id_plan_comisiones'];
        }
        $vigencia = '';
        if (isset($request['vigencia'])) {
            $vigencia = $request['vigencia'];
        }
        $id_resoluciones = '';
        if (isset($request['id_resoluciones'])) {
            $id_resoluciones = $request['id_resoluciones'];
        }

        if ($serial == null) {
            $mensaje .= "El firmante no tiene Serial definido.";
            $status = 1;
            $this->logMessage($mensaje);
            $api_errors = array();
        } else {
            switch ($tipo_trans) {
                case 0://RESOLUCIONES DE COMISION
                    if ($id_resol_comis != '' && $vigencia != '') {
                        $sql = <<<EOD
Select * from COM_PLAN_RESOL_COMIS_V where id_resol_comis in ($id_resol_comis) and vigencia = $vigencia and firmado_digital = 0
EOD;
                        $records = CN_TABLE::executeSQL($sql);
                        $total_a_firmar = count($records);

                        if (count($records) <= 10) {
                            $this->logMessage("Resoluciones a firmar.:" . count($records));

                            /*
                             * (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++;
                            }

                            if (count($records) > 0) {
                                try {
                                    //Consecutivo de comis resol
                                    //20190524 COmentado
                                    /* $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']; */
                                    $texto_firmados = "Se genero la resolción: ";
                                    $int = 0;
                                    $brecha = 1;
                                    foreach ($records as $rec) {
                                        $int++;
                                        $this->logMessage("Inicio proceso firma: " . $int . " de " . $total_a_firmar);
                                        //Barra memcache
                                        // Guardar un valor en el proceso largo
                                        if ($int % $brecha == 0) {
                                            //validar que no sobrepase el 100 porciento - 20151007
                                            if ((round(($int / $total_a_firmar) * 100)) < 100) {
                                                MemcacheHandler::getInstance()->set($progress_key, round(($int / $total_a_firmar) * 100, 0));
                                            }
                                        }

                                        //20190524Obtenemos el consecutivo de la resolucion por cada resolucion
                                        //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'];

                                        //$id =  $rec['resolucion'];
                                        $id = $rec['id_plan_comisiones'];
                                        $vigencia = $rec['vigencia'];
                                        $id_resol_comis = $rec['id_resol_comis'];
                                        //creamos el numero de rsolucion para la resolucion a firmar
                                        $resolucion = $prefijo_resol . '-' . str_pad($consecutivo_resol, 4, "0", STR_PAD_LEFT);
                                        $sql = <<<EOD
update PR_RESOL_COMIS 
set resolucion = '$resolucion',
firma = $firma_rp
where id = $id_resol_comis
EOD;
                                        //Ejecutar SQL
                                        //20190218 comentado codigo que genera numero de rsolucion
                                        $this->conn->execute($sql);
                                        $consecutivo_resol++;

                                        $sql = <<<EOD
update COM_PLAN_RESOL_COMIS 
set firmado_digital = 1, 
    id_usuario_firmado_dig= $id_usuario_estado,
    fecha_firmado_digital='$fecha_estado'
where id_plan_comisiones = $id and id_resol_comis = $id_resol_comis and vigencia = $vigencia
EOD;
                                        $this->conn->execute($sql);
                                        //=========================================================
                                        $nombreArchivo = "RC_" . $resolucion . "_" . $rec['vigencia'];
                                        $nombre_reporte = $nombreArchivo . ".pdf";
                                        $this->logMessage("Archivo a firmar :" . $nombreArchivo);
                                        //Generamos PDF JASPER
                                        $url = $url_jasper;
                                        $url = $url . 'resolucion_comis&format=PDF&PARAM_id_mod=24&PARAM_username=websafi&PARAM_nitocc=800189921&PARAM_id_username=946';
                                        $url = $url . '&PARAM_id_plan_comisiones=' . $id;
                                        $url = $url . '&PARAM_no_resolucion=' . $resolucion;
                                        $url = $url . '&PARAM_id_resolucion=' . $id_resol_comis;
                                        $url = $url . '&PARAM_vigencia=' . $vigencia;
                                        $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 - 20200407::LAVILA
                                        //Ejecuta la petición
                                        $rta = curl_exec($ch);
                                        //Se cierra la conexión
                                        curl_close($ch);
                                        //establecemos los parametros de archivo a firmar y archivo firmado
                                        //$fileToSignPath = getcwd() . "/../../presupuesto/web/uploads/resoluciones/".$nombreArchivo.".pdf";
                                        $fileToSignPath = "uploads/resolucion/" . $nombreArchivo . ".pdf";
                                        //ruta para guardar el archivo firmado
                                        $fileSignedPath = "uploads/resolucionsignedPDF/" . $nombreArchivo . "Signed.pdf";
                                        $nombreArchivosigned = $nombreArchivo . "Signed.pdf";

                                        if ($firma_prov == "1") {
                                            //METODO DE FIRMADO CERTICAMARA
                                            $this->logMessage("Firmado por CERTICAMRA");
                                            //establecemos el comando a ejecutar por cada archivo
                                            $comand = "java -jar "
                                                    . "\"$apiPath\" "
                                                    . "\"$signType\" "
                                                    . "\"$xmlConfigPath\" "
                                                    . "\"$fileToSignPath\" "
                                                    . "\"$fileSignedPath\" "
                                                    . "\"$signP12Path\" "
                                                    . "\"$signP12Password\" "
                                                    . "\"$stamp\" "
                                                    . "\"$stampP12Path\" "
                                                    . "\"$stampP12Password\" "
                                                    . "\"$signReason\" "
                                                    . "\"$signLocation\" "
                                                    . "\"$signImageAttrs\" "
                                                    . "\"$ltv\" "
                                                    . "\"$policyXmlEpes\" "
                                                    . "\"$stampType\" "
                                                    . "\"$isCertiToken\" "
                                                    . "\"$serialCert\" "
                                                    . "\"$issuerCert\" "
                                                    . "\"$pdfSignTypeConstants\"";
                                            /**
                                             * Realiza la firma PDF y establece la configuracion del grafo a incluir
                                             *
                                             * @param args
                                             *          1. Tipo de firma (PADES, CADES).
                                             *          2. Ruta del XML de configuracion con los siguientes datos:
                                             *             a. properties.general.CRL_PATH.
                                             *             b. properties.general.VERIFY_TYPE.
                                             *             c. properties.general.KEYSTORE_PATH.
                                             *             d. properties.general.TSA_CERTIFICATE.
                                             *             e. properties.general.TSA_CERTIFICATE_PASSWORD.
                                             *             f. properties.general.TSA_POLICY.
                                             *             g. properties.general.ACRO6LAYER.
                                             *          3. Ruta del archivo a firmar.
                                             *          4. Ruta del archivo firmado.
                                             *          5. Ruta del certificado de firma.
                                             *          6. Clave del certificado de firma.
                                             *          7. Estampa (bandera).
                                             *          8. Ruta del certificado de estampa.
                                             *          9. Clave del certificado de estampa.
                                             *          10. Si es XML se envia el ID de la etiqueta a firmar
                                             *              Si es PDF se envoa la Razon de la firma.
                                             *          11. Localicacion de la firma.
                                             *          12. Atributos del grafo
                                             *              en caso de ser (null, false, 0) no sera visible.
                                             * @throws Exception
                                             */
                                            $respuesta = exec($comand . " 2>&1", $returns);

                                            //Si $respuesta es success el pdf se firmo exitosamente.         
                                            if ($respuesta == "success") {
                                                $sql = <<<EOD
update COM_PLAN_RESOL_COMIS 
set adjunto_firmado_digital = '$nombreArchivosigned'
where id_plan_comisiones = $id and id_resol_comis = $id_resol_comis and vigencia = $vigencia
EOD;
                                                $this->conn->execute($sql);
                                                //  en caso de ser satisfactoria la firma de documento acciones
                                                // Aqui en esta parte va la visualización del nuevo PDF
                                                //header('Content-type: application/pdf'); 
                                                //header('Content-Disposition: attachment; filename="'.$nombreArchivo.'Signed.pdf"'); 
                                                //readfile("CertificadosPDF/".$nombreArchivo."Signed.pdf"); 
                                                //returnamos Success
                                                //$this->list_data = array();
                                                //Actualiza consecutivo de comis resol
                                                $sql = <<<EOD
update pr_consecutivo_comis 
set consecutivo_resol = $consecutivo_resol 
where id_consecutivo_comis = 1
EOD;
                                                $this->conn->execute($sql);
                                                $status = 0;

                                                //Enviamos correo notificando
                                                $this->notificar_firmado_digital($id, $vigencia, $id_resol_comis, $request);
                                                $this->logMessage("Fin proceso firma: " . $int . " de " . $total_a_firmar . " Exitoso!!!");
                                                $this->logMessage(MemcacheHandler::getInstance()->get($progress_key) . " - Procesado $int de $total_a_firmar resolucion: " . $id_resol_comis . "\n");
                                                $texto_firmados = $texto_firmados . $resolucion . ",";
                                            } else {
                                                $sql = <<<EOD
update COM_PLAN_RESOL_COMIS 
set firmado_digital = 0, 
    id_usuario_firmado_dig= null,
    fecha_firmado_digital=null,
    adjunto_firmado_digital = null
where id_plan_comisiones = $id and id_resol_comis = $id_resol_comis and vigencia = $vigencia
EOD;
                                                $this->conn->execute($sql);

                                                $sql = <<<EOD
update PR_RESOL_COMIS 
set resolucion = null,
firma = null 
where id = $id_resol_comis
EOD;
                                                //Ejecutar SQL
                                                //20190218 comentado codigo que genera numero de rsolucion
                                                $this->conn->execute($sql);
                                                //Si $respuesta no es success, se presentaron problemas en la elaboración de la firma del documento pdf y los errores o excepciones estarán contenidos en $resultado acciones
                                                $mensaje .= "Error al elaborar la firma del documento:" . $nombreArchivo . '.' . $texto_firmados;
                                                //$this->totalRows = 0;
                                                //$this->startRow = 0;
                                                //$this->endRow = 0;
                                                $api_errors = $returns;
                                                //$this->errors = 
                                                $status = 1;
                                                //$this->mensajeError = $mensaje;
                                                $this->logMessage($mensaje);

                                                break;
                                            }
                                        } else {
                                            //METODO FIRMADO OTRO PROVEEDOR NO CERTICAMARA POST DOCUMENT BASE 64
                                            $this->logMessage("Firmado por OTRO PROVEEDOR");
                                            $url = "https://6sc725ppfi.execute-api.us-east-1.amazonaws.com/Stage/SignPDF";
                                            //Abrimos el archivo a Firmar
                                            //$handle = fopen($fileToSignPath, 'r');
                                            //Convertimos el contenido del archivo a firmar en Base664 Enode
                                            $file = file_get_contents($fileToSignPath);
                                            if ($file === false) {
                                                $sql = <<<EOD
update COM_PLAN_RESOL_COMIS 
set firmado_digital = 0, 
    id_usuario_firmado_dig= null,
    fecha_firmado_digital=null,
    adjunto_firmado_digital = null
where id_plan_comisiones = $id and id_resol_comis = $id_resol_comis and vigencia = $vigencia
EOD;
                                                $this->conn->execute($sql);

                                                $sql = <<<EOD
update PR_RESOL_COMIS 
set resolucion = null,
firma = null 
where id = $id_resol_comis
EOD;
                                                //Ejecutar SQL
                                                //20190218 comentado codigo que genera numero de rsolucion
                                                $this->conn->execute($sql);
                                                //Si $respuesta no es success, se presentaron problemas en la elaboración de la firma del documento pdf y los errores o excepciones estarán contenidos en $resultado acciones
                                                $mensaje .= "Error al abrir el documento a firmar:" . $nombreArchivo . '.' . $texto_firmados;
                                                //$this->totalRows = 0;
                                                //$this->startRow = 0;
                                                //$this->endRow = 0;
                                                $api_errors = $returns;
                                                //$this->errors = 
                                                $status = 1;
                                                //$this->mensajeError = $mensaje;
                                                $this->logMessage($mensaje);

                                                break;
                                            } else {
                                                $base64file = base64_encode($file);
                                                $ch = curl_init($url);
                                                $data = array(
                                                    'uuid' => $serial,
                                                    'password' => $cert_password,
                                                    'file' => $base64file
                                                );
                                                $this->logMessage("***********Datos enviado al servicio***********");
                                                $this->logMessage("uuid:" . $serial);
                                                $this->logMessage("password:" . $cert_password);
                                                //$this->logMessage("file Base64:".$base64file );
                                                //$this->logMessage("file:".file_get_contents($fileToSignPath) );
                                                $payload = json_encode($data);
                                                curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
                                                curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
                                                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

                                                $result = curl_exec($ch);
                                                curl_close($ch);

                                                $result = json_decode($result, true);

                                                $this->logMessage("**********Datos recibidos del servicio************");
                                                //$this->logMessage("JSON RESPONSE:".json_decode($result));
                                                //$this->logMessage("fileSigned Base64:".$result[0]['fileSigned']);
                                                $this->logMessage("Message:" . $result['message']);
                                                //$this->logMessage("fileSigned:".base64_decode($result[0]['fileSigned']));

                                                if (!array_key_exists('message', $result)) {
                                                    // Guardamos el Archivo en la carpeta existente
                                                    // decode base64
                                                    $pdf_b64 = base64_decode($result['fileSigned']);
                                                    if (file_put_contents($fileSignedPath, $pdf_b64)) {
                                                        $sql = <<<EOD
update COM_PLAN_RESOL_COMIS 
set adjunto_firmado_digital = '$nombreArchivosigned'
where id_plan_comisiones = $id and id_resol_comis = $id_resol_comis and vigencia = $vigencia
EOD;
                                                        $this->conn->execute($sql);
                                                        // en caso de ser satisfactoria la firma de documento acciones
                                                        // Aqui en esta parte va la visualización del nuevo PDF
                                                        //header('Content-type: application/pdf'); 
                                                        //header('Content-Disposition: attachment; filename="'.$nombreArchivo.'Signed.pdf"'); 
                                                        //readfile("CertificadosPDF/".$nombreArchivo."Signed.pdf"); 
                                                        //returnamos Success
                                                        //$this->list_data = array();
                                                        //Actualiza consecutivo de comis resol
                                                        $sql = <<<EOD
update pr_consecutivo_comis 
set consecutivo_resol = $consecutivo_resol 
where id_consecutivo_comis = 1
EOD;
                                                        $this->conn->execute($sql);
                                                        $status = 0;

                                                        //Enviamos correo notificando
                                                        $this->notificar_firmado_digital($id, $vigencia, $id_resol_comis, $request);
                                                        $this->logMessage("Fin proceso firma: " . $int . " de " . $total_a_firmar . " Exitoso!!!");
                                                        $this->logMessage(MemcacheHandler::getInstance()->get($progress_key) . " - Procesado $int de $total_a_firmar resolucion: " . $id_resol_comis . "\n");
                                                        $texto_firmados = $texto_firmados . $resolucion . ",";
                                                    } else {
                                                        $sql = <<<EOD
update COM_PLAN_RESOL_COMIS 
set firmado_digital = 0, 
    id_usuario_firmado_dig= null,
    fecha_firmado_digital=null,
    adjunto_firmado_digital = null
where id_plan_comisiones = $id and id_resol_comis = $id_resol_comis and vigencia = $vigencia
EOD;
                                                        $this->conn->execute($sql);

                                                        $sql = <<<EOD
update PR_RESOL_COMIS 
set resolucion = null,
firma = null 
where id = $id_resol_comis
EOD;
                                                        //Ejecutar SQL
                                                        //20190218 comentado codigo que genera numero de rsolucion
                                                        $this->conn->execute($sql);
                                                        //Si $respuesta no es success, se presentaron problemas en la elaboración de la firma del documento pdf y los errores o excepciones estarán contenidos en $resultado acciones
                                                        $mensaje .= "Error al Guardar el documento firmado:" . $nombreArchivo . '.' . $texto_firmados;
                                                        //$this->totalRows = 0;
                                                        //$this->startRow = 0;
                                                        //$this->endRow = 0;
                                                        $api_errors = $returns;
                                                        //$this->errors = 
                                                        $status = 1;
                                                        //$this->mensajeError = $mensaje;
                                                        $this->logMessage($mensaje);

                                                        break;
                                                    }
                                                } else {
                                                    $sql = <<<EOD
update COM_PLAN_RESOL_COMIS 
set firmado_digital = 0, 
    id_usuario_firmado_dig= null,
    fecha_firmado_digital=null,
    adjunto_firmado_digital = null
where id_plan_comisiones = $id and id_resol_comis = $id_resol_comis and vigencia = $vigencia
EOD;
                                                    $this->conn->execute($sql);

                                                    $sql = <<<EOD
update PR_RESOL_COMIS 
set resolucion = null,
firma = null 
where id = $id_resol_comis
EOD;
                                                    //Ejecutar SQL
                                                    //20190218 comentado codigo que genera numero de rsolucion
                                                    $this->conn->execute($sql);
                                                    //Si $respuesta no es success, se presentaron problemas en la elaboración de la firma del documento pdf y los errores o excepciones estarán contenidos en $resultado acciones
                                                    $mensaje .= $result['message'];
                                                    //$this->totalRows = 0;
                                                    //$this->startRow = 0;
                                                    //$this->endRow = 0;
                                                    $api_errors = $returns;
                                                    //$this->errors = 
                                                    $status = 1;
                                                    //$this->mensajeError = $mensaje;
                                                    $this->logMessage($mensaje);

                                                    break;
                                                }
                                            }
                                        }
                                    }
                                    MemcacheHandler::getInstance()->set($progress_key, 100);
                                    //Actualiza consecutivo de comis resol
                                    //20190524 Comentado ya que se actualizara constantemente el consecutivo vor cada resolucion firmada
                                    /*   $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); */
                                } catch (Exception $exc) {
                                    //$this->conn->rollback();
                                    MemcacheHandler::getInstance()->set($progress_key, 100);
                                    $this->status = 1;
                                    $this->totalRows = 0;
                                    $this->startRow = 0;
                                    $this->endRow = 0;
                                    $this->list_data = array();
                                    $this->logMessage("ERROR!!!");
                                    $this->logMessage($exc->getMessage());
                                    $this->logMessage("Error!!! proceso en firma: " . $int . " de " . $total_a_firmar . " Fallo!!!");
                                    $this->logMessage($texto_firmados);
                                    //echo $exc->getTraceAsString();
                                }
                            } else {
                                $mensaje .= "Error no se encontraron resoluciones para firmar.";
                                $status = 1;
                                $this->logMessage($mensaje);
                                $api_errors = array();
                            }
                        } else {
                            $mensaje .= "Solo es posible firmar hasta diez(10) resoluciones a la vez.";
                            $status = 1;
                            $this->logMessage($mensaje);
                            $api_errors = array();
                        }
                    } else {
                        $mensaje .= "Error parametros incompletos.";
                        $status = 1;
                        $this->logMessage($mensaje);
                        $api_errors = array();
                    }
                    break;
                case 1://RESOLUCIONES DE MODIFICACION ANULACION
                    $this->logMessage("Ingreso a CASE 1:" . $id_resoluciones);
                    if ($id_resoluciones != '') {
                        $sql = <<<EOD
Select * from PR_RESOLUCIONES_V where id_resoluciones in ($id_resoluciones) and firmado_digital = 0
EOD;
                        $records = CN_TABLE::executeSQL($sql);

                        $this->logMessage("Resoluciones a firmar.:" . count($records));

                        /*
                         * (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++;
                        }

                        if (count($records) > 0) {
                            try {
                                foreach ($records as $rec) {
                                    //=========================================================
                                    $id_resol_comis = $id = $rec['id_resoluciones'];
                                    $id_tipo_resol = $rec['id_tipo_resol'];
                                    $resolucion = $rec['resolucion'];
                                    $nombreArchivo = "RCMA_" . $resolucion . "_" . $rec['vigencia'];
                                    $nombre_reporte = $nombreArchivo . ".pdf";
                                    $this->logMessage("Archivo a firmar :" . $nombreArchivo);
                                    $reporte = "";
                                    if ($id_tipo_resol == 1) {
                                        $this->logMessage("Resolucion Modificacion");
                                        $reporte = "resolucion_modif_comis_2020";
                                    } else {
                                        $this->logMessage("Resolucion Anulacion");
                                        $reporte = "resol_anul_comis_2020";
                                    }
                                    $sql = <<<EOD
update PR_RESOLUCIONES 
set firmado_digital = 1, 
    firma = $firma_rp,
    id_usuario_firmado_dig= $id_usuario_estado,
    fecha_firmado_digital='$fecha_estado'
where id_resoluciones = $id 
EOD;
                                    $this->conn->execute($sql);
                                    //Generamos PDF JASPER
                                    $url = $url_jasper;
                                    $url = $url . $reporte;
                                    $url = $url . '&format=PDF&PARAM_id_mod=24&PARAM_username=websafi&PARAM_nitocc=800189921&PARAM_id_username=946';
                                    //$url = $url . '&PARAM_id_plan_comisiones=' . $id;
                                    //$url = $url . '&PARAM_no_resolucion=' . $resolucion;
                                    $url = $url . '&PARAM_id_resolucion=' . $id;
                                    //$url = $url . '&PARAM_vigencia=' . $vigencia;
                                    $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 - 20200407::LAVILA
                                    //Ejecuta la petición
                                    $rta = curl_exec($ch);
                                    //Se cierra la conexión
                                    curl_close($ch);
                                    //establecemos los parametros de archivo a firmar y archivo firmado
                                    //$fileToSignPath = getcwd() . "/../../presupuesto/web/uploads/resoluciones/".$nombreArchivo.".pdf";
                                    $fileToSignPath = "uploads/resolucion/" . $nombreArchivo . ".pdf";
                                    //ruta para guardar el archivo firmado
                                    $fileSignedPath = "uploads/resolucionsignedPDF/" . $nombreArchivo . "Signed.pdf";
                                    $nombreArchivosigned = $nombreArchivo . "Signed.pdf";
                                    if ($firma_prov == "1") {
                                        //establecemos el comando a ejecutar por cada archivo
                                        $comand = "java -jar "
                                                . "\"$apiPath\" "
                                                . "\"$signType\" "
                                                . "\"$xmlConfigPath\" "
                                                . "\"$fileToSignPath\" "
                                                . "\"$fileSignedPath\" "
                                                . "\"$signP12Path\" "
                                                . "\"$signP12Password\" "
                                                . "\"$stamp\" "
                                                . "\"$stampP12Path\" "
                                                . "\"$stampP12Password\" "
                                                . "\"$signReason\" "
                                                . "\"$signLocation\" "
                                                . "\"$signImageAttrs\" "
                                                . "\"$ltv\" "
                                                . "\"$policyXmlEpes\" "
                                                . "\"$stampType\" "
                                                . "\"$isCertiToken\" "
                                                . "\"$serialCert\" "
                                                . "\"$issuerCert\" "
                                                . "\"$pdfSignTypeConstants\"";
                                        /**
                                         * Realiza la firma PDF y establece la configuracion del grafo a incluir
                                         *
                                         * @param args
                                         *          1. Tipo de firma (PADES, CADES).
                                         *          2. Ruta del XML de configuracion con los siguientes datos:
                                         *             a. properties.general.CRL_PATH.
                                         *             b. properties.general.VERIFY_TYPE.
                                         *             c. properties.general.KEYSTORE_PATH.
                                         *             d. properties.general.TSA_CERTIFICATE.
                                         *             e. properties.general.TSA_CERTIFICATE_PASSWORD.
                                         *             f. properties.general.TSA_POLICY.
                                         *             g. properties.general.ACRO6LAYER.
                                         *          3. Ruta del archivo a firmar.
                                         *          4. Ruta del archivo firmado.
                                         *          5. Ruta del certificado de firma.
                                         *          6. Clave del certificado de firma.
                                         *          7. Estampa (bandera).
                                         *          8. Ruta del certificado de estampa.
                                         *          9. Clave del certificado de estampa.
                                         *          10. Si es XML se envia el ID de la etiqueta a firmar
                                         *              Si es PDF se envoa la Razon de la firma.
                                         *          11. Localicacion de la firma.
                                         *          12. Atributos del grafo
                                         *              en caso de ser (null, false, 0) no sera visible.
                                         * @throws Exception
                                         */
                                        $respuesta = exec($comand . " 2>&1", $returns);

                                        //Si $respuesta es success el pdf se firmo exitosamente.         
                                        if ($respuesta == "success") {
                                            $sql = <<<EOD
update PR_RESOLUCIONES 
set firmado_digital = 1, 
    id_usuario_firmado_dig= $id_usuario_estado,
    fecha_firmado_digital='$fecha_estado',
    adjunto_firmado_digital = '$nombreArchivosigned'
where id_resoluciones = $id 
EOD;
                                            $this->conn->execute($sql);
                                            $status = 0;
                                            $this->notificar_firmado_digital_MA($id, $request);
                                        } else {
                                            //Retrocedemos los cambios realizados
                                            $sql = <<<EOD
update PR_RESOLUCIONES 
set firmado_digital = 0, 
    id_usuario_firmado_dig= null,
    fecha_firmado_digital=null,
    adjunto_firmado_digital = null
where id_resoluciones = $id 
EOD;
                                            $this->conn->execute($sql);
                                            //Si $respuesta no es success, se presentaron problemas en la elaboración de la firma del documento pdf y los errores o excepciones estarán contenidos en $resultado acciones
                                            $mensaje .= "Error al elaborar la firma del documento:" . $nombreArchivo . '.';
                                            //$this->totalRows = 0;
                                            //$this->startRow = 0;
                                            //$this->endRow = 0;
                                            $api_errors = $returns;
                                            //$this->errors = 
                                            $status = 1;
                                            //$this->mensajeError = $mensaje;
                                            $this->logMessage($mensaje);
                                            break;
                                        }
                                    } else {
                                        //METODO FIRMADO OTRO PROVEEDOR NO CERTICAMARA POST DOCUMENT BASE 64
                                        $this->logMessage("Firmado por OTRO PROVEEDOR");
                                        $url = "https://6sc725ppfi.execute-api.us-east-1.amazonaws.com/Stage/SignPDF";
                                        //Abrimos el archivo a Firmar
                                        //$handle = fopen($fileToSignPath, 'r');
                                        //Convertimos el contenido del archivo a firmar en Base664 Enode
                                        $file = file_get_contents($fileToSignPath);
                                        if ($file === false) {
                                            //Retrocedemos los cambios realizados
                                            $sql = <<<EOD
update PR_RESOLUCIONES 
set firmado_digital = 0, 
    id_usuario_firmado_dig= null,
    fecha_firmado_digital=null,
    adjunto_firmado_digital = null
where id_resoluciones = $id 
EOD;
                                            $this->conn->execute($sql);
                                            //Si $respuesta no es success, se presentaron problemas en la elaboración de la firma del documento pdf y los errores o excepciones estarán contenidos en $resultado acciones
                                            $mensaje .= "Error al elaborar la firma del documento:" . $nombreArchivo . '.';
                                            //$this->totalRows = 0;
                                            //$this->startRow = 0;
                                            //$this->endRow = 0;
                                            $api_errors = $returns;
                                            //$this->errors = 
                                            $status = 1;
                                            //$this->mensajeError = $mensaje;
                                            $this->logMessage($mensaje);
                                            break;
                                        } else {
                                            $base64file = base64_encode($file);
                                            $ch = curl_init($url);
                                            $data = array(
                                                'uuid' => $serial,
                                                'password' => $cert_password,
                                                'file' => $base64file
                                            );
                                            $this->logMessage("***********Datos enviado al servicio***********");
                                            $this->logMessage("uuid:" . $serial);
                                            $this->logMessage("password:" . $cert_password);
                                            //$this->logMessage("file Base64:".$base64file );
                                            //$this->logMessage("file:".file_get_contents($fileToSignPath) );
                                            $payload = json_encode($data);
                                            curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
                                            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
                                            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

                                            $result = curl_exec($ch);
                                            curl_close($ch);

                                            $result = json_decode($result, true);

                                            $this->logMessage("**********Datos recibidos del servicio************");
                                            //$this->logMessage("JSON RESPONSE:".json_decode($result));
                                            //$this->logMessage("fileSigned Base64:".$result[0]['fileSigned']);
                                            $this->logMessage("Message:" . $result['message']);
                                            //$this->logMessage("fileSigned:".base64_decode($result[0]['fileSigned']));

                                            if (!array_key_exists('message', $result)) {
                                                // Guardamos el Archivo en la carpeta existente
                                                // decode base64
                                                $pdf_b64 = base64_decode($result['fileSigned']);
                                                if (file_put_contents($fileSignedPath, $pdf_b64)) {
                                                    $sql = <<<EOD
update PR_RESOLUCIONES 
set firmado_digital = 1, 
    id_usuario_firmado_dig= $id_usuario_estado,
    fecha_firmado_digital='$fecha_estado',
    adjunto_firmado_digital = '$nombreArchivosigned'
where id_resoluciones = $id 
EOD;
                                                    $this->conn->execute($sql);
                                                    $status = 0;

                                                    //Enviamos correo notificando
                                                    $this->notificar_firmado_digital_MA($id, $request);
                                                    $this->logMessage("Fin proceso firma: " . $int . " de " . $total_a_firmar . " Exitoso!!!");
                                                    $this->logMessage(MemcacheHandler::getInstance()->get($progress_key) . " - Procesado $int de $total_a_firmar resolucion: " . $id_resol_comis . "\n");
                                                    $texto_firmados = $texto_firmados . $resolucion . ",";
                                                } else {
                                                    //Retrocedemos los cambios realizados
                                                    $sql = <<<EOD
update PR_RESOLUCIONES 
set firmado_digital = 0, 
    id_usuario_firmado_dig= null,
    fecha_firmado_digital=null,
    adjunto_firmado_digital = null
where id_resoluciones = $id 
EOD;
                                                    $this->conn->execute($sql);
                                                    //Si $respuesta no es success, se presentaron problemas en la elaboración de la firma del documento pdf y los errores o excepciones estarán contenidos en $resultado acciones
                                                    $mensaje .= "Error al elaborar la firma del documento:" . $nombreArchivo . '.';
                                                    //$this->totalRows = 0;
                                                    //$this->startRow = 0;
                                                    //$this->endRow = 0;
                                                    $api_errors = $returns;
                                                    //$this->errors = 
                                                    $status = 1;
                                                    //$this->mensajeError = $mensaje;
                                                    $this->logMessage($mensaje);
                                                    break;
                                                }
                                            } else {
                                                //Retrocedemos los cambios realizados
                                                $sql = <<<EOD
update PR_RESOLUCIONES 
set firmado_digital = 0, 
    id_usuario_firmado_dig= null,
    fecha_firmado_digital=null,
    adjunto_firmado_digital = null
where id_resoluciones = $id 
EOD;
                                                $this->conn->execute($sql);
                                                //Ejecutar SQL
                                                //20190218 comentado codigo que genera numero de rsolucion
                                                $this->conn->execute($sql);
                                                //Si $respuesta no es success, se presentaron problemas en la elaboración de la firma del documento pdf y los errores o excepciones estarán contenidos en $resultado acciones
                                                $mensaje .= $result['message'];
                                                //$this->totalRows = 0;
                                                //$this->startRow = 0;
                                                //$this->endRow = 0;
                                                $api_errors = $returns;
                                                //$this->errors = 
                                                $status = 1;
                                                //$this->mensajeError = $mensaje;
                                                $this->logMessage($mensaje);

                                                break;
                                            }
                                        }
                                    }
                                }
                            } catch (Exception $exc) {
                                //$this->conn->rollback();
                                $this->status = 1;
                                $this->totalRows = 0;
                                $this->startRow = 0;
                                $this->endRow = 0;
                                $this->list_data = array();
                                $this->logMessage("ERROR!!!");
                                $this->logMessage($exc->getMessage());
                                //echo $exc->getTraceAsString();
                            }
                        } else {
                            $mensaje .= "Error no se encontraron resoluciones para firmar.";
                            $status = 1;
                            $this->logMessage($mensaje);
                            $api_errors = array();
                        }
                    } else {
                        $mensaje .= "Error parametros incompletos.";
                        $status = 1;
                        $this->logMessage($mensaje);
                        $api_errors = array();
                    }
                    break;
                default:
                    break;
            }
        }

        if ($status == 0) {
            //$this->conn->commit();
            $this->status = 0;
            $this->mensaje = $texto_firmados;
            $this->list_data = array();
            $this->logMessage("[Firmado Digital] Exitoso:" . $texto_firmados);
        } else {
            //$this->conn->rollback();
            $this->status = 1;
            $this->mensaje = $mensaje;
            $this->servicio = "FIRMADO DIGITAL RESOLUCION";
            $this->list_data = array();
            //$this->list_data = array($api_errors);
            $this->logMessage("[Firmado Digita] ERROR!");
            $this->logMessage($mensaje);
            $er = $api_errors;
            $error_array = "";
            foreach ($er as $m) {
                $error_array = $m;
                $this->logMessage($m);
            }
            $this->mensajeError = $mensaje . "</br></br>Error::" . $error_array;
        }
    }

    /**
     * 
     * @param type $id_plan_comisiones
     * @param type $id_vigencia
     * @param type $id_resol_comis
     * @param sfWebRequest $request
     */
    function notificar_firmado_digital($id_plan_comisiones, $id_vigencia, $id_resol_comis, sfWebRequest $request) {
        /**
         * Envio correo al responsable,supervisor$e
         */
        /*
         * (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/pr_resolucion_comis/";
            $int++;
        }
        $this->logMessage("Envio correo al responsable,supervisor.");
        //Consulta datos envio correo$e
        //Sql
        //OBTENEMOS LAS VARIABLES
        //FIN CAPTURA VARIABLES
        //NOTIFICAMOS AL COMISIONADO Y A LA PROGRAMADORA
        /**
         * después de haber sido firmada la resolución por el ordenador del gasto:
          El sistema deberá enviar un mensaje de alerta "SU COMISIÓN HA SIDO APROBADA", a los comisionados, informando el número de la resolución
         *  y adjuntando la misma.
          -    VALIDACIONES:
          -    El sistema debe generar la alerta de programación al comisionado únicamente cuando la resolución se firme digitalmente
          -    Agregar adjunto Resolución de comisión
          -    Realizar copia a la programadora.

          • Si la resolución de comisión aprobada incluye TIQUETES ÁEREOS o TRANSPORTE CONTRATOS ANM,
         * el sistema deberá enviar un mensaje de alerta "SOLICITUD DE TIQUETE O 
         * SOLICITUD DE TRANSPPORTE CONTRATOS ANM" al área administrativa para 
         * que inicien con la solicitud del tiquete con el formato de solicitud de tiquete de viáticos 
         * debidamente firmada. Los correos son
          Karen Lorena Rodriguez Lopez karen.rodriguez@anm.gov.co, para el transporte áereo
          Cristina Rueda Osorio cristina.rueda@anm.gov.co , para le transporte terrestre
          Y en todo momento el sistema deberá alertar a Hugo Prada Lozada hugo.prada@anm.gov.co y Jeyson Javier Moya Salamanca jeyson.moya@anm.gov.co
          -    VALIDACIONES:

          -    Esta alerta se debe generar únicamente cuando la resolución sea firmada digitalmente
          -    Se enviará la alerta de tiquetes para las comisiones que tengan tipo de Transporte AEREO, esta debe contener el formato de Tiquetes adjunto.
          -    Se enviará la alerta de transporte contratado cuando en la comisión diga TRANSPORTE CONTRATOS ANM, esta debe contener adjunto de Solicitud de transporte contratado
         */
        $sql = <<<EOD
SELECT
placom.id_plan_comisiones,
placom.vigencia,
placom.id_comisiones,
placom.vigencia_comisiones,
placom.id_resol_comis,
placom.tipo_comisionado,
--comis.descomi as prefijo,
comisionado.id_transporte,
trans.aplica_tiquete,
comisionado.email as email_envio,
--'Observacion: '||placom.observacion_aut as mensaje_extra,
'' as mensaje_firma,
'Su comisión ha sido aprobada 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,
placom.ADJUNTO_FIRMADO_DIGITAL as adjunto,
placom.RESOLUCION,
comis.proyecto,

--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 

left join(select id_comision,vigencia,nitocc,razsoc,email,id_transporte,transporte,dias,codreg,ciuced,fecha_salida,sum(tarifa) as tarifa,sum(suma_viaticos) as suma_viaticos,sum(SUMA_OTROS) as SUMA_OTROS,tipo,codpro
from (
select * from 
(select id_comision,
vigencia,
  NITOCC,
  razsoc,
  email,
  id_transporte,
  transporte,
  dias,
  codreg,
  CIUCED,
  to_char(fecha_salida, 'dd/mm/yyyy') as fecha_salida,
  TARIFA,
  sum(case when CODobj = '06' then valor else 0 end) as SUMA_VIATICOS,
  sum(case when CODobj != '06' then valor else 0 end) as SUMA_OTROS,
  tipo,
  codpro
  from
(select
  d.id_comision,
  d.vigencia,
  d.NITOCC,
  ter.razsoc,
  ter.email,
  d.id_transporte,
  case when id_transporte=1 then 'T' else 'A' end as transporte,
  d.dias,
  d.codreg,
  reg.CIUCED,
  d.fecha_salida,
  f.TARIFA,
  f.CODOBJ,
  f.VALOR,
  f.VIATICOS,
  1 as tipo,
  comis.codpro
from COMISIONADOS_PLANTA d
left join COMISIONADOS_OBJS f on f.id_comision=d.id_comision and f.vigencia=d.vigencia and f.nitocc=d.nitocc
left join regionales reg on reg.CODREG=d.CODREG
left join TERCEROS ter on ter.nitocc=d.nitocc
left join comisiones comis on comis.id=d.id_comision and comis.vigencia=d.vigencia
where --d.id_comision=928 and d.vigencia=2019 and 
f.valor!=0)tab0
group by id_comision,
  vigencia,
  NITOCC,razsoc,
  email,
  id_transporte,
  transporte,
  dias,
  codreg,
  CIUCED,
  fecha_salida,
  TARIFA,tipo,
  codpro
  UNION
  select id_comision,
  vigencia,
  NITOCC,
  razsoc,
  email,
  id_transporte,
  transporte,
  dias,
  codreg,
  CIUCED,
  to_char(fecha_salida, 'dd/mm/yyyy') as fecha_salida,
  TARIFA,
  sum(case when CODobj = '06' then valor else 0 end) as SUMA_VIATICOS,
  sum(case when CODobj != '06' then valor else 0 end) as SUMA_OTROS,
  tipo,
  codpro
  from
(select
  d.id_comision,
  d.vigencia,
  d.NITOCC,
  ter.razsoc,
  ter.email,
  d.id_transporte,
  case when id_transporte=1 then 'T' else 'A' end as transporte,
  d.dias,
  d.codreg,
  reg.CIUCED,
  d.fecha_salida,
  f.TARIFA,
  f.CODOBJ,
  f.VALOR,
  f.VIATICOS,
  2 as tipo,
  comis.codpro
from COMISIONADOS_CONTRATO d
left join COMISIONADOS_OBJS f on f.id_comision=d.id_comision and f.vigencia=d.vigencia and f.nitocc=d.nitocc
left join regionales reg on reg.CODREG=d.CODREG
left join TERCEROS ter on ter.nitocc=d.nitocc
left join comisiones comis on comis.id=d.id_comision and comis.vigencia=d.vigencia
where --d.id_comision=928 and d.vigencia=2019 and 
f.valor!=0)tab0
group by id_comision,
  vigencia,
  NITOCC,razsoc,
  email,
  id_transporte,
  transporte,
  dias,
  codreg,
  CIUCED,
  fecha_salida,
  TARIFA,tipo,
  codpro)tab0
)tab0
group by id_comision,vigencia,nitocc,razsoc,email,id_transporte,transporte,dias,codreg,ciuced,fecha_salida,tipo,codpro)comisionado 
on comisionado.tipo= placom.tipo_comisionado and comisionado.id_comision = placom.id_comisiones and comisionado.vigencia=placom.vigencia_comisiones 
left join transportes trans on trans.id=comisionado.id_transporte
where
placom.id_plan_comisiones = $id_plan_comisiones
and placom.vigencia = $id_vigencia  
and id_resol_comis= $id_resol_comis
EOD;
        //Ejecutar SQL
        $records = CN_TABLE::executeSQL($sql);

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


        $cadena_presupuestal = 0;
        if (count($records) > 0) {
            foreach ($records as $record) {
                try {
                    $report_params = $record;
                    $id_resol_comis = $record['id_resol_comis'];
                    $adjunto_resolucion = $record['adjunto'];

                    //Ejemplo de la persona que se envia el correo: 
                    //123;1;pepito perez;correo@gmal.com
                    //DATOS GENERALES 
                    $tipo_transporte = $record['id_transporte'];
                    $aplica_tiquete = $record['aplica_tiquete'];
                    $id_comisiones = $record['id_comisiones'];
                    $vigencia_comisiones = $record['vigencia_comisiones'];
                    $no_resolucion = $record['resolucion'];
                    $proyecto = $record['proyecto'];
                    //DATOS RESPONSABLE
                    $num_doc = $record['num_doc'];
                    $id_tipo_doc = 1;
                    $razon_soc = $record['razon_soc'];
                    $correo = $record['correo'];
                    $datos_usuario = array(
                        '0' => $num_doc . ';' . $id_tipo_doc . ';' . $razon_soc . ';' . $correo,
                        '1' => '0;1;nestor.sanjuan;nestor.sanjuan@anm.gov.co',
                        '2' => '0;1;carmen.mora;carmen.mora@anm.gov.co',
                        '3' => '0;1;control.comisiones;control.comisiones@anm.gov.co',
                    );
                    //DATOS SUPERVISOR 
                    $num_doc_tersup = $record['num_doc_tersup'];
                    $id_tipo_doc_tersup = 1;
                    $razon_soc_tersup = $record['razon_soc_tersup'];
                    $correo_tersup = $record['correo_tersup'];
                    //DATOS PROGRAMADOR
                    $num_doc_terlog = $record['num_doc_terlog'];
                    $id_tipo_doc_terlog = 1;
                    $razon_soc_terlog = $record['razon_soc_terlog'];
                    $correo_terlog = $record['correo_terlog'];
                    $datos_usuario_tersup = array(
                        '0' => $num_doc_tersup . ';' . $id_tipo_doc_tersup . ';' . $razon_soc_tersup . ';' . $correo_tersup,
                        '1' => $num_doc_terlog . ';' . $id_tipo_doc_terlog . ';' . $razon_soc_terlog . ';' . $correo_terlog
                    );
                    //PARAMETROS STANDART                 
                    $subject = "SU COMISIÓN HA SIDO APROBADA - Resolucion por Supervisor: " . $num_doc_tersup . " No." . $no_resolucion . " - " . $vigencia_comisiones . "; ";

                    $currentUri = '';
                    $progress_key = $request['comando'] . $request['username'];

                    $adjunto = true;
                    //$ruta = $_SERVER['DOCUMENT_ROOT'] . "/controlcomisiones/web/uploads/";
                    $ruta = getcwd() . "/uploads/";
                    $array_adjuntos = array($adjunto_resolucion => "resolucionsignedPDF/" . $adjunto_resolucion);

                    $entidad_cliente = $entidadCliente;
                    $entidad_nombre = $entidadNombre;
                    $addAddress = false;

                    $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);
                    //Si la resolución de comisión aprobada incluye TIQUETES ÁEREOS o TRANSPORTE CONTRATOS ANM, 
                    //el sistema deberá enviar un mensaje de alerta "SOLICITUD DE TIQUETE O 
                    //SOLICITUD DE TRANSPPORTE CONTRATOS ANM"
                    //Si tipo de transporte es aereo (2,3) se notifica al area administrativa 
                    //Karen Lorena Rodriguez Lopez karen.rodriguez@anm.gov.co, para el transporte áereo
                    //Y en todo momento el sistema deberá alertar a Hugo Prada Lozada hugo.prada@anm.gov.co 
                    //y Jeyson Javier Moya Salamanca jeyson.moya@anm.gov.co
                    if ($aplica_tiquete == "1") {
                        //generamos documento de solicitud de tiquetes
                        $nombreArchivo = "solic_tiq_" . $no_resolucion . "_" . $num_doc;
                        $nombre_reporte = $nombreArchivo . ".pdf";
                        $this->logMessage("solicitud_tiquetes :" . $nombreArchivo);
                        //Generamos PDF JASPER
                        $url = $url_jasper;
                        $url = $url . 'formato_solicitud_tiq&format=PDF&PARAM_id_mod=24&PARAM_username=websafi&PARAM_nitocc=800189921&PARAM_id_username=946';
                        $url = $url . '&PARAM_id_plan_comisiones=' . $id_plan_comisiones;
                        $url = $url . '&PARAM_id_resolucion=' . $id_resol_comis;
                        $url = $url . '&PARAM_num_doc=' . $num_doc;
                        $url = $url . '&PARAM_vigencia=' . $vigencia;
                        $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);

                        //cargamos datos para le envio de correo
                        $datos_usuario = array(
                            '0' => '0;1;Karen Lorena Rodriguez Lopez;karen.rodriguez@anm.gov.co',
                            '1' => '0;1;Jeyson Javier Moya Salamanca;jeyson.moya@anm.gov.co',
                            //'2' => '0;1;nestor.sanjuan;nestor.sanjuan@anm.gov.co',
                            //'3' => '0;1;carmen.mora;carmen.mora@anm.gov.co',
                            '2' => '0;1;control.comisiones;control.comisiones@anm.gov.co',
                        );
                        $subject = "SOLICITUD DE TIQUETE - RESOLUCION No." . $no_resolucion . " - " . $vigencia_comisiones . "; ";
                        $report_params["mensaje"] = "Se permite informar que ha sido aprobada y firmada la resolución " . $no_resolucion . " - " . $vigencia_comisiones . " para que sirva emitir la solicitud de tiquete aereo.";
                        $currentUri = '';
                        $progress_key = $request['comando'] . $request['username'];

                        $adjunto = true;
                        //$ruta = $_SERVER['DOCUMENT_ROOT'] . "/controlcomisiones/web/uploads/";
                        $ruta = getcwd() . "/uploads/";
                        $array_adjuntos = array($nombreArchivo => "solicitud_tiquetes/" . $nombreArchivo);
                        $entidad_cliente = $entidadCliente;
                        $entidad_nombre = $entidadNombre;
                        $addAddress = false;
                        $useCc = true;

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

                    //Si tipo de transporte es CONTRATO ANM (5) se notifica al area administrativa 
                    //Cristina Rueda Osorio cristinaia.rueda@anm.gov.co , para le transporte terrestre

                    /* if($tipo_transporte == "5"){
                      $datos_usuario = array(
                      '0' => '0;1;Cristina Rueda Osorio;cristina.rueda@anm.gov.co',
                      '1' => '0;1;Hugo Prada Lozada;hugo.prada@anm.gov.co',
                      '2' => '0;1;Jeyson Javier Moya Salamanca;jeyson.moya@anm.gov.co'
                      );
                      $subject = "SOLICITUD DE TIQUETE - Resolucion No." . $no_resolucion . " - " . $vigencia_comisiones."; ";
                      $currentUri = '';
                      $progress_key ='';

                      $adjunto = false;
                      $ruta = '';
                      $array_adjuntos = array();
                      $entidad_cliente = $entidadCliente;
                      $entidad_nombre = $entidadNombre;
                      $addAddress = true;

                      CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
                      } */
                } catch (Exception $e) {
                    //creamos excepcion y continuamos con el siguiente en el ciclo
                    $this->logMessage("Error en el envio de correo: " . $e);
                }
            }
            /**
             *  Si la resolución de comisión es por cadena presupuestal, el sistema deberá enviar el mensaje 
             * de alerta "SOLICITUD DE REGISTRO PRESUPUESTAL", y debe adjuntar la resolución de comisión firmada, 
             * el cuerpo de la alerta debe decir “Se permite informar que ha sido aprobada y 
             * firmada la resolución XXXX XXXXX para que sirva emitir el Registro Presupuestal y se continúe 
             * con el tramite de pago”.
              Las personas son:
              Luz Elena Zapata Zuluaga luz.zapata@anm.gov.co
              Yenny Saavedra Posada yenny.saavedra@anm.gov.co
              Maria Isabel Peralta Ramirez maria.peralta@anm.gov.co
              Lady Geraldin Vargas Contreras lady.vargas@anm.gov.co

              VALIDACIONES:

              -    El sistema identificara para esta alerta las comisiones por cadena según el proyecto que NO tenga las palabras CAJA MENOR
             */
            $sql = <<<EOD
SELECT
placom.id_plan_comisiones,
placom.vigencia,
placom.id_comisiones,
placom.vigencia_comisiones,
placom.id_resol_comis,
placom.tipo_comisionado,
'' as mensaje_firma,
'Se permite informar que ha sido aprobada y firmada la resolución Nº '|| placom.RESOLUCION || ' - ' || placom.vigencia || ' para que sirva emitir el Registro Presupuestal y se continue con el tramite de pago.' as mensaje,
placom.ADJUNTO_FIRMADO_DIGITAL as adjunto,
placom.RESOLUCION,
comis.proyecto

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 id_resol_comis= $id_resol_comis
EOD;

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

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

            if (count($records) > 0) {
                $this->logMessage("Proyect:" . $proyecto);
                if (strpos($proyecto, "CAJA MENOR") === false) {
                    $this->logMessage("--- No tiene la palabra caja menor");
                    $cadena_presupuestal = 1;
                } else {
                    $this->logMessage("--- tiene la palabra caja menor");
                    $cadena_presupuestal = 0;
                }
                if ($cadena_presupuestal == 1) {
                    $report_params = $records[0];
                    $id_resol_comis = $records[0]['id_resol_comis'];
                    $adjunto_resolucion = $records[0]['adjunto'];
                    $subject = "SOLICITUD DE REGISTRO PRESUPUESTAL RESOLUCION No." . $no_resolucion . " - " . $vigencia_comisiones . ";";
                    $datos_usuario = array(
                        '0' => '0;1;Luz Elena Zapata Zuluaga;luz.zapata@anm.gov.co',
                        '1' => '0;1;Yenny Saavedra Posada;yenny.saavedra@anm.gov.co',
                        '2' => '0;1;Maria Isabel Peralta Ramirez;maria.peralta@anm.gov.co',
                        '3' => '0;1;Lady Geraldin Vargas Contreras;lady.vargas@anm.gov.co',
                        //'4' => '0;1;nestor.sanjuan;nestor.sanjuan@anm.gov.co',
                        //'5' => '0;1;carmen.mora;carmen.mora@anm.gov.co',
                        '4' => '0;1;control.comisiones;control.comisiones@anm.gov.co',
                    );

                    $currentUri = '';
                    $progress_key = $request['comando'] . $request['username'];

                    $adjunto = true;
                    //$ruta = $_SERVER['DOCUMENT_ROOT'] . "/controlcomisiones/web/uploads/";
                    $ruta = getcwd() . "/uploads/";
                    $array_adjuntos = array($adjunto_resolucion => "resolucionsignedPDF/" . $adjunto_resolucion);

                    $entidad_cliente = $entidadCliente;
                    $entidad_nombre = $entidadNombre;
                    $addAddress = false;
                    $useCc = true;
                    CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress, $useCc);
                }
            }
        }
    }

    /**
     * METODO PARA GENERAR LAS NOTIFICACIONES PARA LAS RESOLUCIONES DE MODIFICAION
     * O PERDIDA EJECUTORIA(ANULACION)    
     * 
     * @param type $id_resoluciones
     * @param sfWebRequest $request
     */
    function notificar_firmado_digital_MA($id_resoluciones, sfWebRequest $request) {
        /**
         * Envio correo al responsable,supervisor$e
         */
        /*
         * (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/pr_resolucion_comis/";
            $int++;
        }
        //Obtenemos los datos de la Resolucion 
        $sql = <<<EOD
Select 
    tab0.* ,
    tab1.id_plan_comisiones,
    tab1.vigencia as vigencia_plan,
    tab2.resolucion as resolucion_orig,
    tab2.vigencia as vigencia_orig
from PR_RESOLUCIONES_V tab0
left join com_plan_resol_comis tab1 on tab1.id_resol_comis = tab0.ID_RESOL_ORIG
left join PR_RESOL_COMIS tab2 on tab2.ID=tab0.ID_RESOL_ORIG
where id_resoluciones = $id_resoluciones
EOD;
        $records = CN_TABLE::executeSQL($sql);
        if (count($records) > 0) {
            //Obtenemos el tipo de resolucion y el tipo de modificacion
            //$tipo_resol = "1 - Modificacion, 2-Anulacion, 3 -Desplazamiento
            $tipo_resol = $records[0]['ID_TIPO_RESOL'];
            //$tipo_comis = Indica el tipo de modificacion de la comision
            //Referencia a la tabla tipos_comision
            //03 Prorroga y adicion, 06 Adicion, 08 Informativa
            $tipo_comis = $records[0]['TIPCOMI'];
            $id_resol_comis = $records[0]['ID_RESOL_ORIG']; //id REsolucion de origen
            $no_resolucion = $records[0]['RESOLUCION_ORIG']; //NO REsolucion de origen
            $vigencia_comisiones = $records[0]['VIGENCIA_ORIG']; //Vigencia REsolucion de origen
            $no_resolucion_ma = $records[0]['RESOLUCION']; //No Resolucion MODIFICACION ANULACION
            $vigencia_resolucion_ma = $records[0]['VIGENCIA']; //VIGENCIA Resolucion MODIFICACION ANULACION

            $id_plan_comisiones = $records[0]['ID_PLAN_COMISIONES'];
            $id_vigencia = $records[0]['VIGENCIA_PLAN'];
            $adjunto_resolucion = $record['ADJUNTO_FIRMADO_DIGITAL'];

            //Realizamos operacion dependiendo el tipo de notificacion Modificacion o anulacion
            switch ($tipo_resol) {
                CASE 1://MODIFICACION
                    switch ($tipo_comis) {
                        CASE "08"://Tipo INformtiva Notificamos a tiquetes si aplica
                            //SI NO ES CAJA MENOR NOTIFICAR ANULACION A CADENA PRESUPUESTAL
                            $sql = <<<EOD
SELECT
placom.id_plan_comisiones,
placom.vigencia,
placom.id_comisiones,
placom.vigencia_comisiones,
placom.id_resol_comis,
placom.tipo_comisionado,
'' as mensaje_firma,
--'Se permite informar que ha sido aprobada y firmada la resolución Nº '|| placom.RESOLUCION || ' - ' || placom.vigencia || ' para que sirva emitir el Registro Presupuestal y se continue con el tramite de pago.' as mensaje,
placom.ADJUNTO_FIRMADO_DIGITAL as adjunto,
placom.RESOLUCION,
comis.proyecto

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 id_resol_comis= $id_resol_comis
EOD;
                            $records = CN_TABLE::executeSQL($sql);
                            $this->logMessage("Envio correo Modificacion a Cadena presupuestal");

                            if (count($records) > 0) {
                                $this->logMessage("Proyect:" . $proyecto);
                                if (strpos($proyecto, "CAJA MENOR") === false) {
                                    $this->logMessage("--- No tiene la palabra caja menor");
                                    $cadena_presupuestal = 1;
                                } else {
                                    $this->logMessage("--- tiene la palabra caja menor");
                                    $cadena_presupuestal = 0;
                                }
                                if ($cadena_presupuestal == 1) {
                                    $report_params = $records[0];
                                    //$id_resol_comis = $records[0]['id_resol_comis'];
                                    $adjunto_resolucion = $records[0]['adjunto'];
                                    $subject = "MODIFICACION DE REGISTRO PRESUPUESTAL RESOLUCION No." . $no_resolucion . " - " . $id_vigencia . " POR RESOLUCION " . $no_resolucion_ma . " - " . $vigencia_resolucion_ma . ";";
                                    $report_params["mensaje"] = "Se permite informar la modificacion de la resolución " . $no_resolucion . " - " . $vigencia_comisiones .
                                            " por medio de la resolución " . $no_resolucion_ma . " - " . $vigencia_resolucion_ma . ".";

                                    $datos_usuario = array(
                                        '0' => '0;1;Luz Elena Zapata Zuluaga;luz.zapata@anm.gov.co',
                                        '1' => '0;1;Yenny Saavedra Posada;yenny.saavedra@anm.gov.co',
                                        '2' => '0;1;Maria Isabel Peralta Ramirez;maria.peralta@anm.gov.co',
                                        '3' => '0;1;Lady Geraldin Vargas Contreras;lady.vargas@anm.gov.co',
                                        //'4' => '0;1;nestor.sanjuan;nestor.sanjuan@anm.gov.co',
                                        //'5' => '0;1;carmen.mora;carmen.mora@anm.gov.co',
                                        '4' => '0;1;control.comisiones;control.comisiones@anm.gov.co',
                                    );

                                    $currentUri = '';
                                    $progress_key = $request['comando'] . $request['username'];

                                    $adjunto = true;
                                    //$ruta = $_SERVER['DOCUMENT_ROOT'] . "/controlcomisiones/web/uploads/";
                                    $ruta = getcwd() . "/uploads/";
                                    $array_adjuntos = array($adjunto_resolucion => "resolucionsignedPDF/" . $adjunto_resolucion);

                                    $entidad_cliente = $entidadCliente;
                                    $entidad_nombre = $entidadNombre;
                                    $addAddress = false;
                                    $useCc = true;
                                    CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress, $useCc);
                                }
                            }
                            Break;
                        default://Notificamos a Presupuesto
                            //SI NO ES CAJA MENOR NOTIFICAR ANULACION A CADENA PRESUPUESTAL
                            $sql = <<<EOD
SELECT
placom.id_plan_comisiones,
placom.vigencia,
placom.id_comisiones,
placom.vigencia_comisiones,
placom.id_resol_comis,
placom.tipo_comisionado,
'' as mensaje_firma,
--'Se permite informar que ha sido aprobada y firmada la resolución Nº '|| placom.RESOLUCION || ' - ' || placom.vigencia || ' para que sirva emitir el Registro Presupuestal y se continue con el tramite de pago.' as mensaje,
placom.ADJUNTO_FIRMADO_DIGITAL as adjunto,
placom.RESOLUCION,
comis.proyecto

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 id_resol_comis= $id_resol_comis
EOD;
                            $records = CN_TABLE::executeSQL($sql);
                            $this->logMessage("Envio correo Modificacion a Cadena presupuestal");

                            if (count($records) > 0) {
                                $this->logMessage("Proyect:" . $proyecto);
                                if (strpos($proyecto, "CAJA MENOR") === false) {
                                    $this->logMessage("--- No tiene la palabra caja menor");
                                    $cadena_presupuestal = 1;
                                } else {
                                    $this->logMessage("--- tiene la palabra caja menor");
                                    $cadena_presupuestal = 0;
                                }
                                if ($cadena_presupuestal == 1) {
                                    $report_params = $records[0];
                                    //$id_resol_comis = $records[0]['id_resol_comis'];
                                    $adjunto_resolucion = $records[0]['adjunto'];
                                    $subject = "MODIFICACION DE REGISTRO PRESUPUESTAL RESOLUCION No." . $no_resolucion . " - " . $id_vigencia . " POR RESOLUCION " . $no_resolucion_ma . " - " . $vigencia_resolucion_ma . ";";
                                    $report_params["mensaje"] = "Se permite informar la modificacion de la resolución " . $no_resolucion . " - " . $vigencia_comisiones .
                                            " por medio de la resolución " . $no_resolucion_ma . " - " . $vigencia_resolucion_ma . ".";

                                    $datos_usuario = array(
                                        '0' => '0;1;Luz Elena Zapata Zuluaga;luz.zapata@anm.gov.co',
                                        '1' => '0;1;Yenny Saavedra Posada;yenny.saavedra@anm.gov.co',
                                        '2' => '0;1;Maria Isabel Peralta Ramirez;maria.peralta@anm.gov.co',
                                        '3' => '0;1;Lady Geraldin Vargas Contreras;lady.vargas@anm.gov.co',
                                        //'4' => '0;1;nestor.sanjuan;nestor.sanjuan@anm.gov.co',
                                        //'5' => '0;1;carmen.mora;carmen.mora@anm.gov.co',
                                        '4' => '0;1;control.comisiones;control.comisiones@anm.gov.co',
                                    );

                                    $currentUri = '';
                                    $progress_key = $request['comando'] . $request['username'];

                                    $adjunto = true;
                                    //$ruta = $_SERVER['DOCUMENT_ROOT'] . "/controlcomisiones/web/uploads/";
                                    $ruta = getcwd() . "/uploads/";
                                    $array_adjuntos = array($adjunto_resolucion => "resolucionsignedPDF/" . $adjunto_resolucion);

                                    $entidad_cliente = $entidadCliente;
                                    $entidad_nombre = $entidadNombre;
                                    $addAddress = false;
                                    $useCc = true;
                                    CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress, $useCc);
                                }
                            }
                            Break;
                    }
                    Break;
                CASE 2://ANULACION
                    $sql = <<<EOD
SELECT
placom.id_plan_comisiones,
placom.vigencia,
placom.id_comisiones,
placom.vigencia_comisiones,
placom.id_resol_comis,
placom.tipo_comisionado,
--comis.descomi as prefijo,
comisionado.id_transporte,
trans.aplica_tiquete,
comisionado.email as email_envio,
--'Observacion: '||placom.observacion_aut as mensaje_extra,
'' as mensaje_firma,
'Su comisión ha sido aprobada 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,
placom.ADJUNTO_FIRMADO_DIGITAL as adjunto,
placom.RESOLUCION,
comis.proyecto,

--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 

left join(select id_comision,vigencia,nitocc,razsoc,email,id_transporte,transporte,dias,codreg,ciuced,fecha_salida,sum(tarifa) as tarifa,sum(suma_viaticos) as suma_viaticos,sum(SUMA_OTROS) as SUMA_OTROS,tipo,codpro
from (
select * from 
(select id_comision,
vigencia,
  NITOCC,
  razsoc,
  email,
  id_transporte,
  transporte,
  dias,
  codreg,
  CIUCED,
  to_char(fecha_salida, 'dd/mm/yyyy') as fecha_salida,
  TARIFA,
  sum(case when CODobj = '06' then valor else 0 end) as SUMA_VIATICOS,
  sum(case when CODobj != '06' then valor else 0 end) as SUMA_OTROS,
  tipo,
  codpro
  from
(select
  d.id_comision,
  d.vigencia,
  d.NITOCC,
  ter.razsoc,
  ter.email,
  d.id_transporte,
  case when id_transporte=1 then 'T' else 'A' end as transporte,
  d.dias,
  d.codreg,
  reg.CIUCED,
  d.fecha_salida,
  f.TARIFA,
  f.CODOBJ,
  f.VALOR,
  f.VIATICOS,
  1 as tipo,
  comis.codpro
from COMISIONADOS_PLANTA d
left join COMISIONADOS_OBJS f on f.id_comision=d.id_comision and f.vigencia=d.vigencia and f.nitocc=d.nitocc
left join regionales reg on reg.CODREG=d.CODREG
left join TERCEROS ter on ter.nitocc=d.nitocc
left join comisiones comis on comis.id=d.id_comision and comis.vigencia=d.vigencia
where --d.id_comision=928 and d.vigencia=2019 and 
f.valor!=0)tab0
group by id_comision,
  vigencia,
  NITOCC,razsoc,
  email,
  id_transporte,
  transporte,
  dias,
  codreg,
  CIUCED,
  fecha_salida,
  TARIFA,tipo,
  codpro
  UNION
  select id_comision,
  vigencia,
  NITOCC,
  razsoc,
  email,
  id_transporte,
  transporte,
  dias,
  codreg,
  CIUCED,
  to_char(fecha_salida, 'dd/mm/yyyy') as fecha_salida,
  TARIFA,
  sum(case when CODobj = '06' then valor else 0 end) as SUMA_VIATICOS,
  sum(case when CODobj != '06' then valor else 0 end) as SUMA_OTROS,
  tipo,
  codpro
  from
(select
  d.id_comision,
  d.vigencia,
  d.NITOCC,
  ter.razsoc,
  ter.email,
  d.id_transporte,
  case when id_transporte=1 then 'T' else 'A' end as transporte,
  d.dias,
  d.codreg,
  reg.CIUCED,
  d.fecha_salida,
  f.TARIFA,
  f.CODOBJ,
  f.VALOR,
  f.VIATICOS,
  2 as tipo,
  comis.codpro
from COMISIONADOS_CONTRATO d
left join COMISIONADOS_OBJS f on f.id_comision=d.id_comision and f.vigencia=d.vigencia and f.nitocc=d.nitocc
left join regionales reg on reg.CODREG=d.CODREG
left join TERCEROS ter on ter.nitocc=d.nitocc
left join comisiones comis on comis.id=d.id_comision and comis.vigencia=d.vigencia
where --d.id_comision=928 and d.vigencia=2019 and 
f.valor!=0)tab0
group by id_comision,
  vigencia,
  NITOCC,razsoc,
  email,
  id_transporte,
  transporte,
  dias,
  codreg,
  CIUCED,
  fecha_salida,
  TARIFA,tipo,
  codpro)tab0
)tab0
group by id_comision,vigencia,nitocc,razsoc,email,id_transporte,transporte,dias,codreg,ciuced,fecha_salida,tipo,codpro)comisionado 
on comisionado.tipo= placom.tipo_comisionado and comisionado.id_comision = placom.id_comisiones and comisionado.vigencia=placom.vigencia_comisiones 
left join transportes trans on trans.id=comisionado.id_transporte
where
placom.id_plan_comisiones = $id_plan_comisiones
and placom.vigencia = $id_vigencia  
and id_resol_comis= $id_resol_comis
EOD;
                    //Ejecutar SQL
                    $records = CN_TABLE::executeSQL($sql);

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

                    $cadena_presupuestal = 0;
                    if (count($records) > 0) {
                        //Por cada comisionado de la resolucion original validamos si aplicaba tiquetes para notificar su anulacion
                        foreach ($records as $record) {
                            try {
                                $report_params = $record;
                                //$id_resol_comis = $record['id_resol_comis'];

                                $tipo_transporte = $record['id_transporte'];
                                $aplica_tiquete = $record['aplica_tiquete'];
                                $id_comisiones = $record['id_comisiones'];
                                //$vigencia_comisiones = $record['vigencia_comisiones'];
                                //$no_resolucion = $record['resolucion'];
                                $proyecto = $record['proyecto'];
                                //DATOS RESPONSABLE
                                $num_doc = $record['num_doc'];
                                $id_tipo_doc = 1;
                                $razon_soc = $record['razon_soc'];
                                $correo = $record['correo'];

                                if ($aplica_tiquete == "1") {
                                    //Si aplico Tiquetes Notificamos la ANulacion de la resolucion
                                    //cargamos datos para le envio de correo
                                    $datos_usuario = array(
                                        '0' => '0;1;Karen Lorena Rodriguez Lopez;karen.rodriguez@anm.gov.co',
                                        '1' => '0;1;Jeyson Javier Moya Salamanca;jeyson.moya@anm.gov.co',
                                        '2' => '0;1;control.comisiones;control.comisiones@anm.gov.co',
                                    );
                                    $subject = "CANCELACION DE TIQUETE - PERDIDA EJECUTORIA DEL ACTO ADMINISTRATIVO RESOLUCION No." . $no_resolucion . " - " . $vigencia_comisiones . " POR RESOLUCION " . $no_resolucion_ma . " - " . $vigencia_resolucion_ma . ";";
                                    $report_params["mensaje"] = "Se permite informar la perdida ejecutoria del acto administrativos de la resolución " . $no_resolucion . " - " . $vigencia_comisiones .
                                            " por medio de la resolución " . $no_resolucion_ma . " - " . $vigencia_resolucion_ma . "para que sirva cancelar la solicitud de tiquete aereo.";
                                    $currentUri = '';
                                    $progress_key = $request['comando'] . $request['username'];

                                    $adjunto = true;
                                    //$ruta = $_SERVER['DOCUMENT_ROOT'] . "/controlcomisiones/web/uploads/";
                                    $ruta = getcwd() . "/uploads/";
                                    $array_adjuntos = array($adjunto_resolucion => "resolucionsignedPDF/" . $adjunto_resolucion);
                                    $entidad_cliente = $entidadCliente;
                                    $entidad_nombre = $entidadNombre;
                                    $addAddress = false;
                                    $useCc = true;

                                    CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress, $useCc);
                                }
                            } catch (Exception $e) {
                                //creamos excepcion y continuamos con el siguiente en el ciclo
                                $this->logMessage("Error en el envio de correo: " . $e);
                            }
                        }
                    }
                    //SI NO ES CAJA MENOR NOTIFICAR ANULACION A CADENA PRESUPUESTAL
                    $sql = <<<EOD
SELECT
placom.id_plan_comisiones,
placom.vigencia,
placom.id_comisiones,
placom.vigencia_comisiones,
placom.id_resol_comis,
placom.tipo_comisionado,
'' as mensaje_firma,
--'Se permite informar que ha sido aprobada y firmada la resolución Nº '|| placom.RESOLUCION || ' - ' || placom.vigencia || ' para que sirva emitir el Registro Presupuestal y se continue con el tramite de pago.' as mensaje,
placom.ADJUNTO_FIRMADO_DIGITAL as adjunto,
placom.RESOLUCION,
comis.proyecto

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 id_resol_comis= $id_resol_comis
EOD;
                    $records = CN_TABLE::executeSQL($sql);
                    $this->logMessage("Envio correo Anulacion Cadena presupuestal");

                    if (count($records) > 0) {
                        $this->logMessage("Proyect:" . $proyecto);
                        if (strpos($proyecto, "CAJA MENOR") === false) {
                            $this->logMessage("--- No tiene la palabra caja menor");
                            $cadena_presupuestal = 1;
                        } else {
                            $this->logMessage("--- tiene la palabra caja menor");
                            $cadena_presupuestal = 0;
                        }
                        if ($cadena_presupuestal == 1) {
                            $report_params = $records[0];
                            $id_resol_comis = $records[0]['id_resol_comis'];
                            $adjunto_resolucion = $records[0]['adjunto'];
                            $subject = "CANCELACION DE REGISTRO PRESUPUESTAL RESOLUCION No." . $no_resolucion . " - " . $vigencia_comisiones . " POR RESOLUCION " . $no_resolucion_ma . " - " . $vigencia_resolucion_ma . ";";
                            $report_params["mensaje"] = "Se permite informar la perdida ejecutoria del acto administrativos de la resolución " . $no_resolucion . " - " . $vigencia_comisiones .
                                    " por medio de la resolución " . $no_resolucion_ma . " - " . $vigencia_resolucion_ma . "para que sirva cancelar emición del Registro Presupuestal y no se continue con el tramite de pago.";

                            $datos_usuario = array(
                                '0' => '0;1;Luz Elena Zapata Zuluaga;luz.zapata@anm.gov.co',
                                '1' => '0;1;Yenny Saavedra Posada;yenny.saavedra@anm.gov.co',
                                '2' => '0;1;Maria Isabel Peralta Ramirez;maria.peralta@anm.gov.co',
                                '3' => '0;1;Lady Geraldin Vargas Contreras;lady.vargas@anm.gov.co',
                                //'4' => '0;1;nestor.sanjuan;nestor.sanjuan@anm.gov.co',
                                //'5' => '0;1;carmen.mora;carmen.mora@anm.gov.co',
                                '4' => '0;1;control.comisiones;control.comisiones@anm.gov.co',
                            );

                            $currentUri = '';
                            $progress_key = $request['comando'] . $request['username'];

                            $adjunto = true;
                            //$ruta = $_SERVER['DOCUMENT_ROOT'] . "/controlcomisiones/web/uploads/";
                            $ruta = getcwd() . "/uploads/";
                            $array_adjuntos = array($adjunto_resolucion => "resolucionsignedPDF/" . $adjunto_resolucion);

                            $entidad_cliente = $entidadCliente;
                            $entidad_nombre = $entidadNombre;
                            $addAddress = false;
                            $useCc = true;
                            CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress, $useCc);
                        }
                    }
                    Break;
                default:
                    Break;
            }
        }
    }

}
