<?php

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

/**
 * webservice_actualizacion_anotacion actions.
 *
 * @package    canon
 * @subpackage webservice_actualizacion_anotacion
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class webservice_actualizacion_anotacionActions 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') . '/webservice_sigm.log';
        $this->custom_logger = new sfFileLogger(new sfEventDispatcher(), array('file' => $logPath));
        $this->custom_logger->info("[webservice_actualizacion_anotacion] Servicio executeList webservice_actualizacion_anotacion.\n");
        $this->custom_logger->info("---BEGIN Logging request--- (Revisar log proceso_completo.log)");
        //Declaramos variable para almacenar parametros obtenidos en un arreglo
        $json_parametros = array();
        foreach ($request->getPostParameters() as $key => $value) {
            $this->custom_logger->info("[webservice_actualizacion_anotacion] request[$key] = $value\n");
            $json_parametros[$key] = $value;
        }
        $this->custom_logger->info("--------------------------------------------------/  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->custom_logger->info("[webservice_actualizacion_anotacion] request[$key] = $value");
        }
        $this->custom_logger->info("---END Logging request");

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

        //Codigo de error defecto - 20191001
        $codigo_error = 0;
        /* Variables y constantes para Log */

        /* Fin Variables y constantes para Log */

        $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();

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

        $this->parameters = true;
        $parametros = '';

        //Variables por defecto para el registro de log
        //el username desde qebsafiERP
        $usuario = 1;
        $usuario_ws = 'admin';
        //comando que identifica la funcionalidad
        $comando = 'webservice_actualizacion_anotacion';
        $success_txt = "";
        //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
        $this->conn->execute($sql);
        $result = CN_TABLE::executeSQL($sql);
        $fecha_log_ini = $result[0]['fecha']; //Establecemos fechaHora de Inicio de consumo del servicio
        $this->custom_logger->info("HORA INICIO:" . $fecha_log_ini);
        $cliente = !isset($request['cliente']) ? 'ANNA' : $request['cliente']; //Cliente que utiliza el servicio
        //obtener id maestro tabla
        $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_ANOTACION');

        //  1- CONSULTAR, 2- ACTUALIZAR, 3 - ADICIONAR, 4 - ELIMINAR, 5 - ANULAR
        $id_ope_bd = 2;
        //id del maestro tercero
        $id_mae_ter_log = 1;
        $comando = 'webservice_actualizacion_anotacion';
        //construir observacion
        $observacion_log = "'Se ingreso a actualizar anotacion desde servicio web webservice_actualizacion_anotacion'";
        $error_log = '';

        //Manejo de errores
        //Variables obligatorias
        $id_vigencia = $id_anhos = date('Y');
        $fecha_proceso = CN_TABLE::fechaSistema();

        //PARAMETROS Y VARIABLES
        /**
         * Variables obligatorias y Opcionales
         */
        //RMN_ANOTACION :: ID_ANOTACION, ID_TITULO ,ID_TIPO_ANOTACION, FECHA_INSCRIPCION
        //CA_NOVEDAD ::
        //ID_NOVEDAD,ID_TITULO,ID_TIPO_NOVEDAD,FECHA_REGISTRO,ID_ANOTACION,ID_TIPO_ANOTACION,DOC_SOPORTE,FECHA_DOC_SOP
        //ID_TIPO_DOC,OBSERVACIONES,APROBADA,ID_USUARIO,FECHA_INICIO,FECHA_FIN
        $id_anotacion = !isset($request['id_anotacion']) ? 'null' : $request['id_anotacion'];
        $id_titulo = !isset($request['id_titulo']) ? 'null' : $request['id_titulo'];
        $id_tipo_anotacion = !isset($request['id_tipo_anotacion']) ? 'null' : $request['id_tipo_anotacion'];
        $fecha_inscripcion = !isset($request['fecha_inscripcion']) ? 'null' : $request['fecha_inscripcion'];
        //$id_tipo_novedad = !isset($request['id_tipo_novedad'])?'null':$request['id_tipo_novedad'];
        $doc_soporte = !isset($request['doc_soporte']) ? 'null' : $request['doc_soporte'];
        $fecha_doc_sop = !isset($request['fecha_doc_sop']) ? 'null' : $request['fecha_doc_sop'];
        $id_tipo_doc = !isset($request['id_tipo_doc']) ? 'null' : $request['id_tipo_doc'];
        $observaciones = !isset($request['observaciones']) ? 'null' : $request['observaciones'];
        $aprobada = !isset($request['aprobada']) ? '0' : $request['aprobada'];
        $id_usuario = !isset($request['id_usuario']) ? 'null' : $request['id_usuario'];
        $fecha_inicio = !isset($request['fecha_inicio']) ? 'null' : $request['fecha_inicio'];
        $fecha_fin = !isset($request['fecha_fin']) ? 'null' : $request['fecha_fin'];
        //Obtenemos todos los parametros

        /**
         * Inicio del proceso
         */
        try {

            // Registro de consulta en tabla de log
            $this->custom_logger->info("[webservice_actualizacion_anotacion] " . $observacion_log . ".\n");

            $id_tabla = $id_anotacion;
            if(is_numeric($id_anotacion)){
            CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, "1", $comando, $observacion_log);
            
            }else{
                CN_TABLE::registroTableLog('null', $id_ope_bd, $id_mae_bd, "1", $comando, $observacion_log);
            }
            // Variables de retorno
            $resultado = array();

            /**
             * Verificar acceso a servicio por LDAP - 20191001
             */
            //Para local sofhouse no valida - 20191001 
            if ($entidad_cliente != 7) {

                //Variables de configuracion del servidor de conexion LDAP (app.yml)
                $account_suffix = sfConfig::get('app_account_suffix');
                $domain_controllers = sfConfig::get('app_domain_controllers');
                $base_dn = sfConfig::get('app_base_dn');
                $admin_username = sfConfig::get('app_admin_username');
                $admin_password = sfConfig::get('app_admin_password');

                $config = array(
                    'account_suffix' => $account_suffix,
                    'domain_controllers' => array($domain_controllers),
                    'base_dn' => $base_dn,
                    'admin_username' => $admin_username,
                    'admin_password' => $admin_password,
                );

                $adldap = new adLDAP($config);

                if (!isset($request['usuario_web']) || !isset($request['clave_web'])) {
                    //Codigo de error - 20191001
                    $codigo_error = 1;
                    throw new Exception("Falta los parámetros de acceso obligatorios verificar.");
                }

                //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);
                $usuario_ws = $usuario_web;

                $authUser = $adldap->authenticate($usuario_web, $clave_web);

                if ($authUser != true) {
                    //Codigo de error - 20191001
                    $codigo_error = 2;
                    throw new Exception("La autenticación de usuario($usuario_web) para el servicio web fallo; favor verificar.");
                }
            }

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

            /*
             * Verificar parametros - 20190911
             */
            $param_oblig = 'id_titulo;id_anotacion;id_tipo_anotacion;fecha_inscripcion;doc_soporte;fecha_doc_sop;fecha_inicio;fecha_fin';
            $campostype = 'num;num;num;date;var;date;date;date';
            $valand = $this->valCAMP($param_oblig, $campostype, $request); 
            $param_oblig_datos = explode(';', $param_oblig);
            
            foreach ($param_oblig_datos as $value) {
                if (!isset($request[$value])) {
                    $this->parameters = false;
                    $parametros = $parametros . ';' . $value;
                }
            }
            
            if($valand!='false'){
                $codigo_error = 3;
                throw new Exception( " CAMPOS Numericos: $valand ");
                
            }

            if (!$this->parameters) {
                $parametros = substr($parametros, 1);
                //Codigo de error - 20191001
                $codigo_error = 3;
                throw new Exception("Falta alguno de los parámetros($parametros) obligatorios verificar.");
            }
            //VAlidar Formato de campos
            //VAlidamos campos fecha
            if (!$this->validarStringDateFormat($fecha_inscripcion)) {
                $codigo_error = 26;
                throw new Exception("El formato del parametro fecha_inscripcion no es valido. el formato correcto es yyyy-mm-dd.");
            }
            if (!$this->validarStringDateFormat($fecha_inicio)) {
                $codigo_error = 26;
                throw new Exception("El formato del parametro fecha_inicio no es valido. el formato correcto es yyyy-mm-dd.");
            }
            if (!$this->validarStringDateFormat($fecha_fin)) {
                $codigo_error = 26;
                throw new Exception("El formato del parametro fecha_fin no es valido. el formato correcto es yyyy-mm-dd.");
            }
            if (!$this->validarStringDateFormat($fecha_doc_sop)) {
                $codigo_error = 26;
                throw new Exception("El formato del parametro fecha_doc_sop no es valido. el formato correcto es yyyy-mm-dd.");
            }
            //Verificamos que exista el titulo indicado
            //sentencia sql
            $sql = <<<EOD
