Exemple #1
0
        public static byte[] GetBytesRelatorio(HttpContext context, uint[] idsNf, bool preVisualizar, out Warning[] warnings, out string[] streamids,
                                               out string mimeType, out string encoding, out string extension)
        {
            var report   = new LocalReport();
            var lstParam = new List <ReportParameter>();

            foreach (var idNf in idsNf)
            {
                var nf          = NotaFiscalDAO.Instance.GetElement(idNf);
                var danfe       = NFeDAO.Instance.GetForDanfe(context, nf.ChaveAcesso);
                var produtosNFe = ProdutosNFeDAO.Instance.GetForDanfe(context, nf.ChaveAcesso);
                var idLoja      = nf.IdLoja.Value;

                report.DataSources.Add(new ReportDataSource("NFe", new NFe[] { danfe }));
                report.DataSources.Add(new ReportDataSource("ProdutosNFe", produtosNFe));

                #region NF-e

                #region Report Path

                //report.ReportPath = FiscalConfig.NotaFiscalConfig.CaminhoDANFE((int)nf.IdLoja.GetValueOrDefault());

                #endregion

                if (nf.IdLoja > 0)
                {
                    danfe.EnderecoEmit += " " + LojaDAO.Instance.GetElementByPrimaryKey(nf.IdLoja.Value).EmailFiscal;
                }
                danfe.EmailFiscal += " " + LojaDAO.Instance.GetElementByPrimaryKey(nf.IdLoja.Value).EmailFiscal;

                #region Parametros

                if (nf.FormaEmissao == (int)NotaFiscal.TipoEmissao.ContingenciaFSDA)
                {
                    report.ReportPath = report.ReportPath.Replace(".", "FS.");

                    lstParam.Add(new ReportParameter("Cabecalho_DadosAdicionaisNfe", danfe.DadosAdicionaisFs));
                    lstParam.Add(new ReportParameter("Cabecalho_CodigoBarrasAdicionais", Utils.GetUrlSite(context) +
                                                     "/Handlers/Danfe.ashx?idNf=" + idNf + "&isCodigoBarras=true&dadosAdicionais=true"));
                }

                // Verifica apenas se a nota não é cancelada, pois a nota só muda para autorizada depois de enviar o email,
                // fazendo com que os clientes recebesse o DANFE dizendo que a nota "não é um documento fiscal válido"
                lstParam.Add(new ReportParameter("Producao", (danfe.TipoAmbiente == (int)ConfigNFe.TipoAmbienteNfe.Producao && nf.Situacao != (int)NotaFiscal.SituacaoEnum.Cancelada && !preVisualizar).ToString().ToLower()));

                lstParam.Add(new ReportParameter("ExibirNFCancelada",
                                                 (!preVisualizar && danfe.TipoAmbiente == (int)ConfigNFe.TipoAmbienteNfe.Producao &&
                                                  nf.Situacao == (int)NotaFiscal.SituacaoEnum.Cancelada).ToString().ToLower()));

                // Parâmetros para o cabeçalho/rodapé do relatório
                lstParam.Add(new ReportParameter("Cabecalho_NumeroNfe", danfe.NumeroNfe));
                lstParam.Add(new ReportParameter("Cabecalho_SerieNfe", danfe.SerieNfe));
                lstParam.Add(new ReportParameter("Cabecalho_RazaoSocialEmit", danfe.RazaoSocialEmit));
                lstParam.Add(new ReportParameter("Cabecalho_EnderecoEmit", danfe.EnderecoEmit));
                lstParam.Add(new ReportParameter("Cabecalho_TipoNfe", danfe.TipoNfe));
                lstParam.Add(new ReportParameter("Cabecalho_ChaveAcesso", danfe.ChaveAcesso));
                lstParam.Add(new ReportParameter("Cabecalho_NatOperacao", danfe.NatOperacao));
                lstParam.Add(new ReportParameter("Cabecalho_ProtAutorizacao", String.IsNullOrEmpty(danfe.ProtAutorizacao) ? "." : danfe.ProtAutorizacao));
                lstParam.Add(new ReportParameter("Cabecalho_InscEstEmit", danfe.InscEstEmit));
                lstParam.Add(new ReportParameter("Cabecalho_InscEstStEmit", danfe.InscEstStEmit));
                lstParam.Add(new ReportParameter("Cabecalho_CnpjEmit", danfe.CnpjEmit));

                if (report.ReportPath != "Relatorios/NFe/rptDanfeSemLogo.rdlc")
                {
                    lstParam.Add(new ReportParameter("Cabecalho_DestacarNFe", "false"));
                }

                #region Código de barras

                /* Chamado 18187. */
                if (FiscalConfig.CorrecaoGeracaoCodigoBarrasDanfe)
                {
                    var url = Utils.GetFullUrl(context, "/Handlers/Danfe.ashx?idNf=" + idNf + "&isCodigoBarras=true");
                    var uri = new Uri(url);
                    lstParam.Add(new ReportParameter("Cabecalho_CodigoBarras",
                                                     string.Format("{0}://localhost:{1}{2}", uri.Scheme, uri.Port, uri.PathAndQuery)));
                }
                else
                {
                    lstParam.Add(new ReportParameter("Cabecalho_CodigoBarras", Utils.GetUrlSite(context) +
                                                     "/Handlers/Danfe.ashx?idNf=" + idNf + "&isCodigoBarras=true"));
                }

                #endregion

                lstParam.Add(new ReportParameter("Rodape_InformacoesCompl", danfe.InformacoesCompl));

                #endregion


                #endregion

                #region LogoTipo

                var logotipo = Logotipo.GetReportLogoNF(context.Request, idLoja);

                if (FiscalConfig.NotaFiscalConfig.EsconderLogotipoDANFEComLogo)
                {
                    logotipo = ".";
                }

                report.EnableExternalImages = true;
                lstParam.Add(new ReportParameter("Logotipo", logotipo));

                #endregion

                //Ajusta o caminho do report
                report.ReportPath = context.Server.MapPath("~/" + report.ReportPath);

                // Atribui parâmetros ao relatório
                report.SetParameters(lstParam);
            }

            return(report.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings));
        }
