Esempio n. 1
0
        /*Busca arquivos de edital para licitações antigas que tenham data de abertura maior do que o dia corrente.*/
        private static void HistoricFiles()
        {
            RService.Log("(HistoricFiles) " + Historic + ": Buscando licitações..." + " at {0}", Path.GetTempPath() + Historic + ".txt");
            try
            {
                DateTime dataLimite = DateTime.Today.AddDays(-90);

                /*Busca licitações com a data de abertura anterior a 90 dias, ou que ainda não aconteceu*/
                List <Licitacao> licitacoes = LicitacaoController.FindByRangeHistoric(Constants.CN_HOST, dataLimite);

                RService.Log("(HistoricFiles) " + Historic + ": " + licitacoes.Count + " licitacões encontradas at {0}", Path.GetTempPath() + Historic + ".txt");

                licitacoesHistorico = new List <string>();

                foreach (Licitacao licitacao in licitacoes)
                {
                    RService.Log("(HistoricFiles) " + Historic + ": Consultando ata e histórico da licitação " + licitacao.IdLicitacaoFonte + " at {0}", Path.GetTempPath() + Historic + ".txt");
                    ConsultaAtaPregao(licitacao);
                    GetHistoricos(licitacao, Historic);
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (HistoricFiles) " + Historic + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Historic + ".txt");
            }
        }
Esempio n. 2
0
        /*Busca arquivos de edital para licitações antigas que tenham data de abertura maior do que o dia corrente.*/
        private static void RemainingFiles()
        {
            RService.Log("(RemainingFiles) " + Name + ": Buscando arquivos de licitações antigas..." + " at {0}", Path.GetTempPath() + Name + ".txt");
            try
            {
                /*Busca licitações com a data de abertura maior do que o dia corrente*/
                List <Licitacao> licitacoes = LicitacaoController.GetAberturaGratherThan(DateTime.Today, Constants.BB_HOST);

                TryReload = true;

                foreach (Licitacao lic in licitacoes)
                {
                    //if (lic.DigitacaoData.HasValue)
                    //{
                    /*Verifica e baixa os arquivos que ainda não foram coletados*/
                    DownloadEdAndCreatLicArq(lic.IdLicitacaoFonte.ToString(), lic);
                    //}
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (RemainingFiles) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
            finally
            {
                if (web != null)
                {
                    web.Close();
                }
            }
        }
Esempio n. 3
0
        private static void UpdateLicitacoes()
        {
            try
            {
                /*Inicia navegador fantasma para atualização de licitações*/
                if (web != null)
                {
                    web.Quit();
                }

                var driver = ChromeDriverService.CreateDefaultService();
                driver.HideCommandPromptWindow = true;
                var op = new ChromeOptions();
                op.AddUserProfilePreference("download.default_directory", PathEditais);
                web = new ChromeDriver(driver, new ChromeOptions(), TimeSpan.FromSeconds(300));
                web.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(300);
                wait = new WebDriverWait(web, TimeSpan.FromSeconds(300));


                List <Licitacao> licitacoes = LicitacaoController.FindBySituationBB();

                foreach (var licitacao in licitacoes)
                {
                    web.Navigate().GoToUrl(licitacao.LinkEdital);

                    HandleReCaptcha();

                    var situacaoDiv = web.FindElement(By.XPath("//*[@id=\"divConsultarDetalhesLicitacao\"]/fieldset/div[11]"));

                    if (situacaoDiv != null)
                    {
                        string situacao = web.FindElement(By.XPath("//*[@id=\"divConsultarDetalhesLicitacao\"]/fieldset/div[11]")).Text.TrimStart().TrimEnd();

                        if (!string.IsNullOrEmpty(situacao) && situacao != licitacao.Situacao)
                        {
                            licitacao.Situacao = situacao;
                            Repo.Update(licitacao);

                            RService.Log("(UpdateLicitacoes) " + Name + ": Situação da licitação " + licitacao.Id + " atualizada para " + situacao + " at {0}", Path.GetTempPath() + Name + ".txt");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (UpdateLicitacoes) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
            finally
            {
                if (web != null)
                {
                    web.Close();
                }
            }
        }
Esempio n. 4
0
        /**Cria uma nova licitação*/
        private static Licitacao CreateLicitacao(HtmlDocument htmlDocument, string linkEdital)
        {
            RService.Log("(CreateLicitacao) " + Name + ": Criando licitação... " + Id + " at {0}", Path.GetTempPath() + Name + ".txt");
            try
            {
                IEnumerable <HtmlNode> spanNodes = htmlDocument.DocumentNode.Descendants("span");
                Licitacao licitacao = new Licitacao();
                licitacao.Lote             = Lote;
                licitacao.Num              = Id;
                licitacao.IdLicitacaoFonte = long.Parse(Id);
                string modalidade = spanNodes.SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("procedimentoContratacao")).InnerText;
                licitacao.Modalidade = modalidade.Contains("eletr") ? Modalidades[0] : Modalidades[1];
                licitacao.LinkSite   = Constants.CMG_HOST;
                licitacao.Orgao      = Orgao;
                licitacao.IdFonte    = 506;
                licitacao.Excluido   = 0;
                licitacao.SegmentoAguardandoEdital = 0;
                licitacao.DigitacaoUsuario         = 43; //Robo
                licitacao.LinkEdital  = linkEdital;
                licitacao.CidadeFonte = 2754;
                licitacao.Cidade      = Constants.CMG_CIDADE;
                licitacao.EstadoFonte = Constants.CMG_UF;
                licitacao.Estado      = Constants.CMG_ESTADO;
                licitacao.Observacoes = "ENDERECO NAO DIVULGADO.";
                licitacao.Situacao    = Situacao;

                //licitacao.DigitacaoData = null;
                //licitacao.ProcessamentoData = null;

                string departamento = spanNodes.SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("unidadeCompra")).InnerText;

                licitacao.Departamento = departamento.Trim() + " SECRETARIA: " + Secretaria;

                string data = spanNodes.SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("dataInicioSessaoPregao")).InnerText;
                string hora = spanNodes.SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("horaInicioSessaoPregao")).InnerText;

                DateTime?aberturaEntrega = DateHandle.Parse(data.Trim() + " " + hora.Trim(), "dd/MM/yyyy hh:mm:ss");

                licitacao.AberturaData = aberturaEntrega;
                licitacao.EntregaData  = aberturaEntrega;
                licitacao.Objeto       = spanNodes.SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("objetoLicitacao")).InnerText;

                return(LicitacaoController.IsValid(licitacao, out mensagemErro) ? licitacao : null);
            }
            catch (Exception e)
            {
                RService.Log("Exception " + Name + ": (CreateLicitacao)" + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
                return(null);
            }
        }
Esempio n. 5
0
        /*Cria os objetos Licitacao, Lote e LicitacaoArquivo fazendo as verificações necessárias.*/
        private static void HandleCreate(HtmlDocument htmlDoc, string ocnum, string situacao)
        {
            try
            {
                Regex  regex = new Regex("\\d{4}OC");
                string ocn   = ocnum;
                ocnum = "1" + regex.Replace(ocnum, DateTime.Now.ToString("yy"));

                /*Verifica se a oc já não esta na base de dados, cria um novo lote se for preciso*/
                //if (!string.IsNullOrEmpty(ocnum) && !AlreadyInserted.Contains(long.Parse(ocnum)) && AguardandoPropostasEditalPub(htmlDoc) && !AlreadyColected.Contains(long.Parse(ocnum)))
                if (!string.IsNullOrEmpty(ocn) && !LicitacaoController.ExistsBEC(ocn))
                {
                    //AlreadyColected.Add(long.Parse(ocnum));
                    //Preenche os dados da licitação e retorna para inserir na lista
                    Licitacao licitacao = CreateLicitacao(htmlDoc, ocnum, situacao);
                    if (licitacao != null && !string.IsNullOrEmpty(licitacao.LinkEdital))
                    {
                        licitacao.Observacoes = ocn;

                        Repo.Insert(licitacao);
                        //licitacoes.Add(licitacao);

                        HtmlDocument htmlEditais   = WebHandle.GetHtmlDocOfPage(licitacao.LinkEdital);
                        int          numeroArquivo = 2;
                        //Faz o download de todos os arquivos do edital
                        foreach (HtmlNode editais in htmlEditais.DocumentNode.Descendants("a").Where(x => x.Attributes.Contains("href") && x.Attributes["href"].Value.Contains("ctl00$conteudo$WUC_Documento1$dgDocumento")))
                        {
                            DownloadEditais(licitacao.LinkEdital, GetFormParametersEdital(htmlEditais, numeroArquivo));
                        }
                        CreateLicitacaoArquivo(licitacao);
                        NumLicitacoes++;
                    }
                    else
                    {
                        RService.Log("Exception (HandleCreate) " + Name + ": A licitação não foi salva - Motivo(s): " + mensagemErro + " at {0}", Path.GetTempPath() + Name + ".txt");
                    }
                }
                else if (!string.IsNullOrEmpty(ocn) && LicitacaoController.ExistsBEC(ocn) && LicitacaoController.SituacaoAlteradaBEC(ocn, situacao))
                {
                    int id = LicitacaoController.GetIdByObservacoes(ocn);
                    LicitacaoController.UpdateSituacaoByIdLicitacao(id, situacao);
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (HandleCreate) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
        }
Esempio n. 6
0
        private static Licitacao GetLicitacao()
        {
            Licitacao licitacao = new Licitacao();

            licitacao.Lote    = Lote;
            licitacao.IdFonte = Constants.CRJ_ID_FONTE;
            var x = web.FindElement(By.Id("idLicitacao")).GetAttribute("value");

            licitacao.IdLicitacaoFonte = long.Parse(x);
            licitacao.LinkSite         = Constants.CRJ_HOST;
            licitacao.LinkEdital       = Constants.CRJ_LINK_LICITACAO;
            licitacao.EstadoFonte      = Constants.CRJ_ESTADO_FONTE;
            licitacao.Estado           = Constants.CRJ_ESTADO;
            licitacao.DigitacaoUsuario = 43;

            var title     = web.FindElement(By.XPath("//*[@id=\"panelId\"]/div[1]/div/div/p")).Text.Trim();
            var dept      = web.FindElement(By.XPath("//*[@id=\"panelId\"]/div[2]/div/div/p[1]")).Text.Trim();
            var situation = web.FindElement(By.XPath("//*[@id=\"panelId\"]/div[3]/div[1]/div/p")).Text.Trim();
            var modal     = web.FindElement(By.XPath("//*[@id=\"panelId\"]/div[3]/div[2]/div/p")).Text.Trim();
            var publish   = web.FindElement(By.XPath("//*[@id=\"panelId\"]/div[4]/div[1]/div/p")).Text.Trim();
            var opening   = web.FindElement(By.XPath("//*[@id=\"panelId\"]/div[4]/div[2]/div/p")).Text.Trim();

            licitacao.Num          = title.Split('-')[0].Trim();
            licitacao.Processo     = title.Split('-')[0].Trim();
            licitacao.Objeto       = title + " Obs.: Os arquivos do edital podem ser obtidos no site do Compras Rio de Janeiro.";
            licitacao.Departamento = dept;
            licitacao.Situacao     = situation;
            licitacao.Modalidade   = NameToModalidade.ContainsKey(StringHandle.RemoveAccent(modal.ToUpper())) ?
                                     NameToModalidade[StringHandle.RemoveAccent(modal.ToUpper())] : null;
            if (licitacao.Modalidade == null && licitacao.Processo.Contains("PE"))
            {
                licitacao.Modalidade = NameToModalidade["PREGAO ELETRONICO"];
            }

            var orgao = dept.Split('-')[1].Trim();

            licitacao.Orgao = Orgaos.Exists(o => o.Nome == orgao) ?
                              Orgaos.First(o => o.Nome == orgao) :
                              OrgaoRepository.CreateOrgao(orgao, Constants.CRJ_ESTADO_FONTE);
            licitacao.EntregaData  = DateHandle.Parse(publish, "dd/MM/yyyy-hh:mm");
            licitacao.AberturaData = DateHandle.Parse(opening, "dd/MM/yyyy-hh:mm");
            licitacao.Cidade       = Constants.CRJ_ESTADO;
            licitacao.CidadeFonte  = Constants.CRJ_CIDADE_FONTE;

            return(LicitacaoController.IsValid(licitacao, out mensagemErro) ? licitacao : null);
        }
Esempio n. 7
0
        /*Cria os objetos Licitacao, Lote e LicitacaoArquivo fazendo as verificações necessárias.*/
        private static void HandleCreate(HtmlDocument htmlDoc, string ocnum, string situacao)
        {
            try
            {
                Regex  regex = new Regex("\\d{4}OC");
                string ocn   = ocnum;
                ocnum = "1" + regex.Replace(ocnum, DateTime.Now.ToString("yy"));

                //Criar um novo lote se for preciso, verifica o status da oc e também se já esta salva no bd
                if (!string.IsNullOrEmpty(ocn) && !LicitacaoController.ExistsBEC(ocn))
                {
                    //Preenche os dados da licitação e retorna para inserir na lista
                    Licitacao licitacao = CreateLicitacao(htmlDoc, ocnum, situacao);
                    if (licitacao != null && LicitacaoController.IsValid(licitacao, out mensagemErro))
                    {
                        licitacao.Observacoes = ocn;
                        licitacao.LinkEdital  = href.Replace("OC_Item", "Edital");
                        Repo = new LicitacaoRepository();
                        Repo.Insert(licitacao);

                        //licitacoes.Add(licitacao);
                        RService.Log("(HandleCreate) " + Name + ": inserida com sucesso at {0}", Path.GetTempPath() + Name + ".txt");

                        CreateLicitacaoArquivo(licitacao, licitacao.LinkEdital);

                        NumLicitacoes++;
                    }
                    else
                    {
                        RService.Log("Exception (HandleCreate) " + Name + ": A licitação não foi salva - Motivo(s): " + mensagemErro + " at {0}", Path.GetTempPath() + Name + ".txt");
                    }
                }
                else if (!string.IsNullOrEmpty(ocn) && LicitacaoController.ExistsBEC(ocn) && LicitacaoController.SituacaoAlteradaBEC(ocn, situacao))
                {
                    int id = LicitacaoController.GetIdByObservacoes(ocn);
                    LicitacaoController.UpdateSituacaoByIdLicitacao(id, situacao);
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (HandleCreate)" + Name + ":" + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
        }
Esempio n. 8
0
        private static void HandleCreate(HtmlNode lic)
        {
            try
            {
                string   link     = string.Format(Constants.TCMCE_HOST + lic.ChildNodes[1].ChildNodes[0].GetAttributeValue("href", "").ToString());
                string[] licParts = link.Split('/');
                string   licNum   = licParts[7] + licParts[9];

                HtmlDocument licPage  = WebHandle.GetHtmlDocOfPage(link, Encoding.GetEncoding("UTF-8"));
                string       situacao = Regex.Replace(StringHandle.GetMatches(licPage.DocumentNode.InnerHtml, @"Situação:( *)<b>(.*)</b")[0].ToString(), @"Situação:|<b>|</b", "").Trim();

                if (!string.IsNullOrEmpty(licNum) && !LicitacaoController.Exists(licNum))
                {
                    Licitacao l = CreateLicitacao(licPage, link, licNum, situacao);
                    if (l != null)
                    {
                        repo = new LicitacaoRepository();
                        repo.Insert(l);
                        RService.Log("(HandleCreate) " + Name + ": Licitação nº" + licNum + " inserida com sucesso at {0}", Path.GetTempPath() + Name + ".txt");
                        NumLicitacoes++;

                        GetEditalAndArquivos(licPage, l);
                    }
                    else
                    {
                        RService.Log("Exception (HandleCreate) " + Name + ": Licitação não salva. Motivo: " + mensagemErro + " at {0}", Path.GetTempPath() + Name + ".txt");
                    }
                }
                else if (!string.IsNullOrEmpty(licNum) && LicitacaoController.Exists(licNum) && LicitacaoController.SituacaoAlterada(licNum, situacao))
                {
                    Licitacao licitacao = LicitacaoController.GetByIdLicitacaoFonte(licNum);
                    licitacao.Situacao = situacao;

                    repo = new LicitacaoRepository();
                    repo.Update(licitacao);
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (HandleCreate) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
        }
Esempio n. 9
0
        private static void Init()
        {
            RService.Log(name + ": Começando o processamento... at {0}", logPath);

            try
            {
                //Inicializa as listas e variáveis que serão usadas pelo robô
                currentPage      = 1;
                lote             = LoteController.CreateLote(43, 1442);
                Cidades          = CidadeController.GetNameToCidade(Constants.TCEPI_UF);
                NameToOrgao      = OrgaoController.GetNomeUfToOrgao();
                NameToModalidade = ModalidadeController.GetNameToModalidade();
                alreadyInserted  = LicitacaoController.GetAlreadyInserted(1442, DateTime.Today.AddMonths(-3));

                GetLicitacoes();
            }
            catch (Exception e)
            {
                RService.Log("Exception (Init) " + name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", logPath);
            }
        }
Esempio n. 10
0
        /*Cria os objetos Licitacao, Lote e LicitacaoArquivo*/
        private static void HandleCreate(HtmlDocument htmlDocument)
        {
            try
            {
                string linkEdital = Constants.CMG_SITE + Constants.CMG_LINK_EDITAL + htmlDocument.DocumentNode.Descendants("a").SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("arquivoDoEdital")).Attributes["href"].Value;
                /*Verifica se o pregão já não esta na base de dados*/
                if (!string.IsNullOrEmpty(Id) && !LicitacaoController.Exists(Id))
                {
                    Licitacao licitacao = CreateLicitacao(htmlDocument, linkEdital);
                    if (licitacao != null)
                    {
                        Repo.Insert(licitacao);
                        RService.Log("(HandleCreate) " + Name + ": Licitação " + licitacao.IdLicitacaoFonte + " inserida com sucesso at {0}", Path.GetTempPath() + Name + ".txt");

                        CreateLicitacaoArquivo(licitacao, linkEdital);

                        //SegmentarLicitacao(licitacao);

                        NumLicitacoes++;
                    }
                    else
                    {
                        RService.Log("Exception (HandleCreate) " + Name + ": A licitação não foi salva - Motivo(s): " + mensagemErro + " at {0}", Path.GetTempPath() + Name + ".txt");
                    }
                }
                else if (!string.IsNullOrEmpty(Id) && LicitacaoController.Exists(Id) && LicitacaoController.SituacaoAlterada(Id, Situacao))
                {
                    Licitacao licitacao = LicitacaoController.GetByIdLicitacaoFonte(Id);
                    licitacao.Situacao = Situacao;

                    LicitacaoRepository repo = new LicitacaoRepository();
                    repo.Update(licitacao);
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (HandleCreate)" + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
        }
Esempio n. 11
0
        private static void Init()
        {
            RService.Log("(Init) " + Name + ": Buscando licitações homologadas..." + " at {0}", LogPath);
            try
            {
                DateTime dataLimite = DateTime.Today.AddDays(-90);
                repo = new PrecoRepository();

                /*Busca licitações com a data de abertura anterior a 90 dias, ou que ainda não aconteceu*/
                List <Licitacao> licitacoes = LicitacaoController.FindByRangeHistoric(Constants.CN_HOST, dataLimite);

                RService.Log("(Init) " + Name + ": " + licitacoes.Count + " licitacões encontradas at {0}", LogPath);

                foreach (Licitacao licitacao in licitacoes)
                {
                    RService.Log("(Init) " + Name + ": Consultando ata e histórico da licitação " + licitacao.IdLicitacaoFonte + " at {0}", LogPath);
                    ConsultaAtaPregao(licitacao);
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (Init) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", LogPath);
            }
        }
Esempio n. 12
0
        //Pega as licitações da modalidade Dispensa de Licitação
        private static void GetDispensas(string uri)
        {
            RService.Log("(GetDispensas) " + Name + ": Começando o processamento de licitações da modalidade Dispensa de Licitação " + "at {0}", Path.GetTempPath() + Name + ".txt");
            try
            {
                int           index   = 2;
                List <string> listaOC = new List <string>();

                //LoadWebDriver();
                LoadDriver();

                //Acessa a página uma primeira vez para pegar a lista de licitações e salva os números numa lista de strings
                web.Navigate().GoToUrl(uri);
                Thread.Sleep(5000);
                web.FindElement(By.XPath("//*[@id=\"lblLoginFornecedor\"]/a")).Click();
                Thread.Sleep(5000);
                web.FindElement(By.Id("ctl00_c_area_conteudo_bt33022_Pesquisa")).Click();

                var OCs = web.FindElements(By.TagName("tr")).Where(x =>
                                                                   x.GetAttribute("class").Contains("ItemStylePregao") ||
                                                                   x.GetAttribute("class").Contains("AlternatingPregao")).ToList();

                foreach (var oc in OCs)
                {
                    var linkOC = oc.FindElement(By.TagName("a"));

                    if (linkOC.Text.Contains("OC") && !linkOC.Text.Contains("X9"))
                    {
                        string numOC = linkOC.Text + ";1" + linkOC.Text.Replace(DateTime.Today.Year.ToString() + "OC", DateTime.Today.Year.ToString().Remove(0, 2));
                        listaOC.Add(numOC);
                    }
                }

                //Com base na lista de strings, analisa cada uma para ver se ela existe ou não no banco
                foreach (var dispensa in listaOC)
                {
                    try
                    {
                        if (web == null)
                        {
                            LoadDriver();
                        }

                        if (!LicitacaoController.ExistsBEC(dispensa.Split(';')[0]))
                        {
                            web.Navigate().GoToUrl(uri);
                            web.FindElement(By.Id("ctl00_c_area_conteudo_bt33022_Pesquisa")).Click();
                            Thread.Sleep(3000);

                            var rows = web.FindElements(By.TagName("tr")).Where(x =>
                                                                                x.GetAttribute("class").Contains("ItemStylePregao") ||
                                                                                x.GetAttribute("class").Contains("AlternatingPregao")).ToList();
                            foreach (var row in rows)
                            {
                                var link = row.FindElement(By.TagName("a"));

                                /*Dependendo do valor do index, segue uma das duas opções, pois a estrutura da ID
                                 * que puxa o municipio e o objeto muda de acordo com o valor do index da licitação*/
                                if (link.Text == dispensa.Split(';')[0] && index < 10 && !LicitacaoController.ExistsBEC(dispensa.Split(';')[0]))
                                {
                                    string municipio = row.FindElement(By.Id(string.Format("ctl00_c_area_conteudo_grdvOC_publico_ctl0{0}_lbl_municipio", index))).GetAttribute("innerText").ToString();
                                    string objeto    = row.FindElement(By.Id(string.Format("ctl00_c_area_conteudo_grdvOC_publico_ctl0{0}_lbl_natureza_despesa", index))).GetAttribute("innerText").ToString();
                                    string situacao  = row.FindElement(By.Id(string.Format("ctl00_c_area_conteudo_grdvOC_publico_ctl0{0}_lbl_status", index))).GetAttribute("innerText").ToString();
                                    link.Click();
                                    Thread.Sleep(2000);
                                    HandleCreate(web, dispensa.Split(';')[0], municipio, objeto, situacao);
                                    break;
                                }
                                else if (link.Text == dispensa.Split(';')[0] && index > 9 && !LicitacaoController.ExistsBEC(dispensa.Split(';')[0]))
                                {
                                    string municipio = row.FindElement(By.Id(string.Format("ctl00_c_area_conteudo_grdvOC_publico_ctl{0}_lbl_municipio", index))).GetAttribute("innerText").ToString();
                                    string objeto    = row.FindElement(By.Id(string.Format("ctl00_c_area_conteudo_grdvOC_publico_ctl{0}_lbl_natureza_despesa", index))).GetAttribute("innerText").ToString();
                                    string situacao  = row.FindElement(By.Id(string.Format("ctl00_c_area_conteudo_grdvOC_publico_ctl{0}_lbl_status", index))).GetAttribute("innerText").ToString();
                                    link.Click();
                                    Thread.Sleep(2000);
                                    HandleCreate(web, dispensa.Split(';')[0], municipio, objeto, situacao);
                                    break;
                                }
                                index++;
                            }
                            index = 2;
                        }
                    }
                    catch (Exception e)
                    {
                        RService.Log("Exception (GetDispensas) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
                        if (web != null)
                        {
                            web.Close();
                            //web = null;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (GetDispensas) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
        }
Esempio n. 13
0
        /*Criando a licitação com as informações da página*/
        private static Licitacao CreateLicitacao(string numUf)
        {
            RService.Log("(CreateLicitacao) " + Name + ": Criando licitação... " + numUf.Split(':')[0] + " at {0}", Path.GetTempPath() + Name + ".txt");

            Licitacao licitacao = new Licitacao();

            try
            {
                if (web != null)
                {
                    web.Quit();
                }

                var driver = ChromeDriverService.CreateDefaultService();
                driver.HideCommandPromptWindow = true;
                var op = new ChromeOptions();
                op.AddUserProfilePreference("download.default_directory", PathEditais);
                web = new ChromeDriver(driver, new ChromeOptions(), TimeSpan.FromSeconds(300));
                web.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(300);
                wait = new WebDriverWait(web, TimeSpan.FromSeconds(300));


                web.Navigate().GoToUrl(Constants.BB_HOST);
                web.Navigate().GoToUrl(string.Format(Constants.BB_LINK_LICITACAO, numUf.Split(':')[0]));
                Thread.Sleep(2000);

                HandleReCaptcha();

                MatchCollection helper;
                licitacao.IdLicitacaoFonte = long.Parse(numUf.Split(':')[0]);
                licitacao.EstadoFonte      = numUf.Split(':')[1];

                licitacao.Lote       = Lote;
                licitacao.LinkSite   = Constants.BB_HOST;
                licitacao.LinkEdital = string.Format(Constants.BB_LINK_LICITACAO, numUf.Split(':')[0]);
                licitacao.IdFonte    = IdFonte;
                licitacao.Excluido   = 0;
                licitacao.SegmentoAguardandoEdital = 0;
                licitacao.DigitacaoUsuario         = 43; //Robo

                licitacao.Estado = numUf.Split(':')[1];

                IWebElement div       = web.FindElement(By.Id("conteudo"));
                string      innerHtml = Regex.Replace(HttpUtility.HtmlDecode(div.GetAttribute("innerHTML")).Trim(), @"\s+", " ");

                helper           = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Resumo da licit.*?\">(.*?)</div>");
                licitacao.Objeto = helper != null ? helper[0].Groups[1].Value.Trim() : null;

                helper        = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Edital.*?\">(.*?)</div>");
                licitacao.Num = helper != null ? helper[0].Groups[1].Value.Trim() : null;

                helper             = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Processo.*?\">(.*?)</div>");
                licitacao.Processo = helper != null ? helper[0].Groups[1].Value.Trim() : null;

                helper = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Modalidade/tipo.*?\">(.*?)</div>");
                string modalidade = StringHandle.RemoveAccent(innerHtml != null ? helper[0].Groups[1].Value.Trim() : "").ToUpper();
                if (modalidade == "LRE")
                {
                    modalidade = "Licitacao";
                }

                licitacao.Modalidade = NameToModalidade.ContainsKey(modalidade.ToUpper()) ? NameToModalidade[modalidade.ToUpper()] : null;
                if (licitacao.Modalidade.Modalidades == "Pregão")
                {
                    licitacao.Modalidade.Modalidades = "Pregão Eletrônico";
                    licitacao.Modalidade.Id          = 24;
                }

                helper             = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Situa.*?o da licita.*?o.*?\">(.*?)</div>");
                licitacao.Situacao = helper != null ? helper[0].Groups[1].Value.Trim() : null;

                helper = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Abertura das propostas.*?\">(.*?)</div>");
                licitacao.AberturaData = DateHandle.Parse(helper != null ? helper[0].Groups[1].Value.Trim() : null, "dd/MM/yyyy-hh:mm");

                helper = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Início acolhimento de propostas.*?\">(.*?)</div>");
                licitacao.EntregaData = DateHandle.Parse(helper != null ? helper[0].Groups[1].Value.Trim() : null, "dd/MM/yyyy-hh:mm");

                helper = StringHandle.GetMatches(innerHtml, "(?i)>\\s{0,1}Cliente.*?\">(.*?)</div>");
                string orgaoDepartamento = helper != null ? helper[0].Groups[1].Value.Trim() : null;

                helper = StringHandle.GetMatches(orgaoDepartamento, "/(.*)");
                licitacao.Departamento = helper != null ? helper[0].Groups[1].Value.Trim() : null;

                helper = StringHandle.GetMatches(orgaoDepartamento, "(.*?)/");
                string orgao = helper != null ? helper[0].Groups[1].Value.Trim() : null;

                if (orgao != null)
                {
                    licitacao.Orgao = OrgaoController.GetOrgaoByNameAndUf(orgao.Trim().ToUpper() + ":" + numUf.Split(':')[1].Trim().ToUpper(), NameToOrgao);
                }
                else
                {
                    licitacao.Orgao = OrgaoController.FindById(390);//NÃO ESPECIFICADO
                }

                HandleCidade(licitacao, orgao);
            }
            catch (Exception e)
            {
                RService.Log("Exception (CreateLicitacao) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
            finally
            {
                if (web != null)
                {
                    web.Close();
                }
            }

            return(LicitacaoController.IsValid(licitacao, out mensagemErro) ? licitacao : null);
        }
Esempio n. 14
0
        /*Metodo que inicia o processamento de dados*/
        private static void Init()
        {
            RService.Log("(Init) " + Name + ": Começando o processamento... " + "at {0}", Path.GetTempPath() + Name + ".txt");
            try
            {
                Repo = new LicitacaoRepository();

                /*Realiza a atualização das situações das licitações já inseridas*/
                //UpdateLicitacoes();

                /*Inicia listas e dictionary's com informações necessárias*/
                NameToOrgao              = OrgaoController.GetNomeUfToOrgao();
                NameToModalidade         = ModalidadeController.GetNameToModalidade();
                UfToCapital              = CityUtil.GetUfToCapital();
                UfToNomeCidadeToIdCidade = CidadeController.GetUfToNameCidadeToIdCidade();
                Lote = LoteController.CreateLote(43, IdFonte);

                TryReload = true;
                if (DoSearch())
                {
                    /*Percorre cada licitação encontrada*/
                    foreach (var numUf in numUFs)
                    {
                        /*Acessa a página da licitação*/
                        try
                        {
                            if (!LicitacaoController.Exists(numUf.Split(':')[0]))
                            {
                                /*Cria o objeto licitação com as informações da página*/
                                Licitacao licitacao = CreateLicitacao(numUf);

                                if (licitacao != null)
                                {
                                    Repo.Insert(licitacao);
                                    NumLicitacoes++;
                                    RService.Log("(Init) " + Name + ": Licitação inserida com sucesso at {0}", Path.GetTempPath() + Name + ".txt");

                                    /*Segmenta a licitação recém criada*/
                                    //SegmentarLicitacao(licitacao);
                                    DownloadEdAndCreatLicArq(licitacao);
                                }
                                else
                                {
                                    if (licitacao != null && licitacao.Orgao != null)
                                    {
                                        RService.Log("Exception (CreateLicitacao) " + Name + ": A licitação de nº " + licitacao.Num + " e órgão " + licitacao.Orgao.Nome + " - " + licitacao.Orgao.Estado + " não foi salva - Motivo(s): " + mensagemErro + " at {0}", Path.GetTempPath() + Name + ".txt");
                                    }
                                    else
                                    {
                                        RService.Log("Exception (CreateLicitacao) " + Name + ": A licitação de nº " + numUf.Split(':')[0] + " não foi salva - Motivo(s): " + mensagemErro + " at {0}", Path.GetTempPath() + Name + ".txt");
                                    }
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            RService.Log("Exception (Init - CreateLicitacao) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (Init) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
        }
Esempio n. 15
0
        /*Cria uma nova licitacao e o lote se for necessário*/
        public static bool CreateLicitacao()
        {
            try
            {
                string entidadeExecutora   = web.FindElement(By.Id("ctl00_ContentPlaceHolder1_tbnmExecutor")).GetAttribute("value");
                string objeto              = web.FindElement(By.Id("ctl00_ContentPlaceHolder1_tbdsObjeto")).GetAttribute("value");
                string numLicitacao        = web.FindElement(By.Id("ctl00_ContentPlaceHolder1_tbnrProcessoEdital")).GetAttribute("value");
                string preco               = web.FindElement(By.Id("ctl00_ContentPlaceHolder1_tbvlReferencia")).GetAttribute("value");
                string dotacao             = web.FindElement(By.Id("ctl00_ContentPlaceHolder1_tbnrDotacaoOrcamentaria")).GetAttribute("value");
                string modalidade          = web.FindElement(By.Id("ctl00_ContentPlaceHolder1_tbdsModalidadeLicitacao")).GetAttribute("value");
                string numProcesso         = web.FindElement(By.Id("ctl00_ContentPlaceHolder1_tbnrEditalOrigem")).GetAttribute("value");
                string dataLancamento      = web.FindElement(By.Id("ctl00_ContentPlaceHolder1_tbdtLancamentoPublicacao")).GetAttribute("value");
                string precoMax            = web.FindElement(By.Id("ctl00_ContentPlaceHolder1_tbvlReferencia")).GetAttribute("value");
                string dataAberturaEntrega = "";
                if (CidadeAtual == "Diamante do Oeste")
                {
                    CidadeAtual = "Diamante d'Oeste";
                }

                if (Regex.IsMatch(web.PageSource, @"ctl00_ContentPlaceHolder1_tbdtAberturaLicitacao", RegexOptions.IgnoreCase))
                {
                    dataAberturaEntrega = web.FindElement(By.Id("ctl00_ContentPlaceHolder1_tbdtAberturaLicitacao")).GetAttribute("value");

                    //Caso a licitação tenha o campo NOVA Data Abertura preenchido
                    if (Regex.IsMatch(web.PageSource, @"ctl00_ContentPlaceHolder1_tbdtAberturaNova", RegexOptions.IgnoreCase))
                    {
                        string dataNovaAberturaEntrega = web.FindElement(By.Id("ctl00_ContentPlaceHolder1_tbdtAberturaNova")).GetAttribute("value");

                        if (!string.IsNullOrEmpty(dataNovaAberturaEntrega))
                        {
                            dataAberturaEntrega = dataNovaAberturaEntrega;
                        }
                    }

                    string cod  = GenerateCod(entidadeExecutora, dataLancamento, numProcesso, preco);
                    string scod = cod.ToString().Substring(0, 19);

                    long numLong = 0;
                    long numScod = long.TryParse(scod, out numLong) ? numLong : 0;

                    if (!string.IsNullOrEmpty(scod) && !LicitacaoController.Exists(scod))
                    {
                        if (!LicitacaoController.Exists(objeto, preco, "Dotação Orçamentária: " + dotacao, numLicitacao, numProcesso, Constants.TCEPR_HOST))
                        {
                            RService.Log("(CreateLicitacao) " + Name + ": Criando licitação num... " + scod + " at {0}", Path.GetTempPath() + Name + ".txt");

                            Licitacao licitacao = new Licitacao();
                            licitacao.Objeto                   = objeto;
                            licitacao.Processo                 = numProcesso;
                            licitacao.IdLicitacaoFonte         = numScod;
                            licitacao.IdFonte                  = 510;
                            licitacao.Excluido                 = 0;
                            licitacao.SegmentoAguardandoEdital = 0;
                            licitacao.DigitacaoUsuario         = 43; //Robo
                            licitacao.Lote = Lote;
                            //licitacao.DigitacaoData = null;
                            //licitacao.ProcessamentoData = null;

                            licitacao.Observacoes = "Dotação Orçamentária: " + dotacao + " / Data de lançamento do edital pela entidade executora: " + dataLancamento;
                            licitacao.LinkSite    = Constants.TCEPR_HOST;
                            licitacao.Cidade      = CidadeAtual;
                            licitacao.CidadeFonte = CidadeController.GetIdCidade(CidadeAtual, Constants.TCEPR_UF);
                            licitacao.EstadoFonte = Constants.TCEPR_UF;
                            licitacao.Estado      = Constants.TCEPR_ESTADO;
                            licitacao.Modalidade  = NameToModalidade.ContainsKey(StringHandle.RemoveAccent(modalidade).ToUpper()) ? NameToModalidade[StringHandle.RemoveAccent(modalidade).ToUpper()] : null;

                            licitacao.Num          = numLicitacao;
                            licitacao.AberturaData = DateHandle.Parse(dataAberturaEntrega, "dd/MM/yyyy");
                            licitacao.EntregaData  = DateHandle.Parse(dataAberturaEntrega, "dd/MM/yyyy");
                            licitacao.ValorMax     = precoMax;
                            licitacao.Orgao        = OrgaoController.GetOrgaoByNameAndUf(entidadeExecutora.Trim() + ":PR", NameToOrgao);

                            if (LicitacaoController.IsValid(licitacao, out mensagemErro))
                            {
                                Repo.Insert(licitacao);
                                //licitacoes.Add(licitacao);
                                RService.Log("Licitacao salva com sucesso at {0}", Path.GetTempPath() + Name + ".txt");
                                TotalLic++;
                            }
                            else
                            {
                                if (licitacao.Orgao != null)
                                {
                                    RService.Log("Exception (CreateLicitacao) " + Name + ": A licitação de nº " + licitacao.Num + " e órgão " + licitacao.Orgao.Nome + " - " + licitacao.Orgao.Estado + " não foi salva - Motivo(s): " + mensagemErro + " at {0}", Path.GetTempPath() + Name + ".txt");
                                }
                                else
                                {
                                    RService.Log("Exception (CreateLicitacao) " + Name + ": A licitação de nº " + licitacao.Num + " não foi salva - Motivo(s): " + mensagemErro + " at {0}", Path.GetTempPath() + Name + ".txt");
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (CreateLicitacao) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
            return(true);
        }
Esempio n. 16
0
        //Método para pegar as licitações do site do TCE-PI
        private static void GetLicitacoes()
        {
            try
            {
                //var webdriver = WebDriverChrome.LoadWebDriver(name);
                //var webdriver = WebDriverPhantomJS.LoadWebDriver(name, web);
                //web = webdriver.Item1;
                //wait = webdriver.Item2;

                if (web != null)
                {
                    web.Quit();
                }

                var driver = ChromeDriverService.CreateDefaultService();
                driver.HideCommandPromptWindow = true;

                var op = new ChromeOptions();
                op.AddUserProfilePreference("download.default_directory", TCEPIController.pathEditais);

                web = new ChromeDriver(driver, op, TimeSpan.FromSeconds(300));
                web.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(300);
                wait = new WebDriverWait(web, TimeSpan.FromSeconds(300));

                web.Navigate().GoToUrl(Constants.TCEPI_SITE);
                wait.Until(ExpectedConditions.ElementExists(By.XPath("//*[@id=\"formMural:btnPesquisar\"]/span[2]")));
                web.FindElement(By.XPath("//*[@id=\"formMural:btnPesquisar\"]/span[2]")).Click();
                Thread.Sleep(3000);

                /*Laço que se repete até o fim das licitações. O fim é demarcado pela quantidade de licitações na lista licitNums:
                 * em cada página o número é 50, menos na última página. Quando o número for diferente de 50, ele termina*/
                do
                {
                    licitNums = new List <string>();

                    RService.Log("(GetLicitacoes) " + name + ": Acessando página " + currentPage + " at {0}", logPath);

                    string pageHtml = web.PageSource.ToString();
                    var    licits   = StringHandle.GetMatches(pageHtml, @"\?id=\d{6}");

                    //Pega os números das licitações da página em questão
                    foreach (var licit in licits)
                    {
                        string licNum = licit.ToString().Replace("?id=", "");
                        licitNums.Add(licNum);
                    }

                    RService.Log("(GetLicitacoes) " + name + ": Acessando licitações da página " + currentPage + " at {0}", logPath);

                    foreach (string lic in licitNums)
                    {
                        if (!alreadyInserted.Contains(Int64.Parse(lic)))
                        {
                            Licitacao licitacao = CreateLicitacao(lic);
                            if (licitacao != null && !LicitacaoController.Exists(licitacao.IdLicitacaoFonte.ToString()))
                            {
                                repo = new LicitacaoRepository();
                                try
                                {
                                    repo.Insert(licitacao);
                                    RService.Log("(GetLicitacoes) " + name + ": Licitação " + licitacao.IdLicitacaoFonte + " inserida com sucesso at {0}", logPath);
                                    numLicitacoes++;

                                    GetFiles(licitacao);
                                }
                                catch (Exception e)
                                {
                                    RService.Log("Exception (GetLicitacoes) " + name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " / Mensagem de erro: " + mensagemErro + " at {0}", logPath);
                                }
                            }
                        }
                    }

                    //webdriver = WebDriverChrome.LoadWebDriver(name);
                    //web = webdriver.Item1;
                    //wait = webdriver.Item2;

                    web = new ChromeDriver(driver, op, TimeSpan.FromSeconds(300));
                    web.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(300);
                    wait = new WebDriverWait(web, TimeSpan.FromSeconds(300));

                    web.Navigate().GoToUrl(Constants.TCEPI_SITE);
                    web.FindElement(By.XPath("//*[@id=\"formMural:btnPesquisar\"]/span[2]")).Click();
                    for (int i = 0; i < currentPage; i++)
                    {
                        wait.Until(ExpectedConditions.ElementExists(By.XPath("//*[@id=\"formListaLic:listaLic_paginator_top\"]/a[3]")));
                        web.FindElement(By.XPath("//*[@id=\"formListaLic:listaLic_paginator_top\"]/a[3]")).Click();
                        Thread.Sleep(10000);
                    }

                    currentPage++;
                } while (licitNums.Count() == 10);
            }
            catch (Exception e)
            {
                StackTrace st    = new StackTrace(e, true);
                var        frame = st.GetFrame(st.FrameCount - 1);
                var        line  = frame.GetFileLineNumber();
                RService.Log("Exception (GetLicitacoes) " + name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at line " + line + " at {0}", logPath);
            }
        }
Esempio n. 17
0
        //Cria a licitação em questão com os respectivos dados
        private static Licitacao CreateLicitacao(string lic)
        {
            Licitacao licitacao = new Licitacao();

            try
            {
                licitacao.DigitacaoUsuario = 43;
                licitacao.Estado           = Constants.TCEPI_ESTADO;
                licitacao.EstadoFonte      = Constants.TCEPI_UF;
                licitacao.IdLicitacaoFonte = Convert.ToInt64(lic);
                licitacao.IdFonte          = 1442;
                licitacao.LinkEdital       = string.Format(Constants.TCEPI_LICIT, lic);
                licitacao.LinkSite         = Constants.TCEPI_HOST;
                licitacao.Lote             = lote;

                web.Navigate().GoToUrl(licitacao.LinkEdital);

                string licitacaoHtmlText = web.PageSource.ToString();

                var helper = StringHandle.GetMatches(licitacaoHtmlText, "negrito\">(.|\n)*?</span");
                licitacao.Processo    = helper[1].ToString().Replace("negrito\">", "").Replace("</span", "").Replace("Pregão ", "");
                licitacao.Observacoes = null;

                licitacao.AberturaData = Convert.ToDateTime(helper[2].ToString().Replace("negrito\">", "").Replace("</span", ""));
                licitacao.EntregaData  = Convert.ToDateTime(helper[7].ToString().Replace("negrito\">", "").Replace("</span", ""));
                licitacao.ValorMax     = helper[4].ToString().Replace("negrito\">", "").Replace("</span", "");

                var num = web.FindElement(By.XPath("//*[@id=\"j_idt23_content\"]/div[1]/div[2]/span"));
                licitacao.Num = num.Text.Split('º')[1].Trim();
                var modalidade = num.Text.Split('º')[0].Replace(" N", "").Trim();
                licitacao.Modalidade = NameToModalidade.ContainsKey(StringHandle.RemoveAccent(modalidade.ToUpper())) ? NameToModalidade[StringHandle.RemoveAccent(modalidade.ToUpper())] : null;

                if (licitacao.Modalidade == null)
                {
                    licitacao.Modalidade = NameToModalidade["PREGAO"];
                }

                var objeto = web.FindElement(By.XPath("//*[@id=\"j_idt23_content\"]/div[4]/div[2]/label"));
                licitacao.Objeto = objeto.Text.Trim();

                var depto = web.FindElement(By.XPath("//*[@id=\"j_idt20_content\"]/div/div[2]/h2"));
                licitacao.Departamento = depto.Text.Trim();
                licitacao.Orgao        = OrgaoController.GetOrgaoByNameAndUf(licitacao.Departamento + ":PI", NameToOrgao);

                if (licitacao.Departamento.Contains("P. M. DE "))
                {
                    var    textInfo = new CultureInfo("pt-BR").TextInfo;
                    string cidade   = licitacao.Departamento.Remove(0, 9);
                    licitacao.Cidade      = textInfo.ToTitleCase(cidade);
                    licitacao.CidadeFonte = Cidades.ContainsKey(cidade) ? Cidades[licitacao.Cidade.ToUpper()] : CityUtil.GetCidadeFonte(licitacao.Cidade, Cidades);
                }
                else
                {
                    foreach (var cid in Cidades)
                    {
                        if (licitacao.Objeto.Contains(cid.Key))
                        {
                            licitacao.Cidade      = cid.Key;
                            licitacao.CidadeFonte = cid.Value;
                        }
                    }

                    if (string.IsNullOrEmpty(licitacao.Cidade))
                    {
                        licitacao.Cidade      = "Teresina";
                        licitacao.CidadeFonte = 5721;
                    }
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (CreateLicitacao) " + name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", logPath);
            }

            return(LicitacaoController.IsValid(licitacao, out mensagemErro) ? licitacao : null);
        }
Esempio n. 18
0
        /*Cria uma nova licitacao.*/
        private static Licitacao CreateLicitacao(HtmlDocument htmDoc, string ocnum, string situacao)
        {
            RService.Log("(CreateLicitacao) " + Name + ": Criando licitação.. " + ocnum + " at {0}", Path.GetTempPath() + Name + ".txt");
            Licitacao licitacao = new Licitacao();

            try
            {
                licitacao.Lote        = Lote;
                licitacao.LinkSite    = Constants.BEC_SITE;
                licitacao.Modalidade  = Modalidade;
                licitacao.IdFonte     = 507;
                licitacao.EstadoFonte = Constants.BEC_UF;
                licitacao.CidadeFonte = 9668;
                licitacao.Orgao       = Orgao;
                licitacao.Cidade      = Constants.BEC_CIDADE;
                licitacao.Estado      = Constants.BEC_ESTADO;
                licitacao.Excluido    = 0;
                licitacao.SegmentoAguardandoEdital = 0;
                licitacao.DigitacaoUsuario         = 43; //Robo
                licitacao.Situacao = situacao;

                //licitacao.DigitacaoData = null;
                //licitacao.ProcessamentoData = null;

                licitacao.Num = ocnum;
                licitacao.IdLicitacaoFonte = long.Parse(ocnum);
                licitacao.Departamento     = htmDoc.DocumentNode.Descendants("span").SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("ctl00_wucOcFicha_txtNomUge")).InnerText.Trim();
                int count;

                string city = htmDoc.DocumentNode.Descendants("span").SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("ctl00_wucOcFicha_txtDescricaoEnteFederativo")).InnerText.Trim();
                if (city != "GOVERNO DO ESTADO DE SÃO PAULO")
                {
                    city = StringHandle.RemoveAccent(city);
                    foreach (var cidade in Cidades)
                    {
                        if (city.Contains(cidade.Key))
                        {
                            licitacao.Cidade      = cidade.Key;
                            licitacao.CidadeFonte = cidade.Value;
                            break;
                        }
                    }
                }

                /*Percorre os links da OC para montar o objeto licitação*/
                bool findFirstEditalLink = false;
                bool findFirstOcLink     = false;
                foreach (HtmlNode htmNode in htmDoc.DocumentNode.Descendants("li"))
                {
                    /*Link onde ficam os arquivos do edital*/
                    HtmlNode htmlNodeInNode = htmNode.SelectSingleNode("a");

                    if (htmlNodeInNode != null)
                    {
                        if (htmlNodeInNode.Attributes.Contains("href") && htmlNodeInNode.Attributes["href"].Value.Contains("bec_pregao_UI/Edital") && !findFirstEditalLink)
                        {
                            licitacao.LinkEdital = htmlNodeInNode.Attributes["href"].Value.Trim();
                            findFirstEditalLink  = true;
                        }
                        /*Link para a pag onde ficam as datas*/
                        if (htmlNodeInNode.Attributes.Contains("href") && htmlNodeInNode.Attributes["href"].Value.Contains("bec_pregao_UI/Agendamento"))
                        {
                            /*Html da pág onde ficam as datas*/
                            HtmlDocument htmDocAgendamento = WebHandle.GetHtmlDocOfPage(htmlNodeInNode.Attributes["href"].Value);
                            /*Tabela de datas, agendamentos*/
                            HtmlNode table = htmDocAgendamento.DocumentNode.Descendants("table").SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("ctl00_conteudo_grd"));
                            /*Cada célula da tabela*/
                            List <HtmlNode> tds = table.Descendants("td").ToList();
                            count = 0;
                            foreach (HtmlNode inf in tds)
                            {
                                /*Célula com o label ENTREGA DE PROPOSTA, na célula seguinte ficam as datas*/
                                if (inf.InnerText.ToUpper().Trim().Contains("ENTREGA DE PROPOSTA"))
                                {
                                    MatchCollection matches = StringHandle.GetMatches(tds[count + 1].InnerText.Trim(), @"(\d{2}\/\d{2}\/\d{4}\s+\d{2}:\d{2})");
                                    licitacao.EntregaData  = DateHandle.Parse(matches[0].Groups[1].Value, "dd/MM/yyyy hh:mm");
                                    licitacao.AberturaData = DateHandle.Parse(matches[1].Groups[1].Value, "dd/MM/yyyy hh:mm");
                                    break;
                                }
                                count++;
                            }
                        }
                        /*Link com dados da OC*/
                        if (htmlNodeInNode.Attributes.Contains("href") && htmlNodeInNode.Attributes["href"].Value.Contains("bec_pregao_UI/OC") && !findFirstOcLink)
                        {
                            HtmlDocument htmDocFasePrep = WebHandle.GetHtmlDocOfPage(htmlNodeInNode.Attributes["href"].Value);
                            licitacao.Endereco = Regex.Replace(htmDocFasePrep.DocumentNode.Descendants("span").SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("ctl00_conteudo_Wuc_OC_Ficha2_txtEndUge")).InnerText.Trim(), @"\s+", " ");
                            licitacao.Objeto   = "Contratação de " + Regex.Replace(htmDocFasePrep.DocumentNode.Descendants("span").SingleOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("ctl00_conteudo_Wuc_OC_Ficha2_txtNaturezaJuridica")).InnerText.Trim(), @"\s+", " ");
                            findFirstOcLink    = true;
                        }
                    }
                }

                licitacao.ItensLicitacao = licitacao.ItensLicitacao ?? new List <ItemLicitacao>();

                CreateItensLicitacao(htmDoc, licitacao);
            }
            catch (Exception e)
            {
                RService.Log("Exception (CreateLicitacao) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }

            return(LicitacaoController.IsValid(licitacao, out mensagemErro) ? licitacao : null);
        }
Esempio n. 19
0
        /*Cria uma nova licitação para a modalidade Carta Convite*/
        private static Licitacao CreateLicitacao(HtmlDocument htmDoc, string ocnum, string situacao)
        {
            RService.Log("(CreateLicitacao) " + Name + ": Criando licitação.. " + ocnum + " at {0}", Path.GetTempPath() + Name + ".txt");
            Licitacao licitacao = new Licitacao();

            try
            {
                licitacao.Lote                     = Lote;
                licitacao.Num                      = ocnum;
                licitacao.IdLicitacaoFonte         = long.Parse(ocnum);
                licitacao.SegmentoAguardandoEdital = 0;
                licitacao.DigitacaoUsuario         = 43; //Robo

                licitacao.Modalidade = Modalidades[0];
                licitacao.LinkSite   = Constants.BEC_SITE;
                licitacao.Orgao      = Orgao;
                licitacao.IdFonte    = 507;
                licitacao.Excluido   = 0;
                licitacao.Situacao   = situacao;

                int count = 0;
                /*Tabela com as informações da OC*/
                var dadosOc = htmDoc.DocumentNode.Descendants().SingleOrDefault(x => x.Id == "ctl00_DetalhesOfertaCompra1_UpdatePanel1");
                /*Percorre todas as colunas de todas as linhas dessa tabela*/
                List <HtmlNode> inf = dadosOc.Descendants("td").ToList();
                foreach (var data in inf)
                {
                    if (data.InnerText.Trim().Contains("Proposta"))
                    {
                        MatchCollection matches = StringHandle.GetMatches(data.InnerText.Trim(), @"(\d{2}\/\d{2}\/\d{4}\s+\d{2}:\d{2}:\d{2})");
                        if (matches != null)
                        {
                            licitacao.EntregaData  = DateHandle.Parse(matches[0].Groups[1].Value, "dd/MM/yyyy hh:mm:ss");
                            licitacao.AberturaData = DateHandle.Parse(matches[1].Groups[1].Value, "dd/MM/yyyy hh:mm:ss");

                            if (licitacao.AberturaData < DateTime.Today)
                            {
                                return(null);
                            }
                        }
                    }
                    else if (data.InnerText.Trim().Contains("UC"))
                    {
                        licitacao.Departamento = data.InnerText.Split(':')[1].Trim();
                    }
                    count++;
                }

                var dadosUC = htmDoc.DocumentNode.Descendants().FirstOrDefault(x => x.Id == "formulario");
                /*Percorre todas as colunas de todas as linhas dessa tabela*/
                List <HtmlNode> infUC = dadosUC.Descendants("span").ToList();
                foreach (var info in infUC)
                {
                    if (info.Id.Equals("ctl00_c_area_conteudo_wuc_dados_oc1_txt_endereco_uge"))
                    {
                        licitacao.Endereco = info.InnerText.Trim();
                    }
                    else if (info.Id.Equals("ctl00_c_area_conteudo_wuc_dados_oc1_txt_local_entrega"))
                    {
                        string   localidade   = info.InnerText.Split('-').Last().ToString();
                        string[] cidadeEstado = localidade.Split('/');
                        string   cidade       = cidadeEstado.Last().ToString().ToLower().Trim();

                        //CultureInfo para poder tornar apenas as iniciais maiúsculas
                        var textInfo = new CultureInfo("pt-BR").TextInfo;

                        licitacao.Cidade      = textInfo.ToTitleCase(cidade).ToString();
                        licitacao.Estado      = Constants.BEC_ESTADO;
                        licitacao.EstadoFonte = Constants.BEC_UF;

                        cidade = licitacao.Cidade.ToString();

                        licitacao.CidadeFonte = Cidades.ContainsKey(cidade) ? Cidades[cidade] : CityUtil.GetCidadeFonte(cidade, Cidades);
                    }
                    else if (info.Id.Equals("ctl00_c_area_conteudo_wuc_dados_oc1_txt_natureza_despesa"))
                    {
                        licitacao.Objeto = "Contratação de " + info.InnerText.ToString().Trim();
                    }
                }

                NameValueCollection formData = new NameValueCollection();
                href = href.Replace("Fornecedores_Dados_OC", "OC_Item");
                var htmItens = WebHandle.GetHtmlDocOfPageDefaultEncoding(href, formData);
                licitacao.ItensLicitacao = licitacao.ItensLicitacao ?? new List <ItemLicitacao>();

                /*Contador das linhas da tabela*/
                CreateItensLicitacao(htmItens, licitacao);
            }
            catch (Exception e)
            {
                RService.Log("Exception (CreateLicitacao)" + Name + ":" + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }

            return(LicitacaoController.IsValid(licitacao, out mensagemErro) ? licitacao : null);
        }
Esempio n. 20
0
        private static Licitacao CreateLicitacao(string licitLink, int index)
        {
            ChromeDriver webLicit = null;

            if (web != null)
            {
                web.Quit();
            }

            var driver = ChromeDriverService.CreateDefaultService();

            driver.HideCommandPromptWindow = true;
            var op = new ChromeOptions();

            webLicit = new ChromeDriver(driver, new ChromeOptions(), TimeSpan.FromSeconds(300));
            webLicit.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(300);
            wait = new WebDriverWait(web, TimeSpan.FromSeconds(300));

            Licitacao licitacao = new Licitacao();

            licitacao.IdLicitacaoFonte = Convert.ToInt64(licitLink.Split('=')[1].Split('&')[0]);
            licitacao.IdFonte          = 1250;
            licitacao.Estado           = Constants.TCESE_ESTADO;
            licitacao.EstadoFonte      = Constants.TCESE_UF;
            licitacao.LinkEdital       = licitLink;
            licitacao.LinkSite         = Constants.TCESE_HOST;
            licitacao.DigitacaoUsuario = 43;
            licitacao.Lote             = Lote;
            //licitacao.DigitacaoData = null;
            //licitacao.ProcessamentoData = null;

            try
            {
                webLicit.Navigate().GoToUrl(licitLink);
                string licitText = webLicit.FindElement(By.XPath("//*[@id=\"aspnetForm\"]/table[3]/tbody/tr/td[2]")).Text;
                var    textInfo  = new CultureInfo("pt-BR").TextInfo;

                string dataAb = webLicit.FindElement(By.Id("ctl00_ContentPlaceHolder1_lblCte_DtLicitacaoMIA")).Text;
                licitacao.AberturaData = Convert.ToDateTime(StringHandle.GetMatches(dataAb, @"\d+/\d+/\d+")[0].ToString());
                string dataEnt = webLicit.FindElement(By.Id("ctl00_ContentPlaceHolder1_lblCto_DtModificacaoMIA")).Text;
                licitacao.EntregaData = Convert.ToDateTime(dataEnt);

                licitacao.Cidade      = Constants.TCESE_MUN_NAME[index].Replace("PREFEITURA MUNICIPAL DE ", "");
                licitacao.CidadeFonte = Cidades.ContainsKey(licitacao.Cidade) ? Cidades[licitacao.Cidade] : CityUtil.GetCidadeFonte(licitacao.Cidade, Cidades);

                licitacao.Departamento = Constants.TCESE_MUN_NAME[index];
                licitacao.Endereco     = webLicit.FindElement(By.Id("ctl00_ContentPlaceHolder1_lblCte_LocalMIA")).Text;
                string modal = StringHandle.GetMatches(licitText, @"Modalidade:(.*?)Número")[0].ToString().Split(':')[1].Replace(" Número", "").Trim();
                licitacao.Modalidade  = NameToModalidade.ContainsKey(StringHandle.RemoveAccent(modal.ToUpper())) ? NameToModalidade[StringHandle.RemoveAccent(modal.ToUpper())] : null;
                licitacao.Num         = StringHandle.GetMatches(licitText, "Ano:(.*)")[0].ToString().Replace("Ano:", "").Replace("\r", "");
                licitacao.Objeto      = webLicit.FindElement(By.Id("ctl00_ContentPlaceHolder1_lblCto_ResumoMIA")).Text;
                licitacao.Observacoes = webLicit.FindElement(By.Id("ctl00_ContentPlaceHolder1_lblCto_ConteudoMIA")).Text;
                licitacao.Orgao       = OrgaoController.GetOrgaoByNameAndUf(textInfo.ToTitleCase(licitacao.Departamento) + ":SE", NameToOrgao);
            }
            catch (Exception e)
            {
                RService.Log("Exception (CreateLicitacao) " + name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", logPath);
            }
            finally
            {
                if (webLicit != null)
                {
                    webLicit.Close();
                }
            }

            return(LicitacaoController.IsValid(licitacao, out mensagemErro) ? licitacao : null);
        }
Esempio n. 21
0
        private static void HandleLicitacoes(int index)
        {
            RService.Log("(HandleLicitacoes) " + name + ": Consultando licitações da " + Constants.TCESE_MUN_NAME[index] + " at {0}", logPath);

            //LoadWebDriver();
            LoadDriver();

            try
            {
                string urlMunicipio = string.Format(Constants.TCESE_MUN_PAGE, Constants.TCESE_MUN_CODE[index], Constants.TCESE_MUN_NAME[index].Replace(" ", "%20"));
                temLicitacao = false;

                web.Navigate().GoToUrl(urlMunicipio);

                var licits = web.FindElements(By.TagName("a")).Where(x => x.GetAttribute("innerText").Contains("Ano/Número:"));

                repo = new LicitacaoRepository();

                foreach (var licit in licits)
                {
                    var dates = StringHandle.GetMatches(licit.Text, @"\d+/\d+/\d+");

                    if (Convert.ToDateTime(dates[0].Value) > DateTime.Today)
                    {
                        temLicitacao = true;
                        var       licitLink = licit.GetAttribute("href");
                        Licitacao licitacao = CreateLicitacao(licitLink, index);

                        if (licitacao != null)
                        {
                            if (!LicitacaoController.Exists(licitacao.IdLicitacaoFonte.ToString()))
                            {
                                repo.Insert(licitacao);
                                //licitacoes.Add(licitacao);

                                RService.Log("(HandleLicitacoes) " + name + ": Licitação Nº" + licitacao.IdLicitacaoFonte + " inserida com sucesso at {0}", logPath);
                                numLicitacoes++;
                            }
                        }
                        else
                        {
                            RService.Log("Exception (CreateLicitacao) " + name + ": Licitação não salva. Motivo: " + mensagemErro + " at {0}", logPath);
                        }
                    }
                }

                if (!temLicitacao)
                {
                    RService.Log("(HandleLicitacoes) " + name + ": " + Constants.TCESE_MUN_NAME[index] + " não possui licitações novas at {0}", logPath);
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (HandleLicitacoes) " + name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", logPath);
            }
            finally
            {
                if (web != null)
                {
                    web.Close();
                }
            }
        }
Esempio n. 22
0
        private static void GetLicitacoes(List <string> licitLinks)
        {
            foreach (var link in licitLinks)
            {
                try
                {
                    if (web != null)
                    {
                        web.Quit();
                    }

                    var driver = ChromeDriverService.CreateDefaultService();
                    driver.HideCommandPromptWindow = true;
                    var op = new ChromeOptions();
                    op.AddUserProfilePreference("download.default_directory", PathEditais);
                    web = new ChromeDriver(driver, new ChromeOptions(), TimeSpan.FromSeconds(300));
                    web.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(300);
                    wait = new WebDriverWait(web, TimeSpan.FromSeconds(300));

                    web.Navigate().GoToUrl(link);

                    CheckReCaptcha(web.PageSource);

                    var situacao  = web.FindElement(By.XPath("//*[@id=\"report_38717872527149671_catch\"]/dl/dd[4]")).Text;
                    var andamento = web.FindElement(By.XPath("//*[@id=\"L38976648273068799\"]/div/span[2]"));

                    if (!situacao.Contains("Encerrada") || !andamento.Text.Contains("Ativo"))
                    {
                        Licitacao licitacao = CreateLicitacao(link, situacao);

                        try
                        {
                            if (LicitacaoController.IsValid(licitacao, out mensagemErro) && !LicitacaoController.ExistsTCERS(licitacao.IdLicitacaoFonte, Constants.TCERS_ID_FONTE) /*!AlreadyInserted.Contains(licitacao.IdLicitacaoFonte)*/)
                            {
                                repo.Insert(licitacao);
                                NumLicitacoes++;
                                RService.Log("(GetLicitacoes) " + Name + ": Licitação nº" + licitacao.Num + " salva com sucesso at {0}", LogPath);

                                //GetArquivos(licitacao);
                            }
                            else if (!string.IsNullOrEmpty(mensagemErro))
                            {
                                RService.Log("Exception (GetLicitacoes - Insert) " + Name + ": " + mensagemErro + " at {0}", LogPath);
                            }
                            else
                            {
                                RService.Log("Exception (GetLicitacoes - Insert) " + Name + ": Licitação já capturada anteriormente at {0}", LogPath);
                            }
                        }
                        catch (Exception e)
                        {
                            RService.Log("Exception (GetLicitacoes - Insert) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", LogPath);
                        }
                    }
                }
                catch (Exception e)
                {
                    if (web.FindElement(By.Id("g-recaptcha-response")) != null)
                    {
                        RService.Log("Exception (GetLicitacoes) " + Name + ": Encontrado recaptcha! at {0}", LogPath);
                    }

                    RService.Log("Exception (GetLicitacoes) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", LogPath);
                }
            }
        }
Esempio n. 23
0
        /*Cria uma nova licitação para a modalidade Dispensa de Licitação.*/
        private static Licitacao CreateLicitacao(ChromeDriver web, string ocnum, string municipio, string objeto, string situacao)
        {
            RService.Log("(CreateLicitacao) " + Name + ": Criando licitação.. " + ocnum + " at {0}", Path.GetTempPath() + Name + ".txt");

            Licitacao licitacao = new Licitacao();

            try
            {
                licitacao.Lote                     = Lote;
                licitacao.Num                      = ocnum;
                licitacao.IdLicitacaoFonte         = long.Parse(ocnum);
                licitacao.SegmentoAguardandoEdital = 0;
                licitacao.DigitacaoUsuario         = 43; //Robo

                licitacao.Modalidade = Modalidades[1];
                licitacao.LinkSite   = Constants.BEC_SITE;
                licitacao.Orgao      = Orgao;
                licitacao.IdFonte    = 507;
                licitacao.Excluido   = 0;
                licitacao.Situacao   = situacao;

                licitacao.Departamento = web.FindElement(By.Id("ctl00_DetalhesOfertaCompra1_txtNomUge")).Text;

                //Busca as datas dentro da página da licitação
                string          dates   = web.FindElement(By.Id("ctl00_DetalhesOfertaCompra1_txtPerCotEletronica")).Text.Replace(" às", "").Replace(" a", "");
                MatchCollection matches = StringHandle.GetMatches(dates, @"(\d{2}\/\d{2}\/\d{4}\s+\d{2}:\d{2}:\d{2})");
                if (matches != null)
                {
                    licitacao.EntregaData  = DateHandle.Parse(matches[0].Groups[1].Value, "dd/MM/yyyy hh:mm:ss");
                    licitacao.AberturaData = DateHandle.Parse(matches[1].Groups[1].Value, "dd/MM/yyyy hh:mm:ss");

                    if (licitacao.AberturaData < DateTime.Today)
                    {
                        return(null);
                    }
                }

                //CultureInfo para tratar o nome do município
                var textInfo = new CultureInfo("pt-BR").TextInfo;
                municipio = municipio.ToLower();

                licitacao.Cidade      = textInfo.ToTitleCase(municipio).ToString();
                licitacao.Estado      = Constants.BEC_ESTADO;
                licitacao.EstadoFonte = Constants.BEC_UF;
                licitacao.CidadeFonte = Cidades.ContainsKey(licitacao.Cidade) ? Cidades[licitacao.Cidade] : CityUtil.GetCidadeFonte(licitacao.Cidade, Cidades);

                licitacao.Objeto = "Contratação de " + objeto;

                //Acessa a página com os itens da licitação
                web.FindElement(By.XPath("//*[@id=\"topMenu\"]/li[2]/a")).Click();
                Thread.Sleep(3000);
                licitacao.ItensLicitacao = licitacao.ItensLicitacao ?? new List <ItemLicitacao>();
                CreateItensLicitacao(web, licitacao);
            }
            catch (Exception e)
            {
                RService.Log("Exception (CreateLicitacao)" + Name + ":" + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }

            return(LicitacaoController.IsValid(licitacao, out mensagemErro) ? licitacao : null);
        }
        private static void HandleCreate(HtmlDocument htmlDoc, HtmlNode row)
        {
            try
            {
                if (row.InnerHtml.Contains("href"))
                {
                    string       situacao;
                    string       quoteLink = row.ChildNodes[3].ChildNodes["a"].Attributes["href"].Value.ToString();
                    HtmlDocument htmlQuote = WebHandle.GetHtmlDocOfPage(string.Format(Constants.CN_COTACAO_LINK, quoteLink), Encoding.GetEncoding("ISO-8859-1"));
                    Licitacao    l         = CreateQuote(htmlQuote, quoteLink, out situacao);
                    //RandomSleep();
                    if (l != null && !repo.Exists(l.IdLicitacaoFonte.ToString()))
                    {
                        repo.Insert(l);
                        numCotacoes++;
                        RService.Log("Cotação " + l.IdLicitacaoFonte + " inserida com sucesso" + " at {0}", Path.GetTempPath() + Name + ".txt");

                        //SegmentarCotacao(l);
                    }
                    else if (l != null && repo.Exists(l.IdLicitacaoFonte.ToString()) && LicitacaoController.SituacaoAlterada(l.IdLicitacaoFonte.ToString(), situacao))
                    {
                        l          = repo.GetByIdLicitacaoFonte(l.IdLicitacaoFonte.ToString());
                        l.Situacao = situacao;

                        repo.Update(l);
                    }
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (HandleCreate) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
        }
Esempio n. 25
0
        private static Licitacao CreateLicitacao(HtmlDocument licPage, string link, string num, string situacao)
        {
            RService.Log("(CreateLicitacao) " + Name + ": Criando licitação " + num + " at {0}", Path.GetTempPath() + Name + ".txt");

            Licitacao licitacao = new Licitacao();

            try
            {
                licitacao.IdLicitacaoFonte = Convert.ToInt64(num);
                licitacao.IdFonte          = 1249;
                licitacao.Estado           = Constants.TCMCE_ESTADO;
                licitacao.EstadoFonte      = Constants.TCMCE_UF;
                licitacao.LinkEdital       = link;
                licitacao.LinkSite         = Constants.TCMCE_HOST;
                licitacao.Lote             = Lote;

                var licInfo = licPage.DocumentNode.ChildNodes[2].ChildNodes[5].ChildNodes[5].InnerHtml;

                string city   = Regex.Replace(StringHandle.GetMatches(licInfo, @"h2>(.*)\|")[0].ToString(), @"h2>|\|", "").Trim();
                string orgao  = Regex.Replace(StringHandle.GetMatches(licInfo, @"\|(.*)<")[0].ToString(), @"(\|)|<", "").Trim();
                string numero = Regex.Replace(StringHandle.GetMatches(licInfo, @"h1>(.*)</h1")[0].ToString(), @"h1>Licitação:|</h1", "").Trim();
                string obj    = Regex.Replace(StringHandle.GetMatches(licInfo, @"Objeto:( *)<b>(.|\n)*?</b>")[0].ToString(), @"Objeto:|<b>|</b>", "").Trim();
                string modal  = Regex.Replace(StringHandle.GetMatches(licInfo, @"Modalidade:( *)<b>(.*)</b>")[0].ToString(), @"Modalidade:|<b>|</b>", "").Split('|')[0].Trim();
                if (modal == "Concorrência Pública")
                {
                    modal = "Concorrência";
                }
                string dataAb   = Regex.Replace(StringHandle.GetMatches(licInfo, @"Data( *)de( *)Abertura:( *)<b>(.*)</b>")[0].ToString(), @"Data( *)de( *)Abertura:|<b>|</b>", "").Split('|')[0].Trim();
                string horaAb   = Regex.Replace(StringHandle.GetMatches(licInfo, @"Hora( *)da( *)Abertura:( *)<b>(.*)</b>")[0].ToString(), @"Hora( *)da( *)Abertura:|<b>|</b>", "").Trim();
                string endereco = Regex.Replace(StringHandle.GetMatches(licInfo, @"Local:( *)<b>(.*)</b>")[0].ToString(), @"Local:|<b>|</b>", "").Trim();
                string processo = Regex.Replace(StringHandle.GetMatches(licInfo, @"Administrativo:( *)<b>(.*)<")[0].ToString(), @"Administrativo:|<b>|<", "").Trim();
                string dpto     = "";
                if (Regex.IsMatch(licInfo, @"Órgãos</b>", RegexOptions.IgnoreCase))
                {
                    dpto = Regex.Replace(StringHandle.GetMatches(licInfo, @"Órgãos</b>(.|\n)*?</li")[0].ToString(), @"Órgãos|</b>|<ul>|<li>|</li", "").Trim();
                }
                string obs = Regex.Replace(StringHandle.GetMatches(licInfo, @"Objeto/Lote/Item(.|\n)*?</b")[0].ToString(), @"Objeto/Lote/Item:|<b>|</b", "").Trim();

                city = city.ToLower();
                var textInfo = new CultureInfo("pt-BR").TextInfo;

                licitacao.Cidade      = textInfo.ToTitleCase(city).ToString();
                licitacao.CidadeFonte = Cidades.ContainsKey(licitacao.Cidade.ToUpper()) ? Cidades[licitacao.Cidade.ToUpper()] : CityUtil.GetCidadeFonte(licitacao.Cidade, Cidades);

                licitacao.Departamento = dpto;
                licitacao.Orgao        = OrgaoController.GetOrgaoByNameAndUf(orgao + ":CE", NameToOrgao);
                if (licitacao.Orgao.Nome == "Prefeitura Municipal")
                {
                    licitacao.Orgao.Nome = "Prefeitura Municipal de " + licitacao.Cidade;
                }
                licitacao.Num          = numero;
                licitacao.Processo     = processo;
                licitacao.AberturaData = DateHandle.Parse(dataAb + " " + horaAb, "dd/MM/yyyy hh:mm:ss");
                licitacao.EntregaData  = licitacao.AberturaData;
                licitacao.Modalidade   = NameToModalidade.ContainsKey(StringHandle.RemoveAccent(modal.ToUpper())) ? NameToModalidade[StringHandle.RemoveAccent(modal.ToUpper())] : null;
                licitacao.Situacao     = situacao;
                licitacao.Objeto       = obj;
                licitacao.Observacoes  = obs;
                licitacao.Endereco     = endereco;

                licitacao.DigitacaoUsuario = 43; //Id do Robô no sistema LM
                //licitacao.DigitacaoData = null;
                //licitacao.ProcessamentoData = null;
            }
            catch (Exception e)
            {
                RService.Log("Exception (CreateLicitacao) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }

            return(LicitacaoController.IsValid(licitacao, out mensagemErro) ? licitacao : null);
        }
        private static Licitacao CreateQuote(HtmlDocument htmlQuote, string quoteLink, out string situacao)
        {
            Licitacao l     = new Licitacao();
            int       count = 0;

            situacao = null;

            try
            {
                l.IdFonte    = 508;
                l.LinkEdital = string.Format(Constants.CN_COTACAO_LINK, quoteLink);
                l.LinkSite   = Constants.CN_HOST;
                l.Excluido   = 0;
                l.SegmentoAguardandoEdital = 0;
                l.DigitacaoUsuario         = 43; //Robo
                l.Lote           = lote;
                l.Modalidade     = nameToModalidade.ContainsKey("COTACAO ELETRONICA") ? nameToModalidade["COTACAO ELETRONICA"] : null;
                l.ItensLicitacao = l.ItensLicitacao ?? new List <ItemLicitacao>();

                foreach (var row in htmlQuote.DocumentNode.Descendants("tr").Where(x => x.Attributes.Contains("height")))
                {
                    switch (count)
                    {
                    case 0:
                        string uasg         = row.InnerText.Split('-')[0].TrimEnd().Replace("UASG: ", "");
                        string departamento = string.Empty;
                        if (row.InnerText.Split('-').Count() > 2)
                        {
                            for (int i = 1; i < row.InnerText.Split('-').Count(); i++)
                            {
                                if (i != 1)
                                {
                                    departamento = departamento + "-" + row.InnerText.Split('-')[i].TrimStart();
                                }
                                else
                                {
                                    departamento = row.InnerText.Split('-')[i].TrimStart();
                                }
                            }
                        }
                        else
                        {
                            departamento = row.InnerText.Split('-')[1].TrimStart();
                        }
                        l.Uasg         = uasg;
                        l.Departamento = departamento;
                        break;

                    case 1:
                        string numero = row.InnerText.Split(':')[1].TrimStart();
                        l.Num = numero;
                        break;

                    case 2:
                        string objeto = row.InnerText.Replace("Objeto: ", string.Empty);
                        l.Objeto = objeto;
                        break;

                    case 3:
                        string dataEntrega = row.InnerText.Split(':')[1].TrimStart();
                        l.EntregaData = Convert.ToDateTime(dataEntrega);
                        break;

                    case 4:
                        string       obsLink = row.ChildNodes[0].ChildNodes[1].Attributes["href"].Value.ToString().Remove(0, 8);
                        HtmlDocument htmlObs = WebHandle.GetHtmlDocOfPage(string.Format(Constants.CN_COTACAO_LINK, obsLink), Encoding.GetEncoding("ISO-8859-1"));
                        string       obs     = Regex.Replace(htmlObs.DocumentNode.InnerHtml.ToString(), "<.*?>", string.Empty)
                                               .Replace("\n\n\n\n  \tCOMPRASNET - O Portal de Compras do Governo Federal :: Observações Gerais da Cotação Eletrônica.\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\n\n    function erroLogin(){\n        window.opener.erroLogin();\n        window.close();\n    }\n\n\n\n    function popup(ev, elA, features) {\n        var url, target;\n        url = elA.getAttribute(\"href\");\n        target = elA.getAttribute(\"target\");\n        window.open(url, target, features);\n\n        if (ev.cancelBubble != undefined) { //IE\n            ev.cancelBubble = true; \n            ev.returnValue = false;\n        }\n        if (ev.preventDefault) ev.preventDefault(); //Outros\n    }\n\n\n\n\n\n\nAguarde!\n\n\nObservações Gerais da Cotação Eletrônica\n\r\n              ", string.Empty)
                                               .Replace("  ", string.Empty);
                        if (icms)
                        {
                            l.Observacoes = "ICMS: Sim\n\n" + obs;
                        }
                        else
                        {
                            l.Observacoes = "ICMS: Não\n\n" + obs;
                        }
                        break;

                    case 5:
                        situacao   = Regex.Replace(StringHandle.GetMatches(row.InnerHtml, @"Situação:( *)</b><span(.*?)>(.*?)</span")[0].ToString(), @"Situação:|</b><span(.*?)>|</span", "").Trim();
                        l.Situacao = situacao;
                        break;

                    case 6:
                        string dataAbertura = row.InnerText.Split(':')[1].TrimStart().Split('(')[0].Replace('h', ':');
                        l.AberturaData = DateHandle.Parse(dataAbertura, "dd/MM/yyyy hh:mm");
                        break;

                    case 7:
                        string valor = row.InnerText.Split(':')[1].TrimStart();
                        l.ValorMax = valor;
                        break;
                    }
                    count++;
                }

                l.IdLicitacaoFonte = Convert.ToInt64(l.Uasg + l.Num.ToString());

                Licitacao oldLic = LicitacaoRepository.FindByUASG(l.Uasg);

                if (oldLic != null)
                {
                    l.Orgao       = oldLic.Orgao;
                    l.EstadoFonte = oldLic.EstadoFonte;
                    l.CidadeFonte = oldLic.CidadeFonte;
                    l.Endereco    = oldLic.Endereco;
                    l.Cidade      = oldLic.Cidade;
                    l.Estado      = oldLic.Estado;
                }
                else
                {
                    l.Orgao = OrgaoRepository.FindOrgao(l.Departamento);
                    if (l.Orgao == null)
                    {
                        Orgao           org  = OrgaoRepository.CreateOrgao(l.Departamento, l.Observacoes);
                        OrgaoRepository repo = new OrgaoRepository();
                        repo.Insert(org);
                        l.Orgao = org;
                    }
                    l.Estado      = l.Orgao.Estado;
                    l.EstadoFonte = l.Orgao.Estado;
                    l.Cidade      = ufToCapital.ContainsKey(l.EstadoFonte) ? ufToCapital[l.EstadoFonte] : null;
                    Dictionary <string, int?> ufToCidade = ufToNomeCidadeToIdCidade.ContainsKey(l.EstadoFonte) ? ufToNomeCidadeToIdCidade[l.EstadoFonte] : null;
                    l.CidadeFonte = ufToCidade != null?ufToCidade.ContainsKey(StringHandle.RemoveAccent(l.Cidade.ToUpper())) ? ufToCidade[StringHandle.RemoveAccent(l.Cidade.ToUpper())] : CityUtil.GetCidadeFonte(l.Cidade, ufToCidade) : CityUtil.GetCidadeFonte(l.Cidade, ufToCidade);

                    l.Endereco = null;
                }

                GetItens(htmlQuote, l);

                return(LicitacaoController.IsValid(l, out mensagemErro) ? l : null);
            }
            catch (Exception e)
            {
                if (l.Orgao == null)
                {
                    RService.Log("Exception (CreateQuote) " + Name + ": Órgão não foi localizado - ver log do serviço RService" + " at {0}", Path.GetTempPath() + Name + ".txt");
                }
                else
                {
                    RService.Log("Exception (CreateQuote) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
                }

                return(null);
            }
        }