Mudança na SefazClass

Projeto hbNFe (Nota Fiscal Eletronica/Danfe) para [x]Harbour

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mudança na SefazClass

Mensagem por JoséQuintas »

Só vou testar na segunda, mas ....
Alterei a forma de pegar os endereços.
Ao invés de uma função pra cada UF, uma função pra NFE, CTE, MDFE, NFCE, e NFE 4.0
Como exemplo pra NFE:

Código: Selecionar todos

   aList := { ;
      ;
      { "AM", WS_AMBIENTE_PRODUCAO,    WS_NFE_AUTORIZACAO,       "https://nfe.sefaz.am.gov.br/services2/services/NfeAutorizacao" }, ;
      { "AM", WS_AMBIENTE_PRODUCAO,    WS_NFE_CANCELAMENTO,      "https://nfe.sefaz.am.gov.br/services2/services/NfeCancelamento2" }, ;
      { "AM", WS_AMBIENTE_PRODUCAO,    WS_NFE_CONSULTAPROTOCOLO, "https://nfe.sefaz.am.gov.br/services2/services/NfeConsulta2" }, ;
      { "AM", WS_AMBIENTE_PRODUCAO,    WS_NFE_INUTILIZACAO,      "https://nfe.sefaz.am.gov.br/services2/services/NfeInutilizacao2" }, ;
      { "AM", WS_AMBIENTE_PRODUCAO,    WS_NFE_RECEPCAO,          "https://nfe.sefaz.am.gov.br/services2/services/NfeRecepcao2" }, ;
      { "AM", WS_AMBIENTE_PRODUCAO,    WS_NFE_RECEPCAOEVENTO,    "https://nfe.sefaz.am.gov.br/services2/services/RecepcaoEvento" }, ;
      { "AM", WS_AMBIENTE_PRODUCAO,    WS_NFE_RETAUTORIZACAO,    "https://nfe.sefaz.am.gov.br/services2/services/NfeRetAutorizacao" }, ;
      { "AM", WS_AMBIENTE_PRODUCAO,    WS_NFE_RETRECEPCAO,       "https://nfe.sefaz.am.gov.br/services2/services/NfeRetRecepcao2" }, ;
      { "AM", WS_AMBIENTE_PRODUCAO,    WS_NFE_STATUSSERVICO,     "https://nfe.sefaz.am.gov.br/services2/services/NfeStatusServico2" }, ;
      ;
      { "AM", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_CONSULTAPROTOCOLO, "https://homnfe.sefaz.am.gov.br/services2/services/NfeConsulta2" }, ;
      { "AM", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_CANCELAMENTO,      "https://homnfe.sefaz.am.gov.br/services2/services/NfeCancelamento2" }, ;
      { "AM", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_CONSULTACADASTRO,  "https://homnfe.sefaz.am.gov.br/services2/services/CadConsultaCadastro2" }, ;
      { "AM", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_CONSULTAPROTOCOLO, "https://homnfe.sefaz.am.gov.br/services2/services/NfeConsulta2" }, ;
      { "AM", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_INUTILIZACAO,      "https://homnfe.sefaz.am.gov.br/services2/services/NfeInutilizacao2" }, ;
      { "AM", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_RECEPCAO,          "https://homnfe.sefaz.am.gov.br/services2/services/NfeRecepcao2" }, ;
      { "AM", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_RECEPCAOEVENTO,    "https://homnfe.sefaz.am.gov.br/services2/services/RecepcaoEvento" }, ;
...
E a escolha:

Código: Selecionar todos

   nPos := AScan( aList, { | e | cUF == e[ 1 ] .AND. cAmbiente == e[ 2 ] .AND. nWsServico == e[ 3 ] } )
   cUrl := iif( nPos == 0, "", aList[ nPos, 4 ] )
   IF nWsServico == WS_NFE_CONSULTACADASTRO .AND. cUF $ "AC,RN,PB,SC"
      cUrl := SoapUrlNfe( "SVRS", cAmbiente, nWsServico )
   ENDIF
   DO CASE
   CASE ! Empty( cUrl )
   CASE cUf $ "AC,AL,AP,DF,ES,PB,RJ,RN,RO,RR,SC,SE,TO"
      cURL := SoapURLNFe( "SVRS", cAmbiente, nWsServico )
   CASE cUf $ "MA,PA,PI"
      cURL := SoapUrlNFe( "SVAN", cAmbiente, nWsServico )
   ENDCASE

   RETURN cUrl
Acho que simplificou um pouco.

E no caso da NFConsumidor, onde tem UF que pode usar mesmo endereço de NFE:
E não estiver na lista, pesquisa o endereço de NFE.

Código: Selecionar todos

      { "SVRS", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_RETAUTORIZACAO,     "https://nfce-homologacao.svrs.rs.gov.br/ws/NfeRetAutorizacao/NFeRetAutorizacao.asmx" }, ;
      { "SVRS", WS_AMBIENTE_HOMOLOGACAO, WS_NFE_STATUSSERVICO,      "https://nfce-homologacao.svrs.rs.gov.br/ws/NfeStatusServico/NfeStatusServico2.asmx" } }

   nPos := AScan( aList, { | e | cUF == e[ 1 ] .AND. cAmbiente == e[ 3 ] .AND. nWsServico == e[ 4 ] } )
   cUrl := iif( nPos == 0, "", aList[ nPos, 4 ] )
   IF Empty( cUrl )
      cUrl := SoapUrlNFe( cUF, cAmbiente, nWsServico )
   ENDIF

  RETURN cUrl
Inicialmente tinha colocado a versão no array, mas depois criei rotina própria pra NFE 4.00
Com certeza é só PRËVIA da 4.00, NÃO EXISTE como testar ainda.

Código: Selecionar todos

STATIC FUNCTION SoapUrlNfe4( cUF, cAmbiente, nWsServico )

   LOCAL cUrl := ""
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mudança na SefazClass

Mensagem por JoséQuintas »

Acabei esquecendo de avisar....
Nas mudanças só errei um nome de variável da classe, como -w3 -es2 não faz checagem em nomes de métodos/variáveis, acabou passando NFCE ao invés de cNFCE.


A propósito.... alterei a alteração anterior....rs

Foi uma forma interessante de reduzir fonte.
Tinha lá a lista de webservices, 500 linhas de lista.... rs...
aList := { ;
{ "SP", "emissão", "sefaz" }, ;
...
{ "RJ", "emissão", "sefaz" } }
Transferi tudo pra um arquivo CH.
#define SEFAZ_URL_NFE := { ;
{ "SP", "emissão", "sefaz" }, ;
...
{ "RJ", "emissão", "sefaz" } }
#define SEFAZ_URL_MDFE...
#define SEFAZ_URL_CTE...
E pronto.
O fonte ficou 500 linhas menos poluído.... rs

A alteração anterior, agrupando tudo num único array, acabou sugerindo esta alteração atual.

Pra quem não entendeu qual é a ÚNICA complicação de tudo isso de NFE, CTE, MDFE, NFCE, e bumba-lelê, é só olhar a lista de endereços de internet envolvidos.
E lembrando que essa lista ainda é parcial, e na NFE 4.0 deve aumentar, porque mais UFs vão ter endereço próprio, principalmente por causa da NFCe.

https://github.com/JoseQuintas/sefazcla ... azclass.ch
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder