public void SalvarXMLCartaCorrecao() { WorkFlowServico _WorkFlowServico = new WorkFlowServico("NFESaidaCartaCorrecao"); _WorkFlowServico.AddEvento("INÍCIO PROCESSO"); NFEHelper nhp = new NFEHelper(); string XML = string.Empty; string ChaveNfe = string.Empty; int CdNotaFiscalSaida = 0; int CdNotaFiscalSaidaCC = 0; int StatusNfe = 0; int sequencial = 0; MemoryStream oMemoryStream; XmlDocument docProc; DataTable DTNfe = null; string chaveNFE = string.Empty; string CaminhoXMLautorizado = string.Empty; string CaminhoArquivoRetorno = string.Empty; string nomeArquivoProc = string.Empty; string nomeArquivo = string.Empty; string xmlAutorizado = string.Empty; try { if (multiplasfiliais.Equals("TRUE")) { DTNfe = nhp.CartaCorrecaoIntegracaoFilial(cdentifilial, datasource, schema); } else { DTNfe = nhp.CartaCorrecaoIntegracao(datasource, schema); } if (DTNfe.Rows.Count > 0) { _WorkFlowServico.AddEvento("QTDE NFS CC:" + DTNfe.Rows.Count.ToString()); foreach (DataRow dtrow in DTNfe.Rows) { XML = string.Empty; docProc = new XmlDocument(); CdNotaFiscalSaida = Convert.ToInt32(dtrow["CDNOTAFISCALSAIDA"]); CdNotaFiscalSaidaCC = Convert.ToInt32(dtrow["CDNOTAFISCALSAIDACC"]); StatusNfe = Convert.ToInt32(dtrow["CDSTATUS"]); sequencial = Convert.ToInt32(dtrow["SEQUENCIAL"]); _WorkFlowServico.AddEvento(string.Format("NFS CC: {0} STATUS:{1}", CdNotaFiscalSaida, StatusNfe)); /* * 0 Aguardando integração da NF-e * 1 NF-e Integrada * 2 Erro integração da NF-e * 400 Carta de correção autorizada pela SEFAZ * 402 Erro de integração de Carta de correção * 499 Carta de correção NAO autorizada pela SEFAZ * 401 Carta de correção integrada */ string dtEmissao = string.Empty; switch (StatusNfe) { #region Envio case 0: //ENVIO { XML = dtrow["XMLENVIO"].ToString(); _WorkFlowServico.AddEvento("CARREGAR XML DO BANCO"); if (string.IsNullOrEmpty(XML)) { throw new Exception("O XML NÃO FOI GERADO CD: " + CdNotaFiscalSaida.ToString()); } oMemoryStream = Util.StringXmlToStream(XML); //Validacao do XML Util ut = new Util(); //ut.ValidaXMLNFE(XML.Trim(), pastaSchema); if (string.IsNullOrEmpty(ut.MsgValidacaoXML)) { _WorkFlowServico.AddEvento("SALVAR XML NA PASTA"); docProc.Load(oMemoryStream); docProc.Save(string.Format("{0}\\{1}-env-cce.xml", DiretorioEnviar, dtrow["NRNFECHAVE"].ToString())); _WorkFlowServico.AddEvento("ATUALIZAR STATUS NA NFS CC: " + CdNotaFiscalSaidaCC.ToString()); //Atualiza o status da nfe para NF-e Integrada nhp.UpdateStatusCC(CdNotaFiscalSaidaCC, 1, 401, datasource, schema); _WorkFlowServico.AddEvento("NFS CC ATUALIZADA : " + CdNotaFiscalSaidaCC.ToString()); //log DE ENVIADO OK _WorkFlowServico.AddEvento("NFS CC ENVIADA PARA SEFAZ: " + CdNotaFiscalSaidaCC.ToString()); //LOG DOC-e detalhamento da NFE dtEmissao = DateTime.Now.ToString("dd/MM/yyyy"); nhp.InserirHistoricoItem(XML, "", "401", "Carta de correção integrada", CdNotaFiscalSaida.ToString(), datasourceDoce, schemaDoce); } else { nhp.UpdateStatusCC(CdNotaFiscalSaidaCC, 2, 402, datasource, schema); } break; } #endregion #region Retorno case 1: { //35130314364911000102550010000005031000178455_01-procEventoNFe string xmlAutorizacao = string.Empty; //string xmlAutorizacaoCompleto = string.Empty; // FileInfo fileAutorizacaoCompleto = null; Util.RetEnvEvento oDadosRetEnv = new Util.RetEnvEvento(); List <Util.RetEnvEvento> lstArqRetProc = new List <Util.RetEnvEvento>(); //System.IO.DirectoryInfo dirInfo = new DirectoryInfo(DiretorioRetorno); System.IO.DirectoryInfo dirInfoAuto = new DirectoryInfo(DiretorioAutorizados); //System.IO.FileInfo[] ArquivosRetornoEnvio = dirInfo.GetFiles("*-ret-env-cce.xml", SearchOption.AllDirectories); System.IO.FileInfo[] ArquivosRetornoAprovados = dirInfoAuto.EnumerateFiles("*-procEventoNFe.xml", SearchOption.AllDirectories).AsParallel().ToArray(); //Carregar a lista de arquivos de retorno foreach (FileInfo fi in ArquivosRetornoAprovados.ToList()) { _WorkFlowServico.AddEvento("LerArquivo " + fi.FullName); xmlAutorizacao = Util.LerArquivo(fi.FullName); //xmlAutorizacao = RJSOptimusUtil.RemoveCaracteresEspeciais(xmlAutorizacao, true, true); _WorkFlowServico.AddEvento("RetornoEvento " + xmlAutorizacao); oDadosRetEnv = Util.RetornoEvento(xmlAutorizacao, fi.Name, fi.FullName); lstArqRetProc.Add(oDadosRetEnv); } //Lista de rejeições //Processamento do Lote – o lote foi processado (cStat=128), a validação de cada evento do lote List <Util.RetEnvEvento> lstRej = (from z in lstArqRetProc where z.retEvento.chNfe == dtrow["NRNFECHAVE"].ToString() && z.retEvento.cStat != "128" select z).ToList(); //Arquivo com aprovação //Recebido pelo Sistema de Registro de Eventos, com vinculação do evento na NF-e, o //Evento será armazenado no repositório do Sistema de Registro de Eventos com a vinculação do Evento à respectiva NF-e (cStat=135); Util.RetEnvEvento drcAprov = (from z in lstArqRetProc where z.retEvento.chNfe == dtrow["NRNFECHAVE"].ToString() && z.retEvento.cStat == "135" && z.retEvento.nSeqEvento == sequencial select z).FirstOrDefault(); //Arquivo completo //fileAutorizacaoCompleto = (from a in ArquivosRetornoAprovados // where a.Name.Contains(dtrow["NRNFECHAVE"].ToString()) // select a).FirstOrDefault(); //Retorno aprovado pela sefaz if (drcAprov != null) { _WorkFlowServico.AddEvento(string.Format("Nota fiscal nº: {0} dt sefaz:{1}-{2}-{3} Encontrou o retorno.", CdNotaFiscalSaida, drcAprov.retEvento.dhRegEvento, drcAprov.retEvento.cStat, drcAprov.retEvento.xMotivo)); //Ler o conteudo do arquivo //xmlAutorizacao = Util.LerArquivo(string.Concat(DiretorioRetorno, "\\", nomeArquivoProc)); //xmlAutorizacao = Util.LerArquivo(drcAprov.CaminhoArquivo); //Caminho fisico do arquivo //CaminhoArquivoRetorno = drcAprov.CaminhoArquivo; //DateTime dtReciboNf = Convert.ToDateTime(drcAprov.retEvento.dhRegEvento, new CultureInfo("pt-BR")); //string DTYYYYMM_ = dtReciboNf.ToString("yyyyMM"); //if (fileAutorizacaoCompleto == null) //{ // _WorkFlowServico.AddEvento(string.Format("XML autorizado não encontrado {0}", fileAutorizacaoCompleto.FullName)); //} //else //{ _WorkFlowServico.AddEvento(string.Format("Status {0} da nota fiscal nº {1}", drcAprov.retEvento.cStat, CdNotaFiscalSaida)); //xmlAutorizacaoCompleto = Util.LerArquivo(fileAutorizacaoCompleto.FullName); nhp.CartaCorrecaoUpdate(CdNotaFiscalSaidaCC, 400, Convert.ToInt32(drcAprov.retEvento.cStat), drcAprov.XMLaprovado, datasource, schema); nhp.InserirHistoricoItem(drcAprov.XMLaprovado, drcAprov.retEvento.nProt, drcAprov.retEvento.cStat, drcAprov.retEvento.xMotivo, CdNotaFiscalSaida.ToString(), datasourceDoce, schemaDoce); //} } else //não encontrou o autorizado { Log.For(this, PastaLogCliente).Info("NAO ENCONTROU RETORNO CCE : " + CdNotaFiscalSaida); if (lstRej.Count > 0) { //grava todos outros status foreach (Util.RetEnvEvento item in lstRej) { string xmlErro = Util.LerArquivo(item.CaminhoArquivo); nhp.CartaCorrecaoUpdate(CdNotaFiscalSaidaCC, 499, Convert.ToInt32(item.retEvento.cStat), xmlErro, datasource, schema); nhp.InserirHistoricoItem(xmlErro, item.retEvento.nProt, item.retEvento.cStat, item.retEvento.xMotivo, CdNotaFiscalSaida.ToString(), datasourceDoce, schemaDoce); ////mover o arquivo para pasta de erros //System.IO.File.Delete(item.CaminhoArquivo); System.IO.File.Move(item.CaminhoArquivo, DiretorioErro + "\\" + item.NomeArquivo); } } } break; } #endregion default: { //TODO: LOG throw new Exception("Status não configurado " + StatusNfe.ToString()); } } } _WorkFlowServico.AddEvento("FIM EXECUÇÃO"); } } catch (Exception ex) { try { Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow() + Environment.NewLine + ex.ToString()); objemailadm.SUBJECT = "ERRO NFE CC-E" + cnpjEmpresa.ToString() + " SCHEMA:" + schema; objemailadm.BODY = ex.ToString(); Util.EnviaEmail(objemailadm, "*****@*****.**"); } catch (Exception exs) { RJS.Optimus.Biblioteca.RJSOptimusLog.GravaLogEventViewer("RJS.Optimus.Win.Int.Servicos.NFEOptimus", string.Concat(_WorkFlowServico.FinishWorkFlow(), Environment.NewLine, exs.ToString()), System.Diagnostics.EventLogEntryType.Error); } } }
public void SalvarXMLInutilizacao() { WorkFlowServico _WorkFlowServico = new WorkFlowServico("NFEInutilizacao"); _WorkFlowServico.AddEvento("INÍCIO PROCESSO"); NFEHelper nhp = new NFEHelper(); string XML = string.Empty; int CDNOTAFISCALINUTNUMERACAO = 0; int StatusNfe = 0; MemoryStream oMemoryStream; XmlDocument docProc; DataTable DTNfe = null; string CaminhoXMLautorizado = string.Empty; string CaminhoArquivoRetorno = string.Empty; string nomeArquivoProc = string.Empty; string nomeArquivo = string.Empty; string xmlAutorizado = string.Empty; string IDINUTILIZACAO = string.Empty; FileInfo fileAutorizacaoCompleto = null; try { if (multiplasfiliais.Equals("TRUE")) { DTNfe = nhp.InutilizacaoIntegracaoFilial(cdentifilial, datasource, schema); } else { DTNfe = nhp.InutilizacaoIntegracao(datasource, schema); } if (DTNfe.Rows.Count > 0) { _WorkFlowServico.AddEvento("QTDE INUTILIZACAO:" + DTNfe.Rows.Count.ToString()); foreach (DataRow dtrow in DTNfe.Rows) { XML = string.Empty; docProc = new XmlDocument(); CDNOTAFISCALINUTNUMERACAO = Convert.ToInt32(dtrow["CDNOTAFISCALINUTNUMERACAO"]); IDINUTILIZACAO = dtrow["IDINUTILIZACAO"].ToString(); StatusNfe = Convert.ToInt32(dtrow["CDSTATUS"]); _WorkFlowServico.AddEvento(string.Format("NFS INUTI: {0} STATUS:{1}", CDNOTAFISCALINUTNUMERACAO, StatusNfe)); /* * 0 Aguardando integração da NF-e * 1 NF-e Integrada * 2 Erro integração da NF-e * 400 Carta de correção autorizada pela SEFAZ * 402 Erro de integração de Carta de correção * 499 Carta de correção NAO autorizada pela SEFAZ * 401 Carta de correção integrada */ string dtEmissao = string.Empty; switch (StatusNfe) { #region Envio case 0: //ENVIO { XML = dtrow["XMLENVIO"].ToString(); _WorkFlowServico.AddEvento("CARREGAR XML DO BANCO"); if (string.IsNullOrEmpty(XML)) { throw new Exception("O XML NÃO FOI GERADO CD: " + CDNOTAFISCALINUTNUMERACAO.ToString()); } oMemoryStream = Util.StringXmlToStream(XML); _WorkFlowServico.AddEvento("SALVAR XML NA PASTA"); docProc.Load(oMemoryStream); /* * 35151234567890123455001000000001000000001-ped-inu.xml */ string IdInuti = Util.PegarIDInutilizacao(XML); docProc.Save(string.Format("{0}\\{1}-ped-inu.xml", DiretorioEnviar, IdInuti)); _WorkFlowServico.AddEvento("ATUALIZAR STATUS NA NFS INUTI: " + CDNOTAFISCALINUTNUMERACAO.ToString()); //Atualiza o status da nfe para NF-e Integrada nhp.UpdateStatusInutilizacao(CDNOTAFISCALINUTNUMERACAO, 1, 0, datasource, schema); _WorkFlowServico.AddEvento("NFS INUTI ATUALIZADA : " + CDNOTAFISCALINUTNUMERACAO.ToString()); //log DE ENVIADO OK _WorkFlowServico.AddEvento("NFS INUTI ENVIADA PARA SEFAZ: " + CDNOTAFISCALINUTNUMERACAO.ToString()); //LOG DOC-e detalhamento da NFE //dtEmissao = DateTime.Now.ToString("dd/MM/yyyy"); //Log.For(this, PastaLogCliente).Info(_WorkFlowServico.FinishWorkFlow()); //nhp.InserirHistoricoItem(XML, // "", // "401", // "Inutilização integrada", // CDNOTAFISCALINUTNUMERACAO.ToString(), datasourceDoce, schemaDoce); break; } #endregion #region Retorno case 1: { //35151436491100010255001000011112000011119-inu.xml /* * <retInutNFe versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe"> * <infInut> * <tpAmb>1</tpAmb> * <verAplic>SP_NFE_PL_006q</verAplic> * <cStat>102</cStat> * <xMotivo>Inutilização de número homologado</xMotivo> * <cUF>35</cUF> * <ano>15</ano> * <CNPJ>14364911000102</CNPJ> * <mod>55</mod> * <serie>1</serie> * <nNFIni>11110</nNFIni> * <nNFFin>11110</nNFFin> * <dhRecbto>2015-01-30T12:02:14</dhRecbto> * <nProt>135150063643955</nProt> * </infInut> * </retInutNFe> */ IDINUTILIZACAO = IDINUTILIZACAO.Substring(2, IDINUTILIZACAO.Length - 2); string xmlAutorizacao = string.Empty; string xmlAutorizacaoCompleto = string.Empty; //FileInfo fileAutorizacaoCompleto = null; Util.RetInutilizacao oDadosRetInuti = new Util.RetInutilizacao(); List <Util.RetInutilizacao> lstArqRetInut = new List <Util.RetInutilizacao>(); System.IO.DirectoryInfo dirInfo = new DirectoryInfo(DiretorioRetorno); System.IO.FileInfo[] ArquivosRetornoEnvio = dirInfo.EnumerateFiles("*-inu.xml", SearchOption.AllDirectories).AsParallel().ToArray(); //Carregar a lista de arquivos de retorno foreach (FileInfo fi in ArquivosRetornoEnvio.ToList()) { xmlAutorizacao = Util.LerArquivo(fi.FullName); oDadosRetInuti = Util.PegarRetornoInutilizacao(xmlAutorizacao, fi.Name); oDadosRetInuti.CaminhoArquivo = fi.FullName; oDadosRetInuti.NomeArquivo = fi.Name; lstArqRetInut.Add(oDadosRetInuti); } //Lista de rejeições //Processamento do Lote – o lote foi processado (cStat=128), a validação de cada evento do lote List <Util.RetInutilizacao> lstRej = (from z in lstArqRetInut where z.IdInutilizacao == IDINUTILIZACAO && z.cStat != "102" select z).ToList(); //Arquivo com aprovação //Recebido pelo Sistema de Registro de Eventos, com vinculação do evento na NF-e, o //Evento será armazenado no repositório do Sistema de Registro de Eventos com a vinculação do Evento à respectiva NF-e (cStat=135); Util.RetInutilizacao drcAprov = (from z in lstArqRetInut where z.IdInutilizacao == IDINUTILIZACAO && z.cStat == "102" select z).FirstOrDefault(); //Arquivo completo fileAutorizacaoCompleto = (from a in ArquivosRetornoEnvio where a.Name.Contains(IDINUTILIZACAO) select a).FirstOrDefault(); //Retorno aprovado pela sefaz if (drcAprov != null) { _WorkFlowServico.AddEvento(string.Format("Inutlizacao nº: {0} dt sefaz:{1}-{2}-{3} Encontrou o retorno.", CDNOTAFISCALINUTNUMERACAO, drcAprov.dhRecbto.ToString("dd/mM/yyyy hh:mm:ss"), drcAprov.cStat, drcAprov.xMotivo)); //Ler o conteudo do arquivo //xmlAutorizacao = Util.LerArquivo(string.Concat(DiretorioRetorno, "\\", nomeArquivoProc)); xmlAutorizacao = Util.LerArquivo(drcAprov.CaminhoArquivo); //Caminho fisico do arquivo CaminhoArquivoRetorno = drcAprov.CaminhoArquivo; RJS.Optimus.Win.Int.Servicos.NFEOptimus.Classes.Util.RetInutilizacao ret = Util.PegarRetornoInutilizacao(xmlAutorizacao, drcAprov.NomeArquivo); //DateTime dtReciboNf = Convert.ToDateTime(drcAprov.retEvento.dhRegEvento, new CultureInfo("pt-BR")); //string DTYYYYMM_ = dtReciboNf.ToString("yyyyMM"); if (fileAutorizacaoCompleto == null) { _WorkFlowServico.AddEvento(string.Format("XML autorizado não encontrado {0}", fileAutorizacaoCompleto.FullName)); } else { _WorkFlowServico.AddEvento(string.Format("Status {0} da nota fiscal nº {1}", drcAprov.cStat, CDNOTAFISCALINUTNUMERACAO)); xmlAutorizacaoCompleto = Util.LerArquivo(fileAutorizacaoCompleto.FullName); nhp.InutilizacaoUpdate(CDNOTAFISCALINUTNUMERACAO, 100, Convert.ToInt32(drcAprov.cStat), xmlAutorizacaoCompleto, datasource, schema); //nhp.InserirHistoricoItem(xmlAutorizacaoCompleto, drcAprov.nProt, drcAprov.cStat, drcAprov.xMotivo, //CDNOTAFISCALINUTNUMERACAO.ToString(), datasourceDoce, schemaDoce); } } else //não encontrou o autorizado { if (lstRej.Count > 0) { //grava todos outros status foreach (Util.RetInutilizacao item in lstRej) { string xmlErro = Util.LerArquivo(item.CaminhoArquivo); nhp.InutilizacaoUpdate(CDNOTAFISCALINUTNUMERACAO, 99, Convert.ToInt32(item.cStat), xmlErro, datasource, schema); //nhp.InserirHistoricoItem(xmlErro, item.nProt, item.cStat, item.xMotivo, CDNOTAFISCALINUTNUMERACAO.ToString(), datasourceDoce, schemaDoce); ////mover o arquivo para pasta de erros //System.IO.File.Delete(item.CaminhoArquivo); System.IO.File.Move(item.CaminhoArquivo, DiretorioErro + "\\" + item.NomeArquivo + DateTime.Now.ToString()); } } } break; } #endregion default: { //TODO: LOG throw new Exception("Status não configurado " + StatusNfe.ToString()); } } } _WorkFlowServico.AddEvento("FIM EXECUÇÃO"); Log.For(this, PastaLogCliente).Info(_WorkFlowServico.FinishWorkFlow()); } } catch (Exception ex) { try { Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow() + Environment.NewLine + ex.ToString()); objemailadm.SUBJECT = "ERRO NFE INUTILIZACAO " + cnpjEmpresa.ToString() + " SCHEMA:" + schema; objemailadm.BODY = ex.ToString(); Util.EnviaEmail(objemailadm, "*****@*****.**"); } catch (Exception exs) { RJS.Optimus.Biblioteca.RJSOptimusLog.GravaLogEventViewer("RJS.Optimus.Win.Int.Servicos.NFEOptimus", string.Concat(_WorkFlowServico.FinishWorkFlow(), Environment.NewLine, exs.ToString()), System.Diagnostics.EventLogEntryType.Error); } } }
public void EnviarEmailCliente() { WorkFlowServico _WorkFlowServico = new WorkFlowServico("NFESaidaMail"); _WorkFlowServico.AddEvento("INÍCIO PROCESSO"); NFEHelper nfh = new NFEHelper(); DataTable dt = null; try { //Verificar se a Internet está ativa if (RJS.Optimus.Biblioteca.RJSOptimusNetwork.IsConnected()) { _WorkFlowServico.AddEvento("INÍCIO nfh.NotasFiscaisEnviarEmail()"); if (multiplasfiliais.Equals("TRUE")) { dt = nfh.NotaFiscalEnviarEmailFilial(cdentifilial, datasource, schema); } else { dt = nfh.NotaFiscalEnviarEmail(datasource, schema); } _WorkFlowServico.AddEvento("FIM nfh.NotasFiscaisEnviarEmail()"); string xml = string.Empty; string emailCliente = string.Empty; string pasta = string.Empty; string chaveNfe = string.Empty; string TxFileNfe = string.Empty; string TxFileNfeAut = string.Empty; int CdNotaFiscalSaida = 0; foreach (DataRow dtr in dt.Rows) { //DADOS emailCliente = dtr["TXEMAIL"].ToString(); CdNotaFiscalSaida = Convert.ToInt32(dtr["CDNOTAFISCALSAIDA"]); pasta = dtr["CDENTIFILIAL"].ToString(); chaveNfe = dtr["NRNFECHAVE"].ToString(); TxFileNfe = dtr["TXFILENFE"].ToString(); TxFileNfeAut = dtr["TXFILENFEAUT"].ToString(); //não enviar para a lista de dominios informado //mktp.extra.com.br if (EnviarParaDominio(emailCliente)) { #region Gravar o arquivo na pasta para o PHP Ler _WorkFlowServico.AddEvento("NRNOTA: " + CdNotaFiscalSaida.ToString() + " CHAVE NFE: " + chaveNfe); string NomeDoArquivo = string.Format("{0}\\{1}\\{2}.xml", PastaNfePHP, pasta, chaveNfe); _WorkFlowServico.AddEvento("NomeDoArquivo: " + NomeDoArquivo); string NomeDoArquivoPdf = string.Format("{0}\\{1}\\{2}.pdf", PastaNfePHP, pasta, chaveNfe); _WorkFlowServico.AddEvento("NomeDoArquivoPdf: " + NomeDoArquivoPdf); //Verifica se o arquivo existe if (!System.IO.File.Exists(NomeDoArquivo)) { //Montar o XML StringBuilder XML_NFE = new StringBuilder(); XML_NFE.AppendLine(TxFileNfe); _WorkFlowServico.AddEvento("PASTA: " + string.Concat(PastaNfePHP, "\\", pasta)); //Se não existe o diretorio cria um novo if (!System.IO.Directory.Exists(string.Concat(PastaNfePHP, "\\", pasta))) { System.IO.Directory.CreateDirectory(string.Concat(PastaNfePHP, "\\", pasta)); } //Se existe exclui o arquivo if (System.IO.File.Exists(NomeDoArquivo)) { System.IO.File.Delete(NomeDoArquivo); } _WorkFlowServico.AddEvento("INÍCIO GRAVAÇÃO DO ARQUIVO"); _WorkFlowServico.AddEvento("ARQUIVO: " + NomeDoArquivo); StreamWriter sw = new StreamWriter(NomeDoArquivo, false, Encoding.GetEncoding(1252)); sw.Write(XML_NFE); sw.Close(); _WorkFlowServico.AddEvento("FIM GRAVAÇÃO DO ARQUIVO"); } //CARREGAR O XML PARA PEGAR OS DADOS NFE _NFEtrocar = Util.CarregarNfe(NomeDoArquivo); _WorkFlowServico.AddEvento("CARREGA O XML PARA PERGAR OS DADOS:" + NomeDoArquivo); #endregion _WorkFlowServico.AddEvento("INÍCIO DOWNLOAD DO PDF"); #region download do pdf bool pdfOK = false; int i = 0; for (i = 1; i < 5; i++) { if (!pdfOK) { _WorkFlowServico.AddEvento("TENTATIVA Nº:" + i.ToString()); //Log.For(this, PastaLogCliente).Info("TENTATIVA Nº:" + i.ToString()); //gerar o PDF e gravar o PDF if (i == 1) { _WorkFlowServico.AddEvento("URL: " + string.Format(urlDanfe, pasta, chaveNfe, schema)); _WorkFlowServico.AddEvento("ARQUIVO: " + NomeDoArquivoPdf); //Log.For(this, PastaLogCliente).Info("PDF URL: " + string.Format(urlDanfe, pasta, chaveNfe, cliente)); //Log.For(this, PastaLogCliente).Info("ARQUIVO: " + NomeDoArquivoPdf); } if (!System.IO.File.Exists(NomeDoArquivoPdf))//se nao existe faz o download { try { Util.DownloadFile(string.Format(urlDanfe, pasta, chaveNfe, schema), NomeDoArquivoPdf); _WorkFlowServico.AddEvento("BAIXOU NA TENTATIVA:" + i.ToString()); } catch (Exception exw) { Util.DownloadFile(string.Format(urlDanfe, pasta, chaveNfe, schema), NomeDoArquivoPdf); if (!System.IO.File.Exists(NomeDoArquivoPdf)) { _WorkFlowServico.AddEvento("NAO BAIXOU NA EXECEPTION :" + exw.ToString()); } else { _WorkFlowServico.AddEvento("BAIXOU NA EXECEPTION :" + exw.ToString()); } } if (!System.IO.File.Exists(NomeDoArquivoPdf)) { _WorkFlowServico.AddEvento("NAO CONSEGUIU BAIXAR:" + NomeDoArquivoPdf); } else { _WorkFlowServico.AddEvento("FIM DOWNLOAD DO PDF TENTATIVA Nº:" + i.ToString()); FileInfo fi = new FileInfo(NomeDoArquivoPdf); if (fi.Length < 6144)// menor que 6kb { if (System.IO.File.Exists(NomeDoArquivoPdf)) { System.IO.File.Delete(NomeDoArquivoPdf); } Util.DownloadFile(string.Format(urlDanfe, pasta, chaveNfe, schema), NomeDoArquivoPdf); } else { pdfOK = true; } } } } } #endregion RJSOptimusEmail email = new RJSOptimusEmail(smtp, Convert.ToInt32(porta), usuario, senha, EnableSSL); FileInfo fiPdf = new FileInfo(NomeDoArquivoPdf); #region Envio do email if (fiPdf.Length < 6144) { _WorkFlowServico.AddEvento("ERRO GERAR PDF (TAMANHO):" + NomeDoArquivoPdf); Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow()); objemailadm.SUBJECT = string.Format("ERRO GERAR PDF (TAMANHO) {0} Cnpj:{1} SCHEMA{2}:.", cliente, cnpjcliente, schema); objemailadm.BODY = fiPdf.FullName; Util.EnviaEmail(objemailadm, "*****@*****.**"); } else { //Enviar o e-mail _WorkFlowServico.AddEvento("INÍCIO ENVIO E-MAIL"); if (smtp.Trim() == "smtp.optimuserp.com.br") { email.From = "*****@*****.**"; } else { email.From = emailEmpresa; } email.From = emailEmpresa; bool EmailClienteValido = true; email.Subject = MsgSubject.Replace("#NRNOTA#", _NFEtrocar.IDE_NNF.ToString()). Replace("#CHAVE#", _NFEtrocar.IDE_ID). Replace("#DTEMISSAO#", _NFEtrocar.IDE_DEMI.ToString("dd/MM/yyyy")). Replace("#SERIE#", _NFEtrocar.IDE_SERIE). Replace("#RAZAO#", _NFEtrocar.RAZAOSOCIAL). Replace("#CODPEDIDO#", _NFEtrocar.CODPEDIDO). Replace("#NMCLIENTE#", _NFEtrocar.DEST_NOME);; //if (Util.ValidarEmail(emailCliente)) //{ email.To = emailCliente; string BodyTemplate = MsgPattern.ToString(); //Pegar do template //se vier o nome do arquivo carrega se nao pega o texto que veio normal if (BodyTemplate.Contains(".html")) { string pastaTemplate = ConfigurationManager.AppSettings.Get("PASTA_TEMPLATE_HTML").ToString(); string Body = System.IO.File.ReadAllText(pastaTemplate + BodyTemplate); BodyTemplate = Body; } BodyTemplate = BodyTemplate.Replace("#CNPJ#", Convert.ToUInt64(_NFEtrocar.EMIT_CNPJ).ToString(@"00\.000\.000\/0000\-00")); BodyTemplate = BodyTemplate.Replace("#NRNOTA#", _NFEtrocar.IDE_NNF.ToString()). Replace("#CHAVE#", _NFEtrocar.IDE_ID). Replace("#DTEMISSAO#", _NFEtrocar.IDE_DEMI.ToString("dd/MM/yyyy")). Replace("#SERIE#", _NFEtrocar.IDE_SERIE). Replace("#RAZAO#", _NFEtrocar.RAZAOSOCIAL). Replace("#CODPEDIDO#", _NFEtrocar.CODPEDIDO). Replace("#NMCLIENTE#", _NFEtrocar.DEST_NOME); email.Body = BodyTemplate; _NFEtrocar = null; try { if (!string.IsNullOrEmpty(emailAdmin)) { email.ListaEmailsBCC.Add(emailAdmin); } if (!string.IsNullOrEmpty(enviarCopiaCliente) && EmailClienteValido) { string[] emailscliente = enviarCopiaCliente.Split(';'); foreach (string emailcli in emailscliente) { email.ListaEmailsBCC.Add(emailcli); } } email.AddAnexo(new System.Net.Mail.Attachment(NomeDoArquivo)); //XML email.AddAnexo(new System.Net.Mail.Attachment(NomeDoArquivoPdf)); //PDF email.IsBodyHtml = true; email.Enviar(); //Atualiza o status da NFE como e-mail enviado nfh.NotaFiscalUpdateEmailEnviado(CdNotaFiscalSaida, 3, datasource, schema);//ele tentar enviar 2x #region Enviar e-mail para transportador if (EnviarEmailTransportador) { _WorkFlowServico.AddEvento("INÍCIO ENVIO E-MAIL TRANSPORTADOR"); List <string> EmailsTransportador = new List <string>(); //Carrega o xml e pega o CNPJ do transportador string _CNPJ = Util.PegarCNPJTransportador(NomeDoArquivo); if (!string.IsNullOrEmpty(_CNPJ)) { //Verifica se ja esta na base antes de buscar o transportador if (CacheLayer.Exists(_CNPJ)) { EmailsTransportador = CacheLayer.Get <List <string> >(_CNPJ); _WorkFlowServico.AddEvento("ACHOU NO CACHE"); } else { NFEHelper nh = new NFEHelper(); //Busca na base os e-mail do transportador EmailsTransportador = nh.RetornaEmailTransportadora(_CNPJ, datasource, schema); if (EmailsTransportador.Count > 0) { CacheLayer.Add(EmailsTransportador, _CNPJ); _WorkFlowServico.AddEvento("ACHOU OS EMAILS : " + EmailsTransportador.Count.ToString()); } } if (EmailsTransportador.Count > 0) { try { RJSOptimusEmail emailtransp = new RJSOptimusEmail(smtp, Convert.ToInt32(porta), usuario, senha, EnableSSL); if (!string.IsNullOrEmpty(emailAdmin)) { emailtransp.ListaEmailsBCC.Add(emailAdmin); } if (smtp.Trim() == "smtp.optimuserp.com.br") { emailtransp.From = "*****@*****.**"; } else { emailtransp.From = emailEmpresa; } emailtransp.Subject = MsgSubject; emailtransp.Body = "Nota fiscal eletronica"; //TODO lista de e-mails foreach (string emailtranspenviar in EmailsTransportador) { //emailtransp.ListaEmailsBCC.Add(emailtranspenviar); _WorkFlowServico.AddEvento("EMAIL: " + emailtranspenviar); emailtransp.ListaEmailsObj.Add(new System.Net.Mail.MailAddress(emailtranspenviar)); } emailtransp.AddAnexo(new System.Net.Mail.Attachment(NomeDoArquivo));//XML emailtransp.IsBodyHtml = true; emailtransp.Enviar(); _WorkFlowServico.AddEvento("FIM ENVIO E-MAIL TRANSPORTADOR"); } catch (Exception ext) { _WorkFlowServico.AddEvento("ERRO ENVIO E-MAIL TRANSP:" + ext.ToString()); } } else { _WorkFlowServico.AddEvento("NÃO RETORNOU E-MAIL TRANSP CNPJ: " + _CNPJ); } } else { _WorkFlowServico.AddEvento("NÃO ACHOU TRANSP " + NomeDoArquivo); } } #endregion _WorkFlowServico.AddEvento("FIM ENVIO E-MAIL "); Log.For(this, PastaLogCliente).Info(_WorkFlowServico.FinishWorkFlow()); } catch (Exception exx) { nfh.NotaFiscalUpdateEmailEnviado(CdNotaFiscalSaida, datasource, schema); try { Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow() + Environment.NewLine + exx.ToString()); string chavecache = Cache[CdNotaFiscalSaida.ToString()] as string; if (string.IsNullOrEmpty(chavecache)) { Cache.Insert( CdNotaFiscalSaida.ToString(), CdNotaFiscalSaida.ToString(), null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(900)); objemailadm.SUBJECT = string.Format("ERRO ENVIAR E-MAIL CLIENTE: {0} Cnpj: {1} E-MAIL CLIENTE: {2} CDNOTAFISCALSAIDA: {3} SCHEMA: {4}.", cliente, cnpjcliente, emailCliente, CdNotaFiscalSaida, schema); objemailadm.BODY = exx.ToString(); Util.EnviaEmail(objemailadm, "*****@*****.**"); } } catch (Exception exxx) { Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow() + Environment.NewLine + exxx.ToString()); } } } #endregion } else { nfh.NotaFiscalUpdateEmailEnviado(CdNotaFiscalSaida, 3, datasource, schema); }//fim tratamento do dominio } } else { //Internet fora do ar _WorkFlowServico.AddEvento("SEM CONEXÃO COM A INTERNET"); Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow()); } } catch (Exception ex) { try { Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow() + Environment.NewLine + ex.ToString()); objemailadm.SUBJECT = string.Format("ERRO CATCH GERAL ENVIAR E-MAIL. CLIENTE: {0} Cnpj: {1}.", cliente, cnpjcliente); objemailadm.BODY = _WorkFlowServico.FinishWorkFlow() + Environment.NewLine + ex.ToString(); Util.EnviaEmail(objemailadm, "*****@*****.**"); } catch (Exception exs) { RJS.Optimus.Biblioteca.RJSOptimusLog.GravaLogEventViewer("RJS.Optimus.Win.Int.Servicos.NFEOptimus", string.Concat(_WorkFlowServico.FinishWorkFlow(), Environment.NewLine, exs.ToString()), System.Diagnostics.EventLogEntryType.Error); } } }
public void ProcessarRetornoSefazManual(string DiretorioEnviar, string PastaLogCliente, ObjEmail _objemailadm, string datasource, string schema, string pastaLogWs, string cdentifilial, string cnpjCliente) { PastaLogCliente = string.Format(@"{0}\{1}_{2}_{3}", pastaLogWs, schema, cdentifilial, cnpjCliente); DiretorioEnviar = DiretorioEnviar + "\\naoprocessadossefaz"; if (!System.IO.Directory.Exists(DiretorioEnviar)) { System.IO.Directory.CreateDirectory(DiretorioEnviar); System.IO.Directory.CreateDirectory(DiretorioEnviar + "\\" + "Processado"); } System.IO.DirectoryInfo dirInfo = new DirectoryInfo(DiretorioEnviar); System.IO.FileInfo[] ArquivosRetorno = dirInfo.EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly).AsParallel().ToArray(); ObjEmail objemailadm = _objemailadm; string xmlAutorizacao = string.Empty; Util.DadosRecClass oDadosRec = new Util.DadosRecClass(); List <Util.DadosRecClass> lstArqRetProc = new List <Util.DadosRecClass>(); try { foreach (FileInfo fi in ArquivosRetorno.ToList()) { xmlAutorizacao = Util.LerArquivo(fi.FullName); xmlAutorizacao = xmlAutorizacao.Replace("\r", "").Replace("\n", ""); oDadosRec = Util.ReciboProtNFe(xmlAutorizacao, fi.FullName, fi.Name); lstArqRetProc.Add(oDadosRec); } if (lstArqRetProc.Count > 0) { Log.For(this, PastaLogCliente).Info("INICIO----------------------------------------------------------------------------"); Log.For(this, PastaLogCliente).Info("XML NAO RETORNADOS PELA SEFAZ"); Log.For(this, PastaLogCliente).Info(lstArqRetProc.Count.ToString() + "ARQUIVOS ENCONTRADOS"); NFEHelper nh = new NFEHelper(); foreach (var item in lstArqRetProc) { //atualiza no banco pela chave Log.For(this, PastaLogCliente).Info("CHAVE:" + item.chNFe + "SCHEMA:" + schema); nh.NotaFiscalAtualizarNaoProcessada(item.chNFe, item.xmlCompleto, item.xmlAutorizado, Convert.ToDateTime(item.dhRecbto), item.nProt, item.xMotivo, datasource, schema); System.IO.File.Move(item.CaminhoArquivo, DiretorioEnviar + "\\" + "Processado" + "\\" + item.NomeArquivo + DateTime.Now.ToString("ddMMyyyyhhmmss")); } Log.For(this, PastaLogCliente).Info("FIM----------------------------------------------------------------------------"); } } catch (Exception ex) { Log.For(this, PastaLogCliente).Error("XML NAO RETORNADOS PELA SEFAZ - ERRO : "); Log.For(this, PastaLogCliente).Error(ex.ToString()); Log.For(this, PastaLogCliente).Error("FIM ERRO XML NAO RETORNADOS PELA SEFAZ"); objemailadm.SUBJECT = "Erro carregar xml não processado schema:" + schema; objemailadm.BODY = ex.ToString(); Util.EnviaEmail(objemailadm, "*****@*****.**"); } }
/// <summary> /// Salva o xml na pasta do UNINFE para envio para a sefaz. /// </summary> public void SalvarXMLIntegracaoUNINFE() { WorkFlowServico _WorkFlowServico = new WorkFlowServico("NFESaidaSend"); _WorkFlowServico.AddEvento("INÍCIO PROCESSO"); NFEHelper nhp = new NFEHelper(); string XML = string.Empty; string ChaveNfe = string.Empty; int CdNotaFiscalSaida = 0; int StatusNfe = 0; MemoryStream oMemoryStream; XmlDocument docProc; string TPEMISSAO = string.Empty; DataTable DTNfe = null; try { if (!System.IO.Directory.Exists(DiretorioEnviar)) { throw new Exception(string.Format("O diretório {0} não existe.", DiretorioEnviar)); } if (multiplasfiliais.Equals("TRUE")) { DTNfe = nhp.NotaFiscalIntegracaoFilial(cdentifilial, datasource, schema); } else { DTNfe = nhp.NotaFiscalIntegracao(datasource, schema); } if (DTNfe.Rows.Count > 0) { _WorkFlowServico.AddEvento("QTDE NFS:" + DTNfe.Rows.Count.ToString()); foreach (DataRow dtrow in DTNfe.Rows) { XML = string.Empty; ChaveNfe = string.Empty; docProc = new XmlDocument(); CdNotaFiscalSaida = Convert.ToInt32(dtrow["CDNOTAFISCALSAIDA"]); StatusNfe = Convert.ToInt32(dtrow["CDNFESTATUS"]); /* * Forma de emissão da NF-e * 1 - Normal; * 2 - Contingência FS * 3 - Contingência SCAN * 4 - Contingência DPEC * 5 - Contingência FSDA * 6 - Contingência SVC - AN * 7 - Contingência SVC - RS * 9 - Contingência off-line NFC-e */ TPEMISSAO = dtrow["CDTIPOEMISSAONFE"].ToString(); if (string.IsNullOrEmpty(TPEMISSAO)) { throw new Exception("Informe o CDTIPOEMISSAONFE na tabela de filial 1- normal acima de 2 olhar a contingencia do estado"); } if (TPEMISSAO != "1") { _WorkFlowServico.AddEvento(string.Format("#CONTINGENCIA #NFS: {0} STATUS:{1} TIPO EMISSAO{2}", CdNotaFiscalSaida, StatusNfe, TPEMISSAO)); } _WorkFlowServico.AddEvento(string.Format("NFS: {0} STATUS:{1}", CdNotaFiscalSaida, StatusNfe)); /* * 0 Aguardando integração da NF-e * 1 NF-e Integrada com * 2 Erro integração da NF-e * 100 Autorizado uso da NF-e pela SEFAZ * 200 Aguardando integração de Cancelamento * 201 Cancelamento Integrado * 202 Erro de Cancelamento Integrado * 300 Cancelamento autorizado pela SEFAZ * 299 Cancelamento NAO autorizado pela SEFAZ * 99 NF-e Não Autorizada pela SEFAZ */ string dtEmissao = string.Empty; string NovaChaveDPEC = string.Empty; switch (StatusNfe) { case 0: //ENVIO { XML = dtrow["TXNDDLAYOUT"].ToString(); _WorkFlowServico.AddEvento("CARREGAR XML DO BANCO"); if (string.IsNullOrEmpty(XML)) { objemailadm.SUBJECT = "O XML NÃO FOI GERADO CDNOTAFISCALSAIDA: " + CdNotaFiscalSaida.ToString() + " SCHEMA:" + schema; objemailadm.BODY = "O XML NÃO FOI GERADO CDNOTAFISCALSAIDA: " + CdNotaFiscalSaida.ToString() + " SCHEMA:" + schema; Util.EnviaEmail(objemailadm, "*****@*****.**"); } else { //alterar o xml para envio em contingencia if (TPEMISSAO != "1") { XML = Util.AlterarChaveETpemisaoNFE(XML, TPEMISSAO, false, out NovaChaveDPEC); _WorkFlowServico.AddEvento("CHAVE CONTINGENCIA: " + NovaChaveDPEC + " CDNOTAFISCALSAIDA:" + CdNotaFiscalSaida.ToString()); } oMemoryStream = Util.StringXmlToStream(XML); //Validacao do XML Util ut = new Util(); string arqSchema = string.Empty; if (versaoxml == "2") { arqSchema = "\\nfe_v2.00.xsd"; } else if (versaoxml == "3") { arqSchema = "\\nfe_v3.10.xsd"; } else { arqSchema = "\\nfe_v4.00.xsd"; } //Log.For(this, PastaLogCliente).Info("Arquivo xsd :" + pastaSchema + arqSchema); ut.ValidaXMLNFE(XML.Trim(), pastaSchema + arqSchema); if (string.IsNullOrEmpty(ut.MsgValidacaoXML)) { _WorkFlowServico.AddEvento("SALVAR XML NA PASTA"); try { //docProc.Load(oMemoryStream); if (TPEMISSAO == "1") { //docProc.Save(string.Format("{0}\\{1}-nfe.xml", DiretorioEnviar, dtrow["NRNFECHAVE"].ToString())); Util.SaveMemoryStreamToFile(string.Format("{0}\\{1}-nfe.xml", DiretorioEnviar, dtrow["NRNFECHAVE"].ToString()), oMemoryStream); } else { //docProc.Save(string.Format("{0}\\{1}-nfe.xml", DiretorioEnviar, NovaChaveDPEC)); Util.SaveMemoryStreamToFile(string.Format("{0}\\{1}-nfe.xml", DiretorioEnviar, NovaChaveDPEC), oMemoryStream); } _WorkFlowServico.AddEvento("ATUALIZAR STATUS NA NFS: " + CdNotaFiscalSaida.ToString()); //Atualiza o status da nfe para NF-e Integrada nhp.NotaFiscalAtualizarStatus(CdNotaFiscalSaida, 1, NovaChaveDPEC, datasource, schema); _WorkFlowServico.AddEvento("NFS ATUALIZADA : " + CdNotaFiscalSaida.ToString()); //log DE ENVIADO OK _WorkFlowServico.AddEvento("NFS ENVIADA PARA SEFAZ: " + CdNotaFiscalSaida.ToString()); _WorkFlowServico.AddEvento("NFS CHAVE: " + dtrow["NRNFECHAVE"].ToString()); //LOG DOC-e detalhamento da NFE dtEmissao = Convert.ToDateTime(dtrow["DTEMISSAO"]).ToString("dd/MM/yyyy"); nhp.InserirHistoricoNFE(cnpjEmpresa.ToString(), dtrow["NRNOTA"].ToString(), dtrow["CDSERIE"].ToString(), CdNotaFiscalSaida.ToString(), dtrow["CDENTIFILIAL"].ToString(), dtEmissao, StatusNfe.ToString(), dtrow["TXNDDLAYOUT"].ToString(), string.Empty, datasourceDoce, schemaDoce); } catch (Exception exdsd) { _WorkFlowServico.AddEvento("ERRO : CDNOTA:" + CdNotaFiscalSaida.ToString() + " CHAVE:" + dtrow["NRNFECHAVE"].ToString() + exdsd.ToString()); nhp.NotaFiscalAtualizarStatus(CdNotaFiscalSaida, 2, NovaChaveDPEC, datasource, schema); objemailadm.SUBJECT = "[C] Carregar xml ERRO: " + CdNotaFiscalSaida.ToString() + " SCHEMA:" + schema; objemailadm.BODY = "ERRO : CDNOTA:" + CdNotaFiscalSaida.ToString() + " CHAVE:" + dtrow["NRNFECHAVE"].ToString() + " - " + exdsd.ToString(); Util.EnviaEmail(objemailadm, "*****@*****.**"); } } else { Log.For(this, PastaLogCliente).Info(_WorkFlowServico.FinishWorkFlow()); Log.For(this, PastaLogCliente).Error("ERRO DE VALIDACAO:" + Environment.NewLine + ut.MsgValidacaoXML); string msgerrotraduzida = Biblioteca.RJSOptimusUtil.TraduzMensagemErroNfe(ut.MsgValidacaoXML); nhp.NotaFiscalAtualizarStatus(CdNotaFiscalSaida, 2, string.Empty, datasource, schema, msgerrotraduzida); } } break; } case 200: //CANCELAMENTO { try { Log.For(this, PastaLogCliente).Info("CANCELAMENTO CDNOTA:" + CdNotaFiscalSaida.ToString()); XML = dtrow["TXNDDCANCLAYOUT"].ToString(); if (string.IsNullOrEmpty(XML)) { throw new Exception("O XML não foi gerado CdNotaFiscalSaida:" + CdNotaFiscalSaida.ToString()); } oMemoryStream = Util.StringXmlToStream(XML); docProc.Load(oMemoryStream); docProc.Save(string.Format("{0}\\{1}-env-canc.xml", DiretorioEnviar, dtrow["NRNFECHAVE"].ToString())); Log.For(this, PastaLogCliente).Info(string.Format("{0}\\{1}-env-canc.xml", DiretorioEnviar, dtrow["NRNFECHAVE"].ToString())); //Atualiza o status da nfe para enviado para a Sefaz nhp.NotaFiscalAtualizarStatus(CdNotaFiscalSaida, 201, string.Empty, datasource, schema); //LOG DOC-e detalhamento da NFE nhp.UpdateHistoricoCanc(XML, string.Empty, dtrow["CDNOTAFISCALSAIDA"].ToString(), datasourceDoce, schemaDoce); Log.For(this, PastaLogCliente).Info("FIM CANCELAMENTO"); } catch (Exception ex) { Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow() + Environment.NewLine + ex.ToString()); objemailadm.SUBJECT = "CANCELAMENTO ERRO: " + CdNotaFiscalSaida.ToString() + " SCHEMA:" + schema; objemailadm.BODY = _WorkFlowServico.FinishWorkFlow() + Environment.NewLine + ex.ToString(); Util.EnviaEmail(objemailadm, "*****@*****.**"); } break; } default: { //TODO: LOG throw new Exception("Status não configurado " + StatusNfe.ToString()); } } } _WorkFlowServico.AddEvento("FIM EXECUÇÃO"); } } catch (Exception ex) { try { Log.For(this, PastaLogCliente).Error(_WorkFlowServico.FinishWorkFlow() + Environment.NewLine + ex.ToString()); string cha = Cache[ChaveNfe].ToString(); if (string.IsNullOrEmpty(cha)) { Cache.Insert(ChaveNfe, ChaveNfe, null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(900)); objemailadm.SUBJECT = "NFE SEND ERRO: CdNotaFiscalSaida: " + CdNotaFiscalSaida.ToString() + " SCHEMA:" + schema + " CNPJ:" + cnpjEmpresa; objemailadm.BODY = "ERRO : " + ex.ToString(); Util.EnviaEmail(objemailadm, "*****@*****.**"); } } catch (Exception exs) { RJS.Optimus.Biblioteca.RJSOptimusLog.GravaLogEventViewer("RJS.Optimus.Win.Int.Servicos.NFEOptimus", string.Concat(_WorkFlowServico.FinishWorkFlow(), Environment.NewLine, exs.ToString()), System.Diagnostics.EventLogEntryType.Error); } } }
public void BuscarXMLnaPasta() { WorkFlowServico _WorkFlowServico = new WorkFlowServico("NFEEntrada.xmlPasta"); NFEHelper nfh = new NFEHelper(); System.IO.DirectoryInfo dirInfoAuto = new DirectoryInfo(pastaTmpEntrada); System.IO.FileInfo[] ArquivosRetornoNfe = dirInfoAuto.GetFiles("*.xml", SearchOption.TopDirectoryOnly); foreach (FileInfo fi2 in ArquivosRetornoNfe.ToList()) { try { NFE _NFE = Util.CarregarNfe(pastaTmpEntrada + "\\" + fi2.Name); //Validar se já existe na tabela NFE string P_DEST_CNPJ = _NFE.dEST_CNPJ; string P_EMIT_CNPJ = _NFE.EMIT_CNPJ; string p_DEST_CPF = _NFE.DEST_CPF; int P_IDE_NNF = _NFE.IDE_NNF; int P_IDE_SERIE = Convert.ToInt32(_NFE.IDE_SERIE); DateTime P_IDE_DEMI = _NFE.IDE_DEMI; //Util ut = new Util(); //Primeira Validação com o XSD da sefaz //ut.ValidaXMLNFE(pastaTmpEntrada + "\\" + attach.Name, pastaSchema); //Caso não esteja valido deleta o arquivo //if (string.IsNullOrEmpty(ut.MsgValidacaoXML)) //{ //TODO: //Verificar se a nota é valida na SEFAZ //Carregar as informações do XML //} //else //{ // _WorkFlowServico.AddEvento(string.Format("XML INVÁLIDO: {0} ERRO:{1}", attach.Name, ut.MsgValidacaoXML)); // System.IO.File.Move(string.Concat(pastaTmpEntrada, "\\", attach.Name), string.Concat(pastaEntradaERRO, "\\", attach.Name)); //} if (nfh.NotaFiscalEntradaValidar(string.IsNullOrEmpty(P_DEST_CNPJ) ? p_DEST_CPF : P_DEST_CNPJ, P_EMIT_CNPJ, P_IDE_NNF, P_IDE_SERIE, P_IDE_DEMI, datasource, schema) == 0) { //Gravar na tabela NFE do ORACLE nfh.NotasFiscalEntradaInsert(_NFE, datasource, schema); //Insert com sucesso if (System.IO.File.Exists(string.Concat(pastaEntradaOK, "\\", fi2.Name))) { System.IO.File.Delete(string.Concat(pastaEntradaOK, "\\", fi2.Name)); } System.IO.File.Move(string.Concat(pastaTmpEntrada, "\\", fi2.Name), string.Concat(pastaEntradaOK, "\\", fi2.Name)); _WorkFlowServico.AddEvento(string.Format("NF Nº{0} CNPJ_EMIT:{1} SERIE:{2} CNPJ_CPF_DEST:{3}.", _NFE.IDE_NNF.ToString(), _NFE.EMIT_CNPJ.ToString(), _NFE.IDE_SERIE.ToString(), _NFE.DEST_CNPJ != null ? _NFE.DEST_CNPJ.ToString() : _NFE.DEST_CPF.ToString())); //chaveserro.AppendLine(pastaTmpEntrada + "\\" + fi2.Name + "OK"); } else { _WorkFlowServico.AddEvento(string.Format("NF Nº{0} CNPJ_EMIT:{1} SERIE:{2} CNPJ_DEST:{3} JÁ IMPORTADA.", _NFE.IDE_NNF.ToString(), _NFE.EMIT_CNPJ.ToString(), _NFE.IDE_SERIE.ToString(), _NFE.DEST_CNPJ == null ? _NFE.DEST_CPF : _NFE.DEST_CNPJ)); System.IO.File.Delete(string.Concat(pastaTmpEntrada, "\\", fi2.Name)); //chaveserro.AppendLine(pastaTmpEntrada + "\\" + fi2.Name + "JA"); } } catch (Exception ex) { //chaveserro.AppendLine(pastaTmpEntrada + "\\" + fi2.Name + " -->EX:" + ex.ToString()); Log.For(this, PastaLogCliente).Error(pastaTmpEntrada + "\\" + fi2.Name + " -->EX:" + ex.ToString()); try { System.IO.File.Move(string.Concat(pastaTmpEntrada, "\\", fi2.Name), string.Concat(pastaEntradaERRO, "\\", fi2.Name)); objemailadm.SUBJECT = "ERRO NFE ENTRADA BUSCAR NA PASTA" + cnpjEmpresa.ToString() + " SCHEMA:" + schema; objemailadm.BODY = ex.ToString(); Util.EnviaEmail(objemailadm, "*****@*****.**"); } catch (Exception exs) { Log.For(this, PastaLogCliente).Error(pastaTmpEntrada + "\\" + fi2.Name + " ao tentar mover-->EX:" + exs.ToString()); } } } if (ArquivosRetornoNfe.Count() > 0) { Log.For(this, PastaLogCliente).Info(_WorkFlowServico.FinishWorkFlow()); //string aaaa = chaveserro.ToString(); } }