public IHttpActionResult AddUsuario()
        {
            string  jsonString = getFormKeyValue("json");
            Usuario usuario    = new Usuario();
            ResultadoOperacionDto resultado = new ResultadoOperacionDto();

            resultado.Resultado = true;
            JsonConvert.PopulateObject(jsonString, usuario);

            var correoEnvioNotificacion = usuario.CorreoElectronico;

            var esLoginActiveDirectory = bool.Parse(ConfigurationManager.AppSettings.Get("LoginActiveDirectory"));

            if (esLoginActiveDirectory)
            {
                if (activeDirectoryConnection == null)
                {
                    var tipoLoginLDAP = ConfigurationManager.AppSettings.Get("TipoLoginLDAP");
                    activeDirectoryConnection = (IActiveDirectoryConnection)ServiceLocator.ObtenerFabricaSpring().GetObject(tipoLoginLDAP);
                }

                resultado = activeDirectoryConnection.ObtenerUsuario(usuario.CorreoElectronico);
                correoEnvioNotificacion = null;
                if (resultado.Resultado && resultado.InformacionExtra != null)
                {
                    correoEnvioNotificacion = ((UsuarioDto)resultado.InformacionExtra).CorreoElectronico;
                }
                else if (UtilAbax.esCorreoValido(usuario.CorreoElectronico))
                {
                    correoEnvioNotificacion = usuario.CorreoElectronico;
                }
            }

            //if (resultado.Resultado) {
            resultado = ValidateUsuario(usuario);
            if (string.IsNullOrEmpty(resultado.Mensaje))
            {
                var urlHref = getFormKeyValue("urlHref");
                if (String.IsNullOrWhiteSpace(urlHref) || urlHref.Contains("localhost") || urlHref.Contains("127.0.0.1"))
                {
                    urlHref = GetUrlContext();
                }
                resultado = UsuarioService.GuardarUsuario(usuario, IdUsuarioExec, urlHref, correoEnvioNotificacion);


                var usuarioEmpresa = new UsuarioEmpresa();
                usuarioEmpresa.IdUsuario = Convert.ToInt64(resultado.InformacionExtra.ToString());
                usuarioEmpresa.IdEmpresa = IdEmpresa;
                resultado = UsuarioService.GuardarUsuarioEmpresa(usuarioEmpresa, IdUsuarioExec);


                resultado.Mensaje = resultado.Resultado ? AbaxXbrl.UsuarioGuardado : AbaxXbrl.ErrorUsuarioGuardado;
            }



            return(Ok(resultado));
        }
        public IHttpActionResult UpdateUsuario()
        {
            var jsonString         = getFormKeyValue("json");
            var usuario            = new Usuario();
            var correoNotificacion = "";

            JsonConvert.PopulateObject(jsonString, usuario);
            ResultadoOperacionDto resultado = ValidateUsuario(usuario);

            if (string.IsNullOrEmpty(resultado.Mensaje))
            {
                var user = UsuarioService.ObtenerUsuarioPorId(usuario.IdUsuario).InformacionExtra as Usuario;
                user.Nombre            = usuario.Nombre;
                user.ApellidoPaterno   = usuario.ApellidoPaterno;
                user.ApellidoMaterno   = usuario.ApellidoMaterno;
                user.CorreoElectronico = usuario.CorreoElectronico;
                user.Puesto            = usuario.Puesto;
                correoNotificacion     = user.CorreoElectronico;

                var esLoginActiveDirectory = bool.Parse(ConfigurationManager.AppSettings.Get("LoginActiveDirectory"));

                if (esLoginActiveDirectory)
                {
                    if (activeDirectoryConnection == null)
                    {
                        var tipoLoginLDAP = ConfigurationManager.AppSettings.Get("TipoLoginLDAP");
                        activeDirectoryConnection = (IActiveDirectoryConnection)ServiceLocator.ObtenerFabricaSpring().GetObject(tipoLoginLDAP);
                    }

                    resultado          = activeDirectoryConnection.ObtenerUsuario(usuario.CorreoElectronico);
                    correoNotificacion = null;
                    if (resultado.Resultado && resultado.InformacionExtra != null)
                    {
                        correoNotificacion = ((UsuarioDto)resultado.InformacionExtra).CorreoElectronico;
                    }
                    else if (UtilAbax.esCorreoValido(usuario.CorreoElectronico))
                    {
                        correoNotificacion = usuario.CorreoElectronico;
                    }
                }


                resultado         = UsuarioService.GuardarUsuario(user, IdUsuarioExec, GetUrlContext(), correoNotificacion);
                resultado.Mensaje = resultado.Resultado ? AbaxXbrl.UsuarioGuardado : AbaxXbrl.ErrorUsuarioGuardado;
            }

            return(Ok(resultado));
        }
        public ResultadoOperacionDto GuardarUsuario(Usuario usuario, long idUsuarioExec, String url, String correoElectronico)
        {
            var esLoginActiveDirectory = bool.Parse(ConfigurationManager.AppSettings.Get("LoginActiveDirectory"));

            var resultado = new ResultadoOperacionDto();

            try
            {
                bool envio = false;
                var  pass  = String.Empty;
                if (usuario.IdUsuario == 0)
                {
                    usuario.Activo = true;

                    if (esLoginActiveDirectory)
                    {
                        usuario.VigenciaPassword = DateTime.Now.AddYears(50);
                    }
                    else
                    {
                        usuario.VigenciaPassword = DateTime.Now.AddDays(-1);
                    }

                    usuario.Bloqueado             = false;
                    usuario.HistoricoPassword     = String.Empty;
                    usuario.IntentosErroneosLogin = 0;
                    pass             = UtilAbax.GenerarCodigo();
                    usuario.Password = pass;
                    var salt =
                        usuario.Password.Substring(usuario.Password.Length -
                                                   PasswordHashGenerator.TAMANIO_B64_NUMERO_SALT);
                    usuario.Password = PasswordHashGenerator.CreatePasswordHash(usuario.Password, salt);
                    envio            = true;
                }

                var param = new List <object>()
                {
                    usuario.CorreoElectronico
                };
                var informacionAuditoria = new InformacionAuditoriaDto(idUsuarioExec,
                                                                       usuario.IdUsuario == 0 ? ConstantsAccionAuditable.Insertar : ConstantsAccionAuditable.Actualizar,
                                                                       ConstantsModulo.Usuarios,
                                                                       usuario.IdUsuario == 0 ? MensajesServicios.InsertarUsuario : MensajesServicios.Actualizarusuario,
                                                                       param);
                resultado = Repository.GuardarUsuario(usuario);
                resultado.InformacionAuditoria = informacionAuditoria;



                if (resultado.Resultado && envio && (!esLoginActiveDirectory || UtilAbax.esCorreoValido(usuario.CorreoElectronico)))
                {
                    Repository.EnvioCorreoRegistro(usuario, pass, url);
                }
                else if (resultado.Resultado && envio && esLoginActiveDirectory && correoElectronico != null)
                {
                    Repository.EnvioCorreoRegistroLDAP(usuario, url, correoElectronico);
                }
            }
            catch (Exception exception)
            {
                resultado.Resultado        = false;
                resultado.Mensaje          = exception.Message;
                resultado.InformacionExtra = exception;
            }
            return(resultado);
        }