<?php

/**
 * co_estudios_previos actions.
 *
 * @package    contratacion
 * @subpackage co_estudios_previos
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
require_once 'HTMLPurifier.auto.php';
require 'HTMLPurifier.autoload.php';

class co_estudios_previosActions extends sfQuery {

    /**
     * Executes index action
     *
     * @param sfRequest $request A request object
     */
    protected $table_names = array(
        'CO_ESTUDIOS_PREVIOS_V',
        'INTERCEROS_V',
        'CO_ABOGADO_V',
        'INTERCEROS_V',
        'CO_MODALIDAD_SEL',
        'CO_VERSIONES_EP_V',
        'AREA',
        'INTERCEROS',
        'CO_TIPO_PROCESO',
        'CO_PARAM_GEN',
        'ESTADO_APROB_COMITE_V',
        'ESTADO_NO_APROB_COMITE_V'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'INTERCEROS_V' =>
        array(
            'responsable-id_mae_ter' => 'CO_ESTUDIOS_PREVIOS_V'
        ),
        'CO_MODALIDAD_SEL' =>
        array(
            'id_modalidad_sel' => 'CO_ESTUDIOS_PREVIOS_V'
        ),
        'CO_TIPO_PROCESO' =>
        array(
            'id_tipo_proceso' => 'CO_MODALIDAD_SEL'
        ),
        'CO_ABOGADO_V, LEFT' =>
        array(
            'id_abogado' => 'CO_ESTUDIOS_PREVIOS_V'
        ),
        'CO_VERSIONES_EP_V, LEFT' =>
        array(
            'id_estudios_previos-id_version_hijo' => 'CO_ESTUDIOS_PREVIOS_V'
        ),
        'AREA' =>
        array(
            'id_area' => 'CO_ESTUDIOS_PREVIOS_V'
        ),
        'INTERCEROS' =>
        array(
            'id_supervisor-id_mae_ter' => 'CO_ESTUDIOS_PREVIOS_V'
        ),
        'CO_PARAM_GEN,LEFT' =>
        array(
            'id_param_gen-id_param_gen' => 'CO_PARAM_GEN'
        ),
        'ESTADO_APROB_COMITE_V, LEFT' =>
        array(
            'id_estudios_previos' => 'CO_ESTUDIOS_PREVIOS_V'
        ),
        'ESTADO_NO_APROB_COMITE_V, LEFT' =>
        array(
            'id_estudios_previos' => 'CO_ESTUDIOS_PREVIOS_V'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'CO_ESTUDIOS_PREVIOS_V' =>
        array(
            'id_estudios_previos' => 'id_estudios_previos',
            'no_estudios_previos' => 'no_estudios_previos',
            'no_proceso' => 'no_proceso',
            'responsable' => 'responsable',
            'id_abogado' => 'id_abogado',
            'fecha_creacion' => 'fecha_creacion',
            'id_modalidad_sel' => 'id_modalidad_sel',
            'estado' => 'estado',
            'activo' => 'activo',
            'fecha_anu' => 'fecha_anu',
            'motivo_anu' => 'motivo_anu',
            'id_cen_op' => 'id_cen_op',
            'id_anhos' => 'id_anhos',
            'version' => 'version',
            'id_area' => 'id_area',
            'valor' => 'valor',
            'id_supervisor' => 'id_supervisor',
            'fecha_cierre' => 'fecha_cierre',
            'descripcion' => 'descripcion',
            'id_legaliza' => 'id_legaliza',
            'id_mesa_ayuda' => 'id_mesa_ayuda',
            'id_soporte' => 'id_soporte',
            'estado_general' => 'estado_general',
            'estado_general_desc' => 'estado_general_desc',
            'estado_objeto_iguales' => 'estado_objeto_iguales',
            'fec_est_obj_igu_pen' => 'fec_est_obj_igu_pen',
            'fec_est_obj_igu_vob' => 'fec_est_obj_igu_vob',
            'fec_est_obj_igu_apr' => 'fec_est_obj_igu_apr',
            'fec_est_obj_igu_rec' => 'fec_est_obj_igu_rec',
            'estado_ep_general' => 'estado_ep_general',
            'fec_est_ep_gen_pen' => 'fec_est_ep_gen_pen',
            'fec_est_ep_gen_vob' => 'fec_est_ep_gen_vob',
            'fec_est_ep_gen_aut' => 'fec_est_ep_gen_aut',
            'fec_est_ep_gen_rec' => 'fec_est_ep_gen_rec',
            'codigopaa' => 'codigopaa',
            'autorizado_extra' => 'autorizado_extra',
            'fec_est_ep_gen_autextra' => 'fec_est_ep_gen_autextra',
            'tipobolsa' => 'tipobolsa',
            'usuario_est_obj_igu_pen' => 'usuario_est_obj_igu_pen',
            'usuario_est_obj_igu_vob' => 'usuario_est_obj_igu_vob',
            'usuario_est_obj_igu_apr' => 'usuario_est_obj_igu_apr',
            'usuario_est_obj_igu_rec' => 'usuario_est_obj_igu_rec',
        ),
        'INTERCEROS_V' =>
        array(
            'num_doc' => 'num_doc_resp',
            'razon_soc' => 'razon_soc_resp'
        ),
        'CO_ABOGADO_V' =>
        array(
            'num_doc' => 'num_doc_abogado',
            'razon_soc' => 'razon_soc_abogado'
        ),
        'CO_MODALIDAD_SEL' =>
        array(
            'descripcion' => 'descripcion_modal',
            'prefijo' => 'prefijo_modal'
        ),
        'CO_TIPO_PROCESO' =>
        array(
            'id_tipo_proceso' => 'id_tipo_proceso',
            'descripcion' => 'modalidad'
        ),
        'CO_VERSIONES_EP_V' =>
        array(
            'fecha_creacion' => 'fecha_version',
            'razon_soc' => 'usuario_version'
        ),
        'AREA' =>
        array(
            'descripcion' => 'descripcion_area'
        ),
        'INTERCEROS' =>
        array(
            'num_doc' => 'num_doc_sup',
            'pnombre,||, ,||,snombre,||, ,||,papellido,||, ,||,sapellido' => 'razon_soc_sup'
        ),
        'ESTADO_APROB_COMITE_V' =>
        array(
            'id' => 'id_a',
            'est' => 'est_a',
            'id_estudios_previos' => 'id_estudios_previos_a',
            'fecha' => 'fecha_a',
            'observaciones' => 'observaciones_a',
            'no_comite' => 'no_comite_a'
        ),
        'ESTADO_NO_APROB_COMITE_V' =>
        array(
            'id' => 'id_na',
            'est' => 'est_na',
            'id_estudios_previos' => 'id_estudios_previos_na',
            'fecha' => 'fecha_na',
            'observaciones' => 'observaciones_na',
            'no_comite' => 'no_comite_na'
        )
    ); //por cada tabla especificar los campos del select

    /*
     * OPCIONES DE FILTRO:
     *
     * LIKEALLPLUS- busqueda comparativa de la cadena dividida por los espacios en blanco en cualquier posición
     * LIKEALL - busqueda comparativa de la cadena en cualquier posición
     * LIKE - busqueda en la cadena que inicie por la variable de filtro
     *
     * rownum,start - rownum,end / estos campos para uso del Grid live GWT, numero fijo de filas de consulta
     */
    protected $table_field_conditions = array(
        'CO_ESTUDIOS_PREVIOS_V' => array(
            'id_estudios_previos,a' => array('!=' => array(-1)),
            'id_estudios_previos,b' => array('=' => array('id_estudios_previos')),
            'id_modalidad_sel' => array('=' => array('id_modalidad_sel')),
            'responsable' => array('=' => array('id_mae_ter')),
            'id_supervisor' => array('=' => array('id_supervisor')),
            'id_abogado,a' => array('=' => array('id_abogado')),
            'id_abogado,b' => array('NULL' => array('id_abogado_null')),
            'no_proceso' => array('=' => array('no_proceso')),
            'fecha_creacion' => array('BETWEEN' => array('fecha_ini', 'fecha_fin')),
            'id_area' => array('=' => array('id_area')),
            'estado' => array('=' => array('1')),
            'estado_general' => array('IN' => array('id_estado')),
            'estado_general' => array('IN' => array('estado_general')),
            'estado_objeto_iguales' => array('IN' => array('id_estado_objeto_iguales')),
            'estado_ep_general' => array('IN' => array('id_estado_ep_general')),
            'id_anhos' => array('=' => array('id_anhos')),
            'activo' => array('=' => array('activo')),
            'version' => array('=' => array('version')),
            'descripcion' => array('LIKEALLPLUS' => array('descripcion')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        ),
        'CO_TIPO_PROCESO' => array(
            'id_tipo_proceso' => array('=' => array('id_tipo_proceso'))
        )
    ); //por cada tabla se dan los campos, opcion de filtro y variable que entra para los posibles filtros
    protected $table_field_or_conditions = array(
        'CO_ESTUDIOS_PREVIOS_V' => array(
            'responsable' => array('=' => array('id_username')),
            'id_supervisor' => array('=' => array('id_username')),
            'id_coordina_contra' => array('=' => array('id_username')),
            'id_soporte' => array('=' => array('id_username')),
            'id_legaliza' => array('=' => array('id_username')),
            'id_mesa_ayuda' => array('=' => array('id_username')),
        ),
        'CO_ABOGADO_V' => array(
            'id_mae_ter' => array('=' => array('id_username')),
        ),
        'CO_PARAM_GEN' => array(
            'id_coordina_contratos' => array('=' => array('id_username')),
            'id_soporte' => array('=' => array('id_username')),
            'id_mesa_ayuda' => array('=' => array('id_username')),
            'id_secretario_general' => array('=' => array('id_username')),
            'id_tecnico_legaliza' => array('=' => array('id_username')),
            'id_suplente_tec_legaliza' => array('=' => array('id_username')),
        ),
        'ESTADO_APROB_COMITE_V' => array(
            'est' => array('=' => array('est')),
            'id_estudios_previos' => array('=' => array('id_estudios_previos')),
        ),
        'ESTADO_NO_APROB_COMITE_V' => array(
            'est' => array('=' => array('est')),
            'id_estudios_previos' => array('=' => array('id_estudios_previos')),
        )
    ); // filtros de condicion or
    protected $fields_orderBy = array(
        'no_proceso', 'version', 'id_modalidad_sel', 'id_estudios_previos'
    ); //campos para el ordenamiento de la consulta
//    protected $table_field_obligatory = array('id_debito'); //campos obligatorios de filtro - estan en el request

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


    /*
     * ------------VARIABLES PARA SERVICIOS CRUD
     */
    protected $id_name = 'id_estudios_previos'; //identificador de la tabla
    protected $id_names = array('id_estudios_previos'); //llave primaria
    protected $field_names = array('descripcion', 'id_area', 'no_proceso', 'valor', 'responsable', 'id_abogado',
        'fecha_creacion', 'id_modalidad_sel', 'estado', 'activo', 'fecha_anu', 'motivo_anu', 'id_cen_op', 'id_anhos',
        'version', 'id_supervisor', 'fecha_cierre', 'codigopaa', 'estado_general', 'fecha_aprobado', 'estado_objeto_iguales',
        'fec_est_obj_igu_pen', 'fec_est_obj_igu_vob', 'fec_est_obj_igu_apr', 'fec_est_obj_igu_rec', 'estado_ep_general', 'fec_est_ep_gen_pen', 'fec_est_ep_gen_vob',
        'fec_est_ep_gen_aut', 'fec_est_ep_gen_rec', 'tipobolsa', 'usuario_est_obj_igu_pen', 'usuario_est_obj_igu_vob', 'usuario_est_obj_igu_apr', 'usuario_est_obj_igu_rec');
    protected $table_name = 'CO_ESTUDIOS_PREVIOS'; //tabla en la cual se aplican los cambios
    protected $has_activo = true; //si posee campo en la tabla de nombre activo ---- ESTADO PARA REGALIAS - CARTERA
    protected $has_vigencia = false; //si posee vigencia
    protected $has_cen_op = false; //si posee centro de operacion
    protected $has_id_cia = false; //si posee compañia
    protected $has_secuencia = false; //si posee secuencia la tabla - true si es por tabla, false - trigger
//    protected $en_mayuscula = true; // si se pone, se puede poner en mayucula con true y en minuscula con false, de lo contrario la pone tal cual la BD
    protected $campo_fecha_sistema = array();


    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_estudios_previos'; //identificador unico de la tabla
    //false - Registrar log para list - consultar
    protected $log_list = false;
    //false - Registrar log para add - update - remove
    protected $log_crud = false;

    /**
     * Construccion de observacion perzonalizada
     * 
     * Toda variable para tomarla del request con el formato:
     * &request-variable&
     * 
     * false - observacion por defecto
     *
     * @var string 
     */
    protected $observacion_list = false;
    protected $observacion_add = false;
    protected $observacion_update = false;
    protected $observacion_remove = false;

    // Validate

    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Add
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateAdd(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

        $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;
                    }
                }
            }
            $int++;
        }

        $id_modalidad_sel = $request['id_modalidad_sel'];
        $valor = $request['valor'];

        /*
         *  Validar la operación, ya sea por SQL
         */
        $sql = <<<EOD
        select cuantia_min, cuantia_max from co_modalidad_sel where id_modalidad_sel=$id_modalidad_sel