SELECT ID_TITULO 
FROM RMN_TITULO
WHERE ID_TITULO = $id_titulo 
EOD;
            //ejecuta el sql
            $this->conn->execute($sql);
            $result = CN_TABLE::executeSQL($sql);
            //obtener id maestro tabla
            $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_TITULO');
            //obtiene el valor para su identificador unico
            $id_tabla = $id_titulo;
            //3 - indica operacion de adicionar de registro
            $id_ope_bd = 1;
            /* Construir observacion */
            $observacion_log = "'Se consulto id_titulo : " . $id_tabla . " desde la funcionalidad: " . $comando . "'";
            /* registro de consulta en tabla de log */
            $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $usuario, $comando, $observacion_log);
            if (count($result) <= 0) {
                $codigo_error = 5;
                throw new Exception("El titulo con id $id_titulo no existe.");
            }

            /*
             * Verificar la anotacion por el ID, sino la crea
             */
            //sentencia sql
            $sql = <<<EOD
SELECT * 
FROM RMN_ANOTACION 
WHERE ID_anotacion= $id_anotacion 
EOD;
            //ejecuta el sql
            $this->conn->execute($sql);
            $result = CN_TABLE::executeSQL($sql);
            //obtener id maestro tabla
            $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_ANOTACION');
            //obtiene el valor para su identificador unico
            $id_tabla = $id_anotacion;
            //3 - indica operacion de adicionar de registro
            $id_ope_bd = 1;
            /* Construir observacion */
            $observacion_log = "'Se consulto id_anotacion : " . $id_anotacion . " desde la funcionalidad: " . $comando . "'";
            /* registro de consulta en tabla de log */
            $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $usuario, $comando, $observacion_log);
            /**
             * Crear tercero
             */
            if (count($result) <= 0) {//Creamos RMN_ANOTACION
                /*
                 * RMN_ANOTACION :: ID_ANOTACION, ID_TITULO ,ID_TIPO_ANOTACION, FECHA_INSCRIPCION
                 */
                $sql = <<<EOD
INSERT INTO RMN_ANOTACION (ID_ANOTACION, ID_TITULO ,ID_TIPO_ANOTACION, FECHA_INSCRIPCION) VALUES (
$id_anotacion,$id_titulo, $id_tipo_anotacion, to_date('$fecha_inscripcion','YYYY-MM-DD'))
EOD;
                $this->conn->execute($sql);
                //obtener id maestro tabla
                $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_ANOTACION');
                //obtiene el valor para su identificador unico
                $id_tabla = $id_anotacion;
                //3 - indica operacion de adicionar de registro
                $id_ope_bd = 3;
                /*
                 * Construir observacion
                 */
                $observacion_log = "'Se adiciono id_anotacion : " . $id_tabla . " desde la funcionalidad: " . $comando . "'";
                $success_txt = "Se adiciono id_anotacion : $id_tabla.";

                /*
                 * registro de consulta en tabla de log
                 */
                $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $usuario, $comando, $observacion_log);
            } else {//ACTUALIZAMOS RMN ANOTACION EXISTENTE
                /*
                 * RMN_ANOTACION :: ID_ANOTACION, ID_TITULO ,ID_TIPO_ANOTACION, FECHA_INSCRIPCION
                 */
                //agregamos comillas a variables opcionales de texto
                $sql = <<<EOD
UPDATE RMN_ANOTACION SET
ID_TITULO = $id_titulo
, ID_TIPO_ANOTACION = $id_tipo_anotacion
, FECHA_INSCRIPCION = to_date('$fecha_inscripcion','yyyy-mm-dd')
WHERE ID_ANOTACION = $id_anotacion
EOD;
                $this->conn->execute($sql);
                //obtener id maestro tabla
                $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_ANOTACION');
                //obtiene el valor para su identificador unico
                $id_tabla = $id_anotacion;
                //3 - indica operacion de adicionar de registro
                $id_ope_bd = 2;
                /*
                 * Construir observacion
                 */
                $observacion = "'Se Actualizo id_anotacion : " . $id_tabla . " desde la funcionalidad: " . $comando . "'";
                $success_txt = "Se Actualizo id_anotacion : $id_tabla.";
                /*
                 * registro de consulta en tabla de log
                 */
                $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $usuario, $comando, $observacion);
            }

            //Obtenemos el tipo de NOVEDAD del tipo de anotacion si tiene tipo de novedad 
            //se crea o actualiza la novedad de lo contrario se omite
            $sql = <<<EOD
