Пример #1
0
        public static NFeProc XmlStringParaNFeProc(string xml)
        {
            NFeProc nfeProc = null;

            object retorno = CarregarClasse <NFeProc>(xml);

            if (retorno == null)
            {
                retorno = CarregarClasse <NFe>(xml);
            }

            if (retorno == null)
            {
                throw new Exception("Formato de XML inválido");
            }

            if (retorno is NFeProc proc)
            {
                nfeProc = proc;
            }
            else
            {
                nfeProc = new NFeProc
                {
                    NFe = (NFe)retorno
                };
            }
            return(nfeProc);
        }
        private void popularForm(NFeProc nfe)
        {
            /* Populando tab Identificação */
            txtNaturezaOperacao.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Identificacao.natOp;
            txtNumero.Text           = nfe.NotaFiscalEletronica.InformacoesNFe.Identificacao.nNF;
            txtModelo.Text           = nfe.NotaFiscalEletronica.InformacoesNFe.Identificacao.mod;
            txtSerie.Text            = nfe.NotaFiscalEletronica.InformacoesNFe.Identificacao.serie.ToString();
            txtDataEmissao.Text      = nfe.NotaFiscalEletronica.InformacoesNFe.Identificacao.dhEmi.ToShortDateString();

            /* Populando tab Emitente */
            txtRazaoSocial.Text        = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.xNome;
            txtNomeFantasia.Text       = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.xFant;
            txtCpfCnpjEmitente.Text    = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.CNPJ;
            txtInscricaoEstadual.Text  = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.IE;
            txtLogradouroEmitente.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.Endereco.xLgr;
            txtNroEmitente.Text        = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.Endereco.nro;
            txtMunicipioEmitente.Text  = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.Endereco.xMun;
            txtUFEmitente.Text         = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.Endereco.UF;

            /* Populando tab Destinatário */
            txtDestNomeFantasia.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.xNome;
            txtDestCpfCnpj.Text      = string.IsNullOrEmpty(nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.CNPJ) ? nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.CPF : nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.CNPJ;
            txtDestEmail.Text        = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.email;
            txtDestLogradouro.Text   = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.Endereco.xLgr;
            txtDestNumero.Text       = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.Endereco.nro;
            txtDestMunicipio.Text    = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.Endereco.xMun;
            txtDestUF.Text           = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.Endereco.UF;
            txtDestCEP.Text          = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.Endereco.CEP;
            txtDestBairro.Text       = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.Endereco.xBairro;
        }
Пример #3
0
 internal static DanfeViewModel CreateFromXmlString(string xml)
 {
     try
     {
         var nfe = NFeProc.Load(xml);
         return(CreateFromXml(nfe));
     }
     catch (System.Exception ex)
     {
         throw new System.Exception("Não foi possível interpretar o texto Xml.", ex);
     }
 }
