sync SVN r18038

This commit is contained in:
2026-08-23 10:29:05 +03:00
parent 2b695b3656
commit 887ac9faec
8 changed files with 1519 additions and 362 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -109,3 +109,11 @@ fals `roundtrip text1 != text2`. Ruleaza atunci cu lista rebazata:
la fiecare capat de linie - rezultatul e un fisier cu sfarsituri de linie amestecate (CRLF pe
continutul vechi, LF pe cel nou). Verificare finala obligatorie dupa orice scriere: numara
octetii `0x0A` neprecedati de `0x0D` (LF izolati) - trebuie sa fie 0.
- **`-DryRun` NU e plasa de siguranta pentru capete de linie** - fidelity-check-ul compara doar
continutul text, nu CRLF vs LF, deci un fisier convertit integral la LF de un tool Edit/Write
(patit si cumulat, pe mai multe runde succesive) trece cu OK/EXITCODE=0. Verificare separata,
obligatorie dupa fiecare editare, langa censul de octeti non-ASCII deja documentat mai sus:
`perl -e 'local $/; open F,"<:raw",$ARGV[0]; $d=<F>; $crlf=()=$d=~/\r\n/g; $lf=()=$d=~/\n/g; print $lf-$crlf' <fisier>`
trebuie sa dea 0. Semnal secundar: daca `git diff --numstat` arata brusc tot fisierul schimbat
(nu doar liniile atinse), capetele de linie sunt gresite. Reparare (doar dupa ce ai confirmat ca
fisierul n-are deja niciun `\r`): `perl -pe 's/\n/\r\n/' < f > f.tmp`.

View File

