Пример #1
0
        private TotalNFe GetTotalNFe(Retorno.TNFe nfe)
        {
            var infNfeTotal = nfe.infNFe.total.ICMSTot;

            var totalNFe = new TotalNFe {
                IcmsTotal = new IcmsTotal()
            };
            var icmsTotal = totalNFe.IcmsTotal;

            icmsTotal.BaseCalculo             = double.Parse(infNfeTotal.vBC, CultureInfo.InvariantCulture);
            icmsTotal.ValorTotalIcms          = double.Parse(infNfeTotal.vICMS, CultureInfo.InvariantCulture);
            icmsTotal.ValorTotalDesonerado    = double.Parse(infNfeTotal.vICMSDeson, CultureInfo.InvariantCulture);
            icmsTotal.BaseCalculoST           = double.Parse(infNfeTotal.vBCST, CultureInfo.InvariantCulture);
            icmsTotal.ValorTotalST            = double.Parse(infNfeTotal.vST, CultureInfo.InvariantCulture);
            icmsTotal.ValorTotalProdutos      = double.Parse(infNfeTotal.vProd, CultureInfo.InvariantCulture);
            icmsTotal.ValorTotalFrete         = double.Parse(infNfeTotal.vFrete, CultureInfo.InvariantCulture);
            icmsTotal.ValorTotalSeguro        = double.Parse(infNfeTotal.vSeg, CultureInfo.InvariantCulture);
            icmsTotal.ValorTotalDesconto      = double.Parse(infNfeTotal.vDesc, CultureInfo.InvariantCulture);
            icmsTotal.ValorTotalII            = double.Parse(infNfeTotal.vII, CultureInfo.InvariantCulture);
            icmsTotal.ValorTotalIpi           = double.Parse(infNfeTotal.vIPI, CultureInfo.InvariantCulture);
            icmsTotal.ValorTotalPis           = double.Parse(infNfeTotal.vPIS, CultureInfo.InvariantCulture);
            icmsTotal.ValorTotalCofins        = double.Parse(infNfeTotal.vCOFINS, CultureInfo.InvariantCulture);
            icmsTotal.ValorDespesasAcessorias = double.Parse(infNfeTotal.vOutro, CultureInfo.InvariantCulture);
            icmsTotal.ValorTotalNFe           = double.Parse(infNfeTotal.vNF, CultureInfo.InvariantCulture);

            return(totalNFe);
        }
Пример #2
0
        private Transporte GetTransporte(Retorno.TNFe nfe)
        {
            var transportadoraNFe = nfe.infNFe.transp.transporta;

            if (transportadoraNFe != null)
            {
                var uf = TUfConversor.ToSiglaUf((TUf)(int)transportadoraNFe.UF);

                var modelo         = nfe.infNFe.ide.mod == Retorno.TMod.Item55 ? Modelo.Modelo55 : Modelo.Modelo65;
                var transportadora = new Transportadora(transportadoraNFe.Item, transportadoraNFe.xEnder,
                                                        transportadoraNFe.IE, transportadoraNFe.xMun, uf, transportadoraNFe.xNome);

                if (nfe.infNFe.transp.Items.Length <= 0)
                {
                    return(new Transporte(modelo, transportadora, null));
                }
                var veiculoNFe = (Retorno.TVeiculo)nfe.infNFe.transp.Items[0];
                var veiculo    = new Veiculo(veiculoNFe.placa, TUfConversor.ToSiglaUf(veiculoNFe.UF));

                return(new Transporte(modelo, transportadora, veiculo));
            }

            return(nfe.infNFe.transp.modFrete == Retorno.TNFeInfNFeTranspModFrete.Item9
                ? new Transporte(Modelo.Modelo65, null, null)
                : null);
        }
