static void Main(string[] args) { try { GeraXml.AmbienteNFCe = "1"; CertificadoDigital.getInstance.Seleciona_Certificado(); (new EmitenteDao()).SelecionaEmitente(); var control = (new ControleFiscalDao()).getControle(); if (control != null) { ControleFiscal.GetInstance.TokenHomologacao = control.TokenHomologacao; ControleFiscal.GetInstance.TokenProducao = control.TokenProducao; ControleFiscal.GetInstance.CaminhoXmlAutorizado = control.CaminhoXmlAutorizado; ControleFiscal.GetInstance.CaminhoXmlCancelado = control.CaminhoXmlCancelado; ControleFiscal.GetInstance.CaminhoXmlInutilizado = control.CaminhoXmlInutilizado; control = null; } var dataInicial = new DateTime(2018, 10, 03); var dataFinal = new DateTime(2018, 10, 03); var pedidos = (new PedidoDao()).GetPedidosDoCaixa(dataInicial, dataFinal); foreach (var pedido in pedidos) { pedido.DataDigitacao = DateTime.Now; pedido.NFiscal = (new ControleFiscalDao()).GetUltimoNumeroNFiscalGerado() + 1; pedido.Cliente = (new ClienteDao()).GetClienteConsumidorNaoIdentificado(); pedido.Operacao = (new OperacaoDao()).GetOperacaoPorPedido(pedido.NumDoc); pedido.Pagamentos = (new TipoPagamentoDao()).GetPagametosDoPedido(pedido.NumDoc); pedido.ItensDoPedido = (new PedidoItemDao()).GetItensDoPedido(pedido.NumDoc); pedido.ItensDoPedido.ForEach(pedidoItem => { pedidoItem.Produto = (new ProdutoDao().GetProduto(pedidoItem.ProdutoId)); pedidoItem.Produto.GrupoFiscal = (new ProdutoGrupoFiscalDao()).GetGrupoFiscalPorProduto(pedidoItem.ProdutoId); }); var geraXml = new GeraXml(); //Gerando XML var xml = geraXml.GeraXmlNFCe(pedido); var GravaXml = File.CreateText(@"C:\Users\Succo\Desktop\xmlGerado.xml"); GravaXml.Write(xml.InnerXml); GravaXml.Close(); //Assinando XML var xmlAssinado = (new AssinaXml()).AssinaXML(xml.InnerXml, "infNFe", CertificadoDigital.getInstance.oCertificado); var GravaXmlAssinado = File.CreateText(@"C:\Users\Succo\Desktop\xmlAssinado.xml"); GravaXmlAssinado.Write(xmlAssinado.InnerXml); GravaXmlAssinado.Close(); //Validando XML try { // Validando o XML var retValidar = (new ValidaXml()).Valida(xmlAssinado, "NFe"); //Inserindo a URL QRCode no xml já assinado xmlAssinado.LoadXml(xmlAssinado.InnerXml.Replace("</infNFe>", "</infNFe><infNFeSupl><qrCode><![CDATA[" + geraXml.GetUrlQRCode(xmlAssinado, pedido) + "]]></qrCode><urlChave>http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode</urlChave></infNFeSupl>")); } catch (Exception ex) { Console.WriteLine("** Erro ao validar **"); Console.WriteLine(ex.Message); } var GravaXmlAssinadoComQrCode = File.CreateText(@"C:\Users\Succo\Desktop\xmlAssinadoComQrCode.xml"); GravaXmlAssinadoComQrCode.Write(xmlAssinado.InnerXml); GravaXmlAssinadoComQrCode.Close(); var retornoDaTransmicao = (new TransmiteXml()).XML_NFCe4(xmlAssinado, pedido.NFiscal.ToString(), CertificadoDigital.getInstance.oCertificado); if (retornoDaTransmicao.Substring(0, 4) != "Erro") { var xmlRetorno = new XmlDocument(); xmlRetorno.LoadXml(retornoDaTransmicao); var GravaXmlTransmitido = File.CreateText(@"C:\Users\Succo\Desktop\xmlTransmitido.xml"); GravaXmlTransmitido.Write(xmlRetorno.InnerXml); GravaXmlTransmitido.Close(); // Lote processado if (xmlRetorno.GetElementsByTagName("cStat")[0].InnerText == "104") { // Autorizado if (xmlRetorno.GetElementsByTagName("cStat")[1].InnerText == "100") { 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> var nPosI = retornoDaTransmicao.IndexOf("<protNFe"); var nPosF = retornoDaTransmicao.Length - (nPosI + 13); var strProc = retornoDaTransmicao.Substring(nPosI, nPosF); // XML pronto para salvar var strXmlProcNfe = @"<?xml version=""1.0"" encoding=""utf-8"" ?><nfeProc xmlns=""http://www.portalfiscal.inf.br/nfe"" versao=""4.00"">" + xmlAssinado.InnerXml + strProc + "</nfeProc>"; pedido.Xml = new Xml() { NumDoc = pedido.NumDoc, ArquivoXml = strXmlProcNfe, Data = DateTime.Now, Modelo = pedido.ModeloNFiscal, StatNFCe = "100" }; using (var db = new Database("stringConexao")) { db.BeginTransaction(); try { db.Update("Update Controle Set NFiscal=" + pedido.NFiscal + " Where ChvControle = 1"); db.Update("Update Movdb Set data_nfiscal = '" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "', NFiscal= " + pedido.NFiscal + ", Chave='" + pedido.Chave + "' ,Protocolo='" + pedido.Protocolo + "', status_nfce = '" + pedido.Xml.StatNFCe + "' Where NumDoc = " + pedido.NumDoc); db.CompleteTransaction(); } catch (Exception) { db.AbortTransaction(); } if (!string.IsNullOrEmpty(ControleFiscal.GetInstance.CaminhoXmlAutorizado)) { //Salvando o arquivo XML na pasta var Grava = File.CreateText(ControleFiscal.GetInstance.CaminhoXmlAutorizado.Remove(ControleFiscal.GetInstance.CaminhoXmlAutorizado.Length - 1) + DateTime.Now.Month + @"\" + pedido.Chave + "-procNfe.xml"); Grava.Write(pedido.Xml.ArquivoXml); Grava.Close(); } } } } else { Console.WriteLine("Erro no lote"); } } } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.ReadKey(); } }
// ======================================================================== private bool Gera_NFCe() { var xmlNFCe = new XmlDocument(); var xmlNFCeAssinado = new XmlDocument(); var gerarXml = new GeraXml(); var assinarXml = new AssinaXml(); var validarXml = new ValidaXml(); var transmitirXml = new TransmiteXml(); //Email email = new Email(); var 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; _pedido.NFiscal = ((new ControleFiscalDao()).GetUltimoNumeroNFiscalGerado() + 1); try { // Gerando o XML xmlNFCe = (gerarXml.GeraXmlNFCe(_pedido)); //MensagemSistema("Arquivo Gerado ...", Color.OliveDrab); // Assinando o XML xmlNFCeAssinado = assinarXml.AssinaXML(xmlNFCe.InnerXml, "infNFe", CertificadoDigital.getInstance.oCertificado); } catch (Exception ex) { //Log_Exception.Monta_ArquivoLog(ex); //MensagemSistema("** Erro ao ASSINAR XML NFC-e, tente novamente **", Color.Brown); MessageBox.Show("Erro ao tentar gerar e assinar o xml da NFC-e" + Environment.NewLine + "Erro: " + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } //MensagemSistema("Arquivo Assinado ...", Color.OliveDrab); if (GeraXml.AmbienteNFCe == "2") { //Salvando o arquivo XML na pasta Grava = File.CreateText(@"C:\Users\Comercial\Desktop\ASSINADO.xml"); Grava.Write(xmlNFCeAssinado.InnerXml); Grava.Close(); } try { // Validando o XML retValidar = validarXml.Valida(xmlNFCeAssinado, "NFe"); urlQRCode = gerarXml.GetUrlQRCode(xmlNFCeAssinado, _pedido); //Inserindo a URL QRCode no xml já assinado xmlNFCeAssinado.LoadXml(xmlNFCeAssinado.InnerXml.Replace("</infNFe>", "</infNFe><infNFeSupl><qrCode><![CDATA[" + urlQRCode + "]]></qrCode><urlChave>http://www4.fazenda.rj.gov.br/consultaNFCe/QRCode</urlChave></infNFeSupl>")); } catch (Exception ex) { //Log_Exception.Monta_ArquivoLog(ex); //MensagemSistema("** Erro ao VALIDAR XML NFC-e **", Color.Brown); MessageBox.Show("Erro ao tentar validar o xml da NFC-e " + Environment.NewLine + "Erro: " + ex.Message, "Atenção", 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(xmlNFCeAssinado, _pedido.NFiscal.ToString(), CertificadoDigital.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.00"">" + xmlNFCeAssinado.InnerXml + strProc + "</nfeProc>"; _pedido.Xml = new Xml() { NumDoc = _pedido.NumDoc, ArquivoXml = strXmlProcNfe, Data = DateTime.Now, Modelo = _pedido.ModeloNFiscal, StatNFCe = "100" }; using (var db = new Database("stringConexao")) { db.BeginTransaction(); try { db.Update("Update Controle Set NFiscal=" + _pedido.NFiscal + " Where ChvControle = 1"); db.Update("Update Movdb Set data_nfiscal = '" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "', NFiscal= " + _pedido.NFiscal + ", Chave='" + _pedido.Chave + "' ,Protocolo='" + _pedido.Protocolo + "', status_nfce = '" + _pedido.Xml.StatNFCe + "' Where NumDoc = " + _pedido.NumDoc); db.CompleteTransaction(); } catch (Exception) { db.AbortTransaction(); } } if (GeraXml.AmbienteNFCe == "2") { //Salvando o arquivo XML na pasta Grava = File.CreateText(@"C:\Users\Comercial\Desktop\EMITIDO.xml"); Grava.Write(_pedido.Xml.ArquivoXml); Grava.Close(); } if (GeraXml.AmbienteNFCe == "1") { if (!string.IsNullOrEmpty(ControleFiscal.GetInstance.CaminhoXmlAutorizado)) { //Salvando o arquivo XML na pasta Grava = File.CreateText(ControleFiscal.GetInstance.CaminhoXmlAutorizado.Remove(ControleFiscal.GetInstance.CaminhoXmlAutorizado.Length - 1) + DateTime.Now.Month + @"\" + _pedido.Chave + "-procNfe.xml"); Grava.Write(_pedido.Xml.ArquivoXml); Grava.Close(); } } //Salva arquivo XML no Banco SQL (NFe) if (xmlDao.GravaXml(_pedido.Xml)) { } } catch (Exception ex) { MessageBox.Show("NOTA EMITIDA, porém houve um erro ao inesperado ao salvar as informações no banco de dados " + Environment.NewLine + "Erro: " + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } } else { MessageBox.Show("O xml não pôde ser Autorizado! " + Environment.NewLine + "Motivo: " + xmlRetorno.GetElementsByTagName("xMotivo")[1].InnerText, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } } else { //MensagemSistema("Erro ao Transmitir(003) XML NFC-e para SEFAZ", Color.Brown); MessageBox.Show("Erro no arquivo xml: " + Environment.NewLine + "Erro: " + xmlRetorno.GetElementsByTagName("xMotivo")[0].InnerText, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } } else { //MensagemSistema("Erro ao Transmitir(002) XML NFC-e para SEFAZ", Color.Brown); MessageBox.Show("Erro ao tentar transmitir o xml da NFC-e, tente novamente " + Environment.NewLine + "Erro: " + retTransmitir, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } } catch (Exception ex) { //Log_Exception.Monta_ArquivoLog(ex); //MensagemSistema("Erro ao Transmitir(001) XML NFC-e para SEFAZ", Color.Brown); MessageBox.Show("Erro: " + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } } else { //MensagemSistema("Erro ao validar XML NFC-e", Color.Brown); MessageBox.Show("Erro XML Shema: " + retValidar, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } } catch (Exception ex) { //Log_Exception.Monta_ArquivoLog(ex); //MensagemSistema("Ocorreu um erro inesperado, informe ao administrador do sistema!", Color.Brown); MessageBox.Show("Erro : " + ex.Message, "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } return(true); }