Пример #1
0
        public async Task ExecuteAsync()
        {
            for (int i = 0; i < 2; i++)
            {
                var defaultValue       = (TipoAtividadeCnaeDefaultValues)i;
                var stringDefaultValue = TipoAtividadeCnaeDefaultValuesAccess.GetValue(defaultValue);

                var tipoAtividadeCnaeDb = _tipoAtividadeCnaeRepository.GetByDescricao(stringDefaultValue);

                if (tipoAtividadeCnaeDb == null)
                {
                    tipoAtividadeCnaeDb = new TipoAtividadeCnae(stringDefaultValue);

                    _tipoAtividadeCnaeRepository.Create(tipoAtividadeCnaeDb);
                    await _tipoAtividadeCnaeRepository.UnitOfWork.SaveDbChanges();
                }
            }
        }
        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!"));
        }
Пример #3
0
        public List <EmpresaViewModel> GetAllEmpresas()
        {
            // Busca todas as empresas cadastradas na plataforma
            var empresas = _mapper.Map <List <EmpresaViewModel> >(_ctx.Empresas.ToList());

            foreach (var empresa in empresas)
            {
                // Completa o objeto "Endereço" de empresa
                empresa.Endereco                   = _mapper.Map <EnderecoViewModel>(_ctx.Enderecos.FirstOrDefault(x => x.Id == empresa.Endereco.Id));
                empresa.Endereco.Municipio         = _mapper.Map <MunicipioViewModel>(_ctx.Municipios.FirstOrDefault(x => x.Id == empresa.Endereco.Municipio.Id));
                empresa.Endereco.Municipio.UfSigla = _mapper.Map <UfSiglaViewModel>(_ctx.UfSiglas.FirstOrDefault(x => x.Id == empresa.Endereco.Municipio.UfSigla.Id));

                // Completa o objeto "TipoEmpresa"
                empresa.TipoEmpresa = _mapper.Map <TipoEmpresaViewModel>(_ctx.TipoEmpresas.FirstOrDefault(x => x.Id == empresa.TipoEmpresa.Id));

                // Busca todos os "QSA's" por empresa Id e coloca dentro de empresaViewModel
                empresa.QSAs = _mapper.Map <List <QSAViewModel> >(_ctx.QSAs.Where(x => x.EmpresaId == empresa.Id));

                // Busca o tipo "Atividade Principal" no BD
                var tipoAtvPrincipalDb = _ctx.TipoAtividadeCnaes.FirstOrDefault(x => x.Descricao == TipoAtividadeCnaeDefaultValuesAccess.GetValue(TipoAtividadeCnaeDefaultValues.AtividadePrincipal));

                // Busca a atividade principal da empresa específica
                empresa.AtividadePrincipal = _mapper.Map <AtividadeCnaeViewModel>(_ctx.AtividadeCnaes.FirstOrDefault(x => x.TipoAtividadeCnaeId == tipoAtvPrincipalDb.Id && x.EmpresaId == empresa.Id));

                // Busca todas as atividades secundárias da empresa específica
                empresa.AtividadesSecundarias = _mapper.Map <List <AtividadeCnaeViewModel> >(_ctx.AtividadeCnaes.Where(x => x.TipoAtividadeCnaeId != tipoAtvPrincipalDb.Id && x.EmpresaId == empresa.Id));
            }

            return(empresas);
        }
Пример #4
0
        public EmpresaViewModel GetEmpresaById(long empresaId)
        {
            // Busca a empresa por Id da empresa
            var empresa = _mapper.Map <EmpresaViewModel>(_ctx.Empresas.FirstOrDefault(x => x.Id == empresaId));

            // Caso não existir empresa
            if (empresa == null)
            {
                return(null);
            }

            // Completa o objeto "Endereço" de empresa
            empresa.Endereco                   = _mapper.Map <EnderecoViewModel>(_ctx.Enderecos.FirstOrDefault(x => x.Id == empresa.Endereco.Id));
            empresa.Endereco.Municipio         = _mapper.Map <MunicipioViewModel>(_ctx.Municipios.FirstOrDefault(x => x.Id == empresa.Endereco.Municipio.Id));
            empresa.Endereco.Municipio.UfSigla = _mapper.Map <UfSiglaViewModel>(_ctx.UfSiglas.FirstOrDefault(x => x.Id == empresa.Endereco.Municipio.UfSigla.Id));

            // Completa o objeto "TipoEmpresa"
            empresa.TipoEmpresa = _mapper.Map <TipoEmpresaViewModel>(_ctx.TipoEmpresas.FirstOrDefault(x => x.Id == empresa.TipoEmpresa.Id));

            // Busca todos os "QSA's" por empresa Id e coloca dentro de empresaViewModel
            empresa.QSAs = _mapper.Map <List <QSAViewModel> >(_ctx.QSAs.Where(x => x.EmpresaId == empresaId));

            var tipoAtvPrincipalDb  = _ctx.TipoAtividadeCnaes.FirstOrDefault(x => x.Descricao == TipoAtividadeCnaeDefaultValuesAccess.GetValue(TipoAtividadeCnaeDefaultValues.AtividadePrincipal));
            var tipoAtvSecundariaDb = _ctx.TipoAtividadeCnaes.FirstOrDefault(x => x.Descricao == TipoAtividadeCnaeDefaultValuesAccess.GetValue(TipoAtividadeCnaeDefaultValues.AtividadeSecundaria));

            // Busca a atividade principal da empresa específica
            empresa.AtividadePrincipal = _mapper.Map <AtividadeCnaeViewModel>(_ctx.AtividadeCnaes.FirstOrDefault(x => x.TipoAtividadeCnaeId == tipoAtvPrincipalDb.Id && x.EmpresaId == empresaId));

            // Preenche todos os campos de atividadeCnae necessárias
            empresa.AtividadePrincipal.TipoAtividadeCnae = _mapper.Map <TipoAtividadeCnaeViewModel>(_ctx.TipoAtividadeCnaes.FirstOrDefault(x => x.Id == empresa.AtividadePrincipal.TipoAtividadeCnae.Id));
            empresa.AtividadePrincipal.TipoCnae          = _mapper.Map <TipoCnaeViewModel>(_ctx.TipoCnaes.FirstOrDefault(x => x.Id == empresa.AtividadePrincipal.TipoCnae.Id));

            // Busca todas as atividades secundárias da empresa específica
            empresa.AtividadesSecundarias = _mapper.Map <List <AtividadeCnaeViewModel> >(_ctx.AtividadeCnaes.Where(x => x.TipoAtividadeCnaeId == tipoAtvSecundariaDb.Id && x.EmpresaId == empresaId));

            // Preenche todas as atividades secundárias necessárias
            empresa.AtividadesSecundarias.ForEach(y =>
            {
                y.TipoAtividadeCnae = _mapper.Map <TipoAtividadeCnaeViewModel>(_ctx.TipoAtividadeCnaes.FirstOrDefault(x => x.Id == y.TipoAtividadeCnae.Id));
                y.TipoCnae          = _mapper.Map <TipoCnaeViewModel>(_ctx.TipoCnaes.FirstOrDefault(x => x.Id == y.TipoCnae.Id));
            });

            return(empresa);
        }