TODO 21: perioade TVA la verificarea codurilor fiscale + diacritice ANAF
- 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
This commit is contained in:
194
utile/Teste/test_todo21_perioade_anaf.prg
Normal file
194
utile/Teste/test_todo21_perioade_anaf.prg
Normal file
@@ -0,0 +1,194 @@
|
||||
* 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
|
||||
Reference in New Issue
Block a user