private List <string> ConvertXml(string file) { List <string> xmlRetorno = new List <string>(); string url = "/cct/api/ext/carga/recepcao-nfe"; string cpfCertificado = "27501846812"; string nomeArquivo = Server.MapPath("Uploads\\"); string[] source = File.ReadAllLines(nomeArquivo + file); //pego a primeira linha do array e monto em uma string for (int i = 1; i < source.Count(); i++) { if (source[i].Any()) { string xmlAtual = source[i]; string[] split = xmlAtual.Split(';'); string cnpj = split[1]; string cpfCondutor = split[6]; string chaveAcesso = split[4]; string cnpjTransportador = split[5]; if (cnpj.Length < 14) { cnpj = cnpj.PadLeft(14, '0'); } if (cpfCondutor.Length < 11 && cpfCondutor.Length > 0) { cpfCondutor = cpfCondutor.PadLeft(11, '0'); } if (chaveAcesso.Length < 44) { chaveAcesso = chaveAcesso.PadLeft(44, '0'); } if (cnpjTransportador.Length < 14 && cnpjTransportador.Length > 11) { cnpjTransportador = cnpjTransportador.PadLeft(14, '0'); } #region Montando o XML XDocument doc = new XDocument( new XElement("ROOT", new XElement("recepcoesNFE", new XElement("recepcaoNFE", new XElement("identificacaoRecepcao", split[0]), new XElement("cnpjResp", cnpj), new XElement("local", new XElement("codigoURF", split[2]), new XElement("codigoRA", split[3]) ), new XElement("notasFiscais", new XElement("notaFiscalEletronica", new XElement("chaveAcesso", chaveAcesso) )), new XElement("transportador", cnpjTransportador.ToString().Count() > 11 ? new XElement("cnpj", cnpjTransportador) : null, cnpjTransportador.ToString().Count() < 14 ? new XElement("cpf", cnpjTransportador) : null, //new XElement("cnpj", fields[5]), split[6] == null ? new XElement("cpfCondutor", cpfCondutor) : null //new XElement("cpfCondutor", fields[6]) ), new XElement("pesoAferido", split[7]), new XElement("observacoesGerais", split[8]) )) )); #endregion var xmlPost = doc.ToString(); var xdoc = xmlPost.Replace("\r\n", "").Replace(" ", ""); var xmlOk = xdoc.Replace("<ROOT>", "").Replace("</ROOT>", "").Replace("<recepcoesNFE>", "<recepcoesNFE xsi:schemaLocation=\"http://www.pucomex.serpro.gov.br/cct RecepcaoNFE.xsd\" xmlns=\"http://www.pucomex.serpro.gov.br/cct\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"); //validando o TOKEN Token token = null; if (HttpContext.Current.Session["TOKEN"] == null) { token = SisComexService.ObterToken(cpfCertificado); } else { token = (Token)HttpContext.Current.Session["TOKEN"]; } var headers = SisComexService.ObterHeaders(token); var response = SisComexService.CriarRequestKleiton(url, headers, xmlOk, cpfCertificado); if (response == null) { return(null); } xmlRetorno.Add(response.Content.ReadAsStringAsync().Result); //xmlRetorno.Add(new XElement("identificador", identificador).ToString()); //XElement _identificador = new XElement("identificador", identificador); //xmlRetorno.Add(_identificador.ToString()); } } return(xmlRetorno); }
protected void btnGerarExcel_Click(object sender, EventArgs e) { var notas = new List <NotaFiscal>(); foreach (GridViewRow linha in this.gvNotasFiscais.Rows) { string status = string.Empty; string codSituacao = string.Empty; if (linha.Cells[0].Text != "EXP") { var item = linha.Cells[12].Text.ToInt(); if (item == 0) { item = 1; } var saldoDue = _documentoUnicoExportacaoDAO.ObterQuantidadeDUEPorNF(linha.Cells[1].Text); var saldoNota = SisComexService.ConsultarDadosNotaPreACD(linha.Cells[1].Text, item, ConfigurationManager.AppSettings["CpfCertificado"].ToString()); if (saldoNota != null) { if (saldoNota.Sucesso == false) { status = "Nota não encontrada no CCT"; codSituacao = "1"; } else { var quantidade = linha.Cells[4].Text.ToDecimal() - saldoDue; if (!((quantidade) <= (decimal)saldoNota.Saldo)) { status = "Nota com divergência no saldo"; codSituacao = "2"; } else { status = "Nota sem divergência"; codSituacao = "3"; } } } } notas.Add(new NotaFiscal { TipoNF = linha.Cells[0].Text, ChaveNF = linha.Cells[1].Text, NumeroNF = linha.Cells[2].Text, CnpjNF = linha.Cells[3].Text, QuantidadeNF = linha.Cells[4].Text.ToDecimal(), SaldoCCT = linha.Cells[5].Text.ToDecimal(), SaldoOutrasDUES = linha.Cells[6].Text.ToDecimal(), UnidadeNF = linha.Cells[7].Text, NCM = linha.Cells[8].Text, ChaveNFReferencia = linha.Cells[9].Text, Arquivo = linha.Cells[10].Text, Status = status, CodSituacao = codSituacao, Item = linha.Cells[12].Text.ToInt(), Recinto = linha.Cells[13].Text }); status = string.Empty; } ExcelPackage epackage = new ExcelPackage(); ExcelWorksheet excel = epackage.Workbook.Worksheets.Add("ExcelTabName"); excel.Cells["A1"].LoadFromCollection(notas.Select(c => new { c.TipoNF, c.ChaveNF, c.NumeroNF, c.CnpjNF, c.QuantidadeNF, c.SaldoCCT, c.SaldoOutrasDUES, c.UnidadeNF, c.NCM, ChaveNFReferencia = c.ChaveNFReferencia.Replace(" ", ""), c.Arquivo, c.Status, c.CodSituacao, c.Item, c.Recinto }), true); var nomeArquivo = notas.Select(c => c.Arquivo).FirstOrDefault(); if (string.IsNullOrEmpty(nomeArquivo)) { nomeArquivo = "ArquivoNotas"; } string attachment = $"attachment; filename={nomeArquivo}.xlsx"; HttpContext.Current.Response.Clear(); HttpContext.Current.Response.ClearHeaders(); HttpContext.Current.Response.ClearContent(); HttpContext.Current.Response.AddHeader("content-disposition", attachment); HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; HttpContext.Current.Response.BinaryWrite(epackage.GetAsByteArray()); HttpContext.Current.Response.End(); epackage.Dispose(); }
public async Task <ValidarXmlRetornoSiscomex> EnviarXMLDUE(string url, string xml, string due, string cpfCertificado) { try { var retornoSiscomex = new ValidarXmlRetornoSiscomex(); var token = SisComexService.ObterToken(cpfCertificado); if (token == null) { throw new Exception("Token não recebido"); } var headers = SisComexService.ObterHeaders(token); var response = await SisComexService.CriarRequest(url, headers, xml, due, cpfCertificado); var retornoResponse = await response.Content.ReadAsStringAsync(); retornoSiscomex.Debug = HttpUtility.HtmlEncode(retornoResponse); retornoSiscomex.XmlRetorno = retornoResponse; using (MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(Regex.Unescape(retornoResponse)))) { var reader = new StreamReader(memoryStream, Encoding.UTF8); if (response.StatusCode != HttpStatusCode.OK) { try { var xmlSerializer = new XmlSerializer(typeof(ValidarXmlRetornoCriticas)); var criticas = (ValidarXmlRetornoCriticas)xmlSerializer.Deserialize(reader); retornoSiscomex.Sucesso = false; retornoSiscomex.Message = criticas.Message; retornoSiscomex.Code = criticas.Code; retornoSiscomex.Criticas = criticas.Detail?.Errors; } catch (Exception ex) { retornoSiscomex.Sucesso = false; retornoSiscomex.Message = "Erro 500. XML recusado pelo Serpro"; } } else { var xmlSerializer = new XmlSerializer(typeof(ValidarXmlRetornoSucesso)); var sucesso = (ValidarXmlRetornoSucesso)xmlSerializer.Deserialize(reader); retornoSiscomex.Sucesso = true; retornoSiscomex.Message = sucesso.Message; retornoSiscomex.DUE = sucesso.Due; retornoSiscomex.RUC = sucesso.Ruc; } } return(retornoSiscomex); } catch (Exception ex) { return(new ValidarXmlRetornoSiscomex { Sucesso = false, Message = ex.Message }); } }
private void ValidarNotasSiscomex(int quantidadeImportada, List <NotaFiscal> notasFiscais) { if (quantidadeImportada > 0) { this.gvNotasFiscais.DataSource = notasFiscais.ToList(); this.gvNotasFiscais.DataBind(); foreach (GridViewRow linhaGrid in this.gvNotasFiscais.Rows) { if (linhaGrid.Cells[0].Text != "EXP") { var item = linhaGrid.Cells[12].Text.ToInt(); if (item == 0) { item = 1; } var chaveNf = linhaGrid.Cells[1].Text; var quantidade = linhaGrid.Cells[4].Text.ToDecimal(); var saldoDue = _documentoUnicoExportacaoDAO.ObterQuantidadeDUEPorNF(chaveNf); var saldoNota = SisComexService.ConsultarDadosNotaPreACD(chaveNf, item, ConfigurationManager.AppSettings["CpfCertificado"].ToString()); if (saldoNota != null) { if (saldoNota.Sucesso == false) { linhaGrid.BackColor = System.Drawing.Color.MistyRose; linhaGrid.Cells[11].Text = "1"; } else { quantidade = quantidade - saldoDue; if (quantidade <= (decimal)saldoNota.Saldo) { linhaGrid.BackColor = System.Drawing.Color.LightGreen; linhaGrid.Cells[11].Text = "3"; } else { linhaGrid.BackColor = System.Drawing.Color.LightYellow; linhaGrid.Cells[11].Text = "2"; } linhaGrid.Cells[5].Text = saldoNota.Saldo.ToString(); linhaGrid.Cells[6].Text = saldoDue.ToString(); linhaGrid.Cells[13].Text = saldoNota.Recinto; } } } } if (this.gvNotasFiscais.Rows.Count > 0) { this.pnlLegenda.Visible = true; } } }
protected async void btnGerarCsv_Click(object sender, EventArgs e) { var filtro = new StringBuilder(); var paises = PaisesDAO.ObterPaisesSiscomex(); if (this.txtUpload.PostedFile != null) { if (this.txtUpload.PostedFile.ContentLength > 0) { if (!UploadArquivo(this.txtUpload)) { throw new Exception("O arquivo não pode ser processado. Certifique-se que já não esteja aberto em outro programa"); } var notasFiscais = ProcessarArquivo(this.txtUpload.PostedFile.InputStream); var notasFiscaisFiltro = new List <string>(); foreach (var nf in notasFiscais) { notasFiscaisFiltro.Add($"'{nf}'"); } var filtroNfs = string.Join(",", notasFiscaisFiltro); if (!string.IsNullOrEmpty(filtroNfs)) { Session["FILTRO_CHAVES_REMESSA_UPLOAD"] = filtroNfs; filtro.Append($" AND E.CHAVE_ACESSO IN ({filtroNfs}) "); } try { File.Delete(Path.Combine(Server.MapPath("Uploads"), this.txtUpload.PostedFile.FileName)); } catch { } } else { if (Session["FILTRO_CHAVES_REMESSA_UPLOAD"] != null) { filtro.Append($" AND E.CHAVE_ACESSO IN ({Session["FILTRO_CHAVES_REMESSA_UPLOAD"].ToString()}) "); } } } var filtroRem = new StringBuilder(); var listaNotasArquivo = new List <string>(); var listaNotasConsulta = new List <string>(); var listaNotasDiferencas = new List <string>(); if (Session["FILTRO_CHAVES_REMESSA_UPLOAD"] != null) { filtroRem.Append($" AND B.CHAVE_ACESSO IN ({Session["FILTRO_CHAVES_REMESSA_UPLOAD"].ToString()}) "); listaNotasArquivo.AddRange(Session["FILTRO_CHAVES_REMESSA_UPLOAD"].ToString().Split(',')); } var dataTableRemessa = _estoqueDAO.ObterNotasRemessa(filtroRem.ToString()); foreach (DataRow rowRemessa in dataTableRemessa.Rows) { listaNotasConsulta.Add(rowRemessa["CHAVE_NF"].ToString()); } listaNotasConsulta = listaNotasConsulta.Distinct().ToList(); foreach (var chaveNfArquivo in listaNotasArquivo) { var nf = chaveNfArquivo.Replace("'", ""); if (!listaNotasConsulta.Contains(nf)) { listaNotasDiferencas.Add(nf); } } StringBuilder builder = new StringBuilder(); List <string> rows = new List <string>(); List <string> colunas = new List <string>(); foreach (DataColumn column in dataTableRemessa.Columns) { colunas.Add(column.ColumnName); } foreach (DataRow rowRemessa in dataTableRemessa.Rows) { List <string> camposRemessa = new List <string>(); foreach (DataColumn column in dataTableRemessa.Columns) { object item = rowRemessa[column]; var texto = Regex.Replace(item.ToString(), @"\t|\n|\r", ""); camposRemessa.Add(texto); } rows.Add(string.Join(";", camposRemessa.ToArray())); } var duesImportadas = new List <string>(); if (listaNotasDiferencas.Any()) { rows.Add("As notas abaixo não formam encontradas no banco de dados de DUEs CARGILL e os dados apresentados foram consultados diretamente no SISCOMEX"); foreach (var notaNaoEncontrada in listaNotasDiferencas) { var dadosDue = await SisComexService .ConsultarDUEPorDanfe(notaNaoEncontrada, ConfigurationManager.AppSettings["CpfCertificado"].ToString()); if (dadosDue != null) { if (dadosDue.Sucesso) { foreach (var due in dadosDue?.ListaDadosDUE) { var retornoDue = await SisComexService.ObterDUECompleta(due.rel, ConfigurationManager.AppSettings["CpfCertificado"].ToString()); if (retornoDue != null) { if (!duesImportadas.Contains(due.rel)) { duesImportadas.Add(due.rel); var declarante = retornoDue.declarante?.numeroDoDocumento ?? string.Empty; var declaranteNome = retornoDue.declarante?.nome ?? string.Empty; var descricaoRecinto = string.Empty; var descricaoUnidade = string.Empty; if (retornoDue.recintoAduaneiroDeDespacho != null) { var recintoBusca = _recintosDAO.ObterRecintos() .Where(c => c.Id == retornoDue.recintoAduaneiroDeDespacho?.codigo.ToInt()).FirstOrDefault(); if (recintoBusca != null) { descricaoRecinto = recintoBusca.Descricao; } } else { descricaoRecinto = "Indisponível"; } if (retornoDue.unidadeLocalDeDespacho != null) { var unidadeBusca = _unidadesReceitaDAO.ObterUnidadesRFB() .Where(c => c.Codigo.ToInt() == retornoDue.unidadeLocalDeDespacho?.codigo.ToInt()).FirstOrDefault(); if (unidadeBusca != null) { descricaoUnidade = unidadeBusca.Descricao; } } else { descricaoUnidade = "Indisponível"; } var ultimoEvento = string.Empty; EventosDoHistorico averbacao; var dataAverbacao = string.Empty; DateTime?dataUltimoEvento = null; if (retornoDue.eventosDoHistorico != null) { ultimoEvento = retornoDue.eventosDoHistorico.OrderByDescending(c => c.dataEHoraDoEvento).Select(c => c.evento).FirstOrDefault(); dataUltimoEvento = retornoDue.eventosDoHistorico.OrderByDescending(c => c.dataEHoraDoEvento).Select(c => c.dataEHoraDoEvento).FirstOrDefault(); averbacao = retornoDue.eventosDoHistorico .FirstOrDefault(c => c.evento.ToLower().Contains("averbacao") || c.evento.ToLower().Contains("averbação")); dataAverbacao = averbacao != null ? averbacao.dataEHoraDoEvento.ToString("dd/MM/yyyy HH:mm:ss") : string.Empty; } if (retornoDue.itens != null) { foreach (var item in retornoDue.itens) { string valorDaMercadoriaNaCondicaoDeVenda = item?.valorDaMercadoriaNaCondicaoDeVenda.ToString() ?? "0"; string valorDaMercadoriaNoLocalDeEmbarque = item?.valorDaMercadoriaNoLocalDeEmbarque.ToString() ?? "0"; string valorDaMercadoriaNoLocalDeEmbarqueEmReais = item?.valorDaMercadoriaNoLocalDeEmbarqueEmReais.ToString() ?? "0"; string importador = item?.nomeImportador ?? string.Empty; string enderecoImportador = item?.enderecoImportador ?? string.Empty; string pesoLiquidoTotal = item?.pesoLiquidoTotal.ToString() ?? "0"; pesoLiquidoTotal = pesoLiquidoTotal.Replace(".", "").Replace(",", "."); string incoterm = item?.codigoCondicaoVenda.codigo ?? string.Empty; var codigoPaisImportador = retornoDue?.paisImportador?.codigo ?? 0; string paisImportador = paises.Where(c => c.Id == codigoPaisImportador) .Select(c => c.Descricao).FirstOrDefault() ?? string.Empty; var codigoPaisDestino = item?.listaPaisDestino.Select(c => c.codigo).FirstOrDefault() ?? 0; string paisDestino = paises.Where(c => c.Id == codigoPaisDestino) .Select(c => c.Descricao).FirstOrDefault() ?? string.Empty; string unidadeEstatistica = item?.unidadeComercializada ?? string.Empty; string informacoesComplementares = retornoDue?.informacoesComplementares ?? string.Empty; var codigoMoeda = retornoDue?.moeda?.codigo ?? 0; string moedaNegociacao = _moedasDAO.ObterMoedas().Where(c => c.Id == codigoMoeda) .Select(c => c.Descricao).FirstOrDefault() ?? string.Empty; foreach (var nfRemessa in item.itensDaNotaDeRemessa) { if (nfRemessa != null) { var tipoNf = string.Empty; var cfop = nfRemessa.cfop.ToString(); if (cfop.EndsWith("04") || cfop.EndsWith("05")) { tipoNf = "FDL"; } if (cfop.EndsWith("01") || cfop.EndsWith("02")) { tipoNf = "REM"; } var itemNfRef = nfRemessa.notaFiscal; var emitente = itemNfRef.identificacaoDoEmitente; rows.Add($";{retornoDue.dataDeRegistro.ToString("dd/MM/yyyy HH:mm:ss")};{retornoDue.numero};{retornoDue.chaveDeAcesso};{declarante};{declaranteNome};{ultimoEvento};{dataUltimoEvento?.ToString("dd/MM/yyyy HH:mm:ss")};{dataAverbacao};{nfRemessa.ncm?.codigo};{nfRemessa.numeroDoItem};{nfRemessa.cfop};{nfRemessa.descricao};{tipoNf};{itemNfRef.chaveDeAcesso};{itemNfRef.numeroDoDocumento};{itemNfRef.modelo};{itemNfRef.serie};{itemNfRef.ufDoEmissor};{emitente.numero};{retornoDue.situacao};{valorDaMercadoriaNaCondicaoDeVenda.Replace(".", "").Replace(",", ".") };{valorDaMercadoriaNoLocalDeEmbarque.Replace(".", "").Replace(",", ".") };{valorDaMercadoriaNoLocalDeEmbarqueEmReais.Replace(".", "").Replace(",", ".") };{importador};{enderecoImportador};{paisImportador};{paisDestino};{unidadeEstatistica};{pesoLiquidoTotal};{moedaNegociacao};{incoterm};{informacoesComplementares};{retornoDue.unidadeLocalDeDespacho?.codigo};{descricaoUnidade};{retornoDue.recintoAduaneiroDeDespacho?.codigo };{descricaoRecinto};{item.quantidadeNaUnidadeEstatistica.ToString("n3")};{nfRemessa.quantidadeConsumida.ToString("n3")}"); } } } } } } else { var retornoDueResumida = await SisComexService.ObterDetalhesDUE(due.rel, ConfigurationManager.AppSettings["CpfCertificado"].ToString()); if (retornoDueResumida != null) { if (!duesImportadas.Contains(due.rel)) { duesImportadas.Add(due.rel); var declarante = retornoDueResumida.declarante?.numero ?? string.Empty; var descricaoRecinto = string.Empty; var descricaoUnidade = string.Empty; if (retornoDueResumida.codigoRecintoAduaneiroDespacho != null) { var recintoBusca = _recintosDAO.ObterRecintos() .Where(c => c.Id == retornoDueResumida.codigoRecintoAduaneiroDespacho.ToInt()).FirstOrDefault(); if (recintoBusca != null) { descricaoRecinto = recintoBusca.Descricao; } } else { descricaoRecinto = "Indisponível"; } if (retornoDueResumida.uaDespacho != null) { var unidadeBusca = _unidadesReceitaDAO.ObterUnidadesRFB() .Where(c => c.Codigo.ToInt() == retornoDueResumida.uaDespacho.ToInt()).FirstOrDefault(); if (unidadeBusca != null) { descricaoUnidade = unidadeBusca.Descricao; } } else { descricaoUnidade = "Indisponível"; } rows.Add($";;{retornoDueResumida.numeroDUE};;{declarante};;;;;;;;;;{notaNaoEncontrada};;;;;;;;;;;;;;;;;;;{retornoDueResumida.uaDespacho};{descricaoUnidade};{retornoDueResumida.codigoRecintoAduaneiroDespacho };{descricaoRecinto}"); } } } } } else { rows.Add(dadosDue.Mensagem); } } } } builder.Append(string.Join(";", colunas.ToArray())); builder.Append("\n"); builder.Append(string.Join("\n", rows.ToArray())); var agora = DateTime.Now; var nomeArquivo = $"LM_{agora.ToString("ddMMyyyy")}_{agora.ToString("HHmmss")}"; Response.Clear(); Response.ContentType = "text/csv"; Response.AddHeader("Content-Disposition", $"attachment;filename={nomeArquivo}.csv"); Response.ContentEncoding = System.Text.Encoding.GetEncoding("Windows-1252"); Response.Write(builder.ToString()); //Response.End(); HttpContext.Current.Response.Flush(); HttpContext.Current.Response.SuppressContent = true; HttpContext.Current.ApplicationInstance.CompleteRequest(); }