public async Task <UserStateRequered> Login(string UserName, string Password)
        {
            var md5        = HashControl.GetMD5Hash(Password);
            var userModels = await this.biblioteContext.UserModels.Include(x => x.GruposModels)
                             .ThenInclude(x => x.PermissoesModels)
                             .AsNoTracking()
                             .ToListAsync();

            if (userModels.Count == 0)
            {
                return(new UserStateRequered
                {
                    UserState = UserState.Invalid_First_Values,
                    Models = null,
                });
            }
            var result = userModels.FirstOrDefault(x => (x.UserName.ToUpper().Equals(UserName.ToUpper()) || x.UserName.ToUpper().Equals(UserName.ToUpper())) &&
                                                   x.Password.Equals(md5));

            if (result == null)
            {
                return(new UserStateRequered
                {
                    UserState = UserState.Invalid,
                    Models = null,
                });
            }
            else if (!result.IsValido)
            {
                return(new UserStateRequered
                {
                    UserState = UserState.Standbay,
                    Models = result,
                });
            }
            else if (result.GruposModels == null)
            {
                return(new UserStateRequered
                {
                    UserState = UserState.Invalid_Grpos,
                    Models = result,
                });
            }
            else if (result.GruposModels.PermissoesModels == null)
            {
                return(new UserStateRequered
                {
                    UserState = UserState.Invalid_Permissoes,
                    Models = result,
                });
            }
            else
            {
                return(new UserStateRequered
                {
                    UserState = UserState.IsValid,
                    Models = result,
                });
            }
        }
        public async Task <bool> RecoveryUpdate(string user, string senha1, string senha2)
        {
            var testPassword = senha1.Split(',').FirstOrDefault();
            var PinEncrip    = "";

            if (testPassword.Equals("MD5"))
            {
                PinEncrip = senha1.Split(',').LastOrDefault();
            }
            else
            {
                PinEncrip = HashControl.GetMD5Hash(senha1);
            }
            var PinEncrip2 = HashControl.GetMD5Hash(senha2);

            var userSeach = await this.biblioteContext.UserModels.Include(x => x.GruposModels)
                            .ThenInclude(x => x.PermissoesModels)
                            .Where(x => (x.UserName.ToLower() == user.ToLower() || x.Email == user) &&
                                   (x.Password == PinEncrip || x.Password == PinEncrip))
                            .FirstOrDefaultAsync();

            if (userSeach != null)
            {
                userSeach.Password = PinEncrip2;
                this.biblioteContext.LogsModels.Add(new LogsModels
                {
                    userModelsID = userSeach.ID,
                    DateTime     = DateTime.Now,
                    Referencia   = "Alteração da passwordo do utilizador (Acesso inicial)",
                });
                biblioteContext.UserModels.Update(userSeach);
                return(await Salvar());
            }
            else
            {
                return(false);
            }
        }
        private async void GuardarDados()
        {
            if (Validacao())
            {
                var codigo = string.IsNullOrWhiteSpace(IDTextEdit.Text) || IDTextEdit.Text.Equals("0");
                var models = new UserModels
                {
                    ID             = codigo ? 0 : (int)IDTextEdit.EditValue,
                    GruposModelsID = (int)GruposModelsLookUpEdit.EditValue,
                    Password       = HashControl.GetMD5Hash((string)PasswordTextEdit.EditValue),
                    Email          = (string)EmailTextEdit.EditValue,
                    IsValido       = (bool)IsValidoToggleSwitch.EditValue,
                    Data           = DataDateEdit.DateTime,
                    UserName       = UserNameTextEdit.Text,
                };
                var result = await userRepository.Guardar(models);

                if (result)
                {
                    XtraMessageBox.Show("Inserido com Exito", "Inserção", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }