private static FORNECEDORBASE BuscarFonecedorBaseParaRobo(WebForLinkContexto db, int id)
 {
     return(db.WFD_PJPF_BASE
            .Include("ROBO")
            .Include("WFD_SOLICITACAO.SolicitacaoCadastroFornecedor")
            .FirstOrDefault(x => x.ID == id));
 }
 /// <summary>
 /// Bloqueio automatico dos usuarios que ja estao com documentos com prazos atrasados
 /// </summary>
 /// <param name="db">Contexto</param>
 /// <param name="fornecedor">Id do Fornecedor</param>
 private static void InserirSolicitacaoBloqueioAtrasoDocumento(WebForLinkContexto db, int contratante, int fornecedor)
 {
     try
     {
         var         FluxoId     = db.WFL_FLUXO.FirstOrDefault(x => x.CONTRATANTE_ID == contratante && x.FLUXO_TP_ID == 110).ID;
         SOLICITACAO solicitacao = new SOLICITACAO()
         {
             CONTRATANTE_ID        = contratante,
             FLUXO_ID              = FluxoId,
             SOLICITACAO_DT_CRIA   = DateTime.Now,
             SOLICITACAO_STATUS_ID = 5,
             PJPF_ID = fornecedor,
         };
         SOLICITACAO_BLOQUEIO bloqueio = new SOLICITACAO_BLOQUEIO()
         {
             BLQ_COMPRAS_TODAS_ORG_COMPRAS = false,
             BLQ_LANCAMENTO_EMP            = true,
             BLQ_QUALIDADE_FUNCAO_BQL_ID   = 2,
             WFD_SOLICITACAO = solicitacao,
             BLQ_MOTIVO_DSC  = "Bloqueio gerado automaticamente."
         };
         db.Entry(solicitacao).State = EntityState.Added;
         db.Entry(bloqueio).State    = EntityState.Added;
         db.SaveChanges();
     }
     catch (Exception ex)
     {
         throw new WebForLinkException("Erro ao tentar inserir a solicitação de bloqueio. ", ex);
     }
 }
 private static SOLICITACAO BuscarsolicitacaoParaRobo(WebForLinkContexto db, int id)
 {
     return(db.WFD_SOLICITACAO
            .Include("ROBO")
            .Include("SolicitacaoCadastroFornecedor")
            .FirstOrDefault(x => x.ID == id));
 }
        /// <summary>
        /// R.9.1.4 ENVIA EMAIL DE BLOQUEIO DOCUMENTO VENCIDO - Caso a data de vencimento esteja vencida e o documento seja obrigatório,
        /// o sistema envia um email informando que o Fornecedor/Cliente foi bloqueado até que atualize o documento desejado.
        /// </summary>
        /// <param name="db">Contexto</param>
        private static void BloquearFornecedorDocumentoVencido(WebForLinkContexto db)
        {
            //Filtros
            var predicate = PredicateBuilder.New <DocumentosDoFornecedor>();

            predicate = predicate.And(a => a.DATA_VENCIMENTO < DateTime.Now);
            predicate = predicativos(predicate);

            //Inserir IDs em Lista de Documentos Atrasados
            var lista = db.WFD_PJPF_DOCUMENTOS
                        .Include("WFD_CONTRATANTE_PJPF")
                        .AsExpandable()
                        .Where(predicate)
                        .Select(x => new
            {
                fornecedorId  = x.PJPF_ID,
                contratanteId = (int)x.WFD_CONTRATANTE_PJPF.CONTRATANTE_ID
            })
                        .ToList();

            lista.Distinct().ToList().ForEach(x =>
            {
                InserirSolicitacaoBloqueioAtrasoDocumento(db, x.contratanteId, x.fornecedorId);
            });
        }
        /// <summary>
        /// R.9.1.1/R.9.1.2 ENVIA  E-MAIL 5/10 DIAS ANTES DO VENCIMENTO - Caso a data de vencimento esteja a 5/10 dias do vencimento,
        /// o sistema envia um email de alerta para que o Fornecedor/Cliente efetue o upload de uma versão com validade atualizada
        /// </summary>
        private static void EnviarEmailDocumentosAVencer(WebForLinkContexto db, int dias)
        {
            //Filtros
            var predicate = PredicateBuilder.New <DocumentosDoFornecedor>();

            //predicate = predicate.And(a => a.DATA_VENCIMENTO.Value.Subtract(DateTime.Now).Days == dias);
            predicate = predicativos(predicate);

            //Inserir IDs em Lista de Documentos Atrasados
            db.WFD_PJPF_DOCUMENTOS
            .AsExpandable()
            .Where(predicate)
            .ToList()
            .ForEach(x =>
            {
                var tempo = x.DATA_VENCIMENTO.GetValueOrDefault();
                if ((tempo.Subtract(DateTime.Now).Days + dias) == 0)
                {
                    var emailFornecedor = db.WFD_PJPF.FirstOrDefault(y => y.ID == x.PJPF_ID).EMAIL;
                    var assuntoMail     = string.Format("Faltam {0} Dias para seu documento expirar", dias);
                    var corpoMail       = string.Format("Seus documentos expiraram em: {0}. Efetue o upload de uma versão com validade atualizada", x.DATA_VENCIMENTO.GetValueOrDefault().ToShortDateString());
                    //--Enviar E-mail de fato
                    _metodosGerais.EnviarEmail(ConfigurationManager.AppSettings.Get("EmailRobo"), assuntoMail, corpoMail);
                }
            });
        }
        private static int[] BuscarParaExecucaoRobo()
        {
            WebForLinkContexto dbbase = new WebForLinkContexto();

            try
            {
                //dbbase.Database.Log = s => _metodosGerais.LogQueries(s);

                int qtd = dbbase.WFD_CONFIG.FirstOrDefault().QTD_ACESSO_ROBO_SIMULTANEO;
                //int? tentativas = dbbase.WFD_CONTRATANTE_CONFIG.FirstOrDefault(x => x.CONTRATANTE_ID == ContratanteId).TOTAL_TENTATIVA_ROBO;

                return(dbbase.WFD_PJPF_BASE
                       .Include("ROBO")
                       .Where(x => x.CONTRATANTE_ID != ContratanteId &&
                              x.EXECUTA_ROBO == true &&
                              x.DT_SOLICITACAO_ROBO > DataSolicitacao &&
                              x.ROBO_EXECUTADO == false &&
                              x.ROBO_TENTATIVAS_EXCEDIDAS == false)
                       .OrderBy(y => new { y.DT_SOLICITACAO_ROBO, y.ID })
                       .Select(z => z.ID)
                       .Take(qtd).ToArray());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Пример #7
0
        public void AtualizaTramite(WebForLinkContexto Db, int contratanteId, int solicitacaoId, int fluxoId, int papelAtualId, int statusId, int?usuarioId)
        {
            int?grupoDestino = 0;

            SOLICITACAO_TRAMITE        tramite;
            List <SOLICITACAO_TRAMITE> tramiteAtual = RetornarSolicitacaoTramiteAtual(solicitacaoId);

            grupoDestino = tramiteAtual.Count > 0
                ? tramiteAtual.Single(t => t.PAPEL_ID == papelAtualId).GRUPO_DESTINO
                : ListarProximoPapeisFluxo(contratanteId, fluxoId, papelAtualId, 1).FirstOrDefault().GRUPO_DESTINO;

            switch (statusId)
            {
            case 1:
                tramite = InserirTramiteInicial(solicitacaoId, papelAtualId, statusId, usuarioId, grupoDestino);
                break;

            case 2:
                tramite = InserirTramiteSequencia(solicitacaoId, papelAtualId, statusId, usuarioId, grupoDestino, tramiteAtual);

                List <FLUXO_SEQUENCIA> proximoPapeis = ListarProximoPapeisFluxo(contratanteId, fluxoId, papelAtualId, grupoDestino);

                // verifica se o tramite atual está todo aprovado, lembrando que pode ter mais de um tramite simultaneamente
                // senão a solicitação não pode ir para o proximo passo.
                if (!tramiteAtual.Any(t => t.SOLICITACAO_STATUS_ID == 1))
                {
                    foreach (FLUXO_SEQUENCIA item in proximoPapeis)
                    {
                        // Se não houver proximo passo o sistem finaliza a solicitacao
                        if (item.PAPEL_ID_FIM != null)
                        {
                            tramite = InserirTramiteConclusao(solicitacaoId, item);
                        }
                        else
                        {
                            AlterarSolicitacaoParaFinalizado(solicitacaoId, 4);    // Concluido
                        }
                    }
                }

                //EmailSolicitacao emailSolicitacao = new EmailSolicitacao();
                //emailSolicitacao.EnviarEmailSolicitacao(Contratante, solicitacaoId, Fluxo, proximoPapeis);
                break;

            case 3:
            case 6:
                tramite = tramiteAtual.Single(t => t.PAPEL_ID == papelAtualId);
                tramite.SOLICITACAO_STATUS_ID = statusId;     // Reprovado
                tramite.USUARIO_ID            = usuarioId;
                tramite.TRMITE_DT_FIM         = DateTime.Now;

                AlterarSolicitacaoParaFinalizado(solicitacaoId, statusId);     // Reprovado

                //EmailSolicitacao emailReprovacao = new EmailSolicitacao();
                //emailReprovacao.EnviarEmailReprovacao(solicitacao.ID);
                break;
            }
        }
Пример #8
0
        public void InicializarRobo()
        {
            WebForLinkContexto db = new WebForLinkContexto();

            _solicitacaoBP.BuscarSolicitacaoAguardandoRetornoCarga()
            .ToList()
            .ForEach(x =>
            {
                LerArquivos(db, x);
            });
        }
Пример #9
0
        private void AtualizarSolicitacao(WebForLinkContexto Db, int Id, int Fluxo, int ContratanteId, int usuarioId, string emailUsuario, bool mandaEmail)
        {
            int?grupoId = (int?)Geral.PegaAuthTicket("Grupo");

            _aprovacaoBp.FinalizarSolicitacao(grupoId, Fluxo, Id);

            //Aprovacao.FinalizaSolicitacao(Fluxo, Id);
            _tramite.AtualizarTramite(ContratanteId, Id, Fluxo, (int)EnumPapeisWorkflow.RetornoCarga, 2, null);

            if (mandaEmail)
            {
                EnviarEmailFornecedorUsuario(emailUsuario, usuarioId);
            }
        }
        private static void GravaLog(WebForLinkContexto db, int?Code, string Mensagem, string orgao, int contratanteId, int?pjpfId, int?solicitacaoId)
        {
            ROBO_LOG entityLog = new ROBO_LOG()
            {
                COD_RETORNO    = Code,
                DATA           = DateTime.Now,
                MENSAGEM       = Mensagem,
                ROBO           = orgao,
                CONTRATANTE_ID = contratanteId,
                PJPF_ID        = pjpfId,
                SOLICITACAO_ID = solicitacaoId
            };

            db.Entry(entityLog).State = System.Data.Entity.EntityState.Added;
        }
        private static void GravaLog(WebForLinkContexto db, int?codigoRetorno, string mensagem, string orgao, int contratanteId, int pjpfBaseId)
        {
            ROBO_LOG pjpfRoboLog = new ROBO_LOG()
            {
                COD_RETORNO    = codigoRetorno,
                DATA           = DateTime.Now,
                MENSAGEM       = mensagem,
                ROBO           = orgao,
                CONTRATANTE_ID = contratanteId,
                PJPF_BASE_ID   = pjpfBaseId
                                 //SOLICITACAO_ID = solicitacao.ID
            };

            db.Entry(pjpfRoboLog).State = System.Data.Entity.EntityState.Added;
        }
Пример #12
0
 public PartialViewResult Listar(DestinatarioVM filtro)
 {
     try
     {
         using (WebForLinkContexto contexto = new WebForLinkContexto())
         {
             lista = ListaGrid.ModelToViewModel(contexto.WFD_PJPF_DOCUMENTOS.Where(x => x.ATIVO), Url);
         }
         return(PartialView("_boxGrid", new Grid <ListaGrid>(lista, filtro.page, filtro.registros)));
     }
     catch (Exception ex)
     {
         Log.Error(ex);
         return(PartialView("_GridVazio"));
     }
 }
Пример #13
0
 public QuestionarioDinamicoController(WebForLinkContexto db)
     : base(_repositorios)
 {
     _db = db;
     try
     {
         if (_repositorios == null)
         {
             _repositorios = new UnitOfWork(new WebForLinkContexto());
         }
     }
     catch (Exception ex)
     {
         Log.Error(ex);
     }
 }
        private static void GeraBloqueioAutomatico(WebForLinkContexto db, FORNECEDORBASE pjpf, SOLICITACAO solicitacao, SOLICITACAO_BLOQUEIO bloq)
        {
            solicitacao.CONTRATANTE_ID        = pjpf.CONTRATANTE_ID;
            solicitacao.FLUXO_ID              = db.WFL_FLUXO.FirstOrDefault(x => x.CONTRATANTE_ID == pjpf.CONTRATANTE_ID && x.FLUXO_TP_ID == 110).ID;
            solicitacao.PJPF_BASE_ID          = pjpf.ID;
            solicitacao.SOLICITACAO_DT_CRIA   = DateTime.Now;
            solicitacao.SOLICITACAO_STATUS_ID = 5;

            bloq.BLQ_COMPRAS_TODAS_ORG_COMPRAS = false;
            bloq.BLQ_LANCAMENTO_EMP            = true;
            bloq.BLQ_QUALIDADE_FUNCAO_BQL_ID   = 2;
            bloq.WFD_SOLICITACAO = solicitacao;
            bloq.BLQ_MOTIVO_DSC  = "Bloqueio gerado automaticamente.";

            db.Entry(solicitacao).State = EntityState.Added;
            db.Entry(bloq).State        = EntityState.Added;
        }
Пример #15
0
        public ActionResult Editar(string chaveurl)
        {
            EncryptDecryptQueryString Cripto = new EncryptDecryptQueryString();
            var id                    = Cripto.Descriptografar(chaveurl, Key);
            var descripto             = new Criptografia(EnumCripto.LinkDescriptografar, chaveurl, "r10X310y");
            var retorno               = 0;
            var parametroCriptografia = descripto.Resultados.FirstOrDefault(x => x.Key == "id");

            if (parametroCriptografia.Value != null)
            {
                int.TryParse(parametroCriptografia.Value, out retorno);
            }
            CadastroDocumentoFornecedorIndividualVM modelo = new CadastroDocumentoFornecedorIndividualVM();

            using (WebForLinkContexto contexto = new WebForLinkContexto())
            {
                modelo = CadastroDocumentoFornecedorIndividualVM.ModelToViewModel(contexto.WFD_PJPF_DOCUMENTOS.FirstOrDefault(x => x.ID == retorno));
            }

            return(View(modelo));
        }
        private static void atualizaPJPFBase(WebForLinkContexto db, FORNECEDORBASE pjpf)
        {
            pjpf.BAIRRO         = pjpf.ROBO.RF_BAIRRO;
            pjpf.CEP            = pjpf.ROBO.RF_CEP;
            pjpf.CIDADE         = pjpf.ROBO.RF_MUNICIPIO;
            pjpf.COMPLEMENTO    = pjpf.ROBO.RF_COMPLEMENTO;
            pjpf.ENDERECO       = pjpf.ROBO.RF_LOGRADOURO;
            pjpf.INSCR_ESTADUAL = pjpf.ROBO.SINT_IE_COD;
            pjpf.NOME           = pjpf.ROBO.RF_NOME;
            pjpf.NOME_FANTASIA  = pjpf.ROBO.RF_NOME_FANTASIA;
            pjpf.NUMERO         = pjpf.ROBO.RF_NUMERO;
            pjpf.RAZAO_SOCIAL   = pjpf.ROBO.RECEITA_FEDERAL_RAZAO_SOCIAL;
            pjpf.UF             = pjpf.ROBO.RF_UF;

            if (pjpf.WFD_SOLICITACAO.Any())
            {
                var solicitacao = pjpf.WFD_SOLICITACAO.FirstOrDefault();
                if (solicitacao != null)
                {
                    var solForn = solicitacao.SolicitacaoCadastroFornecedor.FirstOrDefault();
                    if (solForn != null)
                    {
                        solForn.BAIRRO         = pjpf.ROBO.RF_BAIRRO;
                        solForn.CEP            = pjpf.ROBO.RF_CEP;
                        solForn.CIDADE         = pjpf.ROBO.RF_MUNICIPIO;
                        solForn.COMPLEMENTO    = pjpf.ROBO.RF_COMPLEMENTO;
                        solForn.ENDERECO       = pjpf.ROBO.RF_LOGRADOURO;
                        solForn.NOME           = pjpf.ROBO.RF_NOME;
                        solForn.NOME_FANTASIA  = pjpf.ROBO.RF_NOME_FANTASIA;
                        solForn.NUMERO         = pjpf.ROBO.RF_NUMERO;
                        solForn.RAZAO_SOCIAL   = pjpf.ROBO.RECEITA_FEDERAL_RAZAO_SOCIAL;
                        solForn.ROBO_ID        = pjpf.ROBO.ID;
                        solForn.UF             = pjpf.ROBO.RF_UF;
                        solForn.INSCR_ESTADUAL = pjpf.ROBO.SINT_IE_COD;

                        db.Entry(solForn).State = EntityState.Modified;
                    }
                }
            }
        }
        private static int[] BuscarParaExecucaoRobo()
        {
            WebForLinkContexto dbbase = new WebForLinkContexto();

            int qtd = dbbase.WFD_CONFIG.FirstOrDefault().QTD_ACESSO_ROBO_SIMULTANEO;

            int[] tpFluxoids = { 10, 20, 30, 40 };

            return(dbbase.WFD_SOLICITACAO
                   .Where(x =>
                          x.CONTRATANTE_ID != ContratanteId &&
                          x.SOLICITACAO_STATUS_ID == (int)EnumStatusTramite.EmAprovacao && // EM APROVACAO
                          x.SOLICITACAO_DT_CRIA > DataSolicitacao &&
                          tpFluxoids.Contains(x.Fluxo.FLUXO_TP_ID) &&
                          x.ROBO_EXECUTADO == false &&
                          x.ROBO_TENTATIVAS_EXCEDIDAS == false
                          )
                   .OrderBy(y => new { y.SOLICITACAO_DT_CRIA, y.ID })
                   .Select(z => z.ID)
                   .Take(qtd)
                   .ToArray());
        }
Пример #18
0
 private void LerArquivos(WebForLinkContexto db, int ContratanteId)
 {
     try
     {
         var diretorioCarga = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings.Get("DiretorioRetornoSap");
         if (!Directory.Exists(diretorioCarga))
         {
             Directory.CreateDirectory(diretorioCarga);
         }
         var arquivoRetorno = _contratanteConfig.BuscarPorID(ContratanteId).FORNECEDOR_RETORNO;
         var nome           = string.Format("{0}\\{1}", diretorioCarga, arquivoRetorno);
         //List<string> solicitacoes = new List<string>();
         foreach (var arquivoCriacaoFornecedores in Directory.EnumerateFiles(diretorioCarga, arquivoRetorno))
         {
             AtualizarCodigoERP(db, deserializarArquivo(arquivoCriacaoFornecedores).Mensagens);
             //solicitacoes.Add(arquivoCriacaoFornecedores);
         }
     }
     catch (Exception ex)
     {
         throw new WebForLinkException("Erro ao tentar nomear o arquivo", ex);
     }
 }
Пример #19
0
        /// <summary>
        /// Será atualizado o código de ERP se o mesmo não vier nulo apenas nos retorno de Cad.Fornecedor Nacional e Nacional Direto
        /// </summary>
        /// <param name="db">contexto do Banco de Dados</param>
        /// <param name="lstRetorno">Retorno do arquivo</param>
        private void AtualizarCodigoERP(WebForLinkContexto db, List <MensagensCarga> lstRetorno)
        {
            try
            {
                lstRetorno.ForEach(
                    x =>
                {
                    var solicitacao = db.WFD_SOLICITACAO
                                      .Include(y => y.Usuario)
                                      .Include(y => y.Fluxo)
                                      .FirstOrDefault(ws => ws.ID == x.SolicitacaoId);
                    bool mandaEmail = false;
                    switch (solicitacao.Fluxo.FLUXO_TP_ID)
                    {
                    case (int)EnumTiposFluxo.CadastroFornecedorNacional:
                    case (int)EnumTiposFluxo.CadastroFornecedorNacionalDireto:
                        if (x.CodigoERP > 0)
                        {
                            SolicitacaoCadastroFornecedor solCadastro = db.WFD_SOL_CAD_PJPF
                                                                        .FirstOrDefault(y => y.SOLICITACAO_ID == x.SolicitacaoId);

                            solCadastro.COD_PJPF_ERP    = x.CodigoERP.ToString();
                            db.Entry(solCadastro).State = EntityState.Modified;
                            db.SaveChanges();
                        }
                        mandaEmail = true;
                        break;
                    }
                    AtualizarSolicitacao(db, solicitacao.ID, solicitacao.Fluxo.FLUXO_TP_ID, solicitacao.CONTRATANTE_ID, solicitacao.Usuario.ID, solicitacao.Usuario.EMAIL, mandaEmail);
                }
                    );
            }
            catch (Exception)
            {
            }
        }
Пример #20
0
 public UnitOfWork(IWebForLinkContexto contexto)
 {
     _contexto = contexto;
 }
        static void ChamaRobo(int pjpfId)
        {
            try
            {
                WebForLinkContexto db = new WebForLinkContexto();

                var pjpf = BuscarFonecedorBaseParaRobo(db, pjpfId);

                RoboReceitaCNPJ roboReceita    = new RoboReceitaCNPJ();
                RoboSintegra    roboSintegra   = new RoboSintegra();
                RoboSimples     roboSimples    = new RoboSimples();
                RoboReceitaCPF  roboReceitaCpf = new RoboReceitaCPF();

                if (pjpf.ROBO == null)
                {
                    pjpf.ROBO = new ROBO();
                }

                bool validaReceita  = (pjpf.ROBO.ID == 0 || pjpf.ROBO.RF_CONSULTA_DTHR == null);
                bool validaSintegra = (pjpf.ROBO.ID == 0 || pjpf.ROBO.SINT_CONSULTA_DTHR == null);
                bool validaSimples  = (pjpf.ROBO.ID == 0 || pjpf.ROBO.SN_CONSULTA_DTHR == null);

                if (pjpf.PJPF_TIPO == 1)
                {
                    if (validaReceita && pjpf.CNPJ != null)
                    {
                        roboReceita = roboReceita.CarregaRoboCNPJ(pjpf.CNPJ, path);

                        var             robo            = pjpf.ROBO;
                        RoboReceitaCNPJ roboReceitaCnpj = new RoboReceitaCNPJ();
                        roboReceitaCnpj.GravaRoboReceita(roboReceita, ref robo);

                        GravaLog(db, roboReceita.Code, roboReceita.Data.Message, EnumRobo.ReceitaFederal.ToString(), pjpf.CONTRATANTE_ID, pjpf.ID);
                    }

                    if (validaSintegra && pjpf.ROBO.RF_UF != null)
                    {
                        roboSintegra = roboSintegra.CarregaSintegra(pjpf.ROBO.RF_UF, pjpf.CNPJ, path);

                        var          robo            = pjpf.ROBO;
                        RoboSintegra roboSintegraObj = new RoboSintegra();
                        roboSintegraObj.GravaRoboSintegra(roboSintegra, ref robo);

                        GravaLog(db, roboSintegra.Code, roboSintegra.Data.Message, EnumRobo.Sintegra.ToString(), pjpf.CONTRATANTE_ID, pjpf.ID);
                    }

                    if (validaSimples && pjpf.CNPJ != null)
                    {
                        roboSimples = roboSimples.CarregaSimplesCNPJ(pjpf.CNPJ, path);

                        var         robo           = pjpf.ROBO;
                        RoboSimples roboSimplesObj = new RoboSimples();
                        roboSimplesObj.GravaRoboSimples(roboSimples, ref robo);

                        GravaLog(db, roboSimples.Code, roboSimples.Data.Message, EnumRobo.SimplesNacional.ToString(), pjpf.CONTRATANTE_ID, pjpf.ID);
                    }
                }

                // Pessoa Fisica
                if (pjpf.PJPF_TIPO == 3)
                {
                    if (validaReceita && pjpf.CPF != null)
                    {
                        DateTime nasc = (DateTime)pjpf.DT_NASCIMENTO;
                        roboReceitaCpf = roboReceitaCpf.CarregaRoboCPF(pjpf.CPF, nasc.ToString("dd/MM/yyyy"), path);

                        var            robo       = pjpf.ROBO;
                        RoboReceitaCPF roboCpfObj = new RoboReceitaCPF();
                        roboCpfObj.GravaRoboCpf(roboReceitaCpf, ref robo);

                        GravaLog(db, roboReceitaCpf.Code, roboReceitaCpf.Data.Message, EnumRobo.ReceitaFederalPF.ToString(), pjpf.CONTRATANTE_ID, pjpf.ID);
                    }
                }

                #region BLOQUEIO

                bool ReceitaIrregular = false, ReceitaInativa = false, SintegraNaoHabilitado = false;

                if (pjpf.PJPF_TIPO == 1)
                {
                    ReceitaInativa        = (!String.IsNullOrEmpty(roboReceita.Data.SituacaoCadastral) && roboReceita.Data.SituacaoCadastral.ToUpper() != "ATIVA");
                    SintegraNaoHabilitado = (!String.IsNullOrEmpty(roboSintegra.Data.SituacaoCadastral) && roboSintegra.Data.SituacaoCadastral == "HABILITADO ATIVO" && roboSintegra.Data.SituacaoCadastral == "HABILITADO");
                }
                else
                {
                    ReceitaIrregular = (!String.IsNullOrEmpty(roboReceitaCpf.Data.SituacaoCadastral) && roboReceitaCpf.Data.SituacaoCadastral.ToUpper() != "REGULAR");
                }

                SOLICITACAO          solicitacao = new SOLICITACAO();
                SOLICITACAO_BLOQUEIO bloq        = new SOLICITACAO_BLOQUEIO();

                if (ReceitaInativa || SintegraNaoHabilitado || ReceitaIrregular)
                {
                    var BloqManual = db.WFD_CONTRATANTE_CONFIG.FirstOrDefault(x => x.CONTRATANTE_ID == pjpf.CONTRATANTE_ID).BLOQUEIO_MANUAL;
                    if (!BloqManual)
                    {
                        GeraBloqueioAutomatico(db, pjpf, solicitacao, bloq);
                    }
                }

                #endregion

                if (pjpf.ROBO.RF_CONSULTA_DTHR != null && pjpf.ROBO.SINT_CONSULTA_DTHR != null && pjpf.ROBO.SN_CONSULTA_DTHR != null)
                {
                    pjpf.ROBO_EXECUTADO = true;
                }
                if (pjpf.ROBO.RF_CONTADOR_TENTATIVA >= 3 && pjpf.ROBO.SINT_CONTADOR_TENTATIVA >= 3 && pjpf.ROBO.SN_CONTADOR_TENTATIVA >= 3)
                {
                    pjpf.ROBO_TENTATIVAS_EXCEDIDAS = true;
                }

                ContratanteId   = pjpf.CONTRATANTE_ID;
                DataSolicitacao = (DateTime)pjpf.DT_SOLICITACAO_ROBO;

                atualizaPJPFBase(db, pjpf);

                db.Entry(pjpf).State = EntityState.Modified;
                db.SaveChanges();

                //ATUALIZA TRAMITE SE HOUVER CRIAÇÃO DE BLOQUEIO
                if (ReceitaInativa || SintegraNaoHabilitado)
                {
                    int papel = db.WFL_PAPEL.FirstOrDefault(x => x.CONTRATANTE_ID == pjpf.CONTRATANTE_ID && x.PAPEL_TP_ID == 10).ID;
                    _tramite.AtualizarTramite(pjpf.CONTRATANTE_ID, solicitacao.ID, solicitacao.FLUXO_ID, papel, 2, null);
                }
            }
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    foreach (var ve in eve.ValidationErrors)
                    {
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error(string.Format("Error ao percorrer a lista 'lstFornecedorRobo' exception: {0}", ex));
            }
        }
        static void ChamaRobo(int solicitacaoId)
        {
            try
            {
                WebForLinkContexto db = new WebForLinkContexto();

                var solicitacao = BuscarsolicitacaoParaRobo(db, solicitacaoId);

                RoboReceitaCNPJ roboReceita    = new RoboReceitaCNPJ();
                RoboSintegra    roboSintegra   = new RoboSintegra();
                RoboSimples     roboSimples    = new RoboSimples();
                RoboReceitaCPF  roboReceitaCpf = new RoboReceitaCPF();

                var robo    = solicitacao.ROBO.FirstOrDefault();
                var solForn = solicitacao.SolicitacaoCadastroFornecedor.FirstOrDefault();

                bool validaReceita  = (robo.ID == 0 || robo.RF_CONSULTA_DTHR == null);
                bool validaSintegra = (robo.ID == 0 || robo.SINT_CONSULTA_DTHR == null);
                bool validaSimples  = (robo.ID == 0 || robo.SN_CONSULTA_DTHR == null);

                if (solForn.PJPF_TIPO == 1)
                {
                    if (validaReceita && solForn.CNPJ != null)
                    {
                        roboReceita = roboReceita.CarregaRoboCNPJ(solForn.CNPJ, path);

                        RoboReceitaCNPJ roboReceitaCnpj = new RoboReceitaCNPJ();
                        roboReceitaCnpj.GravaRoboReceita(roboReceita, ref robo);

                        GravaLog(db, roboReceita.Code, roboReceita.Data.Message, EnumRobo.ReceitaFederal.ToString(), solicitacao.CONTRATANTE_ID, solicitacao.PJPF_ID, solicitacao.ID);
                    }

                    if (validaSintegra && robo.RF_UF != null)
                    {
                        roboSintegra = roboSintegra.CarregaSintegra(robo.RF_UF, solForn.CNPJ, path);

                        RoboSintegra roboSintegraObj = new RoboSintegra();
                        roboSintegraObj.GravaRoboSintegra(roboSintegra, ref robo);

                        GravaLog(db, roboSintegra.Code, roboSintegra.Data.Message, EnumRobo.Sintegra.ToString(), solicitacao.CONTRATANTE_ID, solicitacao.PJPF_ID, solicitacao.ID);
                    }

                    if (validaSimples && solForn.CNPJ != null)
                    {
                        roboSimples = roboSimples.CarregaSimplesCNPJ(solForn.CNPJ, path);

                        RoboSimples roboSimplesObj = new RoboSimples();
                        roboSimplesObj.GravaRoboSimples(roboSimples, ref robo);

                        GravaLog(db, roboSimples.Code, roboSimples.Data.Message, EnumRobo.SimplesNacional.ToString(), solicitacao.CONTRATANTE_ID, solicitacao.PJPF_ID, solicitacao.ID);
                    }
                }

                // Pessoa Fisica
                if (solForn.PJPF_TIPO == 3)
                {
                    if (validaReceita && solForn.CPF != null)
                    {
                        roboReceitaCpf = roboReceitaCpf.CarregaRoboCPF(solForn.CPF, solForn.DT_NASCIMENTO.ToString(), path);

                        RoboReceitaCPF roboCpfObj = new RoboReceitaCPF();
                        roboCpfObj.GravaRoboCpf(roboReceitaCpf, ref robo);

                        GravaLog(db, roboReceitaCpf.Code, roboReceitaCpf.Data.Message, EnumRobo.ReceitaFederalPF.ToString(), solicitacao.CONTRATANTE_ID, solicitacao.PJPF_ID, solicitacao.ID);
                    }
                }

                if (robo.RF_CONSULTA_DTHR != null && robo.SINT_CONSULTA_DTHR != null && robo.SN_CONSULTA_DTHR != null)
                {
                    solicitacao.ROBO_EXECUTADO = true;
                }
                if (robo.RF_CONTADOR_TENTATIVA >= 3 && robo.SINT_CONTADOR_TENTATIVA >= 3 && robo.SN_CONTADOR_TENTATIVA >= 3)
                {
                    solicitacao.ROBO_TENTATIVAS_EXCEDIDAS = true;
                }

                ContratanteId   = solicitacao.CONTRATANTE_ID;
                DataSolicitacao = (DateTime)solicitacao.SOLICITACAO_DT_CRIA;

                db.Entry(solicitacao).State = EntityState.Modified;
                db.SaveChanges();
            }
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    foreach (var ve in eve.ValidationErrors)
                    {
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error(string.Format("Error ao percorrer a lista 'lstFornecedorRobo' exception: {0}", ex));
            }
        }