/// <summary> /// Verifica se o XML de Distribuição da Nota Fiscal (-procNFe) já está na pasta de Notas Autorizadas /// </summary> /// <param name="arquivo">Arquivo XML a ser verificado</param> /// <param name="emissao">Data de emissão da NFe</param> /// <param name="extNFe">Extensão a ser substituida no arquivo</param> /// <param name="extArqProtNfe">Nova extensão a ser verificada</param> /// <returns>Se está na pasta de XML´s autorizados</returns> public bool EstaAutorizada(string arquivo, DateTime emissao, string extNFe, string extArqProtNfe) { int emp = Empresas.FindEmpresaByThread(); string strNomePastaEnviado = Empresas.Configuracoes[emp].PastaXmlEnviado + "\\" + PastaEnviados.Autorizados.ToString() + "\\" + Empresas.Configuracoes[emp].DiretorioSalvarComo.ToString(emissao); return(File.Exists(strNomePastaEnviado + "\\" + Functions.ExtrairNomeArq(arquivo, extNFe) + extArqProtNfe)); }
public void SalvarConfiguracao(bool validaCertificado, bool validarConfig) { bool empresaNova = false; try { if (Empresas.FindConfEmpresaIndex(this.CNPJ, this.Servico) == -1) { empresaNova = true; Empresas.Configuracoes.Add(this); } else { int emp = Empresas.FindConfEmpresaIndex(this.CNPJ, this.Servico); this.CopyObjectTo(Empresas.Configuracoes[emp]); } //Criptografar a senha do certificado digital para gravar no XML. Wandrey 23/09/2014 if (validarConfig) { new ConfiguracaoApp().ValidarConfig(validaCertificado, this); } if (!Directory.Exists(this.PastaEmpresa)) { Directory.CreateDirectory(this.PastaEmpresa); } this.CriarPastasDaEmpresa(); Empresa dados = new Empresa(); this.CopyObjectTo(dados); if (dados.UsaCertificado) { dados.CertificadoSenha = Criptografia.criptografaSenha(dados.CertificadoSenha); } dados.CertificadoPIN = Criptografia.criptografaSenha(dados.CertificadoPIN); ObjectXMLSerializer objObjectXMLSerializer = new ObjectXMLSerializer(); objObjectXMLSerializer.Save(dados, dados.NomeArquivoConfig); Empresas.FindConfEmpresa(this.CNPJ, this.Servico).Nome = this.Nome; } catch (Exception ex) { if (empresaNova) { Empresas.Configuracoes.Remove(this); } throw ex; } }
public static void WriteLog(string msg, bool gravarStackTrace) { #if DEBUG System.Diagnostics.Debug.WriteLine(msg); #endif if (ConfiguracaoApp.GravarLogOperacoesRealizadas) { int emp = -1; if (Empresas.Configuracoes.Count != 0) //Tive que comparar aqui se tem empresas, pois quando não tem nenhuma empresa e tento consultar os certificados pela pasta geral, retorna um erro. Wandrey 02/02/2015 { try { emp = Empresas.FindEmpresaByThread(); } catch { } } NFe.Components.Functions.WriteLog(msg, gravarStackTrace, true, emp >= 0 ? Empresas.Configuracoes[emp].CNPJ + "_" + Empresas.Configuracoes[emp].Servico.ToString() : ""); } }
/// <summary> /// grava um arquivo de erro ao ERP /// </summary> /// <param name="Arquivo"></param> /// <param name="Erro"></param> public void GravarArqErroERP(string Arquivo, string Erro) { if (!string.IsNullOrEmpty(Arquivo)) { try { int emp = Empresas.FindEmpresaByThread(); if (!string.IsNullOrEmpty(Empresas.Configuracoes[emp].PastaXmlRetorno)) { //Grava arquivo de ERRO para o ERP string cArqErro = Empresas.Configuracoes[emp].PastaXmlRetorno + "\\" + Path.GetFileName(Arquivo); File.WriteAllText(cArqErro, Erro, Encoding.Default); } } catch (Exception ex) { WriteLog(ex.Message, true); } } }
/// <summary> /// Método para checagem dos caminhos e sua existencia ou não no pc /// </summary> /// <param name="empresa">Empresa a ser validado os caminhos das pastas</param> public void ChecaCaminhoDiretorio() { FileStream arqXml = null; if (File.Exists(this.NomeArquivoConfig)) { try { arqXml = new FileStream(this.NomeArquivoConfig, FileMode.Open, FileAccess.Read, FileShare.Read); //Abrir um arquivo XML usando FileStrem var xml = new XmlDocument(); xml.Load(arqXml); var configList = xml.GetElementsByTagName("Empresa"); foreach (XmlNode configNode in configList) { var configElemento = (XmlElement)configNode; Empresas.verificaPasta(this, configElemento, NFeStrConstants.PastaXmlEnvio, "Pasta onde serão gravados os arquivos XML´s a serem enviados individualmente para os WebServices", true); Empresas.verificaPasta(this, configElemento, NFeStrConstants.PastaXmlRetorno, "Pasta onde serão gravados os arquivos XML´s de retorno dos WebServices", true); Empresas.verificaPasta(this, configElemento, NFeStrConstants.PastaXmlErro, "Pasta para arquivamento temporário dos XML´s que apresentaram erro na tentativa do envio", true); Empresas.verificaPasta(this, configElemento, NFeStrConstants.PastaValidar, "Pasta onde serão gravados os arquivos XML´s a serem somente validados", true); if (this.Servico != TipoAplicativo.Nfse) { Empresas.verificaPasta(this, configElemento, NFeStrConstants.PastaXmlEnviado, "Pasta onde serão gravados os arquivos XML´s enviados", true); Empresas.verificaPasta(this, configElemento, NFeStrConstants.PastaXmlEmLote, "Pasta onde serão gravados os arquivos XML´s de NF-e a serem enviadas em lote para os WebServices", false); Empresas.verificaPasta(this, configElemento, NFeStrConstants.PastaBackup, "Pasta para Backup dos XML´s enviados", false); Empresas.verificaPasta(this, configElemento, NFeStrConstants.PastaDownloadNFeDest, "Pasta onde serão gravados os arquivos XML´s de download de NFe de destinatários e eventos de terceiros", false); } } } catch { } finally { if (arqXml != null) { arqXml.Close(); } } } }
/// <summary> /// Carregar as configurações de todas as empresas na coleção "Configuracoes" /// </summary> /// <remarks> /// Autor: Wandrey Mundin Ferreira /// Data: 29/07/2010 /// </remarks> public static void CarregaConfiguracao() { Empresas.Configuracoes.Clear(); Empresas.ExisteErroDiretorio = false; Empresas.CriarPasta(true); if (File.Exists(Propriedade.NomeArqEmpresas)) { try { XElement axml = XElement.Load(Propriedade.NomeArqEmpresas); var b1 = axml.Descendants(NFeStrConstants.Registro); foreach (var item in b1) { Empresa empresa = new Empresa(); empresa.CNPJ = item.Attribute(TpcnResources.CNPJ.ToString()).Value; empresa.Nome = item.Element(NFeStrConstants.Nome).Value.Trim(); empresa.Servico = Propriedade.TipoAplicativo; if (item.Attribute(NFeStrConstants.Servico) != null) { empresa.Servico = (TipoAplicativo)Convert.ToInt16(item.Attribute(NFeStrConstants.Servico).Value.Trim()); } string cArqErro = null; bool erro = false; try { int tipoerro = 0; string rc = empresa.BuscaConfiguracao(ref tipoerro); switch (tipoerro) { case 0: string uf = GetUF(empresa.UnidadeFederativaCodigo); if (uf != null) { empresa.URLConsultaDFe = ConfiguracaoApp.CarregarURLConsultaDFe(uf); } break; case 1: erro = true; throw new Exception(rc); case 2: throw new Exception(rc); } } catch (Exception ex) { try { /// /// nao acessar o metodo Auxiliar.GravarArqErroERP(string Arquivo, string Erro) já que nela tem a pesquisa da empresa /// com base em "int emp = Empresas.FindEmpresaByThread();" e neste ponto ainda não foi criada /// as thread's cArqErro = CriaArquivoDeErro(empresa, cArqErro); //Grava arquivo de ERRO para o ERP File.WriteAllText(cArqErro, ex.Message);//, Encoding.Default); } catch { } } if (!erro) { /// /// mesmo com erro, adicionar a lista para que o usuário possa altera-la empresa.ChecaCaminhoDiretorio(); if (!string.IsNullOrEmpty(Empresas.ErroCaminhoDiretorio) && Empresas.ExisteErroDiretorio) { try { if (cArqErro == null) { cArqErro = CriaArquivoDeErro(empresa, cArqErro); } //Grava arquivo de ERRO para o ERP File.AppendAllText(cArqErro, "Erros de diretorios:\r\n\r\n" + Empresas.ErroCaminhoDiretorio, Encoding.Default); } catch { } } Configuracoes.Add(empresa); } } } catch { throw; } } if (!Empresas.ExisteErroDiretorio) { Empresas.CriarPasta(false); } }
/// <summary> /// Carregar as configurações de todas as empresas na coleção "Configuracoes" /// </summary> /// <remarks> /// Autor: Wandrey Mundin Ferreira /// Data: 29/07/2010 /// </remarks> public static void CarregaConfiguracao() { Empresas.Configuracoes.Clear(); ExisteErroDiretorio = false; if (File.Exists(Propriedade.NomeArqEmpresas)) { //FileStream arqXml = null; try { XElement axml = XElement.Load(Propriedade.NomeArqEmpresas); var b1 = axml.Descendants(NFe.Components.NFeStrConstants.Registro); foreach (var item in b1) { Empresa empresa = new Empresa(); empresa.CNPJ = item.Attribute(NFe.Components.TpcnResources.CNPJ.ToString()).Value; empresa.Nome = item.Element(NFe.Components.NFeStrConstants.Nome).Value.Trim(); empresa.Servico = Propriedade.TipoAplicativo; if (item.Attribute(NFe.Components.NFeStrConstants.Servico) != null) { empresa.Servico = (TipoAplicativo)Convert.ToInt16(item.Attribute(NFe.Components.NFeStrConstants.Servico).Value.Trim()); } try { empresa.BuscaConfiguracao(); } catch (Exception ex) { try { /// /// nao acessar o metodo Auxiliar.GravarArqErroERP(string Arquivo, string Erro) já que nela tem a pesquisa da empresa /// com base em "int emp = Empresas.FindEmpresaByThread();" e neste ponto ainda não foi criada /// as thread's string cArqErro; if (string.IsNullOrEmpty(empresa.PastaXmlRetorno)) { cArqErro = Path.Combine(Propriedade.PastaExecutavel, string.Format(Propriedade.NomeArqERRUniNFe, DateTime.Now.ToString("yyyyMMddTHHmmss"))); } else { cArqErro = Path.Combine(empresa.PastaXmlRetorno, string.Format(Propriedade.NomeArqERRUniNFe, DateTime.Now.ToString("yyyyMMddTHHmmss"))); } //Grava arquivo de ERRO para o ERP File.WriteAllText(cArqErro, ex.Message, Encoding.Default); } catch { } } /// /// mesmo com erro, adicionar a lista para que o usuário possa altera-la empresa.ChecaCaminhoDiretorio(); Configuracoes.Add(empresa); } #if false arqXml = new FileStream(Propriedade.NomeArqEmpresas, FileMode.Open, FileAccess.Read, FileShare.Read); //Abrir um arquivo XML usando FileStream var xml = new XmlDocument(); xml.Load(arqXml); var empresaList = xml.GetElementsByTagName("Empresa"); foreach (XmlNode empresaNode in empresaList) { var empresaElemento = (XmlElement)empresaNode; var registroList = xml.GetElementsByTagName(NFe.Components.NFeStrConstants.Registro); for (int i = 0; i < registroList.Count; i++) { Empresa empresa = new Empresa(); var registroNode = registroList[i]; var registroElemento = (XmlElement)registroNode; empresa.CNPJ = registroElemento.GetAttribute(NFe.Components.NFeStrConstants.CNPJ).Trim(); empresa.Nome = registroElemento.GetElementsByTagName(NFe.Components.NFeStrConstants.Nome)[0].InnerText.Trim(); empresa.Servico = Propriedade.TipoAplicativo;// TipoAplicativo.Nfe; if (registroElemento.GetAttribute(NFe.Components.NFeStrConstants.Servico) != "") { empresa.Servico = (TipoAplicativo)Convert.ToInt16(registroElemento.GetAttribute(NFe.Components.NFeStrConstants.Servico).Trim()); } try { empresa.BuscaConfiguracao(); } catch (Exception ex) { /// /// nao acessar o metodo Auxiliar.GravarArqErroERP(string Arquivo, string Erro) já que nela tem a pesquisa da empresa /// com base em "int emp = Empresas.FindEmpresaByThread();" e neste ponto ainda não foi criada /// as thread's string cArqErro; if (string.IsNullOrEmpty(empresa.PastaXmlRetorno)) { cArqErro = Path.Combine(Propriedade.PastaExecutavel, string.Format(Propriedade.NomeArqERRUniNFe, DateTime.Now.ToString("yyyyMMddTHHmmss"))); } else { cArqErro = Path.Combine(empresa.PastaXmlRetorno, string.Format(Propriedade.NomeArqERRUniNFe, DateTime.Now.ToString("yyyyMMddTHHmmss"))); } try { //Grava arquivo de ERRO para o ERP File.WriteAllText(cArqErro, ex.Message, Encoding.Default); } catch { } } /// /// mesmo com erro, adicionar a lista para que o usuário possa altera-la empresa.ChecaCaminhoDiretorio(); Configuracoes.Add(empresa); } } arqXml.Close(); arqXml = null; #endif } catch { throw; } #if false finally { if (arqXml != null) { arqXml.Close(); } } #endif } if (!ExisteErroDiretorio) { Empresas.CriarPasta(); } }
Functions.DeletarArquivo(Path.Combine(Empresas.Configuracoes[emp].PastaXmlRetorno, Path.GetFileName(NomeArquivoXML.Replace(Propriedade.ExtEnvio.EnvImpressaoDanfe_TXT, Propriedade.ExtRetorno.RetImpressaoDanfe_TXT).Replace(".txt", ".err"))));