Skip to content

Commit

Permalink
Rotinas pra pegar dados de chave, CTE evento Desacordo
Browse files Browse the repository at this point in the history
  • Loading branch information
JoseQuintas committed Feb 12, 2018
1 parent 3ca0b0a commit 97478d2
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 67 deletions.
65 changes: 50 additions & 15 deletions source/ze_sefazclass.prg
Expand Up @@ -61,6 +61,7 @@ CREATE CLASS SefazClass
METHOD CTeConsultaRecibo( cRecibo, cUF, cCertificado, cAmbiente )
METHOD CTeEventoCancela( cChave, nSequencia, nProt, xJust, cCertificado, cAmbiente )
METHOD CTeEventoCarta( cChave, nSequencia, aAlteracoes, cCertificado, cAmbiente )
METHOD CTeEventoDesacordo( cChave, nSequencia, cObs, cCertificado, cAmbiente )
METHOD CTeGeraAutorizado( cXmlAssinado, cXmlProtocolo )
METHOD CTeGeraEventoAutorizado( cXmlAssinado, cXmlProtocolo )
METHOD CTeInutiliza( cAno, cCnpj, cMod, cSerie, cNumIni, cNumFim, cJustificativa, cUF, cCertificado, cAmbiente )
Expand Down Expand Up @@ -122,7 +123,7 @@ METHOD BpeConsultaProtocolo( cChave, cCertificado, cAmbiente ) CLASS SefazClass
::cXmlEnvio += XmlTag( "xServ", "CONSULTAR" )
::cXmlEnvio += XmlTag( "chBPe", cChave )
::cXmlEnvio += [</conssitBPe>]
IF Substr( cChave, 21, 2 ) != "63"
IF DfeModFis( cChave ) != "63"
::cXmlRetorno := "*ERRO* Chave não se refere a BPE"
ELSE
::XmlSoapPost()
Expand Down Expand Up @@ -153,7 +154,7 @@ METHOD CTeConsultaProtocolo( cChave, cCertificado, cAmbiente ) CLASS SefazClass
::cXmlEnvio += XmlTag( "xServ", "CONSULTAR" )
::cXmlEnvio += XmlTag( "chCTe", cChave )
::cXmlEnvio += [</consSitCTe>]
IF ! Substr( cChave, 21, 2 ) $ "57,67"
IF ! DfeModFis( cChave ) $ "57,67"
::cXmlRetorno := "*ERRO* Chave não se refere a CTE"
ELSE
::XmlSoapPost()
Expand Down Expand Up @@ -191,7 +192,7 @@ METHOD CTeEventoCancela( cChave, nSequencia, nProt, xJust, cCertificado, cAmbien
::cXmlDocumento += [<infEvento Id="ID110111] + cChave + StrZero( nSequencia, 2 ) + [">]
::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) )
::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente )
::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) )
::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) )
::cXmlDocumento += XmlTag( "chCTe", cChave )
::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml() )
::cXmlDocumento += XmlTag( "tpEvento", "110111" )
Expand Down Expand Up @@ -226,7 +227,7 @@ METHOD CTeEventoCarta( cChave, nSequencia, aAlteracoes, cCertificado, cAmbiente
::cXmlDocumento += [<infEvento Id="ID110110] + cChave + StrZero( nSequencia, 2 ) + [">]
::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) )
::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente )
::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) )
::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) )
::cXmlDocumento += XmlTag( "chCTe", cChave )
::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml( , ,.F.) )
::cXmlDocumento += XmlTag( "tpEvento", "110110" )
Expand Down Expand Up @@ -265,6 +266,40 @@ METHOD CTeEventoCarta( cChave, nSequencia, aAlteracoes, cCertificado, cAmbiente

RETURN ::cXmlRetorno

METHOD CTeEventoDesacordo( cChave, nSequencia, cObs, cCertificado, cAmbiente ) CLASS SefazClass

hb_Default( @nSequencia, 1 )

::Setup( ::UFSigla( Substr( cChave, 1, 2 ) ), cCertificado, cAmbiente, WS_CTE_RECEPCAOEVENTO )

::cXmlDocumento := [<eventoCTe versao="] + ::cVersao + [" ] + WS_XMLNS_CTE + [>]
::cXmlDocumento += [<infEvento Id="ID110110] + cChave + StrZero( nSequencia, 2 ) + [">]
::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) )
::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente )
::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) )
::cXmlDocumento += XmlTag( "chCTe", cChave )
::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml( , ,.F.) )
::cXmlDocumento += XmlTag( "tpEvento", "110110" )
::cXmlDocumento += XmlTag( "nSeqEvento", LTrim( Str( nSequencia, 4 ) ) )
::cXmlDocumento += [<detEvento versaoEvento="] + ::cVersao + [">]
::cXmlDocumento += [<evPrestDesacordo>]
::cXmlDocumento += XmlTag( "descEvento", "Prestacao do Servico em Desacordo" )
::cXmlDocumento += XmlTag( "indDesacordoOper", "" )
::cXmlDocumento += XmlTag( "xOBS", cObs )
::cXmlDocumento += [</evPrestDesacordo>]
::cXmlDocumento += [</detEvento>]
::cXmlDocumento += [</infEvento>]
::cXmlDocumento += [</eventoCTe>]
IF ::AssinaXml() == "OK"
::cXmlEnvio := ::cXmlDocumento
::XmlSoapPost()
::cXmlProtocolo := ::cXmlRetorno
::CTeGeraEventoAutorizado( ::cXmlDocumento, ::cXmlProtocolo )
ENDIF

