示例#1
0
        private void ExtraiDFe(XmlNode ret, string tagNameDoc, string folderTerceiros, string fileRetorno2, int emp, string fileRetorno)
        {
            for (int n = 0; n < ret.ChildNodes.Count; ++n)
            {
                if (ret.ChildNodes[n].Name.Equals(tagNameDoc))
                {
                    string FileToFtp = "";
                    string NSU       = ret.ChildNodes[n].Attributes[TpcnResources.NSU.ToString()].Value;

                    ///
                    /// descompacta o conteudo
                    ///
                    string xmlRes = TFunctions.Decompress(ret.ChildNodes[n].InnerText);

                    XmlDocument docXML = new XmlDocument();
                    docXML.Load(Functions.StringXmlToStreamUTF8(xmlRes));

                    if (string.IsNullOrEmpty(xmlRes))
                    {
                        Auxiliar.WriteLog("LeRetornoNFe: Não foi possivel descompactar o conteudo da NSU: " + NSU, false);
                    }
                    else
                    {
                        #region NFe

                        if (ret.ChildNodes[n].Attributes["schema"].InnerText.StartsWith("resEvento"))
                        {
                            FileToFtp = Path.Combine(folderTerceiros, fileRetorno2 + "-" + NSU + Propriedade.Extensao(Propriedade.TipoEnvio.PedEve).RetornoXML);
                        }
                        else if (ret.ChildNodes[n].Attributes["schema"].InnerText.StartsWith("procEventoNFe"))
                        {
                            string chNFe      = Functions.LerTag(((XmlElement)((XmlElement)docXML.GetElementsByTagName("evento")[0]).GetElementsByTagName("infEvento")[0]), "chNFe", false);
                            string tpEvento   = Functions.LerTag(((XmlElement)((XmlElement)docXML.GetElementsByTagName("evento")[0]).GetElementsByTagName("infEvento")[0]), "tpEvento", false);
                            string nSeqEvento = Functions.LerTag(((XmlElement)((XmlElement)docXML.GetElementsByTagName("evento")[0]).GetElementsByTagName("infEvento")[0]), "nSeqEvento", false);

                            if (Empresas.Configuracoes[emp].ArqNSU)
                            {
                                FileToFtp = Path.Combine(folderTerceiros, fileRetorno2 + "-" + NSU + Propriedade.ExtRetorno.ProcEventoNFe);
                            }
                            else
                            {
                                FileToFtp = Path.Combine(folderTerceiros, chNFe + "_" + tpEvento + "_" + nSeqEvento.PadLeft(2, '0') + Propriedade.ExtRetorno.ProcEventoNFe);
                            }
                        }
                        else if (ret.ChildNodes[n].Attributes["schema"].InnerText.StartsWith("procNFe"))
                        {
                            string chave = ((XmlElement)docXML.GetElementsByTagName("infNFe")[0]).GetAttribute("Id").Substring(3, 44);

                            if (Empresas.Configuracoes[emp].ArqNSU)
                            {
                                FileToFtp = Path.Combine(folderTerceiros, fileRetorno2 + "-" + NSU + Propriedade.ExtRetorno.ProcNFe);
                            }
                            else
                            {
                                FileToFtp = Path.Combine(folderTerceiros, chave + Propriedade.ExtRetorno.ProcNFe);
                            }
                        }
                        else if (ret.ChildNodes[n].Attributes["schema"].InnerText.StartsWith("resNFe"))
                        {
                            FileToFtp = Path.Combine(folderTerceiros, fileRetorno2 + "-" + NSU + Propriedade.Extensao(Propriedade.TipoEnvio.NFe).EnvioXML);
                        }

                        #endregion NFe

                        #region CTe

                        else if (ret.ChildNodes[n].Attributes["schema"].InnerText.StartsWith("procEventoCTe"))
                        {
                            string chCTe      = Functions.LerTag(((XmlElement)((XmlElement)docXML.GetElementsByTagName("eventoCTe")[0]).GetElementsByTagName("infEvento")[0]), "chCTe", false);
                            string tpEvento   = Functions.LerTag(((XmlElement)((XmlElement)docXML.GetElementsByTagName("eventoCTe")[0]).GetElementsByTagName("infEvento")[0]), "tpEvento", false);
                            string nSeqEvento = Functions.LerTag(((XmlElement)((XmlElement)docXML.GetElementsByTagName("eventoCTe")[0]).GetElementsByTagName("infEvento")[0]), "nSeqEvento", false);

                            if (Empresas.Configuracoes[emp].ArqNSU)
                            {
                                FileToFtp = Path.Combine(folderTerceiros, fileRetorno2 + "-" + NSU + Propriedade.ExtRetorno.ProcEventoCTe);
                            }
                            else
                            {
                                FileToFtp = Path.Combine(folderTerceiros, chCTe + "_" + tpEvento + "_" + nSeqEvento.PadLeft(2, '0') + Propriedade.ExtRetorno.ProcEventoCTe);
                            }
                        }
                        else if (ret.ChildNodes[n].Attributes["schema"].InnerText.StartsWith("procCTe"))
                        {
                            string chave = ((XmlElement)docXML.GetElementsByTagName("infCte")[0]).GetAttribute("Id").Substring(3, 44);

                            if (Empresas.Configuracoes[emp].ArqNSU)
                            {
                                FileToFtp = Path.Combine(folderTerceiros, fileRetorno2 + "-" + NSU + Propriedade.ExtRetorno.ProcCTe);
                            }
                            else
                            {
                                FileToFtp = Path.Combine(folderTerceiros, chave + Propriedade.ExtRetorno.ProcCTe);
                            }
                        }

                        #endregion CTe

                        else
                        {
                            Auxiliar.WriteLog("LerRetornoDFe:  Nao foi possivel ler o schema", false);
                        }

                        if (FileToFtp != "")
                        {
                            if (!File.Exists(FileToFtp))
                            {
                                File.WriteAllText(FileToFtp, xmlRes);
                            }

                            string vFolder = Empresas.Configuracoes[emp].FTPPastaRetornos;
                            if (!string.IsNullOrEmpty(vFolder))
                            {
                                try
                                {
                                    Empresas.Configuracoes[emp].SendFileToFTP(FileToFtp, vFolder);
                                }
                                catch (Exception ex)
                                {
                                    ///
                                    /// grava um arquivo de erro com extensao "FTP" para diferenciar dos arquivos de erro
                                    oAux.GravarArqErroERP(Path.ChangeExtension(fileRetorno, ".ftp"), ex.Message);
                                }
                            }
                        }
                    }
                }
            }
        }
