<?php

require_once(dirname(__FILE__) . '/../../../../../plugins/bhLDAPAuthPlugin/lib/adLDAP.php');

/**
 * Creado: 20190911
 * Link: http://soporte14.sofhouse.net/cartera/web/api_dev.php/api/webservie_sigm_consulta/list.json?codigo_titulo=IE7-14581
 * webservie_sigm_consulta actions.
 *
 * @package    cartera
 * @subpackage webservie_sigm_consulta
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class webservie_sigm_consultaActions extends sfActions {

    /**
     * Executes list action
     *
     * @param sfRequest $request A request object
     */
    public function executeList(sfWebRequest $request) {

        //Log especifico de procesos completos
        $logPath = sfConfig::get('sf_log_dir') . '/webservice_sigm.log';
        $this->custom_logger = new sfFileLogger(new sfEventDispatcher(), array('file' => $logPath));
        $this->custom_logger->info("[webservie_sigm_consulta] Servicio executeList webservie_sigm_consulta.\n");
        $this->custom_logger->info("---BEGIN Logging request--- (Revisar log proceso_completo.log)");
        foreach ($request->getPostParameters() as $key => $value) {
            $this->custom_logger->info("[webservie_sigm_consulta] request[$key] = $value\n");
        }
        $this->custom_logger->info("--------------------------------------------------/  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->custom_logger->info("[webservie_sigm_consulta] request[$key] = $value");
        }
        $this->custom_logger->info("---END Logging request");

        /*
         * Paginacion
         */
        if (isset($request['_startRow'])) {
            $rowStart = $request['_startRow'];
        } else {
            $rowStart = 0;
        }

        if (isset($request['_endRow'])) {
            $rowEnd = $request['_endRow'];
        } else {
            $rowEnd = 10000;
        }

        //ordenar consulta
        if (isset($request['_sortBy'])) {
            $sortBy = " Order by " . $request['_sortBy'];
        } else {
            $sortBy = ' order by
tab0.codigo_titulo,
tab0.num_doc,
tab0.id_anhos,
tab0.sec_debito ';
        }

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

        //Codigo de error defecto - 20191001
        $codigo_error = 0;

        $int = 0;
        $service_url = "";
        $entidad_cliente = "";
        foreach ($array as $routeName => $routeData) {
            if ('service_url' == $routeName) {
                foreach ($routeData as $key => $value) {
                    if ($key == 'value') {
                        $service_url = $value;
                    }
                }
            }
            if ('entidad_cliente' == $routeName) {
                foreach ($routeData as $key => $value) {
                    if ($key == 'value') {
                        $entidad_cliente = $value;
                    }
                }
            }
            $int++;
        }

        //Abrir nueva conexion con la Base de Datos
        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        $this->conn->beginTransaction();

        /*
         * Formato de fecha
         */
        //Sql
        $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD" 
EOD;
        //Ejecutar SQL
        CN_TABLE::executeSQL($sql);

        $this->parameters = true;
        $parametros = '';

        //Variables por defecto para el registro de log
        $id_tabla = 'null';
        $id_vigencia = 'null';
        $id_cen_op = 'null';
        $id_punto_venta = 'null';
        $id_cia = 1;
        $num_doc = '';
        $codigo_titulo = '';
        $id_titulo = '';

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

        //  1- CONSULTAR, 2- ACTUALIZAR, 3 - ADICIONAR, 4 - ELIMINAR, 5 - ANULAR
        $id_ope_bd = 1;
        //id del maestro tercero
        $id_mae_ter_log = 1;
        $usuario = 'admin';
        $comando = 'webservie_sigm_consulta';
        //construir observacion
        $observacion_log = "'Se ingreso a consultar debito desde servicio web sigm consulta'";

        //Manejo de errores
        //Variables obligatorias
        $id_vigencia = $id_anhos = date('Y');
        $fecha_proceso = CN_TABLE::fechaSistema();

        /**
         * Inicio del proceso
         */
        try {

            // Registro de consulta en tabla de log
            $this->custom_logger->info("[webservie_sigm_consulta] " . $observacion_log . ".\n");
            CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion_log, $id_punto_venta);

            // Variables de retorno
            $resultado = array();


            /**
             * Verificar acceso a servicio por LDAP - 20191001
             */
            //Para local sofhouse no valida - 20191001
            if ($entidad_cliente != 7) {

                //Variables de configuracion del servidor de conexion LDAP (app.yml)
                $account_suffix = sfConfig::get('app_account_suffix');
                $domain_controllers = sfConfig::get('app_domain_controllers');
                $base_dn = sfConfig::get('app_base_dn');
                $admin_username = sfConfig::get('app_admin_username');
                $admin_password = sfConfig::get('app_admin_password');

                $config = array(
                    'account_suffix' => $account_suffix,
                    'domain_controllers' => array($domain_controllers),
                    'base_dn' => $base_dn,
                    'admin_username' => $admin_username,
                    'admin_password' => $admin_password,
                );

                $adldap = new adLDAP($config);

                if (!isset($request['usuario_web']) || !isset($request['clave_web'])) {
                    //Codigo de error - 20191001
                    $codigo_error = 1;
                    throw new Exception("Falta los parámetros de acceso obligatorios verificar.");
                }

                $usuario_web = $request['usuario_web'];
                $clave_web = $request['clave_web'];
                $authUser = $adldap->authenticate($usuario_web, $clave_web);

                if ($authUser != true) {
                    //Codigo de error - 20191001
                    $codigo_error = 2;
                    throw new Exception("La autenticación de usuario($usuario_web) para el servicio web fallo; favor verificar.");
                }
            }

            /*
             * Verificar parametros - 20190911
             */
            $param_oblig = 'num_doc;codigo_titulo';
            $param_oblig_datos = explode(';', $param_oblig);

            foreach ($param_oblig_datos as $value) {
                if (!isset($request[$value])) {
                    $this->parameters = false;
                    $parametros = $parametros . ';' . $value;
                }
                if (isset($request[$value])) {
                    $this->parameters = true;
                    break;
                }
            }

            if (!$this->parameters) {
                $parametros = substr($parametros, 1);
                //Codigo de error - 20191001
                $codigo_error = 3;
                throw new Exception("Falta los parámetros($parametros) obligatorios verificar.");
            }


            /**
             * Variables obligatorias
             */
            //varialbes de referencias
            $num_doc = '';
            $whereNumDoc = ' ';
            if (isset($request['num_doc'])) {
                $num_doc = $request['num_doc'];
                $whereNumDoc = " AND tab0.num_doc = '" . $num_doc . "'";
            }
            $codigo_titulo = '';
            $whereCodTitulo = ' ';
            if (isset($request['codigo_titulo'])) {

                $codigo_titulo = $request['codigo_titulo'];
                $whereCodTitulo = " AND tab0.codigo_titulo = '" . $codigo_titulo . "'";

                /**
                 * Validar si el titulo existe
                 */
                $sql = <<<EOD
SELECT
    *
FROM rmn_titulo@CAN.ANM.LOCAL
where
cod_titulo = '$codigo_titulo' 
EOD;
                //ejecuta y obtiene el resultado del sql
                $resultado = CN_TABLE::executeSQL($sql);
                //$this->logMessage("SQL DEBITO nueva. " . $sql);

                /*
                 * Verifica que sea un registro para insertar las referencias del debito
                 */
                if (count($resultado) == 0) {
                    //Codigo de error - 20191001
                    $codigo_error = 5;
                    throw new Exception("El codigo_titulo($codigo_titulo) no existe en el modulo de CANON; favor verificar.");
                }

                $id_titulo = $resultado[0]['id_titulo'];
            }


            /**
             * Consulta debitos segun filtros de entrada y parametrizacion de productos y titulo - 20190912
             */
            $consulta_sql = <<<EOD
select
tab0.num_doc,
tab0.tipo_documento,
tab0.razon_soc,
tab0.email,
tab0.digito_verificacion,

tab0.id_debito,
tab0.id_anhos,
tab0.sec_debito,
tab0.fecha_proceso,
tab0.punto_venta,
tab0.estado,
tab0.valor_bruto,
tab0.valor_iva,
tab0.valor_total,
tab0.observaciones,
tab0.periodo_ini,
tab0.periodo_fin,
tab0.fecha_vence_rec,
tab0.cod_bar,
tab0.codigo_producto,
tab0.producto,
tab0.por_iva,
tab0.mineral,
tab0.codigo_titulo,

tab0.saldo,
tab0.estado_pagado,
tab0.aplica_sigm,
tab0.distribuible,
tab0.tipo_moneda,

case when tab0.valor_intereses < 0 then 0 else tab0.valor_intereses end as valor_intereses,
case when tab0.valor_intereses > 0 then tab0.tipo_tasa_int || ', Tasa '|| tab0.tasa_interes_aplicada ||'%, desde '|| to_char(tab0.fecha_vence_rec,'dd/mm/yyyy') ||' hasta '|| tab0.fecha_vencimiento_recibo ||'' else '' end as concepto_intereses,
tab0.dias_mora,
tab0.saldo + (case when tab0.valor_intereses < 0 then 0 else tab0.valor_intereses end) as valor_total_pago

from(

    select
    
    tab0.num_doc,
    tab0.tipo_documento,
    tab0.razon_soc,
    tab0.email,
    tab0.digito_verificacion,
    
    tab0.id_debito,
    tab0.id_anhos,
    tab0.sec_debito,
    tab0.fecha_proceso,
    tab0.punto_venta,
    tab0.estado,
    tab0.valor_bruto,
    tab0.valor_iva,
    tab0.valor_total,
    tab0.observaciones,
    tab0.periodo_ini,
    tab0.periodo_fin,
    tab0.fecha_vence_rec,
    tab0.cod_bar,
    tab0.codigo_producto,
    tab0.producto,
    tab0.por_iva,
    tab0.mineral,
    tab0.codigo_titulo,
    
    tab0.saldo,
    tab0.estado_pagado,
    tab0.aplica_sigm,
    tab0.distribuible,
    tab0.tipo_moneda,
    
    --valor_intereses IM=K X (TU/366) X n (IM: Intereses en mora, TU: Tasa de interes, n: Numero de dias en mora) 
    case
    /* Solo calculo para debitos con saldo - 20190912 */
    when tab0.saldo = 0 
        then 0   
    /* no hay intereses cuando la fecha de pago oportuno no ha llegado, Se deja que opere si es el mismo dia de pago, para que tenga en cuenta 1 dia de liq - 20170922 */ 
    when trunc(sysdate) < trunc(tab0.fecha_vence_rec) 
        then 0
    /* Se coloca calculo de indexacion VR = VH x (IPC actual/IPC inicial) - 20190815*/
    when tab0.aplica_multa = 1 
        then round( nvl(round(tab0.saldo),0) * (
                                    (
                                        (
                                            (SELECT
            nvl(max(valor),0) as valor
            FROM ca_ipc
            where
            id_anhos = EXTRACT(YEAR FROM sysdate)
            and id_meses = EXTRACT(MONTH FROM sysdate))
                                        )/(
                                            (SELECT
            nvl(max(valor),1) as valor
            FROM ca_ipc
            where
            id_anhos = EXTRACT(YEAR FROM tab0.fecha_pago_oportuno)
            and id_meses = EXTRACT(MONTH FROM tab0.fecha_pago_oportuno))
                                          )
                                            )
                                            -1) )
    /* Se omiten productos que no deban calcular interes - 20190621*/
    when tab0.aplica_interes_vence = 0 
        then 0    
    --aplica formula con tasa de interes normal vigente     
    when tt.aplica_usura=0 and tab0.aplica_multa != 2
        then consulta_sql_interes_normal@CAN.ANM.LOCAL(to_number(to_char(trunc(tab0.fecha_pago_oportuno),'yyyy')),to_number(to_char(trunc(tab0.fecha_pago_oportuno),'mm')),to_number(to_char(trunc(tab0.fecha_pago_oportuno),'dd')),to_number(to_char(trunc(sysdate),'yyyy')),to_number(to_char(trunc(sysdate),'mm')),to_char(trunc(tab0.fecha_pago_oportuno),'yyyy-mm-dd'),to_char(trunc(sysdate),'yyyy-mm-dd'),nvl(round(tab0.saldo),0), tt.id_tasa_interes )               
    --aplica formula con tasa de usuara vigente 
    else consulta_sql_interes@CAN.ANM.LOCAL(to_number(to_char(trunc(tab0.fecha_pago_oportuno),'yyyy')),to_number(to_char(trunc(tab0.fecha_pago_oportuno),'mm')),to_number(to_char(trunc(sysdate),'yyyy')),to_number(to_char(trunc(sysdate),'mm')),to_char(trunc(tab0.fecha_pago_oportuno),'yyyy-mm-dd'),to_char(trunc(sysdate),'yyyy-mm-dd'),nvl(round(tab0.saldo),0))
    end as valor_intereses,
    
    --dias de mora
    case 
        when trunc(sysdate)<=trunc(tab0.fecha_vence_rec) then 0
        else nvl(trunc(sysdate)-trunc(tab0.fecha_vence_rec)+1,0) 
    end as dias_mora,
    --fecha vencimiento recibo
    case 
    when TRUNC(sysdate)<=TRUNC(tab0.fecha_vence_rec) then to_char(tab0.fecha_vence_rec, 'dd/mm/yyyy')
    else to_char(sysdate, 'dd/mm/yyyy') 
    end as fecha_vencimiento_recibo,
    -- tasa de interes aplicada
    case
    when tt.aplica_usura=0 then ti.valor
    else nvl(tiact.valor,999)
    end as tasa_interes_aplicada,
    case when tab0.aplica_multa = 1 then 'Indexación' else 'Interes' end as tipo_tasa_int
    
    from (    
        
        select
    
        ter.num_doc as num_doc,
        tip_ide.abreviatura as tipo_documento,
        ter.razon_soc as razon_soc,
        nvl(ter.mail,ter.mail_con) as email,
        ter.dv as digito_verificacion,
    
        deb.id_debito as id_debito,
        deb.id_anhos as id_anhos,
        deb.sec_debito as sec_debito,
        deb.fecha_proceso as fecha_proceso,
        pv.nombre as punto_venta,
        deb.estado as estado,
        deb.valor_bruto as valor_bruto,
        deb.valor_iva as valor_iva,
        deb.valor_total as valor_total,
        nvl(deb.observaciones, prod.descripcion) as observaciones,
        deb.periodo_ini as periodo_ini,
        deb.periodo_fin as periodo_fin,
        ven.fecha_vence as fecha_vence_rec,
        deb.cod_bar as cod_bar,
        prod.codigo as codigo_producto,
        prod.descripcion as producto,
        case when prod.id_grupo in (62) then 1 else 0 end as distribuible,
        debdet.por_iva as por_iva,
        mine.descripcion as mineral,
        ref.id_referencia2 as codigo_titulo,
    
        deb.valor_total - sum(nvl(credet.valor_abono,0)) as saldo,
            
        ven.cancelado as estado_pagado,
        nvl(refsigm.aplica_sigm,0) as aplica_sigm,
        tipmon.descripcion as tipo_moneda,
    
        /*Datos para calculo*/
        case when to_char(trunc(ven.fecha_vence),'mm') = '02' and to_char(trunc(ven.fecha_vence),'dd') = '29' then ven.fecha_vence - 1 else ven.fecha_vence end as fecha_pago_oportuno,
        prod.aplica_interes_vence,
        prod.aplica_multa,
        sum(nvl(credet.valor_abono,0)) as valor_credito
    
        from ca_debito deb
    
        left join interceros_du_dir_v ter
        on ter.id_mae_ter = deb.id_mae_ter
    
        left join tipo_identificacion tip_ide
        on tip_ide.id_tipo_identificacion = ter.id_tipo_doc
    
        JOIN CA_PUNTO_VENTA pv
        ON pv.id_punto_venta = deb.id_punto_venta
    
        JOIN ca_vencimientos ven
        ON ven.id_debito = deb.id_debito
    
        left join (
            select
            aut.*,
            row_number() over (
                partition by aut.id_debito
                order by aut.id_debito, aut.id_producto desc
            ) as rn
            from ca_debito_detalle aut
        )debdet
        on debdet.id_debito = deb.id_debito
        and debdet.rn = 1
    
        left join ca_producto prod
        on prod.id_producto = debdet.id_producto
    
        left join ca_debito_ref ref
        on deb.id_debito = ref.id_debito
    
        left join re_mineral mine
        on ref.id_referencia1 = mine.id_mineral
    
        left join ca_debito_ref_sigm refsigm
        on deb.id_debito = refsigm.id_debito
      
        left JOIN CA_TIP_MON tipmon
        ON tipmon.id_tip_mon = deb.id_tip_mon
        
        LEFT JOIN ca_credito_detalle credet
        ON credet.id_vencimiento = ven.id_vencimiento
        LEFT JOIN ca_credito cre
        ON cre.id_credito = credet.id_credito
        
        where
        1 = 1
        and nvl(cre.estado,1) = 1
        
        having
        1 = 1
        and (deb.valor_total - sum(nvl(credet.valor_abono,0))) >= 0
        and prod.aplica_intereses = 0
        
        group by
        ter.num_doc,
        tip_ide.abreviatura,
        ter.razon_soc,
        ter.mail,
        ter.mail_con,
        ter.dv,
        
        deb.id_debito,
        deb.id_anhos,
        deb.sec_debito,
        deb.fecha_proceso,
        pv.nombre,
        deb.estado,
        deb.valor_bruto,
        deb.valor_iva,
        deb.valor_total,
        deb.observaciones, 
        prod.id_grupo,
        deb.periodo_ini,
        deb.periodo_fin,
        ven.fecha_vence,
        deb.cod_bar,
        prod.codigo,
        prod.descripcion,
        debdet.por_iva,
        mine.descripcion,
        ref.id_referencia2,
        
        ven.cancelado,
        refsigm.aplica_sigm,
        tipmon.descripcion,
        prod.aplica_interes_vence,
        prod.aplica_intereses,
        prod.aplica_multa
    
    )tab0 
    
    left join (
        select
        aut.*,
        row_number() over (
            partition by aut.cod_titulo
            order by aut.cod_titulo, aut.estado desc, aut.id_titulo desc
        ) as rn
        from rmn_titulo@CAN.ANM.LOCAL aut
    )tit
    on tit.cod_titulo = tab0.codigo_titulo
    and tit.rn = 1
    
    left join ca_titulo_tasa@CAN.ANM.LOCAL tt on tt.id_titulo = tit.id_titulo and tt.estado=1
    left join ca_tasa_interes@CAN.ANM.LOCAL ti on tt.id_tasa_interes = ti.id_tasa_interes
    left join ca_tasa_interes@CAN.ANM.LOCAL tiact on tiact.vigencia=to_char(sysdate, 'yyyy') and tiact.id_meses=to_char(sysdate, 'mm')                   
                        
    where
    1 = 1 
    /* Solo salen los que estan pagadas, sino tiene tasa en canon - 20190912 */
    and ( tt.id_tasa_interes is not null or tab0.estado_pagado = 1 )
    $whereNumDoc     
    $whereCodTitulo    

)tab0         
EOD;
            /*
             * Sql que trae los resultados
             * por los filtros, para totalizar las filas
             */
            /*           $sql = <<<EOD
              select count(*) as count from (

              $consulta_sql

              )
              EOD;


              $total_record_count = CN_TABLE::executeSQL($sql);
              $total_record_count = $total_record_count[0]["count"];
             */

            //obtener el listado de recaudos
            $sql = <<<EOD
                    
$consulta_sql

$sortBy    

EOD;
            //ejecuta y obtiene el resultado del sql
            $resultado = CN_TABLE::executeSQL($sql);


            /*
             * INICIO variables por defecto para el registro de log
             */ {
                //obtiene el valor para su identificador unico
                $id_tabla = $id_titulo;

                //3 - indica operacion de adicionar de registro
                $id_ope_bd = 1;

                //id del maestro tercero
                $id_mae_ter_log = 1;

                //el username desde qebsafiERP
                $usuario = 'admin';
                if (isset($request['username'])) {
                    if ($request['username'] != '') {
                        $usuario = $request['username'];
                    }
                } elseif (isset($request['username_log'])) {
                    if ($request['username_log'] != '') {
                        $usuario = $request['username_log'];
                    }
                }

                //Obtener id_mae_ter por usuario
                //sentencia sql
                $sql = <<<EOD
select * from INTERCEROS where num_doc = (select num_doc from usuario where username = '$usuario') 
EOD;
                //ejecuta el sql
                $rec = CN_TABLE::executeSQL($sql);
                if (count($rec) > 0) {
                    $id_mae_ter_log = $rec[0]['id_mae_ter'];
                }

                //comando que identifica la funcionalidad
                $comando = 'webservie_sigm_consulta';

                /*
                 * Construir observacion
                 */
                $observacion = "'Se consulto id_titulo : " . $id_tabla . " desde la funcionalidad: " . $comando . "'";

                $id_punto_venta_log = $id_punto_venta;

                /*
                 * registro de consulta en tabla de log
                 */
                $sql = CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta_log);
            }
            /*
             * FIN variables por defecto para el registro de log
             */


            /**
             * Crear registro de log
             */
            $sql = <<<EOD
