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.TipoAmbiente = (int)ide.tpAmb; model.NumeroNF = ide.nNF; model.Serie = 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); 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); } } var icmsTotal = infNfe.total.ICMSTot; model.ValorAproximadoTributos = icmsTotal.vTotTrib; model.BaseCalculoIcms = icmsTotal.vBC; model.ValorIcms = icmsTotal.vICMS; model.BaseCalculoIcmsSt = icmsTotal.vBCST; model.ValorIcmsSt = icmsTotal.vST; model.ValorTotalProdutos = icmsTotal.vProd; model.ValorFrete = icmsTotal.vFrete; model.ValorSeguro = icmsTotal.vSeg; model.Desconto = icmsTotal.vDesc; model.ValorIpi = icmsTotal.vIPI; model.OutrasDespesas = icmsTotal.vOutro; model.ValorTotalNota = icmsTotal.vNF; var issqnTotal = infNfe.total.ISSQNtot; if(issqnTotal != null) { model.BaseIssqn = issqnTotal.vBC; model.ValorTotalServicos = issqnTotal.vServ; model.ValorIssqn = issqnTotal.vISS; } 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.Nome = 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("{0} - {1}", infoProto.nProt, infoProto.dhRecbto); ExtrairDatas(model, infNfe); return model; }
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.TipoAmbiente = (int)ide.tpAmb; model.NumeroNF = ide.nNF; model.Serie = 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); 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); } } var icmsTotal = infNfe.total.ICMSTot; model.ValorAproximadoTributos = icmsTotal.vTotTrib; model.BaseCalculoIcms = icmsTotal.vBC; model.ValorIcms = icmsTotal.vICMS; model.BaseCalculoIcmsSt = icmsTotal.vBCST; model.ValorIcmsSt = icmsTotal.vST; model.ValorTotalProdutos = icmsTotal.vProd; model.ValorFrete = icmsTotal.vFrete; model.ValorSeguro = icmsTotal.vSeg; model.Desconto = icmsTotal.vDesc; model.ValorIpi = icmsTotal.vIPI; model.OutrasDespesas = icmsTotal.vOutro; model.ValorTotalNota = icmsTotal.vNF; var issqnTotal = infNfe.total.ISSQNtot; if (issqnTotal != null) { model.BaseIssqn = issqnTotal.vBC; model.ValorTotalServicos = issqnTotal.vServ; model.ValorIssqn = issqnTotal.vISS; } 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.Nome = 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("{0} - {1}", infoProto.nProt, infoProto.dhRecbto); ExtrairDatas(model, infNfe); return(model); }