public List <UsuarioAdministradorViewModel> GetAllAdministradores()
        {
            // Busca o tipoUsuario Administrador
            var tipoAdm = _ctx.TipoUsuarios.FirstOrDefault(x => x.Descricao == TipoUsuarioDefaultValuesAccess.GetValue(TipoUsuarioDefaultValues.Administrador));

            // Busca todos os usuários com o tipo usuário "Administrador"
            var usuarios = _ctx.Usuarios.Where(x => x.TipoUsuarioId == tipoAdm.Id).ToList();

            List <UsuarioAdministradorViewModel> usuariosAdms = new List <UsuarioAdministradorViewModel>();

            // Cria um ViewModel específico que só irá retornar id, nome, nif e email de Admin
            foreach (var u in usuarios)
            {
                // Busca o usuarioAdministrador do usuarioId
                var usuarioAdm = _ctx.UsuarioAdministradores.FirstOrDefault(x => x.UsuarioId == u.Id);

                // Monta o ViewModel
                var usuarioResult = new UsuarioAdministradorViewModel(u.Id, u.Nome, usuarioAdm.NIF, u.Email);

                // Adiciona na lista
                usuariosAdms.Add(usuarioResult);
            }

            // Retorna o Adm
            return(usuariosAdms);
        }
Ejemplo n.º 2
0
        public async Task ExecuteAsync()
        {
            var usuarioDb = _usuarioRepository.GetUsuarioByEmail("*****@*****.**");

            if (usuarioDb == null)
            {
                var tipoUsuarioDb   = _tipoUsuarioRepository.GetByDescricao(TipoUsuarioDefaultValuesAccess.GetValue(TipoUsuarioDefaultValues.Administrador));
                var statusUsuarioDb = _statusUsuarioRepository.GetByDescricao(StatusUsuarioDefaultValuesAcess.GetValue(StatusUsuarioDefaultValues.ContaAtiva));
                // Criação do usuário
                Usuario usuario = null;
                try
                {
                    string nome  = "Administrador Padrão";
                    string email = "*****@*****.**";
                    string senha = "admin12345";

                    // Gera o código HASH da senha
                    var senhaHash = new PasswordHasher <Usuario>().HashPassword(usuario, senha);

                    usuario = new Usuario(nome, email, senhaHash, tipoUsuarioDb.Id);
                }
                catch (Exception)
                {
                }

                // Cria o usuário no banco de dados
                var usuarioAdmDb = _usuarioRepository.Create(usuario);

                // Cria o 1° histórico do usuário
                HistoricoStatusUsuario historicoUsuario = null;
                try
                {
                    historicoUsuario = new HistoricoStatusUsuario(statusUsuarioDb.Id, usuarioAdmDb.Id);
                }
                catch (Exception)
                {
                }

                _historicoStatusUsuarioRepository.Create(historicoUsuario);

                // Criação do UsuarioAdministrador
                UsuarioAdministrador usuarioAdm = null;
                try
                {
                    usuarioAdm = new UsuarioAdministrador("123456", usuarioAdmDb.Id);
                }
                catch (Exception)
                {
                }

                // Cria o UsuarioAdministrador no banco de dados
                _usuarioAdministradorRepository.Create(usuarioAdm);

                // Salva as Alterações na DB
                await _usuarioAdministradorRepository.UnitOfWork.SaveDbChanges();
            }
        }
