<?php

/**
 * alertas_rvsp actions.
 *
 * @package    radicacionVirtualCuentas
 * @subpackage alertas_rvsp
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class alertas_rvspActions extends sfActions {

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

        //Log especifico de procesos completos
        $logPath = sfConfig::get('sf_log_dir') . '/alertas.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();

        $request['comando'] = "alertas_rvsp";
        $request['username'] = "admin";

        try {
            /*
             * (SGC-1, ANM-2, SGR-3, CYC-4, COL-5, INCI-6, LOCAL-7)
             */
            $array = sfYaml::load(dirname(__FILE__) . '/../../../config/app-gwt.yml');

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

            //Sql
            $sql = <<<EOD
SELECT
    *
FROM RVSP_CORREOS_ALERTAS
where estado = '1' 
EOD;
            //Ejecutar SQL
            $records_correos = CN_TABLE::executeSQL($sql);


            /**
             * Envio -Se generara todos los días, teniendo en cuenta la fecha desde y hasta del registro en el cronograma.
              -Se generara al Responsable y al coordinador establecido en el registro.
              -Todas las alertas deben tener copia a karen.rodriguez@anm.gov.co y al correo servicios.administrativos2@anm.gov.co
              - Se genera una alerta por registro realizado en el cronograma.
             */
            $this->custom_logger->info("Envio correo cronograma");
            //Consulta datos envio correo
            //Sql
            $sql = <<<EOD
select 
crono.id_cronograma_servicio,
crono.id_anhos,
crono.id_meses,
crono.sede,
crono.id_tipo_servicio,
crono.id_empresa,
crono.referencia,
crono.id_responsable,
crono.id_coordinador,
crono.fecha_desde,
crono.fecha_hasta,
crono.usuario_log,
crono.fecha_log,
crono.mes,
crono.descripcion,
crono.abreviatura,
crono.estado_tip,

'$correoEnvio' as email_envio,
null as mensaje_extra,
'' as mensaje_firma,
'Cordial Saludo,</br></br>
El presente correo es para solicitarte estar atento a la llegada del servicio Público ('|| crono.descripcion ||'), 
entre las fechas ('|| to_char(crono.fecha_desde,'dd-mm-yyyy') || ' a ' || to_char(crono.fecha_hasta,'dd-mm-yyyy') ||').' as mensaje,

--datos de envio
crono.num_doc_terres as num_doc_env,
1 as id_tipo_doc_env,
crono.razon_soc_terres as razon_social_env,
crono.correo_terres as correo_env,
                            
--Datos correo apoyo
nvl(crono.num_doc_tercoor,'') as num_doc_apoyo,
1 as id_tipo_doc_apoyo,
nvl(crono.razon_soc_tercoor,'') as razon_soc_apoyo,
nvl(crono.correo_tercoor,'') as correo_apoyo
                            
from rvsp_cronograma_servicio_v crono

where
trunc(sysdate) between crono.fecha_desde and crono.fecha_hasta   
EOD;
            //Ejecutar SQL
            $records_total = CN_TABLE::executeSQL($sql);

            $this->logMessage("Envio correo");

            foreach ($records_total as $records) {

                $report_params = $records;
                $tipo = $records['abreviatura'];
                $referencia = $records['referencia'];

                //Ejemplo de la persona que se envia el correo: 
                //123;1;pepito perez;correo@gmal.com
                $num_doc_env = $records['num_doc_env'];
                $id_tipo_doc_env = $records['id_tipo_doc_env'];
                $razon_social_env = $records['razon_social_env'];
                $correo_env = $records['correo_env'];
                //DATOS APOYO - 20180620
                $num_doc_apo = $records['num_doc_apoyo'];
                $id_tipo_doc_apo = $records['id_tipo_doc_apoyo'];
                $razon_social_apo = $records['razon_social_apoyo'];
                $correo_apo = $records['correo_apoyo'];

                //Cada 1 por correo
                /*
                  $datos_usuario = array(
                  '0' => $num_doc_env . ';' . $id_tipo_doc_env . ';' . $razon_social_env . ';' . $correo_env,
                  '1' => $num_doc_apo . ';' . $id_tipo_doc_apo . ';' . $razon_social_apo . ';' . $correo_apo
                  );

                  //correos extra segun tala
                  $cant_du = 2;
                  foreach ($records_correos as $value) {
                  $datos_usuario[$cant_du] = $value['num_doc'] . ';' . 1 . ';' . $value['nombres'] . ';' . $value['email'];
                  $cant_du++;
                  } */
                //Correos con copía
                $datos_usuario = array(
                    '0' => $num_doc_env . ';' . $id_tipo_doc_env . ';' . $razon_social_env . ';' . $correo_env
                );
                $records_correos[count($records_correos)] = array(
                    'num_doc' => $num_doc_apo,
                    'nombres' => $razon_social_apo,
                    'apellidos' => '',
                    'estado' => 1,
                    'email' => $correo_apo
                );
                //correos extra segun tala
                $cant_du = 0;
                foreach ($records_correos as $value) {
                    $ccRecipients[$cant_du] = array(
                        'num_doc' => $value['num_doc'],
                        'id_tipo_doc' => 1,
                        'name' => $value['nombres'] . ' ' . $value['apellidos'],
                        'email' => $value['email']
                    );
                    $cant_du++;
                }


                $subject = "Cronograma Servicios Públicos, Servicio Público: " . $tipo . " de Referencia:" . $referencia;
                $currentUri = '';
                $ruta = '';
                $adjunto = false;
                $progress_key = $request['comando'] . $request['username'];
                $array_adjuntos = array();
                $entidad_cliente = $entidadCliente;
                $entidad_nombre = $entidadNombre;
                $addAddress = true;

                $this->logMessage("Subject: " . $subject);

                CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress, $ccRecipients);
            }

            $this->custom_logger->info("FIN Envio correo");

            $this->list_data = array();
            $this->conn->commit();
        } catch (Exception $e) {

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

            $mensaje = "[alertas_rvsp] 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(),
                    'Message' => $e->getMessage(),
                    'Line' => $e->getLine(),
                    'Trace' => $e->getTraceAsString(),
                    'mensaje' => $mensaje
                )
            );
        }
    }

}
