<?php

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

/**
 * Creado: 20190909
 * Link: http://soporte14.sofhouse.net/cartera/web/api_dev.php/api/webservie_sigm_pago_regalias/list.json?num_doc=124124&id_debito=153232&valor_total=45454&fecha_credito=2019-09-11&id_tipo_pago=75&cod_bar=123456789&valor_interes=100&id_mineral=1&codigo_titulo=ASD&email_contacto=fsafasf&id_ts_mb=27
 * webservie_sigm_pago_regalias actions.
 *
 * @package    cartera
 * @subpackage webservie_sigm_pago_regalias
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class webservie_sigm_pago_regaliasActions extends sfActions {

    /**
     * Executes list action
     * Metodo para crear un Credito, con varios detalles
     * Crea Cabecera del credito
     * Crea Detalles del credito
     * Retorna el Credito Creado
     *
     * @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_pago_regalias] Servicio executeList webservie_sigm_pago_regalias.\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_pago_regalias] request[$key] = $value\n");
        }
        $this->custom_logger->info("--------------------------------------------------/  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->custom_logger->info("[webservie_sigm_pago_regalias] request[$key] = $value");
        }
        $this->custom_logger->info("---END Logging request");

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

        /*
         * Cargar parametricas
         */
        //sentencia sql
        $sql = <<<EOD
select * from ca_parametrica@CAN.ANM.LOCAL
where 
alias = 'id_tipo_credito'  
EOD;
        //ejecuta el sql
        $result = CN_TABLE::executeSQL($sql);
        if (count($result) > 0) {
            $id_tipo_credito = $result[0]['valor']; //ca_parametrica   
        }
        //sentencia sql
        $sql = <<<EOD
select * from ca_parametrica@CAN.ANM.LOCAL
where 
alias = 'id_con_credito_pse_codbar'  
EOD;
        //ejecuta el sql
        $result = CN_TABLE::executeSQL($sql);
        if (count($result) > 0) {
            $id_con_credito = $result[0]['valor']; //ca_parametrica
        }
        $sql = <<<EOD
select * from ca_parametrica@CAN.ANM.LOCAL
where 
alias = 'id_bn'  
EOD;
        //ejecuta el sql
        $result = CN_TABLE::executeSQL($sql);
        if (count($result) > 0) {
            $id_bn = $result[0]['valor']; //ca_parametrica
        }
        $sql = <<<EOD
select * from ca_parametrica@CAN.ANM.LOCAL
where 
alias = 'id_cb'  
EOD;
        //ejecuta el sql
        $result = CN_TABLE::executeSQL($sql);
        if (count($result) > 0) {
            $id_cb = $result[0]['valor']; //ca_parametrica
        }

        //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 = '';
        $id_anhos = '';
        $id_mae_ter = '';
        $fecha_credito = '';
        $oficina = 'SIGM';
        $valor_total = $valor = 0;
        $observaciones = '';
        $id_debito = '';
        $id_tipo_pago = '';
        $cod_bar = '';
        $valor_interes = 0;
        $id_mineral = '';
        $codigo_titulo = '';
        $fecha_log = '';
        $termino_proceso = '';
        $id_credito = '';
        $id_movimiento = '';
        $id_recaudo = '';
        $motivo_error = '';
        $sec_credito = '';

        $id_liq_pago_web = '1'; //se asigna 1 por defecto basandose en el servicio anterior  
        $id_ts_mb = '';

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

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

        //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_pago_regalias] " . $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.");
                }
            }

            //revisar para dejar parametrizado        
            $this->valor_total = 0;

            /*
             * Verificar parametros - 20190911
             */
            $param_oblig = 'num_doc;id_debito;valor_total;fecha_credito;id_tipo_pago;cod_bar;valor_interes;id_ts_mb;id_mineral;codigo_titulo;email_contacto';
            $param_oblig_datos = explode(';', $param_oblig);

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

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


            /**
             * Variables obligatorias
             */
            $num_doc = $request['num_doc'];
            $id_debito = $request['id_debito'];
            $valor_total = $valor = str_replace(",", ".", $request['valor_total']);
            $fecha_credito = $request['fecha_credito'];
            $id_tipo_pago = $request['id_tipo_pago'];
            $id_ts_td = $id_tipo_pago;
            $cod_bar = $request['cod_bar'];
            $valor_interes = str_replace(",", ".", $request['valor_interes']);
            $id_ts_mb = $request['id_ts_mb'];
            $id_mineral = $request['id_mineral'];
            $email_contacto = $request['email_contacto'];
            $codigo_titulo = $request['codigo_titulo'];

            if (isset($request['id_etapa'])) {
                $id_etapa = $request['id_etapa'];
            }

            if (isset($request['anualidad'])) {
                $anualidad = $request['anualidad'];
            }

            if (isset($request['acto_admon_resolucion'])) {
                $acto_admon_resolucion = $request['acto_admon_resolucion'];
            }

            if (isset($request['anio_administrativo'])) {
                $anio_administrativo = $request['anio_administrativo'];
            }



            /**
             * Se agrega tipo de tramforma de pago en la oficina - 20160622
             */
            //se transforma solo para el TD 68 mientras se asignan mas TD
            if ($id_ts_td == 68) {
                $oficina = $oficina . ' - PSE';
            } elseif ($id_ts_td == 75) {
                $oficina = $oficina . ' - CODIGO BARRAS';
            }

            /*
             * Traer si es de usuara y fecha_pago_oportuno 
             * Se valida optener el valor correcto si el titulo aplica usura - 20170623
             * Para la indexacion se toma el ultimo dia del mes anterior para verificar la tasa, ya que la actual no se conoce hasta completar todo el mes - 20190924
             */
            $sql = <<<EOD
select
    
