Пример #1
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");
            }
        }
Пример #2
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");
            }
        }
Пример #3
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");
            }
        }