- validare.prg: cele 7 campuri de perioada (inregistrare TVA, TVA la incasare, inactivare/reactivare) duse din raspunsul ANAF pana in cVerificareCod - validare.prg: AnafDecodeResponseText - raspunsul HTTP se citeste din responseBody prin ADODB.Stream cu Charset utf-8, cu cadere inapoi pe comportamentul vechi; repara diacriticele pierdute la marshalling-ul COM al lui responseText - oproceduri_comune.prg: perioadele in mesajul de detalii; fix id_part N(16), data D in crsXMLParteneriVerificare (Insert Into esua tacit, lista ramanea goala) - overificari.vc2: 7 coloane noi in grid, dublu-click pe Denumire/Cod fiscal deschide fisa partenerului, captionuri corectate in "inregistrare TVA" - oparteneri / ofacturare_comun / onomenclatoare: id_part in SELECT-urile care alimenteaza verificarea - teste headless noi: utile/Teste/test_todo21_perioade_anaf.prg, utile/Teste/todo21/ Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GztNyTRxjHqBg5kyNMmcy1
195 lines
7.8 KiB
Plaintext
195 lines
7.8 KiB
Plaintext
* test_todo21_perioade_anaf.prg
|
|
* TODO #21: perioadele ANAF (scop TVA, TVA la incasare, inactivare) duse pana la utilizator.
|
|
* Verifica lantul de date din banda B, care ruleaza integral din .prg (nu are nevoie de
|
|
* write-back-ul binarelor): cursorul crsANAF -> Procedure ANAF -> oEntitate (VERIFICARE_CIF)
|
|
* -> verifica_partener_show_info. Mesajul modal e capturat cu mock_amessagebox (gcMockUltimMesaj),
|
|
* nu afisat, ca sa nu blocheze rularea headless.
|
|
*
|
|
* Codurile fiscale de test se aleg din istoric_coduri_fiscale (unul cu perioada de TVA la
|
|
* incasare, unul cu inactivare), ca verificarea sa treaca prin fluxul real ANAF/cache.
|
|
*
|
|
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\test_todo21_perioade_anaf.prg"
|
|
* Verdict in log: cate un rand OK/FAIL per pas si un TOTAL la final.
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
SET DELETED ON
|
|
SET EXACT ON
|
|
SET CENTURY ON
|
|
SET DATE DMY
|
|
SET NULLDISPLAY TO ''
|
|
CLOSE DATABASES
|
|
|
|
PUBLIC gcUILog, gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns, gnButon
|
|
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\test_todo21_perioade_anaf_log.txt"
|
|
gcMockUltimMesaj = ''
|
|
gnMockUltimTip = 0
|
|
gnMockRaspuns = 1
|
|
gnButon = 0
|
|
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
|
|
|
PUBLIC gnEsecuri
|
|
gnEsecuri = 0
|
|
|
|
ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
ON SHUTDOWN QUIT
|
|
|
|
TRY
|
|
*-- VFP rezolva procedurile in ordinea in care au fost deschise fisierele (castiga PRIMUL),
|
|
*-- deci mock-ul si umbra trebuie incarcate INAINTE ca test_init_env_auto sa incarce
|
|
*-- oproceduri_comune.prg real. verifica_partener_show_info sta in ACELASI fisier cu
|
|
*-- FUNCTION amessagebox, asa ca umbra e o copie a fisierului cu amessagebox redenumit:
|
|
*-- apelul cade atunci pe mock si mesajul poate fi verificat fara dialog modal.
|
|
LOCAL lcSrc, lcUmbra
|
|
lcUmbra = ADDBS(SYS(2023)) + 'oproceduri_comune_umbra.prg'
|
|
lcSrc = FILETOSTR("D:\ROA\ROACONT\COMUN\programe\oproceduri_comune.prg")
|
|
lcSrc = STRTRAN(lcSrc, CHR(13) + CHR(10) + 'Function amessagebox' + CHR(13) + CHR(10), ;
|
|
CHR(13) + CHR(10) + 'Function amessagebox_umbrit' + CHR(13) + CHR(10))
|
|
STRTOFILE(lcSrc, lcUmbra)
|
|
ERASE (FORCEEXT(lcUmbra, 'fxp'))
|
|
|
|
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
|
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
|
SET PROCEDURE TO (lcUmbra) ADDITIVE
|
|
|
|
DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
|
IF gnHandle <= 0
|
|
DO PrLogLocal WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
|
|
QUIT
|
|
ENDIF
|
|
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle)
|
|
|
|
DO PrLogLocal WITH 'umbra + mock amessagebox incarcate (' + lcUmbra + ')'
|
|
|
|
*-- proba: mock-ul chiar castiga la un apel direct?
|
|
LOCAL lnProba
|
|
lnProba = amessagebox('PING', 0 + 64, 'T')
|
|
DO PrLogLocal WITH 'proba amessagebox a intors ' + TRANSFORM(lnProba)
|
|
|
|
*-- coduri fiscale reale: unul cu perioada de TVA la incasare, unul cu inactivare
|
|
LOCAL lcSql, lcCodTvaInc, lcCodInactiv
|
|
TEXT TO lcSql NOSHOW
|
|
select cod_fiscal_n from (
|
|
select cod_fiscal_n from istoric_coduri_fiscale
|
|
where data_inceput_tvainc is not null and cod_fiscal_n is not null
|
|
order by dataorav_anaf desc) where rownum <= 1
|
|
ENDTEXT
|
|
lcCodTvaInc = ''
|
|
IF goExecutor.oExecuta(lcSql, 'crsT21a') AND USED('crsT21a') AND RECCOUNT('crsT21a') > 0
|
|
lcCodTvaInc = ALLTRIM(TRANSFORM(NVL(crsT21a.cod_fiscal_n, 0)))
|
|
ENDIF
|
|
USE IN (SELECT('crsT21a'))
|
|
|
|
TEXT TO lcSql NOSHOW
|
|
select cod_fiscal_n from (
|
|
select cod_fiscal_n from istoric_coduri_fiscale
|
|
where data_inactivare is not null and cod_fiscal_n is not null
|
|
order by dataorav_anaf desc) where rownum <= 1
|
|
ENDTEXT
|
|
lcCodInactiv = ''
|
|
IF goExecutor.oExecuta(lcSql, 'crsT21b') AND USED('crsT21b') AND RECCOUNT('crsT21b') > 0
|
|
lcCodInactiv = ALLTRIM(TRANSFORM(NVL(crsT21b.cod_fiscal_n, 0)))
|
|
ENDIF
|
|
USE IN (SELECT('crsT21b'))
|
|
|
|
DO PrLogLocal WITH 'coduri de test: TVA incasare=[' + lcCodTvaInc + '] inactiv=[' + lcCodInactiv + ']'
|
|
IF EMPTY(lcCodTvaInc) AND EMPTY(lcCodInactiv)
|
|
DO PrLogLocal WITH 'FAIL: nu s-a gasit niciun cod fiscal de test in istoric_coduri_fiscale'
|
|
gnEsecuri = gnEsecuri + 1
|
|
ENDIF
|
|
|
|
DO PrVerificaCod WITH lcCodTvaInc, 'TVA la incasare'
|
|
DO PrVerificaCod WITH lcCodInactiv, 'inactivare'
|
|
|
|
DO PrLogLocal WITH IIF(gnEsecuri = 0, 'TOTAL OK', 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)')
|
|
CATCH TO loEx
|
|
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ')'
|
|
ENDTRY
|
|
|
|
QUIT
|
|
|
|
**********************************************************
|
|
PROCEDURE PrVerificaCod
|
|
LPARAMETERS tcCodFiscal, tcEticheta
|
|
|
|
LOCAL loVerificare, loEnt, ldData, lcXml, lnRaspuns, llArePerioada
|
|
IF EMPTY(tcCodFiscal)
|
|
DO PrLogLocal WITH 'SKIP ' + tcEticheta + ': cod fiscal negasit'
|
|
RETURN
|
|
ENDIF
|
|
|
|
ldData = DATE(gnAn, gnLuna, 1)
|
|
loVerificare = CREATEOBJECT('verificarecod') && validare.prg
|
|
lcXml = loVerificare.Verificare('CIF', tcCodFiscal, 'ANAF', ldData)
|
|
|
|
IF TYPE('loVerificare.oEntitate') <> 'O'
|
|
DO PrLogLocal WITH 'FAIL ' + tcEticheta + ': oEntitate lipseste pentru ' + tcCodFiscal
|
|
gnEsecuri = gnEsecuri + 1
|
|
RETURN
|
|
ENDIF
|
|
loEnt = loVerificare.oEntitate
|
|
|
|
*-- 1. cele 7 campuri noi exista pe obiectul intors de VERIFICARE_CIF
|
|
LOCAL lnLipsa, lcCamp, laCampuri[7], lnI
|
|
laCampuri[1] = 'data_inceput_scptva'
|
|
laCampuri[2] = 'data_sfarsit_scptva'
|
|
laCampuri[3] = 'data_anul_imp_scptva'
|
|
laCampuri[4] = 'data_inceput_tvainc'
|
|
laCampuri[5] = 'data_sfarsit_tvainc'
|
|
laCampuri[6] = 'data_inactivare'
|
|
laCampuri[7] = 'data_reactivare'
|
|
lnLipsa = 0
|
|
FOR lnI = 1 TO 7
|
|
lcCamp = laCampuri[lnI]
|
|
IF !PEMSTATUS(loEnt, lcCamp, 5)
|
|
lnLipsa = lnLipsa + 1
|
|
DO PrLogLocal WITH 'FAIL ' + tcEticheta + ': lipseste ' + lcCamp + ' din oEntitate'
|
|
ENDIF
|
|
ENDFOR
|
|
IF lnLipsa = 0
|
|
DO PrLogLocal WITH 'OK ' + tcEticheta + ': cele 7 campuri de perioada exista in oEntitate'
|
|
ELSE
|
|
gnEsecuri = gnEsecuri + 1
|
|
ENDIF
|
|
|
|
DO PrLogLocal WITH ' ' + tcCodFiscal + ' firma=[' + ALLTRIM(TRANSFORM(loEnt.firma)) + '] sursa=[' + ALLTRIM(TRANSFORM(loEnt.sursa)) + ']'
|
|
DO PrLogLocal WITH ' scpTVA ' + DTOC(loEnt.data_inceput_scptva) + ' - ' + DTOC(loEnt.data_sfarsit_scptva) + ' anul.imp ' + DTOC(loEnt.data_anul_imp_scptva)
|
|
DO PrLogLocal WITH ' tvaInc ' + DTOC(loEnt.data_inceput_tvainc) + ' - ' + DTOC(loEnt.data_sfarsit_tvainc)
|
|
DO PrLogLocal WITH ' inactiv ' + DTOC(loEnt.data_inactivare) + ' reactivat ' + DTOC(loEnt.data_reactivare)
|
|
|
|
*-- 2. cel putin o perioada e completata (altfel testul nu dovedeste nimic despre transport)
|
|
llArePerioada = !EMPTY(loEnt.data_inceput_scptva) OR !EMPTY(loEnt.data_inceput_tvainc) OR !EMPTY(loEnt.data_inactivare)
|
|
IF llArePerioada
|
|
DO PrLogLocal WITH 'OK ' + tcEticheta + ': cel putin o perioada e completata'
|
|
ELSE
|
|
DO PrLogLocal WITH 'FAIL ' + tcEticheta + ': toate perioadele sunt goale (transportul nu e dovedit)'
|
|
gnEsecuri = gnEsecuri + 1
|
|
ENDIF
|
|
|
|
*-- 3. mesajul de verificare individuala contine perioadele
|
|
gcMockUltimMesaj = ''
|
|
lnRaspuns = verifica_partener_show_info(loEnt, tcCodFiscal, 'TEST ' + tcEticheta, '')
|
|
IF 'Perioada TVA' $ gcMockUltimMesaj OR 'Inactivare:' $ gcMockUltimMesaj
|
|
DO PrLogLocal WITH 'OK ' + tcEticheta + ': mesajul contine perioadele'
|
|
ELSE
|
|
DO PrLogLocal WITH 'FAIL ' + tcEticheta + ': mesajul NU contine perioadele'
|
|
gnEsecuri = gnEsecuri + 1
|
|
ENDIF
|
|
DO PrLogLocal WITH '--- mesaj ---' + CHR(13) + CHR(10) + gcMockUltimMesaj + '--- sfarsit mesaj ---'
|
|
ENDPROC
|
|
|
|
**********************************************************
|
|
PROCEDURE PrLogLocal
|
|
LPARAMETERS tcMsg
|
|
LOCAL lcL
|
|
SET SAFETY OFF
|
|
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
|
STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
|
|
ENDPROC
|
|
|
|
**********************************************************
|
|
PROCEDURE PrErrLocal
|
|
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
|
DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
|
|
ENDPROC
|