示例#2
0
        private void LeRetornoDFe(int emp, XmlDocument doc)
        {
            /*
             * if (string.IsNullOrEmpty(Empresas.Configuracoes[emp].PastaDownloadNFeDest))
             * {
             *  ///
             *  /// nao interpreto como erro, já que o ERP pode não querer descompactar os arquivos
             *  ///
             *  Auxiliar.WriteLog("LeRetornoNFe: Pasta de DownloadNFeDest nao definida");
             *  return;
             * }
             */

            try
            {
                ///
                /// pega o nome base dos arquivos a serem gravados
                ///
                string fileRetorno2 = Functions.ExtrairNomeArq(Path.GetFileName(this.NomeArquivoXML), Propriedade.ExtEnvio.EnvDFe_XML);
                ///
                /// pega o nome do arquivo de retorno
                ///
                string fileRetorno = Path.Combine(Empresas.Configuracoes[emp].PastaXmlRetorno,
                                                  fileRetorno2 + Propriedade.ExtRetorno.retEnvDFe_XML);

                if (!File.Exists(fileRetorno))
                {
                    return;
                }
                ///
                /// cria a pasta para comportar as notas e eventos retornados já descompactados
                ///
                string folderTerceiros = Path.Combine(Empresas.Configuracoes[emp].PastaXmlRetorno, "dfe");
                if (!Directory.Exists(folderTerceiros))
                {
                    Directory.CreateDirectory(folderTerceiros);
                }

                ///
                /// exclui todos os arquivos que foram envolvidos no retorno
                ///
                foreach (var item in Directory.GetFiles(folderTerceiros, fileRetorno2 + "-*.xml", SearchOption.TopDirectoryOnly))
                {
                    if (!Functions.FileInUse(item))
                    {
                        File.Delete(item);
                    }
                }

                doc.Load(fileRetorno);
                XmlNodeList envEventoList = doc.GetElementsByTagName("retDistDFeInt");
                foreach (XmlNode ret1Node in envEventoList)
                {
                    XmlElement ret1Elemento = (XmlElement)ret1Node;

                    XmlNodeList ret1List = ret1Elemento.GetElementsByTagName("loteDistDFeInt");
                    foreach (XmlNode ret in ret1List)
                    {
                        for (int n = 0; n < ret.ChildNodes.Count; ++n)
                        {
                            if (ret.ChildNodes[n].Name.Equals("docZip"))
                            {
                                string FileToFtp = "";
                                string NSU       = ret.ChildNodes[n].Attributes[TpcnResources.NSU.ToString()].Value;

                                ///
                                /// descompacta o conteudo
                                ///
                                string xmlRes = TFunctions.Decompress(ret.ChildNodes[n].InnerText);
                                if (string.IsNullOrEmpty(xmlRes))
                                {
                                    Auxiliar.WriteLog("LeRetornoNFe: Não foi possivel descompactar o conteudo da NSU: " + NSU, false);
                                }
                                else
                                {
                                    if (ret.ChildNodes[n].Attributes["schema"].InnerText.StartsWith("resEvento"))
                                    {
                                        FileToFtp = Path.Combine(folderTerceiros, fileRetorno2 + "-" + NSU + Propriedade.ExtRetorno.Eve);
                                    }
                                    else if (ret.ChildNodes[n].Attributes["schema"].InnerText.StartsWith("procEventoNFe"))
                                    {
                                        FileToFtp = Path.Combine(folderTerceiros, fileRetorno2 + "-" + NSU + Propriedade.ExtRetorno.ProcEventoNFe);
                                    }
                                    else if (ret.ChildNodes[n].Attributes["schema"].InnerText.StartsWith("procNFe"))
                                    {
                                        FileToFtp = Path.Combine(folderTerceiros, fileRetorno2 + "-" + NSU + Propriedade.ExtRetorno.ProcNFe);
                                    }
                                    else if (ret.ChildNodes[n].Attributes["schema"].InnerText.StartsWith("resNFe"))
                                    {
                                        FileToFtp = Path.Combine(folderTerceiros, fileRetorno2 + "-" + NSU + Propriedade.ExtEnvio.Nfe);
                                    }
                                    else
                                    {
                                        Auxiliar.WriteLog("LerRetornoDFe:  Nao foi possivel ler o schema", false);
                                    }

                                    if (FileToFtp != "")
                                    {
                                        if (!File.Exists(FileToFtp))
                                        {
                                            File.WriteAllText(FileToFtp, xmlRes);
                                        }

                                        string vFolder = Empresas.Configuracoes[emp].FTPPastaRetornos;
                                        if (!string.IsNullOrEmpty(vFolder))
                                        {
                                            try
                                            {
                                                Empresas.Configuracoes[emp].SendFileToFTP(FileToFtp, vFolder);
                                            }
                                            catch (Exception ex)
                                            {
                                                ///
                                                /// grava um arquivo de erro com extensao "FTP" para diferenciar dos arquivos de erro
                                                oAux.GravarArqErroERP(Path.ChangeExtension(fileRetorno, ".ftp"), ex.Message);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Auxiliar.WriteLog("LeRetornoNFe: " + ex.Message, false);
                ///
                /// Wandrey.
                /// Foi tudo processado mas houve algum erro na descompactacao dos retornos
                /// Se gravar o arquivo com extensao .err, o ERP pode ignorar o XML de retorno, que está correto
                ///
                //WriteLogError(ex);
            }
        }