<?php

/**
 * envio_alarma actions.
 * 
 * Link: http://soporte14.sofhouse.net/cobro_coactivo/web/api_dev.php/api/envio_alarmas/list.json?id_alarma=5
 *
 * @package    cobro_coactivo
 * @subpackage envio_alarma
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class envio_alarmasActions extends sfActions {

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

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

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

        //formato de envio
        $format = 'PDF';
        $array_jasper = array();

        try {

            $email_envio = sfConfig::get('app_email_envio');
            $this->logMessage("email_envio: " . $email_envio);

            $array = sfYaml::load(dirname(__FILE__) . '/../../../config/app-gwt.yml');
            $int = 0;
            $correoEnvio = "";
            $service_url = "";
            foreach ($array as $routeName => $routeData) {
                if ('service_url_local' == $routeName) {
                    foreach ($routeData as $key => $value) {
                        if ($key == 'value') {
                            $service_url = $value;
                        }
                    }
                }
                if ('correoEnvio' == $routeName) {
                    foreach ($routeData as $key => $value) {
                        //echo $value . "\n";
                        if ($key == 'value') {
                            $correoEnvio = $value;
                        }
                    }
                }
                $int++;
            }
            //URL de servicio correo
            $url_envio_correo = $service_url . "curl_envio_correo/list.json";
            $id_username = $request['id_username'];
            $username = $request['username'];

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

            //id_alarma
            $id_alarma = 0;
            if (isset($request["id_alarma"])) {
                $id_alarma = $request["id_alarma"];
                //$whereAlarma = 'and alar.id_alarma = ' . $id_alarma;
            }
            $this->custom_logger->info("asignado id_alarma = $id_alarma");

            $array_adjuntos = array();

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

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

            /**
             * Traer todas las alarmas activas
             */
            /* Se declara array de ID de alarmas mientras se confirma si se obtiene desde la BD */
            if ($id_alarma == 0) {
                $array_alarmas = array(
                    array(
                        'id_alarma' => '1',
                        'comando' => 'envio_alarmas',
                        'comentario' => 'cuando se paguen la totalidad de las cuotas de un acuerdo y no se a terminado la facilidad'
                    ),
                    array(
                        'id_alarma' => '2',
                        'comando' => 'envio_alarmas',
                        'comentario' => 'Cuando se Evidencien dos Cuotas pendientes de Pago'
                    ),
                    array(
                        'id_alarma' => '3',
                        'comando' => 'envio_alarmas',
                        'comentario' => 'Registro oficio del mandamiento no notificado al titular'
                    )
                );
            } else {
                $array_alarmas = array(array(
                        'id_alarma' => $id_alarma,
                        'comando' => 'envio_alarmas',
                ));
            }



            /**
             * Recorrer notificacion
             */
            $this->custom_logger->info("[envio_notificacion] Recorrer notificacion");

            foreach ($array_alarmas as $value_alarmas) {

                $id_alarma = $value_alarmas['id_alarma'];
                $this->custom_logger->info("[envio_alarmas] id_alarma = $id_alarma");
                $array_jasper['id_alarma'] = $id_alarma;
                $comando = $value_alarmas['comando'];

                switch ($id_alarma):
                    /*
                     * Implementación de notificación al abogado, cuando se paguen la totalidad de las cuotas de un acuerdo, debe solicitar el registro del auto
                     */
                    case '1':
                        $this->custom_logger->info("[envio_alarmas] INICIO Notificacion ID  1");
                        $this->custom_logger->info("[envio_alarmas] Obtener Datos para enviar notificacion");

                        $consulta_sql = <<<EOD
select distinct 
usu.username,
'$comando' as comando,
avoc.id_facilidad_pago as id_tabla,
'$id_mae_bd' as id_mae_bd,
'$id_username' as id_username,
avoc.id_facilidad_pago,
remi.numero_remision,
remi.anho_remision as id_anhos,
remi.cod_titulo,
ter.id_tipo_doc,
ter.num_doc,
ter.razon_soc,
abo.email as correo,
'$correoEnvio' as email_envio,
'' as mensaje_extra,
'' as mensaje_firma,
'Se notifica del pago de todas las cuotas indicadas, por lo tanto se solicita la terminacion de facilidad pago del titulo minero ' || remi.cod_titulo  || ', verificar recepcion No.'|| remi.numero_remision || '-' || remi.anho_remision
    || ', se envia correo al abogado( '|| ter.num_doc || '-' || ter.razon_soc ||' ).' as mensaje,
'SOLICITUD TERMINACION FACILIDAD PAGO - Recepcion No.'|| remi.numero_remision || '-' || remi.anho_remision || ' del Titulo: ' || remi.cod_titulo as subject,
--datos de envio
ter.num_doc as num_doc_env,
ter.id_tipo_doc as id_tipo_doc_env,
ter.razon_soc as razon_social_env,
abo.email as correo_env,
--datos de envio usuario
usu.num_doc as num_doc_usu,
usu.id_tipo_doc as id_tipo_doc_usu,
usu.nombre || ' ' || usu.nombre as razon_social_usu,
usu.email as correo_usu
from (
select tab0.*
from CBR_PLANIFICA_FP tab0
join(
select id_planifica_fp, count(id_planifica_fp) as cuotas_pagadas
from CBR_DEtALLE_CUOTA
where pagada = 1
group by id_planifica_fp)tab1 on tab1.id_planifica_fp= tab0.id_planifica_fp and tab1.cuotas_pagadas = tab0.NUMERO_CUOTAS
)avoc
left join cbr_facilidad_pago_v cfp
on cfp.id_facilidad_pago=avoc.id_facilidad_pago
--left join cbr_tipo_documento tipdoc
--on tipdoc.id_tipo_documento = avoc.id_tipo_documento
left join cbr_reparto repa
on repa.id_remision_titulo = cfp.id_remision_titulo
left join cbr_remision_titulo remi
on cfp.id_remision_titulo = remi.id_remision_titulo
left join cbr_abogado abo
on abo.id_abogado = repa.id_abogado
left join interceros_v ter
on ter.id_mae_ter = abo.id_mae_ter
left join usuario usu
on usu.username = '$username'
where
cfp.estado = 0 and cfp.incumplimiento = 0
EOD;
                        //ejecuta el sql
                        $array_notif = CN_TABLE::executeSQL($consulta_sql);
                        /* $array_notif = array(array(
                          'email_envio' => 'websafi@anm.gov.co',
                          'email' => 'dortega@sofhouse.net',
                          'subject' => 'Prueba Correo Notificacion 10',
                          'mensaje_extra' => 'TEXTO MENSAJE EXTRA',
                          'mensaje_extra_gwt' => 'texto mensaje extra gwt',
                          'referencia' => 'referencia',
                          'num_doc' => '123456',
                          'nombre_completo' => 'Usuario Prueba',
                          'arrayadjuntos' => $request['arrayadjuntos'],
                          'mensaje_firma' => 'firma',
                          'mensaje' => 'Mensaje de correo de prueba',
                          'comando' => 'envio_alarmas',
                          'id_tabla' => '1',
                          'id_mae_bd' => '1')
                          );
                         */
                        $i = 0;
                        $total_notif = count($array_notif);
                        foreach ($array_notif as $value_notif) {
                            $i++;
                            $this->custom_logger->info("[envio_alarmas] notificaicion $i de $total_notif");

                            //cuerpo del mensaje
                            //Metodo Envio Correo

                            $record = $value_notif;

                            foreach ($record as $key => $value) {
                                $params[$key] = $value;
                            }

                            $params['correo_usu'] = null;

                            if ($service_url != null) {
                                CN_TABLE::curlPostAsync($url_envio_correo, $params);
                            }
                            $body = "Correo prueba";

                            $this->logMessage("Mensaje Correo: " . $body);
                            $this->custom_logger->info("[envio_alarmas] Fin notificaicion $i de $total_notif");
                        }
                        $this->custom_logger->info("[envio_alarmas] FIN ID Notificacion 1");

                        break;
                    /*
                     * Cuando se Evidencien dos Cuotas pendientes de Pago, el sistema debe generar una alerta al Abogado, indicando que debe generar Resolución de Incumplimiento
                     */
                    case '2':
                        $this->custom_logger->info("[envio_alarmas] INICIO Notificacion ID  2");
                        $this->custom_logger->info("[envio_alarmas] Obtener Datos para enviar notificacion");
                        $consulta_sql = <<<EOD
select
usu.username,
'$comando' as comando,
avoc.id_facilidad_pago as id_tabla,
'$id_mae_bd' as id_mae_bd,
'$id_username' as id_username,
avoc.id_facilidad_pago,
remi.numero_remision,
remi.anho_remision as id_anhos,
remi.cod_titulo,
ter.id_tipo_doc,
ter.num_doc,
ter.razon_soc,
abo.email as correo,
'$correoEnvio' as email_envio,
'' as mensaje_extra,
'' as mensaje_firma,
'Se notifica que se encuentran '|| avoc.cuotas_pendientes ||' cuotas pendientes del titulo minero ' || remi.cod_titulo  || ', verificar recepcion No.'|| remi.numero_remision || '-' || remi.anho_remision
    || ', se envia correo al abogado( '|| ter.num_doc || '-' || ter.razon_soc ||' ).' as mensaje,
avoc.cuotas_pendientes || ' CUOTAS PENDIENTES - Recepcion No.'|| remi.numero_remision || '-' || remi.anho_remision || ' del Titulo: ' || remi.cod_titulo as subject,
--datos de envio
ter.num_doc as num_doc_env,
ter.id_tipo_doc as id_tipo_doc_env,
ter.razon_soc as razon_social_env,
abo.email as correo_env,
--datos de envio usuario
usu.num_doc as num_doc_usu,
usu.id_tipo_doc as id_tipo_doc_usu,
usu.nombre || ' ' || usu.nombre as razon_social_usu,
usu.email as correo_usu
from (
select tab0.*,tab1.cuotas_pendientes
from CBR_PLANIFICA_FP tab0
join(
select id_planifica_fp, count(id_planifica_fp) as cuotas_pendientes
from CBR_DEtALLE_CUOTA
where pagada = 0 and fecha_cuota_habil < sysdate
group by id_planifica_fp
having count(id_planifica_fp)>1)tab1 on tab1.id_planifica_fp= tab0.id_planifica_fp
)avoc
left join cbr_facilidad_pago_v cfp
on cfp.id_facilidad_pago=avoc.id_facilidad_pago
--left join cbr_tipo_documento tipdoc
--on tipdoc.id_tipo_documento = avoc.id_tipo_documento
left join cbr_reparto repa
on repa.id_remision_titulo = cfp.id_remision_titulo
left join cbr_remision_titulo remi
on cfp.id_remision_titulo = remi.id_remision_titulo
left join cbr_abogado abo
on abo.id_abogado = repa.id_abogado
left join interceros_v ter
on ter.id_mae_ter = abo.id_mae_ter
left join usuario usu
on usu.username = '$username'
EOD;
                        //ejecuta el sql
                        $array_notif = CN_TABLE::executeSQL($consulta_sql);
                        /* $array_notif = array(array(
                          'email_envio' => 'websafi@anm.gov.co',
                          'email' => 'dortega@sofhouse.net',
                          'subject' => 'Prueba Correo Notificacion 14',
                          'mensaje_extra' => 'TEXTO MENSAJE EXTRA',
                          'mensaje_extra_gwt' => 'texto mensaje extra gwt',
                          'referencia' => 'referencia',
                          'num_doc' => '123456',
                          'nombre_completo' => 'Usuario Prueba',
                          'arrayadjuntos' => $request['arrayadjuntos'],
                          'mensaje_firma' => 'firma',
                          'mensaje' => 'Mensaje de correo de prueba',
                          'comando' => 'envio_alarmas',
                          'id_tabla' => '1',
                          'id_mae_bd' => '1')
                          );
                         */
                        $i = 0;
                        $total_notif = count($array_notif);
                        foreach ($array_notif as $value_notif) {
                            $i++;

                            //cuerpo del mensaje
                            //Metodo Envio Correo
                            $this->custom_logger->info("[envio_alarmas] notificaicion $i de $total_notif");
                            $record = $value_notif;
                            foreach ($record as $key => $value) {
                                $params[$key] = $value;
                            }

                            $params['correo_usu'] = null;

                            if ($service_url != null) {
                                CN_TABLE::curlPostAsync($url_envio_correo, $params);
                            }
                            $body = "Correo prueba";

                            $this->logMessage("Mensaje Correo: " . $body);
                            $this->custom_logger->info("[envio_alarmas] Fin notificaicion $i de $total_notif");
                        }
                        $this->custom_logger->info("[envio_alarmas] FIN ID Notificacion 2");

                        break;
                    /*
                     * Alerta de 15 dias si se registro el oficio y no esta notificado aun. 
                     * Envío al abogado, Alerta que verifica que se registro oficio del mandamiento y aun no se ha notificado al titular     
                     */
                    case '3':
                        $this->notificar_resgistro_oficio_no_notificado($username, $id_username, $url_envio_correo, $comando, $correoEnvio);
                        break;
                    /*
                     * Alerta 1 año antes de la fecha de exigibilidad  envia correo recordando al abogado que aun no se ha procesado ninguno de los ids de las actuaciones procesales 
                     * indicadas en el parametro IDS_VALIDA_REGISTRO_ANTES_FECHA_EXIGIBILIDAD de la tabla. * CBR_PARAM_GEN
                     */
                    case '4':
                        $this->notificar_valida_actuaciones_proc_antes_fecha_exigibilidad($username, $id_username, $url_envio_correo, $comando, $correoEnvio);
                        break;
                    /*
                     * Envío al abogado, Alerta 4 años posteriores a la fecha de exigibilidad que no se ha terminado el proceso, 
                     * Valido actuaciones procesales indicadas en el parametro IDS_VALIDA_POST_FECHA_EXIGIBILIDAD de la tabla. * CBR_PARAM_GEN
                     */
                    case '5':
                        $this->notificar_no_termnacion_proceso($username, $id_username, $url_envio_correo, $comando, $correoEnvio);
                        break;
                endswitch;
            }
            $this->custom_logger->info("[envio_notificacion] FIN Recorrer notificacion");

            $this->list_data = array(
                array(
                    'mensaje' => "Termino Correctamente."
                )
            );
            $this->conn->commit();
        } catch (Exception $e) {

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

            $mensaje = "[envio_notificacion] ROLLBACK ERROR al Generar envio de correos. !!!";
            $this->custom_logger->info($mensaje);
            $this->custom_logger->info("state 2");
            $this->custom_logger->info("Code " . $e->getCode());
            $this->custom_logger->info("Message " . $e->getMessage());

            $this->status = 2;
            $this->mensajeError = $mensaje;
            $this->list_data = array(
                array(
                    'Code' => $e->getCode(),
                    'Line' => $e->getLine(),
                    'mensaje' => $mensaje
                )
            );
        }
    }

    /**
     * CASE 3
     * Alerta de 15 dias si se registro el oficio y no esta notificado aun
     * Envío al abogado, Alerta que verifica que se registro oficio del mandamiento y aun no se ha notificado al titular     
     * 
     * @param type $id_resoluciones
     * @param sfWebRequest $request
     */
    function notificar_resgistro_oficio_no_notificado($username, $id_username, $url_envio_correo, $comando, $correoEnvio) {
        $id_mae_bd = CN_TABLE::consultarIdTablaBD('CBR_REGISTRO_ETAPA');
        $this->custom_logger->info("[envio_alarmas] INICIO Notificacion ID  3");
        $this->custom_logger->info("[envio_alarmas] Obtener Datos para enviar notificacion");
        $consulta_sql = <<<EOD
select
usu.username,
'$comando' as comando,
avoc.id_registro_etapa as id_tabla,
'$id_mae_bd' as id_mae_bd,
'$id_username' as id_username,
avoc.id_registro_etapa,
remi.numero_remision,
remi.anho_remision as id_anhos,
remi.cod_titulo,
ter.id_tipo_doc,
ter.num_doc,
ter.razon_soc,
abo.email as correo,
'$correoEnvio' as email_envio,
'' as mensaje_extra,
'' as mensaje_firma,
'Se registro oficio del mandamiento y aun no se ha notificado al titular.' as mensaje,
'Registro oficio del mandamiento no notificado al titular' as subject,
--datos de envio
ter.num_doc as num_doc_env,
ter.id_tipo_doc as id_tipo_doc_env,
ter.razon_soc as razon_social_env,
abo.email as correo_env,
--datos de envio usuario
usu.num_doc as num_doc_usu,
usu.id_tipo_doc as id_tipo_doc_usu,
usu.nombre || ' ' || usu.nombre as razon_social_usu,
usu.email as correo_usu
from (
select tab0.*,tab1.cuotas_pendientes
from
(select tab0.*,tab3.ID_REMISION_TITULO
from cbr_registro_etapa tab0
left join cbr_notificacion tab1 on tab1.id_registro_etapa = tab0.id_registro_etapa
join cbr_actuacion_proc tab2 on tab2.ID_ACTUACION_PROC = tab0.ID_ACTUACION_PROC and tab2.notificacion = 1
left join cbr_proceso_coactivo tab3 on tab3.ID_PROCESO_COACTIVO= tab0.ID_PROCESO_COACTIVO
where
tab0.fecha + 15 = sysdate
--tab0.ID_ACTUACION_PROC in (1))
)avoc
left join cbr_reparto repa
on repa.id_remision_titulo = avoc.id_remision_titulo
left join cbr_remision_titulo remi
on avoc.id_remision_titulo = remi.id_remision_titulo
left join cbr_abogado_ult_v abo
on abo.id_abogado = repa.id_abogado
left join interceros_v ter
on ter.id_mae_ter = abo.id_mae_ter
on usu.username = '$username'
EOD;
        //ejecuta el sql
        $array_notif = CN_TABLE::executeSQL($consulta_sql);
        /* $array_notif = array(array(
          'email_envio' => 'websafi@anm.gov.co',
          'email' => 'dortega@sofhouse.net',
          'subject' => 'Prueba Correo Notificacion 14',
          'mensaje_extra' => 'TEXTO MENSAJE EXTRA',
          'mensaje_extra_gwt' => 'texto mensaje extra gwt',
          'referencia' => 'referencia',
          'num_doc' => '123456',
          'nombre_completo' => 'Usuario Prueba',
          'arrayadjuntos' => $request['arrayadjuntos'],
          'mensaje_firma' => 'firma',
          'mensaje' => 'Mensaje de correo de prueba',
          'comando' => 'envio_alarmas',
          'id_tabla' => '1',
          'id_mae_bd' => '1')
          );
         */
        $i = 0;
        $total_notif = count($array_notif);
        foreach ($array_notif as $value_notif) {
            $i++;

            //cuerpo del mensaje
            //Metodo Envio Correo
            $this->custom_logger->info("[envio_alarmas] notificaicion $i de $total_notif");
            $record = $value_notif;
            foreach ($record as $key => $value) {
                $params[$key] = $value;
            }

            $params['correo_usu'] = null;

            if ($service_url != null) {
                CN_TABLE::curlPostAsync($url_envio_correo, $params);
            }
            $body = "Correo prueba";

            $this->logMessage("Mensaje Correo: " . $body);
            $this->custom_logger->info("[envio_alarmas] Fin notificaicion $i de $total_notif");
        }
        $this->custom_logger->info("[envio_alarmas] FIN ID Notificacion 3");
    }

    /**
     * CASE 4
     * Alerta 1 año antes de la fecha de exigibilidad  envia correo recordando al abogado que aun no se ha procesado ninguno de los ids
     * de las actuaciones procesales indicadas en el parametro IDS_VALIDA_REGISTRO_ANTES_FECHA_EXIGIBILIDAD de la tabla     
     * CBR_PARAM_GEN
     * @param type $id_resoluciones
     * @param sfWebRequest $request
     */
    function notificar_valida_actuaciones_proc_antes_fecha_exigibilidad($username, $id_username, $url_envio_correo, $comando, $correoEnvio) {
        $id_mae_bd = CN_TABLE::consultarIdTablaBD('CBR_REMISION_TITULO');
        $this->custom_logger->info("[envio_alarmas] INICIO Notificacion ID  3");
        $this->custom_logger->info("[envio_alarmas] Obtener Datos para enviar notificacion");
        $consulta_sql = <<<EOD
Select VALOR
from CBR_PARAM_GEN
Where
upper(parametro) = 'IDS_VALIDA_REGISTRO_ANTES_FECHA_EXIGIBILIDAD'
and ESTADO = 1 
EOD;
        $records = $array_notif = CN_TABLE::executeSQL($consulta_sql);
        if (count($records) == 0 || empty($records[0]['valor'])) {
            $this->custom_logger->info("[envio_alarmas] PARAMETRO IDS_VALIDA_REGISTRO_ANTES_FECHA_EXIGIBILIDAD SIN DATOS O INACTIVO");
        } else {
            $ids_actuacion_proc = $records[0]['valor'];
            $consulta_sql = <<<EOD
select
usu.username,
'$comando' as comando,
avoc.id_remision_titulo as id_tabla,
'$id_mae_bd' as id_mae_bd,
'$id_username' as id_username,
avoc.id_registro_etapa,
remi.numero_remision,
remi.anho_remision as id_anhos,
remi.cod_titulo,
ter.id_tipo_doc,
ter.num_doc,
ter.razon_soc,
abo.email as correo,
'$correoEnvio' as email_envio,
'' as mensaje_extra,
'' as mensaje_firma,
'aun no se ha procesado las siguientes actuaciones procesales.' as mensaje,
'aun no se ha procesado las siguientes actuaciones procesales' as subject,
--datos de envio
ter.num_doc as num_doc_env,
ter.id_tipo_doc as id_tipo_doc_env,
ter.razon_soc as razon_social_env,
abo.email as correo_env,
--datos de envio usuario
usu.num_doc as num_doc_usu,
usu.id_tipo_doc as id_tipo_doc_usu,
usu.nombre || ' ' || usu.nombre as razon_social_usu,
usu.email as correo_usu
from
(select tab0.*
from cbr_remision_titulo tab0
join cbr_resolucion_tit tab1 on tab1.cod_titulo = tab0.cod_titulo and (add_months(sysdate,12)=tab1.fecha_fin_exigibilidad)
left join 
    (select tab0.*,tab2.fecha_aprueba, tab2.usuario_aprueba
    cbr_proceso_coactivo tab0
    left join cbr_facilidad_pago tab1 on tab0.id_proceso_coactivo = tab1.id_proceso_coactivo --and tab1.estado = 1  
    left join cbr_incumple_fp tab2 on tab2.id_facilidad_pago = tab1.id_facilidad_pago and fecha_aprueba is not null
    )tab2 on tab2.id_remision_titulo = tab0.id_remision_titulo 
where 
tab2.fecha_aprueba is not null
and tab0.id_remision_titulo not in
(select tab3.ID_REMISION_TITULO
from cbr_registro_etapa tab0
left join cbr_notificacion tab1 on tab1.id_registro_etapa = tab0.id_registro_etapa
join cbr_actuacion_proc tab2 on tab2.ID_ACTUACION_PROC = tab0.ID_ACTUACION_PROC and tab2.notificacion = 1 and tab0.ID_ACTUACION_PROC in ($ids_actuacion_proc)
left join cbr_proceso_coactivo tab3 on tab3.ID_PROCESO_COACTIVO= tab0.ID_PROCESO_COACTIVO)
)avoc
left join cbr_reparto repa
on repa.id_remision_titulo = avoc.id_remision_titulo
left join cbr_remision_titulo remi
on avoc.id_remision_titulo = remi.id_remision_titulo
left join cbr_abogado_ult_v abo
on abo.id_abogado = repa.id_abogado
left join interceros_v ter
on ter.id_mae_ter = abo.id_mae_ter
on usu.username = '$username'
EOD;
            //ejecuta el sql
            $array_notif = CN_TABLE::executeSQL($consulta_sql);
            /* $array_notif = array(array(
              'email_envio' => 'websafi@anm.gov.co',
              'email' => 'dortega@sofhouse.net',
              'subject' => 'Prueba Correo Notificacion 14',
              'mensaje_extra' => 'TEXTO MENSAJE EXTRA',
              'mensaje_extra_gwt' => 'texto mensaje extra gwt',
              'referencia' => 'referencia',
              'num_doc' => '123456',
              'nombre_completo' => 'Usuario Prueba',
              'arrayadjuntos' => $request['arrayadjuntos'],
              'mensaje_firma' => 'firma',
              'mensaje' => 'Mensaje de correo de prueba',
              'comando' => 'envio_alarmas',
              'id_tabla' => '1',
              'id_mae_bd' => '1')
              );
             */
            $i = 0;
            $total_notif = count($array_notif);
            foreach ($array_notif as $value_notif) {
                $i++;

                //cuerpo del mensaje
                //Metodo Envio Correo
                $this->custom_logger->info("[envio_alarmas] notificaicion $i de $total_notif");
                $record = $value_notif;
                foreach ($record as $key => $value) {
                    $params[$key] = $value;
                }

                $params['correo_usu'] = null;

                if ($service_url != null) {
                    CN_TABLE::curlPostAsync($url_envio_correo, $params);
                }
                $body = "Correo prueba";

                $this->logMessage("Mensaje Correo: " . $body);
                $this->custom_logger->info("[envio_alarmas] Fin notificaicion $i de $total_notif");
            }
        }
        $this->custom_logger->info("[envio_alarmas] FIN ID Notificacion 3");
    }

    /**
     * CASE 5
     * Envío al abogado, Alerta 4 años posteriores a la fecha de exigibilidad que no se ha terminado el proceso
     * Valido actuaciones procesales indicadas en el parametro IDS_VALIDA_POST_FECHA_EXIGIBILIDAD de la tabla 
     * CBR_PARAM_GEN
     * @param type $id_resoluciones
     * @param sfWebRequest $request
     */
    function notificar_no_termnacion_proceso($username, $id_username, $url_envio_correo, $comando, $correoEnvio) {
        $id_mae_bd = CN_TABLE::consultarIdTablaBD('CBR_REMISION_TITULO');
        $this->custom_logger->info("[envio_alarmas] INICIO Notificacion ID  3");
        $this->custom_logger->info("[envio_alarmas] Obtener Datos para enviar notificacion");
        $consulta_sql = <<<EOD
Select VALOR
from CBR_PARAM_GEN
Where
upper(parametro) = 'IDS_VALIDA_POST_FECHA_EXIGIBILIDAD'
and ESTADO = 1 
EOD;
        $records = $array_notif = CN_TABLE::executeSQL($consulta_sql);
        if (count($records) == 0 || empty($records[0]['valor'])) {
            $this->custom_logger->info("[envio_alarmas] PARAMETRO IDS_VALIDA_POST_FECHA_EXIGIBILIDAD SIN DATOS O INACTIVO");
        } else {
            $ids_actuacion_proc = $records[0]['valor'];
            $consulta_sql = <<<EOD
select
usu.username,
'$comando' as comando,
avoc.id_remision_titulo as id_tabla,
'$id_mae_bd' as id_mae_bd,
'$id_username' as id_username,
avoc.id_registro_etapa,
remi.numero_remision,
remi.anho_remision as id_anhos,
remi.cod_titulo,
ter.id_tipo_doc,
ter.num_doc,
ter.razon_soc,
abo.email as correo,
'$correoEnvio' as email_envio,
'' as mensaje_extra,
'' as mensaje_firma,
'aun no se ha procesado las siguientes actuaciones procesales.' as mensaje,
'aun no se ha procesado las siguientes actuaciones procesales' as subject,
--datos de envio
ter.num_doc as num_doc_env,
ter.id_tipo_doc as id_tipo_doc_env,
ter.razon_soc as razon_social_env,
abo.email as correo_env,
--datos de envio usuario
usu.num_doc as num_doc_usu,
usu.id_tipo_doc as id_tipo_doc_usu,
usu.nombre || ' ' || usu.nombre as razon_social_usu,
usu.email as correo_usu
from
(select tab0.*
from cbr_remision_titulo tab0
join cbr_resolucion_tit tab1 on tab1.cod_titulo = tab0.cod_titulo and (sysdate=add_months(tab1.fecha_fin_exigibilidad,48))
left join 
    (select tab0.*,tab2.fecha_aprueba, tab2.usuario_aprueba
    cbr_proceso_coactivo tab0
    left join cbr_facilidad_pago tab1 on tab0.id_proceso_coactivo = tab1.id_proceso_coactivo --and tab1.estado = 1  
    left join cbr_incumple_fp tab2 on tab2.id_facilidad_pago = tab1.id_facilidad_pago and fecha_aprueba is not null
    )tab2 on tab2.id_remision_titulo = tab0.id_remision_titulo                 
where 
tab2.fecha_aprueba is not null
and tab0.id_remision_titulo not in
(select tab3.ID_REMISION_TITULO
from cbr_registro_etapa tab0
left join cbr_notificacion tab1 on tab1.id_registro_etapa = tab0.id_registro_etapa
join cbr_actuacion_proc tab2 on tab2.ID_ACTUACION_PROC = tab0.ID_ACTUACION_PROC and tab2.notificacion = 1 and tab0.ID_ACTUACION_PROC in ($ids_actuacion_proc)
left join cbr_proceso_coactivo tab3 on tab3.ID_PROCESO_COACTIVO= tab0.ID_PROCESO_COACTIVO)
)avoc
left join cbr_reparto repa
on repa.id_remision_titulo = avoc.id_remision_titulo
left join cbr_remision_titulo remi
on avoc.id_remision_titulo = remi.id_remision_titulo
left join cbr_abogado_ult_v abo
on abo.id_abogado = repa.id_abogado
left join interceros_v ter
on ter.id_mae_ter = abo.id_mae_ter
on usu.username = '$username'
EOD;
            //ejecuta el sql
            $array_notif = CN_TABLE::executeSQL($consulta_sql);
            $i = 0;
            $total_notif = count($array_notif);
            foreach ($array_notif as $value_notif) {
                $i++;

                //cuerpo del mensaje
                //Metodo Envio Correo
                $this->custom_logger->info("[envio_alarmas] notificaicion $i de $total_notif");
                $record = $value_notif;
                foreach ($record as $key => $value) {
                    $params[$key] = $value;
                }

                $params['correo_usu'] = null;

                if ($service_url != null) {
                    CN_TABLE::curlPostAsync($url_envio_correo, $params);
                }
                $body = "Correo prueba";

                $this->logMessage("Mensaje Correo: " . $body);
                $this->custom_logger->info("[envio_alarmas] Fin notificaicion $i de $total_notif");
            }
        }
        $this->custom_logger->info("[envio_alarmas] FIN ID Notificacion 3");
    }

    /**
     * Metodo para llamado Jasper y envio de correo
     * @param type $service_url
     * @param type $comando
     * @param type $format
     * @param type $array_jasper
     */
    public function llamadoJasper($service_url, $comando, $format, $array_jasper) {


        $url = $service_url;
        $url = $url . $comando . '&format=' . $format;

        //variables del informe
        foreach ($array_jasper as $key => $value) {
            $url = $url . '&PARAM_' . $key . '=' . $value;
        }

        //Para envio por correo
        $url = $url . '&PARAM_envio_correo=1';

        $this->custom_logger->info("[envio_notificacion] Url::" . $url);
        $ch = curl_init($url);

        //Parametros de retorno en cURL
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Skip SSL Verification
        $rta = curl_exec($ch);
        $this->custom_logger->info("[envio_notificacion] Ejecuta llamado ");
        $this->custom_logger->info("[envio_notificacion] Parametriza sin tag_dias_ejecutar");
        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 envio de correos.";
            $this->status = 1;
            $this->list_data = array();
            $this->mensajeError = $mensajeError;
            $this->logMessage("[envio_notificacion] " . $mensajeError);
        } else {
            $this->logMessage("[envio_notificacion] Genero envio de correos.");
        }
    }

}
