/// <summary> /// Gravar o XML de retorno com as informações do UniNFe para o aplicativo de ERP /// </summary> /// <param name="oNfe">Objeto da classe UniNfeClass para conseguir pegar algumas informações para gravar o XML</param> /// <by>Wandrey Mundin Ferreira</by> /// <date>29/01/2009</date> private void GravarXMLDadosCertificado(string ArquivoXml) { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; string sArqRetorno = string.Empty; Auxiliar oAux = new Auxiliar(); if (Path.GetExtension(ArquivoXml).ToLower() == ".txt") { sArqRetorno = Empresa.Configuracoes[emp].PastaRetorno + "\\" + oAux.ExtrairNomeArq(ArquivoXml, ExtXml.ConsInf) + "-ret-cons-inf.txt"; } else { sArqRetorno = Empresa.Configuracoes[emp].PastaRetorno + "\\" + oAux.ExtrairNomeArq(ArquivoXml, ExtXml.ConsInf) + "-ret-cons-inf.xml"; } try { InfoApp oInfUniNfe = new InfoApp(); //Deletar o arquivo de solicitação do serviço FileInfo oArquivo = new FileInfo(ArquivoXml); oArquivo.Delete(); oInfUniNfe.GravarXMLInformacoes(sArqRetorno); } catch (Exception ex) { try { oAux.GravarArqErroERP(Path.GetFileNameWithoutExtension(sArqRetorno) + ".err", ex.Message); } catch { //Se também falhou gravar o arquivo de retorno para o ERP, infelizmente não posso fazer mais nada. Deve estar com algum problema na rede, HD, permissão de acesso as pastas, etc... Wandrey 09/03/2010 } } }
/// <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() { Empresa.Configuracoes.Clear(); if (File.Exists(InfoApp.NomeArqEmpresa)) { FileStream arqXml = null; try { arqXml = new FileStream(InfoApp.NomeArqEmpresa, 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("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("CNPJ").Trim(); empresa.Nome = registroElemento.GetElementsByTagName("Nome")[0].InnerText.Trim(); empresa.PastaEmpresa = InfoApp.PastaExecutavel() + "\\" + empresa.CNPJ.Trim(); empresa.NomeArquivoConfig = empresa.PastaEmpresa + "\\" + InfoApp.NomeArqConfig; try { BuscaConfiguracao(empresa); } 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 = new FindEmpresaThread(Thread.CurrentThread).Index;" e neste ponto ainda não foi criada /// as thread's string cArqErro; if (string.IsNullOrEmpty(empresa.PastaRetorno)) { cArqErro = Path.Combine(InfoApp.PastaExecutavel(), string.Format(InfoApp.NomeArqERRUniNFe, DateTime.Now.ToString("yyyyMMddThhmmss"))); } else { cArqErro = Path.Combine(empresa.PastaRetorno, string.Format(InfoApp.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 Configuracoes.Add(empresa); } } arqXml.Close(); arqXml = null; Empresa.CriarPasta(); } catch (Exception ex) { throw (ex); } finally { if (arqXml != null) { arqXml.Close(); } } } }
/// <summary> /// Verifica se a aplicação já está executando ou não /// </summary> /// <param name="oOneMutex">Objeto do tipo Mutex para ter como retorno para conseguir encerrar o mutex na finalização do aplicativo</param> /// <returns>True=Aplicação está executando</returns> /// <date>31/07/2009</date> /// <by>Wandrey Mundin Ferreira</by> public static Boolean AppExecutando(ref System.Threading.Mutex oOneMutex) { bool executando = false; String nomePastaEnvio = ""; String nomePastaEnvioDemo = ""; Empresa oEmpresa = null; try { Empresa.CarregaConfiguracao(); if (Empresa.Configuracoes.Count > 0) { oEmpresa = Empresa.Configuracoes[0]; } //Pegar a pasta de envio, se já tiver algum UniNFe configurado para uma determinada pasta de envio os demais não podem if (oEmpresa.PastaEnvio != "") { nomePastaEnvio = oEmpresa.PastaEnvio; //Tirar a unidade e os dois pontos do nome da pasta int iPos = nomePastaEnvio.IndexOf(':') + 1; if (iPos >= 0) { nomePastaEnvio = nomePastaEnvio.Substring(iPos, nomePastaEnvio.Length - iPos); } nomePastaEnvioDemo = nomePastaEnvio; //tirar as barras de separação de pastas e subpastas nomePastaEnvio = nomePastaEnvio.Replace("\\", "").Replace("/", "").ToUpper(); } // Verificar se o aplicativo já está rodando. Se estiver vai emitir um aviso e abortar // Pois só pode executar o aplicativo uma única vez para cada pasta de envio. // Wandrey 27/11/2008 System.Threading.Mutex oneMutex = null; String nomeMutex = InfoApp.NomeAplicacao().ToUpper() + nomePastaEnvio.Trim(); try { oneMutex = System.Threading.Mutex.OpenExisting(nomeMutex); } catch (System.Threading.WaitHandleCannotBeOpenedException) { } if (oneMutex == null) { oneMutex = new System.Threading.Mutex(false, nomeMutex); oOneMutex = oneMutex; executando = false; } else { oneMutex.Close(); executando = true; } } catch { //Não preciso retornar nada, somente evito fechar o aplicativo //Esta exceção pode ocorrer quando não existe nenhuma empresa cadastrada //ainda, ou seja, é a primeira vez que estamos entrando no aplicativo } if (executando) { MessageBox.Show("Somente uma instância do " + InfoApp.NomeAplicacao() + " pode ser executada com a seguinte pasta de envio configurada: \r\n\r\n" + "Pasta Envio: " + nomePastaEnvioDemo + "\r\n\r\n" + "Já existe uma instância em execução.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning); } return(executando); }
/// <summary> /// Grava XML com algumas informações do aplicativo, /// dentre elas os dados do certificado digital configurado nos parâmetros, /// versão, última modificação, etc. /// </summary> /// <param name="sArquivo">Pasta e nome do arquivo XML a ser gravado com as informações</param> /// <param name="oAssembly">Passar sempre: Assembly.GetExecutingAssembly() pois ele vai pegar o Assembly do EXE ou DLL de onde está sendo chamado o método</param> /// <by>Wandrey Mundin Ferreira</by> /// <date>29/01/2009</date> public void GravarXMLInformacoes(string sArquivo) { int emp = new FindEmpresaThread(Thread.CurrentThread).Index; string cStat = "1"; string xMotivo = "Consulta efetuada com sucesso"; //Ler os dados do certificado digital string sSubject = ""; string sValIni = ""; string sValFin = ""; CertificadoDigital oDigCert = new CertificadoDigital(); oDigCert.PrepInfCertificado(Empresa.Configuracoes[emp].X509Certificado); if (oDigCert.lLocalizouCertificado == true) { sSubject = oDigCert.sSubject; sValIni = oDigCert.dValidadeInicial.ToString(); sValFin = oDigCert.dValidadeFinal.ToString(); } else { cStat = "2"; xMotivo = "Certificado digital não foi localizado"; } //Gravar o XML com as informações do aplicativo try { if (Path.GetExtension(sArquivo).ToLower() == ".txt") { StringBuilder aTXT = new StringBuilder(); aTXT.AppendLine("cStat|" + cStat); aTXT.AppendLine("xMotivo|" + xMotivo); //Dados do certificado digital aTXT.AppendLine("sSubject|" + sSubject); aTXT.AppendLine("dValIni|" + sValIni); aTXT.AppendLine("dValFin|" + sValFin); //Dados gerais do Aplicativo aTXT.AppendLine("versao|" + InfoApp.Versao()); aTXT.AppendLine("dUltModif|" + File.GetLastWriteTimeUtc(Application.ExecutablePath).ToString("dd/MM/yyyy hh:mm:ss")); aTXT.AppendLine("PastaExecutavel|" + InfoApp.PastaExecutavel()); aTXT.AppendLine("NomeComputador|" + Environment.MachineName); //Dados das configurações do aplicativo aTXT.AppendLine("PastaBackup|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaBackup) ? "" : Empresa.Configuracoes[emp].PastaBackup)); aTXT.AppendLine("PastaXmlEmLote|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnvioEmLote) ? "" : Empresa.Configuracoes[emp].PastaEnvioEmLote)); aTXT.AppendLine("PastaXmlAssinado|" + (string.IsNullOrEmpty(InfoApp.NomePastaXMLAssinado) ? "" : InfoApp.NomePastaXMLAssinado)); aTXT.AppendLine("PastaValidar|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaValidar) ? "" : Empresa.Configuracoes[emp].PastaValidar)); aTXT.AppendLine("PastaXmlEnviado|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnviado) ? "" : Empresa.Configuracoes[emp].PastaEnviado)); aTXT.AppendLine("PastaXmlEnvio|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnvio) ? "" : Empresa.Configuracoes[emp].PastaEnvio)); aTXT.AppendLine("PastaXmlErro|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaErro) ? "" : Empresa.Configuracoes[emp].PastaErro)); aTXT.AppendLine("PastaXmlRetorno|" + (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaRetorno) ? "" : Empresa.Configuracoes[emp].PastaRetorno)); aTXT.AppendLine("DiasParaLimpeza|" + Empresa.Configuracoes[emp].DiasLimpeza.ToString()); aTXT.AppendLine("DiretorioSalvarComo|" + Empresa.Configuracoes[emp].DiretorioSalvarComo.ToString()); aTXT.AppendLine("GravarRetornoTXTNFe|" + Empresa.Configuracoes[emp].GravarRetornoTXTNFe.ToString()); aTXT.AppendLine("AmbienteCodigo|" + Empresa.Configuracoes[emp].tpAmb.ToString()); aTXT.AppendLine("tpEmis|" + Empresa.Configuracoes[emp].tpEmis.ToString()); aTXT.AppendLine("UnidadeFederativaCodigo|" + Empresa.Configuracoes[emp].UFCod.ToString()); File.WriteAllText(sArquivo, aTXT.ToString(), Encoding.Default); } else { XmlWriterSettings oSettings = new XmlWriterSettings(); UTF8Encoding c = new UTF8Encoding(false); //Para começar, vamos criar um XmlWriterSettings para configurar nosso XML oSettings.Encoding = c; oSettings.Indent = true; oSettings.IndentChars = ""; oSettings.NewLineOnAttributes = false; oSettings.OmitXmlDeclaration = false; //Agora vamos criar um XML Writer XmlWriter oXmlGravar = XmlWriter.Create(sArquivo, oSettings); //Abrir o XML oXmlGravar.WriteStartDocument(); oXmlGravar.WriteStartElement("retConsInf"); oXmlGravar.WriteElementString("cStat", cStat); oXmlGravar.WriteElementString("xMotivo", xMotivo); //Dados do certificado digital oXmlGravar.WriteStartElement("DadosCertificado"); oXmlGravar.WriteElementString("sSubject", sSubject); oXmlGravar.WriteElementString("dValIni", sValIni); oXmlGravar.WriteElementString("dValFin", sValFin); oXmlGravar.WriteEndElement(); //DadosCertificado //Dados gerais do Aplicativo oXmlGravar.WriteStartElement("DadosUniNfe"); oXmlGravar.WriteElementString("versao", InfoApp.Versao()); oXmlGravar.WriteElementString("dUltModif", File.GetLastWriteTimeUtc(Application.ExecutablePath).ToString("dd/MM/yyyy hh:mm:ss")); oXmlGravar.WriteElementString("PastaExecutavel", InfoApp.PastaExecutavel()); oXmlGravar.WriteElementString("NomeComputador", Environment.MachineName); oXmlGravar.WriteEndElement(); //DadosUniNfe //Dados das configurações do aplicativo oXmlGravar.WriteStartElement("nfe_configuracoes"); oXmlGravar.WriteElementString("PastaBackup", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaBackup) ? "" : Empresa.Configuracoes[emp].PastaBackup)); oXmlGravar.WriteElementString("PastaXmlEmLote", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnvioEmLote) ? "" : Empresa.Configuracoes[emp].PastaEnvioEmLote)); oXmlGravar.WriteElementString("PastaXmlAssinado", (string.IsNullOrEmpty(InfoApp.NomePastaXMLAssinado) ? "" : InfoApp.NomePastaXMLAssinado)); oXmlGravar.WriteElementString("PastaValidar", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaValidar) ? "" : Empresa.Configuracoes[emp].PastaValidar)); oXmlGravar.WriteElementString("PastaXmlEnviado", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnviado) ? "" : Empresa.Configuracoes[emp].PastaEnviado)); oXmlGravar.WriteElementString("PastaXmlEnvio", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaEnvio) ? "" : Empresa.Configuracoes[emp].PastaEnvio)); oXmlGravar.WriteElementString("PastaXmlErro", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaErro) ? "" : Empresa.Configuracoes[emp].PastaErro)); oXmlGravar.WriteElementString("PastaXmlRetorno", (string.IsNullOrEmpty(Empresa.Configuracoes[emp].PastaRetorno) ? "" : Empresa.Configuracoes[emp].PastaRetorno)); oXmlGravar.WriteElementString("DiasParaLimpeza", Empresa.Configuracoes[emp].DiasLimpeza.ToString()); oXmlGravar.WriteElementString("DiretorioSalvarComo", Empresa.Configuracoes[emp].DiretorioSalvarComo.ToString()); oXmlGravar.WriteElementString("GravarRetornoTXTNFe", Empresa.Configuracoes[emp].GravarRetornoTXTNFe.ToString()); oXmlGravar.WriteElementString("AmbienteCodigo", Empresa.Configuracoes[emp].tpAmb.ToString()); oXmlGravar.WriteElementString("tpEmis", Empresa.Configuracoes[emp].tpEmis.ToString()); oXmlGravar.WriteElementString("UnidadeFederativaCodigo", Empresa.Configuracoes[emp].UFCod.ToString()); oXmlGravar.WriteEndElement(); //nfe_configuracoes //Finalizar o XML oXmlGravar.WriteEndElement(); //retConsInf oXmlGravar.WriteEndDocument(); oXmlGravar.Flush(); oXmlGravar.Close(); } } catch (Exception ex) { /// /// danasa 8-2009 /// Auxiliar oAux = new Auxiliar(); oAux.GravarArqErroERP(Path.GetFileNameWithoutExtension(sArquivo) + ".err", ex.Message); } }