/// <summary> /// Construtor da classe responsável pela impressão do DANFE da NFCe em Fast Reports /// </summary> /// <param name="proc">Objeto do tipo nfeProc</param> /// <param name="configuracaoDanfeNfce">Objeto do tipo ConfiguracaoDanfeNfce contendo as definições de impressão</param> /// <param name="cIdToken">Identificador do CSC – Código de Segurança do Contribuinte no Banco de Dados da SEFAZ</param> /// <param name="csc">Código de Segurança do Contribuinte(antigo Token)</param> public DanfeFrNfce(nfeProc proc, ConfiguracaoDanfeNfce configuracaoDanfeNfce, string cIdToken, string csc) { #region Define as variáveis que serão usadas no relatório (dúvidas a respeito do fast reports consulte a documentação em https://www.fast-report.com/pt/product/fast-report-net/documentation/) Relatorio = new Report(); Relatorio.RegisterData(new[] { proc }, "NFCe", 20); Relatorio.GetDataSource("NFCe").Enabled = true; Relatorio.Load(new MemoryStream(Properties.Resources.NFCe)); Relatorio.SetParameterValue("NfceDetalheVendaNormal", configuracaoDanfeNfce.DetalheVendaNormal); Relatorio.SetParameterValue("NfceDetalheVendaContigencia", configuracaoDanfeNfce.DetalheVendaContigencia); Relatorio.SetParameterValue("NfceImprimeDescontoItem", configuracaoDanfeNfce.ImprimeDescontoItem); Relatorio.SetParameterValue("NfceModoImpressao", configuracaoDanfeNfce.ModoImpressao); Relatorio.SetParameterValue("NfceCancelado", configuracaoDanfeNfce.DocumentoCancelado); ((ReportPage)Relatorio.FindObject("PgNfce")).LeftMargin = configuracaoDanfeNfce.MargemEsquerda; ((ReportPage)Relatorio.FindObject("PgNfce")).RightMargin = configuracaoDanfeNfce.MargemDireita; ((PictureObject)Relatorio.FindObject("poEmitLogo")).Image = configuracaoDanfeNfce.ObterLogo(); ((TextObject)Relatorio.FindObject("txtUrl")).Text = proc.NFe.infNFeSupl.ObterUrl(proc.NFe.infNFe.ide.tpAmb, proc.NFe.infNFe.ide.cUF, TipoUrlConsultaPublica.UrlConsulta); ((BarcodeObject)Relatorio.FindObject("bcoQrCode")).Text = proc.NFe.infNFeSupl == null?proc.NFe.infNFeSupl.ObterUrlQrCode(proc.NFe, cIdToken, csc) : proc.NFe.infNFeSupl.qrCode; //Segundo o Manual de Padrões Técnicos do DANFE - NFC - e e QR Code, versão 3.2, página 9, nos casos de emissão em contingência deve ser impresso uma segunda cópia como via do estabelecimento Relatorio.PrintSettings.Copies = (proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teNormal | (proc.protNFe != null && proc.protNFe.infProt != null && NfeSituacao.Autorizada(proc.protNFe.infProt.cStat)) /*Se a NFe for autorizada, mesmo que seja em contingência, imprime somente uma via*/) ? 1 : 2; #endregion }
public static Report GenerateDanfeNfceReport(nfeProc proc, ConfiguracaoDanfeNfce configuracaoDanfeNfce, string cIdToken, string csc, byte[] frx, string arquivoRelatorio, string textoRodape = "") { //Define as variáveis que serão usadas no relatório (dúvidas a respeito do fast reports consulte a documentação em https://www.fast-report.com/pt/product/fast-report-net/documentation/) Report relatorio = new Report(); relatorio.RegisterData(new[] { proc }, "NFCe", 20); relatorio.GetDataSource("NFCe").Enabled = true; if (string.IsNullOrEmpty(arquivoRelatorio)) { relatorio.Load(new MemoryStream(frx)); } else { relatorio.Load(arquivoRelatorio); } relatorio.SetParameterValue("NfceDetalheVendaNormal", configuracaoDanfeNfce.DetalheVendaNormal); relatorio.SetParameterValue("NfceDetalheVendaContigencia", configuracaoDanfeNfce.DetalheVendaContigencia); relatorio.SetParameterValue("NfceImprimeDescontoItem", configuracaoDanfeNfce.ImprimeDescontoItem); relatorio.SetParameterValue("NfceImprimeFoneEmitente", configuracaoDanfeNfce.ImprimeFoneEmitente); string foneEmitente = null; if (proc.NFe.infNFe.emit.enderEmit.fone != null) { foneEmitente = proc.NFe.infNFe.emit.enderEmit.fone.ToString(); } if (foneEmitente != null && foneEmitente.Length == 10) { foneEmitente = string.Format("{0:(00)0000-0000}", Convert.ToInt64(foneEmitente)); } else if (foneEmitente != null && foneEmitente.Length == 11) { foneEmitente = string.Format("{0:(00)00000-0000}", Convert.ToInt64(foneEmitente)); } relatorio.SetParameterValue("NfceFoneEmitente", foneEmitente); relatorio.SetParameterValue("NfceModoImpressao", configuracaoDanfeNfce.ModoImpressao); relatorio.SetParameterValue("NfceCancelado", configuracaoDanfeNfce.DocumentoCancelado); relatorio.SetParameterValue("NfceLayoutQrCode", configuracaoDanfeNfce.NfceLayoutQrCode); relatorio.SetParameterValue("TextoRodape", textoRodape); ((ReportPage)relatorio.FindObject("PgNfce")).LeftMargin = configuracaoDanfeNfce.MargemEsquerda; ((ReportPage)relatorio.FindObject("PgNfce")).RightMargin = configuracaoDanfeNfce.MargemDireita; //alteracao necessaria para .netstandard, o código abaixo utiliza um método onde não é compativel para .netstandard: //de : //((PictureObject)relatorio.FindObject("poEmitLogo")).Image = configuracaoDanfeNfce.ObterLogo(); //para: #if Standard ((PictureObject)relatorio.FindObject("poEmitLogo")).SetImageData(configuracaoDanfeNfce.Logomarca); #else ((PictureObject)relatorio.FindObject("poEmitLogo")).Image = configuracaoDanfeNfce.ObterLogo(); #endif ((TextObject)relatorio.FindObject("txtUrl")).Text = string.IsNullOrEmpty(proc.NFe.infNFeSupl.urlChave) ? proc.NFe.infNFeSupl.ObterUrlConsulta(proc.NFe, configuracaoDanfeNfce.VersaoQrCode) : proc.NFe.infNFeSupl.urlChave; ((BarcodeObject)relatorio.FindObject("bcoQrCode")).Text = proc.NFe.infNFeSupl == null?proc.NFe.infNFeSupl.ObterUrlQrCode(proc.NFe, configuracaoDanfeNfce.VersaoQrCode, cIdToken, csc) : proc.NFe.infNFeSupl.qrCode; ((BarcodeObject)relatorio.FindObject("bcoQrCodeLateral")).Text = proc.NFe.infNFeSupl == null?proc.NFe.infNFeSupl.ObterUrlQrCode(proc.NFe, configuracaoDanfeNfce.VersaoQrCode, cIdToken, csc) : proc.NFe.infNFeSupl.qrCode; //Segundo o Manual de Padrões Técnicos do DANFE - NFC - e e QR Code, versão 3.2, página 9, nos casos de emissão em contingência deve ser impresso uma segunda cópia como via do estabelecimento if (configuracaoDanfeNfce.SegundaViaContingencia) { #if Standard /*Se a NFe for autorizada, mesmo que seja em contingência, imprime somente uma via - devendo o usuario enviar 2 copias para a impressora*/ //throw new Exception("configuracaoDanfeNfce.SegundaViaContingencia não suportado em .net standard, apenas em .net framework"); #else relatorio.PrintSettings.Copies = (proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teNormal | (proc.protNFe != null && proc.protNFe.infProt != null && NfeSituacao.Autorizada(proc.protNFe.infProt.cStat)) /*Se a NFe for autorizada, mesmo que seja em contingência, imprime somente uma via*/) ? 1 : 2; #endif } return(relatorio); }
/// <summary> /// Verifica se esta autorizado /// </summary> /// <param name="consSitNFe"></param> /// <returns>bool</returns> public static bool Autorizada(this retConsSitNFe consSitNFe) { return(NfeSituacao.Autorizada(consSitNFe.cStat)); }