Files
comun/utile/Teste/todo21/test_todo21_grid_dblclick.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

281 lines
12 KiB
Plaintext

* test_todo21_grid_dblclick.prg
* TODO #21, benzile A (coloanele de perioada in grid-ul de verificare coduri fiscale) si C
* (dublu-click pe denumire/cod fiscal ROA -> editare partener, coloanele ANAF raman pe verificare).
* Instantiaza DIRECT frm_verificare_parteneri (COMUN\clase\overificari.vc2), fara Show(1) modal -
* cursorul crsVerificareParteneri e construit ca in oproceduri_comune.prg (verificare_parteneri),
* fara sa treaca prin acea procedura (care ar deschide formularul modal).
*
* Mock-uri (fisiere DIFERITE de overificari.vc2 - rezolutia "primul incarcat" e sigura):
* mock_amessagebox.prg - dialogul "partener neidentificat"
* mock_meniu_dblclick_deps.prg - nom_parteneri_modifica si VerificaCodFiscal (numara apelurile)
*
* Coduri de test: un cod fiscal REAL cu perioada ANAF (ales dinamic din istoric_coduri_fiscale,
* ca in test_todo21_perioade_anaf.prg) si un partener REAL din NOM_PARTENERI (ales dinamic, cel
* mai nou activ), plus un rand cu id_part = 0 pentru cazul "partener neidentificat".
*
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\test_todo21_grid_dblclick.prg"
* Verdict in log: TOTAL OK / TOTAL FAIL: n pas(i).
SET SAFETY OFF
SET TALK OFF
SET DELETED ON
SET EXACT ON
SET CENTURY ON
SET DATE DMY
SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcLog
gcLog = "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\test_todo21_grid_dblclick_log.txt"
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
PUBLIC gnEsecuri
gnEsecuri = 0
ON ERROR DO PrErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
PUBLIC gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns
gcMockUltimMesaj = ''
gnMockUltimTip = 0
gnMockRaspuns = 6
PUBLIC gnMockNomModCount, gnMockNomModId, gnMockVerifCodCount
gnMockNomModCount = 0
gnMockNomModId = 0
gnMockVerifCodCount = 0
TRY
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\mock_meniu_dblclick_deps.prg" ADDITIVE
DO PrLog WITH 'mock-uri incarcate'
DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
IF gnHandle <= 0
DO PrLog WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
gnEsecuri = gnEsecuri + 1
DO PrLog WITH 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)'
QUIT
ENDIF
DO PrLog WITH 'mediu OK, schema=' + gcS
*-- cod fiscal real cu perioada ANAF, pentru banda A2 (do_verifica)
LOCAL lcSql, lcCodAnaf
TEXT TO lcSql NOSHOW
select cod_fiscal_n from (
select cod_fiscal_n from istoric_coduri_fiscale
where (data_inceput_tvainc is not null or data_inactivare is not null) and cod_fiscal_n is not null
order by dataorav_anaf desc) where rownum <= 1
ENDTEXT
lcCodAnaf = ''
IF goExecutor.oExecuta(lcSql, 'crsGD1') AND USED('crsGD1') AND RECCOUNT('crsGD1') > 0
lcCodAnaf = ALLTRIM(TRANSFORM(NVL(crsGD1.cod_fiscal_n, 0)))
ENDIF
USE IN (SELECT('crsGD1'))
DO PrLog WITH 'cod fiscal ANAF de test: [' + lcCodAnaf + ']'
*-- partener real activ, pentru banda C (dublu-click -> editare partener)
LOCAL lnIdPartTest, lcCodFiscalPart, lcDenumirePart
TEXT TO lcSql NOSHOW
select id_part, cod_fiscal, denumire from (
select id_part, cod_fiscal, denumire from nom_parteneri
where nvl(inactiv,0) = 0 and nvl(sters,0) = 0 and not cod_fiscal is null
order by id_part desc) where rownum <= 1
ENDTEXT
lnIdPartTest = 0
lcCodFiscalPart = ''
lcDenumirePart = ''
IF goExecutor.oExecuta(lcSql, 'crsGD2') AND USED('crsGD2') AND RECCOUNT('crsGD2') > 0
lnIdPartTest = NVL(crsGD2.id_part, 0)
lcCodFiscalPart = ALLTRIM(NVL(crsGD2.cod_fiscal, ''))
lcDenumirePart = ALLTRIM(NVL(crsGD2.denumire, ''))
ENDIF
USE IN (SELECT('crsGD2'))
DO PrLog WITH 'partener de test: id_part=' + TRANSFORM(lnIdPartTest) + ' cod=[' + lcCodFiscalPart + '] denumire=[' + lcDenumirePart + ']'
IF EMPTY(lcCodAnaf) OR lnIdPartTest = 0
DO PrLog WITH 'FAIL: nu s-au gasit date de test (cod fiscal ANAF sau partener activ)'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- cursorul EXACT ca in oproceduri_comune.prg:4584 (verificare_parteneri), fara sa apelam
*-- acea procedura (Show(1) modal) - Load-ul formularului adauga singur cele 7 campuri noi
CREATE CURSOR crsVerificareParteneri (ales L, denumire C(100) NULL, cod_fiscal C(30) NULL, Valid L NULL, ;
firma C(100) NULL, cod C(100) NULL, adresa_roa C(250) NULL, adresa C(250) NULL, ;
judet C(100) NULL, regcom C(30) NULL, codpostal C(20) NULL, telefon C(30) NULL, fax C(30) NULL, ;
datatvamfin C(30) NULL, platitortvamfin L NULL, VIES L NULL, PlatitorTVA L NULL, eroare C(250) NULL, ;
IsCIF L NULL, duplicat L, atribut_fiscal C(2), stare C(100), atentie C(100), cod_fiscalfro C(30) NULL, ;
id_part N(16), tvaincasare L, splittva L, inactiv L, Data D)
INSERT INTO crsVerificareParteneri (denumire, cod_fiscal, id_part) VALUES ('TEST ANAF PERIOADA', lcCodAnaf, 0)
INSERT INTO crsVerificareParteneri (denumire, cod_fiscal, id_part) VALUES (lcDenumirePart, lcCodFiscalPart, lnIdPartTest)
INSERT INTO crsVerificareParteneri (denumire, cod_fiscal, id_part) VALUES ('TEST FARA ID_PART', 'RO9999999', 0)
UPDATE crsVerificareParteneri SET IsCIF = .T.
GO TOP
PUBLIC goFormGD
goFormGD = CREATEOBJECT('frm_verificare_parteneri', .F., .T., .F., .F., .F., .T.)
goFormGD.WindowType = 0
goFormGD.Show()
DOEVENTS FORCE
DO PrLog WITH 'formular instantiat, chkANAF=' + TRANSFORM(goFormGD.chkANAF.Value)
*=====================================================================
* Banda A: grid cu 34 coloane (era 27), cele 7 noi legate pe cursorul real
*=====================================================================
IF goFormGD._grdbase1.ColumnCount = 34
DO PrLog WITH 'OK A1: _grdbase1.ColumnCount = 34'
ELSE
DO PrLog WITH 'FAIL A1: ColumnCount = ' + TRANSFORM(goFormGD._grdbase1.ColumnCount) + ' (asteptat 34)'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- coloanele redenumite sunt membri ai grid-ului dupa Name (cDataInceputScpTva...), nu dupa
*-- pozitia Column28..Column34 - VFP adreseaza obiectul din container dupa Name, nu dupa pozitie
LOCAL laCol[7,2], lnI, lcNume, lcSrc, llColOk
laCol[1,1] = 'cDataInceputScpTva'
laCol[1,2] = 'data_inceput_scptva'
laCol[2,1] = 'cDataSfarsitScpTva'
laCol[2,2] = 'data_sfarsit_scptva'
laCol[3,1] = 'cDataAnulImpScpTva'
laCol[3,2] = 'data_anul_imp_scptva'
laCol[4,1] = 'cDataInceputTvaInc'
laCol[4,2] = 'data_inceput_tvainc'
laCol[5,1] = 'cDataSfarsitTvaInc'
laCol[5,2] = 'data_sfarsit_tvainc'
laCol[6,1] = 'cDataInactivare'
laCol[6,2] = 'data_inactivare'
laCol[7,1] = 'cDataReactivare'
laCol[7,2] = 'data_reactivare'
llColOk = .T.
FOR lnI = 1 TO 7
lcNume = laCol[lnI, 1]
IF !PEMSTATUS(goFormGD._grdbase1, lcNume, 5)
llColOk = .F.
DO PrLog WITH 'FAIL A3: coloana ' + lcNume + ' nu exista ca membru al _grdbase1'
LOOP
ENDIF
lcSrc = LOWER(EVALUATE('goFormGD._grdbase1.' + lcNume + '.ControlSource'))
IF !('crsverificareparteneri.' + laCol[lnI, 2] $ lcSrc)
llColOk = .F.
DO PrLog WITH 'FAIL A3: ' + lcNume + ' ControlSource=[' + lcSrc + '] asteptat crsverificareparteneri.' + laCol[lnI, 2]
ENDIF
ENDFOR
IF llColOk
DO PrLog WITH 'OK A3: cele 7 coloane noi exista pe binarul curent, cu ControlSource corect'
ELSE
gnEsecuri = gnEsecuri + 1
ENDIF
*-- do_verifica cu chkANAF fortat .T. in Init -> ramura serviciu web ANAF (banda A2)
goFormGD.do_verifica(.F., .T., .F.)
DO PrLog WITH 'do_verifica rulat (tlValidare=.F. tlMFIN=.T. tlVIES=.F.)'
SELECT crsVerificareParteneri
LOCATE FOR cod_fiscal = lcCodAnaf
IF FOUND()
LOCAL llArePerioada
llArePerioada = !EMPTY(crsVerificareParteneri.data_inceput_scptva) OR ;
!EMPTY(crsVerificareParteneri.data_inceput_tvainc) OR ;
!EMPTY(crsVerificareParteneri.data_inactivare)
IF llArePerioada
DO PrLog WITH 'OK A2: do_verifica a completat cel putin o perioada pentru ' + lcCodAnaf
ELSE
DO PrLog WITH 'FAIL A2: nicio perioada completata pentru ' + lcCodAnaf + ' dupa do_verifica'
gnEsecuri = gnEsecuri + 1
ENDIF
DO PrLog WITH ' scpTVA ' + DTOC(crsVerificareParteneri.data_inceput_scptva) + '-' + DTOC(crsVerificareParteneri.data_sfarsit_scptva) + ;
' tvaInc ' + DTOC(crsVerificareParteneri.data_inceput_tvainc) + '-' + DTOC(crsVerificareParteneri.data_sfarsit_tvainc) + ;
' inactiv ' + DTOC(crsVerificareParteneri.data_inactivare) + ' reactivat ' + DTOC(crsVerificareParteneri.data_reactivare)
ELSE
DO PrLog WITH 'FAIL A2: randul de test ' + lcCodAnaf + ' nu mai exista in cursor'
gnEsecuri = gnEsecuri + 1
ENDIF
*=====================================================================
* Banda C: dublu-click pe coloanele ROA (denumire/cod fiscal) -> editare partener;
* coloanele ANAF (firma/cod) raman pe meniul de verificare
*=====================================================================
SELECT crsVerificareParteneri
LOCATE FOR id_part = lnIdPartTest
gnMockNomModCount = 0
gnMockNomModId = 0
gnMockVerifCodCount = 0
goFormGD._grdbase1.Column2.Text1.DblClick()
IF gnMockNomModCount = 1 AND gnMockNomModId = lnIdPartTest AND gnMockVerifCodCount = 0
DO PrLog WITH 'OK C1: dublu-click Column2 (denumire) -> nom_parteneri_modifica(' + TRANSFORM(lnIdPartTest) + ')'
ELSE
DO PrLog WITH 'FAIL C1: Column2 DblClick - nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' id=' + TRANSFORM(gnMockNomModId) + ' verifcod count=' + TRANSFORM(gnMockVerifCodCount)
gnEsecuri = gnEsecuri + 1
ENDIF
gnMockNomModCount = 0
gnMockNomModId = 0
gnMockVerifCodCount = 0
goFormGD._grdbase1.Column3.Text1.DblClick()
IF gnMockNomModCount = 1 AND gnMockNomModId = lnIdPartTest AND gnMockVerifCodCount = 0
DO PrLog WITH 'OK C2: dublu-click Column3 (cod fiscal ROA) -> nom_parteneri_modifica(' + TRANSFORM(lnIdPartTest) + ')'
ELSE
DO PrLog WITH 'FAIL C2: Column3 DblClick - nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' id=' + TRANSFORM(gnMockNomModId) + ' verifcod count=' + TRANSFORM(gnMockVerifCodCount)
gnEsecuri = gnEsecuri + 1
ENDIF
gnMockNomModCount = 0
gnMockVerifCodCount = 0
goFormGD._grdbase1.Column5.Text1.DblClick()
IF gnMockVerifCodCount = 1 AND gnMockNomModCount = 0
DO PrLog WITH 'OK C3: dublu-click Column5 (firma ANAF) -> VerificaCodFiscal, fara editare partener'
ELSE
DO PrLog WITH 'FAIL C3: Column5 DblClick - verifcod count=' + TRANSFORM(gnMockVerifCodCount) + ' nom_mod count=' + TRANSFORM(gnMockNomModCount)
gnEsecuri = gnEsecuri + 1
ENDIF
gnMockNomModCount = 0
gnMockVerifCodCount = 0
goFormGD._grdbase1.Column6.Text1.DblClick()
IF gnMockVerifCodCount = 1 AND gnMockNomModCount = 0
DO PrLog WITH 'OK C4: dublu-click Column6 (cod ANAF) -> VerificaCodFiscal, fara editare partener'
ELSE
DO PrLog WITH 'FAIL C4: Column6 DblClick - verifcod count=' + TRANSFORM(gnMockVerifCodCount) + ' nom_mod count=' + TRANSFORM(gnMockNomModCount)
gnEsecuri = gnEsecuri + 1
ENDIF
*-- id_part gol -> mesaj de avertizare, fara editare partener
SELECT crsVerificareParteneri
LOCATE FOR cod_fiscal = 'RO9999999'
gnMockNomModCount = 0
gcMockUltimMesaj = ''
goFormGD._grdbase1.Column2.Text1.DblClick()
IF gnMockNomModCount = 0 AND 'nu poate fi identificat' $ LOWER(gcMockUltimMesaj)
DO PrLog WITH 'OK C5: id_part gol -> mesaj de avertizare, fara editare partener'
ELSE
DO PrLog WITH 'FAIL C5: id_part gol - nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' mesaj=[' + gcMockUltimMesaj + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
goFormGD.Release()
DO PrLog WITH IIF(gnEsecuri = 0, 'TOTAL OK', 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)')
CATCH TO loEx
DO PrLog WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
DO PrLog WITH 'TOTAL FAIL: exceptie neasteptata'
ENDTRY
QUIT
**********************************************************
PROCEDURE PrLog
LPARAMETERS tcMsg
LOCAL lcL
SET SAFETY OFF
lcL = IIF(FILE(gcLog), FILETOSTR(gcLog), '')
STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcLog)
ENDPROC
**********************************************************
PROCEDURE PrErr
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
DO PrLog WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
ENDPROC