private void ButtonTransmitir_Click(object sender, EventArgs e) { try { ButtonProcurar.Enabled = false; ButtonTransmitir.Enabled = false; TextBoxLog.Clear(); ProgressBarSecundaria.Value = 0; ProgressBarPrimaria.Value = 0; dispatcher.DoEvents(); // Instancia a classe que irá assinar o arquivo var assinador = new AssinadorXML(dispatcher, ProgressBarSecundaria); var dirZipDescompactado = Guid.NewGuid().ToString(); // Descompacta o arquivo .intech if (!Directory.Exists(dirZipDescompactado)) { Directory.CreateDirectory(dirZipDescompactado); } Zip.Descompacta(TextBoxArquivo.Text, dirZipDescompactado); var arquivos = Directory.GetFiles(dirZipDescompactado); var contadorLote = 0; var totalLotes = arquivos.Length; ProgressBarPrimaria.Maximum = arquivos.Length; // Processa cada xml contido no arquivo .intech foreach (var arquivo in arquivos) { contadorLote++; LabelProgressBarPrimaria.Text = $"Processando lote {contadorLote} de {totalLotes}..."; // Assina o xml do lote utilizando o certificado digital selecionado LabelProgressBarSecundaria.Text = "Assinando lote..."; ProgressBarSecundaria.Value = 0; dispatcher.DoEvents(); var xml = assinador.AssinarEventosDoArquivo(Global.Certificado, arquivo); if (xml == null) { return; } var tipoEvento = assinador.BuscarElementoAssinar(xml); var ambiente = BuscarAmbiente(xml, tipoEvento); if (ambiente == "1") { webServices = new WebServicesRF(true); } else { webServices = new WebServicesRF(false); } LabelProgressBarSecundaria.Text = "Enviando lote..."; ProgressBarSecundaria.Value = 0; ProgressBarSecundaria.Maximum = 1; dispatcher.DoEvents(); var retorno = webServices.ReceberLoteEvento(XElement.Parse(xml.InnerXml)).ToXmlNode(); ProgressBarSecundaria.Value = 1; dispatcher.DoEvents(); //if (tipoEvento.Tag == "evtServTom") //{ var sucesso = true; var eventos = BuscaEventosRetorno(retorno); LabelProgressBarSecundaria.Text = "Atualizando status dos registros..."; ProgressBarSecundaria.Value = 0; ProgressBarSecundaria.Maximum = eventos.Count; dispatcher.DoEvents(); if (eventos.Count == 0) { var resultado = BuscaResultadoEventoUnico(retorno); if (resultado == "ERRO") { var mensagem = BuscaMensagemEventoUnico(retorno); // Atualiza a ocorrência no banco utilizando a API //ServiceEfdReinf.UpdateRecibo(oidArquivoUpload, numRecibo); AdicionarLog("Erro: " + mensagem); sucesso = false; dispatcher.DoEvents(); } } for (int i = 0; i < eventos.Count; i++) { var resultado = BuscaResultadoEvento(eventos[i]); if (resultado == "ERRO") { // Mostra um dialogo para salvar o retorno //SalvarArquivoRetorno(eventos[i]); var mensagem = BuscaMensagemEvento(eventos[i]); try { // Atualiza a ocorrência no banco utilizando a API //ServiceEfdReinf.UpdateRecibo(oidArquivoUpload, numRecibo); AdicionarLog("Erro ao atualizar ocorrência: " + mensagem); sucesso = false; dispatcher.DoEvents(); } catch (Exception ex) { AdicionarLog("Erro ao atualizar ocorrência: " + mensagem); } } else { if (tipoEvento.Tipo != DMN_TIPO_REGISTRO.R1000) { try { var idEvento = BuscaIDEvento(eventos[i]); var oid = Convert.ToDecimal(idEvento.Substring(31)); // Atualiza o status e o nº do recibo no banco utilizando a API var numRecibo = BuscaRecibo(eventos[i]); ServiceEfdReinf.UpdateRecibo(tipoEvento.Tipo, oid, numRecibo); } catch (Exception ex) { // Mostra um dialogo para salvar o retorno //SalvarArquivoRetorno(eventos[i]); AdicionarLog("Erro ao atualizar movimento: " + ex.Message); } } } ProgressBarSecundaria.Increment(1); dispatcher.DoEvents(); } LabelProgressBarPrimaria.Text = string.Empty; if (sucesso) { LabelProgressBarSecundaria.Text = "Arquivo enviado com sucesso!"; } else { LabelProgressBarSecundaria.Text = "Arquivo enviado com erros."; } //} //else //{ // var resultado = BuscaResultado(retorno); // if (resultado == "ERRO") // { // // Mostra um dialogo para salvar o retorno // //SalvarArquivoRetorno(retorno); // AdicionarLog("Erro: " + BuscaMensagem(retorno)); // } // else // { // LabelProgressBarPrimaria.Text = string.Empty; // LabelProgressBarSecundaria.Text = "Arquivo enviado com sucesso!"; // var numRecibo = BuscaRecibo(retorno); // MessageBox.Show("Arquivo enviado com sucesso!\nNúmero do recibo: " + numRecibo); // // Atualiza o status e o nº do recibo no banco // //ServiceEfdReinf.UpdateRecibo(oidArquivoUpload, numRecibo); // } //} ProgressBarPrimaria.Increment(1); dispatcher.DoEvents(); } Directory.Delete(dirZipDescompactado, true); } catch (Exception ex) { AdicionarLog("Erro: " + ex.Message); VerificarInnerException(ex); } finally { ButtonProcurar.Enabled = true; ButtonTransmitir.Enabled = true; if (salvar) { TextWriter writer = new StreamWriter(nomeArquivoLog); writer.Write(logEventos); writer.Flush(); writer.Close(); } } }
private void ButtonTransmitir_Click(object sender, EventArgs e) { try { ButtonProcurar.Enabled = false; ButtonTransmitir.Enabled = false; TextBoxLog.Clear(); ProgressBarSecundaria.Value = 0; ProgressBarPrimaria.Value = 0; dispatcher.DoEvents(); // Instancia a classe que irá assinar o arquivo var assinador = new AssinadorXML(dispatcher, ProgressBarSecundaria); var dirZipDescompactado = Guid.NewGuid().ToString(); // Descompacta o arquivo .intech if (!Directory.Exists(dirZipDescompactado)) { Directory.CreateDirectory(dirZipDescompactado); } Zip.Descompacta(TextBoxArquivo.Text, dirZipDescompactado); var arquivos = Directory.GetFiles(dirZipDescompactado); var contadorLote = 0; var totalLotes = arquivos.Length; ProgressBarPrimaria.Maximum = arquivos.Length; // Processa cada xml contido no arquivo .intech foreach (var arquivo in arquivos) { contadorLote++; LabelProgressBarPrimaria.Text = $"Processando lote {contadorLote} de {totalLotes}..."; // Assina o xml do lote utilizando o certificado digital selecionado LabelProgressBarSecundaria.Text = "Assinando lote..."; ProgressBarSecundaria.Value = 0; dispatcher.DoEvents(); var xml = assinador.AssinarEventosDoArquivo(Global.Certificado, arquivo); LabelProgressBarSecundaria.Text = "Enviando lote..."; ProgressBarSecundaria.Value = 0; ProgressBarSecundaria.Maximum = 1; dispatcher.DoEvents(); var retorno = webServices.ReceberLoteEvento(XElement.Parse(xml.InnerXml)).ToXmlNode(); ProgressBarSecundaria.Value = 1; dispatcher.DoEvents(); string tipoEvento = assinador.BuscarElementoAssinar(xml); if (tipoEvento == "evtServTom") { var sucesso = true; var eventos = BuscaEventosRetorno(retorno); LabelProgressBarSecundaria.Text = "Atualizando status dos registros..."; ProgressBarSecundaria.Value = 0; ProgressBarSecundaria.Maximum = eventos.Count; dispatcher.DoEvents(); if (eventos.Count == 0) { throw new Exception("Nenhum evento encontrado."); } for (int i = 0; i < eventos.Count; i++) { // Busca o OID_OPER_FINANCEIRA na tag, onde os 3 primeiros caracteres são ignorados, // E o resto da string é o OID. //var idEvento = BuscaIDEvento(eventos[i]); //var oidMovimento = Convert.ToDecimal(idEvento.Replace("ID9", "")); var resultado = BuscaResultadoEvento(eventos[i]); if (resultado == "ERRO") { // Mostra um dialogo para salvar o retorno //SalvarArquivoRetorno(eventos[i]); try { var mensagem = BuscaMensagemEvento(eventos[i]); // Atualiza a ocorrência no banco utilizando o webservice da EFIWeb/WS/WSReinf.asmx //wsReinf.AtualizarOcorrenciaMovimento(oidMovimento, mensagem); sucesso = false; dispatcher.DoEvents(); } catch (Exception ex) { AdicionarLog("Erro ao atualizar ocorrência: " + BuscaMensagemEvento(eventos[i])); } } else { try { // Atualiza o status e o nº do recibo no banco utilizando // o webservice da EFIWeb/WS/WSReinf.asmx var numRecibo = BuscaRecibo(eventos[i]); //wsReinf.AtualizarStatusMovimento(oidMovimento, numRecibo); } catch (Exception ex) { // Mostra um dialogo para salvar o retorno //SalvarArquivoRetorno(eventos[i]); AdicionarLog("Erro ao atualizar movimento: " + ex.Message); } } ProgressBarSecundaria.Increment(1); dispatcher.DoEvents(); } LabelProgressBarPrimaria.Text = string.Empty; if (sucesso) { LabelProgressBarSecundaria.Text = "Arquivo enviado com sucesso!"; } else { LabelProgressBarSecundaria.Text = "Arquivo enviado com erros."; } } else { var resultado = BuscaResultado(retorno); if (resultado == "ERRO") { // Mostra um dialogo para salvar o retorno //SalvarArquivoRetorno(retorno); AdicionarLog("Erro: " + BuscaMensagem(retorno)); } else { LabelProgressBarPrimaria.Text = string.Empty; LabelProgressBarSecundaria.Text = "Arquivo enviado com sucesso!"; var numRecibo = BuscaRecibo(retorno); MessageBox.Show("Arquivo enviado com sucesso!\nNúmero do recibo: " + numRecibo); // Atualiza o status e o nº do recibo no banco utilizando // o webservice da EFIWeb/WS/WSReinf.asmx //wsReinf.AtualizarStatusArquivo(TextBoxArquivo.Text, numRecibo); } } ProgressBarPrimaria.Increment(1); dispatcher.DoEvents(); } Directory.Delete(dirZipDescompactado, true); } catch (Exception ex) { AdicionarLog("Erro: " + ex.Message); VerificarInnerException(ex); } finally { ButtonProcurar.Enabled = true; ButtonTransmitir.Enabled = true; if (salvar) { TextWriter writer = new StreamWriter(nomeArquivoLog); writer.Write(logEventos); writer.Flush(); writer.Close(); } } }