*!* 15.03.2010 *!* marius.mutu *!* VerificareCod.Vies - iau direct din pagina web in loc de serviciu web (nu mai merge) *!* 07.04.2011 *!* marius.mutu *!* adaugare verificarecod.InfoMfin2Array, ParseTable *!* modificat Verificarecod.MFIN - alta aranjare in pagina a tabelului cu date de la mfinante.ro *!* s-a modificat adresa de la mfinante.ro *!* 12.04.2011 *!* marius.mutu *!* verificarecod.validare_cif - intorc .T. pentru CIF-urile <> RO (nu am algoritm) *!* tratare VIES alte tari din UE in afara de RO *!* 20.01.2012 *!* marius.mutu *!* VERIFICARE_CIF, MFIN - Taxa pe valoarea adaugata (data luarii in evidenta) + datatvamfin, platitortvamfin *!* 27.01.2012 *!* marius.mutu *!* VerificareCod.Init - nu mai este nevoie de tlMFINROMFAST, tlVIESROMFAST ca parametri - se citesc din settings.ini *!* 28.11.2012 *!* marius.mutu *!* verificare_cif, mfin - Se verifica si starea pentru un cod fiscal de pe mfinante.ro *!* s-au adaugat proprietati pentru captcha, si o singura sesiune xmlhttp *!* 04.12.2014 *!* marius.mutu *!* MFIN - se foloseste GET in loc de POST - restrictii puse de MF *!* 27.02.2017 *!* marius.mutu *!* ANAF_SincronWebService_PlatitorTva *!* se incearca prima oara cu inHTTP.winHTTPrequest.5.1 *!* 10.01.2018 *!* marius.mutu *!* VerificareANAF - completare stare TVA Incasare, Split TVA, Inactiv *!* 20.07.2020 *!* marius.mutu *!* ANAF_SincronWebService_PlatitorTva api v4 *!* 06.01.2021 *!* marius.mutu *!* ANAF_SincronWebService_PlatitorTva api v5 +nrRegCom *!* 24.04.2023 *!* marius.mutu *!* ANAF_SincronWebService_PlatitorTva api v8 *!* 19.05.2025 *!* marius.mutu *!* ANAF_SincronWebService_PlatitorTva api v9 *!* http://ec.europa.eu/taxation_customs/vies/viesquer.do *!* http://localhost/contafinupdate/verificarecod.aspx/verificarecod/verificare/CIF/1879855/MFIN *!* http://localhost/contafinupdate/verificarecod.aspx/verificarecod/verificare/CNP/1810228134187 *!* http://localhost:1512/WebRoot/codfiscaldebug.aspx/verificarecod/verificare/CIF/1879855/1 *!* http://localhost/update/codfiscal.aspx/verificarecod/validare/CIF/1879855 *!* http://localhost/update/codfiscal.aspx/verificarecod/validare/CNP/1810228134187 #Define TIP_CNP 1 #Define TIP_CIF 2 #Define TIP_IBAN 3 #Define TIP_CC 4 #Define TIP_ISBN 5 #Define TIP_NIF 6 #Define CRLF Chr(13) + Chr(10) #Define CR Chr(13) Clear Local lcDir, lcPath, llVIESURL, lcRomfastURL, loVerificare Local llMFINURL, lcMfinanteURL, lcMfinanteParams, I Local llValid, lcRegCom, llPlatitorTVA lcDir = Addbs(Justpath(Sys(16, 0))) lcDir = Left(lcDir, Rat('\', lcDir, 2) ) *!* MESSAGEBOX(lcDir) Set Default To (lcDir) lcPath = lcDir + 'controllers;' + ; lcDir + 'programe;' + ; lcDir + 'utility;' Set Path To (lcPath) Set Procedure To regex.prg Additive *!* strPattern = "[^A-Za-z 0-9 \.,\?'""!@#\$%\^&\*\(\)-_=\+;:<>\/\\\|\}\{\[\]`~]*" Create Cursor cTeste (test c(200), rezultat L, mesaj c(250)) If .T. *!* TREBUIE OPTIUNI - VARIABILE PUBLICE gcVIESDotNet, gcVIESURL lcRomfastURL = "http://localhost/update/verificarecod.aspx/verificarecod/verificare/CIF/|CIF|/|TIP|" *!* lcMfinanteURL = "http://www.mfinante.ro/contribuabili/link.jsp?body=/cod.do" *!* lcMfinanteURL = "http://apt1.mfinante.ro/site/contribuabili/link.jsp?body=/cod.do" *!* lcMfinanteParams = "cod=|CIF|" lcMfinanteURL = "http://www.mfinante.ro/infocodfiscal.html" lcMfinanteParams = "cod=|CIF|&captcha=|CAPTCHA|&B1=VIZUALIZARE" For I = 1 To 2 llVIESURL = I = 1 llMFINURL = I = 1 ? ?'------------------------------------------' If I = 1 ?'* VERIFICARE CIF PE ROMFAST' Else ?'* VERIFICARE PE MFINANTE SI CU DLL DIRECT PE VIES' Endif ? ?'* ROMFAST SRL - VALIDARE', I llValid = .T. lcRegCom = '' llPlatitorTVA = .F. test_verificare_cif('1879855', '', llVIESURL, llMFINURL, lcRomfastURL, lcMfinanteURL, lcMfinanteParams, llValid, lcRegCom, llPlatitorTVA) ? ?'* ROMFAST SRL - VIES', I llValid = .T. lcRegCom = '' llPlatitorTVA = .T. test_verificare_cif('1879855', 'VIES', llVIESURL, llMFINURL, lcRomfastURL, lcMfinanteURL, lcMfinanteParams, llValid, lcRegCom, llPlatitorTVA) ? ?'* ROMFAST SRL - MFIN', I llValid = .T. lcRegCom = 'J13/626/1991' llPlatitorTVA = .F. test_verificare_cif('1879855', 'MFIN', llVIESURL, llMFINURL, lcRomfastURL, lcMfinanteURL, lcMfinanteParams, llValid, lcRegCom, llPlatitorTVA) ? ?'* ROMFAST SRL - MFINVIES', I llValid = .T. lcRegCom = 'J13/626/1991' llPlatitorTVA = .T. test_verificare_cif('1879855', 'MFINVIES', llVIESURL, llMFINURL, lcRomfastURL, lcMfinanteURL, lcMfinanteParams, llValid, lcRegCom, llPlatitorTVA) ? ?'* COD INVALID - VALIDARE', I llValid = .F. lcRegCom = '' llPlatitorTVA = .F. test_verificare_cif('187985X', 'MFINVIES', llVIESURL, llMFINURL, lcRomfastURL, lcMfinanteURL, lcMfinanteParams, llValid, lcRegCom, llPlatitorTVA) Endfor && i Endif ? ?'------------------------------------------' ?'* VALIDARE CIF' loVerificare = Createobject("verificarecod") test_cif('7320118', .T.) test_cif('RO7320118', .T.) test_cif('RO 7320118', .T.) test_cif('R 7320118', .T.) test_cif('R7320118', .T.) test_cif('7320117', .F.) test_cif('RO7320117', .F.) test_cif('', .F.) test_cif('3654392', .F.) test_cif('14699589', .T.) test_cif('11071295', .T.) ? ?'------------------------------------------' ?'VALIDARE CNP' ? test_cnp('1810228134187', .T.) test_cnp('181022813418', .F.) Select cTeste Browse *!* TESTEAZA FUNCTIA DE VALIDARE CIF Function test_cif Lparameters tcCIF, tuValoareCorect Local luRezultat, lcMesaj Local luReturn luReturn = .F. luRezultat = VALIDARE_CIF(tcCIF) lcMesaj = 'VALIDARE_CIF(' + tcCIF + ') ' + Transform(luRezultat) + ' (' + Transform(tuValoareCorect) + ')' If luRezultat <> tuValoareCorect lcMesaj = 'ERR ' + m.lcMesaj luReturn = .F. Else lcMesaj = 'OK ' + m.lcMesaj luReturn = .T. Endif ?m.lcMesaj If Used('cTeste') Insert Into cTeste (test, rezultat, mesaj) Values('VALIDARE CIF', luReturn, lcMesaj) Endif Return luReturn Endfunc && TEST_CIF *!* TESTEAZA FUNCTIA DE VALIDARE CNP Function test_cnp Lparameters tcCNP, tuValoareCorect Local luRezultat, lcMesaj Local luReturn luReturn = .F. luRezultat = VALIDARE_CNP(tcCNP) lcMesaj = 'VALIDARE_CNP(' + tcCNP + ') ' + Transform(luRezultat) + ' (' + Transform(tuValoareCorect) + ')' If luRezultat <> tuValoareCorect lcMesaj = 'ERR ' + m.lcMesaj luReturn = .F. Else lcMesaj = 'OK ' + m.lcMesaj luReturn = .T. Endif ?m.lcMesaj If Used('cTeste') Insert Into cTeste (test, rezultat, mesaj) Values('VALIDARE CNP', luReturn, lcMesaj) Endif Return luReturn Endfunc && TEST_CNP *!* TESTEAZA FUNCTIA DE VERIFICARE CIF Function test_verificare_cif Lparameters tcCIF, tcTipInterogare, tlVIESURL, tlMFINURL, tcRomfastURL, tcMfinanteURL, tcMfinanteParams, tlValid, tcRegCom, tlPlatitorTVA Local lcMesaj, llSucces, lcEroare Local loVerificare, llValid, lcRegCom, llPlatitorTVA Local lcXML, loEx As Exception Local luReturn luReturn = .F. llSucces = .F. Try loVerificare = Createobject("verificarecod", tlVIESURL, tlMFINURL, tcRomfastURL, tcMfinanteURL, tcMfinanteParams) lcXML = loVerificare.verificare('CIF', tcCIF, tcTipInterogare) llValid = loVerificare.oEntitate.Valid lcRegCom = loVerificare.oEntitate.regcom llPlatitorTVA = loVerificare.oEntitate.PlatitorTVA llSucces = .T. Catch To loEx lcEroare = loEx.Message Endtry If llSucces lcMesaj = 'VERIFICARE_CIF ' + tcCIF + ' VALID: ' + Transform(llValid) + '(' + Transform(tlValid) + ')' + ; ' REGCOM: ' + Alltrim(Transform(lcRegCom)) + '(' + Transform(tcRegCom) + ')' + ; ' PLATITOR TVA: ' + Transform(llPlatitorTVA) + '(' + Transform(tlPlatitorTVA) + ')' Else lcMesaj = 'VERIFICARE_CIF ' + tcCIF + ' ' + lcEroare Endif If !llSucces Or (tlValid <> llValid Or tcRegCom <> lcRegCom Or tlPlatitorTVA <> tlPlatitorTVA) lcMesaj = 'ERR ' + m.lcMesaj luReturn = .F. Else lcMesaj = 'OK ' + m.lcMesaj luReturn = .T. Endif ?m.lcMesaj If Used('cTeste') Insert Into cTeste (test, rezultat, mesaj) Values('VERIFICARE CIF', luReturn, lcMesaj) Endif Return luReturn Endfunc && TEST_VERIFICARE_CIF *============================= *!* verifica lungimea <= 10 caractere *============================= *!* VALIDARE CIF *!* tcCIF - codul fiscal *!* toVerificare - optional in cazul in care am multe verificari sa nu se se instantiatieze obiectul la fiecare verificare Function VALIDARE_CIF Lparameters tcCIF, toVerificare Local loVerificare, lcCod, llReturn If Type('tcCIF') <> 'C' lcCod = '' Else lcCod = tcCIF Endif If Type('toVerificare') = 'O' And Pemstatus(toVerificare, 'VALIDARE', 5) loVerificare = toVerificare Else loVerificare = Createobject("verificarecod") Endif llReturn = loVerificare.validare('CIF', lcCod) Return llReturn Endfunc && VALIDARE_CIF *============================= *!* VERIFICARE_PLATITORTVA *!* tcCIF - codul fiscal *!* toVerificare - optional in cazul in care am multe verificari sa nu se se instantiatieze obiectul la fiecare verificare Function VERIFICARE_PLATITORTVA Lparameters tcCIF, toVerificare Local loVerificare, lcCod, llReturn Local llReturn If Type('tcCIF') <> 'C' lcCod = '' Else lcCod = tcCIF Endif If Type('toVerificare') = 'O' And Pemstatus(toVerificare, 'VALIDARE', 5) loVerificare = toVerificare Else loVerificare = Createobject("verificarecod") Endif llReturn = loVerificare.verificare('CIF', lcCod) Return llReturn Endfunc && VALIDARE_CIF *============================= *!* VALIDARE CNP *!* tcCIF - CNP *!* toVerificare - optional in cazul in care am multe verificari sa nu se se instantiatieze obiectul la fiecare verificare Function VALIDARE_CNP Lparameters tcCNP, toVerificare Local loVerificare, lcCod, llReturn If Type('tcCNP') <> 'C' lcCod = '' Else lcCod = tcCNP Endif If Type('toVerificare') = 'O' And Pemstatus(toVerificare, 'VALIDARE', 5) loVerificare = toVerificare Else loVerificare = Createobject("verificarecod") Endif llReturn = loVerificare.validare('CNP', lcCod) Return llReturn Endfunc && VALIDARE_CNP *==================================== Define Class VerificareCod As Custom lVIESURL = .F. && .T. ROMFAST URL, .F. DOT NET DIRECT VIES lMFINURL = .F. && .T. ROMFAST URL, .F. www.mfinante.ro cRomfastURL = "http://83.103.197.79:3002/contafinupdate/verificarecod.aspx/verificarecod/verificare/CIF/|CIF|/|TIP|" && url catre Romfast pentru verificare MFIN, VIES *!* cMfinanteURL = "http://www.mfinante.ro/contribuabili/link.jsp?body=/cod.do" && url catre www.mfinante.ro *!* cMfinanteParams = "cod=|CIF|" cMfinanteURL = "" && "http://voes.mfinante.ro/codfiscal/codfiscal.html" && url catre www.mfinante.ro cMfinanteParams = "" && [cod=|CIF|&cap=null&B1=VIZUALIZARE] cMFINURL = '' && url catre Romfast pentru verificare informatii cod fiscal oEntitate = Null cMfinCaptcha = "" && codul CAPTCHA pentru verificarea codurilor fiscale pe mfinante oHTTP = Null *** se pare ca mfinante.ro are un bug - nu mai cere kaptcha la interogare directa si nu da mesajul "serverul este ocupat" la interogare rapida daca sunt sesiuni diferite lOneSession = .T. && oHTTP se retine pe instanta sau se creeaza oHTTP la fiecare interogare lCaptcha = .T. && se apeleaza Captcha de la mfinante, valabil doar pentru apelarea din program, nu de pe serverul romfast cMfinAnchorString = "AGENTUL ECONOMIC CU CODUL UNIC" && textul dupa care apare tabelul cu informatii MFIN cMfinNuExistaString = "NU EXISTA AGENT ECONOMIC CU ACEST COD FISCAL" lXMLHTTP = .F. && daca se foloseste xmlhttp pentru interogarea MFINANTE sau InternetExplorer.Application din luna 02/2017 nu mai merge apelul prin xmlhttp dDataAct = DATE() *================================= Procedure Init Lparameters tlVIESURL, tlMFINURL, tcRomfastURL, tcMfinanteURL, tcMfinanteParams This.cMfinanteURL = "http://www.mfinante.gov.ro/infocodfiscal.html" && url catre www.mfinante.ro This.cMfinanteParams = "cod=|CIF|&captcha=|CAPTCHA|&B1=VIZUALIZARE" *!* 27.01.2012 If Pcount() >= 2 And Type('goApi') = 'O' And Type('gcSettingsFile') = 'C' And !Empty(m.gcSettingsFile) lcMFINROMFAST = goAPI.GetProfileString(m.gcSettingsFile, [validare], "mfinromfast") lcVIESROMFAST = goAPI.GetProfileString(m.gcSettingsFile, [validare], "viesromfast") lcMFINROMFAST = Nvl(m.lcMFINROMFAST, '') lcVIESROMFAST = Nvl(m.lcVIESROMFAST, '') If !Inlist(m.lcMFINROMFAST, '.T.', '.F.') tlMFINURL = .T. Else tlMFINURL = &lcMFINROMFAST Endif If !Inlist(m.lcVIESROMFAST, '.T.', '.F.') tlVIESURL = .T. Else tlVIESURL = &lcVIESROMFAST Endif Endif && PCOUNT *!* 27.01.2012 ^ If Type('goApi') = 'O' And Type('gcSettingsFile') = 'C' And !Empty(m.gcSettingsFile) lcXMLHTTP = goAPI.GetProfileString(m.gcSettingsFile, [validare], "xmlhttp") lcXMLHTTP = Nvl(m.lcXMLHTTP, '') If !Inlist(m.lcXMLHTTP, '.T.', '.F.') llXMLHTTP = .F. Else llXMLHTTP = &lcXMLHTTP Endif This.lXMLHTTP = m.llXMLHTTP Endif This.lVIESURL = Iif(Type('tlVIESURL') = 'L', tlVIESURL, .F.) && default .F. pentru dll This.lMFINURL = Iif(Type('tlMFINURL') = 'L', tlMFINURL, .F.) && default .F. pentru www.mfinante.ro If Type('tcRomfastUrl') = 'C' And !Empty(tcRomfastURL) This.cRomfastURL = tcRomfastURL Endif If Type('tcMfinanteUrl') = 'C' And !Empty(tcMfinanteURL) This.cMfinanteURL = tcMfinanteURL Endif If Type('tcMfinanteParams') = 'C' And !Empty(tcMfinanteParams) This.cMfinanteParams = tcMfinanteParams Endif *!* 13.01.2012 If _vfp.StartMode = 0 This.cRomfastURL = Strtran(This.cRomfastURL, '83.103.197.79:3002', '10.0.20.122:81') Endif *!* 13.01.2012 ^ This.cMfinCaptcha = "" Endproc && Init Function Destroy Local loEx As Exception If Type('This.oHTTP') = 'O' And Pemstatus(This.oHTTP, 'visible', 5) Try This.oHTTP.Visible = .F. This.oHTTP.Quit This.oHTTP = Null Catch To loEx * Endtry Endif Endfunc && Destroy *================================= Function verificare Lparameters tcTip, tcCod, tcExtraParam1, tcExtraParam2, tcExtraParam3, tcExtraParam4, tcExtraParam5 Local lcTip, lcXML lcXML = '' lcTip = Iif(Type('tcTip') = 'C' And !Empty(tcTip), Upper(tcTip), 'CIF') This.Log('VERIFICARE ' + lcTip + ' ' + tcCod + ' ' + Transform(tcExtraParam1) + ' ' + Transform(tcExtraParam2) + ' ' + Transform(tcExtraParam3) + ' ' + Transform(tcExtraParam4) + ' ' + Transform(tcExtraParam5) ) Do Case Case lcTip = 'CNP' lcXML = This.VERIFICARE_CNP(tcCod) Case lcTip = 'CIF' lcXML = This.VERIFICARE_CIF(tcCod, tcExtraParam1, tcExtraParam2, tcExtraParam3, tcExtraParam4, tcExtraParam5) Otherwise lcXML = '' Endcase Return lcXML Endfunc && VERIFICARE *================================= Function XMLCursorToOBj Lparameters tcXML Local lcCursor, lcSelect, loReturn Local lcEroare, loEx loReturn = Null lcCursor = Sys(2015) lcSelect = Select() Try Xmltocursor(tcXML, lcCursor) Select (lcCursor) Scatter Name loReturn Catch To loEx lcEroare = 'XMLCursorToOBj ' + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) This.Log(m.lcEroare) Endtry Use In (Select(lcSelect)) Select (lcSelect) Return loReturn Endfunc && XMLCursorToOBj *================================= Function ISCIF Lparameters tcCod Local lcCod, llIsCIF llIsCIF = .F. lcCod = Iif(Type('tcCod') <> 'C', '', Alltrim(tcCod)) Do Case Case !Isdigit(lcCod) && Daca incepe cu o litera il consider COD FISCAL && ROXXX llIsCIF = .T. Case Len(lcCod) <= 10 llIsCIF = .T. Endcase Return llIsCIF Endfunc && IsCIF *================================= * VERIFICARE_CNP('1810228134187') Procedure VERIFICARE_CNP Lparameters tcCNP Local lcSelect, lcCNP, llSucces, loEx As Exception, lcEroare, llValid, lcXML lcXML = '' lcSelect = Select() lcCNP = Iif(Empty(tcCNP) Or Type('tcCNP') <> 'C', '', Alltrim(tcCNP)) lcEroare = '' Create Cursor cVerificareCod (Valid L, eroare c(250), cod c(100) Null) Cursortoxml("cVerificareCod", "lcXML", 1, 0, 0, "1") Select cVerificareCod Scatter Name This.oEntitate llSucces = .F. llValid = .F. Try llValid = This.validare('CNP', lcCNP) llSucces = .T. Catch To loEx lcEroare = 'VERIFICARE_CNP VALIDARE ' + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) This.Log(m.lcEroare) Endtry Try Insert Into cVerificareCod(Valid, eroare, cod) ; Values (llValid, lcEroare, lcCNP) Cursortoxml("cVerificareCod", "lcXML", 1, 0, 0, "1") Catch To loEx lcEroare = 'VERIFICARE_CNP XML ' + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) This.Log(m.lcEroare) Endtry Select cVerificareCod Go Top Scatter Name This.oEntitate Use In (Select('cVerificareCod')) Select (lcSelect) Return m.lcXML Endproc && VERIFICARE_CNP *================================= * VERIFICARE_CIF('1879855', ['VIES' | 'MFIN' | 'MFINVIES']) * valideaza CIF + aduna informatii de pe www.mfinante.ro + platitor tva de pe vies Procedure VERIFICARE_CIF Lparameters tcVerificareCod, tcTipInterogare, tdData, tcExtraParam3, tcExtraParam4, tcExtraParam5 Local lcVerificareCod, lcFirma, lcAdresa, lcJudet, lcRegCom, lcCodpostal, lcTelefon, lcFax, lcSelect, lcXML, llVies, llPlatitorTVA, llValid, lcCodTara, llRO, lcStare Local loEx As Exception Local lcMfinanteURL, lcMfinanteParams, lcRomfastURL, llMFINURL, loMFIN, loVIES, lcProcedura, llInterogareAnaf Local lStare, lcApart, lcBloc, lcDataTVAMFIN, lcEtaj, lcLocalitate, lcNr, lcScara, lcStrada Local llPlatitorTVAMFIN, lnSucces, llTVAIncasare, llSplitTVA, llInactiv, ldData Local lcTipInterogare, llInterogareVies, llInterogareMfin If Empty(tcTipInterogare) Or Type('tcTipInterogare') <> 'C' lcTipInterogare = '' Else lcTipInterogare = Upper(tcTipInterogare) ENDIF ldData = IIF(EMPTY(m.tdData) or TYPE('tdData') <> 'D', {}, m.tdData) llInterogareVies = 'VIES' $ lcTipInterogare llInterogareMfin = 'MFIN' $ lcTipInterogare llInterogareAnaf = 'ANAF' $ lcTipInterogare lcMfinanteURL = This.cMfinanteURL lcMfinanteParams = This.cMfinanteParams lcRomfastURL = This.cRomfastURL llMFINURL = This.lMFINURL *!* This.Log(Alltrim(Transform(tcVerificareCod))) Local llSucces, lcEroare lcXML = '' lcSelect = Select() lcVerificareCod = Iif(Empty(tcVerificareCod) Or Type('tcVerificareCod') <> 'C', '', UPPER(Alltrim(tcVerificareCod))) *!* 12.04.2011 lcCodTara = This.GetCodTara(m.lcVerificareCod) llRO = lcCodTara = 'RO' lcVerificareCod = Strtran(lcVerificareCod, m.lcCodTara, '') lcVerificareCod = Strtran(Strtran(Strtran(lcVerificareCod, ' ', ''), 'RO', ''), 'R', '') *!* 12.04.2011 ^ lcFirma = '' lcAdresa = '' lcJudet = '' lcRegCom = '' lcCodpostal = '' lcTelefon = '' lcFax = '' llPlatitorTVA = .F. llVies = .F. lcEroare = '' lcDataTVAMFIN = "" llPlatitorTVAMFIN = .F. lcStare = '' lcStrada = '' lcNr = '' lcLocalitate = '' lcBloc = '' lcScara = '' lcEtaj = '' lcApart = '' llTVAIncasare = .F. llSplitTVA = .F. llInactiv = .F. Create Cursor cVerificareCod (Valid L, eroare c(250), cod V(100) Null, firma V(100), adresa V(250), judet V(100), ; regcom V(30), codpostal V(20), telefon V(30), fax V(30), datatvamfin V(30), platitortvamfin L, VIES L, PlatitorTVA L, ; stare V(100), strada V(100), nr V(25), localitate V(100), Bloc V(30), Scara V(10), Etaj V(10), Apart V(20), ; tvaincasare L, splittva L, inactiv L) Cursortoxml("cVerificareCod", "lcXML", 1, 0, 0, "1") Select cVerificareCod Scatter Name This.oEntitate llSucces = .F. llValid = .F. Try llValid = This.validare('CIF', m.tcVerificareCod) llSucces = .T. Catch To loEx lcEroare = 'VERIFICARE_CIF VALIDARE ' + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) This.Log(m.lcEroare) Endtry If m.llValid And m.llRO And m.llInterogareAnaf loMFIN = This.ANAF(m.lcVerificareCod, m.ldData) lcFirma = loMFIN.firma lcAdresa = loMFIN.adresa lcJudet = loMFIN.judet lcRegCom = loMFIN.regcom lcCodpostal = loMFIN.codpostal lcTelefon = loMFIN.telefon lcFax = loMFIN.fax lcEroare = loMFIN.eroare lcDataTVAMFIN = TRANSFORM(loMFIN.datatvamfin) llPlatitorTVAMFIN = loMFIN.platitortvamfin lcStare = loMFIN.stare lcStrada = loMFIN.strada lcNr = loMFIN.nr lcLocalitate = loMFIN.localitate lcBloc = EVALUATE('loMFIN.Bloc') lcScara = loMFIN.scara lcEtaj = loMFIN.etaj lcApart = loMFIN.apart llTvaIncasare = loMFIN.tvaIncasare llSplitTVA = loMFIN.SplitTVA llInactiv = loMFIN.Inactiv Endif && llValid AND llInterogareMfin If m.llValid And m.llRO And m.llInterogareMfin loMFIN = This.MFIN(lcVerificareCod) lcFirma = loMFIN.firma lcAdresa = loMFIN.adresa lcJudet = loMFIN.judet lcRegCom = loMFIN.regcom lcCodpostal = loMFIN.codpostal lcTelefon = loMFIN.telefon lcFax = loMFIN.fax lcEroare = loMFIN.eroare lcDataTVAMFIN = loMFIN.datatvamfin llPlatitorTVAMFIN = loMFIN.platitortvamfin lcStare = loMFIN.stare lcStrada = loMFIN.strada lcNr = loMFIN.nr lcLocalitate = loMFIN.localitate lcBloc = EVALUATE('loMFIN.Bloc') lcScara = loMFIN.scara lcEtaj = loMFIN.etaj lcApart = loMFIN.apart llTvaIncasare = loMFIN.tvaIncasare llSplitTVA = loMFIN.SplitTVA llInactiv = loMFIN.Inactiv Endif && llValid AND llInterogareMfin *!* VERIFICARE VIES pentru platitori TVA If llValid And llInterogareVies loVIES = This.VIES(m.lcVerificareCod, m.lcCodTara) llPlatitorTVA = loVIES.PlatitorTVA If !llInterogareMfin Or Empty(lcFirma) lcFirma = loVIES.firma lcAdresa = loVIES.adresa Endif llVies = loVIES.VIES lcEroare = lcEroare + ' ' + loVIES.eroare Endif && llValid AND llInterogareVies * lcAdresa = StripNonAscii(lcAdresa, ' ') && regex.prg lcFirma = This.RemoveCharacters(m.lcFirma) && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcFirma, ''))), Chr(170), 'S'), Chr(222), 'T') lcAdresa = This.RemoveCharacters(m.lcAdresa) && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcAdresa, ''))), Chr(170), 'S'), Chr(222), 'T') lcJudet = This.RemoveCharacters(m.lcJudet) && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcJudet, ''))), Chr(170), 'S'), Chr(222), 'T') lcRegCom = This.RemoveCharacters(m.lcRegCom) && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcRegCom, ''))), Chr(170), 'S'), Chr(222), 'T') lcLocalitate = This.RemoveCharacters(m.lcLocalitate) lcStrada = This.RemoveCharacters(m.lcStrada) TRY Insert Into cVerificareCod(Valid, eroare, cod, firma, adresa, judet, regcom, codpostal, telefon, fax, datatvamfin, platitortvamfin, VIES, PlatitorTVA, stare, strada, nr, localitate, bloc, scara, etaj, apart, tvaincasare, splittva, inactiv) ; Values (m.llValid, Left(m.lcEroare, 250), m.lcVerificareCod, m.lcFirma, m.lcAdresa, m.lcJudet, m.lcRegCom, m.lcCodpostal, m.lcTelefon, m.lcFax, m.lcDataTVAMFIN, m.llPlatitorTVAMFIN, m.llVies, m.llPlatitorTVA, m.lcStare, m.lcStrada, m.lcNr, m.lcLocalitate, m.lcBloc, m.lcscara, m.lcetaj, m.lcapart, m.llTVAIncasare, m.llSplitTVA, m.llInactiv) Select cVerificareCod Go Top Scatter Name This.oEntitate Cursortoxml("cVerificareCod", "lcXML", 1, 0, 0, "1") *** ROA salvez datele in istoric_coduri_fiscale If Type('goExecutor') = 'O' Private pcCodFiscal, pcFirma, pcAdresa, pcJudet, pcRegCom, pcCodPostal, pcTelefon, pcFax, pcDataTvamfin, pnPlatitorTvaMfin, pcStare, pnPlatitorTvaVies, pnInterogareVies pcCodFiscal = m.lcVerificareCod pcFirma = m.lcFirma && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcFirma, ''))), Chr(170), 'S'), Chr(222), 'T') pcAdresa = m.lcAdresa && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcAdresa, ''))), Chr(170), 'S'), Chr(222), 'T') pcJudet = m.lcJudet && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcJudet, ''))), Chr(170), 'S'), Chr(222), 'T') pcRegCom = m.lcRegCom && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcRegCom, ''))), Chr(170), 'S'), Chr(222), 'T') pcCodPostal = Upper(Alltrim(Nvl(m.lcCodpostal, ''))) pcTelefon = Upper(Alltrim(Nvl(m.lcTelefon, ''))) pcFax = Upper(Alltrim(Nvl(m.lcFax, ''))) pcDataTvamfin = Upper(Alltrim(Nvl(m.lcDataTVAMFIN, ''))) pnPlatitorTvaMfin = Iif(m.llPlatitorTVAMFIN, 1, 0) pcStare = Upper(Alltrim(Nvl(m.lcStare, ''))) pnPlatitorTvaVies = Iif(m.llPlatitorTVA, 1, 0) pnInterogareVies = Iif(m.llVies, 1, 0) If !Empty(m.pcFirma) lnSucces = goExecutor.oExecuta("begin pack_parteneri.save_istoric_cod_fiscal(?pcCodFiscal,?pcFirma,?pcAdresa,?pcJudet,?pcRegCom,?pcCodPostal,?pcTelefon,?pcFax,?pcDataTvamfin,?pnPlatitorTvaMfin,?pcStare,?pnPlatitorTvaVies,?pnInterogareVies,?gnIdUtil); end;") Endif Endif *** CONTAFIN salvez datele in istoric_coduri_fiscale If Used('ISTORIC_CODURI_FISCALE') lcProcedura = [SAVE_ISTORIC_COD_FISCAL] && sa nu dea eroarea ROACONT la compilare ca nu gaseste procedura din CONCONT Do &lcProcedura With This.oEntitate In proceduri_comune.prg Endif Catch To loEx lcEroare = 'VERIFICARE_CIF INSERT XML' + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) This.Log(m.lcEroare) Endtry Use In (Select('cVerificareCod')) Select (lcSelect) Return m.lcXML Endproc && VERIFICARE_CIF *================================================== *!* Aduce informatii despre starea de platitor TVA si adresa prin SERVICIU WEB ANAF *================================================== Procedure ANAF Lparameters tcCodFiscal, tdData * tcCodFiscal * optional tdData Local loVerificareANAF As "VerificareANAF" Local lcCodFiscal, lcCursorVerificareANAF, lcSelect, loMFIN, ldData lcCodFiscal = Iif(!Empty(m.tcCodFiscal) And Type('tcCodFiscal') = 'C', Alltrim(m.tcCodFiscal), '') lcSelect = Select() ldData = IIF(TYPE('tdData') = 'D' and !EMPTY(m.tdData), m.tdData, DATE(m.gnAn, m.gnLuna, 1)) loMFIN = This.GetEmptyMfinObj() && verificare serviciu web ANAF loVerificareANAF = Createobject("VerificareANAF") && validare.prg lcCursorVerificareANAF = loVerificareANAF.VerificaListaCIF(m.lcCodFiscal, m.ldData) If Used(m.lcCursorVerificareANAF) If Reccount(m.lcCursorVerificareANAF) >= 1 Select (m.lcCursorVerificareANAF) Go Top loMFIN.firma = firma loMFIN.adresa = adresa loMFIN.judet = judet loMFIN.regcom = nrregcom loMFIN.codpostal = '' loMFIN.telefon = '' loMFIN.fax = '' loMFIN.eroare = '' loMFIN.datatvamfin = Data loMFIN.platitortvamfin = tva loMFIN.stare = mesaj loMFIN.strada = strada loMFIN.nr = nr loMFIN.localitate = localitate loMFIN.Bloc = Bloc loMFIN.scara = scara loMFIN.etaj = etaj loMFIN.apart = apart loMFIN.TVAIncasare = tvaincasare loMFIN.SplitTVA = splittva loMFIN.Inactiv = inactiv Endif Endif Select (lcSelect) Return loMFIN Endproc && ANAF *================================================== *!* VERIFICARE INFORMATII MFINANTE *!* DIRECT PE MFINANTE.RO PE URL ROMFAST Procedure MFIN Lparameters tcCodFiscal Local llMFINURL, lcMfinanteURL, lcMfinanteParams, lcRomfastURL, lcSelect, loHTTP Local llPlatitorTVA, lcFirma, lcAdresa, lcEroare, llVies, lcStrada, lcNr, lcLocalitate Local loMFIN Local lnStatus, lcXML, lcJudet, lcRegCom, lcCodpostal, lcDataTVAMFIN, llPlatitorTVAMFIN, lcStare Local lcTelefon, lcFax, lcValues, lcResponse, loEx Local Array laMfin[100, 2] Local loFormIntroducereCod loFormIntroducereCod = Null llPlatitorTVA = .F. lcFirma = '' lcAdresa = '' lcEroare = '' llVies = .F. lcStare = '' lcStrada = '' lcNr = '' lcLocalitate = '' lcSelect = Select() llMFINURL = This.lMFINURL lcMfinanteURL = This.cMfinanteURL lcMfinanteParams = This.cMfinanteParams lcMfinanteParams = Strtran(lcMfinanteParams, '|CIF|', tcCodFiscal, 1, 1, 1) lcRomfastURL = This.cRomfastURL lcRomfastURL = Strtran(lcRomfastURL, '|CIF|', tcCodFiscal, 1, 1, 1) && http://localhost/update/verificarecod.aspx/verificarecod/verificare/CIF/|CIF|/|TIP| lcRomfastURL = Strtran(lcRomfastURL, '|TIP|', 'MFIN', 1, 1, 1) loMFIN = This.GetEmptyMfinObj() *!* if This.lOneSession If Type("This.oHTTP") <> "O" && la prima apelare a verificarii MFIN If This.lXMLHTTP This.oHTTP = Createobject("winhttp.winhttprequest.5.1") Else This.oHTTP = Createobject("InternetExplorer.Application") This.oHTTP.Visible = .F. Endif Endif loHTTP = This.oHTTP *!* ELSE *!* IF This.lXMLHTTP *!* loHTTP = Createobject("winhttp.winhttprequest.5.1") *!* ELSE *!* loHTTP = Createobject("InternetExplorer.Application") *!* loHTTP.visible = .T. *!* ENDIF *!* endif *** INTRODUCERE CAPTCHA DACA NU ESTE INTRODUS DEJA *** Daca exista proprietatea VerificareCod.UserHostAddress, atunci clasa este instantiata din DISPATCHREQUEST de pe serverul ROMFAST If This.lXMLHTTP And !Pemstatus(This, "UserHostAddress", 5) And Empty(This.cMfinCaptcha) And This.lCaptcha lcCodFile = Addbs(Getenv("TEMP")) + "captcha_" + Sys(2015) + ".jpg" loHTTP.Open('GET', "http://www.mfinante.ro/kaptcha.jpg", .F.) loHTTP.Send() = Strtofile(loHTTP.ResponseBody, m.lcCodFile) This.cMfinCaptcha = "" Clear Class "IntroducereCod" loFormIntroducereCod = Createobject("IntroducereCod", m.lcCodFile) loFormIntroducereCod.Show(1) If File(m.lcCodFile) Delete File (m.lcCodFile) Endif If Type('loFormIntroducereCod') = 'O' And Type('loFormIntroducereCod.cCod') = 'C' This.cMfinCaptcha = loFormIntroducereCod.cCod Release loFormIntroducereCod Endif Endif && !PEMSTATUS Do Case Case This.lMFINURL Try *!* loHttp.SetTimeouts(ResolveTimeout, ConnectTimeout, SendTimeout, ReceiveTimeout) * loHttp.SetTimeouts(60000, 60000, 60000, 60000) loHTTP.Open("GET", lcRomfastURL, .F.) loHTTP.Send() lnStatus = loHTTP.Status If lnStatus = 200 && OK lcXML = loHTTP.responseText Xmltocursor(lcXML, 'cMFINTemp') lcFirma = Alltrim(cMFINTemp.firma) lcAdresa = Alltrim(cMFINTemp.adresa) lcJudet = Alltrim(cMFINTemp.judet) lcRegCom = Alltrim(cMFINTemp.regcom) lcCodpostal = Alltrim(cMFINTemp.codpostal) lcTelefon = Alltrim(cMFINTemp.telefon) lcFax = Alltrim(cMFINTemp.fax) lcEroare = Alltrim(cMFINTemp.eroare) lcDataTVAMFIN = cMFINTemp.datatvamfin llPlatitorTVAMFIN = cMFINTemp.platitortvamfin lcStare = cMFINTemp.stare lcStrada = Alltrim(cMFINTemp.strada) lcNr = Alltrim(cMFINTemp.nr) lcLocalitate = Alltrim(cMFINTemp.localitate) Use In (Select('cMFINTemp')) Else lcEroare = 'VERIFICARE_CIF MFIN - ' + Alltrim(Transform(lcRomfastURL)) + ' eroare ' + Alltrim(Str(lnStatus)) Endif && lnStatus Catch To loEx lcEroare = 'VERIFICARE_CIF MFIN ' + CRLF + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) This.Log(m.lcEroare) Endtry Otherwise Try If !Empty(This.cMfinCaptcha) lcMfinanteParams = Strtran(lcMfinanteParams, '|CAPTCHA|', This.cMfinCaptcha, 1, 1, 1) Else && daca nu introduc CAPTCHA prima oara, nu il mai cer ulterior. sa vad daca merge ??? lcMfinanteParams = Strtran(lcMfinanteParams, '&captcha=|CAPTCHA|', '', 1, 1, 1) This.lCaptcha = .F. Endif Do Case Case .F. loHTTP.Open("POST", lcMfinanteURL, .F.) loHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') lcValues = lcMfinanteParams loHTTP.Send(lcValues) lnStatus = loHTTP.Status Case This.lXMLHTTP lcValues = lcMfinanteParams loHTTP.Open("GET", m.lcMfinanteURL + '?' + m.lcValues, .F.) loHTTP.setRequestHeader ("Content-Type", "multipart/form-data; ") loHTTP.setRequestHeader ("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)") loHTTP.Send(Null) lnStatus = loHTTP.Status Otherwise * Internet.Application din cauza ca nu mai merge interogarea cu xmlhttp lcValues = lcMfinanteParams loHTTP.Navigate(m.lcMfinanteURL + '?' + m.lcValues) * Astept maxim 10 secunde sa se incarce documentul si verific daca exista tag-ul lnSeconds = Seconds() lnStatus = -200 Do While .T. Inkey(1) lnSecondsPassed = Seconds() - lnSeconds Wait Window 'Astept incarcarea paginii mfinante.ro ' + Alltrim(Str(m.lnSecondsPassed)) + '/20 sec.' Nowait If (loHTTP.ReadyState = 4 And !loHTTP.Busy) Or m.lnSecondsPassed > 20 If This.cMfinAnchorString $ Upper(loHTTP.Document.body.innerhtml) Or This.cMfinNuExistaString $ Upper(loHTTP.Document.body.innerhtml) lnStatus = 200 Exit Else If m.lnSecondsPassed > 20 Exit Endif Endif Endif Enddo Endcase If lnStatus = 200 && OK If This.lXMLHTTP lcResponse = Upper(loHTTP.responseText) Else lcResponse = loHTTP.Document.body.innerhtml Endif *STRTOFILE(m.lcResponse, "c:\info_" + m.tcCodFiscal + ".html") This.InfoMfin2Array(m.lcResponse, @laMfin) lcFirma = This.RemoveCharacters(laMfin(1, 2), .T.) && Strtran(Strtran(Upper(Alltrim(Nvl(aMfin(1, 2), ''))), Chr(170), 'S'), Chr(222), 'T') lcAdresa = This.RemoveCharacters(laMfin(2, 2), .T., .F., .T.) && Strtran(Strtran(Upper(Alltrim(Nvl(laMfin(2, 2), ''))), Chr(170), 'S'), Chr(222), 'T') lcJudet = This.RemoveCharacters(laMfin(3, 2), .T.) && Strtran(Strtran(Upper(Alltrim(Nvl(laMfin(3, 2), ''))), Chr(170), 'S'), Chr(222), 'T') lcRegCom = This.RemoveCharacters(laMfin(4, 2), .T., .T., .T.) && Strtran(Strtran(Upper(Alltrim(Nvl(STRTRAN(laMfin(4, 2), ' ',''), ''))), Chr(170), 'S'), Chr(222), 'T') lcCodpostal = This.RemoveCharacters(laMfin(6, 2), .T., .T., .T.) && laMfin(6, 2) lcTelefon = This.RemoveCharacters(laMfin(7, 2), .T., .T., .T.) && laMfin(7, 2) lcFax = This.RemoveCharacters(laMfin(8, 2), .T., .T., .T.) && laMfin(8, 2) lcStare = This.RemoveCharacters(laMfin(9, 2), .T., .F., .T.) && Strtran(Strtran(Upper(Alltrim(Nvl(laMfin(9, 2), ''))), Chr(170), 'S'), Chr(222), 'T') lcDataTVAMFIN = Nvl(laMfin(16, 2), '') llPlatitorTVAMFIN = !(Empty(m.lcDataTVAMFIN) Or Isalpha(m.lcDataTVAMFIN)) loAdresa = This.ParseAdresaMFin(m.lcAdresa) lcStrada = loAdresa.strada lcNr = loAdresa.nr lcLocalitate = loAdresa.localitate Else lcEroare = 'VERIFICARE_CIF MFIN - ' + Alltrim(Transform(lcMfinanteURL)) + ' eroare ' + Alltrim(Str(lnStatus)) Endif Catch To loEx lcEroare = 'VERIFICARE_CIF MFIN ' + CRLF + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) This.Log(m.lcEroare) Endtry Endcase loMFIN.firma = m.lcFirma loMFIN.adresa = m.lcAdresa loMFIN.judet = m.lcJudet loMFIN.regcom = m.lcRegCom loMFIN.codpostal = m.lcCodpostal loMFIN.telefon = m.lcTelefon loMFIN.fax = m.lcFax loMFIN.eroare = m.lcEroare loMFIN.datatvamfin = m.lcDataTVAMFIN loMFIN.platitortvamfin = m.llPlatitorTVAMFIN loMFIN.stare = m.lcStare loMFIN.strada = m.lcStrada loMFIN.nr = m.lcNr loMFIN.localitate = m.lcLocalitate Select (lcSelect) Return loMFIN Endproc && MFIN *================================================== *!* VERIFICARE CALITATE PLATITOR TVA *!* DIRECT PE VIES CU DLL DOTNET SAU PE URL ROMFAST Procedure VIES Lparameters tcCodFiscal, tcCodTara Local ws, loVIES, llVIESURL, lcRomfastURL, lcSelect, loHTTP Local llPlatitorTVA, lcFirma, lcAdresa, lcEroare, llVies, lcCodTara Local lnStatus, lcXML, loEx, lcViesURL llPlatitorTVA = .F. lcFirma = '' lcAdresa = '' lcEroare = '' llVies = .F. lcSelect = Select() *!* 12.04.2011 lcCodTara = Iif(!Empty(m.tcCodTara), Alltrim(Upper(Transform(m.tcCodTara))), 'RO') *!* 12.04.2011 ^ llVIESURL = This.lVIESURL lcRomfastURL = This.cRomfastURL *!* 12.04.2011 lcRomfastURL = Strtran(lcRomfastURL, '|CIF|', m.lcCodTara + m.tcCodFiscal, 1, 1, 1) && http://localhost/update/verificarecod.aspx/verificarecod/verificare/CIF/|CIF|/|TIP| *!* 12.04.2011 ^ lcRomfastURL = Strtran(lcRomfastURL, '|TIP|', 'VIES', 1, 1, 1) loVIES = Createobject("empty") AddProperty(loVIES, "Vies", .F.) AddProperty(loVIES, "Eroare", '') AddProperty(loVIES, "Cod", tcCodFiscal) AddProperty(loVIES, "PlatitorTVA", .F.) AddProperty(loVIES, "Firma", "") AddProperty(loVIES, "Adresa", "") If This.lVIESURL Try *!* loHTTP = Createobject("MSXML2.ServerXMLHTTP") loHTTP = Createobject("winhttp.winhttprequest.5.1") loHTTP.Open("GET", lcRomfastURL, .F.) loHTTP.Send() lnStatus = loHTTP.Status If lnStatus = 200 && OK lcXML = loHTTP.responseText Xmltocursor(lcXML, 'cVIESTemp') llPlatitorTVA = cVIESTemp.PlatitorTVA lcFirma = Alltrim(cVIESTemp.firma) lcAdresa = Alltrim(cVIESTemp.adresa) lcEroare = Alltrim(cVIESTemp.eroare) llVies = cVIESTemp.VIES Use In (Select('cVIESTemp')) Else lcEroare = 'VERIFICARE_CIF VIES - ' + Alltrim(Transform(lcRomfastURL)) + ' eroare ' + Alltrim(Str(lnStatus)) Endif && lnStatus Catch To loEx lcEroare = 'VERIFICARE_CIF VIES ' + CRLF + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) This.Log(m.lcEroare) Endtry Else If .F. Try llVies = .F. ws = Createobject('DotNetCom.VerificareCIF') llPlatitorTVA = ws.VerifCIF(tcCodFiscal) &&returneza .T. sau .F., in functie de existenta CIF in baza de date EU lcFirma = ws.firma lcAdresa = Strtran(Strtran(ws.adresa, Chr(13), ''), Chr(10), '') llVies = .T. Catch To loEx lcEroare = 'VERIFICARE_CIF VIES ' + CRLF + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) This.Log(m.lcEroare) Endtry ELSE *!* 15.03.2010 IF .F. Try *!* loHTTP = Createobject("MSXML2.ServerXMLHTTP") && ("Microsoft.XMLHTTP") loHTTP = Createobject("winhttp.winhttprequest.5.1") *!* 12.04.2011 lcViesURL = "http://ec.europa.eu/taxation_customs/vies/viesquer.do?ms=" + m.lcCodTara + "&iso=" + m.lcCodTara + "&vat=" + m.tcCodFiscal *!* 12.04.2011 ^ loHTTP.Open("GET", m.lcViesURL, .F.) loHTTP.Send() lnStatus = loHTTP.Status If lnStatus = 200 && OK lcXML = loHTTP.responseText llPlatitorTVA = 'YES, VALID VAT NUMBER' $ Upper(lcXML) lcFirma = '' lcAdresa = '' llVies = .T. Else lcEroare = 'VERIFICARE_CIF VIES - ' + m.lcViesURL + ' eroare ' + Alltrim(Str(lnStatus)) Endif && lnStatus Catch To loEx lcEroare = 'VERIFICARE_CIF VIES ' + CRLF + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) This.Log(m.lcEroare) Endtry *!* 15.03.2010 ^ ENDIF && .F. Try loHTTP = Createobject("winhttp.winhttprequest.5.1") loHTTP.Open("POST", "http://ec.europa.eu/taxation_customs/vies/services/checkVatService", .F.) loHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') TEXT TO lcValues NOSHOW TEXTMERGE <> <> ENDTEXT loHTTP.Send(lcValues) lnStatus = loHTTP.Status If lnStatus = 200 && OK lcXML = loHTTP.responseText llPlatitorTVA = (STREXTRACT(m.lcXML, [],[],1,1) = 'true') && true/false lcFirma = STRTRAN(STREXTRACT(m.lcXML, [],[],1,1), '-','',1,10,1) lcAdresa = STRTRAN(STREXTRACT(m.lcXML, [
],[
],1,1), '-','',1,10,1) lcAdresa = Strtran(m.lcAdresa, Chr(13) + CHR(10), ' ') llVies = .T. Else lcEroare = 'VERIFICARE_CIF VIES - ' + m.lcViesURL + ' eroare ' + Alltrim(Str(lnStatus)) Endif && lnStatus Catch To loEx lcEroare = 'VERIFICARE_CIF VIES ' + CRLF + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) This.Log(m.lcEroare) Endtry Endif Endif loVIES.PlatitorTVA = llPlatitorTVA loVIES.firma = lcFirma loVIES.adresa = lcAdresa loVIES.eroare = lcEroare loVIES.VIES = llVies Select (lcSelect) Return loVIES Endproc && VIES *================================= Function validare Lparameters tcTip, tcCod Local lcTip, llReturn llReturn = .F. lcTip = Iif(Type('tcTip') = 'C' And !Empty(tcTip), Upper(tcTip), 'CIF') Do Case Case lcTip = 'CNP' llReturn = This.VALIDARE_CNP(tcCod) Case lcTip = 'CIF' llReturn = This.VALIDARE_CIF(tcCod) Otherwise llReturn = .F. Endcase Return llReturn Endfunc && VALIDARE *================================= *!* VALIDEAZA CIF *!* RETURN .T. / .F. Function VALIDARE_CIF Lparameters tcCIF Local lcCIFinv, I Local llCorect, lcCif, cheieinv, lnSuma, lnRest, lnCifraVerificare, lcCifraControl, lnCifraControl If Type('tcCIF') <> 'C' tcCIF = '' Endif *!* 12.04.2011 lcCif = Alltrim(Nvl(tcCIF, '')) lcCodTara = This.GetCodTara(m.lcCif) *!* daca primele 2 caractere sunt coduri de tara le elimin If !Substr(M.lcCif, 1, 1) $ '0123456789' m.lcCif = Alltrim(Substr(m.lcCif, 2)) Endif If !Substr(M.lcCif, 1, 1) $ '0123456789' m.lcCif = Alltrim(Substr(m.lcCif, 2)) Endif llCorect = .T. If !(Empty(m.lcCodTara) Or m.lcCodTara = 'RO') Return m.llCorect Endif *!* 12.04.2011 ^ *!* lcCIF = '7320118' *!* Pas preliminar: Se testeaza daca codul respecta formatul unui cod CIF. Adica lungimea maxima sa fie de 10 cifre si sa contina doar caractere numerice. If Len(m.lcCif) > 10 Or Empty(m.lcCif) llCorect = .F. Else For I = 1 To Len(m.lcCif) If !Substr(m.lcCif, I, 1) $ '0123456789' llCorect = .F. Endif Endfor Endif *!* Pas 1: Se foloseste cheia de testare "753217532". Se inverseaza ordinea cifrelor codului CIF precum si a cheii de testare. *!* Pas 2: Se ignora prima cifra din codul CIF inversat (aceasta este cifra de control) si se inmulteste fiecare cifra cu cifra corespunzatoare din cheia de testare inversata. *!* Pas 3: Se aduna toate produsele obtinute. Suma rezultata se inmulteste cu 10 si produsul este impartit la 11. Cifra obtinuta, in urma operatiei MODULO 11 reprezita cifra de verificare. Daca in urma impartirii s-a obtinut restul 10 atunci cifra de verificare va fi 0. *!* Pas 4: Pentru un CIF valid cifra de verificare va trebui sa corespunda cu cifra de control a codului CIF initial. cheieinv = '235712357' If llCorect lcCIFinv = '' lnSuma = 0 For I = Len(m.lcCif) - 1 To 1 Step - 1 lcCIFinv = m.lcCIFinv + Substr(m.lcCif, I, 1) Endfor For I = 1 To Len(m.lcCIFinv) lnSuma = lnSuma + Val(Substr(m.lcCIFinv, I, 1)) * Val(Substr(m.cheieinv, I, 1)) Endfor lnRest = Mod(m.lnSuma * 10, 11) lnCifraVerificare = Iif(m.lnRest = 10, 0, lnRest) lcCifraControl = Substr(m.lcCif, Len(m.lcCif), 1) lnCifraControl = Val(lcCifraControl) If m.lnCifraVerificare <> m.lnCifraControl llCorect = .F. Endif Endif *!* ?IIF(llCorect, 'CORECT', 'INCORECT') Return llCorect Endfunc && VALIDARE_CIF *================================= *!* VALIDEAZA CNP *!* RETURN .T. / .F. Function VALIDARE_CNP Lparameters cCnp Local cCod cCod = Alltrim(cCnp) If Len(cCod)!= 13 Return .F. Endif Local _X(13), _rest, j For j = 1 To 13 _X(j) = Val(Substr(cCod, j, 1)) Endfor _rest = (_X(1) * 2 + _X(2) * 7 + _X(3) * 9 + _X(4) * 1 + _X(5) * 4 + _X(6) * 6 + _X(7) * 3 + _X(8) * 5 + _X(9) * 8 + _X(10) * 2 + _X(11) * 7 + _X(12) * 9) % 11 Return Iif((_rest < 10 And _rest = _X(13))Or(_rest = 10 And _X(13) = 1), .T., .F.) Endfunc && VALIDARE_CNP *================================= Function GetError Local lcReturn, lnLines Local Array laEroare(1) lcReturn = "" lnLines = Aerror(laEroare) If lnLines = 7 lcReturn = Alltrim(Transform(laEroare(1))) + ' ' + Alltrim(Transform(laEroare(2))) &&+ ALLTRIM(TRANSFORM(laEroare(3))) Endif Return lcReturn Endfunc *============================ Procedure Log Lparameters tcText If Type('goLog') = 'O' goLog.Log(tcText) Else Local lcText lcText = Transform(Datetime()) + " " + Iif(Empty(tcText), "", tcText) + Chr(13) + Chr(10) Strtofile(m.lcText, "log.txt", .T.) Endif Endproc && Log Function GetInfoMfin(lcResponse, lnRand) Local cAnchorString, cTable, lcRand, lcReturn m.cAnchorString = "AGENTUL ECONOMIC CU CODUL UNIC" m.cTable = Upper(Strextract( Substr(lcResponse, Atc( m.cAnchorString, lcResponse)), '')) lcRand = Strextract( cTable, "", lnRand ) lcReturn = Strextract( lcRand, [SIZE="2">], "", 2) Return lcReturn Endfunc && GetInfoMfin *** Parseaza html-ul de la mfinante.ro si transforma tabelul intr-un array cu 2 coloane (descriere, valoare) Procedure InfoMfin2Array(lcResponse, laInfo) Local lcList, lcTable, lnLinii, I If Atc('NU ATI INTRODUS CODUL DE VALIDARE CORECT', m.lcResponse, 1) > 0 Dimension laInfo(100, 2) laInfo = "" laInfo(2, 2) = "Nu ati introdus codul de validare corect!" Else lcString = This.cMfinAnchorString && "AGENTUL ECONOMIC CU CODUL UNIC" lcTable = Strextract(Substr(m.lcResponse, Atc(m.lcString, m.lcResponse)), '', 1, 1) If Empty(m.lcTable) Dimension laInfo(100, 2) laInfo = "" laInfo(2, 2) = "Nu s-a gasit tabelul!" Else * Elimin CR LF TAB NBSP si "reglez" & lcTable = Transform(m.lcTable) lcTable = Strtran(m.lcTable, Chr(10), '', 1, 1000, 1) * lcTable = Strtran(m.lcTable, Chr(9), '',1,1000,1) lcTable = Strtran(m.lcTable, Chr(13), '', 1, 1000, 1) lcTable = Strtran(m.lcTable, ' ', ' ', 1, 1000, 1) lcTable = Strtran(m.lcTable, '&', '&', 1, 1000, 1) *!* lcTable = STREXTRACT(m.lcResponse,'',1,5) *** functia parsetable transforma tabelul html intr-o lista fara tag-uri lcList = This.ParseTable(m.lcTable) *** se trece lista intr-un vector lnLinii = Alines(laInfo, lcList, 1) If lnLinii > 1 *** vectorul laInfo se redimensioneaza la 2 coloane. Prima coloana contine explicatia, a doua valoarea Dimension laInfo (Ceiling(lnLinii / 2), 2) For I = 1 To Alen(laInfo, 1) laInfo(I, 1) = Alltrim(Strtran(Alltrim(Strtran(laInfo(I, 1), " ", "", 1, 1000, 1)), Chr(9), "")) laInfo(I, 2) = Alltrim(Strtran(Alltrim(Strtran(laInfo(I, 2), " ", "", 1, 1000, 1)), Chr(9), "")) Endfor Else Dimension laInfo(100, 2) laInfo = "" laInfo(2, 2) = "Tabelul are dimensiunea < 2!" Endif && lnLinii > 1 Endif && EMPTY(m.lcTable) Endif && NU ATI INTRODUS CODUL DE VALIDARE CORECT Endproc && InfoMfin2Array *** Parseaza html-ul de la vies si transforma tabelul intr-un array cu 2 coloane (descriere, valoare) Procedure InfoVIES2Array(lcResponse, laInfo) Local lcList, lcTable, lnLinii, I lcTable = Strextract(m.lcResponse, '', 5, 5) *** functia parsetable transforma tabelul html intr-o lista fara tag-uri lcList = This.ParseTable(m.lcTable) *** se trece lista intr-un vector lnLinii = Alines(laInfo, lcList, 1) *** vectorul laInfo se redimensioneaza la 2 coloane. Prima coloana contine explicatia, a doua valoarea Dimension laInfo (lnLinii / 2, 2) For I = 1 To Alen(laInfo, 1) laInfo(I, 1) = Alltrim(Strtran(Alltrim(Strtran(laInfo(I, 1), " ", "", 1, 10, 1)), Chr(9), "")) laInfo(I, 2) = Alltrim(Strtran(Alltrim(Strtran(laInfo(I, 2), " ", "", 1, 10, 1)), Chr(9), "")) Endfor Endproc && InfoMfin2Array *** creaza o lista caracter cu valorile dintr-un tabel html *** rand 1: cell_1_1, rand 2: cell_1_2, rand 3: cell_2_1, rand 4: cell_2_2 etc. Function ParseTable Lparameters tcTable Local lcList, lcCell, lcData, lnCell, lnTag lcList = '' For lnCell = 1 To Occurs('', lnCell, 3) lcData = '' For lnTag = 1 To Occurs('>', lcCell) lcData = lcData + Strextract(lcCell, '>', '<', lnTag, 3) Next lnTag lcData = Alltrim(Chrtran(lcData, Chr(10) + Chr(13), Space(1))) Do While At(Space(2), lcData) > 0 lcData = Strtran(lcData, Space(2), Space(1)) Enddo lcList = lcList + lcData + CR Endfor Return lcList Endfunc && ParseTable *** Extrage codul de tara din codul fiscal (primele 2 caractere) Function GetCodTara Lparameters tcCodFiscal Local lcCodTara, lcCodFiscal Local lcChar1, lcChar2 lcCodTara = "" lcCodFiscal = Alltrim(Strtran(Upper(Transform(tcCodFiscal)), ' ', '')) lcChar1 = Substr(m.lcCodFiscal, 1, 1) If Isalpha(m.lcChar1) m.lcCodTara = m.lcCodTara + m.lcChar1 lcChar2 = Substr(m.lcCodFiscal, 2, 1) If Isalpha(m.lcChar2) m.lcCodTara = m.lcCodTara + m.lcChar2 Endif Endif If m.lcCodTara = 'R' Or Empty(m.lcCodTara) m.lcCodTara = 'RO' Endif Return m.lcCodTara Endfunc && GetCodTara *** curata textul de diacritice, spatii, CR/LF Function RemoveCharacters Lparameters tcText, tlDiacritics, tlSpaces, tlCR *** tcText: textul initial *** tlDiacritics: inlocuieste diacriticele *** tlSpaces: sterge spatiile *** tlCR: sterge CR si LF If Pcount() = 1 tlDiacritics = .T. Endif Local lcText lcText = Nvl(m.tcText, '') If m.tlDiacritics lcText = STRTRAN(STRTRAN(Strtran(Nvl(m.lcText, ''), Chr(197) + CHR(162), 'T', 1,100,1), Chr(197) + CHR(63), 'S', 1,100,1), Chr(196) + CHR(63), 'A', 1,100,1) lcText = Strtran(Nvl(m.lcText, ''), Chr(195) + CHR(63), 'I', 1,100,1) lcText = Strtran(Strtran(Strtran(Strtran(Strtran(Nvl(m.lcText, ''), Chr(170), 'S', 1,100,1), Chr(222), 'T', 1,100,1), Chr(226), 'A', 1,100,1), Chr(227), 'A', 1,100,1), Chr(238), 'I', 1,100,1) lcText = STRTRAN(Strtran(Strtran(Strtran(Nvl(m.lcText, ''), Chr(206), 'I', 1,100,1), Chr(194), 'A', 1,100,1), Chr(195), 'A', 1,100,1), Chr(196), 'A', 1,100,1) lcText = STRTRAN(m.lcText, CHR(2), '',1,100,1) && caracter neprintabil ENDIF If m.tlSpaces lcText = Strtran(m.lcText, ' ', '', 1, 100, 1) Endif If m.tlCR lcText = Strtran(Strtran(m.lcText, Chr(13), ''), Chr(10), '') Endif Return m.lcText Endfunc ****************************************************** *** Primeste o adresa de forma Strada NR LOCALITATE *** Intoarce un obiect cu proprietatile: STRADA, NR, LOCALITATE ****************************************************** Procedure ParseAdresaMFin Lparameters tcAdresa * tcAdresa: Bld. Stefan cel Mare 14 Tirgu Neamt Local lcAdresa, loAdresa loAdresa = Createobject("empty") AddProperty(loAdresa, "strada", "") AddProperty(loAdresa, "nr", "") AddProperty(loAdresa, "localitate", "") lcAdresa = Iif(!Empty(m.tcAdresa) And Type('tcAdresa') = 'C', m.tcAdresa, '') If !Empty(m.lcAdresa) lcPatternNrLocalitate = "\d+[A-Za-z\s]+$" && 14 Tirgu Neamt lcNrLocalitate = GetRegexp(m.lcAdresa, m.lcPatternNrLocalitate, 1) && 14 Tirgu Neamt lcPatternLocalitate = "[A-Za-z\s]+$" && Tirgu Neamt loAdresa.localitate = GetRegexp(m.lcAdresa, m.lcPatternLocalitate, 1) && Tirgu Neamt loAdresa.nr = Alltrim(Strtran(m.lcNrLocalitate, loAdresa.localitate, '')) && 14 If !Empty(m.lcNrLocalitate) loAdresa.strada = Alltrim(Strtran(m.lcAdresa, m.lcNrLocalitate, '')) && Bld. Stefan cel Mare Endif Endif && !EMPTY() Return loAdresa Endproc && ParseAdresaMfin *************************************************************** *** Intoarce un obiect Mfin cu atribute goale, pentru uz intern *************************************************************** Function GetEmptyMfinObj Local loMFIN loMFIN = Createobject("empty") AddProperty(loMFIN, "Eroare", '') AddProperty(loMFIN, "Cod", "") AddProperty(loMFIN, "Firma", "") AddProperty(loMFIN, "Adresa", "") AddProperty(loMFIN, "Judet", "") AddProperty(loMFIN, "Regcom", "") AddProperty(loMFIN, "codpostal", "") AddProperty(loMFIN, "telefon", "") AddProperty(loMFIN, "fax", "") AddProperty(loMFIN, "DataTVAMFIN", "") AddProperty(loMFIN, "PlatitorTVAMFIN", .F.) AddProperty(loMFIN, "Stare", "") AddProperty(loMFIN, "Strada", "") AddProperty(loMFIN, "Nr", "") AddProperty(loMFIN, "Localitate", "") AddProperty(loMFIN, "Bloc", "") AddProperty(loMFIN, "Scara", "") AddProperty(loMFIN, "Etaj", "") AddProperty(loMFIN, "Apart", "") AddProperty(loMFIN, "TvaIncasare", .F.) AddProperty(loMFIN, "SplitTVA", .F.) AddProperty(loMFIN, "Inactiv", .F.) Return loMFIN Endfunc && GetEmptyMfinObj Enddefine ********************************************* *** Verificare coduri fiscale folosind serviciul web ANAF, cate 500 de coduri per interogare ********************************************* Define Class VerificareANAF As Custom Procedure Init If !'nfjsonread' $ Lower(Set("Procedure")) Set Procedure To nfjsonread.prg Additive Endif If !'nfjsoncreate' $ Lower(Set("Procedure")) Set Procedure To nfjsoncreate.prg Additive Endif Endproc && Init ************************************* *** VerificaListaCIF("31103995,1879855", Date(), "crsANAF") *** Verifica codurile fiscale din lista, la data *** Intoarce un cursor crsANAF (cui N(13), Data d, denumire c(60), adresa c(244), tva L, data_sfarsit d, data_anul_imp d, mesaj c(100)) ************************************* Function VerificaListaCIF Lparameters tcListaCIF, tdData, tcAlias * tcListaCIF: lista coduri fiscale sau numele unui cursor cu coduri fiscale Local llUsed, lcCursorListaCIF, lnRec, lnRecs, lcAlias lcCursorListaCIF = "" llUsed = .F. lcAlias = "" goLog.Log('tcListaCIF: ' + tcListaCIF, 'VerificaListaCIF') If Used(tcListaCIF) * cursor lcCursorListaCIF = m.tcListaCIF llUsed = .T. Else * lista lcCursorListaCIF = "cListaCIFTemp" lnRecs = Getwordcount(m.tcListaCIF, ',') Create Cursor (lcCursorListaCIF) (cod_fiscal c(30) Null, data D null) For lnRec = 1 To m.lnRecs lcCodFiscal = Getwordnum(m.tcListaCIF, m.lnRec, ',') Insert Into (lcCursorListaCIF) (cod_fiscal, data) Values (m.lcCodFiscal, m.tdData) Endfor Endif lcAlias = This.ANAF_SincronWebService_PlatitorTva(m.lcCursorListaCIF, m.tdData, m.tcAlias) If !m.llUsed Use In (Select(lcCursorListaCIF)) Endif Return m.lcAlias Endfunc && AnafPlatitorTVA * Function ANAF_SincronWebService_PlatitorTva Lparameters tcCursorListaCIF, tdData, tcAlias Local loCol As "empty" Local loHTTP As 'Microsoft.XMLHTTP' Local laCoduri[1], lcAlias, lcData, lcDataFormatted, lcJsonString, lcListaCIF, lcSend, lcServer, lcCodFiscal, llDataCursor Local ldData, lnRec, lnRecords, loJsonObject, lnIdx, lnRec1, lnRec2, lnGrup, lnGrupuri, loEx As Exception Local loVerificareCod As "VerificareCod" Local lcCodFiscalFRO, lcCodTara, lcMesaj, llRO, lnReqNo, lnWaitSeconds, laFound, lcCodJudet lcJsonString = "" lcAlias = Iif(!Empty(m.tcAlias) And Type('tcAlias') = "C", m.tcAlias, "crsANAF") USE IN (SELECT(m.lcAlias)) ldData = Iif(!Empty(m.tdData) And Type('tdData') = "D", m.tdData, Date()) lcData = Dtos(m.ldData) *lcDataFormatted = Left(m.lcData, 4) + "-" + Substr(m.lcData, 5, 2) + "-" + Substr(m.lcData, 7, 2) lnRecords = Reccount(tcCursorListaCIF) IF m.lnRecords = 0 Return m.lcAlias ENDIF llDataCursor = (TYPE(tcCursorListaCIF + '.data') = 'D') && daca exista coloana data in cursor, folosesc data din cursor, daca este completata goLog.Log('lnRecords: ' + Transform(m.lnRecords), 'ANAF_SincronWebService_PlatitorTva') Try loHTTP = Createobject('winHTTP.winHTTPrequest.5.1') Catch To loEx ENDTRY If Type('loHTTP') <> 'O' Try loHTTP = Createobject('Microsoft.XMLHTTP') && 04.07.2016 Catch To loEx AMESSAGEBOX(loEx.Message, 0 + 16, _Screen.Caption) Endtry Endif If Type('loHTTP') <> 'O' goLog.Log("TYPE('loHTTP') <> 'O'", 'ANAF_SincronWebService_PlatitorTva') Return m.lcAlias Endif * lcServer = 'https://webservicesp.anaf.ro:/PlatitorTvaRest/api/v1/ws/tva' && api v1 * lcServer = 'https://webservicesp.anaf.ro/PlatitorTvaRest/api/v3/ws/tva' *!* lcServer = 'https://webservicesp.anaf.ro/PlatitorTvaRest/api/v5/ws/tva' *!* lcServer = 'https://webservicesp.anaf.ro/PlatitorTvaRest/api/v6/ws/tva' lcServer = 'https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva' loVerificareCod = Createobject("VerificareCod") lnReqNo = 100 && maxim 100 CUI-uri pe verificare lnWaitSeconds = 1 && minim 1 secunda intre interogari lnGrupuri = Max(CEILING(m.lnRecords / m.lnReqNo), 1) && grupuri de cate 500 de coduri maxim per interogare For lnGrup = 1 To m.lnGrupuri lnRec1 = m.lnReqNo * (m.lnGrup - 1) + 1 lnRec2 = Min(m.lnReqNo * m.lnGrup, m.lnRecords) Wait Window 'Verific codurile fiscale ' + Alltrim(Str(m.lnRec1)) + '..' + Alltrim(Str(m.lnRec2)) + ' / ' + Alltrim(Str(m.lnRecords)) Nowait Release laCoduri Dimension laCoduri(m.lnRec2 - lnRec1 + 1) lnIdx = 0 Select (m.tcCursorListaCIF) Scan For Between(Recno(), lnRec1, lnRec2) lcCodFiscal = Alltrim(cod_fiscal) IF m.llDataCursor AND !EMPTY(data) lcData = DTOS(data) ELSE lcData = DTOS(m.ldData) ENDIF lcDataFormatted = Left(m.lcData, 4) + "-" + Substr(m.lcData, 5, 2) + "-" + Substr(m.lcData, 7, 2) lcCodTara = loVerificareCod.GetCodTara(m.lcCodFiscal) llRO = (m.lcCodTara = 'RO') lcCodFiscalFRO = Strtran(m.lcCodFiscal, m.lcCodTara, '') lcCodFiscalFRO = Strtran(Strtran(Strtran(m.lcCodFiscalFRO, ' ', ''), 'RO', ''), 'R', '') If m.llRO AND (Isdigit(m.lcCodFiscalFRO) and Len(m.lcCodFiscalFRO) <= 10) loCol = Createobject("empty") AddProperty(loCol, "cui", Int(Val(m.lcCodFiscalFRO))) AddProperty(loCol, "data", m.lcDataFormatted) lnIdx = lnIdx + 1 laCoduri[lnIdx] = loCol ENDIF Endscan && tcCursorListaCIF IF m.lnIdx > 0 Dimension laCoduri(lnIdx) ENDIF lcSend = nfjsoncreate(@laCoduri) goLog.Log('lcSend: ' + m.lcSend, 'ANAF_SincronWebService_PlatitorTva') lcJsonString = '' Try loHTTP.Open('POST', lcServer, .F.) && !!! POST e blocat de furnizor loHTTP.setRequestHeader("Content-Type", "application/json;") loHTTP.Send(lcSend) If loHTTP.Status = 200 lcJsonString = ALLTRIM(loHTTP.responseText) IF LEFT(m.lcJsonString,1) <> '{' IF 'mentenanta'$LOWER(m.lcJsonString) AMESSAGEBOX('Serviciul web ANAF este in mentenanta!',0+48,_screen.Caption) ELSE AMESSAGEBOX('Serviciul web ANAF nu a intors un raspuns corespunzator.!' + CHR(13) + CHR(10) + m.lcJsonString,0+48,_screen.Caption) ENDIF lcJsonString = '' ENDIF ENDIF Catch To loEx AMESSAGEBOX(loEx.Message, 0 + 16, _Screen.Caption) Endtry * goLog.Log('lcJsonString: ' + m.lcJsonString, 'ANAF_SincronWebService_PlatitorTva') * SET STEP ON If Not Empty(m.lcJsonString) TRY loJsonObject = nfjsonread(m.lcJsonString) && nfJson from http://vfpx.codeplex.com/ lcCodJudet = "" IF TYPE('loJsonObject.found_vfpsafe_[1].adresa_domiciliu_fiscal.dcod_judet') <> 'U' lcCodJudet = loJsonObject.found_vfpsafe_[1].adresa_domiciliu_fiscal.dcod_judet ENDIF IF !EMPTY(m.lcCodJudet) lcAlias = This.ParseJsonANAFv8(loJsonObject, m.tcAlias) ELSE lcMesaj = 'Serviciul web ANAF intors mesaj de eroare: ' + IIF(TYPE('loJsonObject.message') = 'C', loJsonObject.message, '') AMESSAGEBOX(m.lcMesaj, 0+48, _screen.Caption) ENDIF CATCH TO loEx AMESSAGEBOX(loEx.Message, 0 + 16, _Screen.Caption) ENDTRY Endif If m.lnGrup < m.lnGrupuri INKEY(m.lnWaitSeconds)&& astept o secunda intre interogari ENDIF Endfor && lnGrup * Return m.lcAlias Endfunc && ANAF_SincronWebService_PlatitorTva ************************************* *** Parseaza obiectul cu raspunsul de la ANAF si creeaza cursorul crsANAF *** intoarce numele cursorului creat ************************************* Procedure ParseJsonANAFv8 Lparameters toJsonObject, m.tcAlias Local lcSave_SetDate, lnRec, loRec, loAdresa Local lcAlias, lnCUI, lnRecords, loDate, loDateGenerale, loEx, loInregistrareRTVAI Local loInregistrareSplitTVA, loInregistrareTVA, loJsonObject, loStareInactiv loJsonObject = Iif(Type('toJsonObject') = "O" And Pemstatus(toJsonObject, "found_vfpsafe_", 5), toJsonObject, Null) lcAlias = Iif(!Empty(m.tcAlias) And Type('tcAlias') = "C", m.tcAlias, "crsANAF") If !Used(m.lcAlias) Create Cursor (m.lcAlias) (cui N(13), data D, denumire V(100), firma V(100), adresa C(244), nrRegCom C(30), scpTVA L, data_inceput_ScpTVA D, data_sfarsit_ScpTVA D, data_anul_imp_ScpTVA D, mesaj_ScpTVA C(244), ; dataInceputTvaInc D, dataSfarsitTvaInc D, dataActualizareTvaInc D, dataPublicareTvaInc D, tipActTvaInc C(100), statusTvaIncasare L, dataInactivare D, dataReactivare D, dataPublicare D, dataRadiere D, statusInactivi L, ; dataInceputSplitTVA D, dataAnulareSplitTVA D, statusSplitTVA L, ; tva L, tvaincasare L, splittva L, inactiv L, ; mesaj V(100), judet V(100), strada V(100), nr V(20), localitate V(100), Bloc V(20), scara V(20), etaj V(20), apart V(20)) Endif If !Isnull(loJsonObject) goLog.Log('JsonObject ' + Transform(Alen(loJsonObject.found_vfpsafe_, 1)) + ' found ' + Transform(Alen(loJsonObject.notfound, 1)) + ' not found', 'ParseJsonANAF') lcSave_SetDate = Set("Date") Set Date To YMD * lnRecords = Alen(loJsonObject.found_vfpsafe_, 1) For lnRec = 1 To m.lnRecords loRec = loJsonObject.found_vfpsafe_(m.lnRec) If Type('loRec') <> 'O' LOOP ENDIF SELECT (m.lcAlias) SCATTER NAME loDate MEMO BLANK IF TYPE('loRec.date_generale') = 'O' loDateGenerale = loRec.date_generale loDateGenerale.adresa = This.RemoveCharacters(loDateGenerale.adresa) loAdresa = This.ParseAdresaAnaf(loDateGenerale.adresa) loDate.cui = loDateGenerale.Cui loDate.data = CTOD(loDateGenerale.data) loDate.denumire = This.RemoveCharacters(loDateGenerale.denumire) loDate.firma = loDateGenerale.denumire loDate.adresa = loDateGenerale.adresa loDate.judet = loAdresa.judet loDate.strada = loAdresa.strada loDate.nr = loAdresa.nr loDate.localitate = loAdresa.localitate loDate.bloc = loAdresa.Bloc loDate.scara = loAdresa.scara loDate.etaj = loAdresa.etaj loDate.apart = loAdresa.apart loDate.nrRegCom = IIF(TYPE('loDateGenerale.nrRegCom') <> 'U', loDateGenerale.nrRegCom, '') ENDIF IF TYPE('loRec.inregistrare_scop_tva') = 'O' loInregistrareTVA = loRec.inregistrare_scop_tva loDate.scpTVA = loInregistrareTVA.scpTVA IF TYPE('loInregistrareTVA.perioade_tva',1) <> "U" TRY loDate.data_inceput_ScpTVA = CTOD(loInregistrareTVA.perioade_tva[1].data_inceput_ScpTVA) loDate.data_sfarsit_ScpTVA = CTOD(loInregistrareTVA.perioade_tva[1].data_sfarsit_ScpTVA) loDate.data_anul_imp_ScpTVA = CTOD(loInregistrareTVA.perioade_tva[1].data_anul_imp_ScpTVA) loDate.mesaj_ScpTVA = loInregistrareTVA.perioade_tva[1].mesaj_ScpTVA CATCH TO loEx ENDTRY ENDIF ENDIF IF TYPE('loRec.inregistrare_RTVAI') = 'O' loInregistrareRTVAI = loRec.inregistrare_RTVAI loDate.dataInceputTvaInc = CTOD(loInregistrareRTVAI.dataInceputTvaInc) loDate.dataSfarsitTvaInc = CTOD(loInregistrareRTVAI.dataSfarsitTvaInc) loDate.dataActualizareTvaInc = CTOD(loInregistrareRTVAI.dataActualizareTvaInc) loDate.dataPublicareTvaInc = CTOD(loInregistrareRTVAI.dataPublicareTvaInc) loDate.tipActTvaInc = loInregistrareRTVAI.tipActTvaInc loDate.statusTvaIncasare = loInregistrareRTVAI.statusTvaIncasare ENDIF IF TYPE('loRec.stare_inactiv') = 'O' loStareInactiv = loRec.stare_inactiv loDate.dataInactivare = CTOD(loStareInactiv.dataInactivare) loDate.dataReactivare = CTOD(loStareInactiv.dataReactivare) loDate.dataPublicare = CTOD(loStareInactiv.dataPublicare) loDate.dataRadiere = CTOD(loStareInactiv.dataRadiere) loDate.statusInactivi = loStareInactiv.statusInactivi ENDIF IF TYPE('loRec.inregistrare_SplitTVA') = 'O' loInregistrareSplitTVA = loRec.inregistrare_SplitTVA loDate.dataInceputSplitTVA = CTOD(loInregistrareSplitTVA.dataInceputSplitTVA) loDate.dataAnulareSplitTVA = CTOD(loInregistrareSplitTVA.dataAnulareSplitTVA) loDate.statusSplitTVA = loInregistrareSplitTVA.statusSplitTVA loDate.statusSplitTVA = loInregistrareSplitTVA.statusSplitTVA ENDIF loDate.tva = loDate.scpTVA loDate.tvaincasare = loDate.statusTvaIncasare loDate.splittva = loDate.statusSplitTVA loDate.inactiv = loDate.statusInactivi loDate.mesaj = loDate.mesaj_ScpTVA IF !EMPTY(NVL(loDate.cui, 0)) Insert Into (m.lcAlias) FROM NAME loDate ENDIF Endfor For lnRec = 1 To Alen(loJsonObject.notfound, 1) lnCUI = loJsonObject.notfound(m.lnRec) If Type('lnCUI') = 'N' SELECT (m.lcAlias) SCATTER NAME loDate MEMO BLANK loDate.cui = m.lnCUI IF !EMPTY(NVL(loDate.cui, 0)) Insert Into (m.lcAlias) FROM NAME loDate ENDIF Endif Endfor * Set Date To &lcSave_SetDate Else goLog.Log('JsonObject is null', 'ParseJsonANAF') Endif Return m.lcAlias ENDPROC ************************************* *** Parseaza obiectul cu raspunsul de la ANAF si creeaza cursorul crsANAF *** intoarce numele cursorului creat ************************************* Procedure ParseJsonANAFv3 Lparameters toJsonObject, m.tcAlias Local lcSave_SetDate, lnRec, loRec, loAdresa loJsonObject = Iif(Type('toJsonObject') = "O" And Pemstatus(toJsonObject, "found_vfpsafe_", 5), toJsonObject, Null) lcAlias = Iif(!Empty(m.tcAlias) And Type('tcAlias') = "C", m.tcAlias, "crsANAF") If !Used(m.lcAlias) Create Cursor (m.lcAlias) (cui N(13), data D, denumire V(100), firma V(100), adresa C(244), nrRegCom C(30), scpTVA L, data_inceput_ScpTVA D, data_sfarsit_ScpTVA D, data_anul_imp_ScpTVA D, mesaj_ScpTVA C(244), ; dataInceputTvaInc D, dataSfarsitTvaInc D, dataActualizareTvaInc D, dataPublicareTvaInc D, tipActTvaInc C(100), statusTvaIncasare L, dataInactivare D, dataReactivare D, dataPublicare D, dataRadiere D, statusInactivi L, ; dataInceputSplitTVA D, dataAnulareSplitTVA D, statusSplitTVA L, ; tva L, tvaincasare L, splittva L, inactiv L, ; mesaj V(100), judet V(100), strada V(100), nr V(20), localitate V(100), Bloc V(20), scara V(20), etaj V(20), apart V(20)) Endif If !Isnull(loJsonObject) goLog.Log('JsonObject ' + Transform(Alen(loJsonObject.found_vfpsafe_, 1)) + ' found ' + Transform(Alen(loJsonObject.notfound, 1)) + ' not found', 'ParseJsonANAF') lcSave_SetDate = Set("Date") Set Date To YMD * For lnRec = 1 To Alen(loJsonObject.found_vfpsafe_, 1) loRec = loJsonObject.found_vfpsafe_(m.lnRec) If Type('loRec') = 'O' loRec.adresa = This.RemoveCharacters(loRec.adresa) loAdresa = This.ParseAdresaAnaf(loRec.adresa) lcNrRegCom = IIF(TYPE('loRec.nrRegCom') <> 'U', loRec.nrRegCom, '') Insert Into (m.lcAlias) (cui, data, denumire, firma, adresa, nrRegCom, ; scpTVA, data_inceput_ScpTVA, data_sfarsit_ScpTVA, data_anul_imp_ScpTVA, mesaj_ScpTVA, ; dataInceputTvaInc, dataSfarsitTvaInc, dataActualizareTvaInc, dataPublicareTvaInc, tipActTvaInc, statusTvaIncasare, ; dataInactivare, dataReactivare, dataPublicare, dataRadiere, statusInactivi, ; dataInceputSplitTVA, dataAnulareSplitTVA, statusSplitTVA, ; tva, tvaincasare, splittva, inactiv, ; mesaj, judet, strada, nr, localitate, Bloc, scara, etaj, apart) VALUES ; (loRec.cui, CTOD(loRec.data), loRec.denumire, loRec.denumire, loRec.adresa, m.lcNrRegCom, ; loRec.scpTVA, CTOD(loRec.data_inceput_ScpTVA), CTOD(loRec.data_sfarsit_ScpTVA), CTOD(loRec.data_anul_imp_ScpTVA), loRec.mesaj_ScpTVA, ; CTOD(loRec.dataInceputTvaInc), CTOD(loRec.dataSfarsitTvaInc), CTOD(loRec.dataActualizareTvaInc), CTOD(loRec.dataPublicareTvaInc), loRec.tipActTvaInc, loRec.statusTvaIncasare, ; CTOD(loRec.dataInactivare), CTOD(loRec.dataReactivare), CTOD(loRec.dataPublicare), CTOD(loRec.dataRadiere), loRec.statusInactivi, ; CTOD(loRec.dataInceputSplitTVA), CTOD(loRec.dataAnulareSplitTVA), loRec.statusSplitTVA, ; loRec.scpTVA, loRec.statusTvaIncasare, loRec.statusSplitTVA, loRec.statusInactivi, ; loRec.mesaj_ScpTVA, loAdresa.judet, loAdresa.strada, loAdresa.nr, loAdresa.localitate, loAdresa.Bloc, loAdresa.scara, loAdresa.etaj, loAdresa.apart) Endif Endfor For lnRec = 1 To Alen(loJsonObject.notfound, 1) loRec = loJsonObject.notfound(m.lnRec) If Type('loRec') = 'O' loRec.adresa = This.RemoveCharacters(loRec.adresa) loAdresa = This.ParseAdresaAnaf(loRec.adresa) lcNrRegCom = IIF(TYPE('loRec.nrRegCom') <> 'U', loRec.nrRegCom, '') Insert Into (m.lcAlias) (cui, data, denumire, firma, adresa, nrRegCom, ; scpTVA, data_inceput_ScpTVA, data_sfarsit_ScpTVA, data_anul_imp_ScpTVA, mesaj_ScpTVA, ; dataInceputTvaInc, dataSfarsitTvaInc, dataActualizareTvaInc, dataPublicareTvaInc, tipActTvaInc, statusTvaIncasare, ; dataInactivare, dataReactivare, dataPublicare, dataRadiere, statusInactivi, ; dataInceputSplitTVA, dataAnulareSplitTVA, statusSplitTVA, ; tva, tvaincasare, splittva, inactiv, ; mesaj, judet, strada, nr, localitate, Bloc, scara, etaj, apart) VALUES ; (loRec.cui, CTOD(loRec.data), loRec.denumire, loRec.denumire, loRec.adresa, m.lcNrRegCom, ; loRec.scpTVA, CTOD(loRec.data_inceput_ScpTVA), CTOD(loRec.data_sfarsit_ScpTVA), CTOD(loRec.data_anul_imp_ScpTVA), loRec.mesaj_ScpTVA, ; CTOD(loRec.dataInceputTvaInc), CTOD(loRec.dataSfarsitTvaInc), CTOD(loRec.dataActualizareTvaInc), CTOD(loRec.dataPublicareTvaInc), loRec.tipActTvaInc, loRec.statusTvaIncasare, ; CTOD(loRec.dataInactivare), CTOD(loRec.dataReactivare), CTOD(loRec.dataPublicare), CTOD(loRec.dataRadiere), loRec.statusInactivi, ; CTOD(loRec.dataInceputSplitTVA), CTOD(loRec.dataAnulareSplitTVA), loRec.statusSplitTVA, ; loRec.scpTVA, loRec.statusTvaIncasare, loRec.statusSplitTVA, loRec.statusInactivi, ; loRec.mesaj_ScpTVA, loAdresa.judet, loAdresa.strada, loAdresa.nr, loAdresa.localitate, loAdresa.Bloc, loAdresa.scara, loAdresa.etaj, loAdresa.apart) Endif Endfor * Set Date To &lcSave_SetDate Else goLog.Log('JsonObject is null', 'ParseJsonANAF') Endif Return m.lcAlias ENDPROC ************************************* *** Parseaza obiectul cu raspunsul de la ANAF si creeaza cursorul crsANAF *** intoarce numele cursorului creat ************************************* Procedure ParseJsonANAFv1 Lparameters toJsonObject, m.tcAlias Local lcSave_SetDate, lnRec, loRec, loAdresa loJsonObject = Iif(Type('toJsonObject') = "O" And Pemstatus(toJsonObject, "found_vfpsafe_", 5), toJsonObject, Null) lcAlias = Iif(!Empty(m.tcAlias) And Type('tcAlias') = "C", m.tcAlias, "crsANAF") If !Used(m.lcAlias) Create Cursor (m.lcAlias)(cui N(13), Data D, denumire V(100), firma V(100), adresa V(244), tva L, data_sfarsit D, data_anul_imp D, mesaj V(100), judet V(100), strada V(100), nr V(20), localitate V(100), Bloc V(20), scara V(20), etaj V(20), apart V(20)) Endif If !Isnull(loJsonObject) goLog.Log('JsonObject ' + Transform(Alen(loJsonObject.found_vfpsafe_, 1)) + ' found ' + Transform(Alen(loJsonObject.notfound, 1)) + ' not found', 'ParseJsonANAF') lcSave_SetDate = Set("Date") Set Date To YMD * For lnRec = 1 To Alen(loJsonObject.found_vfpsafe_, 1) loRec = loJsonObject.found_vfpsafe_(m.lnRec) If Type('loRec') = 'O' loRec.adresa = This.RemoveCharacters(loRec.adresa) loAdresa = This.ParseAdresaAnaf(loRec.adresa) Insert Into (m.lcAlias) (cui, Data, denumire, firma, adresa, tva, data_sfarsit, data_anul_imp, mesaj, judet, strada, nr, localitate, Bloc, scara, etaj, apart) Values; (loRec.cui, Ctod(loRec.Data), loRec.denumire, loRec.denumire, loRec.adresa, loRec.tva, Ctod(loRec.data_sfarsit), Ctod(loRec.data_anul_imp), loRec.mesaj, loAdresa.judet, loAdresa.strada, loAdresa.nr, loAdresa.localitate, loAdresa.Bloc, loAdresa.scara, loAdresa.etaj, loAdresa.apart) Endif Endfor For lnRec = 1 To Alen(loJsonObject.notfound, 1) loRec = loJsonObject.notfound(m.lnRec) If Type('loRec') = 'O' loRec.adresa = This.RemoveCharacters(loRec.adresa) loAdresa = This.ParseAdresaAnaf(loRec.adresa) Insert Into (m.lcAlias) (cui, Data, denumire, firma, adresa, tva, data_sfarsit, data_anul_imp, mesaj, judet, strada, nr, localitate, Bloc, scara, etaj, apart) Values; (loRec.cui, Ctod(loRec.Data), loRec.denumire, loRec.denumire, loRec.adresa, loRec.tva, Ctod(loRec.data_sfarsit), Ctod(loRec.data_anul_imp), loRec.mesaj, loAdresa.judet, loAdresa.strada, loAdresa.nr, loAdresa.localitate, loAdresa.Bloc, loAdresa.scara, loAdresa.etaj, loAdresa.apart) Endif Endfor * Set Date To &lcSave_SetDate Else goLog.Log('JsonObject is null', 'ParseJsonANAF') Endif Return m.lcAlias Endproc *** curata textul de diacritice, spatii, CR/LF Function RemoveCharacters Lparameters tcText, tlDiacritics, tlSpaces, tlCR *** tcText: textul initial *** tlDiacritics: inlocuieste diacriticele *** tlSpaces: sterge spatiile *** tlCR: sterge CR si LF If Pcount() = 1 tlDiacritics = .T. Endif Local lcText lcText = Nvl(m.tcText, '') If m.tlDiacritics lcText = STRTRAN(STRTRAN(Strtran(Nvl(m.lcText, ''), Chr(197) + CHR(162), 'T', 1,100,1), Chr(197) + CHR(63), 'S', 1,100,1), Chr(196) + CHR(63), 'A', 1,100,1) lcText = Strtran(Nvl(m.lcText, ''), Chr(195) + CHR(63), 'I', 1,100,1) lcText = Strtran(Strtran(Strtran(Strtran(Strtran(Nvl(m.lcText, ''), Chr(170), 'S', 1,100,1), Chr(222), 'T', 1,100,1), Chr(226), 'A', 1,100,1), Chr(227), 'A', 1,100,1), Chr(238), 'I', 1,100,1) lcText = STRTRAN(Strtran(Strtran(Strtran(Nvl(m.lcText, ''), Chr(206), 'I', 1,100,1), Chr(194), 'A', 1,100,1), Chr(195), 'A', 1,100,1), Chr(196), 'A', 1,100,1) Endif If m.tlSpaces lcText = Strtran(m.lcText, ' ', '', 1, 100, 1) Endif If m.tlCR lcText = Strtran(Strtran(m.lcText, Chr(13), ''), Chr(10), '') Endif Return m.lcText ENDFUNC ****************************************************** *** Primeste o adresa de forma * JUD. CONSTANTA, MUN. CONSTANTA, ALEEA CRIZANTEMELOR, NR.6, CAMERA 2, BL.H1, SC.F, ET.2, AP.109 *** Intoarce un obiect cu proprietatile: STRADA, NR, LOCALITATE ****************************************************** Procedure ParseAdresaAnaf Lparameters tcAdresa * JUD. CONSTANTA, MUN. CONSTANTA, ALEEA CRIZANTEMELOR, NR.6, CAMERA 2, BL.H1, SC.F, ET.2, AP.109 Local lcAdresa, loAdresa, lcCamera, lcItem, lnItem, lnItems, lcPrefix lcAdresa = Iif(!Empty(m.tcAdresa) And Type('tcAdresa') = 'C', Alltrim(m.tcAdresa), "") lcCamera = "" loAdresa = Createobject("empty") AddProperty(loAdresa, "judet", "") AddProperty(loAdresa, "strada", "") AddProperty(loAdresa, "nr", "") AddProperty(loAdresa, "localitate", "") AddProperty(loAdresa, "bloc", "") AddProperty(loAdresa, "scara", "") AddProperty(loAdresa, "etaj", "") AddProperty(loAdresa, "apart", "") If !Empty(m.lcAdresa) lnItems = Getwordcount(m.lcAdresa) For lnItem = 1 To m.lnItems lcItem = Alltrim(Getwordnum(m.lcAdresa, m.lnItem, ',')) Do Case Case m.lnItem = 1 && 'JUD.'$UPPER(lcItem) *!* lcJudet = ALLTRIM(STRTRAN(m.lcItem, 'JUD.', '',1,1,1)) loAdresa.judet = Getwordnum(m.lcItem, 2, ' ') && CONSTANTA Case m.lnItem = 2 && 'MUN.'$UPPER(lcItem) *!* lcLocalitate = ALLTRIM(STRTRAN(m.lcItem, 'MUN.', '',1,1,1)) IF LEFT(m.lcItem, 7) = "SECTOR " loAdresa.localitate = STRTRAN(m.lcItem, "SECTOR ", "BUCURESTI SECTORUL ") ELSE loAdresa.localitate = Getwordnum(m.lcItem, 2, ' ') && CONSTANTA ENDIF Case m.lnItem = 3 lcPrefix = Getwordnum(m.lcItem, 1, ' ') && STR. / BD. loAdresa.strada = ALLTRIM(STRTRAN(m.lcItem, m.lcPrefix, '',1,1,1)) && Getwordnum(m.lcItem, 2, ' ') && CRIZANTEMELOR Case m.lnItem = 4 loAdresa.nr = Alltrim(Strtran(m.lcItem, 'NR.', '', 1, 1, 1)) && 6 ENDCASE IF Left(Upper(m.lcItem), 3) = 'BL.' loAdresa.Bloc = Alltrim(Strtran(m.lcItem, 'BL.', '', 1, 1, 1)) && H1 ENDIF IF Left(Upper(m.lcItem), 3) = 'SC.' loAdresa.scara = Alltrim(Strtran(m.lcItem, 'SC.', '', 1, 1, 1)) && F ENDIF IF Left(Upper(m.lcItem), 3) = 'ET.' loAdresa.etaj = Alltrim(Strtran(m.lcItem, 'ET.', '', 1, 1, 1)) && 2 ENDIF IF Left(Upper(m.lcItem), 3) = 'AP.' loAdresa.apart = Alltrim(Strtran(m.lcItem, 'AP.', '', 1, 1, 1)) && 109 ENDIF IF Left(Upper(m.lcItem), 6) = 'CAMERA' lcCamera = Alltrim(Strtran(m.lcItem, 'CAMERA', '', 1, 1, 1)) && 2 ENDIF ENDFOR If !Empty(m.lcCamera) And !Empty(loAdresa.apart) loAdresa.apart = loAdresa.apart + ' C. ' + m.lcCamera Endif Endif && !empty Return loAdresa Endproc Enddefine && VerificareANAF *** WEBSITE ALTERNATIV PENTRU VERIFICARE PLATITOR TVA VIES Procedure VIES_VAT Lparameters tara, vat_id Local lResult lResult = .F. #Define HTTPSTATUS_OK 200 #Define HTTPSTATUS_CREATED 201 #Define HTTPSTATUS_ACCEPTED 202 #Define HTTPSTATUS_MULTISTATUS 207 #Define HTTPSTATUS_BADREQUEST 400 #Define HTTPSTATUS_UNAUTHORIZED 401 #Define HTTPSTATUS_FORBIDDEN 403 #Define HTTPSTATUS_NOTFOUND 404 #Define HTTPSTATUS_INTERNALSERVERERROR 500 Local oHTTP As "Microsoft.XMLHTTP", cURL oHTTP = Createobject("Microsoft.XMLHTTP") cURL = 'http://isvat.appspot.com/' + Upper(Trim(tara)) + '/' + Upper(Trim(vat_id)) + '/' Try oHTTP.Open("GET", cURL, .F.) oHTTP.Send() If oHTTP.Status = HTTPSTATUS_OK lResult = Iif(oHTTP.responseText = 'true', .T., .F.) Endif Catch lResult = .F. * error handling code here. Endtry Return lResult Endproc && VIES_VAT Procedure ONRC cCui = '1879855' oHTTP = Createobject('winhttp.winhttprequest.5.1') oHTTP.Open('POST', 'http://recom1-ssl.onrc.ro/cgi-bin/intguest.cgi', .F.) oHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") oHTTP.setRequestHeader("Referrer", "http://recom1-ssl.onrc.ro/cgi-bin/recom.cgi?o7=1&l=R") oHTTP.setRequestHeader("Authorization", "Basic Z3Vlc3Q6Z3Vlc3Q") oHTTP.setRequestHeader("credentials", "guest:guest") oHTTP.Send("l=R&o=7&jud=99&cfiscalf=" + cCui + "&cauta=Selectie") cTable = Strextract(oHTTP.responseText, '', 5, 4) Messagebox(cTable) Endproc && ONRC *** FORMULAR INTRODUCERE COD KAPTCH MFINANTE Define Class IntroducereCod As Form Height = 140 Width = 393 DoCreate = .T. AutoCenter = .T. Caption = "Cod Siguranta Ministerul de Finante" WindowType = 1 cCod = "" _MemberData = [] ccodfile = "" Name = "Form1" ControlBox = .F. Add Object label1 As Label With ; BackStyle = 0, ; Caption = "Introduceti codul din imaginea de mai sus" + CRLF + "si apasati ENTER", ; Height = 40, ; Left = 39, ; Top = 84, ; Width = 234, ; Name = "Label1" Add Object text1 As TextBox With ; FontBold = .T., ; FontSize = 12, ; Height = 30, ; Left = 283, ; Top = 76, ; Width = 54, ; Name = "Text1" Add Object imagine As Image With ; Height = 53, ; Left = 83, ; Top = 12, ; Width = 200, ; Name = "Imagine" Procedure Init Lparameters tcCodFile This.ccodfile = m.tcCodFile Thisform.imagine.Picture = m.tcCodFile This.Icon = _Screen.Icon Endproc Procedure Unload Return This.cCod Endproc Procedure text1.Valid Thisform.cCod = Alltrim(This.Value) Thisform.Hide() Endproc Enddefine && IntroducereCod