@@ -4772,7 +4772,7 @@ Function verifica_partener_show_info
*** tcMesajIntrebare: IN, optional, daca se intreaba ceva la sfarsitul formularului (ex: Se completeaza datele in formularul partener nou?)
Local lcCodFiscal, lcDenumire, lcText, llCodRO, llPlatitorTVAMfin, llPlatitorTVAVIES, lnDialogType
Local lnRaspuns, loPartener, lcProvenienta, lcPerioade
Local lnRaspuns, loPartener, lcSursaPrefix, llAtentie, lcTVA, lcStareFirma, lcIdent, lcMesajAnaf
lcCodFiscal = Transform(m.tcCodFiscal)
lcDenumire = Transform(m.tcDenumire)
@@ -4784,50 +4784,68 @@ Function verifica_partener_show_info
llTvaIncasare = loPartener.tvaincasare
llSplitTVA = loPartener.splittva
llInactiv = loPartener.inactiv
*!* 01.08.2026 marius.mutu: marcaj explicit al sursei (ANAF live / cache), nu doar pe randurile din cache
lcProvenienta = ''
llAtentie = ((m.llPlatitorTVAMfin And !m.llCodRO) Or (!m.llPlatitorTVAMfin And m.llCodRO)) Or m.llInactiv
*!* 22.08.2026 marius.mutu: marcaj explicit al sursei (ANAF live / cache), ca prefix pe linia denumirii
lcSursaPrefix = ''
If Pemstatus(m.loPartener, 'sursa', 5) And !Empty(Alltrim(Nvl(loPartener.sursa, '')))
lcProvenienta = Iif(Alltrim(Nvl(loPartener.sursa, '')) == 'ANAF', '(sursa: ANAF)', ;
'(sursa: CACHE ' + Dtoc(Nvl(loPartener.data_sursa, Date())) + Iif(Alltrim(Nvl(loPartener.sursa, '')) == 'CACHE_INDISP', ', ANAF indisponibil', '') + ')')
lcSursaPrefix = Iif(Alltrim(Nvl(loPartener.sursa, '')) == 'ANAF', 'ANAF: ', ;
'CACHE ' + Dtoc(Nvl(loPartener.data_sursa, Date())) + Iif(Alltrim(Nvl(loPartener.sursa, '')) == 'CACHE_INDISP', ' (ANAF indisponibil)', '') + ': ')
Endif
*!* 22.08.2026 marius.mutu: perioadele ANAF, doar cele completate (traseul mfinante.ro nu le are)
lcPerioade = ''
*!* 22.08.2026 marius.mutu: mesaj grupat pe sectiuni TVA/STARE FIRMA/IDENTIFICARE, fara campuri goale
lcMesajAnaf = Iif(!Empty(Alltrim(Nvl(loPartener.stare, ''))), 'Mesaj ANAF: ' + Alltrim(loPartener.stare) + crlf, '')
lcTVA = Iif(m.llPlatitorTVAMfin, "Platitor TVA: DA (la " + Alltrim(loPartener.datatvamfin) + ")", "Platitor TVA: NU") + crlf
lcStareFirma = 'Inactiv: ' + Iif(m.llInactiv, 'DA', 'NU') + crlf
If Pemstatus(m.loPartener, 'data_inceput_scptva', 5)
If !Empty(Nvl(loPartener.data_inceput_scptva, {}))
lcPerioade = m.lcPerioade + 'Perioada TVA: ' + Dtoc(loPartener.data_inceput_scptva) + ' - ' + ;
lcTVA = m.lcTVA + 'Perioada TVA: ' + Dtoc(loPartener.data_inceput_scptva) + ' - ' + ;
Iif(Empty(Nvl(loPartener.data_sfarsit_scptva, {})), 'in vigoare', Dtoc(loPartener.data_sfarsit_scptva)) + ;
Iif(Empty(Nvl(loPartener.data_anul_imp_scptva, {})), '', ' (anulare din oficiu: ' + Dtoc(loPartener.data_anul_imp_scptva) + ')') + crlf
Endif
lcTVA = m.lcTVA + m.lcMesajAnaf + 'TVA la incasare: ' + Iif(m.llTvaIncasare, 'DA', 'NU') + crlf
If !Empty(Nvl(loPartener.data_inceput_tvainc, {}))
lcPerioade = m.lcPerioade + 'Perioada TVA la incasare: ' + Dtoc(loPartener.data_inceput_tvainc) + ' - ' + ;
lcTVA = m.lcTVA + 'Perioada TVA la incasare: ' + Dtoc(loPartener.data_inceput_tvainc) + ' - ' + ;
Iif(Empty(Nvl(loPartener.data_sfarsit_tvainc, {})), 'in vigoare', Dtoc(loPartener.data_sfarsit_tvainc)) + crlf
Endif
lcTVA = m.lcTVA + 'Split TVA: ' + Iif(m.llSplitTVA, 'DA', 'NU') + crlf
If !Empty(Nvl(loPartener.data_inactivare, {}))
lcPerioade = m.lcPerioade + 'Inactivare: ' + Dtoc(loPartener.data_inactivare) + ;
lcStareFirma = m.lcStareFirma + 'Inactivare: ' + Dtoc(loPartener.data_inactivare) + ;
Iif(Empty(Nvl(loPartener.data_reactivare, {})), '', ' Reactivare: ' + Dtoc(loPartener.data_reactivare)) + crlf
Endif
Else
lcTVA = m.lcTVA + m.lcMesajAnaf + 'TVA la incasare: ' + Iif(m.llTvaIncasare, 'DA', 'NU') + crlf + ;
'Split TVA: ' + Iif(m.llSplitTVA, 'DA', 'NU') + crlf
Endif
lcIdent = ''
If !Empty(loPartener.adresa)
lcIdent = m.lcIdent + 'Adresa: ' + Alltrim(loPartener.adresa) + crlf
Endif
If !Empty(loPartener.judet)
lcIdent = m.lcIdent + 'Judet: ' + loPartener.judet + crlf
Endif
If !Empty(loPartener.regcom)
lcIdent = m.lcIdent + 'Reg. comertului: ' + loPartener.regcom + crlf
Endif
If !Empty(loPartener.codpostal)
lcIdent = m.lcIdent + 'Cod postal: ' + loPartener.codpostal + crlf
Endif
If !Empty(loPartener.telefon)
lcIdent = m.lcIdent + 'Telefon: ' + loPartener.telefon + crlf
Endif
If !Empty(loPartener.fax)
lcIdent = m.lcIdent + 'Fax: ' + loPartener.fax + crlf
Endif
lcText = 'VERIFICARE CIF: ' + m.lcCodFiscal + ' ' + m.lcDenumire + crlf + crlf + ;
Alltrim(loPartener.firma) + crlf + ;
Iif(!Empty(m.lcProvenienta), m.lcProvenienta + crlf, '') + ;
Iif((m.llPlatitorTVAMfin And !m.llCodRO) Or (!m.llPlatitorTVAMfin And m.llCodRO), ' *** ATENTIE *** ', '') + ;
Iif(m.llPlatitorTVAMfin, "PLATITOR TVA (" + Alltrim(loPartener.datatvamfin) + ")", "NEPLATITOR TVA") + crlf + ;
'Stare: ' + Alltrim(loPartener.stare) + crlf + ;
'TVA Incasare: ' + Iif(m.llTvaIncasare, 'DA', 'NU') + crlf + ;
'Split TVA: ' + Iif(m.llSplitTVA, 'DA', 'NU') + crlf + ;
'Inactiv: ' + Iif(m.llInactiv, 'DA *** ATENTIE!', 'NU') + crlf + ;
m.lcPerioade + ;
'----------------------------------------------------' + crlf + ;
'* Adresa: ' + Alltrim(loPartener.adresa) + crlf + ;
'* Judet: ' + loPartener.judet + crlf + ;
'* Nr. inregistrare la Registrul Comertului: ' + loPartener.regcom + crlf + ;
'* Cod Postal: ' + loPartener.codpostal + crlf + ;
'* Telefon: ' + loPartener.telefon + crlf + ;
'* Fax: ' + loPartener.fax + crlf + ;
Iif(!Empty(loPartener.eroare), Alltrim(loPartener.eroare) + crlf, '') + ;
'----------------------------------------------------' + crlf + crlf + ;
m.lcSursaPrefix + Alltrim(loPartener.firma) + crlf + ;
Iif(m.llAtentie, ' *** ATENTIE *** ' + crlf, '') + crlf + ;
'--- TVA ---' + crlf + m.lcTVA + crlf + ;
Iif(!Empty(m.lcStareFirma), '--- STARE FIRMA ---' + crlf + m.lcStareFirma + crlf, '') + ;
Iif(!Empty(m.lcIdent), '--- IDENTIFICARE ---' + crlf + m.lcIdent + crlf, '') + ;
Iif(!Empty(loPartener.eroare), Alltrim(loPartener.eroare) + crlf + crlf, '') + ;
Iif(!Empty(m.tcMesajIntrebare), m.tcMesajIntrebare + crlf + crlf + crlf, "")
lnRaspuns = amessagebox(lcText, m.lnDialogType, _Screen.Caption)
@@ -4841,20 +4859,13 @@ Function GetMeniuVerificareCodFiscal
llVerificareCod = Type('tcCodFiscal') = 'C' And !Empty(m.tcCodFiscal)
lcMeniuOptiuniAnte = Iif(Type('tcOptiuniMeniuAnte') = 'C' And !Empty(m.tcOptiuniMeniuAnte), Alltrim(m.tcOptiuniMeniuAnte), '')
*!* 22.08.2026 marius.mutu: meniu scurtat, un raspuns ANAF acopera toate verificarile separate de mai jos
lcMenu = lcMeniuOptiuniAnte + ;
Iif(!m.llVerificareCod, "\", "") + "Verificare ANAF (automat);" + ;
Iif(!m.llVerificareCod, "\", "") + "VERIFICARE ANAF;" + ;
Iif(!m.llVerificareCod, "\", "") + "VERIFICARE VIES;" + ;
"ISTORIC VERIFICARI COD FISCAL;" + ;
"\-;" + ;
Iif(!m.llVerificareCod, "\", "") + "Verificare MFINANTE (manual);" + ;
"\-;" + ;
Iif(!m.llVerificareCod, "\", "") + "Verificare Registru inactivi ANAF (manual);" + ;
"\-;" + ;
Iif(!m.llVerificareCod, "\", "") + "Verificare Registru TVA Incasare (automat);" + ;
Iif(!m.llVerificareCod, "\", "") + "Verificare Registru TVA Incasare (manual);" + ;
"\-;" + ;
Iif(!m.llVerificareCod, "\", "") + "Verificare VIES (automat);" + ;
Iif(!m.llVerificareCod, "\", "") + "Verificare VIES (manual);" + ;
"\-;" + ;
"Istoric verificari cod fiscal"
Iif(!m.llVerificareCod, "\", "") + "DESCHIDE FISA PE MFINANTE.RO"
Return m.lcMenu
Endfunc
@@ -4867,14 +4878,11 @@ Function GetOptiuneVerificareCodFiscal
lnOptiune = Iif(Type('tnOptiune') = 'N', m.tnOptiune, 0)
*!* 22.08.2026 marius.mutu: numerotare pe meniul scurtat (1 ANAF, 2 VIES, 3 ISTORIC, 5 MFINANTE.RO)
lcTipVerificare = Iif(m.lnOptiune = 1, 'ANAF_SERVICIU_WEB', ;
Iif(m.lnOptiune = 3, 'MFIN_MANUAL_COD', ;
Iif(m.lnOptiune = 5, 'ANAF_MANUAL_COD', ;
Iif(m.lnOptiune = 7, 'RTVAI_AUTO_COD', ;
Iif(m.lnOptiune = 8, 'RTVAI_MANUAL_COD', ;
Iif(m.lnOptiune = 10, 'VIES_AUTO', ;
Iif(m.lnOptiune = 11, 'VIES_MANUAL', ;
Iif(m.lnOptiune = 13, 'ISTORIC', ''))))))))
Iif(m.lnOptiune = 2, 'VIES_AUTO', ;
Iif(m.lnOptiune = 3, 'ISTORIC', ;
Iif(m.lnOptiune = 5, 'MFIN_MANUAL_COD', ''))))
Return m.lcTipVerificare
Endfunc

View File

@@ -958,6 +958,10 @@ Define Class VerificareCod As Custom
If Type("This.oHTTP") <> "O" && la prima apelare a verificarii MFIN
If This.lXMLHTTP
This.oHTTP = Createobject("winhttp.winhttprequest.5.1")
Try
This.oHTTP.SetTimeouts(5000, 5000, 10000, 15000)
Catch To loEx
Endtry
Else
This.oHTTP = Createobject("InternetExplorer.Application")
This.oHTTP.Visible = .F.
@@ -1174,6 +1178,10 @@ Define Class VerificareCod As Custom
Try
*!* loHTTP = Createobject("MSXML2.ServerXMLHTTP")
loHTTP = Createobject("winhttp.winhttprequest.5.1")
Try
loHTTP.SetTimeouts(5000, 5000, 10000, 20000)
Catch To loEx
Endtry
loHTTP.Open("GET", lcRomfastURL, .F.)
loHTTP.Send()
lnStatus = loHTTP.Status
@@ -1236,9 +1244,16 @@ Define Class VerificareCod As Custom
*!* 15.03.2010 ^
ENDIF && .F.
Try
*!* 23.08.2026 marius.mutu: text/xml (nu urlencoded) - serviciul VIES da 400 pe content-type gresit
lcViesURL = "https://ec.europa.eu/taxation_customs/vies/services/checkVatService"
loHTTP = Createobject("winhttp.winhttprequest.5.1")
loHTTP.Open("POST", "http://ec.europa.eu/taxation_customs/vies/services/checkVatService", .F.)
loHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
*!* 23.08.2026 marius.mutu: timeout, altfel apelul blocheaza formularul la nesfarsit daca serviciul nu raspunde
Try
loHTTP.SetTimeouts(5000, 5000, 10000, 20000)
Catch To loEx
Endtry
loHTTP.Open("POST", m.lcViesURL, .F.)
loHTTP.setRequestHeader('Content-Type', 'text/xml; charset=utf-8')
TEXT TO lcValues NOSHOW TEXTMERGE
<s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'>
@@ -1249,20 +1264,21 @@ Define Class VerificareCod As Custom
</checkVat>
</s:Body>
</s:Envelope>
ENDTEXT
ENDTEXT
loHTTP.Send(lcValues)
lnStatus = loHTTP.Status
If lnStatus = 200 && OK
If lnStatus = 200 && OK
lcXML = loHTTP.responseText
llPlatitorTVA = (STREXTRACT(m.lcXML, [<valid>],[</valid>],1,1) = 'true') && true/false
lcFirma = STRTRAN(STREXTRACT(m.lcXML, [<name>],[</name>],1,1), '-','',1,10,1)
lcAdresa = STRTRAN(STREXTRACT(m.lcXML, [<address>],[</address>],1,1), '-','',1,10,1)
*!* 23.08.2026 marius.mutu: raspunsul are prefix de namespace (ns2:valid, ns2:name...) - delimitatorii vechi <valid> nu se mai potriveau
llPlatitorTVA = (STREXTRACT(m.lcXML, [valid>],[<],1,1) = 'true') && true/false
lcFirma = STRTRAN(STREXTRACT(m.lcXML, [name>],[<],1,1), '-','',1,10,1)
lcAdresa = STRTRAN(STREXTRACT(m.lcXML, [address>],[<],1,1), '-','',1,10,1)
lcAdresa = Strtran(m.lcAdresa, Chr(13) + CHR(10), ' ')
llVies = .T.
llVies = .T.
Else
lcEroare = 'VERIFICARE_CIF VIES - ' + m.lcViesURL + ' eroare ' + Alltrim(Str(lnStatus))
Endif && lnStatus
Endif && lnStatus
Catch To loEx
lcEroare = 'VERIFICARE_CIF VIES ' + CRLF + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno)
This.Log(m.lcEroare)

View File

@@ -5,6 +5,9 @@
* daca e incarcat cu SET PROCEDURE ... ADDITIVE INAINTE de test_init_env_auto.
* Apelurile se numara in variabile PUBLIC (declarate si initializate de test inainte de fiecare pas):
* gnMockNomModCount / gnMockNomModId (nom_parteneri_modifica) si gnMockVerifCodCount (VerificaCodFiscal).
* gcMockVerifCodOptiuniAnte (daca declarata C de test) - captureaza toDate.optiuni_meniu_ante primit.
* gnMockVerifCodLnOptiune (daca declarata N de test) - controleaza ce intoarce mock-ul prin @lnOptiune,
* ca testul sa simuleze alegerea din XMENU (ex. 1 = prima optiune din meniu) fara sa-l deschida.
PROCEDURE nom_parteneri_modifica
LPARAMETERS tnId_Part, tnIdTipPart, tcTipPart, tnSpecial, tcMesaj
@@ -22,6 +25,10 @@ PROCEDURE VerificaCodFiscal
IF TYPE('gnMockVerifCodCount') = 'N'
gnMockVerifCodCount = gnMockVerifCodCount + 1
ENDIF
IF TYPE('gcMockVerifCodOptiuniAnte') = 'C'
gcMockVerifCodOptiuniAnte = IIF(PEMSTATUS(toDate, 'optiuni_meniu_ante', 5), ALLTRIM(toDate.optiuni_meniu_ante), '')
ENDIF
lnOptiune = IIF(TYPE('gnMockVerifCodLnOptiune') = 'N', gnMockVerifCodLnOptiune, 0)
loPartener = NULL
RETURN 7
ENDPROC

View File

@@ -0,0 +1,375 @@
* test_todo21_e2e_verificare.prg
* TODO #21 - test END-TO-END al verificarii codurilor fiscale.
*
* Spre deosebire de celelalte teste (care instantiaza direct frm_verificare_parteneri), acesta
* intra prin punctul de intrare REAL folosit de toti apelantii - verificare_parteneri()
* (COMUN\programe\oproceduri_comune.prg:4525) - cu lista in formatul sir
* "cod***denumire***atribut***ales***id_part***data|...", si merge pana la capat:
* sir -> crsXMLParteneriVerificare -> crsVerificareParteneri -> formular modal ->
* Activate -> do_verifica -> serviciul web ANAF REAL -> perioade + atentie -> cursor final.
*
* Formularul se deschide cu Show(1) (modal), deci headless-ul s-ar agata. Deblocarea se face cu
* un obiect Timer independent (clasa tmrE2EDeblocare, la finalul fisierului), care asteapta ca
* verificarea sa PORNEASCA (lblVerifica.Visible = .T., pus la inceputul lui do_verifica) si abia
* apoi ca ea sa se TERMINE (lblVerifica.Visible = .F., pus la final), inainte sa dea Release.
* Fara cele doua faze, timer-ul ar putea elibera formularul in mijlocul verificarii - do_verifica
* apeleaza Inkey(1), moment in care evenimentele de timer chiar se executa.
*
* Cursorul se pastreaza dupa inchidere (tlDontCloseCursor = .T.), iar asertiunile se fac pe el.
*
* Datele de test: coduri fiscale REALE alese dinamic din istoric_coduri_fiscale si un partener
* REAL din nom_parteneri (id_part nenul), plus un cod invalid fabricat si un duplicat - nimic
* hardcodat, deci testul nu depinde de starea unei anumite firme.
*
* Nu scrie nimic in Oracle (doar SELECT-uri) si nu modifica nomenclatorul.
*
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\test_todo21_e2e_verificare.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_e2e_verificare_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 goTmrE2E, gnE2EFazaTimer, gnE2ETicks, glE2EEliberat
gnE2EFazaTimer = 0
gnE2ETicks = 0
glE2EEliberat = .F.
TRY
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.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
*=====================================================================
* Date de test reale, alese dinamic
*=====================================================================
LOCAL lcSql, lcCod1, lcCod2
TEXT TO lcSql NOSHOW
select cod_fiscal_n from (
select cod_fiscal_n from istoric_coduri_fiscale
where cod_fiscal_n is not null and data_inceput_scptva is not null
order by dataorav_anaf desc) where rownum <= 2
ENDTEXT
lcCod1 = ''
lcCod2 = ''
IF goExecutor.oExecuta(lcSql, 'crsE1') AND USED('crsE1') AND RECCOUNT('crsE1') > 0
SELECT crsE1
GO TOP
lcCod1 = ALLTRIM(TRANSFORM(NVL(crsE1.cod_fiscal_n, 0)))
IF RECCOUNT('crsE1') > 1
SKIP
lcCod2 = ALLTRIM(TRANSFORM(NVL(crsE1.cod_fiscal_n, 0)))
ENDIF
ENDIF
USE IN (SELECT('crsE1'))
LOCAL lnIdPart, lcCodPart, lcDenPart
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
lnIdPart = 0
lcCodPart = ''
lcDenPart = ''
IF goExecutor.oExecuta(lcSql, 'crsE2') AND USED('crsE2') AND RECCOUNT('crsE2') > 0
lnIdPart = NVL(crsE2.id_part, 0)
lcCodPart = ALLTRIM(NVL(crsE2.cod_fiscal, ''))
lcDenPart = ALLTRIM(NVL(crsE2.denumire, ''))
ENDIF
USE IN (SELECT('crsE2'))
DO PrLog WITH 'coduri ANAF de test: [' + lcCod1 + '] [' + lcCod2 + ']; partener: id_part=' + ;
TRANSFORM(lnIdPart) + ' cod=[' + lcCodPart + ']'
IF EMPTY(lcCod1) OR lnIdPart = 0
DO PrLog WITH 'FAIL: nu s-au gasit date de test in Oracle'
gnEsecuri = gnEsecuri + 1
DO PrLog WITH 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)'
QUIT
ENDIF
*=====================================================================
* Lista de intrare, construita EXACT ca la apelantii reali (D394, jurnale TVA): un cursor cu
* id_part / cod_fiscal / denumire / atribut_fiscal / ales / data, trecut prin Cursortoxml
* (vezi Clase/ovanzcump.vc2:19608-19618).
* 5 randuri: cod real 1 de doua ori (-> DUPLICAT), cod real 2, partener real cu id_part,
* cod fabricat invalid (-> INVALID).
*=====================================================================
LOCAL lcLista, ldData
ldData = DATE(YEAR(DATE()), MONTH(DATE()), 1)
CREATE CURSOR crsE2ELista (id_part N(16), cod_fiscal C(30), denumire C(100), atribut_fiscal C(2), ;
ales L, IsCIF L, Data D)
INSERT INTO crsE2ELista VALUES (0, lcCod1, 'E2E DUPLICAT A', 'RO', .F., .T., ldData)
INSERT INTO crsE2ELista VALUES (0, lcCod1, 'E2E DUPLICAT B', 'RO', .F., .T., ldData)
IF !EMPTY(lcCod2)
INSERT INTO crsE2ELista VALUES (0, lcCod2, 'E2E COD ANAF 2', 'RO', .F., .T., ldData)
ENDIF
INSERT INTO crsE2ELista VALUES (lnIdPart, lcCodPart, lcDenPart, ;
IIF(LEFT(UPPER(lcCodPart), 2) == 'RO', 'RO', ' '), .F., .T., ldData)
INSERT INTO crsE2ELista VALUES (0, '123', 'E2E COD INVALID', 'RO', .F., .T., ldData)
lcLista = ''
CURSORTOXML('crsE2ELista', 'lcLista', 1, 0, 0, '1')
USE IN (SELECT('crsE2ELista'))
*=====================================================================
* Timer de deblocare + apelul REAL (modal)
*=====================================================================
goTmrE2E = CREATEOBJECT('tmrE2EDeblocare')
goTmrE2E.Enabled = .T.
LOCAL lcCursor, ltStart
ltStart = DATETIME()
DO PrLog WITH 'apelez verificare_parteneri (modal) ...'
lcCursor = verificare_parteneri(m.lcLista, .T., .T., .F., .T., .T., .F., .T.)
goTmrE2E.Enabled = .F.
DO PrLog WITH 'verificare_parteneri s-a intors dupa ' + TRANSFORM(INT(DATETIME() - ltStart)) + ;
' s, cursor=[' + TRANSFORM(lcCursor) + '], timer: faza=' + TRANSFORM(gnE2EFazaTimer) + ;
' ticks=' + TRANSFORM(gnE2ETicks) + ' eliberat=' + TRANSFORM(glE2EEliberat)
*=====================================================================
* E1: cursorul supravietuieste (tlDontCloseCursor = .T.) si are toate randurile
*=====================================================================
LOCAL lnAsteptate
lnAsteptate = IIF(EMPTY(lcCod2), 4, 5)
IF USED('crsVerificareParteneri') AND RECCOUNT('crsVerificareParteneri') = lnAsteptate
DO PrLog WITH 'OK E1: cursorul crsVerificareParteneri a ramas deschis, ' + ;
TRANSFORM(lnAsteptate) + ' randuri'
ELSE
DO PrLog WITH 'FAIL E1: cursor deschis=' + TRANSFORM(USED('crsVerificareParteneri')) + ;
' randuri=' + TRANSFORM(IIF(USED('crsVerificareParteneri'), RECCOUNT('crsVerificareParteneri'), -1)) + ;
' asteptat ' + TRANSFORM(lnAsteptate)
gnEsecuri = gnEsecuri + 1
DO PrLog WITH 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)'
QUIT
ENDIF
*=====================================================================
* E2: id_part si data au traversat parsarea sirului (fix-ul C4 din TODO 21)
*=====================================================================
SELECT crsVerificareParteneri
LOCATE FOR ALLTRIM(NVL(denumire, '')) == lcDenPart
IF FOUND() AND NVL(crsVerificareParteneri.id_part, 0) = lnIdPart AND crsVerificareParteneri.Data = ldData
DO PrLog WITH 'OK E2: id_part=' + TRANSFORM(lnIdPart) + ' si data=' + DTOC(ldData) + ' au ajuns in cursor'
ELSE
DO PrLog WITH 'FAIL E2: id_part=' + TRANSFORM(IIF(FOUND(), NVL(crsVerificareParteneri.id_part, 0), -1)) + ;
' data=' + IIF(FOUND(), DTOC(crsVerificareParteneri.Data), '?') + ' asteptat ' + ;
TRANSFORM(lnIdPart) + ' / ' + DTOC(ldData)
gnEsecuri = gnEsecuri + 1
ENDIF
*=====================================================================
* E3: codul invalid e marcat Valid = .F. si primeste eticheta INVALID
*=====================================================================
SELECT crsVerificareParteneri
LOCATE FOR ALLTRIM(NVL(denumire, '')) == 'E2E COD INVALID'
IF FOUND() AND NVL(crsVerificareParteneri.Valid, .T.) = .F. AND 'INVALID' $ crsVerificareParteneri.atentie
DO PrLog WITH 'OK E3: cod invalid -> Valid=.F., atentie=[' + ALLTRIM(crsVerificareParteneri.atentie) + ']'
ELSE
DO PrLog WITH 'FAIL E3: cod invalid -> Valid=' + TRANSFORM(IIF(FOUND(), crsVerificareParteneri.Valid, .NULL.)) + ;
' atentie=[' + IIF(FOUND(), ALLTRIM(crsVerificareParteneri.atentie), '?') + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
*=====================================================================
* E4: cele doua randuri cu acelasi cod fiscal sunt marcate DUPLICAT
*=====================================================================
LOCAL lnDupl
SELECT crsVerificareParteneri
COUNT FOR ALLTRIM(NVL(cod_fiscal, '')) == lcCod1 AND 'DUPLICAT' $ atentie TO lnDupl
IF lnDupl = 2
DO PrLog WITH 'OK E4: ambele randuri cu codul ' + lcCod1 + ' au eticheta DUPLICAT'
ELSE
DO PrLog WITH 'FAIL E4: randuri DUPLICAT pentru ' + lcCod1 + ' = ' + TRANSFORM(lnDupl) + ' (asteptat 2)'
gnEsecuri = gnEsecuri + 1
ENDIF
*=====================================================================
* E5: ANAF a raspuns pe traseul real - cel putin un rand cu firma completata
* si cel putin o perioada de TVA completata (coloanele noi din TODO 21)
*=====================================================================
LOCAL lnCuFirma, lnCuPerioada
SELECT crsVerificareParteneri
COUNT FOR !EMPTY(NVL(firma, '')) TO lnCuFirma
COUNT FOR !EMPTY(NVL(data_inceput_scptva, {})) OR !EMPTY(NVL(data_inceput_tvainc, {})) ;
OR !EMPTY(NVL(data_inactivare, {})) TO lnCuPerioada
IF lnCuFirma > 0 AND lnCuPerioada > 0
DO PrLog WITH 'OK E5: ANAF a raspuns real - ' + TRANSFORM(lnCuFirma) + ' rand(uri) cu firma, ' + ;
TRANSFORM(lnCuPerioada) + ' cu perioade completate'
ELSE
DO PrLog WITH 'FAIL E5: firma=' + TRANSFORM(lnCuFirma) + ' perioade=' + TRANSFORM(lnCuPerioada) + ' (asteptat > 0)'
gnEsecuri = gnEsecuri + 1
ENDIF
*=====================================================================
* E6: textul venit de la ANAF nu contine '?' (decodarea UTF-8 prin
* AnafDecodeResponseText - COMUN\programe\validare.prg)
*=====================================================================
LOCAL lnSemn, lcExemplu
lnSemn = 0
lcExemplu = ''
SELECT crsVerificareParteneri
SCAN FOR !EMPTY(NVL(firma, ''))
IF '?' $ NVL(firma, '') OR '?' $ NVL(adresa, '') OR '?' $ NVL(stare, '') OR '?' $ NVL(judet, '')
lnSemn = lnSemn + 1
lcExemplu = ALLTRIM(NVL(firma, '')) + ' / ' + ALLTRIM(NVL(adresa, ''))
ENDIF
ENDSCAN
IF lnSemn = 0
DO PrLog WITH 'OK E6: niciun "?" in textele ANAF (firma/adresa/judet/stare)'
ELSE
DO PrLog WITH 'FAIL E6: ' + TRANSFORM(lnSemn) + ' rand(uri) cu "?" in text, ex: [' + lcExemplu + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
*=====================================================================
* E7: atentie contine numai etichetele definite, in ordinea gravitatii,
* si nu are text trunchiat (regresie: concatenarea pe camp padded)
*=====================================================================
LOCAL lcAtn, llOrdineOK, lnPozI, lnPozD, lnPozN, lnPozR, llRauOK
llOrdineOK = .T.
llRauOK = .T.
SELECT crsVerificareParteneri
SCAN
lcAtn = ALLTRIM(NVL(atentie, ''))
IF EMPTY(lcAtn)
LOOP
ENDIF
*-- fara spatii duble (semn ca s-a concatenat peste padding)
IF ' ' $ lcAtn
llRauOK = .F.
DO PrLog WITH ' atentie cu spatii duble pe randul ' + TRANSFORM(RECNO()) + ': [' + lcAtn + ']'
ENDIF
lnPozI = AT('INVALID', lcAtn)
lnPozD = AT('DUPLICAT', lcAtn)
lnPozN = AT('INACTIV', lcAtn)
lnPozR = AT('FARA RO', lcAtn)
IF (lnPozI > 0 AND lnPozD > 0 AND lnPozI > lnPozD) OR ;
(lnPozD > 0 AND lnPozN > 0 AND lnPozD > lnPozN) OR ;
(lnPozN > 0 AND lnPozR > 0 AND lnPozN > lnPozR)
llOrdineOK = .F.
DO PrLog WITH ' ordine gresita in atentie pe randul ' + TRANSFORM(RECNO()) + ': [' + lcAtn + ']'
ENDIF
ENDSCAN
IF llOrdineOK AND llRauOK
DO PrLog WITH 'OK E7: coloana atentie e coerenta (ordine INVALID/DUPLICAT/INACTIV/FARA RO, fara spatii duble)'
ELSE
DO PrLog WITH 'FAIL E7: coloana atentie incoerenta'
gnEsecuri = gnEsecuri + 1
ENDIF
*=====================================================================
* E8: formularul a fost inchis de timer, nu a ramas deschis
*=====================================================================
IF glE2EEliberat AND gnE2EFazaTimer >= 2
DO PrLog WITH 'OK E8: verificarea a pornit si s-a terminat, formularul a fost eliberat normal'
ELSE
DO PrLog WITH 'FAIL E8: faza timer=' + TRANSFORM(gnE2EFazaTimer) + ' eliberat=' + TRANSFORM(glE2EEliberat) + ;
' (formularul nu a parcurs ciclul complet de verificare)'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- rezumat pe randuri, pentru diagnostic
SELECT crsVerificareParteneri
SCAN
DO PrLog WITH ' ' + PADR(ALLTRIM(NVL(denumire, '')), 24) + ' cod=' + PADR(ALLTRIM(NVL(cod_fiscal, '')), 14) + ;
' valid=' + TRANSFORM(NVL(Valid, .NULL.)) + ' dupl=' + TRANSFORM(duplicat) + ;
' firma=[' + LEFT(ALLTRIM(NVL(firma, '')), 30) + ']' + ' atentie=[' + ALLTRIM(NVL(atentie, '')) + ']'
ENDSCAN
USE IN (SELECT('crsVerificareParteneri'))
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 tnErr, tcMsg, tcProg, tnLine
DO PrLog WITH 'EROARE ' + TRANSFORM(tnErr) + ': ' + TRANSFORM(tcMsg) + ' in ' + ;
TRANSFORM(tcProg) + ' linia ' + TRANSFORM(tnLine)
gnEsecuri = gnEsecuri + 1
DO PrLog WITH 'TOTAL FAIL: eroare neasteptata'
QUIT
ENDPROC
**********************************************************
* Deblocarea formularului modal, in doua faze:
* faza 0 -> asteapta ca do_verifica sa PORNEASCA (lblVerifica.Visible = .T.)
* faza 1 -> asteapta ca do_verifica sa TERMINE (lblVerifica.Visible = .F.) si da Release
* Plasa de siguranta: dupa 240 de ticks (~8 minute) elibereaza oricum, ca sa nu agate testul.
**********************************************************
DEFINE CLASS tmrE2EDeblocare AS Timer
Interval = 2000
Enabled = .F.
PROCEDURE Timer
LOCAL lnI, loF, llVaz
gnE2ETicks = gnE2ETicks + 1
IF gnE2ETicks <= 3 OR MOD(gnE2ETicks, 15) = 0
DO PrLog WITH ' timer tick ' + TRANSFORM(gnE2ETicks) + ' forme=' + TRANSFORM(_SCREEN.FormCount) + ' faza=' + TRANSFORM(gnE2EFazaTimer)
ENDIF
FOR lnI = 1 TO _SCREEN.FormCount
loF = _SCREEN.Forms(lnI)
IF !PEMSTATUS(loF, 'lblVerifica', 5) OR !PEMSTATUS(loF, 'do_verifica', 5)
LOOP
ENDIF
llVaz = loF.lblVerifica.Visible
DO CASE
CASE loF.lAutoverificare OR llVaz
*-- verificarea nu a pornit inca sau e in curs (lblVerifica vizibil)
gnE2EFazaTimer = IIF(llVaz, 1, gnE2EFazaTimer)
CASE gnE2ETicks > 240
glE2EEliberat = .F.
loF.Release()
OTHERWISE
*-- Activate a rulat (lAutoverificare = .F.) si do_verifica s-a terminat
gnE2EFazaTimer = 2
glE2EEliberat = .T.
loF.Release()
ENDCASE
EXIT
ENDFOR
ENDPROC
ENDDEFINE

View File

@@ -1,17 +1,33 @@
* 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).
* TODO #21, benzile A (coloanele de perioada in grid-ul de verificare coduri fiscale, inclusiv
* coloana calculata cPerioadaTva) si D (meniul unic de dublu-click, vederi de grid, coloana Ales
* conditionata). 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).
*
* Reproiectare: TOATE coloanele grid-ului cheama acum meniu_dblclick (nu mai exista rutare directa
* pe Column2/3 vs Column5/6); prima optiune a meniului ("MODIFICARE PARTENER - <denumire>") vine
* prin optiuni_meniu_ante, deci prin VerificaCodFiscal, care ar deschide XMENU (agata headless-ul) -
* de-asta VerificaCodFiscal e mock-uita (mock_meniu_dblclick_deps.prg), nu apelata real.
*
* 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)
* mock_meniu_dblclick_deps.prg - nom_parteneri_modifica, VerificaCodFiscal (numara apelurile,
* captureaza optiuni_meniu_ante, controleaza @lnOptiune intors)
*
* Banda G (continutul coloanei atentie): do_verifica face verificare ANAF reala (nu se poate
* controla ce raspunde ANAF), deci nu se pot fabrica exact cele 4 texte pe randurile reale - se
* verifica doar BUCATA care umple atentie (COMUN\clase\overificari.vc2:2992-2996), copiata LITERAL
* si rulata pe randuri fabricate distincte, fara alt apel la do_verifica.
*
* Banda H: chkANAF si chkExperimental au disparut ca obiecte din formular (do_verifica are acum
* llServiciuWebANAF constant .T.; modul experimental e citit din proprietatea lExperimental, nu
* dintr-un control) - se verifica ca lExperimental reflecta al 5-lea parametru la Init, nu o
* valoare hardcodata (regresie deja prinsa o data). chkMFIN ramane ca obiect (doar Visible=.F.).
*
* 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".
* mai nou activ), plus randuri fabricate pentru meniu_dblclick/atentie.
*
* 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).
@@ -40,10 +56,12 @@ gcMockUltimMesaj = ''
gnMockUltimTip = 0
gnMockRaspuns = 6
PUBLIC gnMockNomModCount, gnMockNomModId, gnMockVerifCodCount
PUBLIC gnMockNomModCount, gnMockNomModId, gnMockVerifCodCount, gcMockVerifCodOptiuniAnte, gnMockVerifCodLnOptiune
gnMockNomModCount = 0
gnMockNomModId = 0
gnMockVerifCodCount = 0
gcMockVerifCodOptiuniAnte = ''
gnMockVerifCodLnOptiune = 0
TRY
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
@@ -74,7 +92,7 @@ select cod_fiscal_n from (
USE IN (SELECT('crsGD1'))
DO PrLog WITH 'cod fiscal ANAF de test: [' + lcCodAnaf + ']'
*-- partener real activ, pentru banda C (dublu-click -> editare partener)
*-- partener real activ, pentru banda D (meniu_dblclick -> editare partener)
LOCAL lnIdPartTest, lcCodFiscalPart, lcDenumirePart
TEXT TO lcSql NOSHOW
select id_part, cod_fiscal, denumire from (
@@ -110,18 +128,67 @@ select id_part, cod_fiscal, denumire from (
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)
*-- randul D1c: denumire cu ';' - trebuie inlocuit cu ',' ca sa nu sparga sirul XMENU
INSERT INTO crsVerificareParteneri (denumire, cod_fiscal, id_part) VALUES ('TEST; CU PUNCT VIRGULA', 'RO8888888', 777)
UPDATE crsVerificareParteneri SET IsCIF = .T.
GO TOP
*=====================================================================
* Banda F: coloana Ales (Column1) - conditionata de al 7-lea parametru la Init
*=====================================================================
LOCAL loFormAles
loFormAles = CREATEOBJECT('frm_verificare_parteneri', .F., .T., .F., .F., .F., .T.)
loFormAles.WindowType = 0
IF !loFormAles._grdbase1.Column1.Visible
DO PrLog WITH 'OK F1: Column1 (Ales) ascunsa cu 6 parametri (implicit, fara al 7-lea)'
ELSE
DO PrLog WITH 'FAIL F1: Column1 (Ales) vizibila desi formularul a primit doar 6 parametri'
gnEsecuri = gnEsecuri + 1
ENDIF
loFormAles.Release()
loFormAles = CREATEOBJECT('frm_verificare_parteneri', .F., .T., .F., .F., .F., .T., .T.)
loFormAles.WindowType = 0
IF loFormAles._grdbase1.Column1.Visible
DO PrLog WITH 'OK F2: Column1 (Ales) vizibila cu al 7-lea parametru .T.'
ELSE
DO PrLog WITH 'FAIL F2: Column1 (Ales) ramane ascunsa desi al 7-lea parametru e .T.'
gnEsecuri = gnEsecuri + 1
ENDIF
loFormAles.Release()
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)
DO PrLog WITH 'formular instantiat, lMFIN=' + TRANSFORM(goFormGD.lMFIN)
*=====================================================================
* Banda A: grid cu 34 coloane (era 27), cele 7 noi legate pe cursorul real
* Banda H: chkANAF/chkExperimental/chkMFIN au disparut ca obiecte; lExperimental (proprietate) trebuie
*-- sa reflecte al 5-lea parametru la Init, nu o valoare hardcodata
*=====================================================================
IF goFormGD.lExperimental = .F.
DO PrLog WITH 'OK H1: tlExperimental=.F. (al 5-lea parametru) -> lExperimental=.F.'
ELSE
DO PrLog WITH 'FAIL H1: lExperimental=' + TRANSFORM(goFormGD.lExperimental) + ' asteptat .F.'
gnEsecuri = gnEsecuri + 1
ENDIF
LOCAL loFormExp
loFormExp = CREATEOBJECT('frm_verificare_parteneri', .F., .T., .F., .F., .T., .T.)
loFormExp.WindowType = 0
IF loFormExp.lExperimental = .T.
DO PrLog WITH 'OK H2: tlExperimental=.T. (al 5-lea parametru) -> lExperimental=.T.'
ELSE
DO PrLog WITH 'FAIL H2: lExperimental=' + TRANSFORM(loFormExp.lExperimental) + ' asteptat .T. (nu mai e hardcodat pe .F.)'
gnEsecuri = gnEsecuri + 1
ENDIF
loFormExp.Release()
*=====================================================================
* Banda A: cele 7 coloane de perioada ANAF din grid (34 in total; coloana calculata
* cPerioadaTva a fost scoasa - vederea Esential arata doua coloane de date, nu un text lung)
*=====================================================================
IF goFormGD._grdbase1.ColumnCount = 34
DO PrLog WITH 'OK A1: _grdbase1.ColumnCount = 34'
@@ -130,6 +197,13 @@ select id_part, cod_fiscal, denumire from (
gnEsecuri = gnEsecuri + 1
ENDIF
IF !PEMSTATUS(goFormGD._grdbase1, 'cPerioadaTva', 5)
DO PrLog WITH 'OK A1b: coloana calculata cPerioadaTva a fost scoasa din grid'
ELSE
DO PrLog WITH 'FAIL A1b: cPerioadaTva inca exista in grid'
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
@@ -167,7 +241,7 @@ select id_part, cod_fiscal, denumire from (
gnEsecuri = gnEsecuri + 1
ENDIF
*-- do_verifica cu chkANAF fortat .T. in Init -> ramura serviciu web ANAF (banda A2)
*-- do_verifica: llServiciuWebANAF e acum constanta .T. in cod (overificari.vc2:2808) -> ramura serviciu web ANAF (banda A2)
goFormGD.do_verifica(.F., .T., .F.)
DO PrLog WITH 'do_verifica rulat (tlValidare=.F. tlMFIN=.T. tlVIES=.F.)'
@@ -193,67 +267,214 @@ select id_part, cod_fiscal, denumire from (
ENDIF
*=====================================================================
* Banda C: dublu-click pe coloanele ROA (denumire/cod fiscal) -> editare partener;
* coloanele ANAF (firma/cod) raman pe meniul de verificare
* Banda D: meniu_dblclick unic pe toate coloanele (nu mai exista rutare directa pe coloana)
*=====================================================================
*-- D1a: partener cu id_part - prima optiune activa, cu denumirea lui
SELECT crsVerificareParteneri
LOCATE FOR id_part = lnIdPartTest
gnMockNomModCount = 0
gnMockNomModId = 0
gnMockVerifCodCount = 0
gcMockVerifCodOptiuniAnte = ''
gnMockVerifCodLnOptiune = 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) + ')'
IF gcMockVerifCodOptiuniAnte == "MODIFICARE PARTENER - " + lcDenumirePart + ";\-;"
DO PrLog WITH 'OK D1a: Column2 DblClick -> optiuni_meniu_ante = [MODIFICARE PARTENER - <denumire>;\-;]'
ELSE
DO PrLog WITH 'FAIL C1: Column2 DblClick - nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' id=' + TRANSFORM(gnMockNomModId) + ' verifcod count=' + TRANSFORM(gnMockVerifCodCount)
DO PrLog WITH 'FAIL D1a: optiuni_meniu_ante=[' + gcMockVerifCodOptiuniAnte + ']'
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
*-- coloana ANAF (firma) cheama ACELASI meniu_dblclick - nu mai exista rutare separata
gcMockVerifCodOptiuniAnte = ''
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'
IF gcMockVerifCodOptiuniAnte == "MODIFICARE PARTENER - " + lcDenumirePart + ";\-;"
DO PrLog WITH 'OK D1a2: Column5 (firma ANAF) DblClick -> acelasi meniu_dblclick unificat'
ELSE
DO PrLog WITH 'FAIL C3: Column5 DblClick - verifcod count=' + TRANSFORM(gnMockVerifCodCount) + ' nom_mod count=' + TRANSFORM(gnMockNomModCount)
DO PrLog WITH 'FAIL D1a2: optiuni_meniu_ante=[' + gcMockVerifCodOptiuniAnte + '] - coloana ANAF nu mai e unificata cu restul'
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
*-- D1b: fara id_part - prima optiune dezactivata (prefix \)
SELECT crsVerificareParteneri
LOCATE FOR cod_fiscal = 'RO9999999'
gcMockVerifCodOptiuniAnte = ''
goFormGD._grdbase1.Column2.Text1.DblClick()
IF gcMockVerifCodOptiuniAnte == "\MODIFICARE PARTENER - TEST FARA ID_PART;\-;"
DO PrLog WITH 'OK D1b: fara id_part -> prima optiune dezactivata cu \'
ELSE
DO PrLog WITH 'FAIL D1b: optiuni_meniu_ante=[' + gcMockVerifCodOptiuniAnte + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- D1c: ';' din denumire devine ',' - altfel ar sparge sirul XMENU
SELECT crsVerificareParteneri
LOCATE FOR cod_fiscal = 'RO8888888'
gcMockVerifCodOptiuniAnte = ''
goFormGD._grdbase1.Column2.Text1.DblClick()
IF gcMockVerifCodOptiuniAnte == "MODIFICARE PARTENER - TEST, CU PUNCT VIRGULA;\-;"
DO PrLog WITH 'OK D1c: ";" din denumire e inlocuit cu "," in optiuni_meniu_ante'
ELSE
DO PrLog WITH 'FAIL D1c: optiuni_meniu_ante=[' + gcMockVerifCodOptiuniAnte + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- D2: lnOptiune = 1 (prima optiune aleasa) -> meniu_dblclick_partener -> nom_parteneri_modifica
SELECT crsVerificareParteneri
LOCATE FOR id_part = lnIdPartTest
gnMockVerifCodLnOptiune = 1
gnMockNomModCount = 0
gnMockNomModId = 0
goFormGD._grdbase1.Column2.Text1.DblClick()
IF gnMockNomModCount = 1 AND gnMockNomModId = lnIdPartTest
DO PrLog WITH 'OK D2: lnOptiune=1 -> meniu_dblclick_partener -> nom_parteneri_modifica(' + TRANSFORM(lnIdPartTest) + ')'
ELSE
DO PrLog WITH 'FAIL D2: nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' id=' + TRANSFORM(gnMockNomModId)
gnEsecuri = gnEsecuri + 1
ENDIF
*-- D2b: orice alta optiune (ex. 7 = anulat/alta actiune din meniul de verificare) -> NU editeaza partenerul
gnMockVerifCodLnOptiune = 7
gnMockNomModCount = 0
goFormGD._grdbase1.Column2.Text1.DblClick()
IF gnMockNomModCount = 0
DO PrLog WITH 'OK D2b: lnOptiune<>1 -> nu se cheama meniu_dblclick_partener'
ELSE
DO PrLog WITH 'FAIL D2b: nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' desi lnOptiune=7'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- D3: id_part gol + lnOptiune=1 -> mesaj de avertizare, fara editare partener (fostul C5)
SELECT crsVerificareParteneri
LOCATE FOR cod_fiscal = 'RO9999999'
gnMockVerifCodLnOptiune = 1
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'
DO PrLog WITH 'OK D3: 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 + ']'
DO PrLog WITH 'FAIL D3: nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' mesaj=[' + gcMockUltimMesaj + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
*=====================================================================
* Banda E: SetVedere(1/2/3) - coloane vizibile si suma latimilor
*=====================================================================
LOCAL lnV, lnC, lnSuma, lcVizibile
FOR lnV = 1 TO 3
goFormGD.SetVedere(m.lnV)
lnSuma = 0
lcVizibile = ''
FOR lnC = 1 TO goFormGD._grdbase1.ColumnCount
IF goFormGD._grdbase1.Columns(m.lnC).Visible
lnSuma = lnSuma + goFormGD._grdbase1.Columns(m.lnC).Width
lcVizibile = lcVizibile + goFormGD._grdbase1.Columns(m.lnC).Name + '(' + TRANSFORM(goFormGD._grdbase1.Columns(m.lnC).Width) + ') '
ENDIF
ENDFOR
DO PrLog WITH 'Vedere ' + TRANSFORM(m.lnV) + ': suma latimi=' + TRANSFORM(m.lnSuma) + ' px, coloane vizibile: ' + m.lcVizibile
IF m.lnV = 1
IF m.lnSuma <= goFormGD._grdbase1.Width
DO PrLog WITH 'OK E1: vedere Esential, suma latimilor (' + TRANSFORM(m.lnSuma) + ') <= ' + TRANSFORM(goFormGD._grdbase1.Width) + ' px (latimea reala a gridului)'
ELSE
DO PrLog WITH 'FAIL E1: vedere Esential depaseste latimea gridului - suma=' + TRANSFORM(m.lnSuma) + ' px > ' + TRANSFORM(goFormGD._grdbase1.Width) + ' px'
gnEsecuri = gnEsecuri + 1
ENDIF
ENDIF
ENDFOR
*-- E2: in vederea Esential perioada de TVA se vede pe doua coloane de data, nu ca text lung
goFormGD.SetVedere(1)
IF goFormGD._grdbase1.cDataInceputScpTva.Visible AND goFormGD._grdbase1.cDataSfarsitScpTva.Visible ;
AND goFormGD._grdbase1.cDataAnulImpScpTva.Visible
DO PrLog WITH 'OK E2: vederea Esential arata Inceput / Sfarsit / Anulare TVA ca trei coloane'
ELSE
DO PrLog WITH 'FAIL E2: vederea Esential nu arata cele trei coloane de perioada TVA'
gnEsecuri = gnEsecuri + 1
ENDIF
*=====================================================================
* Banda I: AsazaFiltre - butoanele de filtru au caption cu numar, deci latime variabila;
* trebuie asezate unul dupa altul, fara suprapunere, oricat de lung ar fi textul
*=====================================================================
LOCAL laFil[4], lnF, llSupra, lcPoz
goFormGD.chkInvalid.Caption = 'Coduri invalide (12345)'
goFormGD.chkDuplicat.Caption = 'Duplicate (12345)'
goFormGD.chkInactiv.Caption = 'Inactivi (12345)'
goFormGD.chkPlatitor.Caption = 'Atribut RO (12345)'
goFormGD.chkInvalid.Visible = .T.
goFormGD.chkDuplicat.Visible = .T.
goFormGD.chkInactiv.Visible = .T.
goFormGD.chkPlatitor.Visible = .T.
goFormGD.AsazaFiltre()
laFil[1] = goFormGD.chkInvalid
laFil[2] = goFormGD.chkDuplicat
laFil[3] = goFormGD.chkInactiv
laFil[4] = goFormGD.chkPlatitor
llSupra = .F.
lcPoz = ''
FOR lnF = 1 TO 4
lcPoz = lcPoz + ALLTRIM(laFil[m.lnF].Caption) + ' [' + TRANSFORM(laFil[m.lnF].Left) + '..' + ;
TRANSFORM(laFil[m.lnF].Left + laFil[m.lnF].Width) + '] '
IF m.lnF > 1 AND laFil[m.lnF].Left < laFil[m.lnF - 1].Left + laFil[m.lnF - 1].Width
llSupra = .T.
ENDIF
ENDFOR
DO PrLog WITH ' filtre: ' + m.lcPoz
IF !llSupra
DO PrLog WITH 'OK I1: butoanele de filtru nu se suprapun dupa AsazaFiltre'
ELSE
DO PrLog WITH 'FAIL I1: butoanele de filtru se suprapun'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- I2: chkMFIN a disparut ca obiect; ramane proprietatea lMFIN, setata din al 2-lea parametru
IF !PEMSTATUS(goFormGD, 'chkMFIN', 5) AND goFormGD.lMFIN = .T.
DO PrLog WITH 'OK I2: chkMFIN a fost scos, lMFIN = .T. (al 2-lea parametru la Init)'
ELSE
DO PrLog WITH 'FAIL I2: chkMFIN inca exista sau lMFIN=' + TRANSFORM(goFormGD.lMFIN) + ' (asteptat .T.)'
gnEsecuri = gnEsecuri + 1
ENDIF
*=====================================================================
* Banda G: continutul coloanei atentie - metoda reala ConstruiesteAtentie (COMUN\clase\overificari.vc2),
* apelata real, pe randuri fabricate, fara ANAF
*=====================================================================
INSERT INTO crsVerificareParteneri (denumire, Valid, duplicat, inactiv, firma, atribut_fiscal, platitortvamfin) ;
VALUES ('ATN INVALID', .F., .F., .F., '', '', .F.)
INSERT INTO crsVerificareParteneri (denumire, Valid, duplicat, inactiv, firma, atribut_fiscal, platitortvamfin) ;
VALUES ('ATN DUPLICAT', .T., .T., .F., '', '', .F.)
INSERT INTO crsVerificareParteneri (denumire, Valid, duplicat, inactiv, firma, atribut_fiscal, platitortvamfin) ;
VALUES ('ATN INACTIV', .T., .F., .T., '', '', .F.)
INSERT INTO crsVerificareParteneri (denumire, Valid, duplicat, inactiv, firma, atribut_fiscal, platitortvamfin) ;
VALUES ('ATN FARARO', .T., .F., .F., 'FIRMA TEST SRL', 'RO', .F.)
INSERT INTO crsVerificareParteneri (denumire, Valid, duplicat, inactiv, firma, atribut_fiscal, platitortvamfin) ;
VALUES ('ATN COMBO', .T., .T., .T., 'FIRMA COMBO SRL', '', .T.)
goFormGD.ConstruiesteAtentie()
LOCAL laAtn[5,2]
laAtn[1,1] = 'ATN INVALID'
laAtn[1,2] = 'INVALID'
laAtn[2,1] = 'ATN DUPLICAT'
laAtn[2,2] = 'DUPLICAT'
laAtn[3,1] = 'ATN INACTIV'
laAtn[3,2] = 'INACTIV'
laAtn[4,1] = 'ATN FARARO'
laAtn[4,2] = 'FARA RO'
laAtn[5,1] = 'ATN COMBO'
laAtn[5,2] = 'DUPLICAT INACTIV FARA RO'
LOCAL lnG
FOR lnG = 1 TO 5
SELECT crsVerificareParteneri
LOCATE FOR denumire = laAtn[m.lnG, 1]
IF FOUND() AND ALLTRIM(crsVerificareParteneri.atentie) == laAtn[m.lnG, 2]
DO PrLog WITH 'OK G' + TRANSFORM(m.lnG) + ': ' + laAtn[m.lnG, 1] + ' -> atentie=[' + laAtn[m.lnG, 2] + ']'
ELSE
DO PrLog WITH 'FAIL G' + TRANSFORM(m.lnG) + ': ' + laAtn[m.lnG, 1] + ' -> atentie=[' + ALLTRIM(crsVerificareParteneri.atentie) + '] asteptat [' + laAtn[m.lnG, 2] + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
ENDFOR
goFormGD.Release()
DO PrLog WITH IIF(gnEsecuri = 0, 'TOTAL OK', 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)')

View File

@@ -0,0 +1,376 @@
* test_todo21_mesaj_meniu.prg
* TODO #21: regresie pentru D6/D7 (mesajul de detalii grupat pe sectiuni) si D10 (meniul
* scurtat de verificare cod fiscal), ca schimbari ulterioare in formular sa nu le strice tacut.
* Fara HTTP, fara ANAF live, fara Oracle - GetMeniuVerificareCodFiscal/GetOptiuneVerificareCodFiscal/
* verifica_partener_show_info nu depind de ele (doar de parametri si de variabila globala crlf,
* setata mai jos ca in test_init_env_auto.prg).
*
* Pas 1-2: GetMeniuVerificareCodFiscal / GetOptiuneVerificareCodFiscal apelate DIRECT (functii
* pure, fara XMENU in interior).
* Pas 3: aritmetica optiuni_meniu_ante - copiata LITERAL din VerificaCodFiscal
* (COMUN\programe\oproceduri_comune.prg:4960-4967: "lnOptiuneVerificare = m.lnOptiune" apoi
* "lnOptiuneVerificare = m.lnOptiuneVerificare - Occurs(';', m.lcOptiuniMeniuAnte)"), aplicata pe
* o pozitie FABRICATA (nu se apeleaza VerificaCodFiscal, care ar deschide XMENU si ar bloca
* headless-ul).
* Pas 4: verifica_partener_show_info, apelata prin umbra (copie a oproceduri_comune.prg cu
* amessagebox redenumit, ca in test_todo21_perioade_anaf.prg) - amessagebox e inlocuit de
* mock_amessagebox.prg, textul se captureaza in gcMockUltimMesaj fara dialog modal. Obiectele
* partener sunt fabricate (CREATEOBJECT("empty") + ADDPROPERTY), fara verificare reala.
*
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\test_todo21_mesaj_meniu.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, gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns, crlf
gcLog = "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\test_todo21_mesaj_meniu_log.txt"
gcMockUltimMesaj = ''
gnMockUltimTip = 0
gnMockRaspuns = 6
crlf = CHR(13) + CHR(10)
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
PUBLIC gnEsecuri
gnEsecuri = 0
ON ERROR DO WriteTestErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
TRY
*-- umbra: copie a oproceduri_comune.prg cu FUNCTION amessagebox redenumita, ca apelul din
*-- verifica_partener_show_info sa cada pe mock_amessagebox.prg (fara conflict de nume) si
*-- niciun dialog modal sa nu apara. VFP rezolva numele duplicate de procedura in favoarea
*-- fisierului deschis PRIMUL cu SET PROCEDURE - de-asta mock-ul si umbra se incarca aici,
*-- inaintea oricarui alt cod.
LOCAL lcSrc, lcUmbra
lcUmbra = ADDBS(SYS(2023)) + 'oproceduri_comune_umbra_mesajmeniu.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_mm' + CHR(13) + CHR(10))
STRTOFILE(lcSrc, lcUmbra)
ERASE (FORCEEXT(lcUmbra, 'fxp'))
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
SET PROCEDURE TO (lcUmbra) ADDITIVE
DO WriteTestLog WITH 'mock si umbra incarcate (fara Oracle - functiile testate nu depind de el)'
*==================================================================
* Pas 1: GetMeniuVerificareCodFiscal - cele 5 pozitii, in ordine, cu cod fiscal prezent
*==================================================================
LOCAL lcMenu, lcMenuAsteptat, lcMenuFaraCod, lcMenuFaraCodAsteptat
lcMenu = GetMeniuVerificareCodFiscal('RO1890420')
lcMenuAsteptat = "VERIFICARE ANAF;VERIFICARE VIES;ISTORIC VERIFICARI COD FISCAL;\-;DESCHIDE FISA PE MFINANTE.RO"
IF m.lcMenu == m.lcMenuAsteptat
DO WriteTestLog WITH 'OK P1a: meniul cu cod fiscal are exact cele 5 pozitii, in ordine'
ELSE
DO WriteTestLog WITH 'FAIL P1a: meniu=[' + m.lcMenu + '] asteptat=[' + m.lcMenuAsteptat + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- Pas 3 (partial aici): fara cod fiscal, pozitiile dezactivabile au prefixul "\";
*-- ISTORIC (pozitia 3) ramane activa oricum.
lcMenuFaraCod = GetMeniuVerificareCodFiscal('')
lcMenuFaraCodAsteptat = "\VERIFICARE ANAF;\VERIFICARE VIES;ISTORIC VERIFICARI COD FISCAL;\-;\DESCHIDE FISA PE MFINANTE.RO"
IF m.lcMenuFaraCod == m.lcMenuFaraCodAsteptat
DO WriteTestLog WITH 'OK P1b: fara cod fiscal, ANAF/VIES/MFINANTE dezactivate (\), ISTORIC ramane activ'
ELSE
DO WriteTestLog WITH 'FAIL P1b: meniu=[' + m.lcMenuFaraCod + '] asteptat=[' + m.lcMenuFaraCodAsteptat + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
*==================================================================
* Pas 2: GetOptiuneVerificareCodFiscal - 1/2/3/5 mapate, 4 (separator) si restul goale
*==================================================================
LOCAL lnI, lcOptRezultat, lcOptAsteptat
DIMENSION laOptiuni(7,2)
laOptiuni(1,1) = 0
laOptiuni(1,2) = ''
laOptiuni(2,1) = 1
laOptiuni(2,2) = 'ANAF_SERVICIU_WEB'
laOptiuni(3,1) = 2
laOptiuni(3,2) = 'VIES_AUTO'
laOptiuni(4,1) = 3
laOptiuni(4,2) = 'ISTORIC'
laOptiuni(5,1) = 4
laOptiuni(5,2) = ''
laOptiuni(6,1) = 5
laOptiuni(6,2) = 'MFIN_MANUAL_COD'
laOptiuni(7,1) = 6
laOptiuni(7,2) = ''
FOR lnI = 1 TO 7
lcOptRezultat = GetOptiuneVerificareCodFiscal(laOptiuni(m.lnI,1))
lcOptAsteptat = laOptiuni(m.lnI,2)
IF m.lcOptRezultat == m.lcOptAsteptat
DO WriteTestLog WITH 'OK P2: GetOptiuneVerificareCodFiscal(' + TRANSFORM(laOptiuni(m.lnI,1)) + ') = [' + m.lcOptRezultat + ']'
ELSE
DO WriteTestLog WITH 'FAIL P2: GetOptiuneVerificareCodFiscal(' + TRANSFORM(laOptiuni(m.lnI,1)) + ') = [' + m.lcOptRezultat + '], asteptat [' + m.lcOptAsteptat + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
ENDFOR
*==================================================================
* Pas 3: aritmetica optiuni_meniu_ante - formula copiata din VerificaCodFiscal:4960-4967
*==================================================================
LOCAL lcOptiuniMeniuAnte, lcMenuCombinat, lcMenuCombinatAsteptat, lnOptiuneSimulat, lnOptiuneVerificare, lcTip
lcOptiuniMeniuAnte = "MODIFICARE PARTENER - X;\-;"
*-- meniul combinat trebuie sa fie exact prepandatul + submeniul de verificare neschimbat
lcMenuCombinat = GetMeniuVerificareCodFiscal('RO1890420', m.lcOptiuniMeniuAnte)
lcMenuCombinatAsteptat = m.lcOptiuniMeniuAnte + m.lcMenuAsteptat
IF m.lcMenuCombinat == m.lcMenuCombinatAsteptat
DO WriteTestLog WITH 'OK P3a: meniul combinat = prepandate (2 pozitii) + submeniul de verificare neschimbat'
ELSE
DO WriteTestLog WITH 'FAIL P3a: combinat=[' + m.lcMenuCombinat + '] asteptat=[' + m.lcMenuCombinatAsteptat + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- pozitia 3 din meniul COMBINAT (dupa cele 2 prepandate: "MODIFICARE PARTENER - X" si "\-")
*-- e primul element din submeniul de verificare -> trebuie sa cada pe ANAF_SERVICIU_WEB
lnOptiuneSimulat = 3
lnOptiuneVerificare = m.lnOptiuneSimulat
IF !EMPTY(m.lcOptiuniMeniuAnte)
lnOptiuneVerificare = m.lnOptiuneVerificare - OCCURS(';', m.lcOptiuniMeniuAnte)
ENDIF
lcTip = GetOptiuneVerificareCodFiscal(m.lnOptiuneVerificare)
IF m.lcTip == 'ANAF_SERVICIU_WEB'
DO WriteTestLog WITH 'OK P3b: pozitia 3 din meniul combinat (dupa cele 2 prepandate) = ANAF_SERVICIU_WEB'
ELSE
DO WriteTestLog WITH 'FAIL P3b: pozitia 3 combinata a dat [' + m.lcTip + '], asteptat ANAF_SERVICIU_WEB'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- pozitia 7 (ultima din meniul combinat) e ultimul element din submeniu -> MFIN_MANUAL_COD
lnOptiuneSimulat = 7
lnOptiuneVerificare = m.lnOptiuneSimulat - OCCURS(';', m.lcOptiuniMeniuAnte)
lcTip = GetOptiuneVerificareCodFiscal(m.lnOptiuneVerificare)
IF m.lcTip == 'MFIN_MANUAL_COD'
DO WriteTestLog WITH 'OK P3c: pozitia 7 din meniul combinat = MFIN_MANUAL_COD'
ELSE
DO WriteTestLog WITH 'FAIL P3c: pozitia 7 combinata a dat [' + m.lcTip + '], asteptat MFIN_MANUAL_COD'
gnEsecuri = gnEsecuri + 1
ENDIF
*==================================================================
* Pas 4: verifica_partener_show_info - structura mesajului, pe obiecte fabricate
*==================================================================
LOCAL loPart
*-- 4a: sursa ANAF, atribut RO nepotrivit (neplatitor + cod RO) -> *** ATENTIE ***,
*-- Mesaj ANAF completat, identificare PARTIALA (telefon/fax/cod postal goale -> absente)
loPart = CREATEOBJECT("empty")
ADDPROPERTY(loPart, "firma", "FIRMA UNU SRL")
ADDPROPERTY(loPart, "sursa", "ANAF")
ADDPROPERTY(loPart, "data_sursa", {})
ADDPROPERTY(loPart, "platitortvamfin", .F.)
ADDPROPERTY(loPart, "datatvamfin", "")
ADDPROPERTY(loPart, "PlatitorTVA", .F.)
ADDPROPERTY(loPart, "tvaincasare", .T.)
ADDPROPERTY(loPart, "splittva", .F.)
ADDPROPERTY(loPart, "inactiv", .F.)
ADDPROPERTY(loPart, "stare", "ANULAT DIN OFICIU - TEST")
ADDPROPERTY(loPart, "adresa", "STR TEST NR 1")
ADDPROPERTY(loPart, "judet", "BUCURESTI")
ADDPROPERTY(loPart, "regcom", "J40/1/2020")
ADDPROPERTY(loPart, "codpostal", "")
ADDPROPERTY(loPart, "telefon", "")
ADDPROPERTY(loPart, "fax", "")
ADDPROPERTY(loPart, "eroare", "")
gcMockUltimMesaj = ''
verifica_partener_show_info(m.loPart, 'RO1234567', 'FIRMA UNU SRL', '')
IF 'ANAF: FIRMA UNU SRL' $ m.gcMockUltimMesaj
DO WriteTestLog WITH 'OK P4a1: prefix sursa "ANAF: " pe linia denumirii'
ELSE
DO WriteTestLog WITH 'FAIL P4a1: prefixul ANAF lipseste din mesaj'
gnEsecuri = gnEsecuri + 1
ENDIF
IF '*** ATENTIE ***' $ m.gcMockUltimMesaj
DO WriteTestLog WITH 'OK P4a2: *** ATENTIE *** prezent (atribut RO nepotrivit)'
ELSE
DO WriteTestLog WITH 'FAIL P4a2: *** ATENTIE *** lipseste pentru atribut RO nepotrivit'
gnEsecuri = gnEsecuri + 1
ENDIF
IF '--- TVA ---' $ m.gcMockUltimMesaj AND '--- STARE FIRMA ---' $ m.gcMockUltimMesaj AND '--- IDENTIFICARE ---' $ m.gcMockUltimMesaj
DO WriteTestLog WITH 'OK P4a3: cele 3 titluri de sectiune sunt prezente'
ELSE
DO WriteTestLog WITH 'FAIL P4a3: lipseste cel putin un titlu de sectiune - [' + m.gcMockUltimMesaj + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
IF 'Mesaj ANAF: ANULAT DIN OFICIU - TEST' $ m.gcMockUltimMesaj
DO WriteTestLog WITH 'OK P4a4: Mesaj ANAF completat cand stare e nevida'
ELSE
DO WriteTestLog WITH 'FAIL P4a4: linia Mesaj ANAF lipseste sau e gresita'
gnEsecuri = gnEsecuri + 1
ENDIF
IF NOT ('Cod postal:' $ m.gcMockUltimMesaj) AND NOT ('Telefon:' $ m.gcMockUltimMesaj) AND NOT ('Fax:' $ m.gcMockUltimMesaj)
DO WriteTestLog WITH 'OK P4a5: liniile pentru campurile goale (cod postal/telefon/fax) lipsesc'
ELSE
DO WriteTestLog WITH 'FAIL P4a5: cel putin un camp gol si-a pastrat linia - [' + m.gcMockUltimMesaj + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
IF 'Adresa: STR TEST NR 1' $ m.gcMockUltimMesaj AND 'Judet: BUCURESTI' $ m.gcMockUltimMesaj AND 'Reg. comertului: J40/1/2020' $ m.gcMockUltimMesaj
DO WriteTestLog WITH 'OK P4a6: campurile completate (adresa/judet/reg. comertului) apar'
ELSE
DO WriteTestLog WITH 'FAIL P4a6: lipseste cel putin un camp completat de identificare'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- 4b: sursa CACHE cu data, platitor+cod RO potrivite dar INACTIV -> *** ATENTIE *** pt. inactiv,
*-- fara proprietatile de perioada ANAF (ramura Else din verifica_partener_show_info),
*-- identificare COMPLETA (toate cele 6 campuri completate)
loPart = CREATEOBJECT("empty")
ADDPROPERTY(loPart, "firma", "FIRMA DOI SRL")
ADDPROPERTY(loPart, "sursa", "CACHE")
ADDPROPERTY(loPart, "data_sursa", {^2026-08-21})
ADDPROPERTY(loPart, "platitortvamfin", .T.)
ADDPROPERTY(loPart, "datatvamfin", "01/01/2015")
ADDPROPERTY(loPart, "PlatitorTVA", .T.)
ADDPROPERTY(loPart, "tvaincasare", .F.)
ADDPROPERTY(loPart, "splittva", .F.)
ADDPROPERTY(loPart, "inactiv", .T.)
ADDPROPERTY(loPart, "stare", "")
ADDPROPERTY(loPart, "adresa", "STR DOI NR 2")
ADDPROPERTY(loPart, "judet", "CLUJ")
ADDPROPERTY(loPart, "regcom", "J12/2/2015")
ADDPROPERTY(loPart, "codpostal", "400000")
ADDPROPERTY(loPart, "telefon", "0264000000")
ADDPROPERTY(loPart, "fax", "0264000001")
ADDPROPERTY(loPart, "eroare", "")
gcMockUltimMesaj = ''
verifica_partener_show_info(m.loPart, 'RO7654321', 'FIRMA DOI SRL', '')
IF 'CACHE 21/08/2026: FIRMA DOI SRL' $ m.gcMockUltimMesaj
DO WriteTestLog WITH 'OK P4b1: prefix sursa "CACHE dd/mm/yyyy: " pe linia denumirii'
ELSE
DO WriteTestLog WITH 'FAIL P4b1: prefixul CACHE lipseste sau e gresit - [' + m.gcMockUltimMesaj + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
IF '*** ATENTIE ***' $ m.gcMockUltimMesaj
DO WriteTestLog WITH 'OK P4b2: *** ATENTIE *** prezent (inactiv)'
ELSE
DO WriteTestLog WITH 'FAIL P4b2: *** ATENTIE *** lipseste pentru partener inactiv'
gnEsecuri = gnEsecuri + 1
ENDIF
IF 'Mesaj ANAF:' $ m.gcMockUltimMesaj
DO WriteTestLog WITH 'FAIL P4b3: linia Mesaj ANAF apare desi stare e goala'
gnEsecuri = gnEsecuri + 1
ELSE
DO WriteTestLog WITH 'OK P4b3: linia Mesaj ANAF lipseste cand stare e goala'
ENDIF
IF 'Cod postal: 400000' $ m.gcMockUltimMesaj AND 'Telefon: 0264000000' $ m.gcMockUltimMesaj AND 'Fax: 0264000001' $ m.gcMockUltimMesaj
DO WriteTestLog WITH 'OK P4b4: identificare completa (cod postal/telefon/fax completate) apare integral'
ELSE
DO WriteTestLog WITH 'FAIL P4b4: lipseste cel putin un camp de identificare completat'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- 4c: sursa CACHE_INDISP, fara atentie, IDENTIFICARE complet goala -> sectiunea lipseste
loPart = CREATEOBJECT("empty")
ADDPROPERTY(loPart, "firma", "FIRMA TREI SRL")
ADDPROPERTY(loPart, "sursa", "CACHE_INDISP")
ADDPROPERTY(loPart, "data_sursa", {^2026-08-20})
ADDPROPERTY(loPart, "platitortvamfin", .T.)
ADDPROPERTY(loPart, "datatvamfin", "01/01/2015")
ADDPROPERTY(loPart, "PlatitorTVA", .T.)
ADDPROPERTY(loPart, "tvaincasare", .F.)
ADDPROPERTY(loPart, "splittva", .F.)
ADDPROPERTY(loPart, "inactiv", .F.)
ADDPROPERTY(loPart, "stare", "")
ADDPROPERTY(loPart, "adresa", "")
ADDPROPERTY(loPart, "judet", "")
ADDPROPERTY(loPart, "regcom", "")
ADDPROPERTY(loPart, "codpostal", "")
ADDPROPERTY(loPart, "telefon", "")
ADDPROPERTY(loPart, "fax", "")
ADDPROPERTY(loPart, "eroare", "")
gcMockUltimMesaj = ''
verifica_partener_show_info(m.loPart, 'RO1112223', 'FIRMA TREI SRL', '')
IF 'CACHE 20/08/2026 (ANAF indisponibil): FIRMA TREI SRL' $ m.gcMockUltimMesaj
DO WriteTestLog WITH 'OK P4c1: prefix "CACHE dd/mm/yyyy (ANAF indisponibil): " pe linia denumirii'
ELSE
DO WriteTestLog WITH 'FAIL P4c1: prefixul CACHE_INDISP lipseste sau e gresit - [' + m.gcMockUltimMesaj + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
IF '*** ATENTIE ***' $ m.gcMockUltimMesaj
DO WriteTestLog WITH 'FAIL P4c2: *** ATENTIE *** apare desi codul si starea sunt consistente'
gnEsecuri = gnEsecuri + 1
ELSE
DO WriteTestLog WITH 'OK P4c2: *** ATENTIE *** absent cand nu e cazul'
ENDIF
IF '--- IDENTIFICARE ---' $ m.gcMockUltimMesaj
DO WriteTestLog WITH 'FAIL P4c3: sectiunea IDENTIFICARE apare desi toate campurile ei sunt goale'
gnEsecuri = gnEsecuri + 1
ELSE
DO WriteTestLog WITH 'OK P4c3: sectiunea IDENTIFICARE lipseste cand toate campurile ei sunt goale'
ENDIF
IF '--- TVA ---' $ m.gcMockUltimMesaj AND '--- STARE FIRMA ---' $ m.gcMockUltimMesaj
DO WriteTestLog WITH 'OK P4c4: sectiunile TVA/STARE FIRMA raman prezente'
ELSE
DO WriteTestLog WITH 'FAIL P4c4: lipseste sectiunea TVA sau STARE FIRMA'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- 4d: fara proprietatea sursa (stil mfinante.ro) -> fara prefix pe linia denumirii
loPart = CREATEOBJECT("empty")
ADDPROPERTY(loPart, "firma", "FIRMA PATRU SRL")
ADDPROPERTY(loPart, "platitortvamfin", .T.)
ADDPROPERTY(loPart, "datatvamfin", "01/01/2015")
ADDPROPERTY(loPart, "PlatitorTVA", .T.)
ADDPROPERTY(loPart, "tvaincasare", .F.)
ADDPROPERTY(loPart, "splittva", .F.)
ADDPROPERTY(loPart, "inactiv", .F.)
ADDPROPERTY(loPart, "stare", "")
ADDPROPERTY(loPart, "adresa", "")
ADDPROPERTY(loPart, "judet", "")
ADDPROPERTY(loPart, "regcom", "")
ADDPROPERTY(loPart, "codpostal", "")
ADDPROPERTY(loPart, "telefon", "")
ADDPROPERTY(loPart, "fax", "")
ADDPROPERTY(loPart, "eroare", "")
gcMockUltimMesaj = ''
verifica_partener_show_info(m.loPart, 'RO4445556', 'FIRMA PATRU SRL', '')
IF 'FIRMA PATRU SRL' $ m.gcMockUltimMesaj AND NOT ('ANAF:' $ m.gcMockUltimMesaj) AND NOT ('CACHE' $ m.gcMockUltimMesaj)
DO WriteTestLog WITH 'OK P4d: fara proprietatea sursa, linia denumirii nu are niciun prefix'
ELSE
DO WriteTestLog WITH 'FAIL P4d: mesajul are un prefix desi obiectul nu are proprietatea sursa'
gnEsecuri = gnEsecuri + 1
ENDIF
DO WriteTestLog WITH IIF(gnEsecuri = 0, 'TOTAL OK', 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)')
CATCH TO loEx
DO WriteTestLog WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
DO WriteTestLog WITH 'TOTAL FAIL: exceptie neasteptata'
ENDTRY
QUIT
**********************************************************
PROCEDURE WriteTestLog
LPARAMETERS tcMsg
LOCAL lcL
SET SAFETY OFF
lcL = IIF(FILE(gcLog), FILETOSTR(gcLog), '')
STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcLog)
ENDPROC
**********************************************************
PROCEDURE WriteTestErr
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
DO WriteTestLog WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
ENDPROC