Beispiel #1
0
        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("&nbsp;", ""),
                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();
        }
Beispiel #3
0
        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;
                }
            }
        }
Beispiel #5
0
        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();
        }