Esempio n. 1
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);
        }
Esempio n. 2
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. 3
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. 4
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. 5
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);
        }