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 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 void Testa_Exception_FileNotFound()
        {
            var nfeSerializer = new NfeXmlSerializer();

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

            Assert.IsTrue(nfe != null);
        }
        public void Testa_Exception_FileNotFound()
        {
            var nfeSerializer = new NfeXmlSerializer();

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

            Assert.IsTrue(nfe != null);
        }
        public void Verifica_Validacao_XSD_Tipo_NotaFiscalEletronica()
        {
            var nfeSerializer = new NfeXmlSerializer();
            var nfe           = nfeSerializer.DeserializeFromFile <NotaFiscalEletronica>("Nfe.xml");
            var schemaFile    = NfeSchemaFileResolver <NotaFiscalEletronica> .GetByNfeVersion(nfe.InfNfe.Versao);

            using (FileStream fs = new FileStream("Nfe.xml", FileMode.Open))
            {
                List <string> messages = nfeSerializer.Validate(fs, schemaFile);

                foreach (var str in messages)
                {
                    Debug.WriteLine(str);
                }

                Assert.IsTrue(messages.Count == 0);
            }
        }
        public void Verifica_Validacao_XSD_Tipo_NfeProc()
        {
            var nfeSerializer_NfeProc = new NfeXmlSerializer();
            var nfeproc = nfeSerializer_NfeProc.DeserializeFromFile<NfeProc>("NfeProc.xml");

            var schemaFile = NfeSchemaFileResolver<NfeProc>.GetByNfeVersion(nfeproc.Versao);

            using (FileStream fs = new FileStream("NfeProc.xml", FileMode.Open))
            {
                List<string> messages = nfeSerializer_NfeProc.Validate(fs, schemaFile);

                foreach (var str in messages)
                    Debug.WriteLine(str);

                Assert.IsTrue(messages.Count == 0);
            }
        }
        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 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;
        }