tab0.id_pr_tipo_ingre,
tab0.id_tipo_debito,
tab0.id_tip_mon,
tab0.trm_debito,
tab0.email_web,                          
tab0.id_punto_venta,                    
tab0.id_mae_ter,
                    
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.id_pr_tipo_ingre,
    tab0.id_tipo_debito,
    tab0.id_tip_mon,
    tab0.trm_debito,
    tab0.email_web,                    
    tab0.id_punto_venta,                    
    tab0.id_mae_ter,
    
    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 to_date('$fecha_credito','yyyy-mm-dd') < 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 to_date('$fecha_credito','yyyy-mm-dd'))
            and id_meses = EXTRACT(MONTH FROM to_date('$fecha_credito','yyyy-mm-dd'))*/
            id_anhos = EXTRACT(YEAR FROM (to_date( '01/' || EXTRACT(MONTH FROM to_date('$fecha_credito','yyyy-mm-dd')) || '/' || EXTRACT(YEAR FROM to_date('$fecha_credito','yyyy-mm-dd')) , 'dd/mm/yyyy') - 1))
            and id_meses = EXTRACT(MONTH FROM (to_date( '01/' || EXTRACT(MONTH FROM to_date('$fecha_credito','yyyy-mm-dd')) || '/' || EXTRACT(YEAR FROM to_date('$fecha_credito','yyyy-mm-dd')) , 'dd/mm/yyyy') - 1) )        
                )
                                        )/(
                                            (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(to_date('$fecha_credito','yyyy-mm-dd'),'mm')),to_char(trunc(tab0.fecha_pago_oportuno),'yyyy-mm-dd'),to_char(to_date('$fecha_credito','yyyy-mm-dd'),'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(to_date('$fecha_credito','yyyy-mm-dd'),'yyyy')),to_number(to_char(to_date('$fecha_credito','yyyy-mm-dd'),'mm')),to_char(trunc(tab0.fecha_pago_oportuno),'yyyy-mm-dd'),to_char(to_date('$fecha_credito','yyyy-mm-dd'),'yyyy-mm-dd'),nvl(round(tab0.saldo),0))
    end as valor_intereses,
    
    --dias de mora
    case 
        when to_date('$fecha_credito','yyyy-mm-dd')<=trunc(tab0.fecha_vence_rec) then 0
        else nvl(to_date('$fecha_credito','yyyy-mm-dd')-trunc(tab0.fecha_vence_rec)+1,0) 
    end as dias_mora,
    --fecha vencimiento recibo
    case 
    when to_date('$fecha_credito','yyyy-mm-dd')<=TRUNC(tab0.fecha_vence_rec) then to_char(tab0.fecha_vence_rec, 'dd/mm/yyyy')
    else to_char(to_date('$fecha_credito','yyyy-mm-dd'), '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
    
        deb.id_pr_tipo_ingre,
        deb.id_tipo_debito,
        deb.id_tip_mon,
        deb.trm_debito,
        deb.email_web,
        deb.id_punto_venta,                    
        deb.id_mae_ter,
    
        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
        and deb.id_debito = $id_debito  
        
        group by
    
        deb.id_pr_tipo_ingre,
        deb.id_tipo_debito,
        deb.id_tip_mon,
        deb.trm_debito,
        deb.email_web,
        deb.id_punto_venta,                    
        deb.id_mae_ter,
                    
        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 )                   

)tab0  
EOD;

            //ejecuta y obtiene el resultado del sql
            $records = CN_TABLE::executeSQL($sql);
            /*
             * Verifica que sea un registro para insertar las referencias del debito
             */
            if (count($records) == 0) {
                //Codigo de error - 20191001
                $codigo_error = 8;
                throw new Exception("No se encontro registro con el id_debito($id_debito) no existe en el modulo de CARTERA; favor verificar.");
            }

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

            if ($estado == 0) {
                //Codigo de error - 20191001
                $codigo_error = 9;
                throw new Exception("El id_debito($id_debito) esta anulado o reversado, por lo tanto ya no permite el pago en el modulo de CARTERA; favor verificar.");
            }


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

            if ($distribuible == 0) {
                //Codigo de error - 20191001
                $codigo_error = 16;
                throw new Exception("Validacion de producto distribuible, verificar.");
            }

            $sec_debito = 0;

            $id_debito_var = $records[0]['id_debito'];
            $id_punto_venta = $records[0]['id_punto_venta'];
            $id_mae_ter = $records[0]['id_mae_ter'];
            $id_tipo_debito = $records[0]['id_tipo_debito'];
            $id_tip_mon = $records[0]['id_tip_mon'];
            $username = $usuario;
            $codigo_titulo = $cod_titulo = $records[0]['codigo_titulo'];
            $id_pr_tipo_ingre = $records[0]['id_pr_tipo_ingre'];

            $valor_saldo = $records[0]['saldo'];
            $valor_interes_deb = $records[0]['valor_intereses'];
            $valor_total_pago_deb = $records[0]['valor_total_pago'];

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

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


            /**
             * Validar PIN y datos repetidos
             */
            $sql = <<<EOD
SELECT
    *
FROM ca_credito
where
id_anhos = $id_anhos 
AND id_punto_venta = $id_punto_venta
AND id_tipo_credito = $id_tipo_credito
and num_doc = '$cod_bar'
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 = 6;
                throw new Exception("El PIN($cod_bar) para el $id_anhos del registro de pago ya existe; favor verificar.");
            }



            /**
             * Validar coherencia del pago con el pin activado anteriormente
             * Se quita control para dejar pagar, Incidente #5832 - 20170404
             */
            if ($valor_total_pago_deb != $valor_total) {
                //Codigo de error - 20191001
                $codigo_error = 10;
                throw new Exception("El valor real pagado no corresponde al valor esperado de pago valor esperado: $valor_total_pago_deb; valor pagado: " . $valor_total);
            }



            //Crear debito de intereses si los tiene
            $id_debito_interes = 0;
            if ($valor_interes_deb != 0) {

                /**
                 * Crear ND
                 */
                //sentencia sql
                $sql = <<<EOD
SELECT * FROM ca_consecutivo_deb
WHERE id_anhos = $id_anhos
AND id_punto_venta = $id_punto_venta
AND id_tipo_debito = $id_tipo_debito
EOD;

                //ejecuta el sql
                $result = CN_TABLE::executeSQL($sql);

                //validar si hay registro de secuencia debito
                if (count($result) == 1) {

                    //valores de la secuencia debito
                    $sec_debito = $result[0]['consecutivo'] + 1;
                    $this->logMessage("[webservie_sigm_pago_regalias] La secuencia = " . $sec_debito);
                } else {

                    $sec_debito = 1;
                    $this->logMessage("[webservie_sigm_pago_regalias] La secuencia = " . $sec_debito);
                }

                $dias_pago = 0;
                $valor_bruto = $valor_interes_deb;
                $valor_iva = 0;
                $valor_dcto = 0;
                $porcen_dcto = 0;
                $id_mae_ter_ven = $records[0]['id_mae_ter'];
                $id_tipo_mon = $records[0]['id_tip_mon'];
                $valor_moneda = $valor_interes_deb;
                $trm_debito = $records[0]['trm_debito'];
                $periodo_ini = $records[0]['periodo_ini'];
                $periodo_fin = $records[0]['periodo_fin'];
                $fecha_vence_rec = $records[0]['fecha_vence_rec'];
                $email = $records[0]['emal'];

                //Observaciones ND
                $observaciones = "Título minero " . $cod_titulo . ", Interés por concepto de Sec. Debito: " . $sec_debito .
                        ", vigencia " . $id_anhos . ", desde " . $periodo_ini . " hasta " . $periodo_fin;


                //sentencia sql ingresar CA_DEBITO
                //to_date('$fecha_proceso','yyyy-mm-dd'), se deja con sysdate - 20190117
                $sql = <<<EOD
Insert into CA_DEBITO
    (ID_DEBITO,ID_ANHOS,ID_PUNTO_VENTA,ID_TIPO_DEBITO,SEC_DEBITO,ID_MAE_TER,FECHA_PROCESO,DIAS_PAGO,VALOR_BRUTO,
        VALOR_IVA,VALOR_DCTO,PORCEN_DCTO,VALOR_TOTAL,ID_MAE_TER_VEN,OBSERVACIONES,ID_TIP_MON,VALOR_MONEDA,
            TRM_DEBITO,ESTADO,FECHA_ANU,MOTIVO_ANU,PERIODO_INI,PERIODO_FIN,USUARIOLOG,
                ID_PR_TIPO_INGRE,FECHA_VENCIMIENTO,COD_BAR,EMAIL_WEB)
    values (null,$id_anhos,$id_punto_venta,$id_tipo_debito,$sec_debito,$id_mae_ter, 
            trunc(sysdate),$dias_pago,$valor_bruto,$valor_iva,$valor_dcto,$porcen_dcto,$valor_interes_deb,$id_mae_ter_ven,
            '$observaciones',$id_tipo_mon,$valor_moneda,$trm_debito,1,null,null,to_date('$periodo_ini','YYYY-MM-DD'),to_date('$periodo_fin','YYYY-MM-DD'),
                '$username', $id_pr_tipo_ingre,to_date('$fecha_vence_rec','YYYY-MM-DD'),'$cod_bar','$email')
EOD;

                //ejecuta el sql
                $this->conn->execute($sql);

                //ultimo registro insertado CA_DEBITO
                $sql = <<<EOD
select
*
from CA_DEBITO
where
id_anhos = $id_anhos
AND id_punto_venta = $id_punto_venta
AND id_tipo_debito = $id_tipo_debito
AND sec_debito = $sec_debito 
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
                 * y vienen registros para las referenciass
                 */
                if (count($resultado) > 0) {
                    $id_debito_interes = $resultado[0]['id_debito'];
                } else {
                    //Codigo de error - 20191001
                    $codigo_error = 4;
                    throw new Exception("Error al obtener id_debito verificar secuencia $sec_debito.");
                }

                //Adicionar id_debito interes a las ND a pagar
                $id_debito_var = $id_debito_var . ',' . $id_debito_interes;

                /*
                 * INICIO ACTUALIZAR SECUENCIA DEBITO
                 */
                if (count($result) == 1) {
                    $this->logMessage("[webservie_sigm_pago_regalias] La secuencia existe.");

                    //valores de la secuencia debito
                    $sec_debito = $result[0]['consecutivo'] + 1;
                    $id_consecutivo_deb = $result[0]['id_consecutivo_deb'];

                    //sentencia sql actualizar valores  de secuencia debito
                    $sql = <<<EOD
UPDATE CA_CONSECUTIVO_DEB SET consecutivo = $sec_debito  WHERE id_consecutivo_deb = $id_consecutivo_deb
EOD;

                    //ejecuta el sql
                    $this->conn->execute($sql);
                    $this->logMessage("[webservie_sigm_pago_regalias] SQL de actualizacion secuencia debito: " . $sql);
                } else {
                    $this->logMessage("[webservie_sigm_pago_regalias] La secuencia NO existe.");

                    $sec_debito = 1;

                    //sentencia sql
                    $sql = <<<EOD
Insert into CA_CONSECUTIVO_DEB (ID_CONSECUTIVO_DEB,ID_TIPO_DEBITO,ID_ANHOS,ID_PUNTO_VENTA,CONSECUTIVO) 
                values ( null, $id_tipo_debito, $id_anhos, $id_punto_venta, $sec_debito)
EOD;
                    //ejecuta el sql
                    $this->conn->execute($sql);
                    $this->logMessage("[webservie_sigm_pago_regalias] SQL de creacion secuencia debito: " . $sql);
                }
                /*
                 * FIN ACTUALIZAR SECUENCIA DEBITO
                 */

                /*
                 * INICIO registro saldo nuevo por vencimiento
                 */ {

                    //obtener vencimiento nuevo
                    //sentencia sql
                    $sql = <<<EOD
SELECT * FROM CA_VENCIMIENTOS
WHERE id_debito = $id_debito_interes
EOD;

                    //ejecuta el sql
                    $result = CN_TABLE::executeSQL($sql);

                    //validar si hay registro de VENCIMIENTO
                    if (count($result) == 1) {

                        //valores de VENCIMIENTO
                        $id_vencimiento = $result[0]['id_vencimiento'];
                        $valor_vence = $result[0]['valor'];

                        //registrar saldo nuevo
                        //sentencia sql
                        $sql = <<<EOD
Insert Into Ca_Saldos (Id_Debito, Id_Vencimiento, Id_Anhos, Id_Meses, Saldo_Anterior, Debitos_Mes, Creditos_Mes, Saldo_Actual)
    Values ( $id_debito_interes, $id_vencimiento, $id_anhos,  Extract(Month From to_date('$fecha_proceso','yyyy-mm-dd') ), 0, $valor_vence, 0, $valor_vence)
EOD;
                        //ejecuta el sql
                        $this->conn->execute($sql);
                        $this->logMessage("[webservie_sigm_pago_regalias] SQL de creacion saldo vencimientos: " . $sql);
                    } else {

                        $mensaje = "[webservie_sigm_pago_regalias] El vencimiento no existe.";
                        $this->status = 1;
                        $this->mensajeError = $mensaje;
                        $this->logMessage($mensaje);
                    }
                }
                /*
                 * FIN registro saldo nuevo por vencimiento
                 */


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

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

                    //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_pago_regalias';

                    /*
                     * Construir observacion
                     */
                    $observacion = "'Se adiciono id_debito : " . $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 el debito detalle
                 */
                $this->custom_logger->info("Crear el debito detalle");
                //Variables Obligatorias
                //2642-INTERESES FORMULARIO REGALIAS ANNA - reunion 20191007
                $id_producto = 2642;
                $cantidad = 1;
                $valor_uni_bruto = $valor_interes_deb;
                $valor_uni_total = $valor_interes_deb;
                $por_iva = 0;

                /*
                 * Registro debito detalle
                 */
                $sql = <<<EOD
Insert into CA_DEBITO_DETALLE 
(ID_DEBITO_DETALLE,ID_DEBITO,ID_PRODUCTO,CANTIDAD,VALOR_UNITARIO,VALOR_IVA,VALOR_DCTO,PORCEN_DCTO,VALOR_TOTAL,OBSERVACIONES,POR_IVA) 
values ( null, $id_debito_interes, $id_producto, $cantidad, 
            $valor_uni_bruto, 0, 0, 0, $valor_uni_total, '$observaciones', $por_iva ) 
EOD;
                //ejecuta el sql
                $this->conn->execute($sql);
                $this->logMessage("[webservie_sigm_pago_regalias] Se registro debito detalle.");


                /**
                 * Crear Referencia 
                 */
                //sentencia sql
                $sql = <<<EOD
insert into ca_debito_ref (ID_DEBITO,
ID_REFERENCIA1,
ID_REFERENCIA2)
SELECT
$id_debito_interes as ID_DEBITO,
ID_REFERENCIA1,
ID_REFERENCIA2
FROM ca_debito_ref
where
id_debito = $id_debito 
EOD;
                //ejecuta el sql
                $this->conn->execute($sql);
                $this->logMessage("[webservie_sigm_pago_regalias] SQL de las referencias del debito: " . $sql);


                /**
                 * Crear Referencia SIGM
                 */
                $id_etapa = '';
                $anualidad = '';
                //sentencia sql
                $sql = <<<EOD
SELECT
    *
FROM CA_DEBITO_REF_SIGM
where
id_debito = $id_debito 
EOD;
                //ejecuta el sql
                $rec = CN_TABLE::executeSQL($sql);
                if (count($rec) > 0) {
                    $id_etapa = $rec[0]['id_etapa'];
                    $id_etapa = $rec[0]['id_etapa'];
                }

                //sentencia sql
                $sql = <<<EOD
Insert into CA_DEBITO_REF_SIGM values ( $id_debito_interes, 1, '$id_etapa', '$anualidad')
EOD;
                //ejecuta el sql
                $this->conn->execute($sql);
                $this->logMessage("[webservie_sigm_pago_regalias] SQL de las referencias SIGM del debito: " . $sql);
            }


            //Validar que el valor bruto del recibo sea igual a la suma del valor de las notas debito a  pagar
            $sql = <<<EOD