EOD;
        $records = CN_TABLE::executeSQL($sql);

        $cuantia_min = $records[0]['cuantia_min'];
        $cuantia_max = $records[0]['cuantia_max'];

        /*
         *  Generar errores en $errors
         */
        if ($valor >= $cuantia_min && $valor <= $cuantia_max) {
            
        } else {
            $errors['mensaje'] = "El Valor del Proceso no debe superar el limite de cuantia. Favor verificar";
            $errors['servicio'] = "co_estudios_previos";
        }

        /**
         * Validar LienaPaa repetida - 20200415::LAVILA
         */
        if (isset($request['codigopaa'])) {

            $codigopaa = $request['codigopaa'];
            $lineaspaa = explode(",", $codigopaa);

            foreach ($lineaspaa as $value) {

                $codigopaa = $value;

                $sql = <<<EOD
SELECT
epcod.id_estudios_previos,
epcod.codigopaa,
epcod.tipobolsa,
epcod.mesinicio,
epcod.valorvigencia,
epcod.codigosunspsc

FROM co_codigopaa_ep epcod

left join co_estudios_previos ep
on ep.estado = 1

where
epcod.codigopaa = '$codigopaa'  
    
order by                        
epcod.codigopaa           
EOD;
                $records = CN_TABLE::executeSQL($sql);

                if (count($records) > 0) {
                    $errors['mensaje'] = "La lineaPAA($codigopaa) ya fue usada. Favor verificar";
                    $errors['servicio'] = "co_estudios_previos";
                }
            }
        }

        //if($entidadCliente == 2){
        /**
         * 20/01/2022 Se pone este mensaje para bloquear el boton de nuevo estudio previo
         */
        //    $errors['mensaje'] = "Funcionalidad bloquedad para el ANM";
        //    $errors['servicio'] = "co_estudios_previos";
        //}

        return $errors;
    }

    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Update
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateUpdate(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

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

        $id_estudios_previos = $request['id_estudios_previos'];
        $cierra_version = $request['cierra_version'];
        $id_modalidad_sel = $request['id_modalidad_sel'];

        $total_aporte = 0;

        //20200520 Dany Ortega 
        //Validar datos de estado con la BD para evitar activar un EP cerrado por datos desactualizados en la Recordset de GWT
        if (isset($request['estado']) && $request['estado'] == 'true') {
            $sql = <<<EOD
SELECT
    *
FROM co_estudios_previos
where 
id_estudios_previos = $id_estudios_previos                     
EOD;
            $records = CN_TABLE::executeSQL($sql);

            if ($records[0]['estado'] == 0) {
                $errors['mensaje'] = "No se puede completar la operacion datos desactualizados, por favor refresque la pantalla y vuelva a realizarla";
                $errors['servicio'] = "co_estudios_previos";
            }
        }

        //Si aplica cierre, ejecuta la validacion
        if ($cierra_version) {
            $sql = <<<EOD
        select count(*) as cantidad from co_paso_ep tab0
                join co_paso_modalidad tab1 ON tab1.id_paso_modalidad = tab0.id_paso_modalidad and tab1.estado =1
                where id_estudios_previos = $id_estudios_previos
EOD;
            $records = CN_TABLE::executeSQL($sql);

            $pasos_ep = $records[0]['cantidad'];


            $sql = <<<EOD
        select count(*) as cantidad from co_paso_modalidad
                where id_modalidad_sel = $id_modalidad_sel and estado = 1
EOD;
            $records = CN_TABLE::executeSQL($sql);

            $pasos_modalidad = $records[0]['cantidad'];

            if ($pasos_ep != $pasos_modalidad) {

                $errors['mensaje'] = "No ha realizado el seguimiento a todos los Pasos del Proceso";
                $errors['servicio'] = "co_estudios_previos";
            }

            $sql = <<<EOD
        select count(*) as cantidad from co_documento_ep tab0
                join co_docum_modalidad tab1 ON tab1.id_docum_modalidad = tab0.id_docum_modalidad and tab1.estado =1
                where id_estudios_previos = $id_estudios_previos
EOD;
            $records = CN_TABLE::executeSQL($sql);

            $documentos_ep = $records[0]['cantidad'];

            //Solo verifica los no opcionales - 20200304
            $sql = <<<EOD
        select count(*) as cantidad from co_docum_modalidad
                where id_modalidad_sel = $id_modalidad_sel and estado = 1 and opcional = 0 
EOD;
            $records = CN_TABLE::executeSQL($sql);

            $documentos_mod = $records[0]['cantidad'];

            if ($documentos_ep < $documentos_mod) {

                $errors['mensaje'] = "No ha realizado el registro de todos los documentos del Proceso";
                $errors['servicio'] = "co_estudios_previos";
            }

            //verifica que se haya registrado abogado
            $sql = <<<EOD
select 
ep.id_abogado, 
ep.valor, 
ep.id_modalidad_sel,
mo.id_tipo_proceso
from co_estudios_previos ep
join co_modalidad_sel mo on mo.id_modalidad_sel = ep.id_modalidad_sel
where ep.id_estudios_previos = $id_estudios_previos and ep.estado = 1 
EOD;
            $records = CN_TABLE::executeSQL($sql);

            $id_abogado = $records[0]['id_abogado'];
            $valor = $records[0]['valor'];
            $id_modalidad_sel = $records[0]['id_modalidad_sel'];
            $id_tipo_proceso = $records[0]['id_tipo_proceso'];

            if ($id_abogado == "") {

                $errors['mensaje'] = "No se ha registrado el Abogado. Favor Verificar";
                $errors['servicio'] = "co_estudios_previos";
            }


            //verificar que haya sido aprobado por el abogado

            $sql = <<<EOD
        select count(*) as cantidad from co_aprueba_ep
                where id_estudios_previos = $id_estudios_previos
EOD;
            $records = CN_TABLE::executeSQL($sql);

            $cantidad = $records[0]['cantidad'];

            if ($cantidad == 0) {

                $errors['mensaje'] = "No se ha realizado la Aprobacion por parte del abogado. Favor Verificar";
                $errors['servicio'] = "co_estudios_previos";
            }

            //verificar que haya sido aprobado por el comite

            $sql = <<<EOD
        select tab1.descripcion,tab0.aplica_aprobacion as aplica_aprobacion 
            from co_modalidad_sel tab0 left join co_tipo_proceso tab1 ON tab1.id_tipo_proceso = tab0.id_tipo_proceso
                where tab0.id_modalidad_sel = $id_modalidad_sel
EOD;
            $records = CN_TABLE::executeSQL($sql);

            $tipo_proceso = $records[0]['descripcion'];
            $aplica_aprobacion = $records[0]['aplica_aprobacion'];

            //if ($tipo_proceso != 'Mínima Cuantía') {
            //Se actualiza condicion a si aplica aprobacion en vez de ser quemada por el texto minima cuantia
            if ($aplica_aprobacion == '1') {

                $sql = <<<EOD
              select count(*) as cantidad from co_aprueba_comite
              where id_estudios_previos = $id_estudios_previos
EOD;

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

                $cantidad = $records[0]['cantidad'];

                if ($cantidad == 0) {

                    $errors['mensaje'] = "No se ha realizado la Aprobacion por parte del Comite de Contratación. Favor Verificar";
                    $errors['servicio'] = "co_estudios_previos";
                }
            }


            /**
             * Incidente #35673, cambios en validaciones(Licitación publica y selección abreviada) y solo SGC - 20230524::LAVILA
             */
            if ($entidadCliente != 1 || ($entidadCliente == 1 && $id_tipo_proceso != 21 && $id_tipo_proceso != 23)) {

                //Busca cdps para el estudio previo
                $sql = <<<EOD
        select count(*) as cantidad from co_cdps_ep
                where id_estudios_previos = $id_estudios_previos
EOD;
                $records = CN_TABLE::executeSQL($sql);

                $cdps = $records[0]['cantidad'];

                /**
                 * Busca valores del estudio previo de aportes externos
                 */
                $sql = <<<EOD
        select nvl(sum(valor),0) as valor from co_aporte_externo
                where id_estudios_previos = $id_estudios_previos
EOD;
                $records = CN_TABLE::executeSQL($sql);

                $total_aporte = $records[0]['valor'];


                //Si no tiene cdps y su valor es diferente a 0, no genera el cierre
                if ($cdps == 0 && $valor != 0) {

                    //Si el valor de aportes externos o en especie son iguales al valor del contrato puede permitir el cierre de Estudios Previos sin CDP. - 20150909
                    if ($total_aporte == $valor) {
                        
                    } else {

                        $errors['mensaje'] = "No ha realizado el registro de Cdps";
                        $errors['servicio'] = "co_estudios_previos";
                    }
                }

                $sql = <<<EOD
        select nvl(sum(valor),0) as valor from co_cdps_ep
                where id_estudios_previos = $id_estudios_previos
EOD;
                $records = CN_TABLE::executeSQL($sql);

                $total_cdp = $records[0]['valor'];

                $sql = <<<EOD
        select nvl(sum(valor),0) as valor from co_vigencia_futura
                where id_estudios_previos = $id_estudios_previos
EOD;
                $records = CN_TABLE::executeSQL($sql);

                $total_vigencias = $records[0]['valor'];


                $total = $total_cdp + $total_aporte + $total_vigencias;

                if ($total != $valor) {

                    $errors['mensaje'] = "El valor registrado en CDPs y Aportes no corresponde al valor Total del Proceso";
                    $errors['servicio'] = "co_estudios_previos";
                }
            }
        }

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


        /*
         *  Generar errores en $errors
         */
        //Valida si se anula y tiene contratos asociados activos - 20170208
        if (isset($request['estado']) && $request['estado'] == 'false') {

            $sql = <<<EOD
select 
selep.*,
con.estado as estado_con,
con.no_contrato
from co_seleccion_ep selep
join co_contrato con
on selep.id_seleccion_ep = con.id_seleccion_ep
where 
selep.id_estudios_previos = $id_estudios_previos
and con.estado = 1 
EOD;
            $records = CN_TABLE::executeSQL($sql);

            if (count($records) > 0) {

                $no_contrato = $records[0]['no_contrato'];

                $errors['mensaje'] = "Se debe anular primero el contrato No.$no_contrato asociado al EP.";
                $errors['servicio'] = "co_estudios_previos";
            }
        }




        /**
         * Validar LienaPaa repetida - 20200415::LAVILA
         */
        if (isset($request['codigopaa'])) {

            $codigopaa = $request['codigopaa'];
            $lineaspaa = explode(",", $codigopaa);

            foreach ($lineaspaa as $value) {

                $codigopaa = $value;

                $sql = <<<EOD
SELECT
epcod.id_estudios_previos,
epcod.codigopaa,
epcod.tipobolsa,
epcod.mesinicio,
epcod.valorvigencia,
epcod.codigosunspsc

FROM co_codigopaa_ep epcod

left join co_estudios_previos ep
on epcod.id_estudios_previos = ep.id_estudios_previos

where
epcod.codigopaa = '$codigopaa'  
and epcod.id_estudios_previos != $id_estudios_previos   
and ep.estado = 1
    
order by                        
epcod.codigopaa           
EOD;
                $records = CN_TABLE::executeSQL($sql);

                if (count($records) > 0) {
                    $errors['mensaje'] = "La lineaPAA($codigopaa) ya fue usada. Favor verificar";
                    $errors['servicio'] = "co_estudios_previos";
                }
            }
        }



        /**
         * Validar cantidad de objetos iguales - 200200916::LAVILA
         */
        if (isset($request['bandera_editar']) && $request['bandera_editar'] == 2 && $entidadCliente == 2) {
            //APROBADO
            if (isset($request['estado_objeto_iguales']) && $request['estado_objeto_iguales'] == 2) {


                $sql = <<<EOD
SELECT
    *
FROM co_ep_objetos_iguales
where
id_estudios_previos = $id_estudios_previos
EOD;
                $records = CN_TABLE::executeSQL($sql);
                $this->logMessage('records::' . count($records));

                if (count($records) > 0) {

                    $sisgestion = sfConfig::get('app_sisgestion');
                    $vigencia = $records[0]['vigencia'];

                    /**
                     * Solicitar token de conexion - 20200910
                     */
                    $respuesta_token = CN_TABLE::solicitarToken();
                    $this->logMessage("objetos_iguales Token: " . $respuesta_token);

                    $result = '';

                    /*
                     * Manejo de errores
                     */
                    try {


                        /**
                         * URLs
                         */
                        $uridos = $sisgestion . '/api/ServicePaa/objetos';
                        $urldos = 'http://' . $uridos;

                        //Datos de filtro
                        $post = <<<EOD
{
    "Vigencia":$vigencia
}
EOD;

                        //Token de autorizacion
                        $authorization = "Authorization: Bearer " . $respuesta_token;

                        /*
                         * Llamado CURL
                         */
                        $sesion = curl_init($urldos);

                        //Define el tipo de ejecución
                        curl_setopt($sesion, CURLOPT_HTTPHEADER, array('Content-Type: application/json', $authorization));
                        curl_setopt($sesion, CURLOPT_CUSTOMREQUEST, "GET");
                        curl_setopt($sesion, CURLOPT_RETURNTRANSFER, true);
                        curl_setopt($sesion, CURLOPT_POSTFIELDS, $post);
                        curl_setopt($sesion, CURLOPT_FOLLOWLOCATION, 1);

                        //Ejecuta la petición
                        $result = curl_exec($sesion);
                        //Se cierra la conexión
                        curl_close($sesion);

                        //verificar Message en result
                        $pos = strpos($result, 'Message');
                        if ($pos !== false) {
                            throw new Exception("La respuesta del servicio fue erronea; favor verificar.");
                        }

                        $resultt = array();
                        $respuesta_obj = array();
                        $resultt = json_decode($result);
                        //$this->logMessage("objetos_iguales Respuesta: " . $result);


                        foreach ($resultt as $res) {
                            $record = array();
                            foreach ($res as $key => $value) {
                                if (is_array($value)) {

                                    $key = strtolower($key);
                                    $re = array();
                                    foreach ($value as $va) {
                                        $r = array();
                                        foreach ($va as $ke => $val) {
                                            $ke = strtolower($ke);

                                            $r[strtolower($ke)] = $val;
                                        }
                                        $re[] = $r;
                                    }
                                    $re = json_encode($re);
                                    $record[strtolower($key)] = $re;
                                } else {
                                    $key = strtolower($key);
                                    $record[strtolower($key)] = $value;
                                }
                            }

                            $respuesta_obj[$record['id']] = $record;
                        }


                        /*
                         * Todos los objetos iguales por EP
                         */
                        foreach ($records as $value) {

                            $idobjetoigual = $value['idobjetoigual'];

                            /**
                             * Objetos Iguales por lineaPAA - 20200911
                             */
                            if (isset($respuesta_obj[$idobjetoigual])) {
                                $cantidad_obj = $respuesta_obj[$idobjetoigual]['cantidad'];

                                $sql = <<<EOD
SELECT

count(obj.idobjetoigual) as cant

FROM co_ep_objetos_iguales obj

join co_estudios_previos ep
on ep.id_estudios_previos = obj.id_estudios_previos

where 
obj.idobjetoigual = $idobjetoigual
and ep.estado = 1
and ep.FEC_EST_OBJ_IGU_APR is not null 
EOD;
                                $records_obj = CN_TABLE::executeSQL($sql);
                                $this->logMessage('records_obj::' . count($records));

                                if (count($records_obj) > 0) {

                                    $cant_obj = $records_obj[0]['cant'];

                                    $sql = <<<EOD
update co_ep_objetos_iguales set cantidad = $cantidad_obj 
    where id_estudios_previos = $id_estudios_previos and idobjetoigual = $idobjetoigual                                         
EOD;
                                    $records_obj = CN_TABLE::executeSQL($sql);

                                    if ($cant_obj >= $cantidad_obj) {
                                        $errors['mensaje'] = "El ObjetoIgual($idobjetoigual) supera la cantidad por EP aprobado. Favor verificar.";
                                        $errors['servicio'] = "co_estudios_previos";
                                    }
                                }
                            }
                        }
                    } catch (Exception $e) {
                        $this->logMessage("ERROR!!!");
                        $this->logMessage($e->getMessage());
                    }
                }
            }
        }


        return $errors;
    }

    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Remove
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateRemove(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Acciones anteriores a la original
     * 
     * return sfWebRequest Changed Request with additional parameters.
     * 
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest 
     */
    protected function preprocessRequest($Action, sfWebRequest $request) {

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

        $subject = 'ASUNTO';

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

            $id_modalidad_sel = $request['id_modalidad_sel'];
            $request['estado'] = 1;
            $request['activo'] = 1;
            //$request['version'] = 0;
            $fecha_creacion = $request['fecha_creacion'];
            $id_cen_op = 16;
            $request['id_cen_op'] = $id_cen_op;

            $responsable = $request['responsable'];
            $supervisor = $request['id_supervisor'];

            //ACTUALIZACION: 28-08-2014
            //SE REALIZA CONSULTA AL DIRECTORIO ACTIVO PARA ACTUALIZAR EL CORREO ELECTRONICO DEL RESPONSABLE Y DEL SUPERVISOR


            $sql = <<<EOD
select num_doc from INTERCEROS where id_mae_ter = $responsable
EOD;

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

            $num_doc_responsable = $records[0]['num_doc'];

            $sql = <<<EOD
select num_doc from INTERCEROS where id_mae_ter = $supervisor
EOD;

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

            $num_doc_supervisor = $records[0]['num_doc'];

            $sql = <<<EOD
select email from USUARIO where num_doc = '$num_doc_responsable'
EOD;

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

            if (count($records) > 0) {

                $email_responsable = $records[0]['email'];
            } else {

                $email_responsable = "";
            }

            $sql = <<<EOD
select email from USUARIO where num_doc = '$num_doc_supervisor'
EOD;

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

            if (count($records) > 0) {

                $email_supervisor = $records[0]['email'];
            } else {

                $email_supervisor = "";
            }


            $sql = <<<EOD
select * from intercer_du where id_mae_ter = $responsable
EOD;

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

            if (count($records) > 0) {

                $sql = <<<EOD
update intercer_du set mail = '$email_responsable' where id_mae_ter = $responsable
EOD;

                CN_TABLE::executeSQL($sql);
            } else {

                $sql = <<<EOD
insert into INTERCER_DU(ID_MAE_TER,MAIL) VALUES($responsable,'$email_responsable')
EOD;
                CN_TABLE::executeSQL($sql);
            }


            $sql = <<<EOD
select * from intercer_du where id_mae_ter = $supervisor
EOD;

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

            if (count($records) > 0) {

                $sql = <<<EOD
update intercer_du set mail = '$email_supervisor' where id_mae_ter = $supervisor
EOD;

                CN_TABLE::executeSQL($sql);
            } else {

                $sql = <<<EOD
insert into INTERCER_DU(ID_MAE_TER,MAIL) VALUES($supervisor,'$email_supervisor')
EOD;
                CN_TABLE::executeSQL($sql);
            }




            $sql = <<<EOD
select id_tipo_proceso from CO_MODALIDAD_SEL where id_modalidad_sel = $id_modalidad_sel
EOD;

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

            $id_tipo_proceso = $records[0]['id_tipo_proceso'];


            $sql = <<<EOD
select to_char(to_date('$fecha_creacion','YYYY-MM-DD'),'YYYY') as ID_ANHOS FROM DUAL
EOD;

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

            $id_anhos = $records[0]['id_anhos'];

            $request['id_anhos'] = $id_anhos;
        }

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

            /*
             * (SGC-1, ANM-2, SGR-3, CYC-4, COL-5, INCI-6, LOCAL-7)
             */

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

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


                $int++;
            }



            if ($request['bandera_editar'] == 3 && $entidadCliente == 2) {
                $this->logMessage('Entro en ENVIO DE CORREOS');


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

                $id_estudios_previos = $request['id_estudios_previos'];

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

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

                $sql = <<<EOD
select tab0.* from co_estudios_previos_v tab0 where tab0.id_estudios_previos = $id_estudios_previos
EOD;

                $records = CN_TABLE::executeSQL($sql);
                $nroestudio = $records[0]['id_estudios_previos'];
                $responsable = $records[0]['nombre_responsable'];
                $supervisor = $records[0]['razon_soc_sup'];
                $area = $records[0]['area'];
                $valor = $records[0]['valor'];
                $valor = number_format($valor);
                $modalidad = $records[0]['modalidad'];
                $abogado = $records[0]['abogado'];
                $proceso = $records[0]['proceso'];
                $objeto = $records[0]['descripcion'];
                $id_mod_sel = $records[0]['id_modalidad_sel'];
                $fecha_c = $records[0]['fecha_creacion'];
                $fecha_a = $records[0]['fecha_aprobado'];


                $currentUri = "";

                //PARAMETROS GENERALES

                if (!isset($request["email_envio"])) {
                    $request["email_envio"] = $correoEnvio;
                }
                //$adjunto = false;
                //$ruta = "";

                /*
                 * Variable Memcache
                 */

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

                //$array_adjuntos = array();

                $documento = 'ANM';
                $tipo_doc = '1';
                $email = 'contratacion@anm.gov.co';
                $nombre = '';
                $rol = '';

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

                $datos_usuario = array();

                if ($parametros != "") {
                    $datos_usuario = explode('/', $parametros);
                }
                if ($request['estado_ep_general'] == 1) {

                    $subject = "ASUNTO VoBo Estudio Previo nro " . $nroestudio;

                    //CUERPO DEL MENSAJE
                    $body = "<html><body> </body></html>";
//Body
                    $body = <<<EOD
                <html><body> 
                <br/>
                Bogotá, $fecha_creacion
                <br/>
                <br/>
                Señor(a)<br/>
                $nombre<br/>
                $rol
                <br/><br/>
                Se dio el visto bueno a el estudio Número : $nroestudio por el parte del coordinador del área<br/><br/>
                
                <b>Valor Estudio Previo:</b> $valor<br/><br/>
                <b>Area:</b> $area<br/><br/>
                <b>Responsable:</b> $responsable<br/><br/>
                <b>Supervisor:</b> $supervisor<br/><br/>
                <b>Objeto o Contratista:</b> $objeto<br/><br/>
                <br/><br/>
                </body></html>
EOD;
                }

                if ($request['estado_ep_general'] == 2) {

                    $subject = "ASUNTO Aprobado Estudio Previo nro " . $nroestudio;

                    //CUERPO DEL MENSAJE
                    $body = "<html><body> </body></html>";
//Body
                    $body = <<<EOD
                <html><body> 
                <br/>
                Bogotá, $fecha_creacion
                <br/>
                <br/>
                Señor(a)<br/>
                $nombre<br/>
                $rol
                <br/><br/>
                Fue Aprobado el Estudio Número : $nroestudio por el vicepresidente del área<br/><br/>
                
                <b>Valor Estudio Previo:</b> $valor<br/><br/>
                <b>Area:</b> $area<br/><br/>
                <b>Responsable:</b> $responsable<br/><br/>
                <b>Supervisor:</b> $supervisor<br/><br/>
                <b>Objeto o Contratista:</b> $objeto<br/><br/>
                <br/><br/>
                </body></html>
EOD;
                }

                if ($request['estado_ep_general'] == 222) {
                    $request['estado_ep_general'] = 2;
                    $request['autorizado_extra_tag'] = 1;

                    $subject = "ASUNTO Autorizado Supervisor 2  Estudio Previo nro " . $nroestudio;

                    //CUERPO DEL MENSAJE
                    $body = "<html><body> </body></html>";
//Body
                    $body = <<<EOD
                <html><body> 
                <br/>
                Bogotá, $fecha_creacion
                <br/>
                <br/>
                Señor(a)<br/>
                $nombre<br/>
                $rol
                <br/><br/>
                Fue Autorizado Supervisor 2 el Estudio Número : $nroestudio por el vicepresidente del área<br/><br/>
                
                <b>Valor Estudio Previo:</b> $valor<br/><br/>
                <b>Area:</b> $area<br/><br/>
                <b>Responsable:</b> $responsable<br/><br/>
                <b>Supervisor:</b> $supervisor<br/><br/>
                <b>Objeto o Contratista:</b> $objeto<br/><br/>
                <br/><br/>
                </body></html>
EOD;
                }

                $this->logMessage("Valor de subject: " . $subject);
                CN_TABLE::envioCorreo($request, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $body);
            }

            /* if ($request['bandera_editar'] == 2 && $entidadCliente == 2) {

              try {

              $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
              $this->conn->beginTransaction();
              $id_estudios_previos = $request['id_estudios_previos'];
              $id_modalidad_sel = $request['id_modalidad_sel'];


              //Certificado Insuficiencia de personal

              $nombreArchivo = "estudio_previo_cer_obj_iguales_" . $id_estudios_previos;
              $nombre_reporte = $nombreArchivo . ".pdf";
              $this->logMessage("estudio_previo :" . $nombreArchivo);
              $this->logMessage("JASPER:!!" . $url_jasper);
              //Generamos PDF JASPER
              $url = $url_jasper;
              $url = $url . 'gen_cer_obj_igu&format=PDF&PARAM_id_mod=18';
              $url = $url . '&PARAM_nombre_reporte=' . $nombre_reporte;
              $url = $url . '&PARAM_tag_adjunto_modulo=true';
              $url = $url . '&PARAM_id_estudios_previos=' . $id_estudios_previos;
              //$url = $url . '&format=PDF';//


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

              //Parametros de retorno en cURL
              curl_setopt($ch, CURLOPT_HEADER, 0);
              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Skip SSL Verification
              //Ejecuta la petición
              $rta = curl_exec($ch);
              //Se cierra la conexión
              curl_close($ch);

              if ($id_modalidad_sel == 1) {

              $sql = <<<EOD
              SELECT ID_DOCUMENTO_EP,
              ID_ESTUDIOS_PREVIOS,
              ID_DOCUM_MODALIDAD,
              FECHA_REGISTRO,
              OBSERVACIONES,
              ADJUNTO
              FROM CO_DOCUMENTO_EP WHERE 1=1 AND ID_ESTUDIOS_PREVIOS = $id_estudios_previos and ID_DOCUM_MODALIDAD=334
              EOD;



              $documento = CN_TABLE::executeSQL($sql);
              $id_doc = $documento[0]['id_documento_ep'];
              if (count($documento) > 0) {

              $sql = <<<EOD
              UPDATE CO_DOCUMENTO_EP
              SET        ADJUNTO = '$nombre_reporte'
              WHERE ID_DOCUMENTO_EP = $id_doc
              EOD;
              } else {

              $sql = <<<EOD
              INSERT INTO CO_DOCUMENTO_EP
              (
              ID_DOCUMENTO_EP,
              ID_ESTUDIOS_PREVIOS,
              ID_DOCUM_MODALIDAD,
              FECHA_REGISTRO,
              OBSERVACIONES,
              ADJUNTO
              )
              VALUES
              (
              null,
              $id_estudios_previos,
              334,
              SYSDATE,
              '',
              '$nombre_reporte'
              )
              EOD;
              }
              } else if ($id_modalidad_sel == 2) {

              $sql = <<<EOD
              SELECT ID_DOCUMENTO_EP,
              ID_ESTUDIOS_PREVIOS,
              ID_DOCUM_MODALIDAD,
              FECHA_REGISTRO,
              OBSERVACIONES,
              ADJUNTO
              FROM CO_DOCUMENTO_EP WHERE 1=1 AND ID_ESTUDIOS_PREVIOS = $id_estudios_previos and ID_DOCUM_MODALIDAD=333
              EOD;



              $documento = CN_TABLE::executeSQL($sql);
              $id_doc = $documento[0]['id_documento_ep'];
              if (count($documento) > 0) {


              $sql = <<<EOD
              UPDATE CO_DOCUMENTO_EP
              SET        ADJUNTO = '$nombre_reporte'
              WHERE ID_DOCUMENTO_EP = $id_doc
              EOD;
              } else {

              $sql = <<<EOD
              INSERT INTO CO_DOCUMENTO_EP
              (
              ID_DOCUMENTO_EP,
              ID_ESTUDIOS_PREVIOS,
              ID_DOCUM_MODALIDAD,
              FECHA_REGISTRO,
              OBSERVACIONES,
              ADJUNTO
              )
              VALUES
              (
              null,
              $id_estudios_previos,
              333,
              SYSDATE,
              '',
              '$nombre_reporte'
              )
              EOD;
              }
              }



              $this->conn->execute($sql);
              $this->conn->commit();
              } catch (Exception $ex) {

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


            if (isset($request['cierra_version'])) {
                $logger->info("Ingresa a Actualizar Versionamiento");
                $proceso = $request['no_proceso'];
                $responsable = $request['responsable'];
                $id_abogado = $request['id_abogado'];
                $fecha_creacion = $request['fecha_creacion'];
                $fecha_creacion = "to_date('$fecha_creacion','YYYY-MM-DD')";
                $id_modalidad_sel = $request['id_modalidad_sel'];
                $estado = $request['estado'];
                if ($estado == "true") {
                    $estado = 1;
                } else {
                    $estado = 0;
                }
                $activo = $request['activo'];
                if ($activo == "true") {
                    $activo = 1;
                } else {
                    $activo = 0;
                }
                $fecha_anu = $request['fecha_anu'];
                $motivo_anu = $request['motivo_anu'];
                $id_cen_op = $request['id_cen_op'];
                $id_anhos = $request['id_anhos'];
                $id_estudios_previos = $request['id_estudios_previos'];


                $sql = <<<EOD
select id_tipo_proceso,aplica_proceso from CO_MODALIDAD_SEL where id_modalidad_sel = $id_modalidad_sel
EOD;

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

                $id_tipo_proceso = $records[0]['id_tipo_proceso'];
                $aplica_proceso = $records[0]['aplica_proceso'];

                if ($request['no_proceso'] == "") {

                    if ($aplica_proceso == 1) {
                        $tipo = 1;
                    } else {
                        $tipo = 2;
                    }

                    /**
                     *  Incidente #2305 <-> Se cambia el anho del EP por el anho actual o de cierre, para tomar el consecutivo
                     * to_char(sysdate,'yyyy') - 20160125
                     */
                    $sql = <<<EOD