RETURN ::cXmlRetorno


METHOD CTeGeraAutorizado( cXmlAssinado, cXmlProtocolo ) CLASS SefazClass

cXmlAssinado := iif( cXmlAssinado == NIL, ::cXmlDocumento, cXmlAssinado )
Expand Down Expand Up @@ -410,7 +445,7 @@ METHOD MDFeConsultaProtocolo( cChave, cCertificado, cAmbiente ) CLASS SefazClass
::cXmlEnvio += XmlTag( "xServ", "CONSULTAR" )
::cXmlEnvio += XmlTag( "chMDFe", cChave )
::cXmlEnvio += [</consSitMDFe>]
IF Substr( cChave, 21, 2 ) != "58"
IF DfeModFis( cChave ) != "58"
::cXmlRetorno := "*ERRO* Chave não se refere a MDFE"
ELSE
::XmlSoapPost()
Expand Down Expand Up @@ -481,7 +516,7 @@ METHOD MDFeEventoCancela( cChave, nSequencia, nProt, xJust, cCertificado, cAmbie
::cXmlDocumento += [<infEvento Id="ID110111] + cChave + StrZero( nSequencia, 2 ) + [">]
::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) )
::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente )
::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) )
::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) )
::cXmlDocumento += XmlTag( "chMDFe", cChave )
::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml() )
::cXmlDocumento += XmlTag( "tpEvento", "110111" )
Expand Down Expand Up @@ -514,7 +549,7 @@ METHOD MDFeEventoEncerramento( cChave, nSequencia , nProt, cUFFim , cMunCarrega
::cXmlDocumento += [<infEvento Id="ID110112] + cChave + StrZero( nSequencia, 2 ) + [">]
::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) )
::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente )
::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) )
::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) )
::cXmlDocumento += XmlTag( "chMDFe", cChave )
::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml() )
::cXmlDocumento += XmlTag( "tpEvento", "110112" )
Expand Down Expand Up @@ -549,7 +584,7 @@ METHOD MDFeEventoInclusaoCondutor( cChave, nSequencia, cNome, cCpf, cCertificado
::cXmlDocumento += [<infEvento Id="ID110112] + cChave + StrZero( nSequencia, 2 ) + [">]
::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) )
::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente )
::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) )
::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) )
::cXmlDocumento += XmlTag( "chMDFe", cChave )
::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml() )
::cXmlDocumento += XmlTag( "tpEvento", "110114" )
Expand Down Expand Up @@ -702,7 +737,7 @@ METHOD NFeConsultaProtocolo( cChave, cCertificado, cAmbiente ) CLASS SefazClass
::cXmlEnvio += XmlTag( "xServ", "CONSULTAR" )
::cXmlEnvio += XmlTag( "chNFe", cChave )
::cXmlEnvio += [</consSitNFe>]
IF ! Substr( cChave, 21, 2 ) $ "55,65"
IF ! DfeModFis( cChave ) $ "55,65"
::cXmlRetorno := "*ERRO* Chave não se refere a NFE"
ELSE
::XmlSoapPost()
Expand Down Expand Up @@ -749,7 +784,7 @@ METHOD NFeEventoCarta( cChave, nSequencia, cTexto, cCertificado, cAmbiente ) CLA
::cXmlDocumento += [<infEvento Id="ID110110] + cChave + StrZero( nSequencia, 2 ) + [">]
::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) )
::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente )
::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) )
::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) )
::cXmlDocumento += XmlTag( "chNFe", cChave )
::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml() )
::cXmlDocumento += XmlTag( "tpEvento", "110110" )
Expand All @@ -772,7 +807,7 @@ METHOD NFeEventoCarta( cChave, nSequencia, cTexto, cCertificado, cAmbiente ) CLA
::cXmlDocumento += [</evento>]
IF ::AssinaXml() == "OK"
::cXmlEnvio := [<envEvento versao="] + WS_VERSAO_NFEEVENTO + [" xmlns="http://www.portalfiscal.inf.br/nfe">]
::cXmlEnvio += XmlTag( "idLote", Substr( cChave, 26, 9 ) ) // usado numero da nota
::cXmlEnvio += XmlTag( "idLote", DfeNumero( cChave ) ) // usado numero da nota
::cXmlEnvio += ::cXmlDocumento
::cXmlEnvio += [</envEvento>]
::XmlSoapPost()
Expand All @@ -792,7 +827,7 @@ METHOD NFeEventoCancela( cChave, nSequencia, nProt, xJust, cCertificado, cAmbien
::cXmlDocumento += [<infEvento Id="ID110111] + cChave + StrZero( nSequencia, 2 ) + [">]
::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) )
::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente )
::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) )
::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) )
::cXmlDocumento += XmlTag( "chNFe", cChave )
::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml() )
::cXmlDocumento += XmlTag( "tpEvento", "110111" )
Expand All @@ -807,7 +842,7 @@ METHOD NFeEventoCancela( cChave, nSequencia, nProt, xJust, cCertificado, cAmbien
::cXmlDocumento += [</evento>]
IF ::AssinaXml() == "OK"
::cXmlEnvio := [<envEvento versao="] + WS_VERSAO_NFEEVENTO + [" ] + WS_XMLNS_NFE + [>]
::cXmlEnvio += XmlTag( "idLote", Substr( cChave, 26, 9 ) ) // usado numero da nota
::cXmlEnvio += XmlTag( "idLote", DfeNumero( cChave ) ) // usado numero da nota
::cXmlEnvio += ::cXmlDocumento
::cXmlEnvio += [</envEvento>]
::XmlSoapPost()
Expand Down Expand Up @@ -836,7 +871,7 @@ METHOD NFeEventoManifestacao( cChave, nSequencia, xJust, cCodigoEvento, cCertifi
::cXmlDocumento += [<infEvento Id="ID] + cCodigoEvento + cChave + StrZero( nSequencia, 2 ) + [">]
::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) )
::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente )
::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) )
::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) )
::cXmlDocumento += XmlTag( "chNFe", cChave )
::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml() )
::cXmlDocumento += XmlTag( "tpEvento", cCodigoEvento )
Expand All @@ -852,7 +887,7 @@ METHOD NFeEventoManifestacao( cChave, nSequencia, xJust, cCodigoEvento, cCertifi
::cXmlDocumento += [</evento>]
IF ::AssinaXml() == "OK"
::cXmlEnvio := [<envEvento versao="] + WS_VERSAO_NFEEVENTO + [" ] + WS_XMLNS_NFE + [>]
::cXmlEnvio += XmlTag( "idLote", Substr( cChave, 26, 9 ) ) // usado numero da nota
::cXmlEnvio += XmlTag( "idLote", DfeNumero( cChave ) ) // usado numero da nota
::cXmlEnvio += ::cXmlDocumento
::cXmlEnvio += [</envEvento>]
::XmlSoapPost()
Expand Down
6 changes: 3 additions & 3 deletions source/ze_sefazdadfe.prg
Expand Up @@ -158,15 +158,15 @@ METHOD ToPDF( cXmlDocumento, cFilePDF, cXmlAuxiliar ) CLASS hbNFeDaGeral
cXmlAuxiliar := MemoRead( cXmlAuxiliar )
ENDIF
DO CASE
CASE "<infCte " $ cXmlDocumento ; oDanfe := hbNFeDaCte():New()
CASE "<infMDFe " $ cXmlDocumento .AND. "<MDFe " $ cXmlDocumento ; oDanfe := hbNFeDaMDFe():New()
CASE "<infCte " $ cXmlDocumento .AND. "<CTe " $ cXmlDocumento ; oDanfe := hbNFeDaCte():New()
CASE "<infNFe " $ cXmlDocumento .AND. "<NFe " $ cXmlDocumento .AND. XmlNode( XmlNode( cXmlDocumento, "ide" ), "mod" ) == "55" ; oDanfe := hbNFeDaNFe():New()
CASE "<infNFe " $ cXmlDocumento .AND. "<NFe " $ cXmlDocumento .AND. XmlNode( XmlNode( cXmlDocumento, "ide" ), "mod" ) == "65" ; oDanfe := hbNFeDaNFCe():New()
CASE "<infMDFe " $ cXmlDocumento .AND. "<MDFe " $ cXmlDocumento ; oDanfe := hbNFeDaMDFe():New()
CASE "<infEvento " $ cXmlDocumento ; oDanfe := hbNFeDaEvento():New()
OTHERWISE
RETURN "XML inválido"
ENDCASE
oDanfe:cLogoFile := ::cLogoFile
oDanfe:cLogoFile := ::cLogoFile
oDanfe:cDesenvolvedor := ::cDesenvolvedor

RETURN oDanfe:ToPDF( cXmlDocumento, cFilePDF, cXmlAuxiliar )
Expand Down
8 changes: 4 additions & 4 deletions source/ze_sefazdaevento.prg
Expand Up @@ -104,13 +104,13 @@ METHOD BuscaDadosXML() CLASS hbnfeDaEvento
::aInfEvento := XmlToHash( XmlNode( ::cXmlEvento, "retEvento" ), { "cStat", "xMotivo", "dhRegEvento", "nProt" }, ::aInfEvento )
ENDIF
::aIde := hb_Hash()
::aIde[ "mod" ] := SubStr( ::cChaveEvento, 21, 2 ) // XmlNode( cIde, "mod" )
::aIde[ "mod" ] := DfeModFis( ::cChaveEvento ) // XmlNode( cIde, "mod" )
::aIde[ "serie" ] := SubStr( ::cChaveEvento, 23, 3 ) // XmlNode( cIde, "serie" )
::aIde[ "nNF" ] := SubStr( ::cChaveEvento, 26, 9 ) // XmlNode( cIde, "nNF" )
::aIde[ "nNF" ] := DfeNumero( ::cChaveEvento ) // XmlNode( cIde, "nNF" )
::aIde[ "dhEmi" ] := XmlNode( XmlNode( ::cXmlDocumento, "ide" ), "dhEmi" )

::aEmit := XmlToHash( XmlNode( ::cXmlDocumento, "emit" ), { "xNome", "xFant", "xLgr", "nro", "xBairro", "cMun", "xMun", "UF", "CEP", "fone", "IE" } )
::aEmit[ "CNPJ" ] := SubStr( ::cChaveEvento, 7, 14 )
::aEmit[ "CNPJ" ] := DfeEmitente( ::cChaveEvento )
::aEmit[ "xNome" ] := XmlToString( ::aEmit[ "xNome" ] )
::cTelefoneEmitente := ::FormataTelefone( ::aEmit[ "fone" ] )

Expand Down Expand Up @@ -305,7 +305,7 @@ METHOD Cabecalho() CLASS hbnfeDaEvento
::DrawTexto( 341, ::nLinhaPdf, 390, Nil, "SERIE", HPDF_TALIGN_CENTER, ::oPDFFontNormal, 6 )
::DrawTexto( 341, ::nLinhaPDF -6, 390, Nil, ::aIde[ "serie" ], HPDF_TALIGN_CENTER, ::oPDFFontBold, 11 )

IF Substr( ::cChaveEvento, 21, 2 ) == "57" // At( "retEventoCTe",::cXmlEvento) > 0
IF DfeModFis( ::cChaveEvento ) == "57" // At( "retEventoCTe",::cXmlEvento) > 0
// NUMERO CTE
::DrawTexto( 391, ::nLinhaPdf, 480, Nil, "NUMERO DO CT-e", HPDF_TALIGN_CENTER, ::oPDFFontNormal, 6 )
::DrawTexto( 391, ::nLinhaPDF -6, 480, Nil, SubStr( StrZero( Val( ::aIde[ "nNF" ] ), 9 ), 1, 3 ) + "." + SubStr( StrZero( Val( ::aIde[ "nNF" ] ), 9 ), 4, 3 ) + "." + SubStr( StrZero( Val( ::aIde[ "nNF" ] ), 9 ), 7, 3 ), HPDF_TALIGN_CENTER, ::oPDFFontBold, 11 )
Expand Down
6 changes: 3 additions & 3 deletions source/ze_sefazdanfce.prg
Expand Up @@ -41,7 +41,7 @@ CREATE CLASS hbNFeDaNFCe INHERIT hbNFeDaGeral
VAR nItem INIT 0
VAR aICMSTotal
VAR aFPags INIT {}
VAR cChaveAcesso
VAR cChave
VAR cQRCode
VAR aInfProt
VAR aInfAdic
Expand Down Expand Up @@ -96,7 +96,7 @@ METHOD BuscaDadosXML() CLASS hbNFeDaNFCe
::aICMSTotal := XmlToHash( XmlNode( ::cXml, "ICMSTot" ), { "vProd", "vFrete", "vSeg", "vOutro", "vDesc", "vNF", "vTotTrib" } )
::aInfProt := XmlToHash( XmlNode( ::cXml, "infProt" ), { "nProt", "dhRecbto" } )
::aInfAdic := XmlToHash( XmlNode( ::cXml, "infAdic" ), { "infAdFisco", "infCpl" } )
::cChaveAcesso := AllTrim( Substr( XmlElement( ::cXml, "Id" ), 4 ) )
::cChave := AllTrim( Substr( XmlElement( ::cXml, "Id" ), 4 ) )
::cQRCode := XmlToString( XmlNode( XmlNode( ::cXml, "infNFeSupl" ), "qrCode" ) )

// Produtos / Servicos
Expand Down Expand Up @@ -435,7 +435,7 @@ METHOD ConsultaChaveAcesso() CLASS hbNFeDaNFCe
ENDIF

::DrawTexto( 6, ::nLinhaPDF - 10, 220, NIL, "CHAVE DE ACESSO", HPDF_TALIGN_CENTER, ::oPDFFontBold, 8 )
::DrawTexto( 6, ::nLinhaPDF - 20, 220, NIL, Transform( ::cChaveAcesso, "@R 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999" ), HPDF_TALIGN_CENTER, ::oPDFFontNormal, 8 )
::DrawTexto( 6, ::nLinhaPDF - 20, 220, NIL, Transform( ::cChave, "@R 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999" ), HPDF_TALIGN_CENTER, ::oPDFFontNormal, 8 )
::DrawTexto( 6, ::nLinhaPDF - 25, 220, NIL, Replicate( "-", 80 ), HPDF_TALIGN_CENTER, ::oPDFFontNormal, 8 )
::nLinhaPDF -= 25

Expand Down

0 comments on commit 97478d2

Please sign in to comment.