/*Percorre os links de cada página*/
        private static int GetOC(HtmlDocument htmlDoc)
        {
            int count = 1;

            try
            {
                NameValueCollection formData = new NameValueCollection();

                HtmlNode        table = htmlDoc.DocumentNode.Descendants("table").FirstOrDefault(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Equals("ctl00_ContentPlaceHolder1_gvResumoNatureza"));
                List <HtmlNode> trs   = table.Descendants("tr").ToList();
                HtmlNode        tr    = trs[count];

                while (count <= trs.Count)
                {
                    if (tr.ChildNodes.Count == 6)
                    {
                        //string href = Constants.BEC_LINK_OC + link.SelectSingleNode("a").InnerText.ToString();
                        href = tr.Descendants("a").FirstOrDefault(x => x.Attributes.Contains("href")).GetAttributeValue("href", "").Replace("Edital", "Fornecedores_Dados_OC");
                        string ocnum = tr.Descendants("a").FirstOrDefault(x => x.Attributes.Contains("href")).InnerText;

                        string situacao = tr.ChildNodes[4].InnerText;

                        if (!situacao.Contains("Interposi"))
                        {
                            HandleCreate(WebHandle.GetHtmlDocOfPageDefaultEncoding(href, formData), ocnum, situacao);
                        }
                        else
                        {
                            RService.Log("Exception (GetOC)" + Name + ": Página da licitação fora do ar na fonte (Erro interno do servidor - 500) at {0}", Path.GetTempPath() + Name + ".txt");
                        }

                        count++;
                        if (count < trs.Count)
                        {
                            tr = trs[count];
                        }
                    }
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (GetOC)" + Name + ":" + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }

            return(count);
        }
        //Pega as licitações da modalidade Carta Convite
        private static void GetConvites(string uri)
        {
            RService.Log("(GetConvites) " + Name + ": Começando o processamento de licitações da modalidade Carta Convite " + "at {0}", Path.GetTempPath() + Name + ".txt");
            try
            {
                /*Lista dos parametros do post*/
                NameValueCollection post = new NameValueCollection();

                /*Percorre cada uma das naturezas da modalidade*/
                foreach (var attr in WebHandle.GetHtmlDocOfPageDefaultEncoding(uri, post).DocumentNode.Descendants("span").Where(x => x.Attributes.Contains("id") &&
                                                                                                                                 x.Attributes["id"].Value.ToString().Contains(Constants.BEC_ID_NATUREZA)))
                {
                    /*Link para uma das naturezas*/
                    string urin = attr.SelectSingleNode("a").Attributes["href"].Value.ToString();

                    //post = new NameValueCollection();
                    CurrentPage = 2;
                    int count = 21;

                    /*Percorre as páginas de uma natureza (ex: 1;2;3)*/
                    HtmlDocument pagehtml = WebHandle.GetHtmlDocOfPageDefaultEncoding(urin, post);
                    while (pagehtml != null && count == 21)
                    {
                        RService.Log("(GetConvites) " + Name + ": Percorrendo os links da página.. " + (CurrentPage - 1) + " at {0}", Path.GetTempPath() + Name + ".txt");
                        //Teste para verificar licitação específica
                        //GetTestOC();

                        //Pega as licitações de cada página (OC's)
                        count = GetOC(pagehtml);
                        //Pega o html da próxima página
                        pagehtml = WebHandle.GetHtmlDocOfPageDefaultEncoding(urin, GetFormParameters(pagehtml, CurrentPage));
                        //Numero da proxima página
                        CurrentPage++;
                    }
                }
            }
            catch (Exception e)
            {
                RService.Log("Exception (GetConvites) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt");
            }
        }
        /*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);
        }