internal static void ExtrairDatas(DanfeViewModel model, InfNFe infNfe) { var ide = infNfe.ide; if (infNfe.Versao.Maior >= 3) { if (ide.dhEmi.HasValue) { model.DataHoraEmissao = ide.dhEmi.Value.DateTimeOffsetValue.DateTime; } if (ide.dhSaiEnt.HasValue) { model.DataSaidaEntrada = ide.dhSaiEnt.Value.DateTimeOffsetValue.DateTime; } if (model.DataSaidaEntrada.HasValue) { model.HoraSaidaEntrada = model.DataSaidaEntrada.Value.TimeOfDay; } } else { model.DataHoraEmissao = ide.dEmi; model.DataSaidaEntrada = ide.dSaiEnt; if (!String.IsNullOrWhiteSpace(ide.hSaiEnt)) { model.HoraSaidaEntrada = TimeSpan.Parse(ide.hSaiEnt); } } }
public BlocoDuplicataFatura(DanfeSharp.Modelo.DanfeViewModel viewModel, Estilo estilo) : base(viewModel, estilo) { var de = viewModel.Duplicatas.Select(x => new Duplicata(estilo, x)).ToList(); var eh = de.First().Height; int numeroElementosLinha = ViewModel.IsPaisagem ? 7 : 6; int i = 0; while (i < de.Count) { FlexibleLine fl = new FlexibleLine(Width, eh); int i2; for (i2 = 0; i2 < numeroElementosLinha && i < de.Count; i2++, i++) { fl.ComElemento(de[i]); } for (; i2 < numeroElementosLinha; i2++) { fl.ComElemento(new ElementoVazio()); } fl.ComLargurasIguais(); MainVerticalStack.Add(fl); } }
public static DanfeViewModel CreateFromXml(ProcNFe procNfe) { DanfeViewModel model = new DanfeViewModel(); var nfe = procNfe.NFe; var infNfe = nfe.infNFe; var ide = infNfe.ide; if (ide.mod != 55) { throw new Exception("Somente o mod==55 está implementado."); } if (ide.tpEmis != FormaEmissao.Normal) { throw new Exception("Somente o tpEmis==1 está implementado."); } model.Orientacao = ide.tpImp == 1 ? Orientacao.Retrato : Orientacao.Paisagem; var infProt = procNfe.protNFe.infProt; model.CodigoStatusReposta = infProt.cStat; model.DescricaoStatusReposta = infProt.xMotivo; model.TipoAmbiente = (int)ide.tpAmb; model.NfNumero = ide.nNF; model.NfSerie = ide.serie; model.NaturezaOperacao = ide.natOp; model.ChaveAcesso = procNfe.NFe.infNFe.Id.Substring(3); model.TipoNF = (int)ide.tpNF; model.Emitente = CreateEmpresaFrom(infNfe.emit); model.Destinatario = CreateEmpresaFrom(infNfe.dest); model.NotasFiscaisReferenciadas = ide.NFref.Select(x => x.ToString()).ToList(); // Informações adicionais de compra if (infNfe.compra != null) { model.Contrato = infNfe.compra.xCont; model.NotaEmpenho = infNfe.compra.xNEmp; model.Pedido = infNfe.compra.xPed; } foreach (var det in infNfe.det) { ProdutoViewModel produto = new ProdutoViewModel(); produto.Codigo = det.prod.cProd; produto.Descricao = det.prod.xProd; produto.Ncm = det.prod.NCM; produto.Cfop = det.prod.CFOP; produto.Unidade = det.prod.uCom; produto.Quantidade = det.prod.qCom; produto.ValorUnitario = det.prod.vUnCom; produto.ValorTotal = det.prod.vProd; produto.InformacoesAdicionais = det.infAdProd; var imposto = det.imposto; if (imposto != null) { if (imposto.ICMS != null) { var icms = imposto.ICMS.ICMS; if (icms != null) { produto.ValorIcms = icms.vICMS; produto.BaseIcms = icms.vBC; produto.AliquotaIcms = icms.pICMS; produto.OCst = icms.orig + icms.CST + icms.CSOSN; } } if (imposto.IPI != null) { var ipi = imposto.IPI.IPITrib; if (ipi != null) { produto.ValorIpi = ipi.vIPI; produto.AliquotaIpi = ipi.pIPI; } } } model.Produtos.Add(produto); } if (infNfe.cobr != null) { foreach (var item in infNfe.cobr.dup) { DuplicataViewModel duplicata = new DuplicataViewModel(); duplicata.Numero = item.nDup; duplicata.Valor = item.vDup; duplicata.Vecimento = item.dVenc; model.Duplicatas.Add(duplicata); } } model.CalculoImposto = CriarCalculoImpostoViewModel(infNfe.total.ICMSTot); var issqnTotal = infNfe.total.ISSQNtot; if (issqnTotal != null) { var c = model.CalculoIssqn; c.InscricaoMunicipal = infNfe.emit.IM; c.BaseIssqn = issqnTotal.vBC; c.ValorTotalServicos = issqnTotal.vServ; c.ValorIssqn = issqnTotal.vISS; c.Mostrar = true; } var transp = infNfe.transp; var transportadora = transp.transporta; var transportadoraModel = model.Transportadora; transportadoraModel.ModalidadeFrete = (int)transp.modFrete; if (transp.veicTransp != null) { transportadoraModel.VeiculoUf = transp.veicTransp.UF; transportadoraModel.CodigoAntt = transp.veicTransp.RNTC; transportadoraModel.Placa = transp.veicTransp.placa; } if (transportadora != null) { transportadoraModel.RazaoSocial = transportadora.xNome; transportadoraModel.EnderecoUf = transportadora.UF; transportadoraModel.CnpjCpf = !String.IsNullOrWhiteSpace(transportadora.CNPJ) ? transportadora.CNPJ : transportadora.CPF; transportadoraModel.EnderecoLogadrouro = transportadora.xEnder; transportadoraModel.Municipio = transportadora.xMun; transportadoraModel.Ie = transportadora.IE; } var vol = transp.vol.FirstOrDefault(); if (vol != null) { transportadoraModel.QuantidadeVolumes = vol.qVol; transportadoraModel.Especie = vol.esp; transportadoraModel.Marca = vol.marca; transportadoraModel.Numeracao = vol.nVol; transportadoraModel.PesoBruto = vol.pesoB; transportadoraModel.PesoLiquido = vol.pesoL; } var infAdic = infNfe.infAdic; if (infAdic != null) { model.InformacoesComplementares = procNfe.NFe.infNFe.infAdic.infCpl; model.InformacoesAdicionaisFisco = procNfe.NFe.infNFe.infAdic.infAdFisco; } var infoProto = procNfe.protNFe.infProt; model.ProtocoloAutorizacao = String.Format(Formatador.Cultura, "{0} - {1}", infoProto.nProt, infoProto.dhRecbto.DateTimeOffsetValue.DateTime); ExtrairDatas(model, infNfe); return(model); }
// Manual de Especificacoes Tecnicas do DANFE NFCeQRCode_Versao3.4_26_10_2015 public static DanfeViewModel CreateFromProcNFCe(ProcNFe procNfe) { DanfeViewModel model = new DanfeViewModel(); var nfe = procNfe.NFe; var infNfe = nfe.infNFe; var ide = infNfe.ide; if (ide.mod != 65) { throw new Exception("Modelo da nota difere de 65"); } if (ide.tpEmis != FormaEmissao.Normal && ide.tpEmis != FormaEmissao.ContingenciaDPEC && ide.tpEmis != FormaEmissao.ContingenciaFSDA && ide.tpEmis != FormaEmissao.ContingenciaSVCAN && ide.tpEmis != FormaEmissao.ContingenciaSVCRS) { throw new Exception("Somente o tpEmis==1 está implementado."); } // Divisão 1 - Informações do Cabeçalho model.Emitente.RazaoSocial = !string.IsNullOrWhiteSpace(infNfe.emit.xNome) ? infNfe.emit.xNome : null; model.Emitente.CnpjCpf = !string.IsNullOrWhiteSpace(infNfe.emit.CNPJ) ? infNfe.emit.CNPJ : infNfe.emit.CPF; if (infNfe.emit.Endereco != null) { model.Emitente.EnderecoLogadrouro = infNfe?.emit?.Endereco?.xLgr; model.Emitente.EnderecoNumero = infNfe?.emit?.Endereco?.nro; model.Emitente.EnderecoBairro = infNfe?.emit?.Endereco?.xBairro; model.Emitente.Municipio = infNfe?.emit?.Endereco?.xMun; model.Emitente.EnderecoUf = infNfe?.emit?.Endereco?.UF; } // Divisão 2 - Identificação do DANFE NFCe // Está no bloco TabelaProdutosServicosNFC // Divisão 3 - Informações de detalhes de produtos/serviços foreach (var det in infNfe.det) { var produto = new ProdutoViewModel(); produto.Codigo = det.prod.cProd; produto.Descricao = det.prod.xProd; produto.Unidade = det.prod.uCom; produto.Quantidade = det.prod.qCom; produto.ValorUnitario = det.prod.vUnCom; produto.ValorTotal = det.prod.vProd; model.Produtos.Add(produto); } // Divisão 4 - Informações de Totais do DANFE NFCe model.CalculoImposto = new CalculoImpostoViewModel() { QuantidadeTotal = model.Produtos.Count(), ValorTotalProdutos = infNfe.total.ICMSTot.vProd, ValorFrete = infNfe.total.ICMSTot.vFrete, ValorSeguro = infNfe.total.ICMSTot.vSeg, OutrasDespesas = infNfe.total.ICMSTot.vOutro, Desconto = infNfe.total.ICMSTot.vDesc, ValorTotalNota = infNfe.total.ICMSTot.vNF, }; foreach (var pag in infNfe.pag) { var pagamento = new PagamentoViewModel(); pagamento.DetalhePagamento = new System.Collections.Generic.List <DetalheViewModel>(); pagamento.Troco = pag.vTroco; foreach (var detPag in pag.detPag) { var detalhe = new DetalheViewModel(); detalhe.FormaPagamento = (FormaPagamento)detPag.tPag; detalhe.Valor = detPag.vPag; pagamento.DetalhePagamento.Add(detalhe); } model.Pagamento.Add(pagamento); } // Divisão 5 - Área de Mensagem Fiscal (BlocoInformacaoFiscal) model.TipoAmbiente = (int)ide.tpAmb; // Divisão 6 - Informações de Identificação da NFC-e e do Protocolo de Autorização model.NfNumero = ide.nNF; model.NfSerie = ide.serie; model.DataHoraEmissao = ide.dhEmi.GetValueOrDefault().DateTimeOffsetValue.DateTime; // consultar os sites para consultar nfce --> http://nfce.encat.org/consulte-sua-nota-qr-code-versao-2-0/ if (ide.tpAmb == TAmb.Producao) { model.EndConsulta = infNfe?.emit?.Endereco?.UF.UrlNFCeProduction(); } else if (ide.tpAmb == TAmb.Homologacao) { model.EndConsulta = infNfe?.emit?.Endereco?.UF.UrlNFCeTest(); } // dividir a chave de acesso em 11 blocos com espaço em cada bloco 999 999 999 999 999 999 999 999 999 999 999 model.ChaveAcesso = procNfe.NFe.infNFe.Id.Substring(3).SpaceOnAccessKey(); model.ProtocoloAutorizacao = String.Format(Formatador.Cultura, "{0} {1}", procNfe.protNFe.infProt.nProt, procNfe.protNFe.infProt.dhRecbto.DateTimeOffsetValue.DateTime); // Divisão 7 - Informações sobre o Consumidor model.Destinatario.RazaoSocial = !string.IsNullOrWhiteSpace(infNfe?.dest?.xNome) ? infNfe.dest.xNome : null; if (infNfe.dest != null) { if (!string.IsNullOrWhiteSpace(infNfe?.dest?.CPF)) { model.Destinatario.CnpjCpf = infNfe.dest.CPF; } if (!string.IsNullOrWhiteSpace(infNfe?.dest?.CNPJ)) { model.Destinatario.CnpjCpf = infNfe.dest.CNPJ; } if (infNfe.dest != null && infNfe.dest.Endereco != null) { model.Destinatario.EnderecoLogadrouro = infNfe.dest.Endereco.xLgr; model.Destinatario.EnderecoNumero = infNfe.dest.Endereco.nro; model.Destinatario.EnderecoBairro = infNfe.dest.Endereco.xBairro; model.Destinatario.Municipio = infNfe.dest.Endereco.xMun; model.Destinatario.EnderecoUf = infNfe.dest.Endereco.UF; } } // Divisão 8 - Informações da Consulta via QR CODE model.QrCode = nfe.infNFeSupl.qrCode; // Divisão 9 - Mensagem de Interesse do Contribuinte model.CalculoImposto.ValorAproximadoTributos = infNfe.total.ICMSTot.vICMS + infNfe.total.ICMSTot.vST + infNfe.total.ICMSTot.vII + infNfe.total.ICMSTot.vIPI + infNfe.total.ICMSTot.vPIS + infNfe.total.ICMSTot.vCOFINS; model.CalculoImposto.ValorAproximadoTributosEstaduais = infNfe.total.ICMSTot.vICMS + infNfe.total.ICMSTot.vST; model.CalculoImposto.ValorAproximadoTributosFederais = infNfe.total.ICMSTot.vII + infNfe.total.ICMSTot.vIPI + infNfe.total.ICMSTot.vPIS + infNfe.total.ICMSTot.vCOFINS; return(model); }