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 ButtonConsultar_Click(object sender, EventArgs e) { panel1.Controls.Clear(); webServices = new WebServicesRF(!CheckBoxAmbienteTestes.Checked); if (string.IsNullOrEmpty(TextBoxCNPJ.Text)) { MessageBox.Show("É necessário preencher o campo \"CNPJ\""); return; } if (TextBoxCNPJ.Text.Length < 14) { MessageBox.Show("O campo \"CNPJ\" possúi um tamanho inválido"); return; } byte tipoInsc = 1; var cnpj = TextBoxCNPJ.Text.LimparMascara(); var numInsc = cnpj.Substring(0, 8); var periodo = ""; if (new string[] { "R-2010", "R-2098", "R-2099" }.Any(ComboBoxTipoConsulta.Text.Contains)) { if (ComboBoxPeriodo.SelectedValue != null) { periodo = ((AnoMes)ComboBoxPeriodo.SelectedValue).DataInvertida; } else { var periodoDigitado = ComboBoxPeriodo.Text.Split('/'); periodo = $"{periodoDigitado[1]}-{periodoDigitado[0]}"; } } var cnpjPrestador = ""; if (ComboBoxCNPJPrestador.SelectedValue != null) { cnpjPrestador = ((string)ComboBoxCNPJPrestador.SelectedValue).LimparMascara(); } else { cnpjPrestador = ComboBoxCNPJPrestador.Text; } XElement xmlRetorno; switch (ComboBoxTipoConsulta.Text) { case "R-1000": xmlRetorno = webServices.ConsultaReciboEvento1000(tipoInsc, numInsc); ProcessarR1000(xmlRetorno.ToXmlNode()); break; case "R-1070": xmlRetorno = webServices.ConsultaReciboEvento1070(tipoInsc, numInsc); ProcessarR1070(xmlRetorno.ToXmlNode()); break; case "R-2010": xmlRetorno = webServices.ConsultaReciboEvento2010(tipoInsc, numInsc, periodo, tipoInsc, cnpj, cnpjPrestador); ProcessarR2010(xmlRetorno.ToXmlNode()); break; case "R-2098": xmlRetorno = webServices.ConsultaReciboEvento2098(tipoInsc, numInsc, periodo); ProcessarR2098(xmlRetorno.ToXmlNode()); break; case "R-2099": xmlRetorno = webServices.ConsultaReciboEvento2099(tipoInsc, numInsc, periodo); ProcessarR2099(xmlRetorno.ToXmlNode()); break; } }