Insert into CA_WEBSEVICE_CONSULTA (ID_WEBSEVICE_CONSULTA,NUM_DOC,CODIGO_TITULO,
    FECHA_LOG,TERMINO_PROCESO,ID_TITULO,MOTIVO_ERROR) 
values (null,'$num_doc','$codigo_titulo',
    sysdate,'1','$id_titulo','')  
EOD;
            $this->conn->execute($sql);


            /**
             * COMMIT
             */
            $this->conn->commit();
            $mensaje = 'Proceso terminado exitoso.';
            $this->logMessage("COMMIT " . $mensaje);
            $this->custom_logger->info("COMMIT " . $mensaje);

            $this->status = 0;
            //$this->totalRows = $total_record_count;
            $this->totalRows = count($resultado);
            $this->startRow = $rowStart;
            $this->endRow = $rowStart + count($resultado);
            $this->list_data = $resultado;
        } catch (Exception $e) {

            //rollback de todas las transacciones en caso de que ocurra algun error
            $this->conn->rollback();

            $mensaje = "[webservie_sigm_consulta] ROLLBACK ERROR al Generar la consulta del debito. !!!";
            $this->custom_logger->info($mensaje);
            $this->custom_logger->info("state 1");
            $this->custom_logger->info("Code " . $e->getCode());
            $this->custom_logger->info("Message " . $e->getMessage());

            $this->status = 1;
            //$this->mensajeError = $mensaje;
            $this->list_data = array(
                array(
                    'code' => $e->getCode(),
                    'mensaje' => $e->getMessage(),
                    'servicio' => 'webservie_sigm_consulta',
                    'modulo' => 'CARTERA',
                    'codigo_error' => $codigo_error
                )
            );

            /*
             * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
             */
            $id_tabla = 'null';
            $id_ope_bd = 1;
            $observacion_log = "'Se termino el proceso de webservie_sigm_consulta, se generaron errores en el proceso de consulta.'";
            $this->custom_logger->info("[webservie_sigm_consulta] " . $observacion_log . ".\n");

            /**
             * Abrir nueva conexion con la Base de Datos
             */
            $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
            $this->conn->beginTransaction();

            CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion_log, $id_punto_venta);

            //Se cambian ' por chr(39), para no dañar el insert del log - 20161202            
            //$error_log = $mensaje . ' error message: ' . $e->getMessage() . ' code: ' . $e->getCode();
            $error_log = $mensaje . ' error message: ' . str_replace("'", "'|| chr(39) ||'", $e->getMessage()) . ' code: ' . $e->getCode();
            $error_log = substr($error_log, 1, 4000);

            //Crear registro de error
            $sql = <<<EOD