Пример #4
0
        private void popularForm(NFeProc nfe)
        {
            // Limpa o grid
            Grid.Rows.Clear();

            /* Populando tab Identificação */
            txtnometipooperacao.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Identificacao.natOp;
            txtnumeronota.Text       = nfe.NotaFiscalEletronica.InformacoesNFe.Identificacao.nNF;
            //txtModelo.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Identificacao.mod;
            txtserienota.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Identificacao.serie.ToString();
            txtdtemissao.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Identificacao.dhEmi.ToShortDateString();

            /* Populando tab Emitente */
            txtnomefornecedor.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.xNome;
            //txtnomefornecedor.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.xFant;
            txtCpfCnpjEmitente.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.CNPJ;
            //txtInscricaoEstadual.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.IE;
            //txtLogradouroEmitente.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.Endereco.xLgr;
            //txtNroEmitente.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.Endereco.nro;
            //txtMunicipioEmitente.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.Endereco.xMun;
            //txtUFEmitente.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Emitente.Endereco.UF;

            /* Populando tab Destinatário */
            //txtDestNomeFantasia.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.xNome;
            //txtDestCpfCnpj.Text = string.IsNullOrEmpty(nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.CNPJ) ? nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.CPF : nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.CNPJ;
            //txtDestEmail.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.email;
            //txtDestLogradouro.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.Endereco.xLgr;
            //txtDestNumero.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.Endereco.nro;
            //txtDestMunicipio.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.Endereco.xMun;
            //txtDestUF.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.Endereco.UF;
            //txtDestCEP.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.Endereco.CEP;
            //txtDestBairro.Text = nfe.NotaFiscalEletronica.InformacoesNFe.Destinatario.Endereco.xBairro;


            int    num   = nfe.NotaFiscalEletronica.InformacoesNFe.Detalhe.Count();
            string teste = "";

            for (int i = 0; i < num; i++)
            {
                //define um array de strings com nCOlunas
                string[] linhaDados = new string[6];

                linhaDados[0] = nfe.NotaFiscalEletronica.InformacoesNFe.Detalhe[i].Produtos.cProd;
                linhaDados[1] = nfe.NotaFiscalEletronica.InformacoesNFe.Detalhe[i].Produtos.xProd;
                linhaDados[2] = nfe.NotaFiscalEletronica.InformacoesNFe.Detalhe[i].Produtos.qCom.ToString();
                linhaDados[3] = nfe.NotaFiscalEletronica.InformacoesNFe.Detalhe[i].Produtos.vUnCom.ToString();
                linhaDados[4] = "";
                linhaDados[5] = "";


                Grid.Rows.Add(linhaDados);
            }
        }
Пример #5
0
        internal static DanfeViewModel CreateFromXmlStream(Stream stream)
        {
            try
            {
                var nfe = NFeProc.Load(stream);
                return(CreateFromXml(nfe));
            }
            catch (System.Exception ex)
            {
                if (ex.InnerException is XmlException e)
                {
                    throw new System.Exception($"Não foi possível interpretar o Xml. Linha {e.LineNumber} Posição {e.LinePosition}.");
                }

                throw new XmlException("O Xml não parece ser uma NF-e processada.", ex);
            }
        }
Пример #6
0
 public NFeRetAutorizacaoResposta(string xmlEnvio, string xmlRetorno, string envelopeSoap, string respostaWs, bool loadRetorno = true) : base(xmlEnvio, xmlRetorno, envelopeSoap, respostaWs, loadRetorno)
 {
     NFeAutorizadas = new NFeProc[0];
 }
