Files
comun/utile/Teste/test_todo21_perioade_anaf.prg
Marius Mutu 2b695b3656 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
2026-08-22 18:26:17 +03:00

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