select 
nvl( round(sum(sal.saldo_actual)),0 ) as sum_valor_nd 
    from ca_saldos sal
where id_debito in ($id_debito_var) 
    and sal.id_anhos=to_char(sysdate, 'yyyy') 
    and sal.id_meses=to_char(sysdate, 'mm')

EOD;

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

            if (count($records) != 0) {
                $sum_notas_debito = $records[0]['sum_valor_nd'];
                if ($valor_total_pago_deb != $sum_notas_debito) {
                    //Codigo de error - 20191001
                    $codigo_error = 11;
                    throw new Exception("Ha ocurrido un error: Las notas debito a pagar suman un total de $sum_notas_debito y el total recibido del pago fue de $valor_total_pago_deb");
                }
            } else {
                //Codigo de error - 20191001
                $codigo_error = 11;
                throw new Exception('Ha ocurrido un error en la verificacion de los saldos de las notas debito');
            }

            if (isset($request['oficina'])) {
                $oficina = "" . $request['oficina'] . "";
            }

            $sql = <<<EOD
                                
select 
WMSYS.wm_concat('Nota Débito No.'||deb.sec_debito||' '||prod.descripcion||' de fecha '||to_char(deb.fecha_proceso, 'dd/mm/yyyy')) as desc_concepto_prod
from ca_debito deb
join ca_debito_detalle debdet on deb.id_debito=debdet.id_debito
join ca_producto prod on debdet.id_producto= prod.id_producto
where deb.id_debito in ($id_debito_var)


