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!")); }
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); }
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); }