public override void Execute() { int emp = Empresas.FindEmpresaByThread(); try { dadosPedSta = new DadosPedSta(); //Ler o XML para pegar parâmetros de envio PedSta(emp, dadosPedSta); if (vXmlNfeDadosMsgEhXML) //danasa 12-9-2009 { //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, dadosPedSta.cUF, dadosPedSta.tpAmb, dadosPedSta.tpEmis, dadosPedSta.versao, dadosPedSta.mod, 0); System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(dadosPedSta.cUF, dadosPedSta.tpAmb, dadosPedSta.tpEmis, Servico); //Criar objetos das classes dos serviços dos webservices do SEFAZ var oStatusServico = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); object oCabecMsg = null; if (dadosPedSta.versao != "4.00") { oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosPedSta.cUF, Servico)); wsProxy.SetProp(oCabecMsg, TpcnResources.cUF.ToString(), dadosPedSta.cUF.ToString()); wsProxy.SetProp(oCabecMsg, TpcnResources.versaoDados.ToString(), dadosPedSta.versao); } new AssinaturaDigital().CarregarPIN(emp, NomeArquivoXML, Servico); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.Invocar(wsProxy, oStatusServico, wsProxy.NomeMetodoWS[0], oCabecMsg, this, Propriedade.Extensao(Propriedade.TipoEnvio.PedSta).EnvioXML, Propriedade.Extensao(Propriedade.TipoEnvio.PedSta).RetornoXML, true, securityProtocolType); } else { string f = Path.GetFileNameWithoutExtension(NomeArquivoXML) + ".xml"; if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0) { f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f); } // Gerar o XML de solicitacao de situacao do servico a partir do TXT gerado pelo ERP oGerarXML.StatusServicoNFe(f, dadosPedSta.tpAmb, dadosPedSta.tpEmis, dadosPedSta.cUF, dadosPedSta.versao); } } catch (Exception ex) { var extRet = vXmlNfeDadosMsgEhXML ? Propriedade.Extensao(Propriedade.TipoEnvio.PedSta).EnvioXML : Propriedade.Extensao(Propriedade.TipoEnvio.PedSta).EnvioTXT; try { //Gravar o arquivo de erro de retorno para o ERP, caso ocorra TFunctions.GravarArqErroServico(NomeArquivoXML, extRet, Propriedade.ExtRetorno.Sta_ERR, ex); } catch { //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada. //Wandrey 09/03/2010 } } finally { try { //Deletar o arquivo de solicitação do serviço Functions.DeletarArquivo(NomeArquivoXML); } catch { //Se falhou algo na hora de deletar o XML de solicitação do serviço, //infelizmente não posso fazer mais nada, o UniNFe vai tentar mandar //o arquivo novamente para o webservice //Wandrey 09/03/2010 } } }
public override void Execute() { switch (Servico) { case Servicos.DFeEnviar: ExtEnvioDFe = Propriedade.Extensao(Propriedade.TipoEnvio.EnvDFe).EnvioXML; ExtEnvioDFeTXT = Propriedade.Extensao(Propriedade.TipoEnvio.EnvDFe).EnvioTXT; ExtRetornoDFe = Propriedade.Extensao(Propriedade.TipoEnvio.EnvDFe).RetornoXML; ExtRetEnvDFe_ERR = Propriedade.ExtRetorno.retEnvDFe_ERR; break; case Servicos.CTeDistribuicaoDFe: ExtEnvioDFe = Propriedade.Extensao(Propriedade.TipoEnvio.EnvDFeCTe).EnvioXML; ExtEnvioDFeTXT = Propriedade.Extensao(Propriedade.TipoEnvio.EnvDFeCTe).EnvioTXT; ExtRetornoDFe = Propriedade.Extensao(Propriedade.TipoEnvio.EnvDFeCTe).RetornoXML; ExtRetEnvDFe_ERR = Propriedade.ExtRetorno.retEnvDFeCTe_ERR; break; } int emp = Empresas.FindEmpresaByThread(); distDFeInt _distDFeInt = new distDFeInt(); try { if (!this.vXmlNfeDadosMsgEhXML) { ///versao|1.00 ///tpAmb|1 ///cUFAutor|35 ///CNPJ| /// ou ///CPF| ///ultNSU|123456789012345 /// ou ///NSU|123456789012345 List <string> cLinhas = Functions.LerArquivo(NomeArquivoXML); Functions.PopulateClasse(_distDFeInt, cLinhas); string f = Path.GetFileNameWithoutExtension(NomeArquivoXML) + ".xml"; if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0) { f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f); } // Gerar o XML de envio de DFe a partir do TXT gerado pelo ERP oGerarXML.RecepcaoDFe(f, _distDFeInt); } else { XmlNodeList consdistDFeIntList = ConteudoXML.GetElementsByTagName("distDFeInt"); foreach (XmlNode consdistDFeIntNode in consdistDFeIntList) { XmlElement consdistDFeIntElemento = (XmlElement)consdistDFeIntNode; Functions.PopulateClasse(_distDFeInt, consdistDFeIntElemento); } //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, 991, _distDFeInt.tpAmb, 0); System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(991, _distDFeInt.tpAmb, 1, Servico); object oConsNFDestEvento = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.Invocar(wsProxy, oConsNFDestEvento, wsProxy.NomeMetodoWS[0], null, this, ExtEnvioDFe, ExtRetornoDFe, true, securityProtocolType); LeRetornoDFe(emp, ConteudoXML); } } catch (Exception ex) { WriteLogError(ex); } finally { try { //Deletar o arquivo de solicitação do serviço Functions.DeletarArquivo(NomeArquivoXML); } catch { } } }
public override void Execute() { int emp = Empresas.FindEmpresaByThread(); Servico = Servicos.NFeConsultaNFDest; try { oDadosConsultaNFeDest = new DadosConsultaNFeDest(); //Ler o XML para pegar parâmetros de envio EnvConsultaNFeDest(emp, NomeArquivoXML); if (vXmlNfeDadosMsgEhXML) { int cUF = Empresas.Configuracoes[emp].UnidadeFederativaCodigo; //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, cUF, oDadosConsultaNFeDest.tpAmb); System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(cUF, oDadosConsultaNFeDest.tpAmb, (int)TipoEmissao.teNormal, PadroesNFSe.NaoIdentificado, Servico); object oConsNFDestEvento = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); object oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(cUF, Servico)); //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), cUF.ToString()); wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), NFe.ConvertTxt.versoes.VersaoXMLEnvConsultaNFeDest); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.Invocar(wsProxy, oConsNFDestEvento, wsProxy.NomeMetodoWS[0], oCabecMsg, this, Propriedade.Extensao(Propriedade.TipoEnvio.ConsNFeDest).EnvioXML, Propriedade.Extensao(Propriedade.TipoEnvio.ConsNFeDest).RetornoXML, true, securityProtocolType); //Ler o retorno this.LerRetornoConsultaNFeDest(emp); } else { string f = Functions.ExtrairNomeArq(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.ConsNFeDest).EnvioTXT) + Propriedade.Extensao(Propriedade.TipoEnvio.ConsNFeDest).EnvioXML; if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0) { f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f); } // Gerar o XML de eventos a partir do TXT gerado pelo ERP oGerarXML.EnvioConsultaNFeDest(f, oDadosConsultaNFeDest); } } catch (Exception ex) { try { var ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.Extensao(Propriedade.TipoEnvio.ConsNFeDest).EnvioXML : Propriedade.Extensao(Propriedade.TipoEnvio.ConsNFeDest).EnvioTXT; //Gravar o arquivo de erro de retorno para o ERP, caso ocorra TFunctions.GravarArqErroServico(NomeArquivoXML, ExtRet, Propriedade.ExtRetorno.retConsNFeDest_ERR, ex); } catch { //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada. //Wandrey 09/03/2010 } } finally { try { Functions.DeletarArquivo(NomeArquivoXML); } catch { //Se falhou algo na hora de deletar o XML de evento, infelizmente //não posso fazer mais nada, o UniNFe vai tentar mandar o arquivo novamente para o webservice, pois ainda não foi excluido. //Wandrey 09/03/2010 } } }
public override void Execute() { int emp = Empresas.FindEmpresaByThread(); try { dadosConsCad = new DadosConsCad(); //Ler o XML para pegar parâmetros de envio ConsCad(NomeArquivoXML); if (this.vXmlNfeDadosMsgEhXML) //danasa 12-9-2009 { //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, dadosConsCad.cUF, dadosConsCad.tpAmb, (int)NFe.Components.TipoEmissao.teNormal, dadosConsCad.versao); //Criar objetos das classes dos serviços dos webservices do SEFAZ object oConsCad = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); object oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosConsCad.cUF, Servico)); //Atribuir conteúdo para duas propriedades da classe nfeCabecMsg wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), dadosConsCad.cUF.ToString()); wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), this.dadosConsCad.versao); new AssinaturaDigital().CarregarPIN(emp, NomeArquivoXML, Servico); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.Invocar(wsProxy, oConsCad, wsProxy.NomeMetodoWS[0], oCabecMsg, this, NFe.Components.Propriedade.ExtEnvio.ConsCad_XML.Replace(".xml", ""), NFe.Components.Propriedade.ExtRetorno.ConsCad_XML.Replace(".xml", ""));//"-cons-cad", "-ret-cons-cad"); } else { string f = Path.GetFileNameWithoutExtension(NomeArquivoXML) + ".xml"; if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0) { f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f); } //Gerar o XML da consulta cadastro do contribuinte a partir do TXT gerado pelo ERP GravarXml(f); } } catch (Exception ex) { string ExtRet = string.Empty; if (this.vXmlNfeDadosMsgEhXML) //Se for XML { ExtRet = Propriedade.ExtEnvio.ConsCad_XML; } else //Se for TXT { ExtRet = Propriedade.ExtEnvio.ConsCad_TXT; } try { //Gravar o arquivo de erro de retorno para o ERP, caso ocorra TFunctions.GravarArqErroServico(NomeArquivoXML, ExtRet, Propriedade.ExtRetorno.ConsCad_ERR, ex); } catch { //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada. //Wandrey 09/03/2010 } } finally { try { //Deletar o arquivo de solicitação do serviço Functions.DeletarArquivo(NomeArquivoXML); } catch { //Se falhou algo na hora de deletar o XML de solicitação do serviço, //infelizmente não posso fazer mais nada, o UniNFe vai tentar mandar //o arquivo novamente para o webservice //Wandrey 09/03/2010 } } }
public override void Execute() { int emp = Empresas.FindEmpresaByThread(); distDFeInt _distDFeInt = new distDFeInt(); Servico = Servicos.DFeEnviar; try { if (!this.vXmlNfeDadosMsgEhXML) { ///versao|1.00 ///tpAmb|1 ///cUFAutor|35 ///CNPJ| /// ou ///CPF| ///ultNSU|123456789012345 /// ou ///NSU|123456789012345 List <string> cLinhas = Functions.LerArquivo(this.NomeArquivoXML); Functions.PopulateClasse(_distDFeInt, cLinhas); string f = System.IO.Path.GetFileNameWithoutExtension(NomeArquivoXML) + ".xml"; if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0) { f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f); } // Gerar o XML de envio de DFe a partir do TXT gerado pelo ERP oGerarXML.RecepcaoDFe(f, _distDFeInt); } else { XmlDocument doc = new XmlDocument(); doc.Load(this.NomeArquivoXML); XmlNodeList consdistDFeIntList = doc.GetElementsByTagName("distDFeInt"); foreach (XmlNode consdistDFeIntNode in consdistDFeIntList) { XmlElement consdistDFeIntElemento = (XmlElement)consdistDFeIntNode; Functions.PopulateClasse(_distDFeInt, consdistDFeIntElemento); } //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, 991, _distDFeInt.tpAmb); object oConsNFDestEvento = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.Invocar(wsProxy, oConsNFDestEvento, wsProxy.NomeMetodoWS[0], null, this, Propriedade.ExtEnvio.EnvDFe_XML.Replace(".xml", ""), Propriedade.ExtRetorno.retEnvDFe_XML.Replace(".xml", "")); LeRetornoDFe(emp, doc); } } catch (Exception ex) { WriteLogError(ex); } finally { try { //Deletar o arquivo de solicitação do serviço Functions.DeletarArquivo(NomeArquivoXML); } catch { } } }
public override void Execute() { int emp = Empresas.FindEmpresaByThread(); try { dadosPedSit = new DadosPedSit(); PedSit(emp, dadosPedSit); if (vXmlNfeDadosMsgEhXML) { //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, dadosPedSit.cUF, dadosPedSit.tpAmb, dadosPedSit.tpEmis, dadosPedSit.versao, dadosPedSit.mod, 0); System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(dadosPedSit.cUF, dadosPedSit.tpAmb, dadosPedSit.tpEmis, Servico); //Criar objetos das classes dos serviços dos webservices do SEFAZ object oConsulta = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); object oCabecMsg = null; if (dadosPedSit.versao != "4.00") { oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosPedSit.cUF, Servico)); wsProxy.SetProp(oCabecMsg, TpcnResources.cUF.ToString(), dadosPedSit.cUF.ToString()); wsProxy.SetProp(oCabecMsg, TpcnResources.versaoDados.ToString(), dadosPedSit.versao); } new AssinaturaDigital().CarregarPIN(emp, NomeArquivoXML, Servico); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.Invocar(wsProxy, oConsulta, wsProxy.NomeMetodoWS[0], oCabecMsg, this, Propriedade.Extensao(Propriedade.TipoEnvio.PedSit).EnvioXML, Propriedade.Extensao(Propriedade.TipoEnvio.PedSit).RetornoXML, false, securityProtocolType); //Efetuar a leitura do retorno da situação para ver se foi autorizada ou não //Na versão 1 não posso gerar o -procNfe, ou vou ter que tratar a estrutura do XML de acordo com a versão, a consulta na versão 1 é somente para obter o resultado mesmo. LerRetornoSitNFe(dadosPedSit.chNFe); //Gerar o retorno para o ERP oGerarXML.XmlRetorno(Propriedade.Extensao(Propriedade.TipoEnvio.PedSit).EnvioXML, Propriedade.Extensao(Propriedade.TipoEnvio.PedSit).RetornoXML, this.vStrXmlRetorno); } else { string f = Path.GetFileNameWithoutExtension(NomeArquivoXML) + ".xml"; if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0) { f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f); } oGerarXML.Consulta(TipoAplicativo.Nfe, f, dadosPedSit.tpAmb, dadosPedSit.tpEmis, dadosPedSit.chNFe, dadosPedSit.versao); } } catch (Exception ex) { string ExtEnvio = string.Empty; if (this.vXmlNfeDadosMsgEhXML) //Se for XML { ExtEnvio = Propriedade.Extensao(Propriedade.TipoEnvio.PedSit).EnvioXML; } else //Se for TXT { ExtEnvio = Propriedade.Extensao(Propriedade.TipoEnvio.PedSit).EnvioTXT; } try { TFunctions.GravarArqErroServico(NomeArquivoXML, ExtEnvio, Propriedade.ExtRetorno.Sit_ERR, ex); } catch { //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada. //Wandrey 09/03/2010 } } finally { try { Functions.DeletarArquivo(NomeArquivoXML); } catch { //Se falhou algo na hora de deletar o XML de pedido da consulta da situação da NFe, infelizmente //não posso fazser mais nada, o UniNFe vai tentar mantar o arquivo novamente para o webservice, pois ainda não foi excluido. //Wandrey 22/03/2010 } } }
public override void Execute() { int emp = Empresas.FindEmpresaByThread(); try { //Ler o XML para pegar parâmetros de envio EnvEvento(emp, dadosEnvEvento); string currentEvento = dadosEnvEvento.eventos[0].tpEvento; // mudei para aqui caso haja erro e qdo for gravar o arquivo de erro precisamos saber qual o servico switch (NFe.Components.EnumHelper.StringToEnum <NFe.ConvertTxt.tpEventos>(currentEvento)) { case ConvertTxt.tpEventos.tpEvCancelamentoNFe: Servico = Servicos.EventoCancelamento; break; case ConvertTxt.tpEventos.tpEvCCe: Servico = Servicos.EventoCCe; break; case ConvertTxt.tpEventos.tpEvEPEC: Servico = Servicos.EventoEPEC; break; case ConvertTxt.tpEventos.tpEvPedProrrogacao_ICMS_1: case ConvertTxt.tpEventos.tpEvPedProrrogacao_ICMS_2: case ConvertTxt.tpEventos.tpEvCancPedProrrogacao_ICMS_1: case ConvertTxt.tpEventos.tpEvCancPedProrrogacao_ICMS_2: case ConvertTxt.tpEventos.tpEvFiscoRespCancPedProrrogacao_ICMS_1: case ConvertTxt.tpEventos.tpEvFiscoRespCancPedProrrogacao_ICMS_2: case ConvertTxt.tpEventos.tpEvFiscoRespPedProrrogacao_ICMS_1: case ConvertTxt.tpEventos.tpEvFiscoRespPedProrrogacao_ICMS_2: Servico = Servicos.EventoRecepcao; break; default: Servico = Servicos.EventoManifestacaoDest; break; } ValidaEvento(emp, dadosEnvEvento); //Pegar o estado da chave, pois na cOrgao pode vir o estado 91 - Wandreuy 22/08/2012 int cOrgao = dadosEnvEvento.eventos[0].cOrgao; //vai pegar o ambiente da Chave da Nfe autorizada p/ corrigir tpEmis int tpEmis = this.dadosEnvEvento.eventos[0].tpEmis; //Convert.ToInt32(this.dadosEnvEvento.eventos[0].chNFe.Substring(34, 1)); int ufParaWS = cOrgao; //Se o cOrgao for igual a 91 tenho que mudar a ufParaWS para que na hora de buscar o WSDL para conectar ao serviço, ele consiga encontrar. Wandrey 23/01/2013 if (cOrgao == 91) { ufParaWS = Convert.ToInt32(dadosEnvEvento.eventos[0].chNFe.Substring(0, 2)); } switch (Servico) { case Servicos.EventoCancelamento: switch ((NFe.Components.TipoEmissao)tpEmis) { case NFe.Components.TipoEmissao.teSVCAN: case NFe.Components.TipoEmissao.teSVCRS: case NFe.Components.TipoEmissao.teSVCSP: case NFe.Components.TipoEmissao.teNormal: //Se a nota fiscal foi emitida em ambiente NORMAL, o cancelamento tem que ir para o ambiente normal ou gera uma rejeição. Wandrey 15/02/2013 break; default: //Os demais tipos de emissão tem que sempre ir para o ambiente NORMAL. Wandrey 22/02/2013 tpEmis = (int)NFe.Components.TipoEmissao.teNormal; break; } break; case Servicos.EventoCCe: //CCe só existe no ambiente Normal. Wandrey 22/04/2013 tpEmis = (int)NFe.Components.TipoEmissao.teNormal; break; } if (vXmlNfeDadosMsgEhXML) { //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS( Servico, emp, ufParaWS, dadosEnvEvento.eventos[0].tpAmb, tpEmis, string.Empty, dadosEnvEvento.eventos[0].mod); System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(ufParaWS, dadosEnvEvento.eventos[0].tpAmb, tpEmis, PadroesNFSe.NaoIdentificado, Servico); //Criar objetos das classes dos serviços dos webservices do SEFAZ object oRecepcaoEvento = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); object oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(cOrgao, Servico)); string xmlExtEnvio = string.Empty; string xmlExtRetorno = string.Empty; wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), cOrgao.ToString()); wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), NFe.ConvertTxt.versoes.VersaoXMLEvento); if (novaNomenclatura) { xmlExtEnvio = Propriedade.Extensao(Propriedade.TipoEnvio.PedEve).EnvioXML.Replace(".xml", ""); xmlExtRetorno = Propriedade.Extensao(Propriedade.TipoEnvio.PedEve).RetornoXML.Replace(".xml", ""); } else { switch (Servico) { case Servicos.EventoCCe: xmlExtEnvio = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).EnvioXML.Replace(".xml", ""); xmlExtRetorno = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).RetornoXML.Replace(".xml", ""); break; case Servicos.EventoCancelamento: xmlExtEnvio = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).EnvioXML.Replace(".xml", ""); xmlExtRetorno = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).RetornoXML.Replace(".xml", ""); break; default: xmlExtEnvio = Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).EnvioXML.Replace(".xml", ""); xmlExtRetorno = Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).RetornoXML.Replace(".xml", ""); break; } } //Criar objeto da classe de assinatura digital AssinaturaDigital oAD = new AssinaturaDigital(); //Assinar o XML oAD.Assinar(NomeArquivoXML, emp, cOrgao); oInvocarObj.Invocar(wsProxy, oRecepcaoEvento, wsProxy.NomeMetodoWS[0], oCabecMsg, this, xmlExtEnvio, xmlExtRetorno, true, securityProtocolType); //Ler o retorno LerRetornoEvento(emp); } else { // Gerar o XML de eventos a partir do TXT gerado pelo ERP string xmlFileExt = string.Empty; string xmlFileExtTXT = string.Empty; if (novaNomenclatura) { xmlFileExt = Propriedade.Extensao(Propriedade.TipoEnvio.PedEve).EnvioXML; xmlFileExtTXT = Propriedade.Extensao(Propriedade.TipoEnvio.PedEve).EnvioTXT; } else { switch (Servico) { case Servicos.EventoCCe: xmlFileExt = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).EnvioXML; xmlFileExtTXT = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).EnvioTXT; break; case Servicos.EventoCancelamento: xmlFileExt = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).EnvioXML; xmlFileExtTXT = Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).EnvioTXT; break; default: xmlFileExt = Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).EnvioXML; xmlFileExtTXT = Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).EnvioTXT; break; } } string f = Functions.ExtrairNomeArq(NomeArquivoXML, xmlFileExtTXT) + xmlFileExt; if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0) { f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f); } oGerarXML.EnvioEvento(f, dadosEnvEvento); } } catch (Exception ex) { try { //Gravar o arquivo de erro de retorno para o ERP, caso ocorra string ExtRet = string.Empty; string ExtRetorno = string.Empty; if (novaNomenclatura) { ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.Extensao(Propriedade.TipoEnvio.PedEve).EnvioXML : Propriedade.Extensao(Propriedade.TipoEnvio.PedEve).EnvioTXT; ExtRetorno = Propriedade.ExtRetorno.Eve_ERR; } else { if (Servico == Servicos.Nulo) { // pode ter vindo de um txt e houve erro if (NomeArquivoXML.ToLower().EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).EnvioXML) || NomeArquivoXML.ToLower().EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).EnvioTXT)) { Servico = Servicos.EventoCCe; } else if (NomeArquivoXML.ToLower().EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).EnvioXML) || NomeArquivoXML.ToLower().EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).EnvioTXT)) { Servico = Servicos.EventoManifestacaoDest; } else if (NomeArquivoXML.ToLower().EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).EnvioXML) || NomeArquivoXML.ToLower().EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).EnvioTXT)) { Servico = Servicos.EventoCancelamento; } } switch (Servico) { case Servicos.EventoCCe: ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).EnvioXML : Propriedade.Extensao(Propriedade.TipoEnvio.EnvCCe).EnvioTXT; ExtRetorno = Propriedade.ExtRetorno.retEnvCCe_ERR; break; case Servicos.EventoCancelamento: ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).EnvioXML : Propriedade.Extensao(Propriedade.TipoEnvio.EnvCancelamento).EnvioTXT; ExtRetorno = Propriedade.ExtRetorno.retCancelamento_ERR; break; case Servicos.EventoManifestacaoDest: ExtRet = vXmlNfeDadosMsgEhXML ? Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).EnvioXML : Propriedade.Extensao(Propriedade.TipoEnvio.EnvManifestacao).EnvioTXT; ExtRetorno = Propriedade.ExtRetorno.retManifestacao_ERR; break; default: throw new Exception("Nao pode identificar o tipo de serviço para o arquivo: " + NomeArquivoXML); } } if (ExtRetorno != string.Empty) { TFunctions.GravarArqErroServico(NomeArquivoXML, ExtRet, ExtRetorno, ex); } } catch { //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada. //Wandrey 09/03/2010 } } finally { try { Functions.DeletarArquivo(NomeArquivoXML); } catch { //Se falhou algo na hora de deletar o XML de evento, infelizmente //não posso fazer mais nada, o UniNFe vai tentar mandar o arquivo novamente para o webservice, pois ainda não foi excluido. //Wandrey 09/03/2010 } } }
public override void Execute() { int emp = Empresas.FindEmpresaByThread(); try { dadosPedInut = new DadosPedInut(emp); PedInut(emp, NomeArquivoXML); if (vXmlNfeDadosMsgEhXML) //danasa 12-9-2009 { //Definir o objeto do WebService WebServiceProxy wsProxy = ConfiguracaoApp.DefinirWS(Servico, emp, dadosPedInut.cUF, dadosPedInut.tpAmb, dadosPedInut.tpEmis, dadosPedInut.versao, dadosPedInut.mod.ToString()); System.Net.SecurityProtocolType securityProtocolType = WebServiceProxy.DefinirProtocoloSeguranca(dadosPedInut.cUF, dadosPedInut.tpAmb, dadosPedInut.tpEmis, PadroesNFSe.NaoIdentificado, Servico); //Criar objetos das classes dos serviços dos webservices do SEFAZ object oInutilizacao = wsProxy.CriarObjeto(wsProxy.NomeClasseWS); object oCabecMsg = wsProxy.CriarObjeto(NomeClasseCabecWS(dadosPedInut.cUF, Servico)); //Atribuir conteúdo p ara duas propriedades da classe nfeCabecMsg wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.cUF.ToString(), dadosPedInut.cUF.ToString()); wsProxy.SetProp(oCabecMsg, NFe.Components.TpcnResources.versaoDados.ToString(), dadosPedInut.versao); //Criar objeto da classe de assinatura digita AssinaturaDigital oAD = new AssinaturaDigital(); //Assinar o XML oAD.Assinar(NomeArquivoXML, emp, Convert.ToInt32(dadosPedInut.cUF)); //Invocar o método que envia o XML para o SEFAZ oInvocarObj.Invocar(wsProxy, oInutilizacao, wsProxy.NomeMetodoWS[0], oCabecMsg, this, Propriedade.Extensao(Propriedade.TipoEnvio.PedInu).EnvioXML, Propriedade.Extensao(Propriedade.TipoEnvio.PedInu).RetornoXML, true, securityProtocolType); //Ler o retorno do webservice LerRetornoInut(); } else { string f = Path.GetFileNameWithoutExtension(NomeArquivoXML) + ".xml"; if (NomeArquivoXML.IndexOf(Empresas.Configuracoes[emp].PastaValidar, StringComparison.InvariantCultureIgnoreCase) >= 0) { f = Path.Combine(Empresas.Configuracoes[emp].PastaValidar, f); } oGerarXML.Inutilizacao(f, dadosPedInut.tpAmb, dadosPedInut.tpEmis, dadosPedInut.cUF, dadosPedInut.ano, dadosPedInut.CNPJ, dadosPedInut.mod, dadosPedInut.serie, dadosPedInut.nNFIni, dadosPedInut.nNFFin, dadosPedInut.xJust, dadosPedInut.versao); } } catch (Exception ex) { string ExtRet = string.Empty; if (vXmlNfeDadosMsgEhXML) //Se for XML { ExtRet = Propriedade.Extensao(Propriedade.TipoEnvio.PedInu).EnvioXML; } else //Se for TXT { ExtRet = Propriedade.Extensao(Propriedade.TipoEnvio.PedInu).EnvioTXT; } try { //Gravar o arquivo de erro de retorno para o ERP, caso ocorra TFunctions.GravarArqErroServico(NomeArquivoXML, ExtRet, Propriedade.ExtRetorno.Inu_ERR, ex); } catch { //Se falhou algo na hora de gravar o retorno .ERR (de erro) para o ERP, infelizmente não posso fazer mais nada. //Wandrey 09/03/2010 } } finally { try { if (!vXmlNfeDadosMsgEhXML) //Se for o TXT para ser transformado em XML, vamos excluir o TXT depois de gerado o XML { Functions.DeletarArquivo(NomeArquivoXML); } } catch { //Se falhou algo na hora de deletar o XML de inutilização, infelizmente não posso //fazer mais nada. Com certeza o uninfe sendo restabelecido novamente vai tentar enviar o mesmo //xml de inutilização para o SEFAZ. Este erro pode ocorrer por falha no HD, rede, Permissão de pastas, etc. Wandrey 23/03/2010 } } }
public override void Execute() { int emp = Empresas.FindEmpresaByThread(); List <string> arquivosNFe = new List <string>(); //Aguardar a assinatura de todos os arquivos da pasta de lotes arquivosNFe = oAux.ArquivosPasta(Empresas.Configuracoes[emp].PastaXmlEmLote, "*" + Propriedade.Extensao(Propriedade.TipoEnvio.NFe).EnvioXML); if (arquivosNFe.Count == 0) { if (NomeArquivoXML.IndexOf(Propriedade.Extensao(Propriedade.TipoEnvio.MontarLote).EnvioTXT) >= 0) { try { StringBuilder xml = new StringBuilder(); xml.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); xml.Append("<MontarLoteNFe>"); foreach (var filename in File.ReadAllLines(NomeArquivoXML, Encoding.Default)) { xml.AppendFormat("<ArquivoNFe>{0}</ArquivoNFe>", filename + (filename.ToLower().EndsWith(Propriedade.Extensao(Propriedade.TipoEnvio.NFe).EnvioXML) ? "" : Propriedade.Extensao(Propriedade.TipoEnvio.NFe).EnvioXML)); } xml.Append("</MontarLoteNFe>"); File.WriteAllText(Path.Combine(Empresas.Configuracoes[emp].PastaXmlEmLote, Path.GetFileName(NomeArquivoXML.Replace(Propriedade.Extensao(Propriedade.TipoEnvio.MontarLote).EnvioTXT, Propriedade.Extensao(Propriedade.TipoEnvio.MontarLote).EnvioXML))), xml.ToString()); //Deletar o arquivo de solicitação de montagem do lote de NFe FileInfo oArquivo = new FileInfo(NomeArquivoXML); oArquivo.Delete(); } catch (Exception ex) { try { TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.MontarLote).EnvioTXT, Propriedade.ExtRetorno.MontarLote_ERR, ex); } catch { //Se deu algum erro na hora de gravar o arquivo de erro de retorno para o ERP, infelizmente não poderemos fazer nada //pois deve estar ocorrendo alguma falha de rede, hd, permissão de acesso a pasta ou arquivos, etc. Wandrey 22/03/2010 //TODO: Não poderia gravar algum LOG para análise? Erro de rede normalmente é erro de IO } } } else { List <ArquivoXMLDFe> notas = new List <ArquivoXMLDFe>(); FileStream fsArquivo = null; FluxoNfe fluxoNfe = new FluxoNfe(); try { try { XmlDocument doc = new XmlDocument(); //Criar instância do XmlDocument Class fsArquivo = new FileStream(NomeArquivoXML, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); //Abrir um arquivo XML usando FileStream doc.Load(fsArquivo); //Carregar o arquivo aberto no XmlDocument string versaoXml = string.Empty; XmlNodeList documentoList = doc.GetElementsByTagName("MontarLoteNFe"); //Pesquisar o elemento Documento no arquivo XML foreach (XmlNode documentoNode in documentoList) { XmlElement documentoElemento = (XmlElement)documentoNode; int QtdeArquivo = documentoElemento.GetElementsByTagName("ArquivoNFe").Count; for (int d = 0; d < QtdeArquivo; d++) { string arquivoNFe = Empresas.Configuracoes[emp].PastaXmlEmLote + "\\temp\\" + documentoElemento.GetElementsByTagName("ArquivoNFe")[d].InnerText; if (File.Exists(arquivoNFe)) { XmlDocument conteudoXMLNFe = new XmlDocument(); conteudoXMLNFe.Load(arquivoNFe); DadosNFeClass oDadosNfe = LerXMLNFe(conteudoXMLNFe); if (string.IsNullOrEmpty(versaoXml)) { versaoXml = oDadosNfe.versao; } if (!fluxoNfe.NFeComLote(oDadosNfe.chavenfe)) { notas.Add(new ArquivoXMLDFe() { NomeArquivoXML = arquivoNFe, ConteudoXML = conteudoXMLNFe }); } else { throw new Exception("Arquivo: " + arquivoNFe + " já está no fluxo de envio e não será incluido em novo lote."); } } else { throw new Exception("Arquivo: " + arquivoNFe + " não existe e não será incluido no lote!"); } } } fsArquivo.Close(); XmlDocument xmlLote = LoteNfe(notas, versaoXml); TaskNFeRecepcao nfeRecepcao = new TaskNFeRecepcao(xmlLote); nfeRecepcao.Execute(); } catch { if (fsArquivo != null) { fsArquivo.Close(); } } //Deletar o arquivo de solicitão de montagem do lote de NFe FileInfo oArquivo = new FileInfo(NomeArquivoXML); oArquivo.Delete(); } catch (Exception ex) { try { TFunctions.GravarArqErroServico(NomeArquivoXML, Propriedade.Extensao(Propriedade.TipoEnvio.MontarLote).EnvioXML, Propriedade.ExtRetorno.MontarLote_ERR, ex); } catch { //Se deu algum erro na hora de gravar o arquivo de erro de retorno para o ERP, infelizmente não poderemos fazer nada //pois deve estar ocorrendo alguma falha de rede, hd, permissão de acesso a pasta ou arquivos, etc. Wandrey 22/03/2010 //TODO: Não poderia gravar algum LOG para análise? Erro de rede normalmente é erro de IO } } } } }