/// <summary> /// Método para salvar o usuário /// </summary> /// <param name="entradaUsuario">Objeto com os dados do usuário a Logar</param> /// <returns>Contrato.RetornoUsuario</returns> internal static Contrato.RetornoUsuario SalvarUsuario(Contrato.EntradaUsuario entradaUsuario) { // Objeto que recebe o retorno do método Contrato.RetornoUsuario retUsuario = new Contrato.RetornoUsuario(); // Objeto que recebe o retorno da sessão Contrato.RetornoSessao retSessao = Negocio.Sessao.ValidarSessao(new Contrato.Sessao() { Login = entradaUsuario.UsuarioLogado, Chave = entradaUsuario.Chave }); // Verifica se o usuário está autenticado if (retSessao.Codigo == Contrato.Constantes.COD_RETORNO_SUCESSO) { // Verifica se as informações do usuário foram informadas string strValidacao = ValidarUsuarioPreenchido(entradaUsuario.Usuario); // Se existe algum erro if (strValidacao.Length > 0) { retUsuario.Codigo = Contrato.Constantes.COD_FILTRO_VAZIO; retUsuario.Mensagem = strValidacao; } else { // Loga no banco de dados Dados.BRASIL_DIDATICOS context = new Dados.BRASIL_DIDATICOS(); // Busca o usuário no banco List<Dados.USUARIO> lstUsuarios = (from u in context.T_USUARIO where (u.LOGIN_USUARIO == entradaUsuario.Usuario.Login && (entradaUsuario.EmpresaLogada.Id == Guid.Empty || u.ID_EMPRESA == entradaUsuario.EmpresaLogada.Id) || (entradaUsuario.Novo == null && entradaUsuario.Usuario.Id == u.ID_USUARIO)) select u).ToList(); // Verifica se foi encontrado algum registro if (lstUsuarios.Count > 0 && entradaUsuario.Novo != null && (bool)entradaUsuario.Novo) { // Preenche o objeto de retorno retUsuario.Codigo = Contrato.Constantes.COD_REGISTRO_DUPLICADO; retUsuario.Mensagem = string.Format("O usuário de Login '{0}' já existe!", lstUsuarios.First().LOGIN_USUARIO); } else { // Se existe o usuário if (lstUsuarios.Count > 0 ) { // Atualiza o fornecedor lstUsuarios.First().NOME_USUARIO = entradaUsuario.Usuario.Nome; lstUsuarios.First().LOGIN_USUARIO = entradaUsuario.Usuario.Login; lstUsuarios.First().SENHA_USUARIO = entradaUsuario.Usuario.Senha; lstUsuarios.First().BOL_ATIVO = (bool)entradaUsuario.Usuario.Ativo; lstUsuarios.First().DATA_ATUALIZACAO = DateTime.Now; lstUsuarios.First().USUARIO_LOGADO = entradaUsuario.UsuarioLogado; // Apaga todos os perfis que estão relacionados while (lstUsuarios.First().T_USUARIO_PERFIL.Count > 0) { context.T_USUARIO_PERFIL.DeleteObject(lstUsuarios.First().T_USUARIO_PERFIL.First()); } // Verifica se existe algum perfil associado ao usuário if (entradaUsuario.Usuario.Perfis != null) { // Para cada perfil associado foreach (Contrato.Perfil perfil in entradaUsuario.Usuario.Perfis) { // Associa o perfil ao usuário lstUsuarios.First().T_USUARIO_PERFIL.Add(new Dados.USUARIO_PERFIL() { ID_USUARIO_PERFIL = Guid.NewGuid(), ID_USUARIO = lstUsuarios.First().ID_USUARIO, ID_PERFIL = perfil.Id, LOGIN_USUARIO = entradaUsuario.UsuarioLogado, DATA_ATUALIZACAO = DateTime.Now }); } } } else { // Cria o usuário Dados.USUARIO tUsuario = new Dados.USUARIO(); tUsuario.ID_USUARIO = Guid.NewGuid(); tUsuario.NOME_USUARIO = entradaUsuario.Usuario.Nome; tUsuario.LOGIN_USUARIO = entradaUsuario.Usuario.Login; tUsuario.SENHA_USUARIO = entradaUsuario.Usuario.Senha; tUsuario.ID_EMPRESA = entradaUsuario.EmpresaLogada.Id; tUsuario.BOL_ATIVO = (bool)entradaUsuario.Usuario.Ativo; tUsuario.DATA_ATUALIZACAO = DateTime.Now; tUsuario.USUARIO_LOGADO = entradaUsuario.UsuarioLogado; if (entradaUsuario.Usuario.Perfis != null) { foreach (Contrato.Perfil perfil in entradaUsuario.Usuario.Perfis) { tUsuario.T_USUARIO_PERFIL.Add(new Dados.USUARIO_PERFIL() { ID_USUARIO_PERFIL = Guid.NewGuid(), ID_USUARIO = entradaUsuario.Usuario.Id, ID_PERFIL = perfil.Id, LOGIN_USUARIO = entradaUsuario.UsuarioLogado, DATA_ATUALIZACAO = DateTime.Now }); } } context.AddToT_USUARIO(tUsuario); } // Salva as alterações context.SaveChanges(); // Preenche o objeto de retorno retUsuario.Codigo = Contrato.Constantes.COD_RETORNO_SUCESSO; } } } else { // retorna quando o usuário não está autenticado retUsuario.Codigo = retSessao.Codigo; retUsuario.Mensagem = retSessao.Mensagem; } // retorna dos dados return retUsuario; }