<?php

/**
 * genera_version actions.
 *
 * @package    contratacion
 * @subpackage genera_version
 * @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 genera_versionActions extends sfQuery {

    /**
     * Executes index action
     *
     * @param sfRequest $request A request object
     */
    protected $table_names = array(
        'CO_ESTUDIOS_PREVIOS',
        'INTERCEROS',
        'CO_ABOGADO',
        'INTERCEROS_V',
        'CO_MODALIDAD_SEL'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'INTERCEROS' =>
        array(
            'responsable-id_mae_ter' => 'CO_ESTUDIOS_PREVIOS'
        ),
        'CO_MODALIDAD_SEL' =>
        array(
            'id_modalidad_sel' => 'CO_ESTUDIOS_PREVIOS'
        ),
        'CO_ABOGADO' =>
        array(
            'id_abogado' => 'CO_ESTUDIOS_PREVIOS'
        ),
        'INTERCEROS_V' =>
        array(
            'id_mae_ter-id_mae_ter' => 'CO_ABOGADO'
        ),
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'CO_ESTUDIOS_PREVIOS' =>
        array(
            'id_estudios_previos' => 'id_estudios_previos',
            'no_proceso' => 'no_proceso',
            'responsable' => 'responsable',
            'id_abogado' => 'id_abogado',
            'id_supervisor' => 'id_supervisor',
            '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'
        ),
        'INTERCEROS_V' =>
        array(
            'num_doc' => 'num_doc_abogado',
            'razon_soc' => 'razon_soc_abogado'
        ),
        'INTERCEROS' =>
        array(
            'num_doc' => 'num_doc_resp',
            'pnombre,||,  ,||,papellido' => 'razon_soc_resp'
        ),
        'CO_MODALIDAD_SEL' =>
        array(
            'descripcion' => 'descripcion_modal',
            'prefijo' => 'prefijo_modal'
        )
    ); //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' => 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('responsable')),
            'id_abogado' => array('=' => array('id_abogado')),
            'id_supervisor' => array('=' => array('id_supervisor')),
            'id_area' => array('=' => array('id_abogado')),
            'valor' => array('=' => array('id_abogado')),
            'no_proceso' => array('=' => array('no_proceso')),
            'estado' => array('=' => array('estado')),
            'activo' => array('=' => array('activo')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        )
    ); //por cada tabla se dan los campos, opcion de filtro y variable que entra para los posibles filtros
    protected $table_field_or_conditions = array(); // filtros de condicion or
    protected $fields_orderBy = array(
        'no_proceso'
    ); //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('no_proceso', 'responsable', 'id_abogado', 'id_supervisor', 'fecha_creacion', 'id_modalidad_sel', 'estado', 'activo', 'fecha_anu', 'motivo_anu', 'id_cen_op', 'id_anhos', 'version', 'id_area', 'valor', 'descripcion'); //campos de la tabla, sin la llave primaria
    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;

        $id_estudios_previos = $request['id_estudios_previos'];
        $id_modalidad_sel = $request['id_modalidad_sel'];
        $version = $request['version'];
        $id_abogado = $request['id_abogado'];
        $valor = $request['valor'];
        $responsable = $request['responsable'];

        if ($version == 2) {

            if ($id_abogado == "") {

                $errors['mensaje'] = "No puede registrar la version no 2 si no ha sido asignado el abogado. Favor verificar.";
                $errors['servicio'] = "co_genera_version";
            }
        }

        $sql = <<<EOD
        select tab0.* from co_campo_obliga tab0
                where tab0.id_modalidad_sel = $id_modalidad_sel and tab0.obligatorio=1
EOD;
        $records = CN_TABLE::executeSQL($sql);

        foreach ($records as $records) {

            $id_campo_ep = $records['id_campo_ep'];
            //20170912 Se agrega Validacion de minimo 5 caracteres para los campos obligatorios ticket #6952
            $sql = <<<EOD
        select count(*) cantidad 
        from co_detalle_ep tab0
        where tab0.id_estudios_previos = $id_estudios_previos and tab0.id_campo_ep = $id_campo_ep and tab0.valor IS NOT NULL 
        AND length(tab0.valor) >=5
EOD;
            $records = CN_TABLE::executeSQL($sql);

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

            if ($cantidad == 0) {

                $errors['mensaje'] = "No ha realizado el registro de los campos minimos para generar una nueva version o los campos minimos no cuentan con al menos cinco(5) caracteres.";
                $errors['servicio'] = "co_campo_obliga";
            }


            $sql = <<<EOD
        select count(*) cantidad from co_garantia_ep tab0
                where tab0.id_estudios_previos = $id_estudios_previos
EOD;
            $records = CN_TABLE::executeSQL($sql);

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

            if ($cantidad == 0) {

                $errors['mensaje'] = "No ha realizado el registro de las garantias para generar una nueva version.";
                $errors['servicio'] = "co_campo_obliga";
            }

            //Actualizacion 9 de Octubre de 2015
            //Se adiciona validacion para no permitir generar una nueva version si el proceso ya tiene registrado contrato.
            //Inicio Paso 1. Generación del PDF de Comunicacion Interna

            $sql = <<<EOD
select count(*) cantidad

from co_contrato tab0
join co_seleccion_ep tab1 ON tab1.id_seleccion_ep = tab0.id_seleccion_ep
join co_estudios_previos tab2 ON tab2.id_estudios_previos = tab1.id_estudios_previos

where tab2.id_estudios_previos = $id_estudios_previos
EOD;


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

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

            if ($cantidad == 1) {

                $errors['mensaje'] = "Este proceso ya tiene registrado Contrato por consiguiente no se puede generar nueva version. Favor verificar.";
                $errors['servicio'] = "co_campo_obliga";
            }


            //Actualización: 4 de Noviembre de 2015
            //Adicionar validacion para que no permita generar la version 1 si no ha registrado proyectos

            $sql = <<<EOD
        select count(*) cantidad from co_proyecto_ep tab0
                where tab0.id_estudios_previos = $id_estudios_previos
EOD;
            $records = CN_TABLE::executeSQL($sql);

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

            if ($cantidad == 0) {

                $errors['mensaje'] = "No ha realizado el registro de los proyectos de afectacion para generar una nueva version.";
                $errors['servicio'] = "co_campo_obliga";
            }


            /**
             * Verificar que el estudio previo este estado = 1 y que no este repetido en una version para los datos del estudio previo - 20160517
             */
            $sql = <<<EOD
select * from co_estudios_previos where id_estudios_previos = $id_estudios_previos and estado = 0 
EOD;
            $records = CN_TABLE::executeSQL($sql);

            if (count($records) > 0) {

                $errors['mensaje'] = "El estudio previo se encentra anulado, favor verificar nueva versión.";
                $errors['servicio'] = "genera_version";
            }

            $descripcion = "";
            if (isset($request['descripcion'])) {
                //Reemplzao de ' para el SQL - 20160926
                $descripcion = str_replace("'", "'||CHR(39)||'", $request['descripcion']);
            }

            $sql = <<<EOD
select * from co_estudios_previos 
    where version = $version and responsable = $responsable 
        and id_modalidad_sel = $id_modalidad_sel and valor = $valor and activo = 1 and estado = 1
        and descripcion = '$descripcion'            
EOD;
            $records = CN_TABLE::executeSQL($sql);

            if (count($records) > 0) {

                $errors['mensaje'] = "Ya se encuentra creado una versión posterior para este estudio previo, favor verificar.";
                $errors['servicio'] = "genera_version";
            }

            return $errors;
        }



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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

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

//valor por defecto

        $errors = null;

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

        $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'];


        $sql = <<<EOD
        select count(*) as cantidad from co_docum_modalidad
                where id_modalidad_sel = $id_modalidad_sel and estado = 1
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";
        }

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


        /*
         *  Generar errores en $errors
         */


        return $errors;
    }

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