Пример #3
0
        private IdentificacaoNFe GetIdentificacao(Retorno.TNFe nfe, Emissor emitente)
        {
            var uf          = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), emitente.Endereco.UF);
            var dataEmissao = DateTime.ParseExact(nfe.infNFe.ide.dhEmi, "yyyy-MM-ddTHH:mm:sszzz",
                                                  CultureInfo.InvariantCulture);
            var ambiente    = (Ambiente)(int)nfe.infNFe.ide.tpAmb;
            var modelo      = nfe.infNFe.ide.mod == Retorno.TMod.Item55 ? Modelo.Modelo55 : Modelo.Modelo65;
            var tipoEmissao = nfe.infNFe.ide.tpEmis == Retorno.TNFeInfNFeIdeTpEmis.Item9
                ? TipoEmissao.ContigenciaNfce
                : TipoEmissao.Normal; //Isso aqui vai me dar problema
            var formatoImpressao     = (FormatoImpressao)(int)nfe.infNFe.ide.tpImp;
            var isImpressaoBobina    = formatoImpressao == FormatoImpressao.Nfce;
            var finalidadeConsumidor = (FinalidadeConsumidor)(int)nfe.infNFe.ide.indFinal;
            var documentoDanfe       = finalidadeConsumidor == FinalidadeConsumidor.ConsumidorFinal ? "CPF" : "CNPJ";
            var finalidadeNFe        = (FinalidadeEmissao)(int)nfe.infNFe.ide.finNFe;

            var ide = new IdentificacaoNFe(uf, dataEmissao, emitente.CNPJ, modelo, int.Parse(nfe.infNFe.ide.serie),
                                           nfe.infNFe.ide.nNF, tipoEmissao, ambiente, emitente, nfe.infNFe.ide.natOp,
                                           finalidadeNFe, isImpressaoBobina, PresencaComprador.Presencial, documentoDanfe);

            if (nfe.infNFe.ide.tpEmis != Retorno.TNFeInfNFeIdeTpEmis.Item9)
            {
                return(ide);
            }

            ide.DataHoraEntradaContigencia = DateTime.ParseExact(nfe.infNFe.ide.dhCont, "yyyy-MM-ddTHH:mm:sszzz",
                                                                 CultureInfo.InvariantCulture);
            ide.JustificativaContigencia = nfe.infNFe.ide.xJust;

            return(ide);
        }
