예제 #1
0
        /// <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
                }
            }
        }
예제 #2
0
        /// <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();
                    }
                }
            }
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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);
            }
        }