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