EOD;

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

            if (count($result) != 0) {
                $conceptos_deb = $result[0]['desc_concepto_prod'];
            } else {
                $conceptos_deb = '';
            }

            //Tipo de pago (75    CODIGO DE BARRAS    COD BAR, 68    PSE - PROVEEDOR SERVICIOS ELEC    PSE  )
            if ($id_tipo_pago == 68) {
                $observaciones_cre = "'CTO $cod_titulo Cancela $conceptos_deb - PAGO PSE'";
            } else if ($id_tipo_pago == 75) {
                $observaciones_cre = "'CTO $cod_titulo Cancela $conceptos_deb - PAGO CODIGO BARRAS'";
            } else {
                $observaciones_cre = "'CTO $cod_titulo Cancela $conceptos_deb'";
            }

            $variables = " - id_anhos: $id_anhos - id_punto_venta: $id_punto_venta - id_tipo_credito: $id_tipo_credito - id_mae_ter: $id_mae_ter";
            $variables .= " - id_con_credito: $id_con_credito - valor_total: $valor_total - fecha_credito: $fecha_credito";

            /*
             * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
             */
            $id_tabla = 'null';
            $id_ope_bd = 3;
            //construir observacion
            $observacion = "'Se van a registrar detalles del credito de los id_debitos: $id_debito_var $variables'";
            $this->custom_logger->info("[webservie_sigm_pago_regalias] " . $observacion . ".\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, $id_punto_venta);


            /**
             * Obtener secuencia para el credito - si no esta creada crearla
             */
            $sql = <<<EOD
select * from ca_consecutivo_cre
where id_anhos = $id_anhos
and id_punto_venta = $id_punto_venta
and id_tipo_credito = $id_tipo_credito
EOD;

            //ejecuta el sql
            $result = CN_TABLE::executeSQL($sql);

            // Validar si hay registro de secuencia credito
            if (count($result) == 1) {

                //valores de la secuencia credito
                $sec_credito = $result[0]['consecutivo'] + 1;
                $this->logMessage("[webservie_sigm_pago_regalias] La secuencia = " . $sec_credito);
            } else {

                $sec_credito = 1;
                $this->logMessage("[webservie_sigm_pago_regalias] La secuencia = " . $sec_credito);
            }

            /**
             * Crear credito
             */
            $sql = <<<EOD
insert into ca_credito (id_credito,id_anhos,id_punto_venta,id_tipo_credito,sec_credito,
    id_con_credito,fecha_proceso,id_bn,id_cb,num_doc,oficina,valor,observaciones,
        estado,fecha_anu,motivo_anu,fecha,id_ts_td,usuariolog,id_mae_ter,aplica_sigm) 
values (null, $id_anhos, $id_punto_venta, $id_tipo_credito, $sec_credito,
    $id_con_credito,to_date('$fecha_proceso','yyyy-mm-dd'),$id_bn,$id_cb,$cod_bar,'$oficina',$valor_total,$observaciones_cre,
        1 ,null,null,to_date('$fecha_credito','yyyy-mm-dd'),$id_ts_td,'$username',$id_mae_ter,1) 
EOD;

            //ejecuta el sql
            $this->conn->execute($sql);

            //ultimo registro insertado ca_credito
            $sql = <<<EOD
select
*
from ca_credito
where
id_anhos = $id_anhos
AND id_punto_venta = $id_punto_venta
AND id_tipo_credito = $id_tipo_credito
AND sec_credito = $sec_credito 
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
             * y vienen registros para las referenciass
             */
            if (count($resultado) > 0) {
                $id_credito = $resultado[0]['id_credito'];
                $this->custom_logger->info("SQL CREDITO nueva. " . $id_credito);
            } else {
                //Codigo de error - 20191001
                $codigo_error = 12;
                throw new Exception("Error al obtener id_credito verificar secuencia $sec_credito.");
            }

            /*
             * INICIO ACTUALIZAR SECUENCIA credito
             */
            if (count($result) == 1) {
                $this->custom_logger->info("[webservie_sigm_pago_regalias] La secuencia existe.");

                //valores de la secuencia credito
                $sec_credito = $result[0]['consecutivo'] + 1;
                $id_consecutivo_cred = $result[0]['id_consecutivo_cred'];

                //sentencia sql actualizar valores  de secuencia credito
                $sql = <<<EOD
update ca_consecutivo_cre set consecutivo = $sec_credito  where id_consecutivo_cred = $id_consecutivo_cred
EOD;

                //ejecuta el sql
                $this->conn->execute($sql);
                $this->logMessage("[webservie_sigm_pago_regalias] SQL de actualizacion secuencia credito: " . $sql);
            } else {
                $this->custom_logger->info("[webservie_sigm_pago_regalias] La secuencia NO existe.");
                $sec_credito = 1;

                //sentencia sql
                $sql = <<<EOD
insert into ca_consecutivo_cre (id_consecutivo_cred,id_tipo_credito,id_anhos,id_punto_venta,consecutivo) 
values ( null, $id_tipo_credito, $id_anhos, $id_punto_venta, $sec_credito)
EOD;
                //ejecuta el sql
                $this->conn->execute($sql);
                $this->logMessage("[webservie_sigm_pago_regalias] SQL de creacion secuencia credito: " . $sql);
            }


            /**
             * Crear detalle credito
             */
            //obtener vencimientos de los debitos a aplicar, con estado 1 y cancelado 0
            $sql = <<<EOD
select ven.*,
'Se registra débito detalle del débito sec. ' || deb.sec_debito || ' por valor total = ' || deb.valor_total  as  observaciones,
deb.id_tip_mon
from ca_vencimientos ven
join ca_debito deb  on ven.id_debito = deb.id_debito
where ven.id_debito in ($id_debito_var)
and ven.estado = 1  
and ven.cancelado = 0  
EOD;

            //ejecuta el sql
            $result = CN_TABLE::executeSQL($sql);

            $cantidad_vec = count($result);
            $this->custom_logger->info("[webservie_sigm_pago_regalias] $cantidad_vec");

            //No hay Vencimientos para el debito o ya estan cancelados
            if ($cantidad_vec <= 0) {
                //Codigo de error - 20191001
                $codigo_error = 13;
                $mensaje_error = '[webservie_sigm_pago_regalias] No hay Vencimientos para el debito o ya estan cancelados. ';
                throw new Exception($mensaje_error);
            }

            $sum_notas_credito = 0;
            //recorre todos los vencimientos
            foreach ($result as $rec) {

                //$id_debito = $rec['id_debito'];
                $id_vencimiento = $rec['id_vencimiento'];
                $valor_venc = $rec['valor'];
                $observaciones_det = $rec['observaciones'];
                $id_tip_mon = $rec['id_tip_mon'];
                $id_debito_sald = $rec['id_debito'];


                /*
                 * validar si se paga un vencimiento completo o se completa un abono anterior
                 * Se verifica creditos activos, y valor completo de todos - 20190530
                 */
                $sql = <<<EOD
select sum(det.valor_bruto) as valor_bruto 
from ca_credito_detalle det 
join ca_credito cred on det.id_credito = cred.id_credito
where det.id_vencimiento = $id_vencimiento and cred.estado = 1 
EOD;

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

                // se completa un abono anterior, se paga con valor de abono
                if (count($records) != 0 && $records[0]['valor_bruto'] != 0) {
                    $valor_venc = $valor_venc - $records[0]['valor_bruto'];
                }

                $sum_notas_credito = $sum_notas_credito + $valor_venc;

                // Crear detalle del credito
                $sql = <<<EOD
insert into ca_credito_detalle (id_credito_detalle,id_credito,id_vencimiento,valor_bruto,valor_retenciones,valor_abono,
    id_tip_mon,valor_total_moneda,trm_credito,diferencia_cambio,observaciones) 
values (null,$id_credito,$id_vencimiento, $valor_venc, 0, $valor_venc,
    $id_tip_mon, 0, 1, 0, '$observaciones_det')  
EOD;
                //ejecuta el sql
                $this->conn->execute($sql);

                $sql = <<<EOD

update ca_saldos
set creditos_mes = creditos_mes + $valor_venc,
saldo_actual = saldo_actual - $valor_venc                            
where id_debito=$id_debito_sald and id_vencimiento = $id_vencimiento 
and id_anhos = to_char(sysdate, 'yyyy') and id_meses=to_char(sysdate, 'mm')

EOD;

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

                /*
                 * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
                 */
                $id_tabla = $id_vencimiento;
                $id_ope_bd = 3;
                $observacion = "'Se adiciono id: $id_vencimiento de un vencimiento para el detalle del id_credito $id_credito desde la funcionalidad: webservie_sigm_pago_regalias por valor de $valor_venc'";
                $this->custom_logger->info("[webservie_sigm_pago_regalias] " . $observacion . ".\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, $id_punto_venta);

                //actualizo el vencimiento
                $sql = <<<EOD
update ca_vencimientos
set cancelado = 1
where id_vencimiento = $id_vencimiento  
EOD;
                //ejecuta el sql
                $this->conn->execute($sql);
                $valor_credito_rev = $valor_credito_rev + $valor_venc;


                /**
                 * Anula los debitos automaticos que se relacionan con el debito cancelado - 20180404
                 */
                //sentencia sql
                $sql = <<<EOD
select
to_char((select max(cre.fecha_proceso) from ca_credito cre where cre.id_credito = $id_credito), 'yyyy-mm-dd') as text_date,                                         
(select max(cre.sec_credito) from ca_credito cre where cre.id_credito = $id_credito) as sec_credito,
(select max(cre.id_anhos) from ca_credito cre where cre.id_credito = $id_credito) as id_anhos_credito,                                        
debbase.sec_debito,
debbase.id_anhos as id_anhos_aut,
debaut.*
from ca_debito_automatico debaut

join ca_debito_vencimientos deb 
on deb.id_debito = debaut.id_debito

join ca_debito debbase
on debbase.id_debito = debaut.id_debito_base

where
debaut.id_debito_base in (
    select 
    deb.id_debito 
    from ca_debito_vencimientos deb
    
    where
    deb.id_debito in (select ca_debito_automatico.id_debito_base from ca_debito_automatico)
    and deb.cancelado = 1
    and deb.estado = 1
)
and deb.estado = 1
and deb.cancelado = 0
and debaut.estado = 1
and debaut.id_debito_base in ( select id_debito from ca_debito_vencimientos where ca_debito_vencimientos.id_vencimiento = $id_vencimiento )
EOD;
                //ejecuta el sql
                $result_automatico = CN_TABLE::executeSQL($sql);

                $usuario = 'admin';
                if (isset($request['username']) && $request['username'] != '') {
                    $usuario = $request['username'];
                }

                foreach ($result_automatico as $value_automatico) {

                    $id_debito_aut = $value_automatico['id_debito'];
                    $sec_debito_aut = $value_automatico['sec_debito'];
                    $id_anhos_aut = $value_automatico['id_anhos_aut'];
                    $text_date = $value_automatico['text_date'];
                    $sec_credito = $value_automatico['sec_credito'];
                    $id_anhos_credito = $value_automatico['id_anhos_credito'];

                    /*
                     * Anula vencimiento
                     */
                    //sentencia sql
                    $sql = <<<EOD
update ca_vencimientos set estado = 0, fecha_anu = to_date('$text_date','yyyy-mm-dd'), 
    motivo_anu = 'CANCELADA POR PAGO A CAPITAL NC.$sec_credito de $id_anhos_credito, CONCILIACION CON INTERESES REALES ND.$sec_debito_aut de $id_anhos_aut' 
        where id_debito = $id_debito_aut
EOD;
                    //ejecuta el sql
                    $this->conn->execute($sql);

                    /**
                     * Anula debito
                     */
                    //sentencia sql
                    $sql = <<<EOD
update ca_debito set usuario_anu = '$usuario', estado = 0, fecha_anu = to_date('$text_date','yyyy-mm-dd'), 
    motivo_anu = 'CANCELADA POR PAGO A CAPITAL NC.$sec_credito de $id_anhos_credito, CONCILIACION CON INTERESES REALES ND.$sec_debito_aut de $id_anhos_aut' 
        where id_debito = $id_debito_aut
EOD;
                    //ejecuta el sql
                    $this->conn->execute($sql);
                }
            }


            /*
             * Calcular secuencia movimiento - 20191001
             */

            //sentencia sql
            $sql = <<<EOD
Select tab0.consecutivo_mb cons from TS_MPT tab0    
EOD;

            //ejecuta el sql
            $st = CN_TABLE::executeSQL($sql);

            $consecutivo = $st[0]['cons'];

            $cons = $id_anhos . "00";

            $ceros = 4 - strlen($consecutivo);

            for ($i = 0; $i < $ceros; $i++) {
                $cons = $cons . "0";
            }

            $con = $cons . ($consecutivo + 1);
            $con_int = $cons . ($consecutivo + 2);

            $consecutivo = 0;
            $consecutivo = $con;
            $consecutivo_int = 0;
            $consecutivo_int = $con_int;

            /*
             * Crear movimiento banco - Contraprestaciones
             * Insert into TS_MOV_BANC 
             * (ID,ID_TS_BN,ID_TS_CB,ID_TS_MB,ID_TS_TD,NUMERO_DOC,FECHA,FECHA_PROC,ID_MAE_TER,VALOR,OBSERVACIONES,AFECTA_PAC,USUARIOLOG,FECHALOG,OFICINA,ID_MINERAL_CB,CONSECUTIVO_MB,ESTADO) 
             * values (1354,3,20,95,6,2353600,to_date('21-JAN-2011','DD-MON-RRRR'),to_date('25-JAN-2011','DD-MON-RRRR'),2626,62150,'CANCELACION FACTURA :14 - 16974','0','admin',to_date('02-FEB-2011','DD-MON-RRRR'),'BOGOTA',null,2011001273,null);
             */
            $valor_saldo = $valor = $valor_total;
            $observaciones_cre = str_replace("'", '', $observaciones_cre);
            $observaciones_cre = 'Pago: ' . $valor . ', ' . $observaciones_cre . ' - Tercero: ' . $num_doc;
            //sentencia sql
            //Se cambia a la fecha actual - 20160622
            //Si la fecha de soporte no es en el mes de proceso, se coloca la fecha de proceso, sysdate - 20160622
            $sql = <<<EOD
Insert into TS_MOV_BANC 
(ID,ID_TS_BN,ID_TS_CB,ID_TS_MB,ID_TS_TD,NUMERO_DOC,FECHA,FECHA_PROC,
                ID_MAE_TER,VALOR,OBSERVACIONES,AFECTA_PAC,USUARIOLOG,FECHALOG,
                OFICINA,ID_MINERAL_CB,CONSECUTIVO_MB,ESTADO,ID_LIQ_PAGO_WEB,
                    ID_TITULO,ID_REFERENCIA,ID_ETAPA,NOMBRE_ETAPA,ID_ANUALIDAD,NOMBRE_ANUALIDAD,
                        ACTO_ADMON_RESOLUCION,ANIO_ADMINISTRATIVO) 
values (null,$id_bn,$id_cb,$id_ts_mb,$id_ts_td,'$cod_bar',
    to_date( substr( '$fecha_credito',0,10) ,'yyyy-mm-dd' ), 
        case when to_char(to_date('$fecha_credito','yyyy-mm-dd'),'mm') = to_char(sysdate,'mm') 
            and to_char(to_date('$fecha_credito','yyyy-mm-dd'),'yyyy') = to_char(sysdate,'yyyy') 
                then to_date( substr( '$fecha_credito',0,10) ,'yyyy-mm-dd' ) else trunc( sysdate ) end,
                $id_mae_ter,$valor,'$observaciones_cre','0','$username',
                sysdate,'$oficina','$id_mineral',$consecutivo,null,$id_liq_pago_web,
                    '$id_titulo','$codigo_titulo','$id_etapa','','$anualidad','',
                        '$acto_admon_resolucion','$anio_administrativo')   
EOD;
            //ejecuta el sql
            $this->conn->execute($sql);


            $this->logMessage("[webservie_sigm_pago_regalias] Creado movimiento banco " . $consecutivo . " de Regalias.");

            $sub = substr($consecutivo, 4);
            //sentencia sql
            $sql = <<<EOD
update TS_MPT set consecutivo_mb = $sub 
EOD;

            //ejecuta el sql
            $this->conn->execute($sql);

            /*
             * Array para regenerar saldos mov
             */
            $bn_cd = array();

            //agregar valores bn y cb
            $concat_bn_cb = $id_bn . ',' . $id_cb;
            if (!array_key_exists($concat_bn_cb, $bn_cd)) {
                $this->logMessage("[webservie_sigm_pago_regalias] Concat BN CB: " . $concat_bn_cb);
                $bn_cd[$concat_bn_cb] = $concat_bn_cb;
            }


            /*
             * Se corren SALDOS DE BANCO
             */
            foreach ($bn_cd as $key => $value) {
                $this->logMessage("[webservie_sigm_pago_regalias] Entro a regenerar saldos.");

                //divide la variable
                $div_bn_cb = explode(",", $value);

                $id_bn = $div_bn_cb[0];
                $id_cb = $div_bn_cb[1];

                $sql = <<<EOD
select 
t.id, t.vigencia, t.mes, t.fecha, 
t.id_ts_bn, t.id_ts_cb, t.saldo_anterior, 
t.debito, t.credito, t.saldo_actual 
from ts_saldo_banc t
where 
(
t.fecha = ( select fecha from ts_fecha_proc where id = 1 ) and 
t.id_ts_bn = $id_bn and 
t.id_ts_cb = $id_cb
)  
EOD;
                //ejecuta el sql
                $SaldoBanc = CN_TABLE::executeSQL($sql);


                //Obtengo el id de esa cuenta
                $id_saldo_banc = null;

                foreach ($SaldoBanc as $sb):
                    $id_saldo_banc = $sb['id'];

                    //creo el objeto de saldos bancarios
//                    $ts_saldo_banc = Doctrine::getTable('TS_SALDO_BANC')->find($id_saldo_banc);
                    //sentencia sql
                    $sql = <<<EOD
select * from TS_SALDO_BANC
where id = $id_saldo_banc
EOD;
                    //ejecuta el sql
                    $ts_saldo_banc = CN_TABLE::executeSQL($sql);

//                    $conceptoMB = Doctrine::getTable('TS_MB')
//                            ->createQuery('a')
//                            ->where('a.id=?', $id_ts_mb)
//                            ->execute();
                    //sentencia sql
                    $sql = <<<EOD
select t.id, t.codigo, t.descripcion,
t.rubro_ing, t.grupo, t.dian, t.traslado,
t.operador, t.id_tip_mov, t.reintegro,
t.caja, t.retencion, t.id_ts_cr from ts_mb t 

where (t.id = $id_ts_mb)
EOD;
                    //ejecuta el sql
                    $conceptoMB = CN_TABLE::executeSQL($sql);


                    $operador = null;

                    if (count($ts_saldo_banc) > 0) {


                        foreach ($conceptoMB as $cmb):
                            $operador = $cmb['operador'];

                            if ($operador == 0):
                                $credito = $ts_saldo_banc[0]['credito'];
                                $saldoAnterior = $ts_saldo_banc[0]['saldo_anterior'];
                                $debito = $ts_saldo_banc[0]['debito'];

                                $credito = $credito + $valor_saldo;
                                $saldoActual = $saldoAnterior + $debito - $credito;

//                        $ts_saldo_banc->setCredito($credito);
//                        $ts_saldo_banc->setSaldoActual($saldoActual);
//                        $ts_saldo_banc->save();
                                //sentencia sql
                                $sql = <<<EOD
UPDATE TS_SALDO_BANC set credito = $credito, saldo_actual = $saldoActual  where id = $id_saldo_banc 
EOD;
                                //ejecuta el sql
                                $this->conn->execute($sql);

                            else:

                                $credito = $ts_saldo_banc[0]['credito'];
                                $saldoAnterior = $ts_saldo_banc[0]['saldo_anterior'];
                                $debito = $ts_saldo_banc[0]['debito'];

                                $debito = $debito + $valor_saldo;
                                $saldoActual = $saldoAnterior + $debito - $credito;

//                        $ts_saldo_banc->setDebito($debito);
//                        $ts_saldo_banc->setSaldoActual($saldoActual);
//                        $ts_saldo_banc->save();
                                //sentencia sql
                                $sql = <<<EOD
UPDATE TS_SALDO_BANC set debito = $debito, saldo_actual = $saldoActual  where id = $id_saldo_banc 
EOD;
                                //ejecuta el sql
                                $this->conn->execute($sql);

                            endif;


                        endforeach;
                    }

                endforeach;
            }


            /*
             * Retornar el id_recaudo - 20160421
             */
            //sentencia sql
            $sql = <<<EOD
select * from re_recaudo
where 
id_bn = $id_bn
and id_cb = $id_cb
and numero_doc = '$cod_bar'
order by
id_recaudo desc 
EOD;
            //ejecuta el sql
            $recaudo = CN_TABLE::executeSQL($sql);

            $id_recaudo = 0;
            if (count($recaudo) > 0) {
                $id_recaudo = $recaudo[0]['id_recaudo'];
            }

            /*
             * Retornar el id_movimiento - 20161011
             */
            //sentencia sql
            $sql = <<<EOD
select * from ts_mov_banc
where 
id_ts_bn = $id_bn
and id_ts_cb = $id_cb
and numero_doc = '$cod_bar'
order by
id desc 
EOD;
            //ejecuta el sql
            $movimiento = CN_TABLE::executeSQL($sql);

            $id_movimiento = 0;
            if (count($movimiento) > 0) {
                $id_movimiento = $movimiento[0]['id'];
            }


            $sql = <<<EOD

select round($sum_notas_credito) as sum_notas_credito_round from dual
                    
EOD;


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

            if (count($records) != 0) {
                $sum_notas_credito = $records[0]['sum_notas_credito_round'];
            } else {
                $sum_notas_credito = 0;
            }


            // Validacionces del proceso
            $tag_error = true;
            $mensaje_error = '';
            //El valor del credito es diferente al de los debitos que va a pagar
            if ($sum_notas_credito != $sum_notas_debito) {
                //Codigo de error - 20191001
                $codigo_error = 14;
                $mensaje_error = "[webservie_sigm_pago_regalias] El valor del credito es diferente al de los debitos que va a pagar. (Valor creditos: $sum_notas_credito - Valor debitos: $sum_notas_debito )";
                throw new Exception($mensaje_error);
            }


            /*
             * Revalidar secuencia debito creada - 20190911
             */
            $this->custom_logger->info("Revalidar secuencia debito creada");
            //sentencia sql
            $sql = <<<EOD
select
*
from CA_DEBITO
where
id_anhos = $id_anhos
AND id_punto_venta = $id_punto_venta
AND id_tipo_debito = $id_tipo_debito
AND sec_debito = $sec_debito 
EOD;

            //ejecuta el sql
            $result = CN_TABLE::executeSQL($sql);

            //validar si hay registro de secuencia debito
            if (count($result) > 1) {
                //Codigo de error - 20191001
                $codigo_error = 4;
                throw new Exception("Ya existe la secuencia($sec_debito) para la obligación.");
            }


            /*
             * Revalidar secuencia credito creada - 20190916
             */
            $this->custom_logger->info("Revalidar secuencia credito creada");
            //sentencia sql
            $sql = <<<EOD
select
*
from CA_CREDITO
where
id_anhos = $id_anhos
AND id_punto_venta = $id_punto_venta
AND id_tipo_credito = $id_tipo_credito
AND sec_credito = $sec_credito 
EOD;

            //ejecuta el sql
            $result = CN_TABLE::executeSQL($sql);

            //validar si hay registro de secuencia debito
            if (count($result) > 1) {
                //Codigo de error - 20191001
                $codigo_error = 15;
                throw new Exception("Ya existe la secuencia($sec_credito) para el pago.");
            }

            /*
             * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
             */
            $id_tabla = $id_credito;
            $id_ope_bd = 3;
            $observacion = "'Se termino el proceso de webservie_sigm_pago_regalias, registros creados correctamente.'";
            $this->custom_logger->info("[webservie_sigm_pago_regalias] " . $observacion . ".\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, $id_punto_venta);



            /**
             * Crear registro de log
             */
            $sql = <<<EOD
Insert into CA_WEBSEVICE_PAGO_REGA (ID_WEBSEVICE_PAGO_REGA,ID_ANHOS,ID_PUNTO_VENTA,ID_TIPO_CREDITO,ID_CON_CREDITO,ID_MAE_TER,FECHA_CREDITO,
ID_BN,ID_CB,OFICINA,VALOR,OBSERVACIONES,ID_DEBITO,ID_TIPO_PAGO,COD_BAR,VALOR_INTERES,ID_MINERAL,CODIGO_TITULO,
FECHA_LOG,TERMINO_PROCESO,ID_CREDITO,ID_MOVIMIENTO,ID_RECAUDO,MOTIVO_ERROR) 
values (null,'$id_anhos',$id_punto_venta,'$id_tipo_credito','$id_con_credito','$id_mae_ter',to_date('$fecha_credito','YYYY-MM-DD'),
'$id_bn','$id_cb','$oficina','$valor_total','$observaciones','$id_debito','$id_tipo_pago','$cod_bar','$valor_interes','$id_mineral','$codigo_titulo',
sysdate,'1','$id_credito','$id_movimiento','$id_recaudo','')                     
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->mensajeError = $mensaje;
            $this->list_data = array(
                array(
                    'mensaje' => $mensaje,
                    'id_credito' => $id_credito,
                    'id_anhos' => $id_vigencia,
                    'sec_credito' => $sec_credito,
                    'id_movimiento' => $id_movimiento,
                    'id_recaudo' => $id_recaudo,
                    'servicio' => 'webservie_sigm_pago_regalias',
                    'modulo' => 'CARTERA'
                )
            );

            /**
             * GENERAR MOVIMIENTO BANCO - 20160211
             * No es necesario ya que esta en el codigo delservicio crear mov banc y dependiente el ts_mb crea el recaudo - 20191002
             */
            $this->logMessage("INICIO GENERAR MOVIMIENTO BANCO");

//            $sql = <<<EOD
//ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD" 
//EOD;
//            CN_TABLE::executeSQL($sql);
//
//            //Valida que aplica banco
//            $sql = <<<EOD
//select * from ca_con_credito
//where id_con_credito = $id_con_credito
//and aplica_bn = 1 
//EOD;
//
//            $resultado = CN_TABLE::executeSQL($sql);
//            $aplica_banco = false;
//            if (count($resultado) > 0) {
//                $aplica_banco = true;
//            }
//
//            if ($aplica_banco) {
//                $this->logMessage("GENERAR MOVIMIENTO BANCO");
//
//                //Traer datos de la factura
//                $sql = <<<EOD
//select * from ca_credito
//where
//id_credito = $id_credito 
//EOD;
//
//                $resultado = CN_TABLE::executeSQL($sql);
//
//                if (count($resultado) > 0) {
//
//                    $id_credito = $resultado[0]['id_credito'];
//                    $id_anhos = $resultado[0]['id_anhos'];
//                    $id_punto_venta = $resultado[0]['id_punto_venta'];
//                    $id_tipo_credito = $resultado[0]['id_tipo_credito'];
//                    $sec_credito = $resultado[0]['sec_credito'];
//                    $id_con_credito = $resultado[0]['id_con_credito'];
//                    $fecha_proceso = $resultado[0]['fecha_proceso'];
//                    $id_bn = $resultado[0]['id_bn'];
//                    $id_cb = $resultado[0]['id_cb'];
//                    $num_doc = $resultado[0]['num_doc'];
//                    $oficina = $resultado[0]['oficina'];
//                    $valor = $resultado[0]['valor'];
//                    $fecha = $resultado[0]['fecha'];
//                    $id_ts_td = $resultado[0]['id_ts_td'];
//                    $id_mae_ter = $resultado[0]['id_mae_ter'];
//                }
//
//                $url = $service_url;
//                $url = $url . 'movimiento_banco/list.json?id_mod=12&username=websafi&nitocc=800189921&id_username=946';
//
//                //variables del credito
//                $url = $url . '&id_credito=' . $id_credito;
//                $url = $url . '&id_anhos=' . $id_anhos;
//                $url = $url . '&id_punto_venta=' . $id_punto_venta;
//                $url = $url . '&id_tipo_credito=' . $id_tipo_credito;
//                $url = $url . '&sec_credito=' . $sec_credito;
//                $url = $url . '&id_con_credito=' . $id_con_credito;
//                $url = $url . '&fecha_proceso=' . $fecha_proceso;
//                $url = $url . '&id_bn=' . $id_bn;
//                $url = $url . '&id_cb=' . $id_cb;
//                $url = $url . '&num_doc=' . $num_doc;
//                $url = $url . '&oficina=' . $oficina;
//                $url = $url . '&valor=' . $valor;
//                $url = $url . '&fecha=' . $fecha;
//                $url = $url . '&id_ts_td=' . $id_ts_td;
//                $url = $url . '&id_mae_ter=' . $id_mae_ter;
//                $url = $url . '&tag_portal_web=1'; //facturas portal web - validar el retorno del json - 20160512
//
//                $ch = curl_init($url);
//
//                //Parametros de retorno en cURL
//                curl_setopt($ch, CURLOPT_HEADER, 0);
//                $rta = curl_exec($ch);
//                curl_close($ch);
//
//                $arrayRespuesta = json_decode($rta, true);
//                //Verifica el status, si es diferente de 0, ocurrio un error al subir la interfaz y debe reportarlo
//                if ($arrayRespuesta['response']['status'] == 1) {
//                    $mensajeError = "Error :: Al generar el movimiento de bancos, se debe anular la factura.";
//                    $this->status = 1;
//                    $this->list_data = array();
//                    $this->mensajeError = $mensajeError;
//                    $this->logMessage("[webservie_sigm_pago_regalias] " . $mensajeError);
//                } else {
//                    $this->logMessage("[webservie_sigm_pago_regalias] Genero movimiento de bancos.");
//                }
//            } else {
//                $this->logMessage("[webservie_sigm_pago_regalias] No aplica bancos.");
//            }
            /**
             * FIN MOVBANC
             */
            /**
             * Llamado INTERFAZ CONTABLE - 20170724
             */
            $this->logMessage("INICIO INTERFAZ CONTABLE DEBITO");

            $url = $service_url;
            $url = $url . 'ejecutaInterfacesContables/list.json?id_mod=11&username=websafi&nitocc=800189921&id_username=946';
            //variables del debito
            $id_mae_ter = 946;
            $mov_ejecutado = "Notas-.-Debito";

            $params = array(
                'fecha_proceso' => $fecha_proceso,
                'id_mae_ter' => $id_mae_ter,
                'mov_ejecutado' => $mov_ejecutado,
                'id_movimiento' => $id_debito_interes,
                'tag_portal_web' => '1' //facturas portal web - validar el retorno del json
            );

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

            $this->logMessage("FIN INTERFAZ CONTABLE DEBITO");


            /**
             * Llamado INTERFAZ CONTABLE - 20170724
             */
            $this->logMessage("INICIO INTERFAZ CONTABLE CREDITO");

            $url = $service_url;
            $url = $url . 'ejecutaInterfacesContables/list.json?id_mod=11&username=websafi&nitocc=800189921&id_username=946';
            //variables del debito
            $id_mae_ter = 946;
            $mov_ejecutado = "Notas-.-Credito";

            $params = array(
                'fecha_proceso' => $fecha_proceso,
                'id_mae_ter' => $id_mae_ter,
                'mov_ejecutado' => $mov_ejecutado,
                'id_movimiento' => $id_credito,
                'tag_portal_web' => '1' //facturas portal web - validar el retorno del json
            );

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

            $this->logMessage("FIN INTERFAZ CONTABLE CREDITO");


            /**
             * Llamado INTERFAZ CONTABLE MOVBANCO - 20191002
             */
            $this->logMessage("INICIO INTERFAZ CONTABLE MOVBANCO");

            $url = $service_url;
            $url = $url . 'ejecutaInterfacesContables/list.json?id_mod=11&username=websafi&nitocc=800189921&id_username=946';
            //variables del debito
            $id_mae_ter = 946;
            $mov_ejecutado = "MOVBANCO";

            $params = array(
                'fecha_proceso' => $fecha_proceso,
                'id_mae_ter' => $id_mae_ter,
                'mov_ejecutado' => $mov_ejecutado,
                'id_movimiento' => $id_movimiento,
                'tag_portal_web' => '1' //facturas portal web - validar el retorno del json
            );

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

            $this->logMessage("FIN INTERFAZ CONTABLE MOVBANCO");
        } catch (Exception $e) {

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

            $mensaje = "[webservie_sigm_pago_regalias] ROLLBACK ERROR al Generar el credito. !!!";
            $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_pago_regalias',
                    '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 = 3;
            $observacion_log = "'Se termino el proceso de webservie_sigm_pago_regalias, se generaron errores en el proceso de creación.'";
            $this->custom_logger->info("[webservie_sigm_pago_regalias] " . $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_PAGO_REGA (ID_WEBSEVICE_PAGO_REGA,ID_ANHOS,ID_PUNTO_VENTA,ID_TIPO_CREDITO,ID_CON_CREDITO,ID_MAE_TER,FECHA_CREDITO,
ID_BN,ID_CB,OFICINA,VALOR,OBSERVACIONES,ID_DEBITO,ID_TIPO_PAGO,COD_BAR,VALOR_INTERES,ID_MINERAL,CODIGO_TITULO,
FECHA_LOG,TERMINO_PROCESO,ID_CREDITO,ID_MOVIMIENTO,ID_RECAUDO,MOTIVO_ERROR) 
values (null,'$id_anhos',$id_punto_venta,'$id_tipo_credito','$id_con_credito','$id_mae_ter',to_date('$fecha_credito','YYYY-MM-DD'),
'$id_bn','$id_cb','$oficina','$valor_total','$observaciones','$id_debito','$id_tipo_pago','$cod_bar','$valor_interes','$id_mineral','$codigo_titulo',
sysdate,'0','$id_credito','$id_movimiento','$id_recaudo','$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_pago_regalias; id_debito ($id_debito) de fecha($fecha_credito) y valor_total ($valor_total).                                       
<br/> <br/> 
Error: 
<br/> <br/> 
$error_log
<br/> 
EOD;

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

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

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

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

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

}
