<?php

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

/**
 * webservice_actualizacion_dominio actions.
 *
 * @package    canon
 * @subpackage webservice_actualizacion_dominio
 * @author     Manuel Enrique Paredes Lopez
 * @email       mparedes@sofhouse.net
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class webservice_actualizacion_dominioActions extends sfActions {

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

        //Obtenemos todos los parametros
        //Declaramos variable para almacenar parametros obtenidos en un arreglo
        $json_parametros = array();

        $logPath = sfConfig::get('sf_log_dir') . '/webservice_sigm.log';
        $this->custom_logger = new sfFileLogger(new sfEventDispatcher(), array('file' => $logPath));
        $this->custom_logger->info("[webservice_actualizacion_dominio] Servicio executeList webservice_actualizacion_dominio.\n");
        $this->custom_logger->info("---BEGIN Logging request--- (Revisar petición)");
        foreach ($request->getPostParameters() as $key => $value) {
            $this->custom_logger->info("[webservice_actualizacion_dominio] request[$key] = $value\n");
            if (isset($value)) {
                $json_parametros[$key] = $value;
            }
        }
        $this->custom_logger->info("--------------------------------------------------/  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->custom_logger->info("[webservice_actualizacion_dominio] request[$key] = $value");
            if (isset($value)) {
                $json_parametros[$key] = $value;
            }
        }
        $this->custom_logger->info("---END Logging request");

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

        //Codigo de error defecto - 20191022
        $codigo_error = 0;
        $error_log = '';
        $id_tabla = 'null';

        if (isset($request['selector'])) {
            $id_mae_bd = CN_TABLE::consultarIdTablaBD($request['selector']);
        } else {
            $id_mae_bd = CN_TABLE::consultarIdTablaBD('SELECTOR');
        }

        $fecha_proceso = CN_TABLE::fechaSistema();
        $update = 2;
        $add = 3;
        $autenticar_ldap = 1;
        $selector = 30;
        $campos_faltantes = 40;
        $rollback = 51;
        //  1- CONSULTAR, 2- ACTUALIZAR, 3 - ADICIONAR, 4 - ELIMINAR, 5 - ANULAR
        $id_ope_bd = 2;
        //comando que identifica la funcionalidad
        $comando = 'webservice_actualizacion_dominio';
        $id_usuario = $usuario = '1';
        $cliente = !isset($request['cliente']) ? 'ANNA' : $request['cliente']; //Cliente que utiliza el servicio
        $usuario_nombre = !isset($request['usuario_web']) ? 'admin' : base64_decode($request['usuario_web']); //nombre de usuario

        $int = 0;
        $service_url = "";
        $entidad_cliente = "";
        foreach ($array as $routeName => $routeData) {
            if ('service_url_local' == $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();

        try {



            //Obtenemos la HOra actual de la BD
            $sql = <<<EOD
select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') as fecha from dual
EOD;
            //ejecuta el sql

            $result = CN_TABLE::executeSQL($sql);
            $fecha_log_ini = $result[0]['fecha']; //Establecemos fechaHora de Inicio de consumo del servicio
            $this->custom_logger->info("[webservice_actualizacion_dominio]HORA INICIO:" . $fecha_log_ini);

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

            $observacion_log = "--Se ingreso a actualización de dominio--";

            $this->custom_logger->info("[webservie_actualizacion_dominio] " . $observacion_log . ".\n");

            /**
             * Verificar acceso a servicio por LDAP - 20191022
             */
            //Para local sofhouse no valida - 20191022
            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;
                    $error_log = 'Falta los parámetros de acceso obligatorios verificar. CODIGO: ' . $codigo_error;
                    $observacion_log = "'Falta los parametros de acceso obligatorios verificar. CODIGO:1'";
                    CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_usuario, $comando, $observacion_log);

                    $this->status == 0;
                    $mensaje = 'Falta los parámetros de acceso obligatorios verificar. CODIGO: 1';
                    $this->list_data = array(
                        array(
                            'codigo_error' => $codigo_error,
                            'mensaje' => $mensaje,
                            'servicio' => 'webservice_actualizacion_dominio',
                            'modulo' => 'CANON'
                        )
                    );
                    /* LOG WEBSERVICE LOG */

                    //$parametros = "{".implode($json_parametros,',')."}";
                    $parametros = json_encode($json_parametros);
                    $respuesta = json_encode($this->list_data);
                    $termino_proceso = 0;
                    $usuario = 1;
                    $comando = 'webservice_actualizacion_dominio';
                    //Se cambian ' por chr(39), para no dañar el insert del log - 20161202            
                    $error_log = ' error message: ' . str_replace("'", "'|| chr(39) ||'", $error_log);
                    $error_log = substr($error_log, 1, 4000);
                    CN_TABLE::registroWebservicesLog($usuario_nombre, $cliente, $comando, $fecha_log_ini, $parametros, $respuesta, 0, $error_log);
                    $this->conn->commit();
                    $this->envioCorreoError($error_log, $service_url);
                    return;
                    //throw new Exception("Falta los parámetros de acceso obligatorios verificar.");
                }

                //Obtenemos datos de validacion de usuario
                //Estos datos deben venir encriptados en base64
                $usuario_web = $request['usuario_web'];
                $clave_web = $request['clave_web'];
                //Desencriptamos los datos de Usuario y contraseña
                $usuario_web = base64_decode($usuario_web);
                $clave_web = base64_decode($clave_web);
                $authUser = $adldap->authenticate($usuario_web, $clave_web);

                if ($authUser != true) {
                    //Codigo de error - 20191001
                    $codigo_error = 2;
                    $observacion_log = "'La autenticación de usuario($usuario_web) para el servicio web fallo; favor verificar. CODIGO: $codigo_error'";
                    CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_usuario, $comando, $observacion_log);

                    $mensaje = 'La autenticación de usuario($usuario_web) para el servicio web fallo; favor verificar. CODIGO:2';
                    $this->list_data = array(
                        array(
                            'codigo_error' => $codigo_error,
                            'mensaje' => $mensaje,
                            'servicio' => 'webservice_actualizacion_dominio',
                            'modulo' => 'CANON'
                        )
                    );
                    /* LOG WEBSERVICE LOG */

                    //$parametros = "{".implode($json_parametros,',')."}";
                    $parametros = json_encode($json_parametros);
                    $respuesta = json_encode($this->list_data);
                    $termino_proceso = 0;
                    $usuario = 1;
                    $comando = 'webservice_actualizacion_dominio';
                    //Se cambian ' por chr(39), para no dañar el insert del log - 20161202   
                    $error_log=$mensaje;
                    $error_log = ' error message: ' . str_replace("'", "'|| chr(39) ||'", $error_log);
                    $error_log = substr($error_log, 1, 4000);
                    CN_TABLE::registroWebservicesLog($usuario_nombre, $cliente, $comando, $fecha_log_ini, $parametros, $respuesta, 0, $error_log);
                    $this->envioCorreoError($error_log, $service_url);
                    $this->conn->commit();
                    return;
                    //throw new Exception("La autenticación de usuario($usuario_web) para el servicio web fallo; favor verificar.");
                }
            }

            $observacion_log = "--Autenticado exitoso--sigue";

            $this->custom_logger->info("[webservie_actualizacion_dominio] " . $observacion_log . ".\n");

            if (isset($request['selector'])) {
                $i = $request['selector'];
            } else {
                $codigo_error = 3;
                $mensaje = 'Falta el selector Codigo 3';
                $this->list_data = array(
                    array(
                        'codigo_error' => $codigo_error,
                        'mensaje' => $mensaje,
                        'servicio' => 'webservice_actualizacion_dominio',
                        'modulo' => 'CANON'
                    )
                );

                $this->status = 0;
                $this->logMessage("[webservie_actualizacion_dominio]" . $mensaje);
                $this->custom_logger->info("[webservie_actualizacion_dominio]" . $mensaje);
                $observacion_log = "'Falta el selector. CODIGO: $codigo_error'";
                CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_usuario, $comando, $observacion_log);
                /* LOG WEBSERVICE LOG */

                //$parametros = "{".implode($json_parametros,',')."}";
                $parametros = json_encode($json_parametros);
                $respuesta = json_encode($this->list_data);
                $termino_proceso = 0;
                $usuario = 1;
                $comando = 'webservice_actualizacion_dominio';
                //Se cambian ' por chr(39), para no dañar el insert del log - 20161202   
                $error_log=$mensaje;
                $error_log = ' error message: ' . str_replace("'", "'|| chr(39) ||'", $error_log);
                $error_log = substr($error_log, 1, 4000);
                CN_TABLE::registroWebservicesLog($usuario_nombre, $cliente, $comando, $fecha_log_ini, $parametros, $respuesta, 0, $error_log);
                $this->envioCorreoError($error_log, $service_url);
                $this->conn->commit();
                return;
            }

            /**
             * Variable $i
             * 
             * RMN_DEPARTAMENTO
             * RMN_MUNICIPIO
             * RMN_COMPETENCIA
             * RMN_MODALIDAD
             * RMN_TIPO_ROL_PERSONA
             * RMN_TIPO_ANOTACION
             * RMN_NORMA
             * RMN_TIPO_TERCEROS
             */
            $result = $this->selectorparametrica($request, $i, $this->conn, $this->custom_logger);
            $acc=$result['accion'];
            if($acc=='UPDATE'){
                
                $id_ope_bd=2;
                
            }elseif ($acc='INSERT') {
                $id_ope_bd=3;
            }
            if (isset($result['codigo_error'])) {
                $codigo_error = 3;
                $mensaje = 'Campos faltantes';
                $id_mae_bd = $result['id_table'];
                CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_usuario, $comando, "'" . "CODIGO 3 Faltan los campos: " . $result['campos_faltantes'] . "'");


                $this->list_data = array(
                    array(
                        'codigo_error' => $result['codigo_error'],
                        'nombre' => $result['nombre'],
                        'campos_faltantes' => $result['campos_faltantes'],
                        'mensaje' => $mensaje,
                        'servicio' => 'webservice_actualizacion_dominio',
                        'modulo' => 'CANON'
                    )
                );


                $this->status = 0;
                $this->logMessage("[webservie_actualizacion_dominio]" . $mensaje);
                $this->logMessage("[webservie_actualizacion_dominio]CAMPOS FALTANTES:" . $result['campos_faltantes']);
                $this->custom_logger->info("[webservie_actualizacion_dominio]CAMPOS FALTANTES:" . $result['campos_faltantes']);
                $error_log = "Campos faltantes. CODIGO: " . $codigo_error . "\n Los campos son: " . $result['campos_faltantes'];

                /* LOG WEBSERVICE LOG */

                //$parametros = "{".implode($json_parametros,',')."}";
                $parametros = json_encode($json_parametros);
                $respuesta = json_encode($this->list_data);
                $termino_proceso = 0;
                $usuario = 1;
                $comando = 'webservice_actualizacion_dominio';
                //Se cambian ' por chr(39), para no dañar el insert del log - 20161202   
                $error_log = ' error message: ' . str_replace("'", "'|| chr(39) ||'", $error_log);
                $error_log = substr($error_log, 1, 4000);
                CN_TABLE::registroWebservicesLog($usuario_nombre, $cliente, $comando, $fecha_log_ini, $parametros, $respuesta, 0, $error_log);
                $this->conn->commit();
                $this->envioCorreoError($error_log, $service_url);
                return;
            }
            
            $id_tabla=$result['id'];
            $id_mae_bd=$result['id_table'];
            $observacion_log = "'Se ingreso a actualización de dominio'";
            CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_usuario, $comando, $observacion_log);



            $this->custom_logger->info("[webservie_actualizacion_dominio] resultado" . $result . ".\n");
            /**
             * 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(
                    'id' => $result['id'],
                    'nombre' => $result['nombre'],
                    'accion' => $result['accion'],
                    'mensaje' => $mensaje,
                    'servicio' => $comando,
                    'modulo' => 'CANON'
                )
            );
        } catch (Exception $ex) {


            //rollback de todas las transacciones en caso de que ocurra algun error
            $this->conn->rollback();
            $codigo_error = 4;
            $mensaje = "[webservie_actualizacion_dominio] ROLLBACK ERROR al acceder a parametrizacion. !!!";
            $this->custom_logger->info($mensaje);
            $this->custom_logger->info("state 1");
            $this->custom_logger->info("Code " . $ex->getCode());
            $this->custom_logger->info("Message " . $ex->getMessage());

            $this->status = 1;
            //$this->mensajeError = $mensaje;
            $this->list_data = array(
                array(
                    'code' => $ex->getCode(),
                    'mensaje' => $ex->getMessage(),
                    'servicio' => $comando,
                    'modulo' => 'CANON',
                    'codigo_error' => $codigo_error
                )
            );

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


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

            $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_usuario, $comando, $observacion_log);

            //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) ||'", $ex->getMessage()) . ' code: ' . $ex->getCode();
            $error_log = substr($error_log, 1, 4000);

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

            /**
             * Envio de correo de error - 20190911
             */
            $this->custom_logger->info("Envio de correo de error inicio ");
            $this->envioCorreoError($error_log, $service_url);
        }

        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        $this->conn->beginTransaction();

        //$parametros = "{".implode($json_parametros,',')."}";
        $parametros = json_encode($json_parametros);
        $respuesta = json_encode($this->list_data);
        $termino_proceso = $this->status == 1 ? "0" : "1";
        $usuario = 1;
        $comando = 'webservice_actualizacion_dominio';
        
             //Se cambian ' por chr(39), para no dañar el insert del log - 20161202            
            //
            $parametros = str_replace("'", "'|| chr(39) ||'", $parametros);
            $respuesta = str_replace("'", "'|| chr(39) ||'", $respuesta);
            
            
        CN_TABLE::registroWebservicesLog($usuario_nombre, $cliente, $comando, $fecha_log_ini, $parametros, $respuesta, $termino_proceso, $error_log);

        $this->conn->commit();
    }

    /**
     * 
     * @param sfWebRequest $request
     * @param type $i
     * @param type $conn
     * @param type $custom_logger
     * @return string|\sfWebRequest|int
     */
    public function selectorparametrica(sfWebRequest $request, $i, $conn, $custom_logger) {

        /**
         * Case i:
         * RMN_DEPARTAMENTO
         * RMN_MUNICIPIO
         * RMN_COMPETENCIA
         * RMN_MODALIDAD
         * RMN_TIPO_ROL_PERSONA
         * RMN_TIPO_ANOTACION
         * RMN_NORMA
         * RMN_TIPO_TERCEROS
         */
        switch ($i) {

            case 'RMN_DEPARTAMENTO'://PARAMETRICA_DEPARTAMENTO   
                /* Validación de campos
                 * campos
                 */
                $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_DEPARTAMENTO');
                $campos_oblig = 'id_departamento;nombre_dep';
                $campostype = 'num;var';
                $val = $this->validarCAMPOS($campos_oblig, $request);
                $valand = $this->valCAMP($campos_oblig, $campostype, $request);    
                if ($val == 'false'&&$valand=='false') {
                    $nd = $request['nombre_dep'];
                    $id = $request['id_departamento'];
                } else {
                        
                    $r = array(
                        'codigo_error' => 3,
                        'campos_faltantes' => "CAMPOS Faltantes:".$val."   CAMPOS Numericos:".$valand,
                        'nombre' => 'departamento',
                        'id_table' => $id_mae_bd
                    );

                    return $r;
                }


                $sql = <<<EOD
SELECT * FROM RMN_DEPARTAMENTO WHERE ID_DEPARTAMENTO= $id
EOD;
                $result = CN_TABLE::executeSQL($sql);

                $e = '';
                if (count($result) > 0) {
                    $e = 'UPDATE';
                    $sql = <<<EOD
UPDATE RMN_DEPARTAMENTO SET NOMBRE = '$nd' WHERE ID_DEPARTAMENTO = $id
EOD;

                    $conn->execute($sql);
                } else {
                    $e = 'INSERT';
                    $sql = <<<EOD
INSERT INTO RMN_DEPARTAMENTO  (ID_DEPARTAMENTO,  NOMBRE) VALUES ($id, '$nd')
EOD;

                    $conn->execute($sql);
                }

                $r = array(
                    'id' => $id,
                    'nombre' => 'departamento',
                    'accion' => $e,
                    'id_table' => $id_mae_bd
                );

                return $r;

                break;

            case 'RMN_MUNICIPIO'://PARAMETRICA_MUNICIPIO

                /* Validación de campos
                 * campos obligatorios
                 */
                $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_MUNICIPIO');
                $campos_oblig = 'id_municipio;nombre;codigo_dane;id_departamento';
                $campostype = 'num;var;var;num';
                $val = $this->validarCAMPOS($campos_oblig, $request);
                $valand = $this->valCAMP($campos_oblig, $campostype, $request); 
                if ($val == 'false'&&$valand=='false') {
                    $id_mun = $request['id_municipio'];
                    $nombre = $request['nombre'];
                    $codigo_dane = $request['codigo_dane'];
                    $id_departamento = $request['id_departamento'];
                } else {

                    $r = array(
                        'codigo_error' => 3,
                        'campos_faltantes' => "CAMPOS Faltantes:".$val."   CAMPOS Numericos:".$valand,
                        'nombre' => 'departamento',
                        'id_table' => $id_mae_bd
                    );

                    return $r;
                }

                $sql = <<<EOD
SELECT * FROM RMN_MUNICIPIO WHERE ID_MUNICIPIO= $id_mun
EOD;
                $result = CN_TABLE::executeSQL($sql);

                $e = '';
                if (count($result) > 0) {
                    $e = 'UPDATE';
                    $sql = <<<EOD
            UPDATE RMN_MUNICIPIO
   SET NOMBRE = '$nombre',
       CODIGO_DANE = '$codigo_dane',
       ID_DEPARTAMENTO = $id_departamento
WHERE ID_MUNICIPIO = $id_mun
EOD;

                    $conn->execute($sql);
                } else {
                    $e = 'INSERT';
                    $sql = <<<EOD
                            
INSERT INTO RMN_MUNICIPIO
(
  ID_MUNICIPIO,
  NOMBRE,
  CODIGO_DANE,
  ID_DEPARTAMENTO
)
VALUES
(
  $id_mun,
  '$nombre',
  '$codigo_dane',
  $id_departamento
)

EOD;

                    $conn->execute($sql);
                }

                $r = array(
                    'id' => $id_mun,
                    'nombre' => 'municipio',
                    'accion' => $e,
                    'id_table' => $id_mae_bd
                );

                return $r;

                break;

            case 'RMN_COMPETENCIA'://PARAMETRICA_COMPETENCIA
                /* Validación de campos
                 * campos obligatorios
                 */
                $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_COMPETENCIA');
                $campos_oblig = 'id_competencia;nombre;num_doc;activo';
                $campostype = 'num;var;var;num';
                $val = $this->validarCAMPOS($campos_oblig, $request);
                $valand = $this->valCAMP($campos_oblig, $campostype, $request);
                if ($val == 'false'&&$valand=='false') {

                    $idc = $request['id_competencia'];
                    $nombre = $request['nombre'];
                    $num_doc = $request['num_doc'];
                    $activo = $request['activo'];
                } else {

                    $r = array(
                        'codigo_error' => 3,
                        'campos_faltantes' => "CAMPOS Faltantes:".$val."   CAMPOS Numericos:".$valand,
                        'nombre' => 'competencia',
                        'id_table' => $id_mae_bd
                    );

                    return $r;
                }

                $sql = <<<EOD
SELECT * FROM RMN_COMPETENCIA WHERE ID_COMPETENCIA=$idc
EOD;
                $result = CN_TABLE::executeSQL($sql);

                $e = '';
                if (count($result) > 0) {
                    $e = 'UPDATE';
                    $sql = <<<EOD
                            
UPDATE RMN_COMPETENCIA SET NOMBRE ='$nombre',NUM_DOC ='$num_doc',ACTIVO = $activo WHERE ID_COMPETENCIA = $idc
EOD;
                    CN_TABLE::executeSQL($sql);
                    //$conn->execute($sql);
                } else {
                    $e = 'INSERT';
                    $sql = <<<EOD
                            
INSERT INTO RMN_COMPETENCIA(ID_COMPETENCIA,NOMBRE,NUM_DOC,ACTIVO)
VALUES($idc,'$nombre','$num_doc',$activo)
EOD;
                    CN_TABLE::executeSQL($sql);
                    //$conn->execute($sql);
                }


                $r = array(
                    'id' => $idc,
                    'nombre' => 'competencia',
                    'accion' => $e,
                    'id_table' => $id_mae_bd
                );

                return $r;

                break;

            case 'RMN_MODALIDAD'://PARAMETRICA_MODALIDAD

                /* Validación de campos
                 * campos obligatorios
                 */
                $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_MODALIDAD');
                $campos_oblig = 'id_modalidad;id_ley;nombre;estado;duracion_meses';
                $campostype = 'num;num;var;num;num';
                $val = $this->validarCAMPOS($campos_oblig, $request);
                $valand = $this->valCAMP($campos_oblig, $campostype, $request); 

                 if ($val == 'false'&&$valand=='false') {

                    $idm = $request['id_modalidad'];
                    $idl = $request['id_ley'];
                    $nombre = $request['nombre'];
                    $estado = $request['estado'];
                    $duracion = $request['duracion_meses'];
                } else {

                    $r = array(
                        'codigo_error' => 3,
                        'campos_faltantes' => "CAMPOS Faltantes:".$val."   CAMPOS Numericos:".$valand,
                        'nombre' => 'modalidad',
                        'id_table' => $id_mae_bd
                    );

                    return $r;
                }

                $sql = <<<EOD
SELECT * FROM RMN_MODALIDAD WHERE ID_MODALIDAD=$idm
EOD;
                $result = CN_TABLE::executeSQL($sql);

                $e = '';
                if (count($result) > 0) {
                    $e = 'UPDATE';
                    $sql = <<<EOD
                    UPDATE RMN_MODALIDAD
               SET ID_LEY = $idl,
                   NOMBRE = '$nombre',
                   ESTADO = $estado,
                   DURACION_MESES = $duracion
            WHERE ID_MODALIDAD = $idm
EOD;

                    $conn->execute($sql);
                } else {
                    $e = 'INSERT';
                    $sql = <<<EOD
                            
INSERT INTO RMN_MODALIDAD (ID_MODALIDAD, NOMBRE, ID_LEY, ESTADO,DURACION_MESES) 
    VALUES ($idm, '$nombre', $idl, $estado, $duracion)
EOD;

                    $conn->execute($sql);
                }



                $r = array(
                    'id' => $idm,
                    'nombre' => 'modalidad',
                    'accion' => $e,
                    'id_table' => $id_mae_bd
                );

                return $r;

                break;

            case 'RMN_TIPO_ROL_PERSONA'://PARAMETRICA_TIPO_ROL

                /* Validación de campos
                 * campos obligatorios
                 */
                $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_TIPO_ROL_PERSONA');
                $campos_oblig = 'id_tipo_rol_persona;nombre;usuario_canon';
                $campostype = 'num;var;num';
                $val = $this->validarCAMPOS($campos_oblig, $request);
                $valand = $this->valCAMP($campos_oblig, $campostype, $request); 
                if ($val == 'false'&&$valand=='false'){

                    $idtrp = $request['id_tipo_rol_persona'];
                    $usuario_canon = $request['usuario_canon'];
                    $nombre = $request['nombre'];
                } else {

                    $r = array(
                        'codigo_error' => 3,
                        'campos_faltantes' => "CAMPOS Faltantes:".$val."   CAMPOS Numericos:".$valand,
                        'nombre' => 'tipo_rol',
                        'id_table' => $id_mae_bd
                    );

                    return $r;
                }

                $sql = <<<EOD
SELECT * FROM RMN_TIPO_ROL_PERSONA WHERE ID_TIPO_ROL_PERSONA=$idtrp
EOD;
                $result = CN_TABLE::executeSQL($sql);

                $e = '';
                if (count($result) > 0) {
                    $e = 'UPDATE';
                    $sql = <<<EOD
                            
UPDATE RMN_TIPO_ROL_PERSONA SET NOMBRE ='$nombre',USUARIO_CANON = $usuario_canon WHERE ID_TIPO_ROL_PERSONA = $idtrp
EOD;

                    $conn->execute($sql);
                } else {
                    $e = 'INSERT';
                    $sql = <<<EOD
                            
INSERT INTO RMN_TIPO_ROL_PERSONA (ID_TIPO_ROL_PERSONA, NOMBRE,USUARIO_CANON)  
    VALUES ($idtrp,'$nombre',$usuario_canon)
EOD;

                    $conn->execute($sql);
                }



                $r = array(
                    'id' => $idtrp,
                    'nombre' => 'tipo_rol',
                    'accion' => $e,
                    'id_table' => $id_mae_bd
                );

                return $r;

                break;

            case 'RMN_TIPO_ANOTACION'://PARAMETRICA_RMN_TIPO_ANOTACION

                /* Validación de campos
                 * campos obligatorios
                 */
                $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_TIPO_ANOTACION');
                $campos_oblig = 'id_tipo_anotacion;nombre;modifica';
                $campostype = 'num;var;num';
                $val = $this->validarCAMPOS($campos_oblig, $request);
                $valand = $this->valCAMP($campos_oblig, $campostype, $request);   
                if ($val == 'false'&&$valand=='false') {

                    $idta = $request['id_tipo_anotacion'];
                    $nombre = $request['nombre'];
                    $mod = $request['modifica'];
                    $idtn = null;
                } else {

                    $r = array(
                        'codigo_error' => 3,
                        'campos_faltantes' => "CAMPOS Faltantes:".$val."   CAMPOS Numericos:".$valand,
                        'nombre' => 'tipo_anotacion',
                        'id_table' => $id_mae_bd
                    );

                    return $r;
                }

                $sql = <<<EOD
SELECT * FROM RMN_TIPO_ANOTACION WHERE ID_TIPO_ANOTACION=$idta
EOD;
                $result = CN_TABLE::executeSQL($sql);

                $e = '';
                if (count($result) > 0) {
                    $e = 'UPDATE';
                    $sql = <<<EOD
                            
UPDATE RMN_TIPO_ANOTACION
   SET NOMBRE = '$nombre',
       MODIFICA = $mod
WHERE ID_TIPO_ANOTACION = $idta
EOD;

                    $conn->execute($sql);
                } else {
                    $e = 'INSERT';
                    $sql = <<<EOD

INSERT INTO RMN_TIPO_ANOTACION(ID_TIPO_ANOTACION,NOMBRE,MODIFICA)
VALUES($idta,'$nombre',$mod)
EOD;

                    $conn->execute($sql);
                }



                $r = array(
                    'id' => $idta,
                    'nombre' => 'tipo_anotacion',
                    'accion' => $e,
                    'id_table' => $id_mae_bd
                );

                return $r;

                break;

            case 'RMN_NORMA'://PARAMETRICA_NORMA

                /* Validación de campos
                 * campos obligatorios
                 */
                $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_NORMA');
                $campos_oblig = 'id_norma;nombre;fecha';
		$campostype = 'num;var;date';
                $val = $this->validarCAMPOS($campos_oblig, $request);
                $valand = $this->valCAMP($campos_oblig, $campostype, $request);
                if ($val == 'false'&&$valand=='false') {

                    $idn = $request['id_norma'];
                    $nombre = $request['nombre'];
                    $fecha = $request['fecha'];
                } else {

                    $r = array(
                        'codigo_error' => 3,
                        'campos_faltantes' => "CAMPOS Faltantes:".$val."   CAMPOS Numericos:".$valand,
                        'nombre' => 'norma',
                        'id_table' => $id_mae_bd
                    );

                    return $r;
                }

                $sql = <<<EOD
SELECT * FROM RMN_NORMA WHERE ID_NORMA=$idn
EOD;
                $result = CN_TABLE::executeSQL($sql);

                $e = '';
                if (count($result) > 0) {
                    $e = 'UPDATE';
                    $sql = <<<EOD
                            
UPDATE RMN_NORMA SET NOMBRE='$nombre',FECHA =to_date('$fecha','YYYY-MM-DD') WHERE ID_NORMA = $idn
EOD;

                    $conn->execute($sql);
                } else {
                    $e = 'INSERT';
                    $sql = <<<EOD
INSERT INTO RMN_NORMA(ID_NORMA,NOMBRE,FECHA) VALUES($idn,'$nombre',to_date('$fecha','YYYY-MM-DD'))
EOD;

                    $conn->execute($sql);
                }



                $r = array(
                    'id' => $idn,
                    'nombre' => 'norma',
                    'accion' => $e,
                    'id_table' => $id_mae_bd
                );

                return $r;

                break;

            case 'RMN_TIPO_TERCEROS'://PARAMETRICA_TIPO_TERCERO

                /* Validación de campos
                 * campos obligatorios
                 */
                $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_TIPO_TERCEROS');
                $campos_oblig = 'id_tipo_terceros;descripcion';
                $campostype = 'num;var';
                $val = $this->validarCAMPOS($campos_oblig, $request);
                $valand = $this->valCAMP($campos_oblig, $campostype, $request); 

                if ($val == 'false'&&$valand=='false') {

                    $idter = $request['id_tipo_terceros'];
                    $descripcion = $request['descripcion'];
                } else {

                    $r = array(
                        'codigo_error' => 3,
                        'campos_faltantes' => "CAMPOS Faltantes:".$val."   CAMPOS Numericos:".$valand,
                        'nombre' => 'tipo_terceros',
                        'id_table' => $id_mae_bd
                    );

                    return $r;
                }

                $sql = <<<EOD
SELECT * FROM RMN_TIPO_TERCEROS WHERE ID_TIPO_TERCEROS=$idter
EOD;
                $result = CN_TABLE::executeSQL($sql);

                $e = '';
                if (count($result) > 0) {
                    $e = 'UPDATE';
                    $sql = <<<EOD
                            
UPDATE RMN_TIPO_TERCEROS SET DESCRIPCION='$descripcion' WHERE ID_TIPO_TERCEROS =$idter
EOD;

                    $conn->execute($sql);
                } else {
                    $e = 'INSERT';
                    $sql = <<<EOD
                            
INSERT INTO RMN_TIPO_TERCEROS(ID_TIPO_TERCEROS,DESCRIPCION)
VALUES($idter,'$descripcion')
EOD;

                    $conn->execute($sql);
                }



                $r = array(
                    'id' => $idter,
                    'nombre' => 'tipo_tercero',
                    'accion' => $e,
                    'id_table' => $id_mae_bd
                );

                return $r;

                break;

            default:
                $id_mae_bd = CN_TABLE::consultarIdTablaBD('SELECTOR');
                $r = array(
                    'codigo_error' => 3,
                    'campos_faltantes' => 'selector no valido',
                    'nombre' => 'selector no valido',
                    'id_table' => $id_mae_bd
                );

                return $r;
        }
    }

    /**
     * 
     * @param type $param_oblig
     * @param sfWebRequest $request
     * @return string
     */
    public function validarCAMPOS($param_oblig, sfWebRequest $request) {

        $param_oblig_datos = explode(';', $param_oblig);
        $param_faltantes = 'false';

        foreach ($param_oblig_datos as $value) {
            if (!isset($request[$value])) {
                if ($param_faltantes == 'false') {
                    $param_faltantes = '';
                }
                $param_faltantes = $param_faltantes ." " . $value.",";
            } elseif ($request[$value] == null || $request[$value] == 'null' || $request[$value] == '') {
                if ($param_faltantes == 'false') {
                    $param_faltantes = '';
                }
                $param_faltantes = $param_faltantes . " " . $value.",";
            }
        }

        return $param_faltantes;
    }
    
    /**
     * Validador de campos numericos
     * @campval Tipos de campos
     * @param type $param_oblig
     * @param sfWebRequest $request
     * @return string
     */
    public function valCAMP($param_oblig,$campval, sfWebRequest $request){
        $param_oblig_datos = explode(';', $param_oblig);
        $param_faltantes = 'false';
        $campval_type= explode(';', $campval);
        $cont=0;
        foreach ($param_oblig_datos as $value){
            
            if($campval_type[$cont]=='num'){
                
                if(CN_TABLE::validarNumeroFormat($request[$value])==false){
                    if ($param_faltantes == 'false') {
                        $param_faltantes = '';
                    }
                    $param_faltantes = $param_faltantes ." ". $value.",";
                }
                
                
            }
            
            if($campval_type[$cont]=='date'){
                
                if(CN_TABLE::validarStringDateFormat($request[$value])==false){
                    if ($param_faltantes == 'false') {
                        $param_faltantes = '';
                    }
                    
                    $param_faltantes = $param_faltantes ." CAMPOS de fecha debe tener formato yyyy-mm-dd: ". $value.",";
                }
                
            }
            
            
            $cont++;
            
        }
        
        return $param_faltantes;
        
        
    }

    /**
     * 
     * @param type $error_log
     * @param type $service_url
     */
    public function envioCorreoError($error_log, $service_url) {

        /**
         * 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('email_destino');

        $recipients = $email_destino;

        $body = <<<EOD
<br/>
Se envia correo por fallo de webservice_actualizacion_dominio; .                                       
<br/> <br/> 
Error: 
<br/> <br/> 
$error_log
<br/> 
EOD;

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

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

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

}
