Ejemplo n.º 1
0
        /// <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;
        }