Пример #7
0
        public static DanfeViewModel CreateFromXml(NFeProc procNfe)
        {
            var model = new DanfeViewModel();

            var nfe    = procNfe.NFe;
            var infNfe = nfe.InfNFe;
            var ide    = infNfe.Ide;

            model.TipoEmissao = ide.TipoEmissao;

            if (ide.Modelo != NFeModelo.NFe)
            {
                throw new NotSupportedException("Somente o mod==55 está implementado.");
            }

            if (!FormasEmissaoSuportadas.Contains(model.TipoEmissao))
            {
                throw new NotSupportedException($"O tpEmis {ide.TipoEmissao} não é suportado.");
            }

            model.Orientacao = ide.TipoImpressao == TipoImpressao.NormalRetrato ? Orientacao.Retrato : Orientacao.Paisagem;

            var infProt = procNfe.ProtNFe.InfProt;

            model.CodigoStatusReposta    = infProt.CStat;
            model.DescricaoStatusReposta = infProt.Motivo;
            model.TipoAmbiente           = (int)ide.TpAmb;
            model.NfNumero         = (int)ide.NumeroNFe;
            model.NfSerie          = ide.Serie;
            model.NaturezaOperacao = ide.NatOp;
            model.ChaveAcesso      = procNfe.NFe.InfNFe.Id.Substring(3);
            model.TipoNF           = (int)ide.TipoNFe;

            model.Emitente     = ObterEmitente(infNfe.Emitente);
            model.Destinatario = ObterDestinatario(infNfe.Destinatario);

            #region Compra / Entrega / Retirada

            if (infNfe.Retirada != null)
            {
                model.LocalRetirada = ObterLocalRetirada(infNfe.Retirada);
            }

            if (infNfe.Entrega != null)
            {
                model.LocalEntrega = ObterLocalEntrega(infNfe.Entrega);
            }

            model.NotasFiscaisReferenciadas = ide.NFref.Select(x => x.ToString()).ToList();

            if (infNfe.Compra != null)
            {
                model.Contrato    = infNfe.Compra.XCont;
                model.NotaEmpenho = infNfe.Compra.XNEmp;
                model.Pedido      = infNfe.Compra.XPed;
            }

            #endregion

            #region Detalhes

            foreach (var det in infNfe.Detalhe)
            {
                var produto = new ProdutoViewModel
                {
                    Codigo                = det.Produto.Codigo,
                    Descricao             = det.Produto.XProd,
                    Ncm                   = det.Produto.NCM,
                    Cfop                  = det.Produto.CFOP,
                    Unidade               = det.Produto.UCom,
                    Quantidade            = (double)det.Produto.QCom,
                    ValorUnitario         = (double)det.Produto.VUnCom,
                    ValorTotal            = (double)det.Produto.VProd,
                    InformacoesAdicionais = det.InfAdProd
                };

                var imposto = det.Imposto;
                if (imposto != null)
                {
                    var icms = imposto.Imposto;
                    if (icms != null)
                    {
                        var modelIcms = ObterIcms(icms);

                        produto.ValorIcms    = modelIcms.VIcms;
                        produto.BaseIcms     = modelIcms.VBc;
                        produto.AliquotaIcms = modelIcms.PIcms;
                        produto.OCst         = modelIcms.OrigemMercadoria.GetDFeValue() + modelIcms.Cst + modelIcms.Csosn;
                    }

                    if (imposto.Ipi.Imposto is IpiTrib ipi)
                    {
                        produto.ValorIpi    = (double?)ipi.VIpi;
                        produto.AliquotaIpi = (double?)ipi.PIpi;
                    }
                }

                model.Produtos.Add(produto);
            }

            #endregion

            #region Cobrança

            if (infNfe.Cobranca != null)
            {
                var duplicatas = infNfe.Cobranca.Duplicata.Select(x => new DuplicataViewModel
                {
                    Numero    = x.NDup,
                    Valor     = (double?)x.VDup,
                    Vecimento = x.DVenc
                });
                model.Duplicatas = duplicatas.ToList();
            }

            #endregion

            #region Total

            model.CalculoImposto = ObterTotalImposto(infNfe.Total.IcmsTot);

            var issqnTotal = infNfe.Total.IssqnTot;
            if (issqnTotal != null)
            {
                var c = model.CalculoIssqn;
                c.InscricaoMunicipal = infNfe.Emitente.IM;
                c.BaseIssqn          = (double?)issqnTotal.VBc;
                c.ValorTotalServicos = (double?)issqnTotal.VServ;
                c.ValorIssqn         = (double?)issqnTotal.VIss;
                c.Mostrar            = true;
            }

            #endregion

            #region Transportadora

            var transp              = infNfe.Transporte;
            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.Especie;
                transportadoraModel.Marca             = vol.Marca;
                transportadoraModel.Numeracao         = vol.NVol;
                transportadoraModel.PesoBruto         = (double?)vol.PesoB;
                transportadoraModel.PesoLiquido       = (double?)vol.PesoL;
            }

            #endregion

            #region Informação Adicional

            var infAdic = infNfe.InformacaoAdicional;
            if (infAdic != null)
            {
                model.InformacoesComplementares  = procNfe.NFe.InfNFe.InformacaoAdicional.InformacaoComplementar;
                model.InformacoesAdicionaisFisco = procNfe.NFe.InfNFe.InformacaoAdicional.InformacaoFisco;
            }

            #endregion

            var infoProt = procNfe.ProtNFe.InfProt;
            model.ProtocoloAutorizacao = string.Format(DanfeHelper.Cultura, "{0} - {1}", infoProt.NProt, infoProt.DhRecbto.DateTime);
            model.DataHoraEmissao      = ide.DhEmi.DateTime;
            model.DataSaidaEntrada     = ide.DhSaiEnt?.DateTime;

            if (model.DataSaidaEntrada.HasValue)
            {
                model.HoraSaidaEntrada = model.DataSaidaEntrada?.TimeOfDay;
            }

            // Contingência SVC-AN e SVC-RS
            if (model.TipoEmissao == TipoEmissao.SVCAN || model.TipoEmissao == TipoEmissao.SVCRS)
            {
                model.ContingenciaDataHora      = ide.DhCont;
                model.ContingenciaJustificativa = ide.XJust;
            }

            return(model);
        }