Exemple #2
0
        public static byte[] GetBytesRelatorio(HttpContext context, uint idNf, bool preVisualizar, out Warning[] warnings, out string[] streamids,
                                               out string mimeType, out string encoding, out string extension)
        {
            var report      = new LocalReport();
            var lstParam    = new List <ReportParameter>();
            var nf          = NotaFiscalDAO.Instance.GetElement(idNf);
            var danfe       = NFeDAO.Instance.GetForDanfe(context, nf.ChaveAcesso);
            var produtosNFe = ProdutosNFeDAO.Instance.GetForDanfe(context, nf.ChaveAcesso);
            var idLoja      = nf.IdLoja.Value;

            report.DataSources.Add(new ReportDataSource("NFe", new NFe[] { danfe }));
            report.DataSources.Add(new ReportDataSource("ProdutosNFe", produtosNFe));

            #region NFC-e

            if (nf.Consumidor)
            {
                var loja = LojaDAO.Instance.GetElement(NotaFiscalDAO.Instance.ObtemIdLoja(idNf));
                var uf   = loja.Uf;

                #region Report Path

                report.ReportPath = Utils.CaminhoRelatorio("Relatorios/NFe/rptDanfeNFCe{0}.rdlc");

                #endregion

                #region Pagamentos

                var pagamentos = PagtoNotaFiscalDAO.Instance.ObtemPagamentos(null, (int)idNf);

                report.DataSources.Add(new ReportDataSource("PagtoNotaFiscal", pagamentos));

                #endregion

                #region Parametros

                // Parâmetros para o relatório
                lstParam.Add(new ReportParameter("QtdItens", produtosNFe.Length.ToString()));

                // Verifica apenas se a nota não é cancelada, pois a nota só muda para autorizada depois de enviar o email,
                // fazendo com que os clientes recebesse o DANFE dizendo que a nota "não é um documento fiscal válido"
                lstParam.Add(new ReportParameter("Producao", (danfe.TipoAmbiente == (int)ConfigNFe.TipoAmbienteNfe.Producao && nf.Situacao != (int)NotaFiscal.SituacaoEnum.Cancelada && !preVisualizar).ToString().ToLower()));

                #region Total de tributos

                decimal valorTotalTributos = 0;
                var     cfop      = CfopDAO.Instance.GetElementByPrimaryKey(nf.IdCfop.Value);
                var     cliente   = ClienteDAO.Instance.GetElement(nf.IdCliente.Value);
                var     lstProdNf = ProdutosNfDAO.Instance.GetByNfExtended(idNf);

                // CFOP's de simples faturamento/venda futura não devem destacar os impostos
                var exibirImpostoCfop = cfop.CodInterno != "5922" && cfop.CodInterno != "6922";

                try
                {
                    if (nf.TipoDocumento == (int)NotaFiscal.TipoDoc.Saída && exibirImpostoCfop && cliente != null)
                    {
                        var retorno = ImpostoNcmUFDAO.Instance.ObtemDadosImpostos(lstProdNf);

                        valorTotalTributos = retorno.ValorImpostoNacional + retorno.ValorImpostoEstadual;
                    }
                }
                catch (Exception ex)
                {
                    ErroDAO.Instance.InserirFromException("BuscarTributos", ex);

                    throw new Exception(MensagemAlerta.FormatErrorMsg("Falha ao buscar tributos aproximados.", ex));
                }

                if (valorTotalTributos == 0 && nf.ValorTotalTrib > 0)
                {
                    valorTotalTributos = nf.ValorTotalTrib;
                }

                lstParam.Add(new ReportParameter("ValorTotalTributos", valorTotalTributos.ToString()));

                #endregion

                //Url para consultar a NFC-e por chave de acesso
                lstParam.Add(new ReportParameter("UrlConsulta", danfe.UrlChave));

                // Define se a NFC-e foi emitida em contingência
                lstParam.Add(new ReportParameter("Contingencia", (nf.FormaEmissao != (int)NotaFiscal.TipoEmissao.Normal).ToString().ToLower()));

                #endregion

                #region QR Code

                /* Chamado 44291. */
                if (FiscalConfig.CorrecaoGeracaoCodigoBarrasDanfe)
                {
                    var url = Utils.GetFullUrl(context, "/Handlers/Danfe.ashx?idNf=" + idNf + "&isQrCode=true");
                    var uri = new Uri(url);
                    lstParam.Add(new ReportParameter("QrCode",
                                                     string.Format("{0}://localhost:{1}{2}", uri.Scheme, uri.Port, uri.PathAndQuery)));
                }
                else
                {
                    lstParam.Add(new ReportParameter("QrCode", Utils.GetUrlSite(context) +
                                                     "/Handlers/Danfe.ashx?idNf=" + idNf + "&isQrCode=true"));
                }

                #endregion
            }

            #endregion

            #region NF-e

            else
            {
                #region Report Path

                report.ReportPath = Utils.CaminhoRelatorio("Relatorios/NFe/rptDanfeRetrato{0}.rdlc");

                #endregion

                #region Email

                if (nf.IdLoja > 0)
                {
                    danfe.EnderecoEmit += " " + LojaDAO.Instance.GetElementByPrimaryKey(nf.IdLoja.Value).EmailFiscal;
                }
                danfe.EmailFiscal += " " + LojaDAO.Instance.GetElementByPrimaryKey(nf.IdLoja.Value).EmailFiscal;

                #endregion

                #region Parametros

                if (nf.FormaEmissao == (int)NotaFiscal.TipoEmissao.ContingenciaFSDA)
                {
                    report.ReportPath = Utils.CaminhoRelatorio("Relatorios/NFe/rptDanfeRetratoFS{0}.rdlc");

                    lstParam.Add(new ReportParameter("Cabecalho_DadosAdicionaisNfe", danfe.DadosAdicionaisFs));
                    lstParam.Add(new ReportParameter("Cabecalho_CodigoBarrasAdicionais", Utils.GetUrlSite(context) +
                                                     "/Handlers/Danfe.ashx?idNf=" + idNf + "&isCodigoBarras=true&dadosAdicionais=true"));
                }

                // Verifica apenas se a nota não é cancelada, pois a nota só muda para autorizada depois de enviar o email,
                // fazendo com que os clientes recebesse o DANFE dizendo que a nota "não é um documento fiscal válido"
                lstParam.Add(new ReportParameter("Producao", (danfe.TipoAmbiente == (int)ConfigNFe.TipoAmbienteNfe.Producao && nf.Situacao != (int)NotaFiscal.SituacaoEnum.Cancelada && !preVisualizar).ToString().ToLower()));

                lstParam.Add(new ReportParameter("ExibirNFCancelada",
                                                 (!preVisualizar && danfe.TipoAmbiente == (int)ConfigNFe.TipoAmbienteNfe.Producao &&
                                                  nf.Situacao == (int)NotaFiscal.SituacaoEnum.Cancelada).ToString().ToLower()));

                // Parâmetros para o cabeçalho/rodapé do relatório
                lstParam.Add(new ReportParameter("Cabecalho_NumeroNfe", danfe.NumeroNfe));
                lstParam.Add(new ReportParameter("Cabecalho_SerieNfe", danfe.SerieNfe));
                lstParam.Add(new ReportParameter("Cabecalho_RazaoSocialEmit", danfe.RazaoSocialEmit));
                lstParam.Add(new ReportParameter("Cabecalho_EnderecoEmit", danfe.EnderecoEmit));
                lstParam.Add(new ReportParameter("Cabecalho_TipoNfe", danfe.TipoNfe));
                lstParam.Add(new ReportParameter("Cabecalho_ChaveAcesso", danfe.ChaveAcesso));
                lstParam.Add(new ReportParameter("Cabecalho_NatOperacao", danfe.NatOperacao));
                lstParam.Add(new ReportParameter("Cabecalho_ProtAutorizacao", String.IsNullOrEmpty(danfe.ProtAutorizacao) ? "." : danfe.ProtAutorizacao));
                lstParam.Add(new ReportParameter("Cabecalho_InscEstEmit", danfe.InscEstEmit));
                lstParam.Add(new ReportParameter("Cabecalho_InscEstStEmit", danfe.InscEstStEmit));
                lstParam.Add(new ReportParameter("Cabecalho_CnpjEmit", danfe.CnpjEmit));

                lstParam.Add(new ReportParameter("TextoDadosRecebimento",
                                                 string.Format("RECEBEMOS DE {0} CNPJ {1} OS PRODUTOS E/OU SERVIÇOS CONSTANTES DA NOTA FISCAL ELETRÔNICA INDICADA AO LADO." +
                                                               "\nDESTINATÁRIO: {2} {3} Emissão: {4}. VALOR TOTAL: {5}.", danfe.RazaoSocialEmit, danfe.CnpjEmit,
                                                               danfe.RazaoSocialRemet, danfe.EnderecoRemet, danfe.DataEmissao, danfe.VlrTotalNota.StrParaDecimal().ToString("C"))));

                if (!report.ReportPath.Contains("rptDanfeSemLogo"))
                {
                    lstParam.Add(new ReportParameter("Cabecalho_DestacarNFe", "false"));
                }

                lstParam.Add(new ReportParameter("Rodape_InformacoesCompl", danfe.InformacoesCompl));

                #endregion

                #region Código de barras

                /* Chamado 18187. */
                if (FiscalConfig.CorrecaoGeracaoCodigoBarrasDanfe)
                {
                    var url = Utils.GetFullUrl(context, "/Handlers/Danfe.ashx?idNf=" + idNf + "&isCodigoBarras=true");
                    var uri = new Uri(url);
                    lstParam.Add(new ReportParameter("Cabecalho_CodigoBarras",
                                                     string.Format("{0}://localhost:{1}{2}", uri.Scheme, uri.Port, uri.PathAndQuery)));
                }
                else
                {
                    lstParam.Add(new ReportParameter("Cabecalho_CodigoBarras", Utils.GetUrlSite(context) +
                                                     "/Handlers/Danfe.ashx?idNf=" + idNf + "&isCodigoBarras=true"));
                }

                #endregion
            }

            #endregion

            #region LogoTipo

            var logotipo = Logotipo.GetReportLogoNF(context.Request, idLoja);

            if (FiscalConfig.NotaFiscalConfig.EsconderLogotipoDANFEComLogo)
            {
                logotipo = ".";
            }

            report.EnableExternalImages = true;
            lstParam.Add(new ReportParameter("Logotipo", logotipo));

            #endregion

            //Ajusta o caminho do report
            report.ReportPath = context.Server.MapPath("~/" + report.ReportPath);

            // Atribui parâmetros ao relatório
            report.SetParameters(lstParam);

            return(report.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings));
        }