private void CmdCancela_Click(object sender, EventArgs e) { if ((DateTime.Now - p.datadigitacao).TotalHours > 24) { MessageBox.Show("Prazo de Cancelamento Superior ao Previsto na Legislação.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (p.conddoc == "C") { MessageBox.Show("NF-e já cancelada.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (cboMotivo.Text.Trim().Length < 15) { MessageBox.Show("Minimo de 15 caracteres!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } this.Cursor = Cursors.WaitCursor; StreamWriter Grava; GerarXML geraxml = new GerarXML(); AssinarXML assinar = new AssinarXML(); ValidarXML validar = new ValidarXML(); TransmitirXML transmitir = new TransmitirXML(); XMLDao xmldao = new XMLDao(); string retValidar = string.Empty; string xMotivo = cboMotivo.Text; string retTransmitir = string.Empty; txtResultado.Text = string.Empty; try { //Gerando xml xmlCanc = geraxml.CancelamentoNFe(p, xMotivo); //Assinando xml xmlCanc_Assinado = assinar.AssinaXML(xmlCanc.InnerXml, "infEvento", Certificado.getInstance.oCertificado); } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); MessageBox.Show("Erro ao assinar: " + ex.Message, "Mensagem", MessageBoxButtons.OK); this.Cursor = Cursors.Default; return; } try { //Validando o xml assinado retValidar = validar.Valida(xmlCanc_Assinado, "Canc"); } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); MessageBox.Show("Erro ao Validar: " + ex.Message, "Mensagem", MessageBoxButtons.OK); this.Cursor = Cursors.Default; return; } if (retValidar == string.Empty) { try { //Recebendo xml de retorno da transmissão retTransmitir = transmitir.XML_CancelamentoNFCe4(xmlCanc_Assinado, p.nfiscal, Certificado.getInstance.oCertificado); if (retTransmitir.Substring(0, 4) != "Erro") { XmlDocument xmlRetorno = new XmlDocument(); xmlRetorno.LoadXml(retTransmitir); //Lote processado if (xmlRetorno.GetElementsByTagName("cStat")[0].InnerText == "128") { //Evento registrado e vinculado a NFC-e if (xmlRetorno.GetElementsByTagName("cStat")[1].InnerText == "135") { try { p.xml.numdoc = p.numdoc; p.xml.data = DateTime.Now; p.xml.arquivoXML = xmlRetorno.InnerXml; p.xml.Modelo = p.modelo; p.xml.statNFCe = "135"; if (!string.IsNullOrEmpty(Controle.getInstance.caminho_XMLCancelado)) { //Salva o arquivo XML na pasta Grava = File.CreateText(Controle.getInstance.caminho_XMLCancelado + @"\110111-" + p.chave + "-1-procEventoNfe.xml"); Grava.Write(p.xml.arquivoXML); Grava.Close(); } //Salva arquivo XML no Banco SQL (NFe) if (xmldao.Grava_XML(p.xml)) { //Atualizando o status do pedido para cancelada (135) (new PedidoDao()).Update_StatNFCe_CondDoc(p.numdoc, p.xml.statNFCe); var db = new Database("stringConexao"); try { db.BeginTransaction(); foreach (PedidoItem pItem in p.lstPedidoItem) { db.Update("UPDATE produto " + "SET Estoque = Estoque + " + pItem.qtditens * 1 + ",ValorVnd = ValorVnd + " + (pItem.valitens * -1).ToString().Replace(",", ".") + " WHERE CodPro = " + pItem.codpro); } //Boleta cancelada db.Update("UPDATE Boleta set condicao = 2 where numdoc = " + p.numdoc); db.CompleteTransaction(); } catch (Exception) { db.AbortTransaction(); MessageBox.Show("Houve um erro inesperado ao atualizar o estoque e cancelar as boletas, informe imediatamente ao administrador do sistema!", "Mensagem de erro", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } txtResultado.AppendText("Pedido cancelado com sucesso!"); txtResultado.ForeColor = Color.Green; } else { txtResultado.AppendText("Pedido cancelado com sucesso, porém houve um erro ao salvar o arquivo XML no banco de dados, informe ao administrador do sistema!"); txtResultado.ForeColor = Color.Green; } } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); txtResultado.AppendText("Pedido cancelado com sucesso, porém houve um erro inesperado, informe ao administrador do sistema!"); txtResultado.ForeColor = Color.Green; } } else { txtResultado.AppendText("Erro ao cancelar (002): " + xmlRetorno.GetElementsByTagName("xMotivo")[1].InnerText + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; this.Cursor = Cursors.Default; return; } } else { txtResultado.AppendText("Erro ao cancelar (001): " + xmlRetorno.GetElementsByTagName("xMotivo")[0].InnerText + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; this.Cursor = Cursors.Default; return; } } else { txtResultado.AppendText("Erro ao transmitir (001): " + retTransmitir + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; this.Cursor = Cursors.Default; return; } } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); MessageBox.Show("Erro ao Transmitir XML: " + ex.Message, "Mensagem", MessageBoxButtons.OK); this.Cursor = Cursors.Default; return; } } else { txtResultado.AppendText("Erro na validação do XML: " + retValidar + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; this.Cursor = Cursors.Default; return; } this.Cursor = Cursors.Default; }
public void pesquisaEstoque(string unidNeg, DateTime dataEstoque, string path, string serie) { try { string[] lines = System.IO.File.ReadAllLines(path); int cont = 1; DadosPaf df = new DadosPaf(); IList <EstoqueMensagemDadosEstoqueProduto> listProd = new List <EstoqueMensagemDadosEstoqueProduto>(); foreach (string linha in lines) { if (cont == 1) { df.estabCli = linha.Trim(); } else if (cont == 2) { df.iestadualCli = linha.Trim(); } else if (cont == 3) { df.cnpjCli = linha.Trim(); } else if (cont == 4) { df.nomeCli = linha.Trim(); } else if (cont == 5) { df.numCredenCli = linha.Trim(); } else if (cont == 6) { df.nomComercial = linha.Trim(); } else if (cont == 7) { df.versaoPafEcf = linha.Trim(); } else if (cont == 8) { df.cnpjDesenv = linha.Trim(); } else if (cont == 9) { df.nomDesenv = linha.Trim(); } else if (cont == 10) { df.nFabEcf = linha.Trim(); } else if (cont == 11) { df.nTipoEcf = linha.Trim(); } else if (cont == 12) { df.marcaEcf = linha.Trim(); } else if (cont == 13) { df.modeloEcf = linha.Trim(); } else if (cont == 14) { df.versaoSofwEcf = linha.Trim(); } else if (cont == 15) { df.caixa = linha.Trim(); } else if (cont == 16) { df.dataRedz = Convert.ToDateTime(linha.Trim()); } else if (cont >= 17) { char[] delimiterChars = { ';' }; string[] words = linha.Trim().Split(delimiterChars); EstoqueMensagemDadosEstoqueProduto prod = new EstoqueMensagemDadosEstoqueProduto(); int conta = 1; foreach (string s in words) { if (conta == 1) { prod.Descricao = s.Trim(); } else if (conta == 2) { prod.CodigoProprio = s.Trim(); // prod.Tipo = (EstoqueMensagemDadosEstoqueProdutoCodigoTipo)Enum.Parse(typeof(EstoqueMensagemDadosEstoqueProdutoCodigoTipo), "Proprio"); } else if (conta == 3) { prod.ValorUnitario = s.Trim(); } else if (conta == 4) { prod.Quantidade = Convert.ToInt64(s.Trim()).ToString(); } else if (conta == 5) { prod.Unidade = s.Trim(); } else if (conta == 6) { prod.SituacaoTributaria = (EstoqueMensagemDadosEstoqueProdutoSituacaoTributaria)Enum.Parse(typeof(EstoqueMensagemDadosEstoqueProdutoSituacaoTributaria), s.Trim()); } else if (conta == 7) { if (!(s.Trim().Equals("") || s.Trim().Equals("0000"))) { prod.Aliquota = s.Trim(); } else { prod.Aliquota = ""; } } else if (conta == 8) { prod.IsArredondado = s.Trim().Equals("T"); } else if (conta == 10) { prod.SituacaoEstoque = (EstoqueMensagemDadosEstoqueProdutoSituacaoEstoque)Enum.Parse(typeof(EstoqueMensagemDadosEstoqueProdutoSituacaoEstoque), s.Trim()); } else if (conta == 11) { prod.CodigoNCMSH = s.Trim(); } else if (conta == 12) { prod.CodigoGTIN = s.Trim(); } else if (conta == 13) { prod.CodigoCEST = s.Trim(); } conta++; } prod.Ippt = (EstoqueMensagemDadosEstoqueProdutoIppt)Enum.Parse(typeof(EstoqueMensagemDadosEstoqueProdutoIppt), "Proprio"); listProd.Add(prod); } cont++; } Estoque est = new Estoque(); est.Versao = "1.0"; EstoqueMensagemEstabelecimento estE = new EstoqueMensagemEstabelecimento(); // estE.Cnpj = df.cnpjCli; estE.Ie = df.iestadualCli; // estE.NomeEmpresarial = df.nomeCli; EstoqueMensagemPafEcf estP = new EstoqueMensagemPafEcf(); //estP.CnpjDesenvolvedor = df.cnpjDesenv; //estP.NomeComercial = df.nomComercial; //estP.NomeEmpresarialDesenvolvedor = df.nomDesenv; //estP.Codigo= df.numCredenCli; //estP.Versao = df.versaoPafEcf; estP.NumeroCredenciamento = df.numCredenCli; EstoqueMensagem estM = new EstoqueMensagem(); estM.Estabelecimento = estE; estM.PafEcf = estP; EstoqueMensagemDadosEstoque estDad = new EstoqueMensagemDadosEstoque(); DateTime dataIni = dataEstoque.AddMonths(-1); //estDad.DataReferenciaInicial = dataIni.ToString("dd/MM/yyyy"); estDad.DataReferencia = dataEstoque; estDad.Produtos = listProd.ToArray(); estM.DadosEstoque = estDad; est.Mensagem = estM; XmlDocument xmlNFE = Serializar.Serializa <Estoque>(est); ConfigHelper config = new ConfigHelper(); string pathfile = config.local_salvar_arquivos + unidNeg + @"\" + "estoquePaf" + @"\" + df.nFabEcf + @"\" + df.dataRedz.ToString("ddMMyyyy"); if (!Directory.Exists(pathfile)) { Directory.CreateDirectory(pathfile); } pathfile = pathfile + @"\env_estoquePaf.xml"; CarregaConfiguracoesGP carg = new CarregaConfiguracoesGP(); DataTable datCert = carg.BuscaConfig(85475, unidNeg); if (datCert.Rows.Count > 0) { DataRow row = datCert.Rows[0]; string serialNumber = row["DADO_ALPHA"].ToString().Trim(); if (serialNumber.Contains("SERIALNUMBER=")) { serialNumber = serialNumber.Replace("SERIALNUMBER=", string.Empty); } var certificado = CertificadoHelper.Consultar(StoreName.My, StoreLocation.CurrentUser, serialNumber, CertificadoHelper.TipoConsultaCertificado.PorNroSerie); if (certificado == null) { MessageBox.Show("Certificado " + row["DADO_ALPHA"].ToString().Trim() + " não localizado na maquina, impossivel assinar.", "Erro Certificado", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { XmlElement xmlAssinatura = AssinarXML.AssinarXmlNfe(xmlNFE, "Estoque", certificado); XmlNode nodeEvento = xmlNFE.GetElementsByTagName("Estoque")[0]; if (nodeEvento != null) { nodeEvento.AppendChild(xmlAssinatura); } } } else { MessageBox.Show("Não foi possivel assinar o arquivo, deve informar o certificado na config 85475.", "Erro Certificado", MessageBoxButtons.OK, MessageBoxIcon.Error); } xmlNFE.Save(pathfile); GPPAFTRARQ arq = new GPPAFTRARQ(); DataTable dt = arq.retornaEstoque(unidNeg, "0", serie, df.dataRedz, df.nFabEcf); if (dt.Rows.Count <= 0) { arq.insereArquivo(unidNeg, "0", serie, "E", pathfile, df.dataRedz, df.nFabEcf); } estoquesPendentes(unidNeg, serie, false); MessageBox.Show("Arquivo gerado com sucesso mas não transmitido! \n" + pathfile, "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information); System.Diagnostics.Process.Start(pathfile); } catch (Exception ex) { LogHelper.GravarLog("Erro Estoque Paf " + ex); throw ex; } }
public void gerarArquivos(string serie, string unidNeg, string caminho) { try { string[] lines = System.IO.File.ReadAllLines(caminho); int cont = 1; GPPAFTRARQ gpArq = new GPPAFTRARQ(); DadosPaf df = new DadosPaf(); foreach (string linha in lines) { if (cont == 1) { df.estabCli = linha.Trim(); } else if (cont == 2) { df.iestadualCli = linha.Trim(); } else if (cont == 3) { df.cnpjCli = linha.Trim(); } else if (cont == 4) { df.nomeCli = linha.Trim(); } else if (cont == 5) { df.numCredenCli = linha.Trim(); } else if (cont == 6) { df.nomComercial = linha.Trim(); } else if (cont == 7) { df.versaoPafEcf = linha.Trim(); } else if (cont == 8) { df.cnpjDesenv = linha.Trim(); } else if (cont == 9) { df.nomDesenv = linha.Trim(); } else if (cont == 10) { df.nFabEcf = linha.Trim(); } else if (cont == 11) { df.nTipoEcf = linha.Trim(); } else if (cont == 12) { df.marcaEcf = linha.Trim(); } else if (cont == 13) { df.modeloEcf = linha.Trim(); } else if (cont == 14) { df.versaoSofwEcf = linha.Trim(); } else if (cont == 15) { df.caixa = linha.Trim(); } else if (cont == 16) { df.dataRedz = Convert.ToDateTime(linha.Trim()); } cont++; } ReducaoZ redZ = new ReducaoZ(); redZ.Versao = "1.0"; ReducaoZMensagem redMensagem = new ReducaoZMensagem(); ReducaoZMensagemEstabelecimento redMen = new ReducaoZMensagemEstabelecimento(); redMen.Ie = df.iestadualCli; redMen.NomeEmpresarial = df.nomeCli; redMen.Cnpj = df.cnpjCli; ReducaoZMensagemPafEcf redPaf = new ReducaoZMensagemPafEcf(); redPaf.CnpjDesenvolvedor = df.cnpjDesenv; redPaf.NomeComercial = df.nomComercial; redPaf.NomeEmpresarialDesenvolvedor = df.nomDesenv; redPaf.NumeroCredenciamento = df.numCredenCli; redPaf.Versao = df.versaoPafEcf; ReducaoZMensagemEcf redEcf = new ReducaoZMensagemEcf(); redEcf.Marca = df.marcaEcf; redEcf.Modelo = df.modeloEcf; redEcf.NumeroFabricacao = df.nFabEcf; redEcf.Tipo = df.nTipoEcf; redEcf.Versao = df.versaoSofwEcf; ReducaoZMensagemEcfDadosReducaoZ redDados = buscaMensagemEcf(df.dataRedz, serie, unidNeg); DataTable dt = gpArq.retornaReducao(unidNeg, redDados.COO, serie); bool arquivoGerado = false; if (dt.Rows.Count > 0) { DataRow linha = dt.Rows[0]; if (System.IO.File.Exists(linha["PATH_FILE"].ToString())) { arquivoGerado = true; string situacao = linha["SITUACAO"].ToString().Equals("T") ? "Transmitido" : "Pendente de Transmissão"; MessageBox.Show("Arquivo de redução Z já foi gerado para esta data. \n" + "Situação: " + situacao); } else { arquivoGerado = false; } } if (dt.Rows.Count <= 0 || !arquivoGerado) { IList <ReducaoZMensagemEcfDadosReducaoZTotalizadorParcial> listTotali = retTotalizadores(serie, unidNeg, df.dataRedz, redDados.CRZ, redDados.COO); redDados.TotalizadoresParciais = listTotali.ToArray(); redEcf.DadosReducaoZ = redDados; redMensagem.Ecf = redEcf; redMensagem.Estabelecimento = redMen; redMensagem.PafEcf = redPaf; redZ.Mensagem = redMensagem; XmlDocument xmlNFE = Serializar.Serializa <ReducaoZ>(redZ); ConfigHelper config = new ConfigHelper(); string pathfile = config.local_salvar_arquivos + unidNeg + @"\" + "reducoesZ" + @"\" + df.nFabEcf + @"\" + df.dataRedz.ToString("ddMMyyyy"); if (!Directory.Exists(pathfile)) { Directory.CreateDirectory(pathfile); } pathfile = pathfile + @"\reducaoZ.xml"; CarregaConfiguracoesGP carg = new CarregaConfiguracoesGP(); DataTable datCert = carg.BuscaConfig(85475, unidNeg); if (datCert.Rows.Count > 0) { DataRow row = datCert.Rows[0]; string serialNumber = row["DADO_ALPHA"].ToString().Trim(); if (serialNumber.Contains("SERIALNUMBER=")) { serialNumber = serialNumber.Replace("SERIALNUMBER=", string.Empty); } var certificado = CertificadoHelper.Consultar(StoreName.My, StoreLocation.CurrentUser, serialNumber, CertificadoHelper.TipoConsultaCertificado.PorNroSerie); if (certificado == null) { MessageBox.Show("Certificado " + row["DADO_ALPHA"].ToString().Trim() + " não localizado na maquina, impossivel assinar.", "Erro Certificado", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { XmlElement xmlAssinatura = AssinarXML.AssinarXmlNfe(xmlNFE, "ReducaoZ", certificado); XmlNode nodeEvento = xmlNFE.GetElementsByTagName("ReducaoZ")[0]; if (nodeEvento != null) { nodeEvento.AppendChild(xmlAssinatura); } } } else { MessageBox.Show("Não foi possivel assinar o arquivo, deve informar o certificado na config 85475.", "Erro Certificado", MessageBoxButtons.OK, MessageBoxIcon.Error); } xmlNFE.Save(pathfile); if (dt.Rows.Count <= 0) { gpArq.insereArquivo(unidNeg, redDados.COO, serie, "R", pathfile, df.dataRedz, df.nFabEcf); } int qtdePend = gpArq.retornaQtdeRedPendente(unidNeg, serie, "R"); string mensag = @" “HÁ (0) ARQUIVOS COM INFORMAÇÕES DA REDUÇÃO Z DO PAF-ECF PENDENTES DE TRANSMISSÃO AO FISCO. O CONTRIBUINTE PODE TRANSMITIR OS ARQUIVOS PELO MENU FISCAL POR MEIO DO COMANDO ‘Envio ao FISCO-REDUÇÃO Z’."; if (qtdePend > 0) { mensag = @"HÁ " + qtdePend + " ARQUIVOS COM INFORMAÇÕES DA REDUÇÃO Z DO PAF-ECF PENDENTES DE TRANSMISSÃO AO FISCO. " + "O CONTRIBUINTE PODE TRANSMITIR OS ARQUIVOS PELO MENU FISCAL POR MEIO DO COMANDO ‘Envio ao FISCO-REDUÇÃO Z’."; if (qtdePend >= 5 && qtdePend <= 8) { mensag = mensag + "\n" + " VERIFIQUE COM O FORNECEDOR DO PROGRAMA A SOLUÇÃO DA PENDÊNCIA."; } else if (qtdePend == 9) { mensag = mensag + "\n" + @"A PARTIR DA 10ª TRANSMISSÃO PENDENTE, O SEU PROGRAMA SERÁ BLOQUEADO E SOMENTE SERÁ LIBERADO APÓS TODAS AS TRANSMISSÕES SEREM REALIZADAS. VERIFIQUE URGENTEMENTE COM O FORNECEDOR DO PROGRAMA A SOLUÇÃO DA PENDÊNCIA"; } MessageBox.Show("Arquivo gerado com sucesso mas não transmitido! \n" + pathfile, "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show(mensag, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { MessageBox.Show("Arquivo gerado com sucesso mas não transmitido! \n" + pathfile, "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information); } System.Diagnostics.Process.Start(pathfile); } } catch (Exception ex) { MessageBox.Show("Arquivo não pode ser gerado, favor verifique o log...", "Erro Gerar ReduçãoZ", MessageBoxButtons.OK, MessageBoxIcon.Error); LogHelper.GravarLog("ERRO geraçao do arquivo RedZ= \n" + ex.Message); LogHelper.GravarLog("ERRO geraçao do arquivo RedZ= \n" + ex); } }
private void cmdInutilizar_Click(object sender, EventArgs e) { Cursor = Cursors.WaitCursor; string retValidar = string.Empty; string retTransmitir = string.Empty; txtResultado.Text = string.Empty; GerarXML geraxml = new GerarXML(); TransmitirXML transmitir = new TransmitirXML(); ValidarXML validarXml = new ValidarXML(); AssinarXML assinar = new AssinarXML(); StreamWriter Grava; try { //Gerando xml xmlInut = geraxml.InutilizacaoNFe(Convert.ToInt32(txtNFInicial.Text), Convert.ToInt32(txtNFInicial.Text), p.serienfiscal, "Erro interno do sistema", p.modelo); //Assinando xml xmlInut_Assinado = assinar.AssinaXML(xmlInut.InnerXml, "infInut", Certificado.getInstance.oCertificado); } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); txtResultado.AppendText("Erro ao assinar XML: " + ex.Message + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; this.Cursor = Cursors.Default; return; } try { // Validando o XML retValidar = validarXml.Valida(xmlInut_Assinado, "Inut"); } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); txtResultado.AppendText("Erro ao validar XML: " + ex.Message + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; this.Cursor = Cursors.Default; return; } if (retValidar == string.Empty) { try { //Recebendo xml de retorno da transmissão retTransmitir = transmitir.XML_InutilizacaoNFCe4(xmlInut_Assinado, Certificado.getInstance.oCertificado); if (retTransmitir.Substring(0, 4) != "Erro") { XmlDocument retxml = new XmlDocument(); retxml.LoadXml(retTransmitir); //Lote Processado if (retxml.GetElementsByTagName("cStat")[0].InnerText == "102") { try { XMLDao xmlDao = new XMLDao(); p.xml.numdoc = p.numdoc; p.xml.data = DateTime.Now; p.xml.arquivoXML = retxml.InnerXml; p.xml.Modelo = p.modelo; p.xml.statNFCe = "102"; if (!string.IsNullOrEmpty(Controle.getInstance.caminho_XMLInutilizado)) { //Salvando o arquivo XML na pasta selecionada no FORM Parametros > aba Arquivos Grava = File.CreateText(Controle.getInstance.caminho_XMLInutilizado + @"\NOTA " + p.nfiscal + " - INUTILIZADA.xml"); Grava.Write(p.xml.arquivoXML); Grava.Close(); } //Atualizando o status do pedido para inutilizada (new PedidoDao()).Update_StatNFCe_CondDoc(p.numdoc, "102"); using (var db = new Database("stringConexao")) { try { db.BeginTransaction(); foreach (PedidoItem pItem in p.lstPedidoItem) { db.Update("UPDATE produto " + "SET Estoque = Estoque + " + pItem.qtditens * 1 + ",ValorVnd = ValorVnd + " + (pItem.valitens * -1).ToString().Replace(",", ".") + " WHERE CodPro = " + pItem.codpro); } //Boleta cancelada db.Update("UPDATE Boleta set condicao = 2 where numdoc = " + p.numdoc); db.CompleteTransaction(); } catch (Exception) { db.AbortTransaction(); MessageBox.Show("Houve um erro inesperado ao atualizar o estoque e cancelar as boletas, informe imediatamente ao administrador do sistema!", "Mensagem de erro", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } txtResultado.AppendText("Nota Fiscal inutilizada com sucesso!"); txtResultado.ForeColor = Color.Green; } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); txtResultado.AppendText("Nota Fiscal inutilizada com sucesso, porém houve um erro inesperado, informe ao administrador do sistema!"); txtResultado.ForeColor = Color.Maroon; } } else { txtResultado.AppendText("Erro ao transmitir XML (002): " + retxml.GetElementsByTagName("xMotivo")[0].InnerText + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; } } else { txtResultado.AppendText("Erro ao transmitir XML (001): " + retTransmitir + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; } } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); txtResultado.AppendText("Erro ao finalizar XML: " + ex.Message + Environment.NewLine); txtResultado.ForeColor = Color.Maroon; } } this.Cursor = Cursors.Default; }
// ======================================================================== private bool Gera_NFCe(Pedido pedido) { var msg = new StringBuilder(); XmlDocument xmlNFe = new XmlDocument(); XmlDocument xmlNFe_Assinado = new XmlDocument(); GerarXML gerarXml = new GerarXML(); AssinarXML assinarXml = new AssinarXML(); ValidarXML validarXml = new ValidarXML(); TransmitirXML transmitirXml = new TransmitirXML(); Email email = new Email(); XMLDao xmlDao = new XMLDao(); StreamWriter Grava; string retValidar; string strProc; string strXmlProcNfe; string retTransmitir; string cStatus_LoteProcessado; string cStatus_Autorizado; int nPosI; int nPosF; try { retTransmitir = string.Empty; retValidar = string.Empty; cStatus_LoteProcessado = string.Empty; cStatus_Autorizado = string.Empty; try { // Gerando o XML xmlNFe = (gerarXml.NFe(pedido)); //MensagemSistema("Arquivo Gerado ...", Color.OliveDrab); // Assinando o XML xmlNFe_Assinado = assinarXml.AssinaXML(xmlNFe.InnerXml, "infNFe", Certificado.getInstance.oCertificado); } catch (Exception ex) { MessageBox.Show("** Erro ao ASSINAR XML NFC-e, tente novamente **" + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } try { // Validando o XML retValidar = validarXml.Valida(xmlNFe_Assinado, "NFe"); //Inserindo a URL QRCode no xml já assinado xmlNFe_Assinado.LoadXml(xmlNFe_Assinado.InnerXml.Replace("</infNFe>", "</infNFe><infNFeSupl><qrCode><![CDATA[" + gerarXml.Gera_Url_QRCode(xmlNFe_Assinado, pedido) + "]]></qrCode><urlChave>http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode</urlChave></infNFeSupl>")); } catch (Exception ex) { //Log_Exception.Monta_ArquivoLog(ex); MessageBox.Show("** Erro ao VALIDAR XML NFC-e **" + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } if (retValidar == string.Empty) { try { //MensagemSistema("Enviando a NFC-e", Color.OliveDrab); // Recebendo o XML de retorno da transmissão retTransmitir = transmitirXml.XML_NFCe4(xmlNFe_Assinado, pedido.nfiscal, Certificado.getInstance.oCertificado); if (retTransmitir.Substring(0, 4) != "Erro") { XmlDocument xmlRetorno = new XmlDocument(); xmlRetorno.LoadXml(retTransmitir); // Lote processado if (xmlRetorno.GetElementsByTagName("cStat")[0].InnerText == "104") { // Autorizado if (xmlRetorno.GetElementsByTagName("cStat")[1].InnerText == "100") { try { //MensagemSistema("Autorizado o uso da NFC-e", Color.OliveDrab); pedido.chave = xmlRetorno.GetElementsByTagName("chNFe")[0].InnerText; pedido.protocolo = xmlRetorno.GetElementsByTagName("nProt")[0].InnerText; // Separar somente o conteúdo a partir da tag <protNFe> até </protNFe> nPosI = retTransmitir.IndexOf("<protNFe"); nPosF = retTransmitir.Length - (nPosI + 13); strProc = retTransmitir.Substring(nPosI, nPosF); // XML pronto para salvar strXmlProcNfe = @"<?xml version=""1.0"" encoding=""utf-8"" ?><nfeProc xmlns=""http://www.portalfiscal.inf.br/nfe"" versao=""4.0"">" + xmlNFe_Assinado.InnerXml + strProc + "</nfeProc>"; pedido.xml = new XML { numdoc = pedido.numdoc, arquivoXML = strXmlProcNfe, data = DateTime.Now, Modelo = pedido.modelo, statNFCe = "100" }; //Salva arquivo XML no Banco SQL (NFe) if (xmlDao.Grava_XML(pedido.xml)) { // Atualizando o pedido com a Chave, Protocolo, e statNFCe if ((new PedidoDao()).Update_ChaveProtocolo_condDoc_StatNFCe(pedido.numdoc, pedido.chave, pedido.protocolo, pedido.xml.statNFCe)) { if (GerarXML.str_Ambiente == "1") { if (!string.IsNullOrEmpty(Controle.getInstance.caminho_XMLAutorizado)) { //Salvando o arquivo XML na pasta Grava = File.CreateText(Controle.getInstance.caminho_XMLAutorizado.Remove(Controle.getInstance.caminho_XMLAutorizado.Length - 1) + DateTime.Now.Month + @"\" + pedido.chave + "-procNfe.xml"); Grava.Write(pedido.xml.arquivoXML); Grava.Close(); } } } } } catch (Exception ex) { MessageBox.Show("** NOTA EMITIDA **, mas houve um erro inesperado" + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } } else { //MessageBox.Show("Erro ao Transmitir(004) XML NFC-e" + Environment.NewLine + xmlRetorno.GetElementsByTagName("xMotivo")[1].InnerText, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); msg.Append("** NOTA EMITIDA **, mas houve um erro inesperado"); msg.Append(Environment.NewLine); msg.Append(xmlRetorno.GetElementsByTagName("xMotivo")[1].InnerText); txtErro.Visible = true; btnEmitir.Visible = true; txtErro.Text = msg.ToString(); msg.Clear(); return(false); } } else { //MessageBox.Show("Erro ao Transmitir(003) XML NFC-e" + Environment.NewLine + xmlRetorno.GetElementsByTagName("xMotivo")[0].InnerText, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); msg.Append("** Erro ao Transmitir(003) XML NFC-e**"); msg.Append(Environment.NewLine); msg.Append(xmlRetorno.GetElementsByTagName("xMotivo")[0].InnerText); txtErro.Visible = true; btnEmitir.Visible = true; txtErro.Text = msg.ToString(); msg.Clear(); return(false); } } else { //MessageBox.Show("Erro ao Transmitir(002) XML NFC-e" + Environment.NewLine + retTransmitir, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); msg.Append("** Erro ao Transmitir(002) XML NFC-e **"); msg.Append(Environment.NewLine); msg.Append(retTransmitir); txtErro.Visible = true; btnEmitir.Visible = true; txtErro.Text = msg.ToString(); msg.Clear(); return(false); } } catch (Exception ex) { MessageBox.Show("Erro ao Transmitir(001) XML NFC-e" + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } } else { MessageBox.Show("Erro ao validar XML NFC-e" + Environment.NewLine + retValidar, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } } catch (Exception ex) { Log_Exception.Monta_ArquivoLog(ex); MessageBox.Show("Ocorreu um erro inesperado, informe ao administrador do sistema!" + Environment.NewLine + ex.Message, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } return(true); }