<?php

/**
 * co_firma_ep actions.
 *
 * @package    contratacion
 * @subpackage co_firma_ep
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class co_firma_epActions extends sfQuery {
    /*
     * ------------VARIABLES PARA SERVICIOS DE CONSULTA - LIST
     */

    protected $table_names = array(
        'CO_FIRMA_EP',
        'CO_ESTUDIOS_PREVIOS',
        'CO_MODALIDAD_SEL',
        'INTERCEROS_DU_DIR_V',
        'TIPO_IDENTIFICACION'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'CO_ESTUDIOS_PREVIOS' =>
        array(
            'id_estudios_previos' => 'CO_FIRMA_EP'
        ),
        'CO_MODALIDAD_SEL' =>
        array(
            'id_modalidad_sel' => 'CO_ESTUDIOS_PREVIOS'
        ),
        'INTERCEROS_DU_DIR_V' =>
        array(
            'id_mae_ter' => 'CO_FIRMA_EP'
        ),
        'TIPO_IDENTIFICACION' =>
        array(
            'id_tipo_doc-id_tipo_identificacion' => 'INTERCEROS_DU_DIR_V'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'CO_FIRMA_EP' =>
        array(
            'id_firma_ep' => 'id_firma_ep',
            'id_estudios_previos' => 'id_estudios_previos',
            'descripcion' => 'descripcion',
            'cargo' => 'cargo',
            'id_mae_ter' => 'id_mae_ter'
        ),
        'CO_MODALIDAD_SEL' =>
        array(
            'id_modalidad_sel' => 'id_modalidad_sel',
            'descripcion' => 'descripcion_modalidad'
        ),
        'CO_ESTUDIOS_PREVIOS' =>
        array(
            'no_proceso' => 'no_proceso',
            'id_anhos' => 'id_anhos',
            'fecha_creacion' => 'fecha_creacion'
        ),
        'INTERCEROS_DU_DIR_V' =>
        array(
            'num_doc' => 'doc_firma',
            'razon_soc' => 'nombre',
            'mail' => 'mail'
        ),
        'TIPO_IDENTIFICACION' =>
        array(
            'descripcion' => 'tipo_iden',
            'abreviatura' => 'abreviatura'
        )
    ); //por cada tabla especificar los campos del select
    protected $fields_orderBy = array(
    ); //campos para el ordenamiento de la consulta
    /*
     * OPCIONES DE FILTRO:
     *
     * LIKEALLPLUS- busqueda comparativa de la cadena dividida por los espacios en blanco en cualquier posición
     * LIKEALL - busqueda comparativa de la cadena en cualquier posición
     * LIKE - busqueda en la cadena que inicie por la variable de filtro
     *
     * rownum,start - rownum,end / estos campos para uso del Grid live GWT, numero fijo de filas de consulta
     */
    protected $table_field_conditions = array(
        'CO_FIRMA_EP' =>
        array(
            'id_firma_ep,a' => array('!=' => array(-1)),
            'id_firma_ep,b' => array('=' => array('id_firma_ep')),
            'id_estudios_previos,b' => array('=' => array('id_estudios_previos')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        )
    ); //por cada tabla se dan los campos, opcion de filtro y variable que entra para los posibles filtros
    protected $table_field_or_conditions = array(
    ); // filtros de condicion or
    /*
     * Variable manejo de log
     */
    //true - consulta de menu administracion
    protected $is_admin = true;
    //si es servicio para filtro agregar campo
//    protected $filtro = 'Perfiles';
    //true - la tabla principal de busqueda no es una vista
    protected $is_filtro = true;
    /*
     * ------------VARIABLES PARA SERVICIOS CRUD
     */
    protected $id_name = 'id_firma_ep'; //identificador de la tabla
    protected $id_names = array('id_firma_ep'); //llave primaria
    protected $field_names = array('id_estudios_previos', 'descripcion', 'cargo', 'id_mae_ter'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'CO_FIRMA_EP'; //tabla en la cual se aplican los cambios 
    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_firma_ep'; //identificador unico de la tabla

    protected function postprocessRequest($Action, \sfWebRequest $request, $list_data_post) {
        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a postprocessRequest - " . $list_data_post);
        /*
         * Procesar Request
         */
        $id_filtro = $list_data_post[0]['id_firma_ep'];
        
        //accion add
        if ($Action == "ADD") {
            $this->envioNotificacion($request, $id_filtro);            
        }

        //accion update
        if ($Action == "UPDATE") {
            $this->envioNotificacion($request, $id_filtro);            
        }

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

        return $request;
    }

    protected function preprocessRequest($Action, \sfWebRequest $request) {
        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a preprocessRequest");

        /*
         * Procesar Request
         */

        //accion add
        if ($Action == "ADD") {
            
        }

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

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

        return $request;
    }

    protected function validateAdd(\sfWebRequest $request) {
        //valor por defecto
        $errors = null;

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    protected function validateRemove(\sfWebRequest $request) {
        //valor por defecto
        $errors = null;

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    protected function validateUpdate(\sfWebRequest $request) {
        //valor por defecto
        $errors = null;

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Correo de notificacion - 20200825
     * 
     * @param type $request
     * @param type $id_filtro
     */
    public function envioNotificacion($request, $id_filtro) {

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

        /*
         * (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;
        $entidadCliente = "";
        $correoEnvio = "";
        $service_url = "";
        foreach ($array as $routeName => $routeData) {
            if ('entidad_cliente' == $routeName) {
                    foreach ($routeData as $key => $value) {
                        //echo $value . "\n";
                        if ($key == 'value') {
                            $entidadCliente = $value;
                        }
                    }
                }
            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++;
        }
        if ($entidadCliente != 1) {
            /**
             * Envio de correo - 20190911
             */
            $logger->info("Envio de correo inicio ");

            //URL de servicio correo
            $url = $service_url . "curl_envio_correo/list.json";

            $comando = $request['comando'];
            $id_username = $request['id_username'];
            $username = $request['username'];

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

            //Sql
            $sql = <<<EOD
select 
                
usu.username,
'$comando' as comando,               
tab0.id_firma_ep as id_tabla,
'$id_mae_bd' as id_mae_bd,
'$id_username' as id_username,
                
tab0.id_estudios_previos,
tab0.id_mae_ter,
tab0.cargo,

ter.id_tipo_doc,
ter.num_doc,
ter.razon_soc,
nvl(ter.mail,ter.mail_con) as correo,
'$correoEnvio' as email_envio,
'' as mensaje_extra,
'' as mensaje_firma,

'Cordial saludo,
<br/><br/>
Ha sido asignado como profesional encargado de la supervisión y aprobación del estudio previo número '|| ep.no_estudios_previos ||' del contratista ' || ep.descripcion ||'
<br/><br/>
Verificar en el módulo de Contratación.' as mensaje,

'Notificacion firma de estudio previo' 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,
nvl(ter.mail,ter.mail_con) 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 co_firma_ep tab0

left join co_estudios_previos_v ep
on ep.id_estudios_previos = tab0.id_estudios_previos

left join interceros_du_dir_v ter
on ter.id_mae_ter = tab0.id_mae_ter

left join usuario usu
on usu.username = '$username'

where 1=1
and tab0.id_firma_ep = $id_filtro 
EOD;
            //Ejecutar SQL
            $records = CN_TABLE::executeSQL($sql);

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

            if (count($records) > 0) {

                /**
                 * Datos de envio
                 *
                  $params = array(
                  'user_from' => 'webservice',
                  'recipients' => $recipients,
                  'asunto' => 'Error webservie_sigm_consulta',
                  'body' => $body
                  );
                 * 
                 */
                $record = $records[0];

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

                $params['correo_usu'] = null;

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

        $logger->info("Envio de correo fin");
    }

}
