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?.DateTimeOffsetValue.DateTime; } if (ide.dhSaiEnt.HasValue) { model.DataSaidaEntrada = ide.dhSaiEnt?.DateTimeOffsetValue.DateTime; } if (model.DataSaidaEntrada.HasValue) { model.HoraSaidaEntrada = model.DataSaidaEntrada?.TimeOfDay; } } else { model.DataHoraEmissao = ide.dEmi; model.DataSaidaEntrada = ide.dSaiEnt; if (!string.IsNullOrWhiteSpace(ide.hSaiEnt)) { model.HoraSaidaEntrada = TimeSpan.Parse(ide.hSaiEnt); } } }
public static DanfeViewModel CreateFromXml(ProcNFe procNfe) { DanfeViewModel model = new DanfeViewModel(); var nfe = procNfe.NFe; var infNfe = nfe.infNFe; var ide = infNfe.ide; model.TipoEmissao = ide.tpEmis; if (ide.mod != 55) { throw new NotSupportedException("Somente o mod==55 está implementado."); } if (!FormasEmissaoSuportadas.Contains(model.TipoEmissao)) { throw new NotSupportedException($"O tpEmis {ide.tpEmis} não é suportado."); } 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); // Local retirada e entrega if (infNfe.retirada != null) { model.LocalRetirada = CreateLocalRetiradaEntrega(infNfe.retirada); } if (infNfe.entrega != null) { model.LocalEntrega = CreateLocalRetiradaEntrega(infNfe.entrega); } 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) { var duplicatas = infNfe.cobr.dup.Select(x => new DuplicataViewModel { Numero = x.nDup, Valor = x.vDup, Vecimento = x.dVenc }); model.Duplicatas = duplicatas.ToList(); } 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); // Contingência SVC-AN e SVC-RS if (model.TipoEmissao == FormaEmissao.ContingenciaSVCAN || model.TipoEmissao == FormaEmissao.ContingenciaSVCRS) { model.ContingenciaDataHora = ide.dhCont?.DateTimeOffsetValue.DateTime; model.ContingenciaJustificativa = ide.xJust; } return(model); }