Пример #4
0
        private Emissor GetEmitente(Retorno.TNFe nfe)
        {
            var    nfeEmit = nfe.infNFe.emit;
            string regimeTributario;

            switch (nfeEmit.CRT)
            {
            case Retorno.TNFeInfNFeEmitCRT.Item1:
                regimeTributario = "Simples Nacional";
                break;

            case Retorno.TNFeInfNFeEmitCRT.Item2:
                regimeTributario = "Simples Nacional Excesso Receita Bruta";
                break;

            case Retorno.TNFeInfNFeEmitCRT.Item3:
                regimeTributario = "Regime Normal";
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            var uf       = TUfEmiConversor.ToUfString((TUfEmi)(int)nfeEmit.enderEmit.UF);
            var endereco = new Endereco(nfeEmit.enderEmit.xLgr, nfeEmit.enderEmit.nro, nfeEmit.enderEmit.xBairro,
                                        nfeEmit.enderEmit.xMun, nfeEmit.enderEmit.CEP, uf);

            return(new Emissor(nfeEmit.xNome, nfeEmit.xFant, nfeEmit.Item, nfeEmit.IE, nfeEmit.IE, nfeEmit.CNAE,
                               regimeTributario, endereco, nfeEmit.enderEmit.fone));
        }
Пример #5
0
        private List <Produto> GetProdutos(Retorno.TNFe nfe)
        {
            var produtos = new List <Produto>();

            var ambiente = (Ambiente)(int)nfe.infNFe.ide.tpAmb;

            foreach (var det in nfe.infNFe.det)
            {
                var icmsDet = (Retorno.TNFeInfNFeDetImpostoICMS)det.imposto.Items[0];

                var icms = new Imposto {
                    TipoImposto = TipoImposto.Icms, Aliquota = 0
                };

                var icms60 = icmsDet.Item as Retorno.TNFeInfNFeDetImpostoICMSICMS60;
                if (icms60 != null)
                {
                    icms.CST = TabelaIcmsCst.IcmsCobradoAnteriormentePorST;
                }
                else if (icmsDet.Item is Retorno.TNFeInfNFeDetImpostoICMSICMS40)
                {
                    icms.CST = TabelaIcmsCst.Isenta;
                }

                var pisNt = (Retorno.TNFeInfNFeDetImpostoPISPISNT)det.imposto.PIS.Item;
                var pis   = new Imposto
                {
                    TipoImposto = TipoImposto.PIS,
                    Aliquota    = 0,
                    CST         = pisNt.CST.ToString().Replace("Item", string.Empty)
                };

                var grupoImpostos = new GrupoImpostos
                {
                    CFOP     = det.prod.CFOP.Replace("Item", string.Empty),
                    Impostos = new List <Imposto> {
                        icms, pis
                    }
                };

                var newProduto = new Produto(grupoImpostos, 0, det.prod.CFOP.Replace("Item", string.Empty),
                                             det.prod.cProd, det.prod.xProd, det.prod.NCM,
                                             int.Parse(det.prod.qCom), det.prod.uCom,
                                             double.Parse(det.prod.vUnCom, CultureInfo.InvariantCulture), 0, ambiente == Ambiente.Producao)
                {
                    Cest = det.prod.CEST
                };


                produtos.Add(newProduto);
            }

            return(produtos);
        }
Пример #6
0
        private Destinatario GetDestinatario(Retorno.TNFe nfe)
        {
            var nfeDest = nfe.infNFe.dest;

            if (nfeDest == null)
            {
                return(null);
            }

            TipoDestinatario tipoDestinatario;

            switch (nfeDest.ItemElementName)
            {
            case Retorno.ItemChoiceType3.CPF:
                tipoDestinatario = TipoDestinatario.PessoaFisica;
                break;

            case Retorno.ItemChoiceType3.CNPJ:
                tipoDestinatario = TipoDestinatario.PessoaJuridica;
                break;

            case Retorno.ItemChoiceType3.idEstrangeiro:
                tipoDestinatario = TipoDestinatario.Estrangeiro;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            if (nfeDest.enderDest != null)
            {
                var uf       = TUfDestConversor.ToUfString((TUf)(int)nfeDest.enderDest.UF);
                var endereco = new Endereco(nfeDest.enderDest.xLgr, nfeDest.enderDest.nro,
                                            nfeDest.enderDest.xBairro, nfeDest.enderDest.xMun, nfeDest.enderDest.CEP, uf);

                var ambiente = (Ambiente)(int)nfe.infNFe.ide.tpAmb;
                var modelo   = nfe.infNFe.ide.mod == Retorno.TMod.Item55 ? Modelo.Modelo55 : Modelo.Modelo65;

                return(new Destinatario(ambiente, modelo, nfeDest.enderDest.fone, nfeDest.email, endereco,
                                        tipoDestinatario, nfeDest.IE, nomeRazao: nfeDest.xNome, documento: nfeDest.Item));
            }
            else
            {
                var ambiente = (Ambiente)(int)nfe.infNFe.ide.tpAmb;
                var modelo   = nfe.infNFe.ide.mod == Retorno.TMod.Item55 ? Modelo.Modelo55 : Modelo.Modelo65;

                return(new Destinatario(ambiente, modelo, null, nfeDest.email, null, tipoDestinatario, nfeDest.IE,
                                        nomeRazao: nfeDest.xNome, documento: nfeDest.Item));
            }
        }
Пример #7
0
        private List <Pagamento> GetPagamentos(Retorno.TNFe nfe)
        {
            var pagamentos = new List <Pagamento>();
            var pagNFe     = nfe.infNFe.pag;

            if (pagNFe == null)
            {
                return(null);
            }

            foreach (var pag in pagNFe.detPag)
            {
                var formaPagamento = (FormaPagamento)(int)pag.tPag;

                switch (formaPagamento)
                {
                case FormaPagamento.CartaoCredito:
                    break;

                case FormaPagamento.CartaoDebito:
                    break;

                case FormaPagamento.Cheque:
                    break;

                case FormaPagamento.Dinheiro:
                    break;

                case FormaPagamento.SemPagamento:
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                pagamentos.Add(new Pagamento(formaPagamento, double.Parse(pag.vPag, CultureInfo.InvariantCulture)));
            }

            return(pagamentos);
        }