Insert into CA_WEBSEVICE_CONSULTA (ID_WEBSEVICE_CONSULTA,NUM_DOC,CODIGO_TITULO,
    FECHA_LOG,TERMINO_PROCESO,ID_TITULO,MOTIVO_ERROR) 
values (null,'$num_doc','$codigo_titulo',
    sysdate,'0','$id_titulo','$error_log')  
EOD;
            $this->conn->execute($sql);

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

            /**
             * Envio de correo de error - 20190911
             */
            $this->custom_logger->info("Envio de correo de error inicio ");

            $url = $service_url . "webservice_envio_correo/list.json";

            $email_destino = sfConfig::get('app_email_destino');

            $recipients = $email_destino . ';' . 'Admin';

            $body = <<<EOD
<br/>
Se envia correo por fallo de webservie_sigm_consulta; Documento ($num_doc) y Título Minero ($codigo_titulo).                                       
<br/> <br/> 
Error: 
<br/> <br/> 
$error_log
<br/> 
EOD;

            $params = array(
                'user_from' => 'webservice',
                'recipients' => $recipients,
                'asunto' => 'Error webservie_sigm_consulta',
                'body' => $body
            );

            if ($service_url != null) {
                CN_TABLE::curlPostAsync($url, $params);
            }

            $this->custom_logger->info("Envio de correo de error fin");
        }
    }

    /**
     * Executes list action construcción
     *
     * @param sfRequest $request A request object
     */
    public function executeList0(sfWebRequest $request) {

        $this->status = 1;
        $this->list_data = array(
            array(
                'code' => 0,
                'mensaje' => 'Servicio en construcción.',
                'servicio' => 'webservie_sigm_consulta',
                'modulo' => 'CARTERA'
            )
        );
    }

}
