*!* 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
| ', 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, ' |