Ejemplo n.º 3
0
        public async Task ExecuteAsync()
        {
            for (int i = 0; i < 3; i++)
            {
                var defaultValue       = (TipoUsuarioDefaultValues)i;
                var stringDefaultValue = TipoUsuarioDefaultValuesAccess.GetValue(defaultValue);

                var tipoUsuarioDb = _tipoUsuarioRepository.GetByDescricao(stringDefaultValue);

                if (tipoUsuarioDb == null)
                {
                    tipoUsuarioDb = new TipoUsuario(stringDefaultValue);

                    _tipoUsuarioRepository.Create(tipoUsuarioDb);
                    await _tipoUsuarioRepository.UnitOfWork.SaveDbChanges();
                }
            }
        }
        public async Task <IActionResult> CriarUsuarioAdministrador(CriarUsuarioAdministradorInput input)
        {
            // Verifica se existe um usuário com mesmo email cadastrado no sistema
            var usuarioDb = _usuarioRepository.GetUsuarioByEmail(input.Email);

            if (usuarioDb != null)
            {
                return(StatusCode(400, "Já existe um usuário cadastrado com este email."));
            }

            // Verifica se existe um aluno cadastrado com mesmo email
            var alunoDb = _alunoRepository.BuscarPorEmail(input.Email);

            if (alunoDb != null)
            {
                return(StatusCode(400, $"Já existe um aluno cadastrado com email [{input.Email}] no sistema."));
            }

            var tipoAdmDb       = _tipoUsuarioRepository.GetByDescricao(TipoUsuarioDefaultValuesAccess.GetValue(TipoUsuarioDefaultValues.Administrador));
            var statusUsuarioDb = _statusUsuarioRepository.GetByDescricao(StatusUsuarioDefaultValuesAcess.GetValue(StatusUsuarioDefaultValues.ContaAtiva));

            // Cria o usuário
            Usuario usuario = null;

            try
            {
                // Gera Hash da senha
                var senhaHash = new PasswordHasher <Usuario>().HashPassword(usuario, input.Senha);

                usuario = new Usuario(input.Nome, input.Email, senhaHash, tipoAdmDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o usuário."));
            }

            usuarioDb = _usuarioRepository.Create(usuario);

            // Cria o 1° histórico do usuário
            HistoricoStatusUsuario historicoUsuario = null;

            try
            {
                historicoUsuario = new HistoricoStatusUsuario(statusUsuarioDb.Id, usuarioDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o histórico do usuário."));
            }

            _historicoStatusUsuarioRepository.Create(historicoUsuario);

            // Cria o usuário administrador
            UsuarioAdministrador usuarioAdm = null;

            try
            {
                usuarioAdm = new UsuarioAdministrador(input.Nif, usuarioDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao vincular o usuário à um perfil de Administrador."));
            }

            _usuarioAdministradorRepository.Create(usuarioAdm);

            await _usuarioAdministradorRepository.UnitOfWork.SaveDbChanges();

            return(StatusCode(200, $"Usuário [{usuarioDb.Email}] com perfil de {tipoAdmDb.Descricao} criado com sucesso!"));
        }
        public async Task <IActionResult> CriarUsuarioCandidato(string token, CriarUsuarioCandidatoAlunoInput input)
        {
            // Busca validacao de usuario por token
            var validacaoUsuario = _validacaoUsuarioCandidatoRepository.GetValidacaoUsuarioCandidatoByToken(token);

            // Caso não existir
            if (validacaoUsuario == null)
            {
                return(StatusCode(404, "Este Token expirou ou não existe no banco de dados."));
            }

            // Caso não seja mais válido
            if (DateTime.Now.ToUniversalTime() > validacaoUsuario.DataValida.ToUniversalTime())
            {
                // Altera para inativo caso não seja mais válido
                validacaoUsuario.AlterarParaInativo();
                _validacaoUsuarioCandidatoRepository.UpdateValidacaoUsuarioCandidato(validacaoUsuario);

                // Salva alterações no BD
                await _validacaoUsuarioCandidatoRepository.UnitOfWork.SaveDbChanges();

                return(StatusCode(400, "Este Token para validação de usuário expirou."));
            }

            // Busca aluno pelo Id
            var alunoDb = _alunoRepository.GetById(validacaoUsuario.AlunoId);

            // Caso aluno não exista mais
            if (alunoDb == null)
            {
                return(StatusCode(400, "O aluno não existe mais no banco de dados, não será permitido criar um usuário."));
            }

            var tipoCandidatoDb = _tipoUsuarioRepository.GetByDescricao(TipoUsuarioDefaultValuesAccess.GetValue(TipoUsuarioDefaultValues.Candidato));
            var statusUsuarioDb = _statusUsuarioRepository.GetByDescricao(StatusUsuarioDefaultValuesAcess.GetValue(StatusUsuarioDefaultValues.ContaAtiva));

            // Cria o usuário
            Usuario usuario = null;

            try
            {
                // Gera Hash da senha
                var senhaHash = new PasswordHasher <Usuario>().HashPassword(usuario, input.Senha);

                usuario = new Usuario(alunoDb.NomeCompleto, alunoDb.Email, senhaHash, tipoCandidatoDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o usuário."));
            }

            var usuarioDb = _usuarioRepository.Create(usuario);

            // Cria o 1° histórico do usuário
            HistoricoStatusUsuario historicoUsuario = null;

            try
            {
                historicoUsuario = new HistoricoStatusUsuario(statusUsuarioDb.Id, usuarioDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o histórico do usuário."));
            }

            _historicoStatusUsuarioRepository.Create(historicoUsuario);

            // Cria o usuarioCandidato
            UsuarioCandidatoAluno usuarioCandidato = null;

            try
            {
                usuarioCandidato = new UsuarioCandidatoAluno(alunoDb.Id, usuarioDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao vincular o perfil de candidato ao usuário."));
            }

            var usuarioCandidatoDb = _usuarioCandidatoAlunoRepository.Create(usuarioCandidato);

            // Cria o perfil do usuarioCandidato (linkExterno e SobreOCandidato vazios)
            PerfilUsuarioCandidatoAluno perfilCandidato = null;

            try
            {
                perfilCandidato = new PerfilUsuarioCandidatoAluno("", "", usuarioCandidatoDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o perfil padrão do candidato."));
            }

            _usuarioCandidatoAlunoRepository.CreatePerfilUsuarioCandidatoAluno(perfilCandidato);

            // Altera para validação Inativa (para não registrar dois usuários candidatos iguais)
            validacaoUsuario.AlterarParaInativo();
            _validacaoUsuarioCandidatoRepository.UpdateValidacaoUsuarioCandidato(validacaoUsuario);

            await _usuarioCandidatoAlunoRepository.UnitOfWork.SaveDbChanges();

            return(StatusCode(200, $"Usuário [{alunoDb.Email}] com perfil de {tipoCandidatoDb.Descricao} criado com sucesso!"));
        }
        public async Task <IActionResult> CriarUsuarioEmpresa(CriarUsuarioEmpresaInput input)
        {
            if (!ValidatorUtil.CnpjIsValid(input.Cnpj))
            {
                return(StatusCode(400, "CNPJ Inválido."));
            }

            var usuarioDb = _usuarioRepository.GetUsuarioByEmail(input.Email);

            // Verifica se já existe um usuário com mesmo email cadastrado no sistema
            if (usuarioDb != null)
            {
                return(StatusCode(400, $"Já existe um usuário com email [{input.Email}] no sistema."));
            }

            // Verifica se existe um aluno cadastrado com mesmo email
            var alunoDb = _alunoRepository.BuscarPorEmail(input.Email);

            if (alunoDb != null)
            {
                return(StatusCode(400, $"Já existe um aluno cadastrado com email [{input.Email}] no sistema."));
            }

            var empresaDb = _empresaRepository.GetByCNPJ(input.Cnpj);

            if (empresaDb == null)
            {
                #region Verifica se já existe uma empresa com o mesmo CNPJ cadastrada no sistema
                var responseReceita = await apiRequestService.ReceitaWS(input.Cnpj);

                if (responseReceita == null)
                {
                    return(StatusCode(400, "Ocorreu um erro na busca do CNPJ da Empresa, tente novamente mais tarde."));
                }

                if (responseReceita.Status.Equals("ERROR") || responseReceita.Status.Equals("CNPJ inválido") || !responseReceita.Status.Equals("OK"))
                {
                    return(StatusCode(400, $"{responseReceita.Message}"));
                }

                #region Cadastra/Busca endereços e vincula-os

                TipoEmpresa tipoEmpresa = null;

                if (responseReceita.TipoEmpresa.ToUpper() == TipoEmpresaDefaultValuesAccess.GetValue(TipoEmpresaDefaultValues.FILIAL))
                {
                    tipoEmpresa = _tipoEmpresaRepository.GetByDescricao(TipoEmpresaDefaultValuesAccess.GetValue(TipoEmpresaDefaultValues.FILIAL));
                }

                if (responseReceita.TipoEmpresa.ToUpper() == TipoEmpresaDefaultValuesAccess.GetValue(TipoEmpresaDefaultValues.MATRIZ))
                {
                    tipoEmpresa = _tipoEmpresaRepository.GetByDescricao(TipoEmpresaDefaultValuesAccess.GetValue(TipoEmpresaDefaultValues.MATRIZ));
                }

                if (tipoEmpresa == null)
                {
                    return(StatusCode(400, "Houve um erro ao adquirir o tipo da empresa."));
                }

                var responseViaCep = await apiRequestService.ViaCEP(FormatStringUtil.CaracterClear(responseReceita.CEP));

                if (responseViaCep == null)
                {
                    return(StatusCode(400, "Ocorreu um erro na busca do endereço da Empresa, tente novamente mais tarde."));
                }

                var UfSiglaDb = _enderecoRepository.GetUfSiglaBySigla(responseViaCep.UfSigla);

                if (UfSiglaDb == null)
                {
                    return(StatusCode(400, "Não existe UF's necessárias cadastradas no banco de dados, não é possível prosseguir com o cadastro da empresa."));
                }

                var municipioDb = _enderecoRepository.GetMunicipioByDescricao(responseViaCep.Localidade);

                // Cria um novo município caso não encontre já criado no banco de dados.
                if (municipioDb == null)
                {
                    try
                    {
                        municipioDb = new Municipio(responseViaCep.Localidade, UfSiglaDb.Id);

                        municipioDb = _enderecoRepository.CreateMunicipio(municipioDb);
                    }
                    catch (Exception)
                    {
                        return(StatusCode(500, "Houve um erro interno ao criar um novo município no banco de dados para a Empresa."));
                    }
                }

                // Verifica quais campos que não estão vazios para criar o endereço
                string logradouroPreenchido = string.IsNullOrEmpty(responseViaCep.Logradouro) == false ? responseViaCep.Logradouro : responseReceita.Logradouro;
                string bairroPreenchido     = string.IsNullOrEmpty(responseViaCep.Bairro) == false ? responseViaCep.Bairro : responseReceita.Bairro;

                // Cria novo endereço para a Empresa
                Endereco endereco = null;
                try
                {
                    endereco = new Endereco(responseViaCep.Cep, bairroPreenchido, logradouroPreenchido, responseReceita.Numero, municipioDb.Id);
                }
                catch (Exception)
                {
                    return(StatusCode(500, "Houve um erro interno criar um endereço para a Empresa."));
                }

                var enderecoDb = _enderecoRepository.Create(endereco);

                #endregion

                // Verifica se fantasia esta nula e substitui por nome, caso contrário, mantem fantasia
                string nomeEmpresa = string.IsNullOrEmpty(responseReceita.Fantasia) ? responseReceita.Nome : responseReceita.Fantasia;

                // Cria Empresa
                empresaDb = null;
                try
                {
                    empresaDb = new Empresa(input.Cnpj, nomeEmpresa, enderecoDb.Id, tipoEmpresa.Id);
                }
                catch (Exception)
                {
                    return(StatusCode(500, "Houve um erro interno ao criar uma Empresa."));
                }

                // Cria Empresa no BD
                empresaDb = _empresaRepository.Create(empresaDb);

                #region Registra todos os TiposCnaes (Atividade Principal e Atividade Secundária)

                // Default Values Atividade principal e secundária
                var AtividadePrincipalDb  = _tipoAtividadeCnaeRepository.GetByDescricao(TipoAtividadeCnaeDefaultValuesAccess.GetValue(TipoAtividadeCnaeDefaultValues.AtividadePrincipal));
                var AtividadeSecundariaDb = _tipoAtividadeCnaeRepository.GetByDescricao(TipoAtividadeCnaeDefaultValuesAccess.GetValue(TipoAtividadeCnaeDefaultValues.AtividadeSecundaria));

                // Atividade Principal
                TipoCnae tipoCnaeDb = null;

                if (responseReceita.AtividadePrincipal.Any())
                {
                    foreach (var ap in responseReceita.AtividadePrincipal)
                    {
                        tipoCnaeDb = _empresaRepository.GetTipoCnaeByCodigo(ap.Code);

                        if (tipoCnaeDb == null)
                        {
                            try
                            {
                                tipoCnaeDb = new TipoCnae(ap.Text, ap.Code);

                                tipoCnaeDb = _empresaRepository.CreateTipoCnae(tipoCnaeDb);
                            }
                            catch (Exception)
                            {
                                return(StatusCode(500, "Houve um erro interno ao criar a Atividade Principal da Empresa, tente novamente mais tarde."));
                            }
                        }

                        AtividadeCnae atividadeCnae = null;
                        try
                        {
                            atividadeCnae = new AtividadeCnae(tipoCnaeDb.Id, AtividadePrincipalDb.Id, empresaDb.Id);

                            _empresaRepository.CreateAtividadeCnae(atividadeCnae);
                        }
                        catch (Exception)
                        {
                            return(StatusCode(500, "Houve um erro interno ao vincular o CNAE à Empresa, tente novamente mais tarde."));
                        }
                    }
                }

                // Atividades Secundárias
                if (responseReceita.AtividadeSecundaria.Any())
                {
                    foreach (var ats in responseReceita.AtividadeSecundaria)
                    {
                        tipoCnaeDb = _empresaRepository.GetTipoCnaeByCodigo(ats.Code);

                        if (tipoCnaeDb == null)
                        {
                            try
                            {
                                tipoCnaeDb = new TipoCnae(ats.Text, ats.Code);

                                tipoCnaeDb = _empresaRepository.CreateTipoCnae(tipoCnaeDb);
                            }
                            catch (Exception)
                            {
                                return(StatusCode(500, "Houve um erro interno ao criar alguma Atividade Secundária da Empresa, tente novamente mais tarde."));
                            }
                        }

                        AtividadeCnae atividadeCnae = null;
                        try
                        {
                            atividadeCnae = new AtividadeCnae(tipoCnaeDb.Id, AtividadeSecundariaDb.Id, empresaDb.Id);

                            _empresaRepository.CreateAtividadeCnae(atividadeCnae);
                        }
                        catch (Exception)
                        {
                            return(StatusCode(500, "Houve um erro interno ao vincular o CNAE à Empresa, tente novamente mais tarde."));
                        }
                    }
                }

                #endregion

                // Registra todos da lista de QSA
                if (responseReceita.QSA.Any())
                {
                    foreach (var qsa in responseReceita.QSA)
                    {
                        QSA qsaDb = null;
                        try
                        {
                            qsaDb = new QSA(qsa.Nome, qsa.Qual, empresaDb.Id);

                            _empresaRepository.CreateQSA(qsaDb);
                        }
                        catch (Exception)
                        {
                            return(StatusCode(500, "Houve um erro interno ao criar o QSA da Empresa."));
                        }
                    }
                }
                #endregion
            }
            else
            {
                #region Caso empresa já exista
                var usuarioEmpresaDb = _usuarioEmpresaRepository.GetByEmpresaId(empresaDb.Id);

                // Verifica se já existe um usuário vinculado à empresa
                if (usuarioEmpresaDb != null)
                {
                    return(StatusCode(400, $"A Empresa de CNPJ [{input.Cnpj}] já está vinculada à um usuário."));
                }
                #endregion
            }

            var tipoEmpresaDb   = _tipoUsuarioRepository.GetByDescricao(TipoUsuarioDefaultValuesAccess.GetValue(TipoUsuarioDefaultValues.Empresa));
            var statusUsuarioDb = _statusUsuarioRepository.GetByDescricao(StatusUsuarioDefaultValuesAcess.GetValue(StatusUsuarioDefaultValues.ContaAtiva));

            // Criação do usuário
            usuarioDb = null;
            try
            {
                // Gera Hash da senha
                var senhaHash = new PasswordHasher <Usuario>().HashPassword(usuarioDb, input.Senha);

                usuarioDb = new Usuario(input.Nome, input.Email, senhaHash, tipoEmpresaDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o Usuário."));
            }

            usuarioDb = _usuarioRepository.Create(usuarioDb);

            // Cria o 1° histórico do usuário
            HistoricoStatusUsuario historicoUsuario = null;
            try
            {
                historicoUsuario = new HistoricoStatusUsuario(statusUsuarioDb.Id, usuarioDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o histórico do usuário."));
            }

            _historicoStatusUsuarioRepository.Create(historicoUsuario);

            // Criação do UsuarioEmpresa, vincula o usuário à empresa criada
            UsuarioEmpresa usuarioEmpresa = null;
            try
            {
                usuarioEmpresa = new UsuarioEmpresa(empresaDb.Id, usuarioDb.Id);
            }
            catch (Exception)
            {
                return(StatusCode(500, "Houve um erro interno ao criar o UsuarioEmpresa (vincular o usuário à empresa)."));
            }

            _usuarioEmpresaRepository.Create(usuarioEmpresa);

            await _usuarioRepository.UnitOfWork.SaveDbChanges();

            return(StatusCode(200, $"Usuário {usuarioDb.Email} com perfil de Empresa com CNPJ {empresaDb.CNPJ} criado com sucesso!"));
        }