public void Verifica_Deserializacao_From_File()
        {
            var     nfeSerializer = new NfeXmlSerializer();
            NfeProc nfe           = nfeSerializer.DeserializeFromFile <NfeProc>("NfeProc.xml");

            Assert.IsTrue(nfe != null);
            Assert.IsTrue(nfe.Nfe != null);
            Debug.WriteLine(String.Format("Num Nfe.: {0}", nfe.Nfe.InfNfe.Ide.NumNf));

            Debug.WriteLine(String.Format("Remetente.: {0}", nfe.Nfe.InfNfe.Emitente.Nome));
            Debug.WriteLine(String.Format("Destinatário.: {0}", nfe.Nfe.InfNfe.Destinatario.Nome));
            Debug.WriteLine(String.Format("Qtde. Itens.: {0}", nfe.Nfe.InfNfe.Itens.Count));

            Assert.IsTrue(nfe.Nfe.InfNfe.Itens.Count > 0);

            foreach (var item in nfe.Nfe.InfNfe.Itens)
            {
                Debug.WriteLine(String.Format("Produto .: {0}", item.Produto.Descricao));
                Debug.WriteLine(String.Format("Inf. Adicional .: {0}", item.InfAdProd));
            }

            NotaFiscalEletronica notaFiscal = nfeSerializer.DeserializeFromFile <NotaFiscalEletronica>("Nfe.xml");

            Assert.IsTrue(notaFiscal != null);
        }
        public List <NfeProc> GetNfeProcList(List <Stream> pStreamList)
        {
            List <NfeProc> nfeProcList = new List <NfeProc>();

            if (pStreamList != null && pStreamList.Any())
            {
                NfeXmlSerializer xmlSerializer = new NfeXmlSerializer();

                pStreamList.Select(stream => stream)
                .ToList()
                .ForEach(inputStream =>
                {
                    NfeProc nfeProc = null;
                    try
                    {
                        nfeProc = xmlSerializer.DeserializeFromStream <NfeProc>(inputStream);
                    }
                    catch (InvalidOperationException)
                    {
                        if (nfeProc == null)
                        {
                            try
                            {
                                NotaFiscalEletronica nota = xmlSerializer.DeserializeFromStream <NotaFiscalEletronica>(inputStream);

                                nfeProc = new NfeProc
                                {
                                    ProtNfe = new ProtNfe
                                    {
                                        InfProt = new InfProt
                                        {
                                            ChaveNFe = nota.InfNfe.Id.Replace("NFe", ""),
                                            tpAmb    = nota.InfNfe.Ide.tpAmb,
                                            VerAplic = nota.InfNfe.Ide.VerProc,
                                            Motivo   = "Protocolo não encontrado"
                                        }
                                    },

                                    Nfe = nota
                                };
                            }
                            catch (InvalidOperationException)
                            {
                                nfeProc = new NfeProc {
                                    ProtNfe = new ProtNfe {
                                        InfProt = new InfProt {
                                            Motivo = "Falha ao processar arquivo"
                                        }
                                    }
                                };
                            }
                        }
                    }
                    nfeProcList.Add(nfeProc);
                });
            }

            return(nfeProcList);
        }
        public void Testa_Exception_FileNotFound()
        {
            var nfeSerializer = new NfeXmlSerializer();

            NfeProc nfe = nfeSerializer.DeserializeFromFile <NfeProc>("Nfe_0000.xml");

            Assert.IsTrue(nfe != null);
        }
        public List <NfeValidation> GetNfeValidationMessages(string path, List <Stream> pStreamList)
        {
            List <NfeValidation> NfeValidationList = new List <NfeValidation>();

            if (pStreamList != null && pStreamList.Any())
            {
                NfeXmlSerializer xmlSerializer  = new NfeXmlSerializer();
                string           xsdFileName    = null;
                List <string>    validationList = null;

                pStreamList.Select(stream => stream)
                .ToList()
                .ForEach(inputStream =>
                {
                    NfeProc nfeProc = null;
                    try
                    {
                        nfeProc             = xmlSerializer.DeserializeFromStream <NfeProc>(inputStream);
                        xsdFileName         = NfeSchemaFileResolver <NfeProc> .GetByNfeVersion(nfeProc.Versao);
                        var xsdFileNamePath = Path.Combine(path, xsdFileName);
                        validationList      = xmlSerializer.Validate(inputStream, xsdFileNamePath);
                        validationList.ForEach(msg => NfeValidationList.Add(new NfeValidation {
                            NumNf = nfeProc.Nfe.InfNfe.Ide.NumNf, Message = msg
                        }));

                        if (!validationList.Any())
                        {
                            NfeValidationList.Add(new NfeValidation {
                                NumNf = nfeProc.Nfe.InfNfe.Ide.NumNf, Message = "Nenhuma inconsistência encontrada"
                            });
                        }
                    }
                    catch (InvalidOperationException)
                    {
                        if (nfeProc == null)
                        {
                            try
                            {
                                NotaFiscalEletronica nota = xmlSerializer.DeserializeFromStream <NotaFiscalEletronica>(inputStream);
                                xsdFileName         = NfeSchemaFileResolver <NotaFiscalEletronica> .GetByNfeVersion(nota.InfNfe.Versao);
                                var xsdFileNamePath = Path.Combine(path, xsdFileName);
                                validationList      = xmlSerializer.Validate(inputStream, xsdFileNamePath);
                                validationList.ForEach(msg => NfeValidationList.Add(new NfeValidation {
                                    NumNf = nota.InfNfe.Ide.NumNf, Message = msg
                                }));

                                if (!validationList.Any())
                                {
                                    NfeValidationList.Add(new NfeValidation {
                                        NumNf = nota.InfNfe.Ide.NumNf, Message = "Nenhuma inconsistência encontrada"
                                    });
                                }
                            }
                            catch (Exception e)
                            {
                                NfeValidationList.Add(new NfeValidation {
                                    NumNf = "", Message = e.Message
                                });
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        NfeValidationList.Add(new NfeValidation {
                            NumNf = "", Message = e.Message
                        });
                    }
                });
            }

            return(NfeValidationList);
        }
        public NfeProc GetFakeNfeProc()
        {
            var nfeProc = new NfeProc()
            {
                ProtNfe = new ProtNfe
                {
                    InfProt = new InfProt
                    {
                        ChaveNFe  = "1111111111111111111111111111111",
                        Id        = "11111111111111111111111",
                        CodStatus = "1111",
                        NumProt   = "111111"
                    },
                    Versao = "1.0.0"
                },
                Nfe = new NotaFiscalEletronica
                {
                    InfNfe = new InfNFe
                    {
                        Id = "NFe12344321341234123412342134123412",

                        Ide = new Ide
                        {
                            DtEmi    = DateTime.Now.ToString("dd/MM/yyyy"),
                            DtSaiEnt = DateTime.Now.ToString("dd/MM/yyyy"),
                            Mod      = "55",
                            NatOp    = "Venda de Mercadoria",
                            Serie    = "1",
                            Uf       = "SP",
                            TpNf     = "1",
                            NumNf    = "1234567",
                            IndPag   = "1",
                            CodNf    = "22222"
                        },

                        Emitente = new Emitente
                        {
                            Cnpj         = "1111111111",
                            Nome         = "EMPRESA TESTE",
                            EnderecoEmit = new EnderecoEmit
                            {
                                Bairro     = "Jardim Teste",
                                Cep        = "39284-021",
                                InscrEst   = "1234566788",
                                Logradouro = "Rua teste",
                                Numero     = "809",
                                Uf         = "RJ"
                            },
                            Fantasia = "EMPRESA TESTE"
                        },
                        Destinatario = new Destinatario
                        {
                            Cnpj         = "43422365342",
                            Nome         = "ANDERSON DAVANSE",
                            EnderecoDest = new EnderecoDest
                            {
                                Bairro     = "Bairro Teste",
                                Cep        = "023943-322",
                                InscrEst   = "23423422",
                                Numero     = "21 3234-2344",
                                Uf         = "BH",
                                Logradouro = "Rua dest"
                            }
                        },
                        Totais = new Totais
                        {
                            IcmsTot = new IcmsTot
                            {
                                VlBc     = 100.10M,
                                VlBcSt   = 100.10M,
                                VlCofins = 12.2M,
                                VlDesc   = 0M,
                                VlFrete  = 10M,
                                VlIcms   = 24.43M,
                                VlProd   = 10.3M
                            }
                        }
                    }
                }
            };

            return(nfeProc);
        }
        public List<NfeProc> GetNfeProcList(List<Stream> pStreamList)
        {
            List<NfeProc> nfeProcList = new List<NfeProc>();

            if (pStreamList != null && pStreamList.Any())
            {
                NfeXmlSerializer xmlSerializer = new NfeXmlSerializer();

                pStreamList.Select(stream => stream)
                    .ToList()
                    .ForEach(inputStream =>
                        {
                            NfeProc nfeProc = null;
                            try
                            {
                                nfeProc = xmlSerializer.DeserializeFromStream<NfeProc>(inputStream);
                            }
                            catch (InvalidOperationException)
                            {
                                if (nfeProc == null)
                                {
                                    try
                                    {
                                        NotaFiscalEletronica nota = xmlSerializer.DeserializeFromStream<NotaFiscalEletronica>(inputStream);

                                        nfeProc = new NfeProc
                                        {
                                            ProtNfe = new ProtNfe
                                            {
                                                InfProt = new InfProt
                                                {
                                                    ChaveNFe = nota.InfNfe.Id.Replace("NFe", ""),
                                                    tpAmb = nota.InfNfe.Ide.tpAmb,
                                                    VerAplic = nota.InfNfe.Ide.VerProc,
                                                    Motivo = "Protocolo não encontrado"
                                                }
                                            },

                                            Nfe = nota
                                        };
                                    }
                                    catch (InvalidOperationException)
                                    {
                                        nfeProc = new NfeProc { ProtNfe = new ProtNfe { InfProt = new InfProt { Motivo = "Falha ao processar arquivo" } } };
                                    }
                                }
                            }
                            nfeProcList.Add(nfeProc);
                        });
            }

            return nfeProcList;
        }
        public NfeProc GetFakeNfeProc()
        {
            var nfeProc = new NfeProc()
            {
                ProtNfe = new ProtNfe
                {
                    InfProt = new InfProt
                    {
                        ChaveNFe = "1111111111111111111111111111111",
                        Id = "11111111111111111111111",
                        CodStatus = "1111",
                        NumProt = "111111"
                    },
                    Versao = "1.0.0"
                },
                Nfe = new NotaFiscalEletronica
                {
                    InfNfe = new InfNFe
                    {
                        Id = "NFe12344321341234123412342134123412",

                        Ide = new Ide
                        {
                            DtEmi = DateTime.Now.ToString("dd/MM/yyyy"),
                            DtSaiEnt = DateTime.Now.ToString("dd/MM/yyyy"),
                            Mod = "55",
                            NatOp = "Venda de Mercadoria",
                            Serie = "1",
                            Uf = "SP",
                            TpNf = "1",
                            NumNf = "1234567",
                            IndPag = "1",
                            CodNf = "22222"
                        },

                        Emitente = new Emitente
                        {
                            Cnpj = "1111111111",
                            Nome = "EMPRESA TESTE",
                            EnderecoEmit = new EnderecoEmit
                            {
                                Bairro = "Jardim Teste",
                                Cep = "39284-021",
                                InscrEst = "1234566788",
                                Logradouro = "Rua teste",
                                Numero = "809",
                                Uf = "RJ"
                            },
                            Fantasia = "EMPRESA TESTE"
                        },
                        Destinatario = new Destinatario
                        {
                            Cnpj = "43422365342",
                            Nome = "ANDERSON DAVANSE",
                            EnderecoDest = new EnderecoDest
                            {
                                Bairro = "Bairro Teste",
                                Cep = "023943-322",
                                InscrEst = "23423422",
                                Numero = "21 3234-2344",
                                Uf = "BH",
                                Logradouro = "Rua dest"
                            }
                        },
                        Totais = new Totais
                        {
                            IcmsTot = new IcmsTot
                            {
                                VlBc = 100.10M,
                                VlBcSt = 100.10M,
                                VlCofins = 12.2M,
                                VlDesc = 0M,
                                VlFrete = 10M,
                                VlIcms = 24.43M,
                                VlProd = 10.3M

                            }
                        }

                    }
                }
            };

            return nfeProc;
        }