private void cmdAtualizarSecretaria_Click(object sender, EventArgs e) { if (chkNFp.Checked) { NFPaulista.NFP_TrataWS ws = new ERP.NFPaulista.NFP_TrataWS(); IList <int> ilLote = new List <int>(); ilLote.Add(Convert.ToInt32(txtLote.Text)); ws.Buscar_Retorno_Lote(ilLote); } if (chkNFe.Checked) { //-- captura datarowview atual selecionado. DataRowView row = (DataRowView)BindingSource[MainTabela].Current; //-- Alimenta variaveis necessárias para trabalho. Dados_Arquivo_NFe daNFe = new Dados_Arquivo_NFe(); daNFe.Carregar_Dados(Convert.ToInt32(row["nota_fiscal_lote"])); //-- Instancia WebService ERP.NFe.NFe nfe = new ERP.NFe.NFe(); nfe.Resultado_Processamento_NFe(daNFe); } Atualizar_Query_Atual(); }
/// <summary> /// Verifica se o arquivo fisico XML existe, caso não exista o sistema busca o XML e salva o do banco de dados. /// </summary> /// <param name="daNFe">Dados_Arquivo_NFe contendo as informações da NF-e</param> private void Verifica_XML_Existe(Dados_Arquivo_NFe daNFe) { System.IO.FileInfo fi = new System.IO.FileInfo(daNFe.Arquivo_XML); if (!fi.Exists) { //-- Busca no bando de dados as informações. StringBuilder sb = new StringBuilder(); sb.AppendLine("select nfe_documentoxml from notas_fiscais"); sb.AppendFormat(" where nota_fiscal = {0}", daNFe.Nota_Fiscal); string sXML = SQL.ExecuteScalar(sb.ToString()).ToString(); //-- Verifica se existe o conteudo XML. if (!string.IsNullOrEmpty(sXML)) { if (!System.IO.Directory.Exists(fi.DirectoryName)) { System.IO.Directory.CreateDirectory(fi.DirectoryName); } //-- Salva o arquivo em disco no mesmo diretório onde o arquivo ele foi criado originalmente System.IO.StreamWriter sw = new System.IO.StreamWriter(daNFe.Arquivo_XML); sw.Write(sXML); sw.Close(); sw.Dispose(); } } }
/// <summary> /// Salva o arquivo XML no banco de dados na tabela de notas fiscais. /// </summary> /// <param name="daNFe"></param> private void SalvaXML_DB(Dados_Arquivo_NFe daNFe, bool bMarca_Exportado) { if (System.IO.File.Exists(daNFe.Arquivo_XML)) { //-- Le o arquivo XML e aloca em memoria. System.IO.StreamReader sr = new System.IO.StreamReader(daNFe.Arquivo_XML); string sXML = sr.ReadToEnd(); sr.Close(); sr.Dispose(); //-- Declara parametros para inclusão. IList <System.Data.SqlClient.SqlParameter> ilParameters = new List <System.Data.SqlClient.SqlParameter>(); System.Data.SqlClient.SqlParameter p = new System.Data.SqlClient.SqlParameter("@docxml", System.Data.SqlDbType.Text); p.Value = sXML; ilParameters.Add(p); p = new System.Data.SqlClient.SqlParameter("@notafiscal", System.Data.SqlDbType.Int); p.Value = daNFe.Nota_Fiscal; ilParameters.Add(p); //-- Indica se a nota será marcada como exportada. string sQuery = "update notas_fiscais set nfe_documentoxml = @docxml {0} where nota_fiscal = @notafiscal"; string sMarca_Exportacao = string.Empty; if (bMarca_Exportado) { sMarca_Exportacao = ", exportacao_NFe = 1"; } sQuery = string.Format(sQuery, sMarca_Exportacao); //-- executa o comando. SQL.Execute(sQuery, ilParameters); } }
private void cmdCartaCorrecao_Click(object sender, EventArgs e) { DataRowView row = (DataRowView)BindingSource[MainTabela].Current; IList <Dados_Arquivo_NFe> ilNotas = new List <Dados_Arquivo_NFe>(); Dados_Arquivo_NFe daNFe = new Dados_Arquivo_NFe(); daNFe.Carregar_Dados(Convert.ToInt32(row["Nota_Fiscal_Lote"])); ilNotas.Add(daNFe); ERP.NFe.NFe nfe = new ERP.NFe.NFe(); nfe.CartaCorrecao_NFe(ilNotas); Atualizar_Query_Atual(); //-- Atualiza //-- Exclui o titulo a receber. Funcoes func; if (!string.IsNullOrEmpty(txtProtocoloCancelamento.Text) && Convert.ToBoolean(func.Busca_Propriedade("Gera_Consiliacao_Automatica"))) { Financeiro.ConsiliacaoFinanceira cf = new Financeiro.ConsiliacaoFinanceira(); cf.Excluir_ContaReceber(daNFe.Nota_Fiscal); } }
/// <summary> /// Consulta situação atual da NF-e na Secretária da Fazenda. /// </summary> /// <param name="daNFe">Dados_Arquivo_NFe com todos os paramentros necessários para NF-e</param> /// <returns>XmlDocument com o resultado da pesquisa.</returns> public XmlDocument Consulta_NFe(Dados_Arquivo_NFe daNFe) { System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; NFe.Dados_DocumentosNFe doc = new Dados_DocumentosNFe(Tipos_Servicos.NfeConsultaProtocolo, daNFe.Estado_Emissor); nfeconsultaprotocolo4.NFeConsultaProtocolo4 nfe = new nfeconsultaprotocolo4.NFeConsultaProtocolo4(); //-- Busca a URL correta para trabalalho de acordo com o Estado e o nome do serviço nfe.Url = doc.Url_WebService; //-- Encontra o serial number do Certificado e adiciona ao web service. nfe.ClientCertificates.Add(Funcoes_NFe.Certificado_Digital(daNFe.Empresa)); //-- Cria o XMl para envio. StringBuilder sb = new StringBuilder(); sb.Append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><consSitNFe xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao="); sb.Append('"'); sb.Append(doc.Versao_Dados); sb.Append('"'); sb.Append("><tpAmb>"); sb.Append((int)daNFe.Ambiente); sb.Append("</tpAmb><xServ>CONSULTAR</xServ><chNFe>"); sb.Append(daNFe.Chave_Acesso); sb.Append("</chNFe></consSitNFe>"); //-- Verifica status do serviço XmlNode sRetornoXML = nfe.nfeConsultaNF(Funcoes_NFe.StringXmlToXMLDocument(sb.ToString()).DocumentElement); XmlDocument xml = Funcoes_NFe.StringXmlToXMLDocument(sRetornoXML.OuterXml); return(xml); }
/// <summary> /// Envia arquivo de lote de NF-e /// </summary> /// <param name="daNFe">classe que contem todos os parametros do arquivo XML</param> /// <returns>XMLDocument com o recibo de envio</returns> public XmlDocument Enviar_LoteNFe(Dados_Arquivo_NFe daNFe) { NFe.Dados_DocumentosNFe doc = new Dados_DocumentosNFe(Tipos_Servicos.NfeRecepcao, daNFe.Estado_Emissor); var certificado = Funcoes_NFe.Certificado_Digital(daNFe.Empresa); System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; autorizeNFE.NFeAutorizacao4 nfe = new autorizeNFE.NFeAutorizacao4(); nfe.Url = doc.Url_WebService; //--"https://nfe.fazenda.sp.gov.br/ws/nfeautorizacao4.asmx"; nfe.ClientCertificates.Add(certificado); nfe.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; //-- Captura o XML do arquivo. XmlDocument xml = new XmlDocument(); xml.Load(daNFe.Arquivo_XML); //-- Gera o número do lote. CompSoft.compFrameWork.Funcoes func; string sNum_Lote_NFe = func.Contador("IdLote_NFe", true); daNFe.Numero_Lote = Convert.ToInt32(sNum_Lote_NFe); ////-- Gera cabeçalho da NF-e //NFeRecepcao2.nfeCabecMsg cabecMsg = new NFeRecepcao2.nfeCabecMsg(); //cabecMsg.cUF = daNFe.Codigo_Estado_Emissor.ToString(); //cabecMsg.versaoDados = doc.Versao_Dados; //nfe.nfeCabecMsgValue = cabecMsg; //-- Gera capa do processo do lote StringBuilder sb = new StringBuilder(); sb.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><enviNFe xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao="); sb.Append('"'); sb.Append(doc.Versao_Dados); sb.Append('"'); sb.Append("><idLote>"); sb.Append(sNum_Lote_NFe); sb.Append("</idLote>"); sb.Append("<indSinc>0</indSinc>"); sb.Append(xml.GetElementsByTagName("NFe")[0].OuterXml); sb.Append("</enviNFe>"); //-- Faz a comunicação com o servidor. XmlNode sRetorno_XML = nfe.nfeAutorizacaoLote(Funcoes_NFe.StringXmlToXMLDocument(sb.ToString()).DocumentElement); //-- XML de retorno. XmlDocument xml_Ret = Funcoes_NFe.StringXmlToXMLDocument(sRetorno_XML.OuterXml); return(xml_Ret); }
public void Imprimir_Danfe(Dados_Arquivo_NFe daNFe, bool bPreview) { ERP.NFe.GerarDadosNFe gd = new GerarDadosNFe(); IList <Dados_Arquivo_NFe> il = new List <Dados_Arquivo_NFe>(); il.Add(daNFe); gd.Gerar_Dados_NFe(il); //-- Faz a impressão do danfe. ERP.Reports.rDanfe r = new ERP.Reports.rDanfe(gd.DataSet_NFe); r.PrintingSystem.StartPrint += new DevExpress.XtraPrinting.PrintDocumentEventHandler(PrintingSystem_StartPrint); CompSoft.compFrameWork.Impressoras imp; if (bPreview) { r.ShowPreviewDialog(); } else { r.Print(imp.Impressora_Padrao); } //-- Cria diretório e salva em PDF. if (!string.IsNullOrEmpty(daNFe.Arquivo_XML)) { System.IO.FileInfo fi = new System.IO.FileInfo(daNFe.Arquivo_XML); string sPathPDF = fi.DirectoryName; if (!sPathPDF.EndsWith(@"\")) { sPathPDF += @"\"; } sPathPDF += @"PDF\"; System.IO.DriveInfo di = new System.IO.DriveInfo(sPathPDF.Substring(0, 1)); if (di.IsReady) { if (!System.IO.Directory.Exists(sPathPDF)) { System.IO.Directory.CreateDirectory(sPathPDF); } string sFile = gd.DataSet_NFe.Tables["Notas_Fiscais"].Rows[0]["Numero_nota"].ToString(); sFile += ".pdf"; //-- Exporta em PDF. r.ExportToPdf(sPathPDF + sFile); } } }
private void cmdImprimirDANFE_Click(object sender, EventArgs e) { if (Convert.ToInt32(cboCodMensagem_NFe.SelectedValue) == 100) { foreach (DataRow row in DataSetLocal.Tables["Notas_Fiscais_Lotes_Itens"].Select()) { Dados_Arquivo_NFe daNFe = new Dados_Arquivo_NFe(Convert.ToInt32(row["Nota_Fiscal"])); daNFe.Arquivo_XML = txtArquivo.Text; ERP.NFe.Impressao_Danfe imp; imp.Imprimir_Danfe(daNFe, true); } } }
private void cmdBuscarStatusNFe_Click(object sender, EventArgs e) { DataRowView row = (DataRowView)BindingSource[MainTabela].Current; IList <Dados_Arquivo_NFe> ilNotas = new List <Dados_Arquivo_NFe>(); Dados_Arquivo_NFe daNFe = new Dados_Arquivo_NFe(); daNFe.Carregar_Dados(Convert.ToInt32(row["Nota_Fiscal_Lote"])); ilNotas.Add(daNFe); ERP.NFe.NFe nfe = new ERP.NFe.NFe(); nfe.Consultar_Situacao_NFe(ilNotas); Atualizar_Query_Atual(); }
private void cmdEnviarXMLEmail_Click(object sender, EventArgs e) { frmWait f = new frmWait("Aguarde, enviando e-mail com NF-e em anexo...", frmWait.Tipo_Imagem.Informacao); foreach (DataRow row in this.DataSetLocal.Tables["Notas_Fiscais_Lotes_Itens"].Select()) { Dados_Arquivo_NFe daNFe = new Dados_Arquivo_NFe(); daNFe.Carregar_Dados(Convert.ToInt32(row["Nota_fiscal_Lote"])); ERP.NFe.Enviar_XML_Email envMail_Nfe; envMail_Nfe.Enviar_XML(daNFe); } f.Close(); f.Dispose(); }
/// <summary> /// Verifica se o WebService está ativo /// </summary> /// <param name="daNFe">Dados da NF-e para consuta do status do Webservice.</param> /// <returns>true/false Indicando se o serviço está Ativo</returns> public bool Status_WebService(Dados_Arquivo_NFe daNFe) { bool bRetorno = false; try { compFrameWork.Funcoes func; NFe.Dados_DocumentosNFe doc = new Dados_DocumentosNFe(Tipos_Servicos.NfeStatusServico, daNFe.Estado_Emissor); nfestatusservico4.NFeStatusServico4 nfe_Status = new nfestatusservico4.NFeStatusServico4(); nfe_Status.Url = doc.Url_WebService; var certificado = Funcoes_NFe.Certificado_Digital(daNFe.Empresa); nfe_Status.ClientCertificates.Add(certificado); //nfe_Status.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"; //-- Cria o XMl para envio. StringBuilder sb = new StringBuilder(); sb.Append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><consStatServ xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao="); sb.Append('"'); sb.Append(doc.Versao_Dados); sb.Append('"'); sb.Append("><tpAmb>"); sb.Append(func.Busca_Propriedade("Ambiente_NFe")); sb.Append("</tpAmb><cUF>"); sb.Append(daNFe.Codigo_Estado_Emissor); sb.Append("</cUF><xServ>STATUS</xServ></consStatServ>"); //-- Verifica status do serviço XmlNode sRetornoXML = nfe_Status.nfeStatusServicoNF(Funcoes_NFe.StringXmlToXMLDocument(sb.ToString()).DocumentElement); XmlDocument xml = Funcoes_NFe.StringXmlToXMLDocument(sRetornoXML.OuterXml); if (xml.GetElementsByTagName("cStat")[0].InnerText == "107") { bRetorno = true; } } finally { } return(bRetorno); }
/// <summary> /// Captura o retorno do processamento do lote da NF-e /// </summary> /// <param name="daNFe">Dados_Arquivo_NFe com os parametros da NF-e</param> /// <returns>XML com o resultado do processamento</returns> public XmlDocument Resultado_Processamento_NFe(Dados_Arquivo_NFe daNFe) { NFe.Dados_DocumentosNFe doc = new Dados_DocumentosNFe(Tipos_Servicos.NfeRetRecepcao, daNFe.Estado_Emissor); var certificado = Funcoes_NFe.Certificado_Digital(daNFe.Empresa); System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; nferetautorizacao4.NFeRetAutorizacao4 nfe = new nferetautorizacao4.NFeRetAutorizacao4(); nfe.Url = doc.Url_WebService; nfe.ClientCertificates.Add(certificado); nfe.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; //-- Consulta de dados. StringBuilder sb = new StringBuilder(); sb.Append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><consReciNFe xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao="); sb.Append('"'); sb.Append(doc.Versao_Dados); sb.Append('"'); sb.Append("><tpAmb>"); sb.Append((int)daNFe.Ambiente); sb.Append("</tpAmb><nRec>"); sb.Append(daNFe.Numero_Recibo); sb.Append("</nRec></consReciNFe>"); //-- Faz a comunicação com o servidor. XmlNode sRetorno_XML = nfe.nfeRetAutorizacaoLote(Funcoes_NFe.StringXmlToXMLDocument(sb.ToString()).DocumentElement); //-- XML de retorno. XmlDocument xml = Funcoes_NFe.StringXmlToXMLDocument(sRetorno_XML.OuterXml); //-- Salva resultado do processamento no XML da NF-e. this.Salva_XML_Envio_Cliente(daNFe.Arquivo_XML, xml); return(xml); }
public XmlDocument CartaCorrecao_NFe(Dados_Arquivo_NFe daNFe) { if (string.IsNullOrEmpty(daNFe.Texto_Carta_Correcao)) { MessageBox.Show("O Texto da carta de correção não foi definido, por favor, edita a NFe e tente novamente."); return(null); } NFe.Dados_DocumentosNFe doc = new Dados_DocumentosNFe(Tipos_Servicos.nfeRecepcaoEvento, daNFe.Estado_Emissor); nferecepcaoevento4.NFeRecepcaoEvento4 nfe = new nferecepcaoevento4.NFeRecepcaoEvento4(); //-- Busca a URL correta para trabalalho de acordo com o Estado e o nome do serviço nfe.Url = doc.Url_WebService; //-- Encontra o serial number do Certificado e adiciona ao web service. System.Security.Cryptography.X509Certificates.X509Certificate2 cert = Funcoes_NFe.Certificado_Digital(daNFe.Empresa); nfe.ClientCertificates.Add(cert); int contador = 1; string evento = "110110"; string _query = string.Format("select Contador from Notas_Fiscais_Lotes_Contagens where Nota_Fiscal_Lote = {0} and Codigo_Evento = '{1}'" , daNFe.Cod_Nota_Fiscal_Lote, evento); object objContador = SQL.ExecuteScalar(_query); if (objContador == null) { _query = "insert Notas_Fiscais_Lotes_Contagens(Nota_Fiscal_Lote, Codigo_Evento, Contador) VALUES({0}, '{1}', {2})"; _query = string.Format(_query, daNFe.Cod_Nota_Fiscal_Lote, evento, contador); } else { contador = Convert.ToInt32(objContador) + 1; _query = "update Notas_Fiscais_Lotes_Contagens set Contador = {2} where Nota_Fiscal_Lote = {0} and Codigo_Evento = '{1}'"; _query = string.Format(_query, daNFe.Cod_Nota_Fiscal_Lote, evento, contador); } SQL.ExecuteNonQuery(_query); StringBuilder sb = new StringBuilder(5000); sb.Append("<envEvento versao=\"1.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">"); sb.AppendFormat("<idLote>{0}</idLote>", daNFe.Numero_Lote); sb.Append("<evento xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.00\">"); sb.AppendFormat("<infEvento Id=\"ID{1}{0}{2}\">", daNFe.Chave_Acesso, evento, contador.ToString().PadLeft(2, '0')); sb.Append("<cOrgao>35</cOrgao>"); sb.AppendFormat("<tpAmb>{0}</tpAmb>", Convert.ToInt32(daNFe.Ambiente)); sb.AppendFormat("<CNPJ>{0}</CNPJ>", daNFe.CNPJ); sb.AppendFormat("<chNFe>{0}</chNFe>", daNFe.Chave_Acesso); sb.AppendFormat("<dhEvento>{0:yyyy-MM-ddTHH:mm:sszzz}</dhEvento>", DateTime.Now); sb.AppendFormat("<tpEvento>{0}</tpEvento>", evento); sb.AppendFormat("<nSeqEvento>{0}</nSeqEvento>", contador); sb.Append("<verEvento>1.00</verEvento>"); sb.Append("<detEvento versao=\"1.00\">"); sb.Append("<descEvento>Carta de Correcao</descEvento>"); sb.AppendFormat("<xCorrecao>{0}</xCorrecao>", daNFe.Texto_Carta_Correcao.Replace("\r\n", " ")); sb.Append("<xCondUso>A Carta de Correcao e disciplinada pelo paragrafo 1o-A do art. 7o do Convenio S/N, de 15 de dezembro de 1970 e pode ser utilizada para regularizacao de erro ocorrido na emissao de documento fiscal, desde que o erro nao esteja relacionado com: I - as variaveis que determinam o valor do imposto tais como: base de calculo, aliquota, diferenca de preco, quantidade, valor da operacao ou da prestacao; II - a correcao de dados cadastrais que implique mudanca do remetente ou do destinatario; III - a data de emissao ou de saida.</xCondUso>"); sb.Append("</detEvento>"); sb.Append("</infEvento>"); sb.Append("</evento>"); sb.Append("</envEvento>"); //-- Salva XML temporariamente em disco. string sFolder_temp = System.Windows.Forms.Application.StartupPath; if (!sFolder_temp.EndsWith(@"\")) { sFolder_temp += @"\"; } sFolder_temp += @"tmp\"; if (!System.IO.Directory.Exists(sFolder_temp)) { System.IO.Directory.CreateDirectory(sFolder_temp); } string sFile_tmp = sFolder_temp + daNFe.Chave_Acesso + "-cartacor.xml"; System.IO.StreamWriter sw = new System.IO.StreamWriter(sFile_tmp); sw.Write(sb.ToString()); sw.Close(); sw.Dispose(); //-- Assina arquivo para envio. AssinaXML assinar = new AssinaXML(); assinar.AssinarArquivoXML(sFile_tmp, "infEvento", cert.SerialNumber); //-- Limpa stringbuilder e carrega o arquivo assinado. System.IO.StreamReader sr = new System.IO.StreamReader(sFile_tmp); sb.Remove(0, sb.Length); sb.Append(sr.ReadToEnd()); //-- Adiciona o arquivo do inteiro no stringbuilder sr.Close(); sr.Dispose(); //-- apaga o arquivo criado. System.IO.Directory.Delete(sFolder_temp, true); //-- Verifica status do serviço XmlNode sRetornoXML = nfe.nfeRecepcaoEvento(Funcoes_NFe.StringXmlToXMLDocument(sb.ToString()).DocumentElement); XmlDocument xml = Funcoes_NFe.StringXmlToXMLDocument(sRetornoXML.OuterXml); return(xml); }
/// <summary> /// Captura o resultado do processamento do lote na Secretária da Fazenda. /// </summary> /// <param name="daNFe">Dados_Arquivo_NFe</param> internal void Resultado_Processamento_NFe(Dados_Arquivo_NFe daNFe) { bool bImprimiDanfe = false; NFeWebService wb_NFe = new NFeWebService(); //-- Verifica se o arquivo XML da NF-e existe, caso não exista o sistema salva o existente no DB para envio ao cliente. this.Verifica_XML_Existe(daNFe); //-- Busca o resultado do processamento do lote. XmlDocument doc = wb_NFe.Resultado_Processamento_NFe(daNFe); //-- Verifica se o status é regsitrado como lote processado. if (doc.GetElementsByTagName("cStat")[0].InnerText.Equals("104")) { string sCodigo_Mensagem_Retorno = doc.GetElementsByTagName("cStat")[1].InnerText; string sMensagem_Retorno = doc.GetElementsByTagName("xMotivo")[1].InnerText; if (!sCodigo_Mensagem_Retorno.Trim().Equals("999")) { sMensagem_Retorno = "NULL"; } else { sMensagem_Retorno = "'" + sMensagem_Retorno + "'"; } //-- Caso a mensagem de retorno for de autorização de uso. string sProt = string.Empty; if (sCodigo_Mensagem_Retorno.Equals("100")) { bImprimiDanfe = true; } //-- Verifica se a mensagem de erro existe e inclui bool bExiste_MensRet = (int.Parse(SQL.ExecuteScalar(string.Format("select count(codigo_mensagem_retorno) from dbo.Mensagens_Retorno_NFe where codigo_mensagem_retorno = {0}" , sCodigo_Mensagem_Retorno)).ToString()) > 0); if (!bExiste_MensRet) { //-- inclui a mensagem. SQL.Execute(string.Format("insert Mensagens_Retorno_NFe values({0}, '{1}')" , sCodigo_Mensagem_Retorno , doc.GetElementsByTagName("xMotivo")[1].InnerText.Replace("'", ""))); } //-- Monta query para atualização do lote da NF-e StringBuilder sb = new StringBuilder(); sb.Append("update notas_fiscais_lotes set "); sb.AppendFormat(" Data_Processamento = '{0}'", doc.GetElementsByTagName("dhRecbto")[0].InnerText.Replace("T", " ").Replace("-", "").Substring(0, 17)); sb.AppendFormat(" , Codigo_Mensagem_Retorno_NFe = {0}", sCodigo_Mensagem_Retorno); sb.AppendFormat(" , Mensagem_retorno_NFe = {0}", sMensagem_Retorno); sb.Append(" , Retorno_Capturado = 1"); sb.AppendFormat("{0}", sProt); sb.AppendFormat(" where nota_fiscal_lote = {0}", daNFe.Cod_Nota_Fiscal_Lote); SQL.ExecuteNonQuery(sb.ToString()); //-- Marca a NF como exportada. if (bImprimiDanfe) { //-- Atualiza o número do protocolo de autenticação sb.Remove(0, sb.Length); sb.AppendLine("update notas_fiscais set "); sb.AppendFormat(" NFe_Protocolo = '{0}'\r\n", doc.GetElementsByTagName("nProt")[0].InnerText); sb.AppendFormat(" , NFe_Protocolo_Data = '{0}'\r\n", doc.GetElementsByTagName("dhRecbto")[0].InnerText.Replace("T", " ").Replace("-", "").Substring(0, 17)); sb.AppendFormat(" where Nota_Fiscal = {0}", daNFe.Nota_Fiscal); SQL.ExecuteNonQuery(sb.ToString()); //-- Salva Xml no Banco de dados. this.SalvaXML_DB(daNFe, true); } } else { string sCodigo_Mensagem_Retorno = doc.GetElementsByTagName("cStat")[0].InnerText; string sMensagem_Retorno = doc.GetElementsByTagName("xMotivo")[0].InnerText; if (!sCodigo_Mensagem_Retorno.Trim().Equals("999")) { sMensagem_Retorno = "NULL"; } else { sMensagem_Retorno = "'" + sMensagem_Retorno + "'"; } //-- Atualiza mensagens do lote da NF-e StringBuilder sb = new StringBuilder(); sb.Append("update notas_fiscais_lotes set "); sb.AppendFormat(" Codigo_Mensagem_Retorno_NFe = {0}", sCodigo_Mensagem_Retorno); sb.AppendFormat(" , Mensagem_retorno_NFe = {0}", sMensagem_Retorno); sb.Append(" , Retorno_Capturado = 1"); sb.AppendFormat(" where nota_fiscal_lote = {0}", daNFe.Cod_Nota_Fiscal_Lote); SQL.ExecuteNonQuery(sb.ToString()); } //-- Imprimi danfe. if (bImprimiDanfe) { //-- Faz a impressão do DANFE Impressao_Danfe imp_danfe; imp_danfe.Imprimir_Danfe(daNFe, false); //-- Envia a NF-e por e-mail Enviar_XML_Email envMail_NFe; envMail_NFe.Enviar_XML(daNFe); } }
/// <summary> /// Envia o arquivo XML por e-mail para o cliente. /// </summary> /// <param name="daNFe">Dados_Arquivo_NFe com informações para envio do XML</param> public void Enviar_XML(Dados_Arquivo_NFe daNFe) { StringBuilder sb = new StringBuilder(300); string sFileName = Path.Combine(Path.GetTempPath(), "NFe" + daNFe.Chave_Acesso + ".xml"); try { //-- Encontra o XML e salva em disco para envio. sb.AppendLine("SELECT NFe_DocumentoXML "); sb.AppendLine(" FROM notas_fiscais "); sb.AppendFormat(" WHERE Nota_Fiscal = {0}", daNFe.Nota_Fiscal); object oDocXML = CompSoft.Data.SQL.ExecuteScalar(sb.ToString()); StreamWriter sw = new StreamWriter(sFileName); sw.Write(oDocXML.ToString()); sw.Close(); sw.Dispose(); } catch { } //-- Encontra os dados para envio da NF-e (XML) por e-mail sb.Clear(); sb.AppendLine("select "); sb.AppendLine(" NFE_EnvioXML_Ativar_Recurso"); sb.AppendLine(" , NFE_EnvioXML_Servidor"); sb.AppendLine(" , NFE_EnvioXML_Servidor_Porta"); sb.AppendLine(" , NFE_EnvioXML_Servidor_Autenticacao"); sb.AppendLine(" , NFE_EnvioXML_EMail"); sb.AppendLine(" , NFE_EnvioXML_Usuario"); sb.AppendLine(" , NFE_EnvioXML_Senha"); sb.AppendLine(" , NFE_EnvioXML_Mensagem"); sb.AppendLine(" , Razao_Social"); sb.AppendLine(" from empresas "); sb.AppendLine(" where "); sb.AppendFormat(" empresa = {0}", daNFe.Empresa); DataTable dt = CompSoft.Data.SQL.Select(sb.ToString(), "x", false); foreach (DataRow row in dt.Select()) { //-- Se o recurso de envio de mensagem por e-mail estivar ativo. if ((bool)row["NFE_EnvioXML_Ativar_Recurso"]) { sb.Remove(0, sb.Length); sb.AppendLine("select cl.email as 'eMail_Cliente', t.email as 'eMail_Transp'"); sb.AppendLine(" from clientes cl"); sb.AppendLine(" inner join notas_fiscais nf on nf.cliente = cl.cliente"); sb.AppendLine(" inner join transportadoras t on t.transportadora = nf.transportadora"); sb.AppendFormat(" where nf.Nota_fiscal = {0}", daNFe.Nota_Fiscal); DataRow row_mail = SQL.Select(sb.ToString(), "x", false).Rows[0]; object oEMail_Cli = row_mail[0]; //-- EMail Cliente object oEMail_Tra = row_mail[1]; //-- EMail Transportadora //-- Verifica se o e-mail não é nulo ou em branco. if ((oEMail_Cli != DBNull.Value && !string.IsNullOrEmpty(oEMail_Cli.ToString())) || (oEMail_Tra != DBNull.Value && !string.IsNullOrEmpty(oEMail_Tra.ToString()))) { bool bContinuar = true; //-- Verifica se o e-mail á valido. Funcoes func; if (!func.Validar_EMail(oEMail_Cli.ToString().Trim().ToLower())) { oEMail_Cli = string.Empty; } if (!func.Validar_EMail(oEMail_Tra.ToString().Trim().ToLower())) { oEMail_Tra = string.Empty; } if (string.IsNullOrEmpty(oEMail_Cli.ToString()) && string.IsNullOrEmpty(oEMail_Tra.ToString())) { bContinuar = false; } //-- Continuar a enviar e-mail. if (bContinuar) { Email mail = new Email(); mail.Server = row["NFE_EnvioXML_Servidor"].ToString(); mail.Port = Convert.ToInt32(row["NFE_EnvioXML_Servidor_Porta"]); bool bRequer_Autenticacao = (bool)row["NFE_EnvioXML_Servidor_Autenticacao"]; if (bRequer_Autenticacao) { mail.Requer_Autenticacao = bRequer_Autenticacao; mail.Usuario = row["NFE_EnvioXML_Usuario"].ToString(); mail.Senha = row["NFE_EnvioXML_Senha"].ToString(); } if (!string.IsNullOrEmpty(oEMail_Cli.ToString())) { foreach (string sMail in oEMail_Cli.ToString().Trim().ToLower().Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) { if (!string.IsNullOrEmpty(sMail)) { mail.To.Add(sMail); } } } if (!string.IsNullOrEmpty(oEMail_Tra.ToString())) { mail.To.Add(oEMail_Tra.ToString()); } mail.From = new System.Net.Mail.MailAddress(row["NFE_EnvioXML_EMail"].ToString()); mail.Prioridade = System.Net.Mail.MailPriority.High; mail.Subject = string.Format("Envio de NF-e da {0}", row["Razao_social"].ToString()); mail.Body = row["NFE_EnvioXML_Mensagem"].ToString(); //-- Adiciona arquivos em anexo. List <string> ilFilesAttach = new List <string>(); ilFilesAttach.Add(sFileName); mail.Arquivo_Anexo = ilFilesAttach; //-- Envia e-mail. mail.SendMail(); } } } } }
public XmlDocument Cancelar_NFe(Dados_Arquivo_NFe daNFe) { NFe.Dados_DocumentosNFe doc = new Dados_DocumentosNFe(Tipos_Servicos.nfeRecepcaoEvento, daNFe.Estado_Emissor); nferecepcaoevento4.NFeRecepcaoEvento4 nfe = new nferecepcaoevento4.NFeRecepcaoEvento4(); //-- Busca a URL correta para trabalalho de acordo com o Estado e o nome do serviço nfe.Url = doc.Url_WebService; //-- Encontra o serial number do Certificado e adiciona ao web service. System.Security.Cryptography.X509Certificates.X509Certificate2 cert = Funcoes_NFe.Certificado_Digital(daNFe.Empresa); nfe.ClientCertificates.Add(cert); //nfeRecepcaoEvento.nfeCabecMsg cabecMsg = new nfeRecepcaoEvento.nfeCabecMsg(); //////-- Gera cabeçalho do cancelamento da NF-e ////NFeCancelamento2.nfeCabecMsg cabecMsg = new NFeCancelamento2.nfeCabecMsg(); //cabecMsg.cUF = daNFe.Codigo_Estado_Emissor.ToString(); //cabecMsg.versaoDados = doc.Versao_Dados; //nfe.nfeCabecMsgValue = cabecMsg; StringBuilder sb = new StringBuilder(5000); sb.Append("<envEvento xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.00\">"); sb.AppendFormat("<idLote>{0}</idLote>", daNFe.Numero_Lote); sb.Append("<evento xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.00\">"); sb.AppendFormat("<infEvento Id=\"ID110111{0}01\">", daNFe.Chave_Acesso); sb.Append("<cOrgao>35</cOrgao>"); sb.AppendFormat("<tpAmb>{0}</tpAmb>", Convert.ToInt32(daNFe.Ambiente)); sb.AppendFormat("<CNPJ>{0}</CNPJ>", daNFe.CNPJ); sb.AppendFormat("<chNFe>{0}</chNFe>", daNFe.Chave_Acesso); sb.AppendFormat("<dhEvento>{0:yyyy-MM-ddTHH:mm:sszzz}</dhEvento>", DateTime.Now); sb.Append("<tpEvento>110111</tpEvento>"); sb.Append("<nSeqEvento>1</nSeqEvento>"); sb.Append("<verEvento>1.00</verEvento>"); sb.Append("<detEvento versao=\"1.00\">"); sb.Append("<descEvento>Cancelamento</descEvento>"); sb.AppendFormat("<nProt>{0}</nProt>", daNFe.Numero_Autorizacao_Uso); sb.Append("<xJust>Compra cancelada pelo cliente</xJust>"); sb.Append("</detEvento>"); sb.Append("</infEvento>"); sb.Append("</evento>"); sb.Append("</envEvento>"); //-- Salva XML temporariamente em disco. string sFolder_temp = System.Windows.Forms.Application.StartupPath; if (!sFolder_temp.EndsWith(@"\")) { sFolder_temp += @"\"; } sFolder_temp += @"tmp\"; if (!System.IO.Directory.Exists(sFolder_temp)) { System.IO.Directory.CreateDirectory(sFolder_temp); } string sFile_tmp = sFolder_temp + daNFe.Chave_Acesso + "-canc.xml"; System.IO.StreamWriter sw = new System.IO.StreamWriter(sFile_tmp); sw.Write(sb.ToString()); sw.Close(); sw.Dispose(); //-- Assina arquivo para envio. AssinaXML assinar = new AssinaXML(); assinar.AssinarArquivoXML(sFile_tmp, "infEvento", cert.SerialNumber); //-- Limpa stringbuilder e carrega o arquivo assinado. System.IO.StreamReader sr = new System.IO.StreamReader(sFile_tmp); sb.Remove(0, sb.Length); sb.Append(sr.ReadToEnd()); //-- Adiciona o arquivo do inteiro no stringbuilder sr.Close(); sr.Dispose(); //-- apaga o arquivo criado. System.IO.Directory.Delete(sFolder_temp, true); //-- Verifica status do serviço XmlNode sRetornoXML = nfe.nfeRecepcaoEvento(Funcoes_NFe.StringXmlToXMLDocument(sb.ToString()).DocumentElement); XmlDocument xml = Funcoes_NFe.StringXmlToXMLDocument(sRetornoXML.OuterXml); return(xml); }