//valor por defecto
        $errors = null;

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

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

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

        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {
            $logger->info("Valor del versionamiento " . $request['versionamiento']);
            if ($request['versionamiento'] == "true") {
                $logger->info("Ingresa a versionamiento");

                $id_estudios_previos = $request['id_estudios_previos'];
                $request['id_estudios_previos_padre'] = $id_estudios_previos;
                $request['id_estudios_previos'] = "";

                $sql = <<<EOD
update co_estudios_previos set estado = 0, fecha_anu=sysdate, motivo_anu='GENERA NUEVA VERSION' 
    where id_estudios_previos = $id_estudios_previos
EOD;
                CN_TABLE::executeSQL($sql);
            }
        }

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

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

        return $request;
    }

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

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

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

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

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

            try{
                /*
                 * Inserta solo un registro por id_campo_ep.
                 * Se deja para que se cree el detalle de la nueva version al crear la verison en estudio previo - 20160519
                 */
                $sql = <<<EOD
insert into co_detalle_ep 
select 
id_detalle_ep,
id_estudios_previos,
id_campo_ep,
valor
from (

    select 
    null as id_detalle_ep,
    $id_estudios_previos as id_estudios_previos,
    id_campo_ep,
    valor,
    row_number() over (
      partition by id_campo_ep
      order by id_detalle_ep desc
    ) as rn
    from co_detalle_ep
    where 
    id_estudios_previos = $id_estudios_previos_padre 

)
where
rn = 1

order by
id_campo_ep 
EOD;
                $this->conn->execute($sql);
                /*
                 * Creamos Versionamiento
                 */
                $id_mae_ter = $request['id_username'];
                $sql = <<<EOD
        insert into CO_VERSIONES_EP(id_version_padre,id_version_hijo,fecha_creacion,id_maeter)
        values($id_estudios_previos_padre,$id_estudios_previos,SYSDATE,$id_mae_ter )
EOD;
                $this->conn->execute($sql);
                /*copiamos DOcumentos*/
                $sql = <<<EOD
insert into co_documento_ep(ID_ESTUDIOS_PREVIOS,
ID_DOCUM_MODALIDAD,
FECHA_REGISTRO,
OBSERVACIONES,
ADJUNTO) (select $id_estudios_previos,ID_DOCUM_MODALIDAD,
FECHA_REGISTRO,
OBSERVACIONES,
ADJUNTO from co_documento_ep where ID_ESTUDIOS_PREVIOS = $id_estudios_previos_padre )
EOD;
                $this->conn->execute($sql);
                //COPIAMOS REQUISITO
                $sql = <<<EOD
insert into co_requisito_ep(ID_ESTUDIOS_PREVIOS,
ID_REQUISITO) (select $id_estudios_previos,ID_REQUISITO
from co_requisito_ep where ID_ESTUDIOS_PREVIOS = $id_estudios_previos_padre )
EOD;
                $this->conn->execute($sql);
                //COMPIAMOS GARANTIAS
                $sql = <<<EOD
insert into co_garantia_ep(ID_ESTUDIOS_PREVIOS,
ID_GARANTIA,
PORCENTAJE,
VALOR)
(select $id_estudios_previos,ID_GARANTIA,
PORCENTAJE,
VALOR from co_garantia_ep where ID_ESTUDIOS_PREVIOS = $id_estudios_previos_padre )
EOD;
                $this->conn->execute($sql);
                //COPIAMOS PASOS
                $sql = <<<EOD
insert into co_paso_ep(ID_ESTUDIOS_PREVIOS,
ID_PASO_MODALIDAD,
FECHA_INICIO,
FECHA_FIN,
OBSERVACIONES,
ADJUNTO) (select $id_estudios_previos,
ID_PASO_MODALIDAD,
FECHA_INICIO,
FECHA_FIN,
OBSERVACIONES,
ADJUNTO                    
from co_paso_ep where ID_ESTUDIOS_PREVIOS = $id_estudios_previos_padre )
EOD;
                $this->conn->execute($sql);
                //COPIAMOS FIRMA
                $sql = <<<EOD
insert into co_firma_ep(ID_ESTUDIOS_PREVIOS,
DESCRIPCION,
CARGO,
ID_MAE_TER)
(select $id_estudios_previos,DESCRIPCION,
CARGO,
ID_MAE_TER from co_firma_ep where ID_ESTUDIOS_PREVIOS = $id_estudios_previos_padre )
EOD;
                $this->conn->execute($sql);
                //COPIAMOS PROYECTO
                $sql = <<<EOD
insert into co_proyecto_ep(ID_ESTUDIOS_PREVIOS,
ID_CPO,
VALOR,
SGR)
(select $id_estudios_previos,ID_CPO,
VALOR,
SGR from co_proyecto_ep where ID_ESTUDIOS_PREVIOS = $id_estudios_previos_padre )
EOD;
                $this->conn->execute($sql);
                //COPIAMOS CDPS
                $sql = <<<EOD
insert into co_cdps_ep(ID_ESTUDIOS_PREVIOS,
ID_CPO_EP,
ID_CDP,
VALOR)
(select $id_estudios_previos,ID_CPO_EP,
ID_CDP,
VALOR from co_cdps_ep where ID_ESTUDIOS_PREVIOS = $id_estudios_previos_padre )
EOD;
                $this->conn->execute($sql);
                //Finalizo de generar version del estudio previo correctamente
                $this->conn->commit();
            }catch (Exception $e){
                //Fallo se elimina regresa la transaccion y se elimina el estudio previo creado
                $this->conn->rollback();
                $this->conn->beginTransaction();
                $sql = <<<EOD
delete from CO_ESTUDIOS_PREVIOS where ID_ESTUDIOS_PREVIOS = $id_estudios_previos
EOD;
                $this->conn->execute($sql);
                $sql = <<<EOD
update co_estudios_previos set estado = 1, fecha_anu=null, motivo_anu=null 
    where id_estudios_previos = $id_estudios_previos_padre
EOD;
                $this->conn->execute($sql);
                $this->conn->commit();
                $this->status = 1;
                $this->mensajeError = "[genera_version] Ocurrio un error: " . $e->getMessage();
                $this->list_data = array();
                $this->logMessage("[genera_version] ERROR!");
                $this->logMessage($e->getMessage());
            }
            if($this->status!=1){
                //ENVIO DE CORREO

                $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'];
                $id_responsable = $records[0]['responsable'];
                $area = $records[0]['area'];
                $valor = $records[0]['valor'];
                $valor = number_format($valor);
                $modalidad = $records[0]['modalidad'];
                $version = $records[0]['version'];
                $abogado = $records[0]['abogado'];
                $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;
                        $campos = CN_TABLE::executeSQL($sql);
                        $obj="";
                        foreach($campos as $rec){
                            $codigo = $rec['CODIGO'];
                            $valorcampo = $rec['VALOR'];
                            $valorcampo = $this->htmlClear($purifier->purify($valorcampo));
                            if(stristr(strtoupper($codigo), 'OBJETO')!==FALSE){
                                $obj = $valorcampo;
                            }
                        }
                        $objeto = $this->htmlClear($obj);
                        break;
                }

                if ($version == 1) {

                    //ENVIO CORREO 1 - Solicitud de Reparto
                    //PARAMETROS GENERALES

                    $subject = "Solicitud de Reparto";
                    //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();

    //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 = 1 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 la <b>Solicitud de Reparto</b> al Grupo de Contratos y Convenios del proceso de estudios previos detallado a continuación:<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>Objeto:</b> $objeto<br/><br/>
                <br/><br/>
                
                </body></html>
EOD;


                        $currentUri = "";

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

                    //ENVIO CORREO 23 - Notificacion de Correcciones de Abogado
    //PARAMETROS GENERALES
                    if ($request['id_username'] == $id_responsable) {
                        $subject = "Notificacion de Revision de Estudios Previos";
                        //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);
                        $this->logMessage("id_username=" . $request['id_username']);
                        $array_adjuntos = array();

    //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 = 42 and tab1.id_mae_ter is not null
EOD;


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

                        $this->logMessage("Tamaño consulta" . count($records));


                        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/> Se ha procedido a la revision del documento de Estudios Previos por parte del Responsable y generado la version No $version para el proceso detallado a continuacion: <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;

                            $this->logMessage($body);

                            $currentUri = "";

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


                        $subject = "Notificacion de Revision de Estudios Previos";
                        //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);
                        $this->logMessage("id_username=" . $request['id_username']);
                        $array_adjuntos = array();

    //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 = 41 and tab1.id_mae_ter is not null
EOD;


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

                        $this->logMessage("Tamaño consulta" . count($records));


                        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/> Se ha procedido a la revision del documento de Estudios Previos por parte del Abogado y generado la version No $version para el proceso detallado a continuacion: <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;

                            $this->logMessage($body);

                            $currentUri = "";

                            CN_TABLE::envioCorreo($request, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $body);
                        }
                    }
                }
            }
            //$this->conn->commit();
            $logger->info("[ADD] FIN ADD POSTPROCESS.");
        }

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

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

}