select consecutivo from co_consecutivo_ep 
    where id_tipo_proceso = $id_tipo_proceso and id_cen_op = $id_cen_op and id_anhos = to_char(sysdate,'yyyy') and tipo = $tipo
EOD;


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

                    /*
                     * Se crea validacion para nuevo año - 20190617
                     */
                    if (count($records) > 0) {

                        $consecutivo = $records[0]['consecutivo'];

                        $request['no_proceso'] = $consecutivo;

                        $sql = <<<EOD
update co_consecutivo_ep set consecutivo =($consecutivo+1) 
    where id_tipo_proceso = $id_tipo_proceso and id_cen_op = $id_cen_op 
        and id_anhos = to_char(sysdate,'yyyy') and tipo = $tipo
EOD;

                        CN_TABLE::executeSQL($sql);
                    } else {
                        $consecutivo = 1;

                        $request['no_proceso'] = $consecutivo;

                        $sql = <<<EOD
Insert into co_consecutivo_ep (ID_CONSECUTIVO_EP,ID_TIPO_PROCESO,ID_CEN_OP,ID_ANHOS,CONSECUTIVO,TIPO) 
    values (null,$id_tipo_proceso,$id_cen_op,to_char(sysdate,'yyyy'),($consecutivo+1),$tipo) 
EOD;

                        CN_TABLE::executeSQL($sql);
                    }
                }
            } else if (isset($request['abrir_version'])) {

                $id_estudios_previos = $request['id_estudios_previos'];
                $fecha_aper = $request['fecha_aper'];
                $fecha_aper = "to_date('$fecha_aper','YYYY-MM-DD')";
                $motivo_aper = $request['motivo_aper'];
                $usuario = $request['id_username'];
                $abrir_ver = <<<EOD
insert into CO_APERTURA_EP(ID_ESTUDIOS_PREVIOS,USUARIO,FECHA_APERTURA,MOTIVO_APER) VALUES($id_estudios_previos,$usuario,$fecha_aper,'$motivo_aper')
EOD;
                CN_TABLE::executeSQL($abrir_ver);
            }
        }

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

        return $request;
    }

    /**
     * Acciones posteriores a la original
     * 
     * return sfWebRequest Changed Request with additional parameters.
     * 
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest 
     */
    protected function postprocessRequest($Action, sfWebRequest $request, $list_data_post) {

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

        //Obtenemos la entidad
        $array = sfYaml::load(dirname(__FILE__) . '/../../../../api/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;
                    }
                }
            }
            $int++;
        }
        $config = HTMLPurifier_Config::createDefault();
        $purifier = new HTMLPurifier($config);

        $subject = 'ASUNTO';

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

            /**
             * Guardar para ANM datos de sigestion - 20200416::LAVILA
             */
            if ($entidadCliente == 2) {
                $this->logMessage('Entro en datos de sigestion');


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


                $id_estudios_previos = $list_data_post[0]['id_estudios_previos'];
                $id_modalidad_sel = $list_data_post[0]['id_modalidad_sel'];
                $objeto_lineapaa = $request['objeto_lineapaa'];

                $sql = <<<EOD
SELECT
cammod.id_campo_modalidad,
cammod.id_modalidad_sel,                        
camep.id_campo_ep,
camep.codigo

FROM co_campo_modalidad cammod

join co_campo_ep camep
on camep.id_campo_ep = cammod.campo_ep.id_campo_ep

where
cammod.id_modalidad_sel = $id_modalidad_sel
and lower(camep.codigo) like '%objeto%' 
EOD;
                $records = CN_TABLE::executeSQL($sql);
                $this->logMessage('records::' . count($records));

                if (count($records) > 0) {
                    $id_campo_ep = $records[0]['id_campo_ep'];
                    $this->logMessage('id_campo_ep::' . $id_campo_ep);

                    $sql = <<<EOD
insert into co_detalle_ep (ID_DETALLE_EP,ID_ESTUDIOS_PREVIOS,ID_CAMPO_EP,VALOR)
values (null, $id_estudios_previos, $id_campo_ep, '$objeto_lineapaa ') 
EOD;
                    $this->conn->execute($sql);
                }


                /**
                 * Buscar CDP y generar para EP - 20200416
                 */
                $sisgestion = sfConfig::get('app_sisgestion');

                if (isset($request['id_anhos'])) {
                    $vigencia = $request['id_anhos'];
                } else {
                    $vigencia = date('Y');
                }
                //codigo_dependencia
                if (isset($request['idsisgestiondependencia'])) {
                    $cod_depen = $request['idsisgestiondependencia'];
                } else {
                    $cod_depen = '';
                }
                //codigo_paa
                if (isset($request['codigopaa'])) {
                    $cod_paa = $request['codigopaa'];
                } else {
                    $cod_paa = '';
                }

                /**
                 * Solicitar token de conexion - 20200910
                 */
                $respuesta_token = CN_TABLE::solicitarToken();
                $this->logMessage("co_estudios_previos Token: " . $respuesta_token);

                $result = '';

                /*
                 * Manejo de errores
                 */
                try {

                    /**
                     * URLs
                     */
                    $uridos = $sisgestion . '/api/ServicePaa/objetos';
                    $urldos = 'http://' . $uridos;

                    //Datos de filtro
                    $post = <<<EOD
{
    "Vigencia":$vigencia
}
EOD;

                    //Token de autorizacion
                    $authorization = "Authorization: Bearer " . $respuesta_token;

                    /*
                     * Llamado CURL
                     */
                    $sesion = curl_init($urldos);

                    //Define el tipo de ejecución
                    curl_setopt($sesion, CURLOPT_HTTPHEADER, array('Content-Type: application/json', $authorization));
                    curl_setopt($sesion, CURLOPT_CUSTOMREQUEST, "GET");
                    curl_setopt($sesion, CURLOPT_RETURNTRANSFER, true);
                    curl_setopt($sesion, CURLOPT_POSTFIELDS, $post);
                    curl_setopt($sesion, CURLOPT_FOLLOWLOCATION, 1);

                    //Ejecuta la petición
                    $result = curl_exec($sesion);
                    //Se cierra la conexión
                    curl_close($sesion);

                    //verificar Message en result
                    $pos = strpos($result, 'Message');
                    if ($pos !== false) {
                        throw new Exception("La respuesta del servicio fue erronea; favor verificar.");
                    }

                    $resultt = array();
                    $respuesta_obj = array();
                    $resultt = json_decode($result);
                    //$this->logMessage("objetos_iguales Respuesta: " . $result);


                    foreach ($resultt as $res) {
                        $record = array();
                        foreach ($res as $key => $value) {
                            if (is_array($value)) {

                                $key = strtolower($key);
                                $re = array();
                                foreach ($value as $va) {
                                    $r = array();
                                    foreach ($va as $ke => $val) {
                                        $ke = strtolower($ke);

                                        $r[strtolower($ke)] = $val;
                                    }
                                    $re[] = $r;
                                }
                                $re = json_encode($re);
                                $record[strtolower($key)] = $re;
                            } else {
                                $key = strtolower($key);
                                $record[strtolower($key)] = $value;
                            }
                        }

                        $respuesta_obj[$record['id']] = $record;
                    }

                    $lineaspaa = explode(",", $cod_paa);

                    /**
                     * Todas las LineasPAA - 20200911
                     */
                    foreach ($lineaspaa as $value_linea) {

                        $cod_paa = $value_linea;

                        $uridos = $sisgestion . '/api/ServicePaa';
                        $urldos = 'http://' . $uridos;

                        $sql = <<<EOD
SELECT
ep.id_estudios_previos,
ep.id_anhos,
ep.id_area,
ep.codigopaa,
ar.area_sisgestion

FROM co_estudios_previos ep

JOIN area ar on ep.id_area = ar.id_area

where
ep.id_estudios_previos = $id_estudios_previos
and ep.codigopaa is not null  
EOD;
                        $records = CN_TABLE::executeSQL($sql);

                        if (count($records) > 0) {

                            $vigencia = $records[0]['id_anhos'];
                            $cod_depen = $records[0]['area_sisgestion'];
                            //$cod_paa = $records[0]['codigopaa'];

                            /* $post = '{
                              "Vigencia":' . $vigencia . ','
                              . '"CodigoDependencia":' . $cod_depen . ','
                              . '"CodigoPaa":"' . $cod_paa . '"}'; */
                            //Datos de filtro
                            $post = <<<EOD
{
    "Vigencia":$vigencia,
    "CodigoPaa":"$cod_paa"
}
EOD;
                            $this->logMessage("co_estudios_previos lineaPAA post: " . $post);

                            $authorization = "Authorization: Bearer " . $respuesta_token;

                            $sesion = curl_init($urldos);

                            curl_setopt($sesion, CURLOPT_HTTPHEADER, array('Content-Type: application/json', $authorization));
                            curl_setopt($sesion, CURLOPT_CUSTOMREQUEST, "POST");
                            curl_setopt($sesion, CURLOPT_RETURNTRANSFER, true);
                            curl_setopt($sesion, CURLOPT_POSTFIELDS, $post);
                            curl_setopt($sesion, CURLOPT_FOLLOWLOCATION, 1);

                            //Ejecuta la petición
                            $result = curl_exec($sesion);
                            //Se cierra la conexión
                            curl_close($sesion);

                            //verificar Message en result
                            $pos = strpos($result, 'Message');
                            if ($pos !== false) {
                                throw new Exception("La respuesta del servicio fue erronea; favor verificar.");
                            }

                            $resultt = array();
                            $respuesta = array();
                            $respuesta_linea = array();
                            $resultt = json_decode($result);
                            //$this->logMessage("LINEAS PAA Respuesta: " . $result);


                            foreach ($resultt as $res) {
                                $record_linea = array();
                                $record = array();
                                $i = 0;
                                foreach ($res as $key => $value) {
                                    if (is_array($value)) {

                                        $key = strtolower($key);
                                        $re = array();
                                        foreach ($value as $va) {
                                            $r = array();
                                            foreach ($va as $ke => $val) {
                                                $r[strtolower($ke)] = $val;
                                            }
                                            $re[] = $r;
                                            $r['idsisgestiondependencia'] = $cod_depen;
                                            $r['codigopaa'] = $cod_paa;

                                            //TipoRecurso: PGN, SGR , NNN((indicador de error de datos) no se debe procesar dicho rubro) - 202209070::LAVILA
                                            if ($r['tiporecurso'] != 'NNN') {
                                                $record[$i++] = array(
                                                    'numerosolicitud' => $r['numerosolicitud'],
                                                    'numerocdp' => $r['numerocdp'],
                                                    'fechacdp' => $r['fechacdp'],
                                                    'rubro' => $r['rubro'],
                                                    'tiporecurso' => $r['tiporecurso'],
                                                    'valor' => $r['valor'],
                                                    'idsisgestiondependencia' => $r['idsisgestiondependencia'],
                                                    'codigopaa' => $r['codigopaa']
                                                );
                                            }
                                        }
                                        $re = json_encode($re);

                                        $record_linea[strtolower($key)] = $re;
                                    } else {

                                        $key = strtolower($key);
                                        $record_linea[strtolower($key)] = $value;
                                    }
                                }
                                $respuesta_linea[] = $record_linea;
                            }


                            /**
                             * Crear cdp EP - 20200416::LAVILA
                             * CDPS de SGR y solo un proyecto - 20200513::LAVILA
                             * TipoRecurso: PGN, SGR , NNN((indicador de error de datos) no se debe procesar dicho rubro) - 202209070::LAVILA
                             */
                            foreach ($record as $value) {

                                $numerocdp = $value['numerocdp'];
                                $numerosolicitud = $value['numerosolicitud'];
                                $fechacdp = $value['fechacdp'];
                                $rubro = $value['rubro'];
                                $tiporecurso = $value['tiporecurso'];
                                $valor = $value['valor'];
                                $sgr_text = substr($value['rubro'], 0, 1);

                                /* $id_sgr = 0;
                                  if ($sgr_text == 'I') {
                                  $id_sgr = 1;
                                  } */
                                $id_sgr = 999;
                                if ($tiporecurso == 'PGN') {
                                    $id_sgr = 0;
                                }
                                if ($tiporecurso == 'SGR') {
                                    $id_sgr = 1;
                                }


                                $sql = <<<EOD
SELECT
proy.sgr as sgr_id,
proy.*
FROM co_proyecto_ep proy
where 
proy.id_estudios_previos = $id_estudios_previos and sgr = $id_sgr  
and (proy.id_cpo,proy.SGR) in (
        SELECT
        ID_CPO, SGR
        FROM co_cdps_all_v
        where
        cdp = $numerocdp
        and vigencia = $vigencia  
        and rn_cpo_asign = 1 and sgr = $id_sgr ) 
EOD;

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

                                if (count($proyc_ep) > 0) {

                                    $id_cpo = $proyc_ep[0]['id_cpo'];
                                    $sgr = $proyc_ep[0]['sgr_id'];

                                    $sql = <<<EOD
update co_proyecto_ep set valor = valor + '$valor' 
    where id_cpo = $id_cpo and id_estudios_previos = $id_estudios_previos and sgr = $sgr  
EOD;
                                    $this->conn->execute($sql);
                                } else {
                                    $sql = <<<EOD
insert into co_proyecto_ep  
(
ID_PROYECTO_EP,
ID_CPO,
ID_ESTUDIOS_PREVIOS,
VALOR,
SGR) 

SELECT
null as ID_PROYECTO_EP,
ID_CPO,
$id_estudios_previos as ID_ESTUDIOS_PREVIOS,
'$valor' as VALOR,
sgr as SGR
FROM co_cdps_all_v
where
cdp = $numerocdp
and vigencia = $vigencia  
and rn_cpo_asign = 1  
and sgr = $id_sgr                                          
EOD;
                                    $this->conn->execute($sql);
                                }

                                // Se agregan campos nuevos de cdp_ep segun sigestion - 20200528::LAVILA
                                $sql = <<<EOD
insert into co_cdps_ep  
(
ID_CDPS_EP,
ID_ESTUDIOS_PREVIOS,
ID_CPO_EP,
ID_CDP,
VALOR,
SGR,
NUMERO_SOLICITUD,
FECHA_CDP,
RUBRO
) 

SELECT
null as ID_CDPS_EP,
$id_estudios_previos as ID_ESTUDIOS_PREVIOS,
(select max(id_proyecto_ep) from co_proyecto_ep 
    where id_estudios_previos = $id_estudios_previos 
    and sgr = $id_sgr 
    and id_cpo in (SELECT max(ID_CPO) FROM co_cdps_all_v where cdp = $numerocdp and vigencia = $vigencia 
    and sgr = $id_sgr and rn_cpo_asign = 1)) as ID_CPO_EP,
cdp as ID_CDP,
'$valor' as VALOR,
sgr as SGR,
'$numerosolicitud' as NUMERO_SOLICITUD,
TO_DATE('$fechacdp', 'YYYY-MM-DD"T"HH24:MI:SS') as FECHA_CDP,
'$rubro' as RUBRO
                                    
FROM co_cdps_all_v
where
cdp = $numerocdp
and vigencia = $vigencia
and rn_cpo_asign = 1  
and sgr = $id_sgr                                      
EOD;
                                $this->conn->execute($sql);
                            }


                            /**
                             * LineaPAA  20200911
                             */
                            $idobjetoigual = 0;
                            if (count($respuesta_linea) > 0) {

                                $nombredependencia = $respuesta_linea[0]['nombredependencia'];
                                $valorvigencia = $respuesta_linea[0]['valorvigencia'];
                                $modalidadcontratacion = $respuesta_linea[0]['modalidadcontratacion'];
                                $mesinicio = $respuesta_linea[0]['mesinicio'];
                                $plazoestimadoejecucionendias = $respuesta_linea[0]['plazoestimadoejecucionendias'];
                                $valorvigenciafutura = $respuesta_linea[0]['valorvigenciafutura'];
                                $codigosunspsc = $respuesta_linea[0]['codigosunspsc'];
                                $idsisgestionmodalidad = $respuesta_linea[0]['idsisgestionmodalidadcontratacion'];
                                $idsisgestiondependencia = $respuesta_linea[0]['idsisgestiondependencia'];
                                $idobjetoigual = $respuesta_linea[0]['idobjetoigual'];
                                $tipobolsa = $respuesta_linea[0]['tipobolsa'];

                                $sql = <<<EOD
insert into co_codigopaa_ep (id_estudios_previos,codigopaa,nombredependencia,valorvigencia,modalidadcontratacion,
    mesinicio,plazoestimadoejecucionendias,valorvigenciafutura,codigosunspsc,
        idsisgestionmodalidad,idsisgestiondependencia,idobjetoigual,tipobolsa) 
values ('$id_estudios_previos','$cod_paa','$nombredependencia','$valorvigencia','$modalidadcontratacion',
    '$mesinicio', '$plazoestimadoejecucionendias','$valorvigenciafutura','$codigosunspsc',
        '$idsisgestionmodalidad','$idsisgestiondependencia','$idobjetoigual','$tipobolsa')                                         
EOD;
                                $this->conn->execute($sql);
                            }

                            /**
                             * Objetos Iguales por lineaPAA - 20200911
                             */
                            if (isset($respuesta_obj[$idobjetoigual])) {

                                $objeto_obj = $respuesta_obj[$idobjetoigual]['objeto'];
                                $vigencia_obj = $respuesta_obj[$idobjetoigual]['vigencia'];
                                $cantidad_obj = $respuesta_obj[$idobjetoigual]['cantidad'];

                                $sql = <<<EOD
insert into co_ep_objetos_iguales (id_co_ep,id_estudios_previos,VALOR_TEXTO,
    idobjetoigual,vigencia,cantidad) 
values (null,'$id_estudios_previos','$objeto_obj',
    '$idobjetoigual','$vigencia_obj','$cantidad_obj')                                        
EOD;
                                $this->conn->execute($sql);
                            }
                        }
                    }
                } catch (Exception $e) {
                    $this->logMessage("ERROR!!!");
                    $this->logMessage($e->getMessage());
                }

                $this->conn->commit();
            }
        }

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


            /*
             * (SGC-1, ANM-2, SGR-3, CYC-4, COL-5, INCI-6, LOCAL-7)
             */

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

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


                $int++;
            }



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

            if ($request['bandera_editar'] == 1 && $list_data_post[0]['estado_general'] != null && $entidadCliente == 2) {
                $this->logMessage('Entro en estado general');
                try {

                    $this->logMessage('Entro en estado general');

                    $id_estudios_previos = $list_data_post[0]['id_estudios_previos'];

                    /*
                     * GENERAMOS Los dos reportes 
                     */
                    //BORRADOR EP
                    $nombreArchivo = "estudios_previos_" . $id_estudios_previos;
                    $nombre_reporte_uno = $nombreArchivo . ".pdf";
                    $this->logMessage("estudio_previo :" . $nombreArchivo);
                    $this->logMessage("PHP URI:!!" . $url_html);
                    //Generamos PDF JASPER
                    $url = $url_html;
                    $url = $url . 'co_pdf_ep/pdf_borrador';
                    $url = $url . '?id_estudios_previos=' . $id_estudios_previos;
                    $url = $url . '&save=true';

                    $adjunto_nombre = $nombre_reporte_uno;



                    $this->logMessage('URISS!!!');
                    $this->logMessage('URL--' . $url);
                    $ch = curl_init($url);

                    //Parametros de retorno en cURL
                    curl_setopt($ch, CURLOPT_HEADER, 0);
                    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Skip SSL Verification
                    //Ejecuta la petición
                    $rta = curl_exec($ch);
                    //Se cierra la conexión
                    curl_close($ch);

                    //Certificado Insuficiencia de personal

                    $nombreArchivo = "estudio_previo_cer_" . $id_estudios_previos;
                    $nombre_reporte = $nombreArchivo . ".pdf";
                    $this->logMessage("estudio_previo :" . $nombreArchivo);
                    $this->logMessage("JASPER:!!" . $url_jasper);
                    //Generamos PDF JASPER
                    $url = $url_jasper;
                    $url = $url . 'gen_cer_ins_per&format=PDF&PARAM_id_mod=18';
                    $url = $url . '&PARAM_nombre_reporte=' . $nombre_reporte;
                    $url = $url . '&PARAM_tag_adjunto_modulo=true';
                    $url = $url . '&PARAM_id_estudios_previos=' . $id_estudios_previos;
                    //$url = $url . '&format=PDF';//


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

                    //Parametros de retorno en cURL
                    curl_setopt($ch, CURLOPT_HEADER, 0);
                    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Skip SSL Verification
                    //Ejecuta la petición
                    $rta = curl_exec($ch);
                    //Se cierra la conexión
                    curl_close($ch);


                    $this->logMessage('REGRESO');

                    $this->logMessage(' PREPARO ENVIO');

                    $uploadDir = sfConfig::get("sf_upload_dir");
                    $adjunto = true;
                    $ruta = $uploadDir . '/adj_estudios_previos/';
                    $array_adjuntos = array(
                        $adjunto_nombre => $adjunto_nombre,
                        $nombre_reporte => $nombre_reporte
                    );
                    //$array_adjuntos=array();  
                    //$this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
                    //$this->conn->beginTransaction();

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

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

                    $sql = <<<EOD
select tab0.* from co_estudios_previos_v tab0 where tab0.id_estudios_previos = $id_estudios_previos
EOD;

                    $records = CN_TABLE::executeSQL($sql);
                    $nroestudio = $records[0]['id_estudios_previos'];
                    $responsable = $records[0]['nombre_responsable'];
                    $supervisor = $records[0]['razon_soc_sup'];
                    $area = $records[0]['area'];
                    $valor = $records[0]['valor'];
                    $valor = number_format($valor);
                    $modalidad = $records[0]['modalidad'];
                    $abogado = $records[0]['abogado'];
                    $proceso = $records[0]['proceso'];
                    $objeto = $records[0]['descripcion'];
                    $id_mod_sel = $records[0]['id_modalidad_sel'];
                    $fecha_c = $records[0]['fecha_creacion'];
                    $fecha_a = $records[0]['fecha_aprobado'];


                    $currentUri = "";

                    //PARAMETROS GENERALES

                    if (!isset($request["email_envio"])) {
                        $request["email_envio"] = $correoEnvio;
                    }
                    //$adjunto = false;
                    //$ruta = "";

                    /*
                     * Variable Memcache
                     */

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

                    //$array_adjuntos = array();
                    $documento = 'ANM';
                    $tipo_doc = '1';
                    $email = 'contratacion@anm.gov.co';
                    $nombre = 'Talento Humano';
                    $rol = 'Usuario de Talento Humano';

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

                    $datos_usuario = array();

                    if ($parametros != "") {
                        $datos_usuario = explode('/', $parametros);
                    }
                    if ($list_data_post[0]['estado_general'] == 1) {

                        $documento = 'ANM';
                        $tipo_doc = '1';
                        $email = 'felipe.plazas@anm.gov.co';
                        $nombre = 'Talento Humano';
                        $rol = 'Usuario de Talento Humano';

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

                        $datos_usuario = array();

                        if ($parametros != "") {
                            $datos_usuario = explode('/', $parametros);
                        }

                        $subject = "Visto Bueno Talento Humano";

                        //CUERPO DEL MENSAJE
                        $body = "<html><body> </body></html>";
//Body
                        $body = <<<EOD
                <html><body> 
                <br/>
                Bogotá, $fecha_creacion
                <br/>
                <br/>
                Señor(a)<br/>
                $nombre<br/>
                $rol
                <br/><br/>
                Se dio el visto bueno a el certificado de insuficiencia de personal, al estudio Número : $nroestudio<br/><br/>
                <b>No. Estudio Previo</b> $nroestudio<br/><br/>
                <b>Valor Estudio Previo:</b> $valor<br/><br/>
                <b>Area:</b> $area<br/><br/>
                <b>Responsable:</b> $responsable<br/><br/>
                <b>Supervisor:</b> $supervisor<br/><br/>
                <b>Objeto o Contratista:</b> $objeto<br/><br/>
                <br/><br/>
                </body></html>
EOD;
                        CN_TABLE::envioCorreo($request, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $body);

                        /**
                         * Correo copia - 20200715
                         */
                        $documento = 'ANM';
                        $tipo_doc = '1';
                        $email = "viviana.paramo@anm.gov.co";
                        $nombre = 'viviana paramo';

                        $parametros = $documento . ";" . $tipo_doc . ";" . $email . ";" . $nombre . ";Envio notificacion";
                        $datos_usuario = array();

                        if ($parametros != "") {
                            $datos_usuario = explode('/', $parametros);
                        }

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

                    if ($list_data_post[0]['estado_general'] == 2) {

                        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
                        $this->conn->beginTransaction();
//
//
                        if ($id_mod_sel == 1) {


                            $sql = <<<EOD
SELECT ID_DOCUMENTO_EP,
       ID_ESTUDIOS_PREVIOS,
       ID_DOCUM_MODALIDAD,
       FECHA_REGISTRO,
       OBSERVACIONES,
       ADJUNTO
FROM CO_DOCUMENTO_EP WHERE 1=1 AND ID_ESTUDIOS_PREVIOS = $id_estudios_previos and ID_DOCUM_MODALIDAD=318 OR ID_DOCUM_MODALIDAD=316   AND ID_ESTUDIOS_PREVIOS = $id_estudios_previos  
EOD;

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



                            if (count($documento) > 0) {

                                foreach ($documento as $doc) {
                                    $id_doc = $doc['id_documento_ep'];
                                    $sql = <<<EOD
UPDATE CO_DOCUMENTO_EP
   SET        ADJUNTO = '$adjunto_nombre'
WHERE ID_DOCUMENTO_EP = $id_doc AND ID_DOCUM_MODALIDAD=318
EOD;
                                    $this->conn->execute($sql);
                                    $sql = <<<EOD
UPDATE CO_DOCUMENTO_EP
   SET        ADJUNTO = '$nombre_reporte'
WHERE ID_DOCUMENTO_EP = $id_doc AND ID_DOCUM_MODALIDAD=316
EOD;
                                    $this->conn->execute($sql);
                                }
                            } else {
                                $sql = <<<EOD
INSERT INTO CO_DOCUMENTO_EP
(
  ID_DOCUMENTO_EP,
  ID_ESTUDIOS_PREVIOS,
  ID_DOCUM_MODALIDAD,
  FECHA_REGISTRO,
  OBSERVACIONES,
  ADJUNTO
)
VALUES
(
  null,
  $id_estudios_previos,
  318,
  SYSDATE,
  '',
  '$adjunto_nombre'
) 
EOD;
                                $this->conn->execute($sql);


                                $sql = <<<EOD
INSERT INTO CO_DOCUMENTO_EP
(
  ID_DOCUMENTO_EP,
  ID_ESTUDIOS_PREVIOS,
  ID_DOCUM_MODALIDAD,
  FECHA_REGISTRO,
  OBSERVACIONES,
  ADJUNTO
)
VALUES
(
  null,
  $id_estudios_previos,
  316,
  SYSDATE,
  '',
  '$nombre_reporte'
) 
EOD;

                                $this->conn->execute($sql);
                            }
                        } else if ($id_mod_sel = 2) {


                            $sql = <<<EOD
SELECT ID_DOCUMENTO_EP,
       ID_ESTUDIOS_PREVIOS,
       ID_DOCUM_MODALIDAD,
       FECHA_REGISTRO,
       OBSERVACIONES,
       ADJUNTO
FROM CO_DOCUMENTO_EP WHERE 1=1 AND ID_ESTUDIOS_PREVIOS = $id_estudios_previos and ID_DOCUM_MODALIDAD=317 OR ID_DOCUM_MODALIDAD=315    AND ID_ESTUDIOS_PREVIOS = $id_estudios_previos 
EOD;

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

                            if (count($documento) > 0) {
                                foreach ($documento as $doc) {
                                    $id_doc = $doc['id_documento_ep'];
                                    $sql = <<<EOD
UPDATE CO_DOCUMENTO_EP
   SET        ADJUNTO = '$adjunto_nombre'
WHERE ID_DOCUMENTO_EP = $id_doc  and ID_DOCUM_MODALIDAD=317
EOD;
                                    $this->conn->execute($sql);
                                    $sql = <<<EOD
UPDATE CO_DOCUMENTO_EP
   SET        ADJUNTO = '$nombre_reporte'
WHERE ID_DOCUMENTO_EP = $id_doc  and ID_DOCUM_MODALIDAD=315
EOD;
                                    $this->conn->execute($sql);
                                }
                            } else {

                                $sql = <<<EOD
INSERT INTO CO_DOCUMENTO_EP
(
  ID_DOCUMENTO_EP,
  ID_ESTUDIOS_PREVIOS,
  ID_DOCUM_MODALIDAD,
  FECHA_REGISTRO,
  OBSERVACIONES,
  ADJUNTO
)
VALUES
(
  null,
  $id_estudios_previos,
  317,
  SYSDATE,
  '',
  '$adjunto_nombre'
)                  
EOD;
//
                                $this->conn->execute($sql);

                                $sql = <<<EOD

INSERT INTO CO_DOCUMENTO_EP
(
ID_DOCUMENTO_EP,
ID_ESTUDIOS_PREVIOS,
ID_DOCUM_MODALIDAD,
FECHA_REGISTRO,
OBSERVACIONES,
ADJUNTO
)
VALUES
(
null,
$id_estudios_previos,
315,
SYSDATE,
'',
'$nombre_reporte'
)
EOD;

                                $this->conn->execute($sql);
                            }
                        }
                        $subject = "Alerta Generacion Certificado de Insuficiencia";


                        //CUERPO DEL MENSAJE
                        $body = "<html><body> </body></html>";
//Body
                        $body = <<<EOD
                <html><body> 
                <br/>
                Bogotá, $fecha_creacion
                <br/>
                <br/>
                Señor(a)<br/>
                $nombre<br/>
                $rol
                <br/><br/>
                Se genero el Certificado de insuficiencia de personal, al estudio Número : $nroestudio<br/><br/>
                <b>No. Estudio Previo</b> $nroestudio<br/><br/>
                <b>Valor Estudio Previo:</b> $valor<br/><br/>
                <b>Area:</b> $area<br/><br/>
                <b>Responsable:</b> $responsable<br/><br/>
                <b>Supervisor:</b> $supervisor<br/><br/>
                <b>Objeto o Contratista:</b> $objeto<br/><br/>
                <br/><br/>
                </body></html>
EOD;

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

                        /**
                         * Correo copia - 20200715
                         */
                        $documento = 'ANM';
                        $tipo_doc = '1';
                        $email = "viviana.paramo@anm.gov.co";
                        $nombre = 'viviana paramo';

                        $parametros = $documento . ";" . $tipo_doc . ";" . $email . ";" . $nombre . ";Envio notificacion";
                        $datos_usuario = array();

                        if ($parametros != "") {
                            $datos_usuario = explode('/', $parametros);
                        }

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

                    $this->conn->commit();
                } catch (Exception $ex) {

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

            if ($request['bandera_editar'] == 2 && $entidadCliente == 2 && $list_data_post[0]['estado_objeto_iguales'] == 2) {

                try {

                    $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
                    $this->conn->beginTransaction();
                    $id_estudios_previos = $list_data_post[0]['id_estudios_previos'];
                    $id_modalidad_sel = $list_data_post[0]['id_modalidad_sel'];


                    //Certificado Insuficiencia de personal
                    $nombreArchivo = "estudio_previo_cer_obj_iguales_" . $id_estudios_previos;
                    $nombre_reporte = $nombreArchivo . ".pdf";
                    $this->logMessage("estudio_previo :" . $nombreArchivo);
                    $this->logMessage("JASPER:!!" . $url_jasper);

                    if ($id_modalidad_sel == 1) {

                        $sql = <<<EOD
SELECT ID_DOCUMENTO_EP,
       ID_ESTUDIOS_PREVIOS,
       ID_DOCUM_MODALIDAD,
       FECHA_REGISTRO,
       OBSERVACIONES,
       ADJUNTO
FROM CO_DOCUMENTO_EP WHERE 1=1 AND ID_ESTUDIOS_PREVIOS = $id_estudios_previos and ID_DOCUM_MODALIDAD=334     
EOD;



                        $documento = CN_TABLE::executeSQL($sql);
                        $id_doc = $documento[0]['id_documento_ep'];
                        if (count($documento) > 0) {

                            $sql = <<<EOD
UPDATE CO_DOCUMENTO_EP
   SET        ADJUNTO = '$nombre_reporte'
WHERE ID_DOCUMENTO_EP = $id_doc    
EOD;
                        } else {

                            $sql = <<<EOD
INSERT INTO CO_DOCUMENTO_EP
(
  ID_DOCUMENTO_EP,
  ID_ESTUDIOS_PREVIOS,
  ID_DOCUM_MODALIDAD,
  FECHA_REGISTRO,
  OBSERVACIONES,
  ADJUNTO
)
VALUES
(
  null,
  $id_estudios_previos,
  334,
  SYSDATE,
  '',
  '$nombre_reporte'
) 
EOD;
                        }
                    } else if ($id_modalidad_sel == 2) {

                        $sql = <<<EOD
SELECT ID_DOCUMENTO_EP,
       ID_ESTUDIOS_PREVIOS,
       ID_DOCUM_MODALIDAD,
       FECHA_REGISTRO,
       OBSERVACIONES,
       ADJUNTO
FROM CO_DOCUMENTO_EP WHERE 1=1 AND ID_ESTUDIOS_PREVIOS = $id_estudios_previos and ID_DOCUM_MODALIDAD=333     
EOD;

                        $documento = CN_TABLE::executeSQL($sql);
                        $id_doc = $documento[0]['id_documento_ep'];

                        if (count($documento) > 0) {


                            $sql = <<<EOD
UPDATE CO_DOCUMENTO_EP
   SET        ADJUNTO = '$nombre_reporte'
WHERE ID_DOCUMENTO_EP = $id_doc    
EOD;
                        } else {

                            $sql = <<<EOD
INSERT INTO CO_DOCUMENTO_EP
(
  ID_DOCUMENTO_EP,
  ID_ESTUDIOS_PREVIOS,
  ID_DOCUM_MODALIDAD,
  FECHA_REGISTRO,
  OBSERVACIONES,
  ADJUNTO
)
VALUES
(
  null,
  $id_estudios_previos,
  333,
  SYSDATE,
  '',
  '$nombre_reporte'
) 
EOD;
                        }
                    }

                    $this->conn->execute($sql);

                    //COMMIT
                    $this->conn->commit();


                    //Generamos PDF JASPER
                    $url = $url_jasper;
                    $url = $url . 'gen_cer_obj_igu&format=PDF&PARAM_id_mod=18';
                    $url = $url . '&PARAM_nombre_reporte=' . $nombre_reporte;
                    $url = $url . '&PARAM_tag_adjunto_modulo=true';
                    $url = $url . '&PARAM_id_estudios_previos=' . $id_estudios_previos;
                    //$url = $url . '&format=PDF';//


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

                    //Parametros de retorno en cURL
                    curl_setopt($ch, CURLOPT_HEADER, 0);
                    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Skip SSL Verification
                    //Ejecuta la petición
                    $rta = curl_exec($ch);
                    //Se cierra la conexión
                    curl_close($ch);
                } catch (Exception $ex) {

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

            if (isset($request['cierra_version'])) {


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

                    $id_estudios_previos = $list_data_post[0]['id_estudios_previos'];

                    //actualiza la fecha de cierre del EP
                    $sql = <<<EOD
UPDATE CO_ESTUDIOS_PREVIOS SET FECHA_CIERRE = TRUNC(sysdate) 
    WHERE id_estudios_previos = $id_estudios_previos
EOD;

                    $this->conn->execute($sql);



                    //PARA AQUELLOS DONDE NO DEBE EXISTIR PROCESO CREAR SELECCION_EP

                    $sql = "
        select tab0.*,tab1.aplica_proceso AS APLICA_PROCESO 
            from co_estudios_previos tab0
            left join co_modalidad_sel tab1 ON tab1.id_modalidad_sel = tab0.id_modalidad_sel
            where tab0.id_estudios_previos = $id_estudios_previos
        ";

                    $records = CN_TABLE::executeSQL($sql);
                    $aplica_proceso = $records[0]['aplica_proceso'];

                    if ($aplica_proceso == 0) {


                        $sql = <<<EOD
            INSERT INTO CO_SELECCION_EP (ID_ESTUDIOS_PREVIOS,FECHA_INICIO,ESTADO) 
                VALUES($id_estudios_previos,sysdate,1)
EOD;

                        // $this->conn->execute($sql);
                    }

                    $this->conn->commit();




                    //ENVIO CORREO 3 - Notificacion de Cierre de Proceso
//PARAMETROS GENERALES

                    $subject = "Notificacion de Cierre de Proceso";
//Email Envio
                    if (!isset($request["email_envio"])) {
                        $request["email_envio"] = "modulocontratacion@sgc.gov.co";
                    }
                    $adjunto = false;
                    $ruta = "";

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

                    $array_adjuntos = array();


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

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




                    $sql = <<<EOD
select tab0.* from co_estudios_previos_v tab0 where tab0.id_estudios_previos = $id_estudios_previos
EOD;

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

                    $responsable = $records[0]['nombre_responsable'];
                    $area = $records[0]['area'];
                    $valor = $records[0]['valor'];
                    $valor = number_format($valor);
                    $modalidad = $records[0]['modalidad'];
                    $abogado = $records[0]['abogado'];
                    $proceso = $records[0]['proceso'];
                    $objeto = $this->htmlClear($records[0]['objeto']);
                    //Obtenemos el objeto dependiendo de la entidad
                    switch ($entidadCliente) {
                        CASE "1"://SGC
                            $objeto = $this->htmlClear($records[0]['objeto']);
                            break;
                        default:
                            //Se ubica el objeto por le campo del estudio previo que en su codigo tenga la palabra objeto
                            //OBTENEMOS LOS CAMPOS QUE VIENEN DESDE EL ESTUDIO PREVIO
                            $sql = <<<EOD
                select 
tab2.campo_ep.id_campo_ep as id_campo_ep,
tab2.campo_ep.codigo as codigo,
tab2.campo_ep.descripcion AS descripcion,                     
tab2.campo_ep.estado as estado,
tab2.campo_ep.tipo_campo as tipo_campo,
case when tab7.valor is null then tab2.default_value else tab7.valor end as valor,  
tab2.campo_ep.fase_ep.orden as HOJA,
tab2.orden
from co_estudios_previos tab0
join co_modalidad_sel tab1 on tab0.id_modalidad_sel=tab1.id_modalidad_sel
left join co_campo_modalidad tab2 on tab1.id_modalidad_sel=tab2.id_modalidad_sel
left join co_detalle_ep tab7 on tab0.id_estudios_previos=tab7.id_estudios_previos and tab2.campo_ep.id_campo_ep=tab7.id_campo_ep
left join co_campo_obliga tab8 ON tab8.id_modalidad_sel = tab0.id_modalidad_sel and tab8.id_campo_ep = tab2.campo_ep.id_campo_ep    
where
1=1  
and tab0.ID_ESTUDIOS_PREVIOS = $id_estudios_previos
order by tab2.campo_ep.fase_ep.orden,tab2.orden  
EOD;
                            //$st = $consul->execute($sql);
                            $campos = CN_TABLE::executeSQL($sql);
                            $obj = "";
                            foreach ($campos as $rec) {
                                $codigo = $rec['CODIGO'];
                                $valor = $rec['VALOR'];
                                $valor = $this->htmlClear($purifier->purify($valor));
                                if (stristr(strtoupper($codigo), 'OBJETO') !== FALSE) {
                                    $obj = $valor;
                                }
                            }
                            $objeto = $this->htmlClear($obj);
                            break;
                    }


//1. Se realiza Consulta a la tabla de administracion alarmas para saber a quien van dirigidos los correos

                    $sql = <<<EOD
select tab2.num_doc, tab2.id_tipo_doc, tab2.razon_soc, nvl(tab3.mail,'mesadeayuda@sgc.gov.co') email, tab4.descripcion as rol
from co_administra_alarma tab0
join co_rol_proceso_v tab1 ON tab1.id_rol = tab0.id_rol and tab1.id_estudios_previos = $id_estudios_previos
join interceros_v tab2 ON tab2.id_mae_ter = tab1.id_mae_ter
join interceros_du_dir_v tab3 ON tab3.id_mae_ter = tab2.id_mae_ter
join co_rol tab4 ON tab4.id_rol = tab0.id_rol                        
where tab0.id_alarma = 3 and tab1.id_mae_ter is not null
EOD;

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

                    foreach ($records as $correos) {

                        $documento = $correos['num_doc'];
                        $tipo_doc = $correos['id_tipo_doc'];
                        $nombre = $correos['razon_soc'];
                        $email = $correos['email'];
                        $rol = $correos['rol'];

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

                        $datos_usuario = array();

                        if ($parametros != "") {
                            $datos_usuario = explode('/', $parametros);
                        }

//CUERPO DEL MENSAJE
                        $body = "<html><body> </body></html>";
//Body
                        $body = <<<EOD
                <html><body> 
                <br/>
                Bogotá, $fecha_creacion
                <br/>
                <br/>
                Señor(a)<br/>
                $nombre<br/>
                $rol
                <br/><br/>
                Por medio de la presente se notifica <b>el cierre y numeración</b> del proceso de estudios previos detallado a continuación:<br/><br/>
                <b>Proceso No.</b> $proceso<br/><br/>
                <b>Area:</b> $area<br/><br/>
                <b>Modalidad de Seleccion:</b> $modalidad<br/><br/>
                <b>Valor:</b> $valor<br/><br/>
                <b>Responsable:</b> $responsable<br/><br/>
                <b>Abogado:</b> $abogado<br/><br/>
                <b>Objeto:</b> $objeto<br/><br/>
                <br/><br/>
                
                </body></html>
EOD;

                        //SI NO EXISTE CORREO SE ENVIA A MESA DE AYUDA  




                        $currentUri = "";

                        CN_TABLE::envioCorreo($request, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $body);
                    }
                } catch (Exception $e) {

                    //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
                    //$this->conn->rollback();
                }
                //$this->conn->commit();
            }
            //$this->conn->commit();
            /*
              if(isset($request['estado_general'])){
              try{

              $id_estudios_previos = $list_data_post[0]['id_estudios_previos'];

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

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

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

              $sql = <<<EOD
              select tab0.* from co_estudios_previos_v tab0 where tab0.id_estudios_previos = $id_estudios_previos
              EOD;

              $records = CN_TABLE::executeSQL($sql);
              $nroestudio = $records[0]['id_estudio_previo'];
              $responsable = $records[0]['nombre_responsable'];
              $area = $records[0]['area'];
              $valor = $records[0]['valor'];
              $valor = number_format($valor);
              $modalidad = $records[0]['modalidad'];
              $abogado = $records[0]['abogado'];
              $proceso = $records[0]['proceso'];
              $objeto = $this->htmlClear($records[0]['objeto']);



              $currentUri = "";

              //PARAMETROS GENERALES

              $subject = "Notificacion de Estado Botón VoBo";

              if (!isset($request["email_envio"])) {
              $request["email_envio"] = "lavila@sofhouse.net";
              }
              $adjunto = false;
              $ruta = "";
             */
            /*
             * Variable Memcache
             */
            /*
              $progress_key = $request['progress_key'] . $request['username'];
              $this->logMessage("Valor de progress_key: " . $progress_key);

              $array_adjuntos = array();

              $documento='664318';
              $tipo_doc='1';
              $email='mparedes@sofhouse.net';
              $nombre='Manuel Paredes';
              $rol='ADmin';

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

              $datos_usuario = array();

              if ($parametros != "") {
              $datos_usuario = explode('/', $parametros);
              }

              //CUERPO DEL MENSAJE
              $body = "<html><body> </body></html>";
              //Body
              $body = <<<EOD
              <html><body>
              <br/>
              Bogotá, $fecha_creacion
              <br/>
              <br/>
              Señor(a)<br/>
              $nombre<br/>
              $rol
              <br/><br/>
              Por medio de la presente se notifica <b>el estado con botón VoBo</b> del proceso de estudios previos detallado a continuación:<br/><br/>
              <b>No. Estudio Previo</b> $nroestudio<br/><br/>
              <b>Proceso No.</b> $proceso<br/><br/>
              <b>Area:</b> $area<br/><br/>
              <b>Modalidad de Seleccion:</b> $modalidad<br/><br/>
              <b>Valor:</b> $valor<br/><br/>
              <b>Responsable:</b> $responsable<br/><br/>
              <b>Abogado:</b> $abogado<br/><br/>
              <b>Objeto:</b> $objeto<br/><br/>
              <br/><br/>

              </body></html>
              EOD;



              CN_TABLE::envioCorreo($request, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $body);
              $this->conn->commit();
              } catch (Exception $ex) {

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

              }
              } */

            /**
             * Si esta $request['autorizado_extra_tag'] actualiza fecha y campo - 20200826
             */
            if (isset($request['autorizado_extra_tag'])) {

                $id_estudios_previos = $request['id_estudios_previos'];

                $sql = <<<EOD
update co_estudios_previos set

autorizado_extra = 1, fec_est_ep_gen_autextra = sysdate

where
id_estudios_previos = $id_estudios_previos
EOD;
                CN_TABLE::executeSQL($sql);
            }





            /**
             * Guardar para ANM datos de sigestion - 20200416::LAVILA
             */
            if ($entidadCliente == 2) {
                $this->logMessage('Entro en datos de sigestion');


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


                $id_estudios_previos = $request['id_estudios_previos'];
                $id_modalidad_sel = $request['id_modalidad_sel'];

                $sql = <<<EOD
SELECT
cammod.id_campo_modalidad,
cammod.id_modalidad_sel,                        
camep.id_campo_ep,
camep.codigo

FROM co_campo_modalidad cammod

join co_campo_ep camep
on camep.id_campo_ep = cammod.campo_ep.id_campo_ep

where
cammod.id_modalidad_sel = $id_modalidad_sel 
and lower(camep.codigo) like '%objeto%' 
EOD;
                $records = CN_TABLE::executeSQL($sql);
                $this->logMessage('records::' . count($records));

                if (count($records) > 0 && isset($request['objeto_lineapaa'])) {

                    $objeto_lineapaa = $request['objeto_lineapaa'];
                    $id_campo_ep = $records[0]['id_campo_ep'];

                    $this->logMessage('id_campo_ep::' . $id_campo_ep);

                    $sql = <<<EOD
delete
FROM co_detalle_ep
where
id_estudios_previos = $id_estudios_previos
and id_campo_ep = $id_campo_ep 
EOD;
                    $this->conn->execute($sql);

                    $sql = <<<EOD
insert into co_detalle_ep (ID_DETALLE_EP,ID_ESTUDIOS_PREVIOS,ID_CAMPO_EP,VALOR)
values (null, $id_estudios_previos, $id_campo_ep, '$objeto_lineapaa ') 
EOD;
                    $this->conn->execute($sql);
                }


                /**
                 * Buscar CDP y generar para EP - 20200416
                 */
                $sisgestion = sfConfig::get('app_sisgestion');

                if (isset($request['id_anhos'])) {
                    $vigencia = $request['id_anhos'];
                } else {
                    $vigencia = date('Y');
                }
                //codigo_dependencia
                if (isset($request['idsisgestiondependencia'])) {
                    $cod_depen = $request['idsisgestiondependencia'];
                } else {
                    $cod_depen = '';
                }
                //codigo_paa
                if (isset($request['codigopaa'])) {
                    $cod_paa = $request['codigopaa'];
                } else {
                    $cod_paa = '';
                }

                /**
                 * Solicitar token de conexion - 20200910
                 */
                $respuesta_token = CN_TABLE::solicitarToken();
                $this->logMessage("estudios_previos Token: " . $respuesta_token);

                $result = '';

                /*
                 * Manejo de errores
                 */
                try {

                    /**
                     * URLs
                     */
                    $uridos = $sisgestion . '/api/ServicePaa/objetos';
                    $urldos = 'http://' . $uridos;

                    //Datos de filtro
                    $post = <<<EOD
{
    "Vigencia":$vigencia
}
EOD;

                    //Token de autorizacion
                    $authorization = "Authorization: Bearer " . $respuesta_token;

                    /*
                     * Llamado CURL
                     */
                    $sesion = curl_init($urldos);

                    //Define el tipo de ejecución
                    curl_setopt($sesion, CURLOPT_HTTPHEADER, array('Content-Type: application/json', $authorization));
                    curl_setopt($sesion, CURLOPT_CUSTOMREQUEST, "GET");
                    curl_setopt($sesion, CURLOPT_RETURNTRANSFER, true);
                    curl_setopt($sesion, CURLOPT_POSTFIELDS, $post);
                    curl_setopt($sesion, CURLOPT_FOLLOWLOCATION, 1);

                    //Ejecuta la petición
                    $result = curl_exec($sesion);
                    //Se cierra la conexión
                    curl_close($sesion);

                    //verificar Message en result
                    $pos = strpos($result, 'Message');
                    if ($pos !== false) {
                        throw new Exception("La respuesta del servicio fue erronea; favor verificar.");
                    }

                    $resultt = array();
                    $respuesta_obj = array();
                    $resultt = json_decode($result);
                    //$this->logMessage("objetos_iguales Respuesta: " . $result);


                    foreach ($resultt as $res) {
                        $record = array();
                        foreach ($res as $key => $value) {
                            if (is_array($value)) {

                                $key = strtolower($key);
                                $re = array();
                                foreach ($value as $va) {
                                    $r = array();
                                    foreach ($va as $ke => $val) {
                                        $ke = strtolower($ke);

                                        $r[strtolower($ke)] = $val;
                                    }
                                    $re[] = $r;
                                }
                                $re = json_encode($re);
                                $record[strtolower($key)] = $re;
                            } else {
                                $key = strtolower($key);
                                $record[strtolower($key)] = $value;
                            }
                        }

                        $respuesta_obj[$record['id']] = $record;
                    }

                    $lineaspaa = explode(",", $cod_paa);

                    /**
                     * Todas las LineasPAA - 20200911
                     */
                    foreach ($lineaspaa as $value_linea) {

                        $cod_paa = $value_linea;

                        $uridos = $sisgestion . '/api/ServicePaa';
                        $urldos = 'http://' . $uridos;

                        $sql = <<<EOD
SELECT
ep.id_estudios_previos,
ep.id_anhos,
ep.id_area,
ep.codigopaa,
ar.area_sisgestion

FROM co_estudios_previos ep

JOIN area ar on ep.id_area = ar.id_area

where
ep.id_estudios_previos = $id_estudios_previos
and ep.codigopaa is not null  
EOD;
                        $records = CN_TABLE::executeSQL($sql);

                        if (count($records) > 0) {


                            $vigencia = $records[0]['id_anhos'];
                            $cod_depen = $records[0]['area_sisgestion'];
                            //$cod_paa = $records[0]['codigopaa'];

                            /* $post = '{
                              "Vigencia":' . $vigencia . ','
                              . '"CodigoDependencia":' . $cod_depen . ','
                              . '"CodigoPaa":"' . $cod_paa . '"}'; */
                            //Datos de filtro
                            $post = <<<EOD
{
    "Vigencia":$vigencia,
    "CodigoPaa":"$cod_paa"
}
EOD;

                            $authorization = "Authorization: Bearer " . $respuesta_token;

                            $sesion = curl_init($urldos);

                            curl_setopt($sesion, CURLOPT_HTTPHEADER, array('Content-Type: application/json', $authorization));
                            curl_setopt($sesion, CURLOPT_CUSTOMREQUEST, "POST");
                            curl_setopt($sesion, CURLOPT_RETURNTRANSFER, true);
                            curl_setopt($sesion, CURLOPT_POSTFIELDS, $post);
                            curl_setopt($sesion, CURLOPT_FOLLOWLOCATION, 1);

                            //Ejecuta la petición
                            $result = curl_exec($sesion);
                            //Se cierra la conexión
                            curl_close($sesion);

                            //verificar Message en result
                            $pos = strpos($result, 'Message');
                            if ($pos !== false) {
                                throw new Exception("La respuesta del servicio fue erronea; favor verificar.");
                            }

                            $resultt = array();
                            $respuesta = array();
                            $respuesta_linea = array();
                            $resultt = json_decode($result);
                            //$this->logMessage("LINEAS PAA Respuesta: " . $result);


                            foreach ($resultt as $res) {
                                $record_linea = array();
                                $record = array();
                                $i = 0;
                                foreach ($res as $key => $value) {
                                    if (is_array($value)) {

                                        $key = strtolower($key);
                                        $re = array();

                                        foreach ($value as $va) {
                                            $r = array();
                                            foreach ($va as $ke => $val) {
                                                $r[strtolower($ke)] = $val;
                                            }
                                            $re[] = $r;
                                            $r['idsisgestiondependencia'] = $cod_depen;
                                            $r['codigopaa'] = $cod_paa;


                                            //TipoRecurso: PGN, SGR , NNN((indicador de error de datos) no se debe procesar dicho rubro) - 202209070::LAVILA
                                            if ($r['tiporecurso'] != 'NNN') {
                                                $record[$i++] = array(
                                                    'numerosolicitud' => $r['numerosolicitud'],
                                                    'numerocdp' => $r['numerocdp'],
                                                    'fechacdp' => $r['fechacdp'],
                                                    'rubro' => $r['rubro'],
                                                    'tiporecurso' => $r['tiporecurso'],
                                                    'valor' => $r['valor'],
                                                    'idsisgestiondependencia' => $r['idsisgestiondependencia'],
                                                    'codigopaa' => $r['codigopaa']
                                                );
                                            }
                                        }
                                        $re = json_encode($re);

                                        $record_linea[strtolower($key)] = $re;
                                    } else {

                                        $key = strtolower($key);
                                        $record_linea[strtolower($key)] = $value;
                                    }
                                }
                                $respuesta_linea[] = $record_linea;
                            }


                            /**
                             * Crear cdp EP - 20200416::LAVILA
                             * CDPS de SGR y solo un proyecto - 20200513::LAVILA
                             * TipoRecurso: PGN, SGR , NNN((indicador de error de datos) no se debe procesar dicho rubro) - 202209070::LAVILA
                             */
                            foreach ($record as $value) {

                                $numerocdp = $value['numerocdp'];
                                $numerosolicitud = $value['numerosolicitud'];
                                $fechacdp = $value['fechacdp'];
                                $rubro = $value['rubro'];
                                $tiporecurso = $value['tiporecurso'];
                                $valor = $value['valor'];
                                $sgr_text = substr($value['rubro'], 0, 1);

                                /* $id_sgr = 0;
                                  if ($sgr_text == 'I') {
                                  $id_sgr = 1;
                                  } */
                                $id_sgr = 999;
                                if ($tiporecurso == 'PGN') {
                                    $id_sgr = 0;
                                }
                                if ($tiporecurso == 'SGR') {
                                    $id_sgr = 1;
                                }

                                $sql = <<<EOD
delete
FROM co_cdps_ep
where
id_estudios_previos = $id_estudios_previos
and id_cdp = $numerocdp 
EOD;
                                $this->conn->execute($sql);

                                // Se agregan campos nuevos de cdp_ep segun sigestion - 20200528::LAVILA
                                $sql = <<<EOD
insert into co_cdps_ep  
(
ID_CDPS_EP,
ID_ESTUDIOS_PREVIOS,
ID_CPO_EP,
ID_CDP,
VALOR,
SGR,
NUMERO_SOLICITUD,
FECHA_CDP,
RUBRO
) 

SELECT
null as ID_CDPS_EP,
$id_estudios_previos as ID_ESTUDIOS_PREVIOS,
(select max(id_proyecto_ep) from co_proyecto_ep 
    where id_estudios_previos = $id_estudios_previos 
    and sgr = $id_sgr 
    and id_cpo in (SELECT max(ID_CPO) FROM co_cdps_all_v where cdp = $numerocdp and vigencia = $vigencia 
    and sgr = $id_sgr and rn_cpo_asign = 1)) as ID_CPO_EP,
cdp as ID_CDP,
'$valor' as VALOR,
sgr as SGR,
'$numerosolicitud' as NUMERO_SOLICITUD,
TO_DATE('$fechacdp', 'YYYY-MM-DD"T"HH24:MI:SS') as FECHA_CDP,
'$rubro' as RUBRO
                                    
FROM co_cdps_all_v
where
cdp = $numerocdp
and vigencia = $vigencia
and rn_cpo_asign = 1 
and sgr = $id_sgr                                     
EOD;
                                $this->conn->execute($sql);
                            }


                            /**
                             * LineaPAA  20200911
                             */
                            $idobjetoigual = 0;
                            if (count($respuesta_linea) > 0) {

                                $nombredependencia = $respuesta_linea[0]['nombredependencia'];
                                $valorvigencia = $respuesta_linea[0]['valorvigencia'];
                                $modalidadcontratacion = $respuesta_linea[0]['modalidadcontratacion'];
                                $mesinicio = $respuesta_linea[0]['mesinicio'];
                                $plazoestimadoejecucionendias = $respuesta_linea[0]['plazoestimadoejecucionendias'];
                                $valorvigenciafutura = $respuesta_linea[0]['valorvigenciafutura'];
                                $codigosunspsc = $respuesta_linea[0]['codigosunspsc'];
                                $idsisgestionmodalidad = $respuesta_linea[0]['idsisgestionmodalidadcontratacion'];
                                $idsisgestiondependencia = $respuesta_linea[0]['idsisgestiondependencia'];
                                $idobjetoigual = $respuesta_linea[0]['idobjetoigual'];
                                $tipobolsa = $respuesta_linea[0]['tipobolsa'];

                                $sql = <<<EOD
delete
FROM co_codigopaa_ep
where
id_estudios_previos = $id_estudios_previos  
and codigopaa = '$cod_paa'   
EOD;
                                $this->conn->execute($sql);

                                $sql = <<<EOD
insert into co_codigopaa_ep (id_estudios_previos,codigopaa,nombredependencia,valorvigencia,modalidadcontratacion,
    mesinicio,plazoestimadoejecucionendias,valorvigenciafutura,codigosunspsc,
        idsisgestionmodalidad,idsisgestiondependencia,idobjetoigual,tipobolsa) 
values ('$id_estudios_previos','$cod_paa','$nombredependencia','$valorvigencia','$modalidadcontratacion',
    '$mesinicio', '$plazoestimadoejecucionendias','$valorvigenciafutura','$codigosunspsc',
        '$idsisgestionmodalidad','$idsisgestiondependencia','$idobjetoigual','$tipobolsa')                                         
EOD;
                                $this->conn->execute($sql);
                            }

                            /**
                             * Objetos Iguales por lineaPAA - 20200911
                             */
                            if (isset($respuesta_obj[$idobjetoigual])) {

                                $objeto_obj = $respuesta_obj[$idobjetoigual]['objeto'];
                                $vigencia_obj = $respuesta_obj[$idobjetoigual]['vigencia'];
                                $cantidad_obj = $respuesta_obj[$idobjetoigual]['cantidad'];


                                $sql = <<<EOD
delete
FROM co_ep_objetos_iguales
where
id_estudios_previos = $id_estudios_previos  
and idobjetoigual = $idobjetoigual 
EOD;
                                $this->conn->execute($sql);

                                $sql = <<<EOD
insert into co_ep_objetos_iguales (id_co_ep,id_estudios_previos,VALOR_TEXTO,
    idobjetoigual,vigencia,cantidad) 
values (null,'$id_estudios_previos','$objeto_obj',
    '$idobjetoigual','$vigencia_obj','$cantidad_obj')                                        
EOD;
                                $this->conn->execute($sql);
                            }
                        }
                    }
                } catch (Exception $e) {
                    $this->logMessage("ERROR!!!");
                    $this->logMessage($e->getMessage());
                }

                $this->conn->commit();
            }
        }

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

        return $request;
    }

    private function htmlClear($string) {

        $string = str_replace('<p>', '<p align="justify">', $string);
        $string = str_replace('<br>', '<br/>', $string);
        $string = str_replace('class=', '', $string);
        $string = str_replace('<img', '', $string);
        $string = str_replace('<td>X</td>', '<td align="center">X</td>', $string);
        //$string = str_replace('<td align="top">', '<td align="justify">', $string);
        //$string = str_replace('<td align="justify">X</td>', '<td align="center">X</td>', $string);
        $string = str_replace('<td rowspan="2">', '<td rowspan="2" align="justify">', $string);

        $string = str_replace('<font size="2">', '<font size="10">', $string);
        $string = str_replace('<font size="3">', '<font size="12">', $string);
        $string = str_replace('<font size="4">', '<font size="14">', $string);
        $string = str_replace('<font size="5">', '<font size="18">', $string);
        $string = str_replace('<font size="6">', '<font size="24">', $string);
        $string = str_replace('<font size="7">', '<font size="36">', $string);
        $string = str_replace('<table ', '<center><table ', $string);
        $string = str_replace('</table> ', '</table></center>', $string);
        $string = str_replace('<table ', '<table border="1"', $string);

        $string = str_replace('size="2"', 'size="10"', $string);
        $string = str_replace('size="3"', 'size="12"', $string);
        $string = str_replace('size="4"', 'size="14"', $string);
        $string = str_replace('size="5"', 'size="18"', $string);
        $string = str_replace('size="6"', 'size="24"', $string);
        $string = str_replace('size="7"', 'size="36"', $string);

        $string = str_replace('border="0"', 'border="1"', $string);


        $string = str_replace('<div>', '<div align="justify">', $string);
        $string = str_replace('&amp;amp;amp;amp;amp;nbsp;', ' ', $string);
        $string = str_replace('&amp;amp;amp;amp;nbsp;', ' ', $string);
        $string = str_replace('&amp;amp;amp;nbsp;', ' ', $string);
        $string = str_replace('&amp;amp;nbsp;', '', $string);
        $string = str_replace('&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;', '', $string);
        $string = str_replace('<style type="text/css">P { margin-bottom: 0.08in; direction: ltr; color: rgb(0, 0, 0); line-height: 100%; text-align: justify; widows: 2; orphans: 2; }P.western { font-family: "Tahoma",sans-serif; font-size: 11pt; }P.cjk { font-family: "Times New Roman",serif; font-size: 11pt; }P.ctl { font-family: "Tahoma",sans-serif; font-size: 11pt; }A:link { color: rgb(0, 0, 255); }</style>', ' ', $string);

        $string = str_replace('<td colspan="2">', '<td colspan="2" align="justify">', $string);
        $string = str_replace('<td rowspan="3">', '<td rowspan="3" align="justify">', $string);
        $string = str_replace('<td colspan="3">', '<td colspan="3" align="justify">', $string);
        $string = str_replace('<td rowspan="4">', '<td rowspan="4" align="justify">', $string);
        $string = str_replace('<td colspan="4">', '<td colspan="4" align="justify">', $string);
        $string = str_replace('  ', ' ', $string);
        $string = str_replace('   ', ' ', $string);
        $string = str_replace('    ', ' ', $string);
        $string = str_replace('     ', ' ', $string);
        $string = str_replace('         ', ' ', $string);
        //$string = str_replace('<span lang="ES-TRAD">', '<span>', $string);
        $string = str_replace('<span lang="ES-COL">', '<span>', $string);
        $string = str_replace('<!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } -->', '', $string);
        $string = str_replace('<p lang="es-MX" align="justify">', '', $string);
        //$string = str_replace('<span>', '', $string);
        //$string = str_replace('</span>', '', $string); #Este es el que MAS jode :::::::::::::::::
        $string = str_replace('valign', 'align', $string);
        ;
        $string = str_replace('width=', '', $string);
        //    $string = str_replace('&nbsp;', '', $string);
        //      $string = str_replace('cellspacing=', '', $string);
        //      $string = str_replace('cellpadding=', '', $string);
        $string = str_replace('bordercolor=', '', $string);
        $string = str_replace('<td>', '<td align="justify">', $string);
        $string = str_replace('<li>', '<li align="justify">', $string);
        $string = str_replace('style=', '', $string);
        $string = str_replace('<br clear="all">', '', $string);
        return trim($string);
    }

}
