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); } }