Пример #8
0
            public static DanfeViewModel Criar(NFeProc nfeProc)
            {
                DanfeViewModel vm = new DanfeViewModel();

                var nfe    = nfeProc.NFe;
                var infNfe = nfe.infNFe;
                var ide    = infNfe.ide;

                vm.TipoEmissao = ide.tpEmis;

                if (ide.mod != 65)
                {
                    throw new NotSupportedException("Modelo não implementado");
                }

                if (!FormasEmissaoSuportadas.Contains(vm.TipoEmissao))
                {
                    throw new NotSupportedException($"Tipo de emissão [{ide.tpEmis}] não é suportado.");
                }

                if (vm.TipoEmissao == TipoEmissao.Normal)
                {
                    var infProt = nfeProc.protNFe.infProt;
                    vm.ProtocoloAutorizacao = infProt.nProt;
                    vm.DataAutorizacao      = infProt?.dhRecbto.ToString("G");
                }

                vm.NFNumero    = ide.nNF;
                vm.NFSerie     = ide.serie;
                vm.ChaveAcesso = nfeProc.NFe.infNFe.Id.Substring(3);
                vm.DataEmissao = nfeProc.NFe.infNFe.ide.dhEmi?.ToString("G");
                vm.TipoNF      = ide.tpNF;

                vm.UrlChave = nfeProc.NFe.infNFeSupl.urlChave;
                vm.QrCode   = nfeProc.NFe.infNFeSupl.qrCode;

                vm.Emitente = EmitenteViewModel.Factory.Criar(infNfe.emit);

                vm.Destinatario = DestinatarioViewModel.Factory.Criar(infNfe.dest);

                #region Itens
                vm.Itens = new List <ItemViewModel>();
                foreach (var item in nfeProc.NFe.infNFe.det)
                {
                    var ivm = new ItemViewModel
                    {
                        nItem      = item.nItem,
                        Codigo     = item.prod.cProd,
                        Descricao  = item.prod.xProd,
                        Unidade    = item.prod.uCom,
                        Preco      = item.prod.vUnCom,
                        Desconto   = item.prod.vDesc,
                        Quantidade = item.prod.qCom,
                        SubTotal   = item.prod.vProd
                    };
                    vm.Itens.Add(ivm);
                }
                #endregion

                #region Pagamentos
                foreach (var pag in nfeProc.NFe.infNFe.pag)
                {
                    if (pag.detPag == null)
                    {
                        continue;
                    }

                    foreach (var detPag in pag.detPag)
                    {
                        vm.Pagamentos.Add(
                            new PagamentoViewModel
                        {
                            FormaPagamento = detPag.tPag.Description(),
                            Valor          = detPag.vPag
                        }
                            );
                    }
                }
                #endregion

                vm.TributosIncidentes = nfeProc.NFe.infNFe.total.ICMSTot.vTotTrib ?? 0;

                //vm.Observacoes = nfe.infNFe?.infAdic?.infCpl;
                vm.Observacoes = " is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum";
                return(vm);
            }