public IQueryable <UtilsJson.AInstitucion> getCadenaValorFilter([FromBody] UtilsJson.ACadenaValor cadena_valor)
        {
            IQueryable <UtilsJson.AInstitucion> listado = null;

            try
            {
                string         tipo_ente             = cadena_valor.tipo_institucion;
                string         nombre_institucion    = cadena_valor.nombre_institucion;
                long[]         id_tipo_biotecnologia = cadena_valor.ids_tipo_biotecnologia;
                long           id_sector             = cadena_valor.id_sector;
                SqlParameter[] param = new SqlParameter[4];
                if (tipo_ente == null)
                {
                    param[0] = new SqlParameter("tipo", DBNull.Value);
                }
                else
                {
                    param[0] = new SqlParameter("tipo", tipo_ente);
                }

                if (nombre_institucion == null)
                {
                    param[1] = new SqlParameter("nombre", DBNull.Value);
                }
                else
                {
                    param[1] = new SqlParameter("nombre", nombre_institucion);
                }
                if (id_tipo_biotecnologia == null)
                {
                    param[2] = new SqlParameter("biotecnologia", DBNull.Value);
                }
                else
                {
                    string stringids = string.Empty;
                    for (int i = 0; i < id_tipo_biotecnologia.Length; i++)
                    {
                        stringids += id_tipo_biotecnologia[i] + "|";
                    }
                    param[2] = new SqlParameter("biotecnologia", stringids);
                }
                if (id_sector == 0)
                {
                    param[3] = new SqlParameter("sector", DBNull.Value);
                }
                else
                {
                    param[3] = new SqlParameter("sector", id_sector);
                }
                listado = _repositorio.executeStored <UtilsJson.AInstitucion>("getFilterCadenaValor", param).Cast <UtilsJson.AInstitucion>().AsQueryable <UtilsJson.AInstitucion>();
            }
            catch (Exception ex)
            {
                SystemLog log = new SystemLog();
                log.ErrorLog(ex.Message);
            }

            return(listado);
        }
 public bool validateCode([FromBody] string code)
 {
     bool solicitudRol = false;
     try
     {
         if (!string.IsNullOrWhiteSpace(code))
         {
             //verificacion de existencia y estado del codigo
             Expression<Func<SolicitudRegistro, bool>> query = u => u.codigo == code && u.estado == true;
             SolicitudRegistro solicitud = _repositorio.Get<SolicitudRegistro>(query);
             //Si la solicitud existe y no se ha usado subo a session el codigo
             if (solicitud != null)
             {
                 return true;
             }
         }
     }
     catch (Exception ex)
     {
         SystemLog mSystemLog = new SystemLog();
         mSystemLog.ErrorLog(ex.Message);
     }
     return false;
 }
        public Mensaje deleteAutor([FromBody] UtilsJson.APersona autor)
        {
            Mensaje mensaje = null;

            try
            {/*
              * //datos logueo
              * string correo_logueo = autor.correo_logueo;
              * string contrasena = autor.contrasena;
              *
              *
              * //datos publicacion
              * long id_autor = autor.id;
              *
              *
              * if (!String.IsNullOrWhiteSpace(correo_logueo) && !String.IsNullOrWhiteSpace(contrasena))
              * {
              *     //Cifrado de la contrasena
              *     contrasena = CifradoDatos.cifrarPassword(contrasena);
              *
              *     //Busco la institucion asociada al usuario y a la contrasena
              *     Expression<Func<Autor, bool>> query = (u => u.institucion.logueo.correo_electronico == correo_logueo && u.institucion.logueo.contrasena == contrasena && u.institucion.estado == true && u.id == id_autor);
              *
              *     List<Autor> autorB = _repositorio.Filter<Autor>(query);
              *
              *     if (autorB != null)
              *     {
              *         if (autorB.Count > 0)
              *         {
              *             long id_persona = autorB[0].persona.id;
              *             _repositorio.Delete<Autor>(autorB[0].id);
              *             _repositorio.Delete<Persona>(id_persona);
              *             mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Autor eliminado exitosamente.");
              *         }
              *         else
              *         {
              *             mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "El autor no hace parte de la institucion especificada o no existe");
              *         }
              *     }
              *     else
              *     {
              *         mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "El autor no hace parte de la institucion especificada o no existe");
              *     }
              * }
              * else
              * {
              * mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "Correo de logueo y contraseña son requeridos");
              * }*/
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                //Guardo los errores que se producieron durante la insercion
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
            }
            return(mensaje);
        }
        public Mensaje editConferencista([FromBody]UtilsJson.APersona conferencista)
        {
            Mensaje mensaje = null;

            try
            {
                if (conferencista != null)
                {
                    if (!string.IsNullOrWhiteSpace(conferencista.token))
                    {
                        if (AutenticacionToken.validateToken(conferencista.token) == 1)
                        {
                            long id_institucion_c = (!string.IsNullOrWhiteSpace(conferencista.Ainstitucion)) ? long.Parse(conferencista.Ainstitucion) : 0;
                            Institucion institucion = _repositorio.Get<Institucion>(id_institucion_c);
                            Conferencista conferencistaDB = _repositorio.Get<Conferencista>(conferencista.id);
                            if (institucion != null && conferencistaDB != null)
                            {
                                if (AutenticacionToken.validateUserToken(conferencista.token, institucion.logueo.correo_electronico))
                                {
                                    //datos personales
                                    string tipo_identificacion = validarTipoIdentificacion(conferencista.tipo_identificacion);
                                    string identificacion = conferencista.identificacion;
                                    string nombre_persona = conferencista.nombre;
                                    string apellido_persona = conferencista.apellido;
                                    string correo_persona = conferencista.correo_electronico;
                                    string urlCvlac = conferencista.urlCvlac;
                                    string perfil = conferencista.perfil_profesional;
                                    string foto = conferencista.foto;

                                    if (tipo_identificacion != null)
                                    {
                                        Imagen newImagen = null;
                                        if (!string.IsNullOrWhiteSpace(foto))
                                        {
                                            if (conferencistaDB.persona.foto != null)
                                            {
                                                conferencistaDB.persona.foto.imagenBase64 = foto;
                                            }
                                            else
                                            {
                                                newImagen = new Imagen { imagenBase64 = foto };
                                                conferencistaDB.persona.foto = newImagen;
                                            }
                                        }
                                        conferencistaDB.persona.tipo_identificacion = tipo_identificacion;
                                        conferencistaDB.persona.identificacion = identificacion;
                                        conferencistaDB.persona.nombre = nombre_persona;
                                        conferencistaDB.persona.apellido = apellido_persona;
                                        conferencistaDB.persona.correo_electronico = correo_persona;
                                        conferencistaDB.persona.urlCvlac = urlCvlac;
                                        conferencistaDB.persona.perfil_profesional = perfil;
                                        conferencistaDB.fecha_ult_modificacion = DateTime.Now;
                                        //Almaceno o actualizo la salaMesa
                                        _repositorio.SaveOrUpdate<Conferencista>(conferencistaDB);

                                        mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Conferencista editado exitosamente.");
                                    }
                                    else
                                    {
                                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "El tipo de identificacion no existe. verifique que el valor sea valido");
                                    }
                                }
                                else
                                {
                                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se encontro la sala solicitada o esta asociada a otra institucion.");
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Expiracion, "Error", "La sesion actual ha expirado. Inicie sesion");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                    }
                }
                else
                {
                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se puede insertar un objeto nulo");
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }
            return mensaje;

        }
        public Mensaje editCronograma([FromBody] UtilsJson.ACronograma cronograma)
        {
            Mensaje mensaje = null;

            try
            {
                if (cronograma != null)
                {
                    if (!string.IsNullOrWhiteSpace(cronograma.token_string))
                    {
                        if (AutenticacionToken.validateToken(cronograma.token_string) == 1)
                        {
                            Institucion institucion  = _repositorio.Get <Institucion>(cronograma.institucionId);
                            Cronograma  cronogramaDB = _repositorio.Get <Cronograma>(cronograma.id);
                            if (institucion != null && cronogramaDB != null)
                            {
                                if (AutenticacionToken.validateUserToken(cronograma.token_string, institucion.logueo.correo_electronico))
                                {
                                    string nombre      = cronograma.nombre;
                                    string tema        = cronograma.tema;
                                    string descripcion = cronograma.descripcion;
                                    string color       = cronograma.color;
                                    long   id_sala     = cronograma.salaMesaId;
                                    bool   estado      = cronograma.estado;
                                    long   id_evento   = cronograma.eventoId;
                                    if (!string.IsNullOrWhiteSpace(cronograma.hora_inicio) && !string.IsNullOrWhiteSpace(cronograma.hora_fin))
                                    {
                                        DateTime    hora_inicio = Convert.ToDateTime(cronograma.hora_inicio);
                                        DateTime    hora_fin    = Convert.ToDateTime(cronograma.hora_fin);
                                        Publicacion publicacion = _repositorio.Get <Publicacion>(id_evento);
                                        SalaMesa    salaMesa    = _repositorio.Get <SalaMesa>(id_sala);
                                        if (DateTime.Compare(hora_inicio, hora_fin) < 0)
                                        {
                                            if (publicacion != null && salaMesa != null)
                                            {
                                                cronogramaDB.evento                 = publicacion;
                                                cronogramaDB.sala                   = salaMesa;
                                                cronogramaDB.nombre                 = nombre;
                                                cronogramaDB.tema                   = tema;
                                                cronogramaDB.descripcion            = descripcion;
                                                cronogramaDB.hora_inicio            = hora_inicio;
                                                cronogramaDB.hora_fin               = hora_fin;
                                                cronogramaDB.estado                 = estado;
                                                cronogramaDB.fecha_ult_modificacion = DateTime.Now;
                                                _repositorio.SaveOrUpdate <Cronograma>(cronogramaDB);
                                                mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Cronograma editado exitosamente.");
                                            }
                                            else
                                            {
                                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "El evento o la sala solicitada no existe. verifique");
                                            }
                                        }
                                        else
                                        {
                                            mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "La hora de inicio es posterior a la hora de finalizacion. verifique");
                                        }
                                    }
                                    else
                                    {
                                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "La hora de inicio es posterior a la hora de finalizacion. verifique");
                                    }
                                }
                                else
                                {
                                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se encontro la sala solicitada o esta asociada a otra institucion.");
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Expiracion, "Error", "La sesion actual ha expirado. Inicie sesion");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                    }
                }
                else
                {
                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se puede insertar un objeto nulo");
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }
            return(mensaje);
        }
        public Mensaje editAEventoParticipante([FromBody] UtilsJson.AEventoParticipante eventoParticipante)
        {
            Mensaje mensaje = null;

            try
            {
                if (eventoParticipante != null)
                {
                    if (!string.IsNullOrWhiteSpace(eventoParticipante.token_string))
                    {
                        if (AutenticacionToken.validateToken(eventoParticipante.token_string) == 1)
                        {
                            long               id_institucion_c = eventoParticipante.id_institucion;
                            long               id_publicacion   = eventoParticipante.id_evento;
                            Institucion        institucion      = _repositorio.Get <Institucion>(id_institucion_c);
                            Publicacion        publicacion      = _repositorio.Get <Publicacion>(id_publicacion);
                            EventoParticipante registro         = _repositorio.Get <EventoParticipante>(eventoParticipante.id_evento_institucion);
                            if (institucion != null && publicacion != null && registro != null)
                            {
                                if (AutenticacionToken.validateUserToken(eventoParticipante.token_string, institucion.logueo.correo_electronico))
                                {
                                    registro.institucion            = institucion;
                                    registro.evento                 = publicacion;
                                    registro.fecha_ult_modificacion = DateTime.Now;
                                    registro.estado                 = eventoParticipante.estado;
                                    //Almaceno o actualizo el registro
                                    _repositorio.SaveOrUpdate <EventoParticipante>(registro);

                                    mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Participante a evento editado exitosamente.");
                                }
                                else
                                {
                                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se encontro el registro solicitada o esta asociada a otra institucion.");
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Expiracion, "Error", "La sesion actual ha expirado. Inicie sesion");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                    }
                }
                else
                {
                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se puede insertar un objeto nulo");
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }
            return(mensaje);
        }
        public Mensaje createAutor([FromBody]UtilsJson.APersona autor)
        {
            Mensaje mensaje = null;

            try
            {
                /*
                //datos logueo
                string correo_logueo = autor.correo_logueo;
                string contrasena = autor.contrasena;

                //datos publicacion
                string tipo_identificacion = autor.tipo_identificacion;
                double identificacion = autor.identificacion;
                string nombre_persona = autor.nombre;
                string apellido_persona = autor.apellido;
                string correo_persona = autor.correo_electronico;
                string urlCvlac = autor.urlCvlac;

                if (!String.IsNullOrWhiteSpace(correo_logueo) && !String.IsNullOrWhiteSpace(contrasena))
                {
                    //Cifrado de la contrasena
                    contrasena = CifradoDatos.cifrarPassword(contrasena);

                    //Busco la institucion asociada al usuario y a la contrasena
                    Expression<Func<Representante, bool>> query = (u => u.institucion.logueo.correo_electronico == correo_logueo && u.institucion.logueo.contrasena == contrasena && u.institucion.estado == true);

                    List<Representante> institucion = _repositorio.Filter<Representante>(query);

                    if (institucion != null)
                    {
                        if (institucion.Count > 0)
                        {
                            Persona persona = new Persona(nombre_persona, apellido_persona, tipo_identificacion, identificacion, urlCvlac, correo_persona);

                            Autor autorB = new Autor(institucion[0].institucion, persona);

                            _repositorio.SaveOrUpdate<Autor>(autorB);

                            mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Autor registrada exitosamente.");

                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "Correo logueo y contraseña son requeridos");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "Correo logueo y contraseña son requeridos");
                    }
                }
                else
                {
                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "Correo logueo y contraseña son requeridos");
                }*/
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }
            return mensaje;
        }
        public Mensaje editConferencista([FromBody] UtilsJson.APersona conferencista)
        {
            Mensaje mensaje = null;

            try
            {
                if (conferencista != null)
                {
                    if (!string.IsNullOrWhiteSpace(conferencista.token))
                    {
                        if (AutenticacionToken.validateToken(conferencista.token) == 1)
                        {
                            long          id_institucion_c = (!string.IsNullOrWhiteSpace(conferencista.Ainstitucion)) ? long.Parse(conferencista.Ainstitucion) : 0;
                            Institucion   institucion      = _repositorio.Get <Institucion>(id_institucion_c);
                            Conferencista conferencistaDB  = _repositorio.Get <Conferencista>(conferencista.id);
                            if (institucion != null && conferencistaDB != null)
                            {
                                if (AutenticacionToken.validateUserToken(conferencista.token, institucion.logueo.correo_electronico))
                                {
                                    //datos personales
                                    string tipo_identificacion = validarTipoIdentificacion(conferencista.tipo_identificacion);
                                    string identificacion      = conferencista.identificacion;
                                    string nombre_persona      = conferencista.nombre;
                                    string apellido_persona    = conferencista.apellido;
                                    string correo_persona      = conferencista.correo_electronico;
                                    string urlCvlac            = conferencista.urlCvlac;
                                    string perfil = conferencista.perfil_profesional;
                                    string foto   = conferencista.foto;

                                    if (tipo_identificacion != null)
                                    {
                                        Imagen newImagen = null;
                                        if (!string.IsNullOrWhiteSpace(foto))
                                        {
                                            if (conferencistaDB.persona.foto != null)
                                            {
                                                conferencistaDB.persona.foto.imagenBase64 = foto;
                                            }
                                            else
                                            {
                                                newImagen = new Imagen {
                                                    imagenBase64 = foto
                                                };
                                                conferencistaDB.persona.foto = newImagen;
                                            }
                                        }
                                        conferencistaDB.persona.tipo_identificacion = tipo_identificacion;
                                        conferencistaDB.persona.identificacion      = identificacion;
                                        conferencistaDB.persona.nombre             = nombre_persona;
                                        conferencistaDB.persona.apellido           = apellido_persona;
                                        conferencistaDB.persona.correo_electronico = correo_persona;
                                        conferencistaDB.persona.urlCvlac           = urlCvlac;
                                        conferencistaDB.persona.perfil_profesional = perfil;
                                        conferencistaDB.fecha_ult_modificacion     = DateTime.Now;
                                        //Almaceno o actualizo la salaMesa
                                        _repositorio.SaveOrUpdate <Conferencista>(conferencistaDB);

                                        mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Conferencista editado exitosamente.");
                                    }
                                    else
                                    {
                                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "El tipo de identificacion no existe. verifique que el valor sea valido");
                                    }
                                }
                                else
                                {
                                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se encontro la sala solicitada o esta asociada a otra institucion.");
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Expiracion, "Error", "La sesion actual ha expirado. Inicie sesion");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                    }
                }
                else
                {
                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se puede insertar un objeto nulo");
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }
            return(mensaje);
        }
        public Mensaje deleteCronograma([FromBody]UtilsJson.ACronograma cronograma)
        {
            Mensaje mensaje = null;

            try
            {
                if (cronograma != null)
                {
                    if (!string.IsNullOrWhiteSpace(cronograma.token_string))
                    {
                        if (AutenticacionToken.validateToken(cronograma.token_string) == 1)
                        {
                            Institucion institucion = _repositorio.Get<Institucion>(cronograma.institucionId);
                            Cronograma cronogramaDB = _repositorio.Get<Cronograma>(cronograma.id);
                            if (institucion != null && cronogramaDB != null)
                            {
                                if (AutenticacionToken.validateUserToken(cronograma.token_string, institucion.logueo.correo_electronico))
                                {
                                    _repositorio.Delete<Conferencista>(cronogramaDB.id);
                                    mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Cronograma fue eliminada exitosamente.");
                                }
                                else
                                {
                                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se encontro el evento solicitada o esta asociada a otra institucion.");
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Expiracion, "Error", "La sesion actual ha expirado. Inicie sesion");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                    }
                }
                else
                {
                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se puede eliminar un objeto nulo");
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }
            return mensaje;

        }
        public Mensaje createEventoParticipante([FromBody]UtilsJson.AEventoParticipante eventoParticipante)
        {
            Mensaje mensaje = null;

            try
            {
                if (eventoParticipante != null)
                {
                    if (!string.IsNullOrWhiteSpace(eventoParticipante.token_string))
                    {
                        if (AutenticacionToken.validateToken(eventoParticipante.token_string) == 1)
                        {
                            long id_inst = eventoParticipante.id_institucion;
                            long id_pub = eventoParticipante.id_evento;
                            Institucion institucion = _repositorio.Get<Institucion>(id_inst);
                            Publicacion publicacion = _repositorio.Get<Publicacion>(id_pub);
                            Expression<Func<EventoParticipante, bool>> query = (u => u.institucion.id == id_inst && u.evento.id==id_pub && u.estado == true);
                            List<EventoParticipante> result = _repositorio.Filter<EventoParticipante>(query);
                            if (institucion != null && publicacion !=null && result.Count ==0)
                            {
                                if (AutenticacionToken.validateUserToken(eventoParticipante.token_string, institucion.logueo.correo_electronico))
                                {
                                    //datos institucion y publicacion
                                    EventoParticipante newRegistro = new EventoParticipante
                                    {
                                        institucion=institucion,
                                        evento=publicacion,
                                        fecha_ult_modificacion=DateTime.Now,
                                        estado=eventoParticipante.estado
                                    };
                                    //Almaceno o actualizo la salaMesa
                                    _repositorio.SaveOrUpdate<EventoParticipante>(newRegistro);
                                    mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Institucion registrada al evento exitosamente.");
                                    
                                }
                                else
                                {
                                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes para modificar estos campos.");
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Expiracion, "Error", "La sesion actual ha expirado. Inicie sesion");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                    }
                }
                else
                {
                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se puede insertar un objeto nulo");
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }
            return mensaje;

        }
        /**
       Metodo que obtiene la direccion ip publica del host desde donde se modifica la contraseña
       */
        private object[] getExternalIp()
        {
            string externalIP = string.Empty;
            object[] infoIpAddress = null;
            try
            {
                externalIP = (new WebClient()).DownloadString("http://checkip.dyndns.org/");
                externalIP = (new Regex(@"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"))
                             .Matches(externalIP)[0].ToString();

                /*-----------------------------------------------------------------------------------------*/
                WebRequest rssReq = WebRequest.Create("http://freegeoip.net/xml/" + externalIP);
                WebProxy px = new WebProxy("http://freegeoip.net/xml/" + externalIP, true);
                rssReq.Proxy = px;
                rssReq.Timeout = 5000;
                WebResponse rep = rssReq.GetResponse();
                XmlTextReader xtr = new XmlTextReader(rep.GetResponseStream());
                DataSet ds = new DataSet();
                ds.ReadXml(xtr);
                infoIpAddress = ds.Tables[0].Rows[0].ItemArray;
            }
            catch (Exception ex)
            {
                SystemLog log = new SystemLog();
                log.ErrorLog(ex.Message);
            }


            return infoIpAddress;
        }
        public IQueryable<UtilsJson.AInstitucionMapa> getFilterInstitutionMapa([FromBody]UtilsJson.AParamsFilterMapa filter)
        {
            IQueryable<UtilsJson.AInstitucionMapa> listado = null;
            try
            {
                if (filter != null)
                {
                    string opcion = filter.opcion;
                    string sub_opcion = filter.sub_opcion;

                    SqlParameter[] param = new SqlParameter[2];
                    if (opcion == null)
                    {
                        param[0] = new SqlParameter("opcion", DBNull.Value);
                    }
                    else
                    {
                        param[0] = new SqlParameter("opcion", opcion);
                    }
                    if (sub_opcion == null)
                    {
                        param[1] = new SqlParameter("sub_opcion", DBNull.Value);
                    }
                    else
                    {
                        param[1] = new SqlParameter("sub_opcion", sub_opcion);
                    }

                    listado = _repositorio.executeStored<UtilsJson.AInstitucionMapa>("getListingFilterInstitucionMapa", param).Cast<UtilsJson.AInstitucionMapa>().AsQueryable<UtilsJson.AInstitucionMapa>();
                }
            }
            catch (Exception ex)
            {
                SystemLog log = new SystemLog();
                log.ErrorLog(ex.Message);
            }
            return listado;
        }
        public Mensaje deleteInstitution([FromBody]UtilsJson.AInstitucion institution)
        {
            Mensaje mensaje = null;
            object[] infoLogin = getExternalIp();

            try
            {
                if (institution != null)
                {
                    if (!string.IsNullOrWhiteSpace(institution.token_string))
                    {
                        if (AutenticacionToken.validateToken(institution.token_string) == 1 && AutenticacionToken.validateUserToken(institution.token_string, institution.logueo.correo_electronico))
                        {
                            //datos logueo
                            string correo_electronico_l = institution.logueo.correo_electronico;
                            string password1 = institution.logueo.contrasena1;
                            string password2 = institution.logueo.contrasena2;

                            if (!string.IsNullOrEmpty(correo_electronico_l) && !string.IsNullOrEmpty(password1) && !string.IsNullOrEmpty(password2))
                            {
                                if (password1.Equals(password2))
                                {
                                    //Cifrado de la contrasena
                                    string contrasena = CifradoDatos.cifrarPassword(password1);

                                    //Busco la institucion asociada al usuario y a la contrasena
                                    Expression<Func<Institucion, bool>> query = (u => u.logueo.correo_electronico == correo_electronico_l && u.logueo.contrasena == password1);
                                    List<Institucion> institucion = _repositorio.Filter<Institucion>(query);

                                    institucion[0].estado = false;
                                    institucion[0].fecha_ult_modificacion = DateTime.Now;
                                    _repositorio.SaveOrUpdate<Institucion>(institucion[0]);

                                    //Creo un token de autenticacion para deshabilitar el perfil
                                    string codigo = CifradoDatos.cifrarRSA(institucion[0].logueo.correo_electronico);

                                    //Envio email confirmacion para deshabilitar el perfil
                                    StringBuilder bodyMail = new StringBuilder();
                                    bodyMail.AppendLine("Para eliminar el perfil de la institucion " + institucion[0].nombre + " dirijase al siguiente enlace.");

                                    string informacionHost = UtilsHost.serverInfoCurrent();
                                    bodyMail.AppendLine("<a href=\"" + informacionHost + "/Institucion/ConfirmationDelete?tokenString=" + codigo + "\">Eliminar perfil.</a>" + "</br>");
                                    bodyMail.AppendLine("Informacion Adicional:" + "</br>");

                                    if (infoLogin != null)
                                    {
                                        bodyMail.AppendLine("Pais:" + infoLogin[2].ToString() + "</br>");
                                        bodyMail.AppendLine("Departamento:" + infoLogin[4].ToString() + "</br>");
                                        bodyMail.AppendLine("Ciudad:" + infoLogin[5].ToString() + "</br>");
                                        bodyMail.AppendLine("Ip Address:" + infoLogin[0].ToString() + "</br>");
                                    }

                                    bodyMail.AppendLine("Fecha:" + DateTime.Now.ToString() + "</br>");

                                    string subject = "Confirmación cancelación de perfil.";

                                    Mail mail = new Mail(institucion[0].logueo.correo_electronico, subject, bodyMail);
                                    mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificacion", "Envio de correo electronico para continuar con el proceso realizado.");

                                }
                                else
                                {
                                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error Autenticación", "passwords son diferentes.");
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error Autenticación", "passwords son obligatorios.");
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Expiracion, "Error", "La sesion actual ha expirado. Inicie sesion");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error Autenticación", "Token de autenticación requerido.");
                    }
                }

            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje();
                mensaje.titulo = "Error en tipo de dato";
                mensaje.tipo = "Error";
                mensaje.cuerpo = "Error en la lectura de parametros, verifique que los parametros cumplan con el tipo de dato";
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }
            return mensaje;
        }
        public async Task<Mensaje> editInstitution([FromBody]UtilsJson.AInstitucion institution)
        {
            Mensaje mensaje = new Mensaje();

            try
            {
                if (institution != null)
                {
                    if (!string.IsNullOrWhiteSpace(institution.token_string))
                    {
                        if (AutenticacionToken.validateToken(institution.token_string) == 1 && AutenticacionToken.validateUserToken(institution.token_string, institution.logueo.correo_electronico))
                        {
                            string n_correo_electronico_l = string.Empty;
                            string n_password1 = string.Empty;
                            string n_password2 = string.Empty;
                            string contrasena = string.Empty;
                            if (institution.logueo != null)
                            {
                                n_correo_electronico_l = institution.logueo.correo_electronico;
                                n_password1 = institution.logueo.contrasena1;
                                n_password2 = institution.logueo.contrasena2;
                                if (!string.IsNullOrWhiteSpace(n_password1) && !string.IsNullOrWhiteSpace(n_password2))
                                {
                                    contrasena = CifradoDatos.cifrarPassword(n_password1);
                                }
                            }

                            //datos representante
                            string nombre_r = institution.representante.nombre;
                            string apellido_r = institution.representante.nombre;
                            string tipo_identificacion = institution.representante.tipo_identificacion;
                            string identificacion = institution.representante.identificacion;
                            string urlCvlac = institution.representante.urlCvlac;
                            string correo_electronico_r = institution.representante.correo_electronico;

                            //datos institucion
                            string nombre = institution.nombre;
                            string descripcion = institution.descripcion;
                            string correo_electronico = institution.correo_electronico;
                            string direccion_postal = institution.direccion_postal;
                            string facebook = institution.facebook;
                            string fax = institution.fax;
                            string impacto = institution.impacto;
                            string linkedin = institution.linkedin;
                            string naturaleza = institution.naturaleza;
                            string pagina_web = institution.pagina_web;
                            int tamano = institution.tamano;
                            string telefono = institution.telefono;
                            string tipo_institucion = institution.tipo_institucion;
                            string twitter = institution.twitter;
                            string constitucion = institution.constitucion;
                            string fecha_creacion = institution.fecha_creacion;
                            string imagen_base64 = institution.imagen_base64;
                            long municipio_id = institution.municipio.id;

                            UtilsJson.ASector[] sectores = institution.sectores;
                            List<Sector> lstSectores = convertToSector(sectores);

                            UtilsJson.ATipoBiotecnologia[] tipo_biote = institution.Tipos_Biotecnologia;
                            List<TipoBiotecnologia> lstTipoBiotecnologia = convertToTipoBiotecnologia(tipo_biote);
                            //Busco la institucion y el representante asociada al usuario y a la contrasena
                            Expression<Func<Persona, bool>> query = (u => u.institucion.logueo.correo_electronico == institution.logueo.correo_electronico && u.institucion.estado == true);
                            List<Persona> institucion = _repositorio.Filter<Persona>(query);

                            //Si el correo_electronico y la contrasena son validas subo a session la institucion
                            if (institucion != null)
                            {
                                if (institucion.Count > 0)
                                {
                                    Municipio municipioDb = _repositorio.Get<Municipio>(municipio_id);

                                    if (!string.IsNullOrWhiteSpace(contrasena))
                                    {
                                        institucion[0].institucion.logueo.contrasena = contrasena;
                                        institucion[0].institucion.logueo.fecha_ult_modificacion = DateTime.Now;
                                    }


                                    institucion[0].institucion.descripcion = descripcion;
                                    institucion[0].institucion.impacto = impacto;
                                    institucion[0].institucion.correo_electronico = correo_electronico;
                                    institucion[0].institucion.linkedin = linkedin;
                                    institucion[0].institucion.municipio = municipioDb;
                                    institucion[0].institucion.naturaleza = naturaleza;
                                    institucion[0].institucion.constitucion = constitucion;
                                    institucion[0].institucion.nombre = nombre;
                                    institucion[0].institucion.pagina_web = pagina_web;
                                    institucion[0].institucion.tamano = tamano;
                                    institucion[0].institucion.telefono = telefono;
                                    institucion[0].institucion.fax = fax;
                                    institucion[0].institucion.direccion_postal = direccion_postal;
                                    institucion[0].institucion.facebook = facebook;
                                    institucion[0].institucion.tipo_institucion = tipo_institucion;
                                    institucion[0].institucion.twitter = twitter;
                                    institucion[0].institucion.fecha_creacion = (!string.IsNullOrWhiteSpace(fecha_creacion)) ? Convert.ToDateTime(fecha_creacion) : (DateTime?)null;
                                    institucion[0].institucion.fecha_ult_modificacion = DateTime.Now;

                                    if (institucion[0].institucion.banner == null)
                                    {
                                        if (!string.IsNullOrWhiteSpace(imagen_base64))
                                        {
                                            institucion[0].institucion.banner = new Imagen { imagenBase64 = imagen_base64, fecha_ult_modificacion = DateTime.Now };

                                            //Redimension de la imagen y creacion de icono
                                            string extension = imagen_base64.Split(',')[0];
                                            imagen_base64 = imagen_base64.Split(',')[1];

                                            byte[] bytes = Convert.FromBase64String(imagen_base64);

                                            if (bytes.Length > 0)
                                            {
                                                byte[] filebytesIcon = UtilsHost.Redimensionar(Image.FromStream(new MemoryStream(bytes)), 100, 100, 32);

                                                string encodedDataIcon = extension + "," + Convert.ToBase64String(filebytesIcon, Base64FormattingOptions.None);
                                                institucion[0].institucion.icono = new Imagen { imagenBase64 = encodedDataIcon, fecha_ult_modificacion = DateTime.Now };
                                            }
                                        }
                                    }
                                    else
                                    {
                                        if (!string.IsNullOrWhiteSpace(imagen_base64))
                                        {
                                            institucion[0].institucion.banner.imagenBase64 = imagen_base64;
                                            institucion[0].institucion.banner.fecha_ult_modificacion = DateTime.Now;

                                            //Redimension de la imagen y creacion de icono
                                            string extension = imagen_base64.Split(',')[0];
                                            imagen_base64 = imagen_base64.Split(',')[1];

                                            byte[] bytes = Convert.FromBase64String(imagen_base64);

                                            if (bytes.Length > 0)
                                            {
                                                byte[] filebytesIcon = UtilsHost.Redimensionar(Image.FromStream(new MemoryStream(bytes)), 100, 100, 32);

                                                string encodedDataIcon = extension + "," + Convert.ToBase64String(filebytesIcon, Base64FormattingOptions.None);
                                                institucion[0].institucion.icono.imagenBase64 = encodedDataIcon;
                                                institucion[0].institucion.icono.fecha_ult_modificacion = DateTime.Now;
                                            }
                                        }
                                    }

                                    //datos del representante
                                    institucion[0].nombre = nombre_r;
                                    institucion[0].apellido = apellido_r;
                                    institucion[0].tipo_identificacion = tipo_identificacion;
                                    institucion[0].identificacion = identificacion;
                                    institucion[0].urlCvlac = urlCvlac;
                                    institucion[0].correo_electronico = correo_electronico_r;
                                    institucion[0].fecha_ult_modificacion = DateTime.Now;

                                    //Envio email confirmacion edicion perfil
                                    StringBuilder bodyMail = new StringBuilder();
                                    bodyMail.AppendLine("Su Perfil ha sido editado exitosamente en biotecred.com .");
                                    bodyMail.AppendLine("Lo invitamos a que inicie sesión y continúe disfrutando de nuestra plataforma.");
                                    string subject = "Confirmación Edición de perfil.";
                                    Mail mail = new Mail(institucion[0].institucion.logueo.correo_electronico, subject, bodyMail);

                                    //Verifico si la institucion existe en el sistema
                                    List<Mensaje> lstVerificaExiste = existeInstitucion(institucion[0]);
                                    List<Mensaje> lstVerificaExisteEmail = mail.existeEmail();

                                    if (lstVerificaExiste.Count == 0 && lstVerificaExisteEmail.Count == 0)
                                    {
                                        institucion[0].fecha_ult_modificacion = DateTime.Now;
                                        _repositorio.SaveOrUpdate<Persona>(institucion[0]);
                                        long id_inst = institucion[0].id;
                                        //Elimino las relaciones de la entidad institucion con sectores y tipoBiotecnologia
                                        Expression<Func<InstitucionSector, bool>> query3 = (u => u.institucion.id == id_inst);
                                        _repositorio.DeleteFilter<InstitucionSector>(query3);
                                        Expression<Func<InstitucionTipoBiotec, bool>> query4 = (u => u.institucion.id == id_inst);
                                        _repositorio.DeleteFilter<InstitucionTipoBiotec>(query4);

                                        //almaceno las relaciones de la entidad institucion con sectores y tipoBiotecnologia
                                        foreach (Sector sector in lstSectores)
                                        {
                                            _repositorio.SaveOrUpdate(new InstitucionSector { institucion = institucion[0].institucion, sector = sector, fecha_ult_modificacion = DateTime.Now });
                                        }

                                        foreach (TipoBiotecnologia tipo in lstTipoBiotecnologia)
                                        {
                                            _repositorio.SaveOrUpdate(new InstitucionTipoBiotec { institucion = institucion[0].institucion, tipoBiotecnologia = tipo, fecha_ult_modificacion = DateTime.Now });
                                        }
                                        //Envio el correo de confirmacion
                                        if (mail.sendMail())
                                        {
                                            mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Institución editada exitosamente.");
                                        }
                                        else
                                        {
                                            mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "Se produjo un error mientras se enviaba el correo. Correo invalido");
                                        }
                                    }
                                    else
                                    {
                                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error validacion", "Existen campos que ya existen en el sistema.");
                                    }
                                }
                                else
                                {
                                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error Autenticación", "Institucion no encontrada.");
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error Autenticación", "Institución no encontrada.");
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Expiracion, "Error", "La sesion actual ha expirado. Inicie sesion");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error Autenticación", "Token de autenticación requerido.");
                    }
                }
                else
                {
                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error Autenticación", "institucón no encontrada.");
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }

            return mensaje;
        }
        public Mensaje createInstitution([FromBody]UtilsJson.AInstitucion institution)
        {
            Mensaje mensaje = null;

            try
            {
                if (institution != null)
                {
                    //datos logueo
                    string correo_electronico_l = institution.logueo.correo_electronico;
                    string password1 = institution.logueo.contrasena1;
                    string password2 = institution.logueo.contrasena2;

                    //datos representante
                    string nombre_r = institution.representante.nombre;
                    string apellido_r = institution.representante.apellido;
                    string tipo_identificacion = institution.representante.tipo_identificacion;
                    string identificacion = institution.representante.identificacion;
                    string urlCvlac = institution.representante.urlCvlac;
                    string correo_electronico_r = institution.representante.correo_electronico;

                    //datos institucion
                    string codigo = institution.codigo_registro;
                    string nombre = institution.nombre;
                    string descripcion = institution.descripcion;
                    string correo_electronico = institution.correo_electronico;
                    string direccion_postal = institution.direccion_postal;
                    string facebook = institution.facebook;
                    string fax = institution.fax;
                    string impacto = institution.impacto;
                    string linkedin = institution.linkedin;
                    string naturaleza = institution.naturaleza;
                    string pagina_web = institution.pagina_web;
                    int tamano = institution.tamano;
                    string telefono = institution.telefono;
                    string tipo_institucion = institution.tipo_institucion;
                    string twitter = institution.twitter;
                    string constitucion = institution.constitucion;
                    string fecha_creacion = institution.fecha_creacion;
                    string latitud = institution.latitud;
                    string longitud = institution.longitud;
                    string imagen_base64 = institution.imagen_base64;
                    string tipo_empresa = (!String.IsNullOrWhiteSpace(institution.tipo_empresa)) ? institution.tipo_empresa : EnumTipoEmpresa.Compañia;
                    UtilsJson.AMunicipio municipio = institution.municipio;

                    UtilsJson.ASector[] sectores = institution.sectores;
                    UtilsJson.ATipoBiotecnologia[] Tipos_Biotecnologia = institution.Tipos_Biotecnologia;

                    if (codigo != null)
                    {
                        //verificacion de existencia y estado del codigo
                        Expression<Func<SolicitudRegistro, bool>> query = u => u.codigo == codigo && u.estado == true;
                        SolicitudRegistro solicitud = _repositorio.Get<SolicitudRegistro>(query);
                        //Si la solicitud existe y no se ha usado subo a session el codigo
                        if (solicitud != null)
                        {
                            Municipio municipioDb = null;

                            List<Sector> lstSectores = new List<Sector>();

                            List<TipoBiotecnologia> lstTipoBiotecnologia = new List<TipoBiotecnologia>();

                            if (municipio.id > 0)
                            {
                                municipioDb = _repositorio.Get<Municipio>(municipio.id);
                            }

                            if (sectores != null)
                            {
                                lstSectores = convertToSector(sectores);
                            }

                            if (Tipos_Biotecnologia != null)
                            {
                                lstTipoBiotecnologia = convertToTipoBiotecnologia(Tipos_Biotecnologia);
                            }

                            Institucion institucion_api = new Institucion();
                            if (password1.Equals(password2))
                            {
                                institucion_api.logueo = new LogueoInstitucion
                                {
                                    correo_electronico = correo_electronico_l,
                                    contrasena = CifradoDatos.cifrarPassword(password2),
                                    fecha_ult_modificacion = DateTime.Now,
                                    rol = EnumTipoRol.usuario
                                };

                                institucion_api.descripcion = descripcion;
                                institucion_api.impacto = impacto;
                                institucion_api.correo_electronico = correo_electronico;
                                institucion_api.latitud = latitud;
                                institucion_api.linkedin = linkedin;
                                institucion_api.longitud = longitud;
                                institucion_api.municipio = municipioDb;
                                institucion_api.naturaleza = naturaleza;
                                institucion_api.constitucion = constitucion;
                                institucion_api.nombre = nombre;
                                institucion_api.pagina_web = pagina_web;
                                institucion_api.tamano = tamano;
                                institucion_api.telefono = telefono;
                                institucion_api.fax = fax;
                                institucion_api.direccion_postal = direccion_postal;
                                institucion_api.facebook = facebook;
                                institucion_api.tipo_institucion = tipo_institucion;
                                institucion_api.twitter = twitter;
                                institucion_api.fecha_creacion = (!string.IsNullOrWhiteSpace(fecha_creacion)) ? Convert.ToDateTime(fecha_creacion) : (DateTime?)null;

                                if (institucion_api.banner == null)
                                {
                                    if (!string.IsNullOrWhiteSpace(imagen_base64))
                                    {
                                        institucion_api.banner = new Imagen { imagenBase64 = imagen_base64, fecha_ult_modificacion = DateTime.Now };

                                        //Redimension de la imagen y creacion de icono
                                        string extension = imagen_base64.Split(',')[0];
                                        imagen_base64 = imagen_base64.Split(',')[1];

                                        byte[] bytes = Convert.FromBase64String(imagen_base64);

                                        if (bytes.Length > 0)
                                        {
                                            byte[] filebytesIcon =UtilsHost.Redimensionar(Image.FromStream(new MemoryStream(bytes)), 100, 100, 32);

                                            string encodedDataIcon = extension + "," + Convert.ToBase64String(filebytesIcon, Base64FormattingOptions.None);
                                            institucion_api.icono = new Imagen { imagenBase64 = encodedDataIcon, fecha_ult_modificacion = DateTime.Now };
                                        }
                                    }
                                }
                                else
                                {
                                    if (!string.IsNullOrWhiteSpace(imagen_base64))
                                    {
                                        institucion_api.banner.imagenBase64 = imagen_base64;
                                        institucion_api.banner.fecha_ult_modificacion = DateTime.Now;

                                        //Redimension de la imagen y creacion de icono
                                        string extension = imagen_base64.Split(',')[0];
                                        imagen_base64 = imagen_base64.Split(',')[1];

                                        byte[] bytes = Convert.FromBase64String(imagen_base64);

                                        if (bytes.Length > 0)
                                        {
                                            byte[] filebytesIcon = UtilsHost.Redimensionar(Image.FromStream(new MemoryStream(bytes)), 100, 100, 32);

                                            string encodedDataIcon = extension + "," + Convert.ToBase64String(filebytesIcon, Base64FormattingOptions.None);
                                            institucion_api.icono.imagenBase64 = encodedDataIcon;
                                            institucion_api.icono.fecha_ult_modificacion = DateTime.Now;
                                        }
                                    }
                                }

                                //creo un nuevo representante para la institucion
                                Persona persona = new Persona
                                {
                                    nombre = nombre_r,
                                    apellido = apellido_r,
                                    tipo_identificacion = tipo_identificacion,
                                    identificacion = identificacion,
                                    urlCvlac = urlCvlac,
                                    correo_electronico = correo_electronico_r,
                                    tipoPersona = EnumTipoPersona.director,
                                    fecha_ult_modificacion = DateTime.Now,
                                    estado=true
                                };

                                //Genero el correo para confirmacion para habilitar el perfil
                                StringBuilder bodyMail = new StringBuilder();
                                //Creo un token de autenticacion para habilitar el perfil
                                string codigoEnabled = CifradoDatos.cifrarRSA(institucion_api.logueo.correo_electronico);
                                bodyMail.AppendLine("Para habilitar el perfil de la institucion " + institucion_api.nombre + " dirijase al siguiente enlace.");
                                string informacionHost = UtilsHost.serverInfoCurrent();
                                bodyMail.AppendLine("<a href=\"" + informacionHost + "/Institucion/HabilitarCuenta?tokenEnabled=" + codigoEnabled + "\">Activar perfil.</a>" + "</br>");
                                string subject = "Confirmación y habilitacion de perfil.";
                                Mail mail = new Mail(institucion_api.logueo.correo_electronico, subject, bodyMail);

                                //Verifico si la institucion existe en el sistema
                                List<Mensaje> lstVerificaExiste = existeInstitucion(persona);
                                List<Mensaje> lstVerificaExisteEmail = mail.existeEmail();
                                if (lstVerificaExiste.Count == 0 && lstVerificaExisteEmail.Count == 0)
                                {
                                    //Envio el correo de confirmacion
                                    if (mail.sendMail())
                                    {
                                        persona.institucion = institucion_api;
                                        _repositorio.SaveOrUpdate<Persona>(persona);

                                        //Elimino las relaciones de la entidad institucion con sectores y tipoBiotecnologia
                                        Expression<Func<InstitucionSector, bool>> query3 = u => u.institucion.id == institucion_api.id;
                                        _repositorio.DeleteFilter<InstitucionSector>(query3);
                                        Expression<Func<InstitucionTipoBiotec, bool>> query4 = u => u.institucion.id == institucion_api.id;
                                        _repositorio.DeleteFilter<InstitucionTipoBiotec>(query4);

                                        //almaceno las relaciones de la entidad institucion con sectores y tipoBiotecnologia
                                        foreach (Sector sector in lstSectores)
                                        {
                                            _repositorio.SaveOrUpdate(new InstitucionSector { institucion = institucion_api, sector = sector, fecha_ult_modificacion = DateTime.Now });
                                        }

                                        foreach (TipoBiotecnologia tipo in lstTipoBiotecnologia)
                                        {
                                            _repositorio.SaveOrUpdate(new InstitucionTipoBiotec { institucion = institucion_api, tipoBiotecnologia = tipo, fecha_ult_modificacion = DateTime.Now });
                                        }

                                        // Desabilito el codigoPreRegistro en el poll de codigo para que no se pueda volver a usar
                                        solicitud.estado = false;
                                        solicitud.fecha_ult_modificacion = DateTime.Now;
                                        _repositorio.SaveOrUpdate<SolicitudRegistro>(solicitud);

                                        mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Verifique el correo de logueo para activar el perfil.");
                                    }
                                    else
                                    {
                                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "Se produjo un error mientras se enviaba el correo. Correo invalido");
                                    }
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje();
                                mensaje.titulo = "Error en validacion de password diferente";
                                mensaje.tipo = "Error";
                                mensaje.cuerpo = "Error en validacion de password diferente";
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje();
                            mensaje.titulo = "Error en validacion de codigo";
                            mensaje.tipo = "Error";
                            mensaje.cuerpo = "Error el codigo no existe o ya fue utilizado";
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje();
                        mensaje.titulo = "Error en validacion de codigo";
                        mensaje.tipo = "Error";
                        mensaje.cuerpo = "Error el codigo es requerido";
                    }
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }

            return mensaje;
        }
        public Mensaje createAutor([FromBody] UtilsJson.APersona autor)
        {
            Mensaje mensaje = null;

            try
            {
                /*
                 * //datos logueo
                 * string correo_logueo = autor.correo_logueo;
                 * string contrasena = autor.contrasena;
                 *
                 *
                 * //datos publicacion
                 * string tipo_identificacion = autor.tipo_identificacion;
                 * double identificacion = autor.identificacion;
                 * string nombre_persona = autor.nombre;
                 * string apellido_persona = autor.apellido;
                 * string correo_persona = autor.correo_electronico;
                 * string urlCvlac = autor.urlCvlac;
                 *
                 * if (!String.IsNullOrWhiteSpace(correo_logueo) && !String.IsNullOrWhiteSpace(contrasena))
                 * {
                 *  //Cifrado de la contrasena
                 *  contrasena = CifradoDatos.cifrarPassword(contrasena);
                 *
                 *  //Busco la institucion asociada al usuario y a la contrasena
                 *  Expression<Func<Representante, bool>> query = (u => u.institucion.logueo.correo_electronico == correo_logueo && u.institucion.logueo.contrasena == contrasena && u.institucion.estado == true);
                 *
                 *  List<Representante> institucion = _repositorio.Filter<Representante>(query);
                 *
                 *  if (institucion != null)
                 *  {
                 *      if (institucion.Count > 0)
                 *      {
                 *          Persona persona = new Persona(nombre_persona, apellido_persona, tipo_identificacion, identificacion, urlCvlac, correo_persona);
                 *
                 *          Autor autorB = new Autor(institucion[0].institucion, persona);
                 *
                 *          _repositorio.SaveOrUpdate<Autor>(autorB);
                 *
                 *          mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Autor registrada exitosamente.");
                 *
                 *      }
                 *      else
                 *      {
                 *          mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "Correo logueo y contraseña son requeridos");
                 *      }
                 *  }
                 *  else
                 *  {
                 *      mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "Correo logueo y contraseña son requeridos");
                 *  }
                 * }
                 * else
                 * {
                 *  mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "Correo logueo y contraseña son requeridos");
                 * }*/
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }
            return(mensaje);
        }
        public Mensaje editCronograma([FromBody]UtilsJson.ACronograma cronograma)
        {
            Mensaje mensaje = null;

            try
            {
                if (cronograma != null)
                {
                    if (!string.IsNullOrWhiteSpace(cronograma.token_string))
                    {
                        if (AutenticacionToken.validateToken(cronograma.token_string) == 1)
                        {
                            Institucion institucion = _repositorio.Get<Institucion>(cronograma.institucionId);
                            Cronograma cronogramaDB = _repositorio.Get<Cronograma>(cronograma.id);
                            if (institucion != null && cronogramaDB != null)
                            {
                                if (AutenticacionToken.validateUserToken(cronograma.token_string, institucion.logueo.correo_electronico))
                                {
                                    string nombre = cronograma.nombre;
                                    string tema = cronograma.tema;
                                    string descripcion = cronograma.descripcion;
                                    string color = cronograma.color;
                                    long id_sala = cronograma.salaMesaId;
                                    bool estado = cronograma.estado;
                                    long id_evento = cronograma.eventoId;
                                    if (!string.IsNullOrWhiteSpace(cronograma.hora_inicio) && !string.IsNullOrWhiteSpace(cronograma.hora_fin))
                                    {
                                        DateTime hora_inicio = Convert.ToDateTime(cronograma.hora_inicio);
                                        DateTime hora_fin = Convert.ToDateTime(cronograma.hora_fin);
                                        Publicacion publicacion = _repositorio.Get<Publicacion>(id_evento);
                                        SalaMesa salaMesa = _repositorio.Get<SalaMesa>(id_sala);
                                        if (DateTime.Compare(hora_inicio, hora_fin) < 0)
                                        {
                                            if (publicacion != null && salaMesa != null)
                                            {
                                                cronogramaDB.evento = publicacion;
                                                cronogramaDB.sala = salaMesa;
                                                cronogramaDB.nombre = nombre;
                                                cronogramaDB.tema = tema;
                                                cronogramaDB.descripcion = descripcion;
                                                cronogramaDB.hora_inicio = hora_inicio;
                                                cronogramaDB.hora_fin = hora_fin;
                                                cronogramaDB.estado = estado;
                                                cronogramaDB.fecha_ult_modificacion = DateTime.Now;
                                                _repositorio.SaveOrUpdate<Cronograma>(cronogramaDB);
                                                mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Cronograma editado exitosamente.");
                                            }
                                            else
                                            {
                                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "El evento o la sala solicitada no existe. verifique");
                                            }
                                        }
                                        else
                                        {
                                            mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "La hora de inicio es posterior a la hora de finalizacion. verifique");
                                        }
                                    }
                                    else
                                    {
                                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "La hora de inicio es posterior a la hora de finalizacion. verifique");
                                    }

                                }
                                else
                                {
                                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se encontro la sala solicitada o esta asociada a otra institucion.");
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Expiracion, "Error", "La sesion actual ha expirado. Inicie sesion");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                    }
                }
                else
                {
                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se puede insertar un objeto nulo");
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }
            return mensaje;

        }
        public Mensaje editAEventoParticipante([FromBody]UtilsJson.AEventoParticipante eventoParticipante)
        {
            Mensaje mensaje = null;

            try
            {
                if (eventoParticipante != null)
                {
                    if (!string.IsNullOrWhiteSpace(eventoParticipante.token_string))
                    {
                        if (AutenticacionToken.validateToken(eventoParticipante.token_string) == 1)
                        {
                            long id_institucion_c = eventoParticipante.id_institucion;
                            long id_publicacion = eventoParticipante.id_evento;
                            Institucion institucion = _repositorio.Get<Institucion>(id_institucion_c);
                            Publicacion publicacion = _repositorio.Get<Publicacion>(id_publicacion);
                            EventoParticipante registro = _repositorio.Get<EventoParticipante>(eventoParticipante.id_evento_institucion);
                            if (institucion != null && publicacion != null && registro != null)
                            {
                                if (AutenticacionToken.validateUserToken(eventoParticipante.token_string, institucion.logueo.correo_electronico))
                                {
                                        registro.institucion=institucion;
                                        registro.evento=publicacion;
                                        registro.fecha_ult_modificacion=DateTime.Now;
                                        registro.estado = eventoParticipante.estado;
                                        //Almaceno o actualizo el registro
                                        _repositorio.SaveOrUpdate<EventoParticipante>(registro);

                                        mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Participante a evento editado exitosamente.");                                    
                                }
                                else
                                {
                                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se encontro el registro solicitada o esta asociada a otra institucion.");
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Expiracion, "Error", "La sesion actual ha expirado. Inicie sesion");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                    }
                }
                else
                {
                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se puede insertar un objeto nulo");
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }
            return mensaje;

        }
        public IQueryable<UtilsJson.AInstitucion> getCadenaValorFilter([FromBody] UtilsJson.ACadenaValor cadena_valor)
        {
            IQueryable<UtilsJson.AInstitucion> listado=null;
            try
            {
                string tipo_ente=cadena_valor.tipo_institucion;
                string nombre_institucion=cadena_valor.nombre_institucion;
                long[] id_tipo_biotecnologia =cadena_valor.ids_tipo_biotecnologia;
                long id_sector = cadena_valor.id_sector;
                SqlParameter[] param = new SqlParameter[4];
                if (tipo_ente == null)
                {
                    param[0] = new SqlParameter("tipo", DBNull.Value);
                }
                else
                {
                    param[0] = new SqlParameter("tipo", tipo_ente);
                }

                if (nombre_institucion == null)
                {
                    param[1] = new SqlParameter("nombre", DBNull.Value);
                }
                else
                {
                    param[1] = new SqlParameter("nombre", nombre_institucion);
                }
                if (id_tipo_biotecnologia == null)
                {
                    param[2] = new SqlParameter("biotecnologia", DBNull.Value);
                }
                else
                {
                    string stringids = string.Empty;
                    for (int i = 0; i < id_tipo_biotecnologia.Length; i++)
                    {
                        stringids += id_tipo_biotecnologia[i] + "|";
                    }
                        param[2] = new SqlParameter("biotecnologia", stringids);
                }
                if (id_sector == 0)
                {
                    param[3] = new SqlParameter("sector", DBNull.Value);
                }
                else
                {
                    param[3] = new SqlParameter("sector", id_sector);
                }
                listado = _repositorio.executeStored<UtilsJson.AInstitucion>("getFilterCadenaValor", param).Cast<UtilsJson.AInstitucion>().AsQueryable<UtilsJson.AInstitucion>();

            }
            catch (Exception ex)
            {
                SystemLog log = new SystemLog();
                log.ErrorLog(ex.Message);
            }

            return listado;
        }
        public Mensaje createEventoParticipante([FromBody] UtilsJson.AEventoParticipante eventoParticipante)
        {
            Mensaje mensaje = null;

            try
            {
                if (eventoParticipante != null)
                {
                    if (!string.IsNullOrWhiteSpace(eventoParticipante.token_string))
                    {
                        if (AutenticacionToken.validateToken(eventoParticipante.token_string) == 1)
                        {
                            long        id_inst     = eventoParticipante.id_institucion;
                            long        id_pub      = eventoParticipante.id_evento;
                            Institucion institucion = _repositorio.Get <Institucion>(id_inst);
                            Publicacion publicacion = _repositorio.Get <Publicacion>(id_pub);
                            Expression <Func <EventoParticipante, bool> > query = (u => u.institucion.id == id_inst && u.evento.id == id_pub && u.estado == true);
                            List <EventoParticipante> result = _repositorio.Filter <EventoParticipante>(query);
                            if (institucion != null && publicacion != null && result.Count == 0)
                            {
                                if (AutenticacionToken.validateUserToken(eventoParticipante.token_string, institucion.logueo.correo_electronico))
                                {
                                    //datos institucion y publicacion
                                    EventoParticipante newRegistro = new EventoParticipante
                                    {
                                        institucion            = institucion,
                                        evento                 = publicacion,
                                        fecha_ult_modificacion = DateTime.Now,
                                        estado                 = eventoParticipante.estado
                                    };
                                    //Almaceno o actualizo la salaMesa
                                    _repositorio.SaveOrUpdate <EventoParticipante>(newRegistro);
                                    mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Institucion registrada al evento exitosamente.");
                                }
                                else
                                {
                                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes para modificar estos campos.");
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Expiracion, "Error", "La sesion actual ha expirado. Inicie sesion");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                    }
                }
                else
                {
                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se puede insertar un objeto nulo");
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }
            return(mensaje);
        }
        public Mensaje deleteConferencista([FromBody] UtilsJson.APersona conferencista)
        {
            Mensaje mensaje = null;

            try
            {
                if (conferencista != null)
                {
                    if (!string.IsNullOrWhiteSpace(conferencista.token))
                    {
                        if (AutenticacionToken.validateToken(conferencista.token) == 1)
                        {
                            long          id_institucion_c = (!string.IsNullOrWhiteSpace(conferencista.Ainstitucion)) ? long.Parse(conferencista.Ainstitucion) : 0;
                            Institucion   institucion      = _repositorio.Get <Institucion>(id_institucion_c);
                            Conferencista conferencistaDB  = _repositorio.Get <Conferencista>(conferencista.id);
                            if (institucion != null && conferencistaDB != null)
                            {
                                if (AutenticacionToken.validateUserToken(conferencista.token, institucion.logueo.correo_electronico))
                                {
                                    _repositorio.Delete <Conferencista>(conferencistaDB.id);
                                    mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Conferencista fue eliminada exitosamente.");
                                }
                                else
                                {
                                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                                }
                            }
                            else
                            {
                                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se encontro el conferencista solicitada o esta asociada a otra institucion.");
                            }
                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Expiracion, "Error", "La sesion actual ha expirado. Inicie sesion");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No cuenta con los privilegios suficientes");
                    }
                }
                else
                {
                    mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "No se puede eliminar un objeto nulo");
                }
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", sb.ToString());
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
                throw new Exception(sb.ToString());
            }
            return(mensaje);
        }
        public Mensaje deleteAutor([FromBody]UtilsJson.APersona autor)
        {
            Mensaje mensaje = null;

            try
            {/*
                //datos logueo
                string correo_logueo = autor.correo_logueo;
                string contrasena = autor.contrasena;

                //datos publicacion
                long id_autor = autor.id;

                if (!String.IsNullOrWhiteSpace(correo_logueo) && !String.IsNullOrWhiteSpace(contrasena))
                {
                    //Cifrado de la contrasena
                    contrasena = CifradoDatos.cifrarPassword(contrasena);

                    //Busco la institucion asociada al usuario y a la contrasena
                    Expression<Func<Autor, bool>> query = (u => u.institucion.logueo.correo_electronico == correo_logueo && u.institucion.logueo.contrasena == contrasena && u.institucion.estado == true && u.id == id_autor);

                    List<Autor> autorB = _repositorio.Filter<Autor>(query);

                    if (autorB != null)
                    {
                        if (autorB.Count > 0)
                        {
                            long id_persona = autorB[0].persona.id;
                            _repositorio.Delete<Autor>(autorB[0].id);
                            _repositorio.Delete<Persona>(id_persona);
                            mensaje = new Mensaje(EnumTipoMensaje.Notificacion, "Notificación", "Autor eliminado exitosamente.");
                        }
                        else
                        {
                            mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "El autor no hace parte de la institucion especificada o no existe");
                        }
                    }
                    else
                    {
                        mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "El autor no hace parte de la institucion especificada o no existe");
                    }
                }
                else
                {
                mensaje = new Mensaje(EnumTipoMensaje.Error, "Error", "Correo de logueo y contraseña son requeridos");
                }*/
            }
            catch (System.Data.Entity.Validation.DbEntityValidationException ex)
            {
                var sb = new System.Text.StringBuilder();
                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }
                //Guardo los errores que se producieron durante la insercion
                SystemLog log = new SystemLog();
                log.ErrorLog(sb.ToString());
            }
            return mensaje;
        }