SELECT id_tipo_novedad 
FROM RMN_TIPO_ANOTACION
WHERE ID_TIPO_ANOTACION = $id_tipo_anotacion and id_tipo_novedad is not null
EOD;
            //ejecuta el sql
            $this->conn->execute($sql);
            $result = CN_TABLE::executeSQL($sql);

            if (count($result) > 0) {

                $id_tipo_novedad = $result[0]['id_tipo_novedad'];
                //Se crea o se actualiza la novedad
                $sql = <<<EOD
SELECT id_novedad 
FROM CA_NOVEDAD
WHERE ID_ANOTACION = $id_anotacion 
EOD;
                //ejecuta el sql
                $this->conn->execute($sql);
                $result = CN_TABLE::executeSQL($sql);
                //obtener id maestro tabla
                $id_mae_bd = CN_TABLE::consultarIdTablaBD('CA_NOVEDAD');
                //obtiene el valor para su identificador unico
                $id_tabla = 'null';
                //3 - indica operacion de consultar registro
                $id_ope_bd = 1;
                /* Construir observacion */
                $observacion_log = "'Se consulto novedad para el id_anotacion : " . $id_anotacion . " desde la funcionalidad: " . $comando . "'";
                /* registro de consulta en tabla de log */
                $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $usuario, $comando, $observacion_log);

                if (count($result) <= 0) {//Creamos CA_NOVEDAD
                    //CA_NOVEDAD::ID_NOVEDAD,ID_TITULO,ID_TIPO_NOVEDAD,FECHA_REGISTRO,ID_ANOTACION,ID_TIPO_ANOTACION,DOC_SOPORTE,FECHA_DOC_SOP
                    //ID_TIPO_DOC,OBSERVACIONES,APROBADA,ID_USUARIO,FECHA_INICIO,FECHA_FIN
                    //agregamos comillas a variables opcionales de texto
                    if ($observaciones != 'null') {
                        $observaciones = "'$observaciones'";
                    }
                    if ($doc_soporte != 'null') {
                        $doc_soporte = "'$doc_soporte'";
                    }

                    $sql = <<<EOD
INSERT INTO CA_NOVEDAD (ID_TITULO,ID_TIPO_NOVEDAD,FECHA_REGISTRO,ID_ANOTACION,ID_TIPO_ANOTACION,DOC_SOPORTE,FECHA_DOC_SOP,
ID_TIPO_DOC,OBSERVACIONES,APROBADA,ID_USUARIO,FECHA_INICIO,FECHA_FIN) 
VALUES (
$id_titulo,$id_tipo_novedad ,to_date('$fecha_inscripcion','yyyy-mm-dd'),$id_anotacion,$id_tipo_anotacion,$doc_soporte,
to_date('$fecha_doc_sop','yyyy-mm-dd'),$id_tipo_doc,$observaciones,0,null,
to_date('$fecha_inicio','yyyy-mm-dd'),to_date('$fecha_fin','yyyy-mm-dd')
)
EOD;
                    $this->conn->execute($sql);
                    //Obtenemos el ID del registro Recien Insertado
                    $sql = <<<EOD
SELECT id_novedad 
FROM CA_NOVEDAD
WHERE ID_ANOTACION = $id_anotacion 
EOD;
                    //ejecuta el sql
                    $this->conn->execute($sql);
                    $result = CN_TABLE::executeSQL($sql);
                    $id_novedad = $result[0]['id_novedad'];
                    $id_mae_bd = CN_TABLE::consultarIdTablaBD('CA_NOVEDAD'); //obtener id maestro tabla
                    //obtiene el valor para su identificador unico
                    $id_tabla = $id_novedad;
                    //3 - indica operacion de adicionar de registro
                    $id_ope_bd = 3;
                    /*
                     * Construir observacion
                     */
                    $observacion_log = "'Se adiciono id_novedad : " . $id_tabla . " desde la funcionalidad: " . $comando . "'";
                    $success_txt = $success_txt . "Se adiciono id_novedad : $id_tabla.";

                    /*
                     * registro de consulta en tabla de log
                     */
                    $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $usuario, $comando, $observacion_log);
                } else {//ACUALIZAMOS CA_NOVEDAD
                    //CA_NOVEDAD::ID_NOVEDAD,ID_TITULO,ID_TIPO_NOVEDAD,FECHA_REGISTRO,ID_ANOTACION,ID_TIPO_ANOTACION,DOC_SOPORTE,FECHA_DOC_SOP
                    //ID_TIPO_DOC,OBSERVACIONES,APROBADA,ID_USUARIO,FECHA_INICIO,FECHA_FIN
                    $id_novedad = $result[0]['id_novedad'];
                    //agregamos comillas a variables opcionales de texto
                    if ($observaciones != 'null') {
                        $observaciones = "'$observaciones'";
                    }
                    if ($doc_soporte != 'null') {
                        $doc_soporte = "'$doc_soporte'";
                    }
                    $sql = <<<EOD
UPDATE CA_NOVEDAD SET
ID_TITULO = $id_titulo
, ID_TIPO_NOVEDAD = $id_tipo_novedad
, FECHA_REGISTRO = to_date('$fecha_inscripcion','yyyy-mm-dd')
, ID_ANOTACION = $id_anotacion
, ID_TIPO_ANOTACION = $id_tipo_anotacion
, DOC_SOPORTE = $doc_soporte
, FECHA_DOC_SOP = to_date('$fecha_doc_sop','yyyy-mm-dd')
, ID_TIPO_DOC = $id_tipo_doc
, OBSERVACIONES = $observaciones
, FECHA_INICIO = to_date('$fecha_inicio','yyyy-mm-dd')
, FECHA_FIN = to_date('$fecha_fin','yyyy-mm-dd')                     
WHERE ID_NOVEDAD = $id_novedad  
and ID_ANOTACION = $id_anotacion
EOD;
                    $this->conn->execute($sql);
                    $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_ANOTACION'); //obtener id maestro tabla
                    $id_tabla = $id_novedad; //obtiene el valor para su identificador unico
                    $id_ope_bd = 2; //3 - indica operacion
                    /* Construir observacion */
                    $observacion = "'Se Actualizo id_novedad : " . $id_novedad . " desde la funcionalidad: " . $comando . "'";
                    $success_txt = $success_txt . "Se Actualizo id_novedad : $id_tabla.";
                    /* registro de consulta en tabla de log */
                    $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $usuario, $comando, $observacion);
                }
            }

            /**
             * COMMIT
             */
            $this->conn->commit();
            $mensaje = 'Proceso terminado exitoso.' . $success_txt;
            $this->logMessage("COMMIT " . $mensaje);
            $this->custom_logger->info("COMMIT " . $mensaje);

            $this->status = 0;
            //$this->mensajeError = $mensaje;
            $respuesta = array(
                'mensaje' => $mensaje,
                'servicio' => 'webservice_actualizacion_anotacion',
                'modulo' => 'CANON'
            );
            $this->list_data = array($respuesta);
        } catch (Exception $e) {

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

            $mensaje = "[webservice_actualizacion_anotacion] ROLLBACK ERROR al actualizar persona. !!!";
            $this->custom_logger->info($mensaje);
            $this->custom_logger->info("state 1");
            $this->custom_logger->info("Code " . $e->getCode());
            $this->custom_logger->info("Message " . $e->getMessage());

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

            /*
             * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
             */
            $id_mae_bd = CN_TABLE::consultarIdTablaBD('RMN_ANOTACION');
            $id_tabla = 'null';
            $id_ope_bd = 3;
            $observacion_log = "'Se termino el proceso de webservice_actualizacion_anotacion, se generaron errores en el proceso de creación.'";
            $usuario = 1;
            $this->custom_logger->info("[webservice_actualizacion_anotacion] " . $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, $usuario, $comando, 'null');

            //Se cambian ' por chr(39), para no dañar el insert del log - 20161202            
            //$error_log = $mensaje . ' error message: ' . $e->getMessage() . ' code: ' . $e->getCode();
            $error_log = $mensaje . ' error message: ' . str_replace("'", "'|| chr(39) ||'", $e->getMessage()) . ' code: ' . $e->getCode();
            $error_log = substr($error_log, 1, 4000);

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

            /**
             * Envio de correo de error - 20190911
             */
            $this->custom_logger->info("Envio de correo de error inicio ");

            $url = $service_url . "webservice_envio_correo/list.json";

            $email_destino = sfConfig::get('app_email_destino');

            $recipients = $email_destino . ';' . 'Admin';

            $body = <<<EOD
<br/>
Se envia correo por fallo de webservice_actualizacion_anotacion; ID ANOTACION($id_anotacion).                                       
<br/> <br/> 
Error: 
<br/> <br/> 
$error_log
<br/> 
EOD;

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

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

            $this->custom_logger->info("Envio de correo de error fin");
        }
        /**
         * Crear registro de WebServicelog
         */
        $this->custom_logger->info("Inicio crear registro en el webservices_log");
        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        $this->conn->beginTransaction();
        $parametros = json_encode($json_parametros);
        $respuesta = json_encode($respuesta);
        $termino_proceso = $this->status == 1 ? "0" : "1";
        CN_TABLE::registroWebservicesLog($usuario_ws, $cliente, $comando, $fecha_log_ini, $parametros, $respuesta, $termino_proceso, $error_log);
        $this->conn->commit();
        $this->custom_logger->info("Fin crear registro en el webservices_log");
    }

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

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

    public function validarStringDateFormat($valor) {
        if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $valor)) {
            return true;
        } else {
            return false;
        }
    }
    
       /**
     * 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;
        
        
    }

    
    

}
