Verificare ANAF: raspunsul 404 citit, intrerupator cand serviciul nu raspunde
Serviciul ANAF intoarce HTTP 404 cu corp complet pentru codurile inexistente
({"found":[],"notFound":[...]}), iar wrapper-ul citea corpul doar pe 200 - deci
verdictul "cod inexistent" nu aparea niciodata. Corpul se citeste acum la orice
status, iar verdictul se da doar cand notFound contine chiar codul interogat;
orice alt corp neinteles inseamna "nu a raspuns", nu acuzatie.
Timeout-uri reale pe apelurile web (2/2/3/3): garda Pemstatus din jurul lui
SetTimeouts intoarce .F. pe obiectul COM legat tarziu, deci timeout-urile nu se
aplicau, iar o gazda care inghite pachetele bloca interfata ~21 s per rand.
Aceleasi timeout-uri si pe drumul batch. Fallback-ul Microsoft.XMLHTTP, fara
timeout, a fost scos de pe calea single.
Cand serviciul nu raspunde, verificarile se opresc 10 minute si banda arata ca
au fost sarite, in loc sa taca. La deschiderea formularului pleaca o sonda
asincrona de disponibilitate, cu termen de viata, guard de reintrare si Abort()
la inchidere; randul care asteapta verdictul nu face apel propriu. Cache doar pe
rezultate pozitive. Codul fiscal nenumeric primeste mesaj propriu, in banda si
in detaliile F4.
ParseJsonANAFv8 restaureaza formatul datei si pe calea de eroare (o exceptie
lasa toata sesiunea pe YMD).
Teste: suita headless 70/70, cu sonda si clasele de esec mock-uite (fara retea)
si fixture peste corpurile 404 masurate pe serviciul real.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DhJwsrFFe1ZNAAtS8Twuti
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -124,3 +124,8 @@ Thumbs.db
|
|||||||
Desktop.ini
|
Desktop.ini
|
||||||
bash.exe.stackdump
|
bash.exe.stackdump
|
||||||
.claude/
|
.claude/
|
||||||
|
|
||||||
|
# --- artefacte generate de rularile de test headless ---
|
||||||
|
utile/Teste/**/screenshots/
|
||||||
|
utile/Teste/**/uisync/
|
||||||
|
utile/Teste/**/*_log.txt
|
||||||
|
|||||||
@@ -111,6 +111,10 @@ Cand un bug apare "de azi", compara cu clasa veche fara a atinge SVN:
|
|||||||
|
|
||||||
## 7. Capcane la SCRIEREA scriptului de test
|
## 7. Capcane la SCRIEREA scriptului de test
|
||||||
|
|
||||||
|
- **`SET SAFETY OFF` in primele linii, INAINTE de orice `STRTOFILE`/`CREATE CURSOR`** (plus
|
||||||
|
`SET TALK OFF`). Fara el VFP deschide dialogul de confirmare la suprascrierea fisierului de
|
||||||
|
log, iar headless dialogul blocheaza procesul pana la timeout. Suitele existente il au deja -
|
||||||
|
capcana apare la scripturile ad-hoc, scrise repede pentru o masuratoare.
|
||||||
- **`DEFINE CLASS ... ENDDEFINE` nu poate sta la mijlocul programului principal.** Toate liniile
|
- **`DEFINE CLASS ... ENDDEFINE` nu poate sta la mijlocul programului principal.** Toate liniile
|
||||||
de DUPA `ENDDEFINE` dau "Statement is not in a procedure" (vezi `<script>.ERR`); scriptul
|
de DUPA `ENDDEFINE` dau "Statement is not in a procedure" (vezi `<script>.ERR`); scriptul
|
||||||
ruleaza doar pana acolo si se opreste silentios, fara sa ajunga la `QUIT` - simptom: vfp9.exe
|
ruleaza doar pana acolo si se opreste silentios, fara sa ajunga la `QUIT` - simptom: vfp9.exe
|
||||||
|
|||||||
@@ -31,8 +31,17 @@
|
|||||||
acumulat — orchestrator + subagenti proaspeti per sarcina (max ~200-250k tokens/subagent),
|
acumulat — orchestrator + subagenti proaspeti per sarcina (max ~200-250k tokens/subagent),
|
||||||
handoff compact pe disc: `orchestrare-subagenti.md`.
|
handoff compact pe disc: `orchestrare-subagenti.md`.
|
||||||
7. Conventii obligatorii, de citit cand atingi zona respectiva:
|
7. Conventii obligatorii, de citit cand atingi zona respectiva:
|
||||||
- editezi `.vc2`/`.sc2` pe text (orice write, chiar pe o linie) -> `conventie_encoding_cp1252.md`
|
- editezi orice fisier cu octeti cp1252 - `.vc2`/`.sc2`, dar si `.prg` (ex. `programe\ocautare.prg`,
|
||||||
(tool care nu scrie cp1252 nativ corupe TOATE diacriticele din fisier);
|
unde `s`-urile cu virgula din `masina`/`si contul`/`transa` sunt octetul `0xBA`) ->
|
||||||
|
`conventie_encoding_cp1252.md`. Orice write cu un tool care nu scrie cp1252 nativ (Edit/Write)
|
||||||
|
corupe caracterele >= 0x80 din TOT fisierul (`0xBA` -> `EF BF BD`), chiar daca schimbi o singura
|
||||||
|
linie, si o face din nou la FIECARE scriere. Deci: editezi tot ce ai de editat, si abia DUPA ultima
|
||||||
|
scriere verifici byte-level si repari o singura data; daca mai editezi dupa reparare, se strica iar.
|
||||||
|
Verificare: `perl -ne 'print "$.\n" if /[\x80-\xFF]/' <fisier>`; reparare (aici pentru `0xBA`):
|
||||||
|
`perl -e 'binmode(STDIN);binmode(STDOUT);local $/;$_=<STDIN>;s/\xEF\xBF\xBD/\xBA/g;print' < f > f.tmp`.
|
||||||
|
ATENTIE: `EF BF BD` nu spune ce caracter s-a pierdut - toate diacriticele devin la fel. Ia octetul
|
||||||
|
corect per pozitie din `svn cat <fisier>` (SVN are versiunea necorupta) si abia apoi inlocuieste;
|
||||||
|
o inlocuire oarba cu `0xBA` strica `a`/`t` cu caciula (`0xE3`, `0xFE`) din alte fisiere;
|
||||||
- adaugi/rearanjezi controale pe formulare sau coloane in grid -> `conventie_ux_formulare.md`;
|
- adaugi/rearanjezi controale pe formulare sau coloane in grid -> `conventie_ux_formulare.md`;
|
||||||
- scrii cod cu `GO` pe un `Recno()` capturat sau primit ca parametru -> `conventie_go_recno.md`;
|
- scrii cod cu `GO` pe un `Recno()` capturat sau primit ca parametru -> `conventie_go_recno.md`;
|
||||||
- `ALTER TABLE` pe cursorul intors de `goExecutor.oExecute()` -> `conventie_goexecutor_alter_table.md`;
|
- `ALTER TABLE` pe cursorul intors de `goExecutor.oExecute()` -> `conventie_goexecutor_alter_table.md`;
|
||||||
|
|||||||
@@ -39,19 +39,27 @@
|
|||||||
*!* marius.mutu
|
*!* marius.mutu
|
||||||
*!* caut_client_contract_activ - nu se iau contracte active de pe clienti inactivi
|
*!* caut_client_contract_activ - nu se iau contracte active de pe clienti inactivi
|
||||||
|
|
||||||
*!* 26.07.2026
|
*!* 27.07.2026
|
||||||
*!* marius.mutu
|
*!* marius.mutu
|
||||||
*!* verificare ANAF la alegerea partenerului: starea la data documentului si codul fiscal invalid pe randul curent
|
*!* verificare ANAF la alegerea partenerului: banda de stare sub gridul de cautare arata starea la data
|
||||||
*!* din formularul de cautare, detalii si alegerea variantei corecte cu F4, optiunea RC_ANAF_VERIF_SELECTIE
|
*!* documentului, codul fiscal invalid, inexistent la ANAF sau nenumeric pe randul curent, imediat ce apar
|
||||||
|
*!* rezultatele cautarii si la fiecare schimbare de rand; F4 deschide detaliile, iar alegerea altei variante
|
||||||
|
*!* de partener se propune doar cand codul difera de ANAF; optiunea RC_ANAF_VERIF_SELECTIE; cand serviciul
|
||||||
|
*!* ANAF nu raspunde, verificarile se opresc pe 10 minute si banda arata ca au fost sarite; la deschiderea
|
||||||
|
*!* formularului, daca starea serviciului nu e cunoscuta, pleaca o sonda asincrona care stabileste
|
||||||
|
*!* disponibilitatea fara sa blocheze interfata, iar randul curent asteapta rezultatul ei
|
||||||
|
|
||||||
*!* #DEFINE CRLF CHR(13) + CHR(10)
|
*!* #DEFINE CRLF CHR(13) + CHR(10)
|
||||||
#INCLUDE COMUN\ROA.H
|
#INCLUDE COMUN\ROA.H
|
||||||
|
|
||||||
Procedure ANAF_StarePartener
|
Procedure ANAF_StarePartener
|
||||||
Lparameters tcCodFiscal, tdData
|
Lparameters tcCodFiscal, tdData, tlDoarCache, tlNecesitaApel, tlNegasit, tcClasaEsec
|
||||||
|
|
||||||
Local lcCodFiscal, lcCodTara, lcCui, loVerificareCod, loRezANAF, lcCheieCache, lnI, llValid, loOut, ldData
|
Local lcCodFiscal, lcCui, loRezANAF, lcCheieCache, lnI, llValid, loOut, ldData, llNegasit, lcStareServiciu
|
||||||
|
|
||||||
|
tlNecesitaApel = .F.
|
||||||
|
tlNegasit = .F.
|
||||||
|
tcClasaEsec = ''
|
||||||
*** guard mediu partajat - ocautare.prg e inclus si de alte produse ROA fara validare.prg/goLog incarcate
|
*** guard mediu partajat - ocautare.prg e inclus si de alte produse ROA fara validare.prg/goLog incarcate
|
||||||
If !('VALIDARE' $ Upper(Set('Procedure'))) Or Type('goLog') <> 'O'
|
If !('VALIDARE' $ Upper(Set('Procedure'))) Or Type('goLog') <> 'O'
|
||||||
Return .Null.
|
Return .Null.
|
||||||
@@ -60,13 +68,7 @@ Procedure ANAF_StarePartener
|
|||||||
If Empty(m.lcCodFiscal)
|
If Empty(m.lcCodFiscal)
|
||||||
Return .Null.
|
Return .Null.
|
||||||
Endif
|
Endif
|
||||||
*** excludere parteneri externi (COD_TARA <> RO)
|
*** normalizare + excludere persoane fizice (CNP 13 cifre) / semnalizare coduri nenumerice dupa eliminarea RO
|
||||||
loVerificareCod = Createobject("VerificareCod")
|
|
||||||
lcCodTara = loVerificareCod.GetCodTara(m.lcCodFiscal)
|
|
||||||
If m.lcCodTara <> 'RO'
|
|
||||||
Return .Null.
|
|
||||||
Endif
|
|
||||||
*** normalizare + excludere persoane fizice (CNP 13 cifre) / coduri nenumerice dupa eliminarea RO
|
|
||||||
lcCui = NormalizeazaCUI(m.lcCodFiscal)
|
lcCui = NormalizeazaCUI(m.lcCodFiscal)
|
||||||
llValid = !Empty(m.lcCui)
|
llValid = !Empty(m.lcCui)
|
||||||
If m.llValid
|
If m.llValid
|
||||||
@@ -77,7 +79,11 @@ Procedure ANAF_StarePartener
|
|||||||
Endif
|
Endif
|
||||||
Endfor
|
Endfor
|
||||||
Endif
|
Endif
|
||||||
If !m.llValid Or Len(m.lcCui) = 13
|
If m.llValid And Len(m.lcCui) = 13
|
||||||
|
Return .Null.
|
||||||
|
Endif
|
||||||
|
If !m.llValid
|
||||||
|
tcClasaEsec = 'COD_NENUMERIC'
|
||||||
Return .Null.
|
Return .Null.
|
||||||
Endif
|
Endif
|
||||||
ldData = ANAF_CaData(m.tdData)
|
ldData = ANAF_CaData(m.tdData)
|
||||||
@@ -94,13 +100,38 @@ Procedure ANAF_StarePartener
|
|||||||
Endif
|
Endif
|
||||||
lcCheieCache = 'C' + m.lcCui + '_' + Dtos(m.ldData)
|
lcCheieCache = 'C' + m.lcCui + '_' + Dtos(m.ldData)
|
||||||
If goCacheANAF_Sesiune.GetKey(m.lcCheieCache) = 0
|
If goCacheANAF_Sesiune.GetKey(m.lcCheieCache) = 0
|
||||||
loRezANAF = ANAF_VerificaCuiSingle(m.lcCui, m.ldData)
|
lcStareServiciu = ANAF_StareServiciu()
|
||||||
goCacheANAF_Sesiune.Add(Iif(Vartype(m.loRezANAF) = 'O', m.loRezANAF, .F.), m.lcCheieCache)
|
Do Case
|
||||||
|
Case m.lcStareServiciu == 'CAZUT'
|
||||||
|
tlNecesitaApel = .F.
|
||||||
|
tcClasaEsec = 'FARA_RASPUNS'
|
||||||
|
Return .Null.
|
||||||
|
Case m.lcStareServiciu == 'SE_TESTEAZA'
|
||||||
|
tlNecesitaApel = .T.
|
||||||
|
tcClasaEsec = 'SE_TESTEAZA'
|
||||||
|
Return .Null.
|
||||||
|
Endcase
|
||||||
|
tlNecesitaApel = .T.
|
||||||
|
If m.tlDoarCache
|
||||||
|
Return .Null.
|
||||||
|
Endif
|
||||||
|
llNegasit = .F.
|
||||||
|
loRezANAF = ANAF_VerificaCuiSingle(m.lcCui, m.ldData, @llNegasit, @tcClasaEsec)
|
||||||
|
Do Case
|
||||||
|
Case m.tcClasaEsec == 'FARA_RASPUNS'
|
||||||
|
ANAF_SeteazaStareServiciu('CAZUT', 'CUI=' + m.lcCui)
|
||||||
|
Case m.tcClasaEsec == ''
|
||||||
|
ANAF_SeteazaStareServiciu('VIU', 'CUI=' + m.lcCui)
|
||||||
|
Endcase
|
||||||
|
If Vartype(m.loRezANAF) = 'O'
|
||||||
|
goCacheANAF_Sesiune.Add(m.loRezANAF, m.lcCheieCache)
|
||||||
|
Endif
|
||||||
Else
|
Else
|
||||||
loRezANAF = goCacheANAF_Sesiune.Item(m.lcCheieCache)
|
loRezANAF = goCacheANAF_Sesiune.Item(m.lcCheieCache)
|
||||||
Endif
|
Endif
|
||||||
If Vartype(m.loRezANAF) <> 'O'
|
If Vartype(m.loRezANAF) <> 'O'
|
||||||
Return .Null. && fara raspuns/CUI negasit -> degradare tacuta
|
tlNegasit = m.llNegasit
|
||||||
|
Return .Null.
|
||||||
Endif
|
Endif
|
||||||
*** verdict
|
*** verdict
|
||||||
loOut = Createobject("Empty")
|
loOut = Createobject("Empty")
|
||||||
@@ -114,6 +145,66 @@ Procedure ANAF_StarePartener
|
|||||||
Return loOut
|
Return loOut
|
||||||
Endproc && ANAF_StarePartener
|
Endproc && ANAF_StarePartener
|
||||||
|
|
||||||
|
Procedure ANAF_StareServiciu
|
||||||
|
If Type('gcANAF_StareServiciu') = 'U'
|
||||||
|
Public gcANAF_StareServiciu, gtANAF_StareServiciuMoment, gnANAF_StareServiciuStamp
|
||||||
|
gcANAF_StareServiciu = 'NECUNOSCUT'
|
||||||
|
gtANAF_StareServiciuMoment = Datetime()
|
||||||
|
gnANAF_StareServiciuStamp = 0
|
||||||
|
Endif
|
||||||
|
If gcANAF_StareServiciu == 'CAZUT' And (Datetime() - gtANAF_StareServiciuMoment) >= 600
|
||||||
|
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'expirare CAZUT dupa 10 minute')
|
||||||
|
Endif
|
||||||
|
Return gcANAF_StareServiciu
|
||||||
|
Endproc && ANAF_StareServiciu
|
||||||
|
|
||||||
|
Procedure ANAF_SeteazaStareServiciu
|
||||||
|
Lparameters tcStare, tcMotiv
|
||||||
|
If Type('gcANAF_StareServiciu') = 'U'
|
||||||
|
ANAF_StareServiciu()
|
||||||
|
Endif
|
||||||
|
If gcANAF_StareServiciu == m.tcStare
|
||||||
|
Return
|
||||||
|
Endif
|
||||||
|
If Type('goLog') = 'O'
|
||||||
|
goLog.Log('ANAF stare serviciu: ' + gcANAF_StareServiciu + ' -> ' + m.tcStare + ' (' + Alltrim(Nvl(m.tcMotiv, '')) + ')', 'anaf_verif_cautare')
|
||||||
|
Endif
|
||||||
|
gcANAF_StareServiciu = m.tcStare
|
||||||
|
gtANAF_StareServiciuMoment = Datetime()
|
||||||
|
gnANAF_StareServiciuStamp = gnANAF_StareServiciuStamp + 1
|
||||||
|
Endproc && ANAF_SeteazaStareServiciu
|
||||||
|
|
||||||
|
*** interogheaza sonda de disponibilitate (validare.prg) din timerul existent; termen de viata 10 secunde,
|
||||||
|
*** guard de reintrare (timerele VFP pot trage in timpul pomparii de mesaje dintr-un AMESSAGEBOX)
|
||||||
|
Procedure ANAF_SondaVerifica
|
||||||
|
Local llReusit
|
||||||
|
If ANAF_StareServiciu() <> 'SE_TESTEAZA'
|
||||||
|
Return
|
||||||
|
Endif
|
||||||
|
If Type('glANAF_SondaInterogareInCurs') = 'U'
|
||||||
|
Public glANAF_SondaInterogareInCurs
|
||||||
|
glANAF_SondaInterogareInCurs = .F.
|
||||||
|
Endif
|
||||||
|
If glANAF_SondaInterogareInCurs
|
||||||
|
Return
|
||||||
|
Endif
|
||||||
|
glANAF_SondaInterogareInCurs = .T.
|
||||||
|
Try
|
||||||
|
If (Datetime() - gtANAF_StareServiciuMoment) >= 10
|
||||||
|
ANAF_SondaOpreste()
|
||||||
|
ANAF_SeteazaStareServiciu('CAZUT', 'sonda expirata dupa 10 secunde')
|
||||||
|
Else
|
||||||
|
If ANAF_SondaAuSositRaspunsul()
|
||||||
|
llReusit = ANAF_SondaAReusit()
|
||||||
|
ANAF_SondaOpreste()
|
||||||
|
ANAF_SeteazaStareServiciu(Iif(m.llReusit, 'VIU', 'CAZUT'), 'sonda de disponibilitate')
|
||||||
|
Endif
|
||||||
|
Endif
|
||||||
|
Finally
|
||||||
|
glANAF_SondaInterogareInCurs = .F.
|
||||||
|
Endtry
|
||||||
|
Endproc && ANAF_SondaVerifica
|
||||||
|
|
||||||
Procedure ANAF_ValidareCod
|
Procedure ANAF_ValidareCod
|
||||||
Lparameters tcCodFiscal, tnTipPersoana
|
Lparameters tcCodFiscal, tnTipPersoana
|
||||||
|
|
||||||
@@ -126,9 +217,6 @@ Procedure ANAF_ValidareCod
|
|||||||
Return ''
|
Return ''
|
||||||
Endif
|
Endif
|
||||||
loVerificareCod = Createobject("VerificareCod")
|
loVerificareCod = Createobject("VerificareCod")
|
||||||
If loVerificareCod.GetCodTara(m.lcCodFiscal) <> 'RO'
|
|
||||||
Return ''
|
|
||||||
Endif
|
|
||||||
lcCui = NormalizeazaCUI(m.lcCodFiscal)
|
lcCui = NormalizeazaCUI(m.lcCodFiscal)
|
||||||
lnTipPersoana = Nvl(m.tnTipPersoana, 0)
|
lnTipPersoana = Nvl(m.tnTipPersoana, 0)
|
||||||
llCnp = Iif(m.lnTipPersoana = 2, .T., Iif(m.lnTipPersoana = 1, .F., Len(m.lcCui) = 13))
|
llCnp = Iif(m.lnTipPersoana = 2, .T., Iif(m.lnTipPersoana = 1, .F., Len(m.lcCui) = 13))
|
||||||
@@ -314,8 +402,9 @@ DEFINE CLASS anaf_timer AS Timer
|
|||||||
|
|
||||||
PROCEDURE Timer
|
PROCEDURE Timer
|
||||||
This.Enabled = .F.
|
This.Enabled = .F.
|
||||||
|
ANAF_SondaVerifica()
|
||||||
If Vartype(This.oOwner) = 'O'
|
If Vartype(This.oOwner) = 'O'
|
||||||
This.oOwner.VerificaRand(.F.)
|
This.oOwner.EvalueazaRand(.T.)
|
||||||
Endif
|
Endif
|
||||||
ENDPROC
|
ENDPROC
|
||||||
ENDDEFINE
|
ENDDEFINE
|
||||||
@@ -335,7 +424,11 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
|||||||
dDataDoc = {}
|
dDataDoc = {}
|
||||||
oCandidati = .Null.
|
oCandidati = .Null.
|
||||||
nNivel = 1
|
nNivel = 1
|
||||||
lDecis = .F. && 27.07.2026 claude - decizia a fost deja luata in Detalii
|
lNegasit = .F.
|
||||||
|
lDecis = .F.
|
||||||
|
lVerificareInCurs = .F.
|
||||||
|
nStareServiciuStamp = 0
|
||||||
|
cClasaEsec = ''
|
||||||
|
|
||||||
PROCEDURE Activeaza
|
PROCEDURE Activeaza
|
||||||
Lparameters toForm
|
Lparameters toForm
|
||||||
@@ -368,14 +461,14 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
|||||||
This.oForm = toForm
|
This.oForm = toForm
|
||||||
This.oTimer = Createobject('anaf_timer')
|
This.oTimer = Createobject('anaf_timer')
|
||||||
This.oTimer.oOwner = This
|
This.oTimer.oOwner = This
|
||||||
*!* 27.07.2026 claude - banda proprie sub grid, inalta cat doua linii de label
|
|
||||||
If Type('toForm._GRID1') = 'O' And Bitand(toForm._GRID1.Anchor, 8) = 8
|
If Type('toForm._GRID1') = 'O' And Bitand(toForm._GRID1.Anchor, 8) = 8
|
||||||
toForm._GRID1.Anchor = toForm._GRID1.Anchor - 8 && inaltimea gridului o dau eu, in AjusteazaBanda
|
toForm._GRID1.Anchor = toForm._GRID1.Anchor - 8 && inaltimea gridului o dau eu, in AjusteazaBanda
|
||||||
Endif
|
Endif
|
||||||
toForm.Height = toForm.Height + 54
|
toForm.Height = toForm.Height + 54
|
||||||
With toForm.lb_anaf
|
With toForm.lb_anaf
|
||||||
.AutoSize = .F.
|
.AutoSize = .F.
|
||||||
.BackStyle = 0
|
.BackStyle = 1
|
||||||
|
.BackColor = Rgb(240, 240, 240)
|
||||||
.WordWrap = .T.
|
.WordWrap = .T.
|
||||||
.MousePointer = 15
|
.MousePointer = 15
|
||||||
.Left = 8
|
.Left = 8
|
||||||
@@ -389,8 +482,17 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
|||||||
Bindevent(toForm.lb_anaf, 'Click', This, 'Detalii')
|
Bindevent(toForm.lb_anaf, 'Click', This, 'Detalii')
|
||||||
Bindevent(toForm, 'Resize', This, 'AjusteazaBanda')
|
Bindevent(toForm, 'Resize', This, 'AjusteazaBanda')
|
||||||
Bindevent(toForm, 'Activate', This, 'AjusteazaBanda')
|
Bindevent(toForm, 'Activate', This, 'AjusteazaBanda')
|
||||||
|
If Pemstatus(toForm, 'do_cauta', 5)
|
||||||
|
Bindevent(toForm, 'do_cauta', This, 'DupaCautare', 1)
|
||||||
|
Endif
|
||||||
|
If ANAF_StareServiciu() == 'NECUNOSCUT'
|
||||||
|
If ANAF_SondaPorneste()
|
||||||
|
ANAF_SeteazaStareServiciu('SE_TESTEAZA', 'sonda pornita la deschidere formular')
|
||||||
|
Endif
|
||||||
|
Endif
|
||||||
This.AjusteazaBanda()
|
This.AjusteazaBanda()
|
||||||
Bindevent(toForm._GRID1, 'AfterRowColChange', This, 'DupaRand')
|
Bindevent(toForm._GRID1, 'AfterRowColChange', This, 'DupaRand')
|
||||||
|
This.AfiseazaPrompt()
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE AjusteazaBanda
|
PROCEDURE AjusteazaBanda
|
||||||
@@ -409,6 +511,11 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
|||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE Dezactiveaza
|
PROCEDURE Dezactiveaza
|
||||||
|
Local llSondaOprita
|
||||||
|
llSondaOprita = ANAF_SondaOpreste()
|
||||||
|
If m.llSondaOprita And ANAF_StareServiciu() == 'SE_TESTEAZA'
|
||||||
|
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'formular inchis cu sonda in aer')
|
||||||
|
Endif
|
||||||
If Vartype(This.oTimer) = 'O'
|
If Vartype(This.oTimer) = 'O'
|
||||||
This.oTimer.Enabled = .F.
|
This.oTimer.Enabled = .F.
|
||||||
This.oTimer.oOwner = .Null.
|
This.oTimer.oOwner = .Null.
|
||||||
@@ -418,6 +525,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
|||||||
Try
|
Try
|
||||||
Unbindevents(This.oForm, 'Resize', This, 'AjusteazaBanda')
|
Unbindevents(This.oForm, 'Resize', This, 'AjusteazaBanda')
|
||||||
Unbindevents(This.oForm, 'Activate', This, 'AjusteazaBanda')
|
Unbindevents(This.oForm, 'Activate', This, 'AjusteazaBanda')
|
||||||
|
Unbindevents(This.oForm, 'do_cauta', This, 'DupaCautare')
|
||||||
Catch
|
Catch
|
||||||
Endtry
|
Endtry
|
||||||
If Type('This.oForm.lb_anaf') = 'O'
|
If Type('This.oForm.lb_anaf') = 'O'
|
||||||
@@ -438,15 +546,21 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
|||||||
|
|
||||||
PROCEDURE DupaRand
|
PROCEDURE DupaRand
|
||||||
Lparameters nColIndex
|
Lparameters nColIndex
|
||||||
If Vartype(This.oTimer) = 'O'
|
This.EvalueazaRand(.F.)
|
||||||
This.oTimer.Enabled = .F.
|
ENDPROC
|
||||||
This.oTimer.Enabled = .T.
|
|
||||||
Endif
|
PROCEDURE DupaCautare
|
||||||
|
This.EvalueazaRand(.T.)
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE VerificaRand
|
PROCEDURE VerificaRand
|
||||||
Lparameters tlSincron
|
Lparameters tlSincron
|
||||||
Local lcCursor, lnId, lcCodFiscal, loStare, lnTipPersoana, lcCodInvalid
|
Return This.EvalueazaRand(.T.)
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE EvalueazaRand
|
||||||
|
Lparameters tlPermiteApel
|
||||||
|
Local lcCursor, lnId, lcCodFiscal, loStare, lnTipPersoana, lcCodInvalid, llNecesitaApel, llNegasit, lcClasaEsec
|
||||||
If Vartype(This.oForm) <> 'O'
|
If Vartype(This.oForm) <> 'O'
|
||||||
Return .F.
|
Return .F.
|
||||||
Endif
|
Endif
|
||||||
@@ -455,18 +569,24 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
|||||||
Endif
|
Endif
|
||||||
lcCursor = This.oForm.crs_cursor
|
lcCursor = This.oForm.crs_cursor
|
||||||
If !Used(m.lcCursor) Or Reccount(m.lcCursor) = 0
|
If !Used(m.lcCursor) Or Reccount(m.lcCursor) = 0
|
||||||
This.SeteazaLabel('', .F.)
|
|
||||||
This.nIdPart = 0
|
This.nIdPart = 0
|
||||||
This.oStare = .Null.
|
This.oStare = .Null.
|
||||||
This.cCui = ''
|
This.cCui = ''
|
||||||
|
This.lNegasit = .F.
|
||||||
|
This.cClasaEsec = ''
|
||||||
|
This.AfiseazaPrompt()
|
||||||
Return .F.
|
Return .F.
|
||||||
Endif
|
Endif
|
||||||
lnId = Nvl(Evaluate(m.lcCursor + '.id_part'), 0)
|
lnId = Nvl(Evaluate(m.lcCursor + '.id_part'), 0)
|
||||||
lcCodFiscal = Alltrim(Nvl(Evaluate(m.lcCursor + '.cod_fiscal'), ''))
|
lcCodFiscal = Alltrim(Nvl(Evaluate(m.lcCursor + '.cod_fiscal'), ''))
|
||||||
If m.lnId = 0
|
If m.lnId = 0
|
||||||
This.SeteazaLabel('', .F.)
|
This.AfiseazaPrompt()
|
||||||
Return .F.
|
Return .F.
|
||||||
Endif
|
Endif
|
||||||
|
If Type('gnANAF_StareServiciuStamp') = 'N' And gnANAF_StareServiciuStamp <> This.nStareServiciuStamp
|
||||||
|
This.nStareServiciuStamp = gnANAF_StareServiciuStamp
|
||||||
|
This.nIdPart = 0
|
||||||
|
Endif
|
||||||
If m.lnId = This.nIdPart
|
If m.lnId = This.nIdPart
|
||||||
Return !Isnull(This.oStare)
|
Return !Isnull(This.oStare)
|
||||||
Endif
|
Endif
|
||||||
@@ -476,18 +596,57 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
|||||||
This.nIdPart = m.lnId
|
This.nIdPart = m.lnId
|
||||||
This.oStare = .Null.
|
This.oStare = .Null.
|
||||||
This.cCui = ''
|
This.cCui = ''
|
||||||
|
This.lNegasit = .F.
|
||||||
|
This.cClasaEsec = ''
|
||||||
This.SeteazaLabel(m.lcCodInvalid + ' (F4 = detalii)', .T.)
|
This.SeteazaLabel(m.lcCodInvalid + ' (F4 = detalii)', .T.)
|
||||||
goLog.Log('Cod fiscal invalid: ' + m.lcCodInvalid + ' id_part=' + Transform(m.lnId), 'anaf_verif_cautare')
|
goLog.Log('Cod fiscal invalid: ' + m.lcCodInvalid + ' id_part=' + Transform(m.lnId), 'anaf_verif_cautare')
|
||||||
Return .F.
|
Return .F.
|
||||||
Endif
|
Endif
|
||||||
This.SeteazaLabel('Verificare ANAF...', .F.)
|
If This.lVerificareInCurs
|
||||||
loStare = ANAF_StarePartener(m.lcCodFiscal, This.dDataDoc)
|
Return .F.
|
||||||
|
Endif
|
||||||
|
llNecesitaApel = .F.
|
||||||
|
llNegasit = .F.
|
||||||
|
lcClasaEsec = ''
|
||||||
|
This.lVerificareInCurs = .T.
|
||||||
|
Try
|
||||||
|
loStare = ANAF_StarePartener(m.lcCodFiscal, This.dDataDoc, !m.tlPermiteApel, @llNecesitaApel, @llNegasit, @lcClasaEsec)
|
||||||
|
Finally
|
||||||
|
This.lVerificareInCurs = .F.
|
||||||
|
Endtry
|
||||||
|
If m.lcClasaEsec == 'SE_TESTEAZA'
|
||||||
|
This.SeteazaLabel('ANAF: se verifica ' + Alltrim(m.lcCodFiscal) + '...', .F., .T.)
|
||||||
|
If Vartype(This.oTimer) = 'O'
|
||||||
|
This.oTimer.Enabled = .T.
|
||||||
|
Endif
|
||||||
|
Return .F.
|
||||||
|
Endif
|
||||||
|
If !m.tlPermiteApel And m.llNecesitaApel
|
||||||
|
This.SeteazaLabel('ANAF: se verifica ' + Alltrim(m.lcCodFiscal) + '...', .F., .T.)
|
||||||
|
If Vartype(This.oTimer) = 'O'
|
||||||
|
This.oTimer.Enabled = .T.
|
||||||
|
Endif
|
||||||
|
Return .F.
|
||||||
|
Endif
|
||||||
This.nIdPart = m.lnId
|
This.nIdPart = m.lnId
|
||||||
This.oStare = m.loStare
|
This.oStare = m.loStare
|
||||||
|
This.lNegasit = m.llNegasit
|
||||||
|
This.cClasaEsec = m.lcClasaEsec
|
||||||
This.cCui = Iif(Isnull(m.loStare), '', loStare.cCui)
|
This.cCui = Iif(Isnull(m.loStare), '', loStare.cCui)
|
||||||
Do Case
|
Do Case
|
||||||
|
Case Isnull(m.loStare) And m.llNegasit
|
||||||
|
This.SeteazaLabel('Cod fiscal inexistent la ANAF (' + Alltrim(m.lcCodFiscal) + ') (F4 = detalii)', .T.)
|
||||||
|
goLog.Log('Cod fiscal inexistent la ANAF: ' + Alltrim(m.lcCodFiscal) + ' id_part=' + Transform(m.lnId), 'anaf_verif_cautare')
|
||||||
|
Return .F.
|
||||||
|
Case Isnull(m.loStare) And Inlist(m.lcClasaEsec, 'FARA_RASPUNS', 'RASPUNS_NEINTELES')
|
||||||
|
This.SeteazaLabel('ANAF nu a raspuns - verificare sarita', .F., .T.)
|
||||||
|
Return .F.
|
||||||
|
Case Isnull(m.loStare) And m.lcClasaEsec == 'COD_NENUMERIC'
|
||||||
|
This.SeteazaLabel('Cod fiscal nenumeric - nu se poate verifica la ANAF', .F., .T.)
|
||||||
|
goLog.Log('Cod fiscal nenumeric: ' + Alltrim(m.lcCodFiscal) + ' id_part=' + Transform(m.lnId), 'anaf_verif_cautare')
|
||||||
|
Return .F.
|
||||||
Case Isnull(m.loStare)
|
Case Isnull(m.loStare)
|
||||||
This.SeteazaLabel('', .F.)
|
This.AfiseazaPrompt()
|
||||||
Return .F.
|
Return .F.
|
||||||
Case !loStare.lDiscordanta
|
Case !loStare.lDiscordanta
|
||||||
This.SeteazaLabel(This.TextAnaf(m.loStare, .F., 24) + ' (F4 = detalii)', .F.)
|
This.SeteazaLabel(This.TextAnaf(m.loStare, .F., 24) + ' (F4 = detalii)', .F.)
|
||||||
@@ -499,14 +658,18 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
|||||||
Return .T.
|
Return .T.
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE AfiseazaPrompt
|
||||||
|
This.SeteazaLabel('Verificare ANAF la alegerea partenerului (F4 = detalii)', .F., .T.)
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE SeteazaLabel
|
PROCEDURE SeteazaLabel
|
||||||
Lparameters tcText, tlAvertisment
|
Lparameters tcText, tlAvertisment, tlNeutru
|
||||||
If Vartype(This.oForm) <> 'O'
|
If Vartype(This.oForm) <> 'O'
|
||||||
Return
|
Return
|
||||||
Endif
|
Endif
|
||||||
With This.oForm.lb_anaf
|
With This.oForm.lb_anaf
|
||||||
.Caption = m.tcText
|
.Caption = Iif(Empty(m.tcText), '', ' ' + Chr(149) + ' ' + m.tcText)
|
||||||
.ForeColor = Iif(m.tlAvertisment, Rgb(192, 0, 0), Rgb(0, 128, 0))
|
.ForeColor = Iif(m.tlAvertisment, Rgb(192, 0, 0), Iif(m.tlNeutru, Rgb(112, 112, 112), Rgb(0, 128, 0)))
|
||||||
.FontBold = m.tlAvertisment
|
.FontBold = m.tlAvertisment
|
||||||
Endwith
|
Endwith
|
||||||
This.oForm.lb_anaf.Refresh()
|
This.oForm.lb_anaf.Refresh()
|
||||||
@@ -514,7 +677,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
|||||||
|
|
||||||
PROCEDURE TextStare
|
PROCEDURE TextStare
|
||||||
Lparameters toStare
|
Lparameters toStare
|
||||||
Return Iif(toStare.lPlatitorANAF, 'Platitor TVA', 'Neplatitor TVA') + Iif(toStare.lInactivANAF, ' (inactiv la ANAF)', '')
|
Return Iif(toStare.lPlatitorANAF, 'Platitor TVA', 'Neplatitor TVA') + Iif(toStare.lInactivANAF, ', Inactiv', '')
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE TextAnaf
|
PROCEDURE TextAnaf
|
||||||
@@ -634,7 +797,17 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
|||||||
lcCodAles = Alltrim(Nvl(Evaluate(m.lcCursor + '.cod_fiscal'), ''))
|
lcCodAles = Alltrim(Nvl(Evaluate(m.lcCursor + '.cod_fiscal'), ''))
|
||||||
|
|
||||||
If Isnull(This.oStare)
|
If Isnull(This.oStare)
|
||||||
Amessagebox(This.AntetDialog(m.lcDenAles, m.lcCodAles) + 'ANAF nu a raspuns - verificarea a fost sarita.', ;
|
Amessagebox(This.AntetDialog(m.lcDenAles, m.lcCodAles) + ;
|
||||||
|
Iif(This.lNegasit, 'Codul fiscal nu exista la ANAF.', ;
|
||||||
|
Iif(This.cClasaEsec == 'COD_NENUMERIC', 'Codul fiscal nu este numeric - nu se poate verifica la ANAF.', ;
|
||||||
|
'ANAF nu a raspuns - verificarea a fost sarita.')), ;
|
||||||
|
0 + 64, 'Verificare partener ANAF')
|
||||||
|
Return
|
||||||
|
Endif
|
||||||
|
|
||||||
|
If This.oStare.lAreRO = This.oStare.lPlatitorANAF
|
||||||
|
Amessagebox(This.AntetDialog(m.lcDenAles, m.lcCodAles) + ;
|
||||||
|
Iif(This.oStare.lInactivANAF, 'Nu exista alta varianta de partener de ales.', 'Codul fiscal corespunde.'), ;
|
||||||
0 + 64, 'Verificare partener ANAF')
|
0 + 64, 'Verificare partener ANAF')
|
||||||
Return
|
Return
|
||||||
Endif
|
Endif
|
||||||
@@ -694,7 +867,6 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
|||||||
Exit
|
Exit
|
||||||
Endcase
|
Endcase
|
||||||
Enddo
|
Enddo
|
||||||
*!* 27.07.2026 claude - dupa Da/Nu se inchide cautarea, ca sa revina in formular cu partenerul ales
|
|
||||||
If (m.lnRasp = 6 Or m.lnRasp = 7) And Pemstatus(This.oForm, 'do_termin', 5)
|
If (m.lnRasp = 6 Or m.lnRasp = 7) And Pemstatus(This.oForm, 'do_termin', 5)
|
||||||
This.oForm.do_termin()
|
This.oForm.do_termin()
|
||||||
Endif
|
Endif
|
||||||
@@ -725,6 +897,9 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
|||||||
Return .T.
|
Return .T.
|
||||||
Endif
|
Endif
|
||||||
|
|
||||||
|
If Inlist(ANAF_StareServiciu(), 'CAZUT', 'SE_TESTEAZA')
|
||||||
|
Return .T.
|
||||||
|
Endif
|
||||||
*** nivel 3: comportamentul de azi, neschimbat (verificare sincrona + confirmare)
|
*** nivel 3: comportamentul de azi, neschimbat (verificare sincrona + confirmare)
|
||||||
If !This.VerificaRand(.T.)
|
If !This.VerificaRand(.T.)
|
||||||
Return .T.
|
Return .T.
|
||||||
@@ -738,6 +913,15 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
|||||||
lcCodAles = Alltrim(Nvl(Evaluate(m.lcCursor + '.cod_fiscal'), ''))
|
lcCodAles = Alltrim(Nvl(Evaluate(m.lcCursor + '.cod_fiscal'), ''))
|
||||||
lcCodOk = Iif(This.oStare.lPlatitorANAF, 'RO', '') + This.cCui
|
lcCodOk = Iif(This.oStare.lPlatitorANAF, 'RO', '') + This.cCui
|
||||||
|
|
||||||
|
If This.oStare.lAreRO = This.oStare.lPlatitorANAF
|
||||||
|
lcMesaj = This.AntetDialog(m.lcDenAles, m.lcCodAles) + ;
|
||||||
|
'De acord = Pastreaza selectia' + Chr(13) + ;
|
||||||
|
'Abandon = Inapoi la cautare'
|
||||||
|
lnRasp = Amessagebox(m.lcMesaj, 1 + 48, 'Verificare ANAF')
|
||||||
|
goLog.Log('Decizie ANAF (inactiv la ANAF): rasp=' + Transform(m.lnRasp), 'anaf_verif_cautare')
|
||||||
|
Return (m.lnRasp = 1)
|
||||||
|
Endif
|
||||||
|
|
||||||
lnCandidati = 0
|
lnCandidati = 0
|
||||||
lnCandidat = 0
|
lnCandidat = 0
|
||||||
lcDenPereche = ''
|
lcDenPereche = ''
|
||||||
|
|||||||
@@ -59,6 +59,14 @@
|
|||||||
*!* marius.mutu
|
*!* marius.mutu
|
||||||
*!* NormalizeazaCUI + ANAF_VerificaCuiSingle (verificare la alegerea partenerului, la data documentului)
|
*!* NormalizeazaCUI + ANAF_VerificaCuiSingle (verificare la alegerea partenerului, la data documentului)
|
||||||
|
|
||||||
|
*!* 27.07.2026
|
||||||
|
*!* marius.mutu
|
||||||
|
*!* ANAF_VerificaCuiSingle: raspunsul ANAF se citeste si cand serviciul intoarce cod 404, iar codul e
|
||||||
|
*!* declarat inexistent doar cand raspunsul chiar contine codul cautat; apelurile web (single si lot)
|
||||||
|
*!* folosesc timeout-uri reale, iar formatul datei se restaureaza si daca interpretarea raspunsului esueaza;
|
||||||
|
*!* sonda asincrona de disponibilitate (ANAF_SondaPorneste/AuSositRaspunsul/AReusit/Opreste) verifica in
|
||||||
|
*!* fundal, la nevoie, daca serviciul ANAF a revenit, fara sa blocheze interfata
|
||||||
|
|
||||||
*!* http://ec.europa.eu/taxation_customs/vies/viesquer.do
|
*!* http://ec.europa.eu/taxation_customs/vies/viesquer.do
|
||||||
*!* http://localhost/contafinupdate/verificarecod.aspx/verificarecod/verificare/CIF/1879855/MFIN
|
*!* http://localhost/contafinupdate/verificarecod.aspx/verificarecod/verificare/CIF/1879855/MFIN
|
||||||
*!* http://localhost/contafinupdate/verificarecod.aspx/verificarecod/verificare/CNP/1810228134187
|
*!* http://localhost/contafinupdate/verificarecod.aspx/verificarecod/verificare/CNP/1810228134187
|
||||||
@@ -1576,19 +1584,23 @@ Function NormalizeazaCUI
|
|||||||
Endfunc && NormalizeazaCUI
|
Endfunc && NormalizeazaCUI
|
||||||
|
|
||||||
*************************************
|
*************************************
|
||||||
*** Wrapper single-CUI peste VerificareANAF: tdData = data documentului (lipsa -> data curenta), degradare tacuta (.NULL.)
|
*** Wrapper single-CUI peste VerificareANAF: tdData = data documentului (lipsa -> data curenta), degradare tacuta (.NULL.),
|
||||||
|
*** tlNegasit (prin referinta) = ANAF a raspuns ca nu exista codul, spre deosebire de lipsa raspunsului
|
||||||
*************************************
|
*************************************
|
||||||
Function ANAF_VerificaCuiSingle
|
Function ANAF_VerificaCuiSingle
|
||||||
Lparameters tcCui, tdData
|
Lparameters tcCui, tdData, tlNegasit, tcClasaEsec
|
||||||
|
|
||||||
Local lcCuiNormalizat, loHTTP, loEx As Exception, loResult, lcServer, lcSend, lcJsonString, lcDataFormatted, ldData
|
Local lcCuiNormalizat, loHTTP, loEx As Exception, loResult, lcJsonString, ldData
|
||||||
Local loVerificareANAF As "VerificareANAF", loCol As "empty", laCoduri[1], lcAliasTemp, lnReccountTemp, lnI, llValid
|
Local loVerificareANAF As "VerificareANAF", lcAliasTemp, lnI, llValid
|
||||||
|
Local llRaspunsPrimit, lnCuiCautat
|
||||||
|
|
||||||
If Type('gvANAF_EroareLogataSesiune') = 'U'
|
If Type('gvANAF_EroareLogataSesiune') = 'U'
|
||||||
Public gvANAF_EroareLogataSesiune
|
Public gvANAF_EroareLogataSesiune
|
||||||
gvANAF_EroareLogataSesiune = .F.
|
gvANAF_EroareLogataSesiune = .F.
|
||||||
Endif
|
Endif
|
||||||
|
|
||||||
|
tcClasaEsec = ''
|
||||||
|
tlNegasit = .F.
|
||||||
lcCuiNormalizat = NormalizeazaCUI(m.tcCui)
|
lcCuiNormalizat = NormalizeazaCUI(m.tcCui)
|
||||||
llValid = !Empty(m.lcCuiNormalizat)
|
llValid = !Empty(m.lcCuiNormalizat)
|
||||||
If m.llValid
|
If m.llValid
|
||||||
@@ -1605,54 +1617,23 @@ Function ANAF_VerificaCuiSingle
|
|||||||
|
|
||||||
loResult = .Null.
|
loResult = .Null.
|
||||||
lcAliasTemp = "crsANAFSingleTemp"
|
lcAliasTemp = "crsANAFSingleTemp"
|
||||||
|
llRaspunsPrimit = .F.
|
||||||
|
ldData = Iif(Vartype(m.tdData) = 'D' And !Empty(m.tdData), m.tdData, Date())
|
||||||
|
lnCuiCautat = Int(Val(m.lcCuiNormalizat))
|
||||||
|
|
||||||
Try
|
Try
|
||||||
loVerificareANAF = Createobject("VerificareANAF") && incarca nfjsonread/nfjsoncreate (Init)
|
loVerificareANAF = Createobject("VerificareANAF") && incarca nfjsonread/nfjsoncreate (Init)
|
||||||
|
|
||||||
Try
|
loHTTP = ANAF_CreeazaCerereANAF(m.lnCuiCautat, m.ldData, .F.)
|
||||||
loHTTP = Createobject('winHTTP.winHTTPrequest.5.1')
|
llRaspunsPrimit = .T.
|
||||||
If Pemstatus(m.loHTTP, 'SetTimeouts', 5)
|
lcJsonString = Alltrim(loHTTP.responseText)
|
||||||
loHTTP.SetTimeouts(3000, 3000, 5000, 5000) && rezolvare/conectare 3s, trimitere/primire 5s - de revizuit dupa masuratori (Tema)
|
|
||||||
Endif
|
|
||||||
Catch To loEx
|
|
||||||
loHTTP = Createobject('Microsoft.XMLHTTP')
|
|
||||||
Endtry
|
|
||||||
|
|
||||||
ldData = Iif(Vartype(m.tdData) = 'D' And !Empty(m.tdData), m.tdData, Date())
|
|
||||||
lcDataFormatted = Left(Dtos(m.ldData), 4) + "-" + Substr(Dtos(m.ldData), 5, 2) + "-" + Substr(Dtos(m.ldData), 7, 2)
|
|
||||||
|
|
||||||
loCol = Createobject("empty")
|
|
||||||
Addproperty(loCol, "cui", Int(Val(m.lcCuiNormalizat)))
|
|
||||||
Addproperty(loCol, "data", m.lcDataFormatted)
|
|
||||||
laCoduri[1] = loCol
|
|
||||||
lcSend = nfjsoncreate(@laCoduri)
|
|
||||||
|
|
||||||
lcServer = 'https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva'
|
|
||||||
|
|
||||||
lcJsonString = ''
|
|
||||||
loHTTP.Open('POST', lcServer, .F.)
|
|
||||||
loHTTP.setRequestHeader("Content-Type", "application/json;")
|
|
||||||
loHTTP.Send(lcSend)
|
|
||||||
If loHTTP.Status = 200
|
|
||||||
lcJsonString = Alltrim(loHTTP.responseText)
|
|
||||||
Endif
|
|
||||||
|
|
||||||
If !Empty(m.lcJsonString) And Left(m.lcJsonString, 1) = '{'
|
If !Empty(m.lcJsonString) And Left(m.lcJsonString, 1) = '{'
|
||||||
Use In (Select(m.lcAliasTemp))
|
Use In (Select(m.lcAliasTemp))
|
||||||
loVerificareANAF.ParseJsonANAFv8(nfjsonread(m.lcJsonString), m.lcAliasTemp)
|
loVerificareANAF.ParseJsonANAFv8(nfjsonread(m.lcJsonString), m.lcAliasTemp)
|
||||||
If Used(m.lcAliasTemp)
|
loResult = ANAF_VerdictDinCursor(m.lcAliasTemp, m.lnCuiCautat, @tlNegasit, @tcClasaEsec)
|
||||||
Select (m.lcAliasTemp)
|
Else
|
||||||
lnReccountTemp = Reccount()
|
tcClasaEsec = 'RASPUNS_NEINTELES'
|
||||||
If m.lnReccountTemp = 1 And !Empty(denumire)
|
|
||||||
loResult = Createobject("empty")
|
|
||||||
Addproperty(loResult, "cui", cui)
|
|
||||||
Addproperty(loResult, "scpTVA", Nvl(scpTVA, .F.))
|
|
||||||
Addproperty(loResult, "statusInactivi", Nvl(statusInactivi, .F.))
|
|
||||||
Addproperty(loResult, "denumire", Nvl(denumire, ""))
|
|
||||||
Addproperty(loResult, "mesaj", Nvl(mesaj, ""))
|
|
||||||
Endif
|
|
||||||
Use In (Select(m.lcAliasTemp))
|
|
||||||
Endif
|
|
||||||
Endif
|
Endif
|
||||||
Catch To loEx
|
Catch To loEx
|
||||||
If !gvANAF_EroareLogataSesiune
|
If !gvANAF_EroareLogataSesiune
|
||||||
@@ -1662,11 +1643,157 @@ Function ANAF_VerificaCuiSingle
|
|||||||
gvANAF_EroareLogataSesiune = .T.
|
gvANAF_EroareLogataSesiune = .T.
|
||||||
Endif
|
Endif
|
||||||
loResult = .Null.
|
loResult = .Null.
|
||||||
|
tlNegasit = .F.
|
||||||
|
tcClasaEsec = Iif(m.llRaspunsPrimit, 'RASPUNS_NEINTELES', 'FARA_RASPUNS')
|
||||||
Endtry
|
Endtry
|
||||||
|
|
||||||
Return m.loResult
|
Return m.loResult
|
||||||
Endfunc && ANAF_VerificaCuiSingle
|
Endfunc && ANAF_VerificaCuiSingle
|
||||||
|
|
||||||
|
*************************************
|
||||||
|
*** Alege intre obiect de rezultat / tlNegasit (exact 1 rand, denumire goala, cui = CUI-ul cautat) /
|
||||||
|
*** tcClasaEsec = 'RASPUNS_NEINTELES', pe baza cursorului lasat de ParseJsonANAFv8; ambele prin referinta
|
||||||
|
*************************************
|
||||||
|
Function ANAF_VerdictDinCursor
|
||||||
|
Lparameters tcAlias, tnCuiCautat, tlNegasit, tcClasaEsec
|
||||||
|
|
||||||
|
Local loResult, lnReccountTemp
|
||||||
|
|
||||||
|
loResult = .Null.
|
||||||
|
tlNegasit = .F.
|
||||||
|
tcClasaEsec = ''
|
||||||
|
|
||||||
|
If Used(m.tcAlias)
|
||||||
|
Select (m.tcAlias)
|
||||||
|
lnReccountTemp = Reccount()
|
||||||
|
If m.lnReccountTemp = 1 And !Empty(denumire)
|
||||||
|
loResult = Createobject("empty")
|
||||||
|
Addproperty(loResult, "cui", cui)
|
||||||
|
Addproperty(loResult, "scpTVA", Nvl(scpTVA, .F.))
|
||||||
|
Addproperty(loResult, "statusInactivi", Nvl(statusInactivi, .F.))
|
||||||
|
Addproperty(loResult, "denumire", Nvl(denumire, ""))
|
||||||
|
Addproperty(loResult, "mesaj", Nvl(mesaj, ""))
|
||||||
|
Else
|
||||||
|
If m.lnReccountTemp = 1 And Empty(denumire) And Nvl(cui, 0) = m.tnCuiCautat
|
||||||
|
tlNegasit = .T.
|
||||||
|
Else
|
||||||
|
tcClasaEsec = 'RASPUNS_NEINTELES'
|
||||||
|
Endif
|
||||||
|
Endif
|
||||||
|
Use In (Select(m.tcAlias))
|
||||||
|
Else
|
||||||
|
tcClasaEsec = 'RASPUNS_NEINTELES'
|
||||||
|
Endif
|
||||||
|
|
||||||
|
Return m.loResult
|
||||||
|
Endfunc && ANAF_VerdictDinCursor
|
||||||
|
|
||||||
|
*************************************
|
||||||
|
*** Construieste, deschide (sincron sau asincron) si trimite o cerere PlatitorTvaRest v9 pentru un singur CUI;
|
||||||
|
*** folosita atat de wrapper-ul de verificare cat si de sonda de disponibilitate
|
||||||
|
*************************************
|
||||||
|
Function ANAF_CreeazaCerereANAF
|
||||||
|
Lparameters tnCui, tdData, tlAsync
|
||||||
|
|
||||||
|
Local loHTTP, loEx As Exception, loCol As "empty", laCoduri[1], lcSend, lcServer, ldData, lcDataFormatted
|
||||||
|
|
||||||
|
Try
|
||||||
|
loHTTP = Createobject('winHTTP.winHTTPrequest.5.1')
|
||||||
|
Try
|
||||||
|
loHTTP.SetTimeouts(2000, 2000, 3000, 3000) && rezolvare/conectare 2s, trimitere/primire 3s
|
||||||
|
Catch To loEx
|
||||||
|
Endtry
|
||||||
|
Catch To loEx
|
||||||
|
loHTTP = .Null.
|
||||||
|
Endtry
|
||||||
|
|
||||||
|
ldData = Iif(Vartype(m.tdData) = 'D' And !Empty(m.tdData), m.tdData, Date())
|
||||||
|
lcDataFormatted = Left(Dtos(m.ldData), 4) + "-" + Substr(Dtos(m.ldData), 5, 2) + "-" + Substr(Dtos(m.ldData), 7, 2)
|
||||||
|
|
||||||
|
loCol = Createobject("empty")
|
||||||
|
Addproperty(loCol, "cui", Int(Val(Transform(m.tnCui))))
|
||||||
|
Addproperty(loCol, "data", m.lcDataFormatted)
|
||||||
|
laCoduri[1] = loCol
|
||||||
|
lcSend = nfjsoncreate(@laCoduri)
|
||||||
|
|
||||||
|
lcServer = 'https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva'
|
||||||
|
|
||||||
|
loHTTP.Open('POST', lcServer, m.tlAsync)
|
||||||
|
loHTTP.setRequestHeader("Content-Type", "application/json;")
|
||||||
|
loHTTP.Send(lcSend)
|
||||||
|
|
||||||
|
Return m.loHTTP
|
||||||
|
Endfunc && ANAF_CreeazaCerereANAF
|
||||||
|
|
||||||
|
*************************************
|
||||||
|
*** Sonda asincrona de disponibilitate ANAF: porneste o cerere pe un CUI constant (1879855, ROMFAST SRL,
|
||||||
|
*** deja folosit ca CUI de test in acest fisier), fara sa scrie in cache si fara sa produca vreun verdict de partener
|
||||||
|
*************************************
|
||||||
|
Function ANAF_SondaPorneste
|
||||||
|
Local loEx As Exception
|
||||||
|
|
||||||
|
ANAF_SondaOpreste()
|
||||||
|
If Type('goANAF_SondaHTTP') = 'U'
|
||||||
|
Public goANAF_SondaHTTP, glANAF_SondaReusita
|
||||||
|
Endif
|
||||||
|
goANAF_SondaHTTP = .Null.
|
||||||
|
glANAF_SondaReusita = .F.
|
||||||
|
Try
|
||||||
|
goANAF_SondaHTTP = ANAF_CreeazaCerereANAF(1879855, Date(), .T.)
|
||||||
|
Catch To loEx
|
||||||
|
goANAF_SondaHTTP = .Null.
|
||||||
|
Endtry
|
||||||
|
|
||||||
|
Return (Vartype(goANAF_SondaHTTP) = 'O')
|
||||||
|
Endfunc && ANAF_SondaPorneste
|
||||||
|
|
||||||
|
*************************************
|
||||||
|
*** .T. daca sonda in curs si-a primit raspunsul (indiferent de rezultat) sau nu exista nicio sonda activa
|
||||||
|
*************************************
|
||||||
|
Function ANAF_SondaAuSositRaspunsul
|
||||||
|
Local loEx As Exception, llSosit
|
||||||
|
|
||||||
|
If Vartype(goANAF_SondaHTTP) <> 'O'
|
||||||
|
Return .T.
|
||||||
|
Endif
|
||||||
|
llSosit = .F.
|
||||||
|
Try
|
||||||
|
llSosit = goANAF_SondaHTTP.WaitForResponse(0)
|
||||||
|
Catch To loEx
|
||||||
|
glANAF_SondaReusita = .F.
|
||||||
|
Return .T.
|
||||||
|
Endtry
|
||||||
|
If m.llSosit
|
||||||
|
glANAF_SondaReusita = .T.
|
||||||
|
Endif
|
||||||
|
Return m.llSosit
|
||||||
|
Endfunc && ANAF_SondaAuSositRaspunsul
|
||||||
|
|
||||||
|
*************************************
|
||||||
|
*** Verdictul sondei, valabil dupa ce ANAF_SondaAuSositRaspunsul() a intors .T.
|
||||||
|
*************************************
|
||||||
|
Function ANAF_SondaAReusit
|
||||||
|
Return (Vartype(glANAF_SondaReusita) = 'L' And glANAF_SondaReusita)
|
||||||
|
Endfunc && ANAF_SondaAReusit
|
||||||
|
|
||||||
|
*************************************
|
||||||
|
*** Abandoneaza si elibereaza sonda in curs, daca exista; intoarce .T. daca chiar era o sonda in aer
|
||||||
|
*************************************
|
||||||
|
Function ANAF_SondaOpreste
|
||||||
|
Local loEx As Exception, llOprita
|
||||||
|
|
||||||
|
llOprita = (Vartype(goANAF_SondaHTTP) = 'O')
|
||||||
|
If m.llOprita
|
||||||
|
Try
|
||||||
|
goANAF_SondaHTTP.Abort()
|
||||||
|
Catch To loEx
|
||||||
|
Endtry
|
||||||
|
goANAF_SondaHTTP = .Null.
|
||||||
|
Endif
|
||||||
|
|
||||||
|
Return m.llOprita
|
||||||
|
Endfunc && ANAF_SondaOpreste
|
||||||
|
|
||||||
*********************************************
|
*********************************************
|
||||||
*** Verificare coduri fiscale folosind serviciul web ANAF, cate 500 de coduri per interogare
|
*** Verificare coduri fiscale folosind serviciul web ANAF, cate 500 de coduri per interogare
|
||||||
*********************************************
|
*********************************************
|
||||||
@@ -1751,6 +1878,10 @@ Define Class VerificareANAF As Custom
|
|||||||
goLog.Log('lnRecords: ' + Transform(m.lnRecords), 'ANAF_SincronWebService_PlatitorTva')
|
goLog.Log('lnRecords: ' + Transform(m.lnRecords), 'ANAF_SincronWebService_PlatitorTva')
|
||||||
Try
|
Try
|
||||||
loHTTP = Createobject('winHTTP.winHTTPrequest.5.1')
|
loHTTP = Createobject('winHTTP.winHTTPrequest.5.1')
|
||||||
|
Try
|
||||||
|
loHTTP.SetTimeouts(2000, 2000, 3000, 3000)
|
||||||
|
Catch To loEx
|
||||||
|
Endtry
|
||||||
Catch To loEx
|
Catch To loEx
|
||||||
ENDTRY
|
ENDTRY
|
||||||
|
|
||||||
@@ -1890,6 +2021,7 @@ Define Class VerificareANAF As Custom
|
|||||||
|
|
||||||
lcSave_SetDate = Set("Date")
|
lcSave_SetDate = Set("Date")
|
||||||
Set Date To YMD
|
Set Date To YMD
|
||||||
|
Try
|
||||||
*
|
*
|
||||||
lnRecords = Alen(loJsonObject.found_vfpsafe_, 1)
|
lnRecords = Alen(loJsonObject.found_vfpsafe_, 1)
|
||||||
For lnRec = 1 To m.lnRecords
|
For lnRec = 1 To m.lnRecords
|
||||||
@@ -1995,7 +2127,9 @@ Define Class VerificareANAF As Custom
|
|||||||
Endif
|
Endif
|
||||||
Endfor
|
Endfor
|
||||||
*
|
*
|
||||||
Set Date To &lcSave_SetDate
|
Finally
|
||||||
|
Set Date To &lcSave_SetDate
|
||||||
|
Endtry
|
||||||
Else
|
Else
|
||||||
goLog.Log('JsonObject is null', 'ParseJsonANAF')
|
goLog.Log('JsonObject is null', 'ParseJsonANAF')
|
||||||
Endif
|
Endif
|
||||||
|
|||||||
@@ -13,9 +13,17 @@
|
|||||||
* verifica intai goCacheANAF_Sesiune - cache-hit NU ajunge aici).
|
* verifica intai goCacheANAF_Sesiune - cache-hit NU ajunge aici).
|
||||||
* runda 12: tdData (data documentului, trimisa de ANAF_StarePartener) e retinuta in gdANAFUltimaData,
|
* runda 12: tdData (data documentului, trimisa de ANAF_StarePartener) e retinuta in gdANAFUltimaData,
|
||||||
* ca testul sa poata verifica ca data ajunge efectiv la wrapper.
|
* ca testul sa poata verifica ca data ajunge efectiv la wrapper.
|
||||||
|
* T7/lane E (handoff_anaf_404.md): al 4-lea parametru tcClasaEsec, prin referinta, identic cu wrapper-ul
|
||||||
|
* real ('' / 'FARA_RASPUNS' / 'RASPUNS_NEINTELES'). Simulare clasa de esec: daca valoarea din
|
||||||
|
* goANAFMockData pentru o cheie e STRING (nu obiect), e tratata ca nume de clasa de esec - mock-ul
|
||||||
|
* intoarce .NULL. cu tcClasaEsec = acea valoare, fara sa atinga tlNegasit (ramane .F., ca la wrapper-ul
|
||||||
|
* real pe caile FARA_RASPUNS/RASPUNS_NEINTELES). Restul (CUI neconfigurat = "cod inexistent" simulat) e
|
||||||
|
* neschimbat.
|
||||||
FUNCTION ANAF_VerificaCuiSingle
|
FUNCTION ANAF_VerificaCuiSingle
|
||||||
LPARAMETERS tcCui, tdData
|
LPARAMETERS tcCui, tdData, tlNegasit, tcClasaEsec
|
||||||
LOCAL lcCui, lcKey
|
LOCAL lcCui, lcKey, luItem
|
||||||
|
tlNegasit = .F.
|
||||||
|
tcClasaEsec = ''
|
||||||
IF TYPE('goANAFMockData') <> 'O'
|
IF TYPE('goANAFMockData') <> 'O'
|
||||||
RETURN .NULL.
|
RETURN .NULL.
|
||||||
ENDIF
|
ENDIF
|
||||||
@@ -28,7 +36,54 @@ FUNCTION ANAF_VerificaCuiSingle
|
|||||||
lcCui = NormalizeazaCUI(m.tcCui)
|
lcCui = NormalizeazaCUI(m.tcCui)
|
||||||
lcKey = 'C' + m.lcCui
|
lcKey = 'C' + m.lcCui
|
||||||
IF goANAFMockData.GetKey(m.lcKey) = 0
|
IF goANAFMockData.GetKey(m.lcKey) = 0
|
||||||
RETURN .NULL. && CUI neconfigurat - simuleaza "fara raspuns" (degradare tacuta)
|
tlNegasit = .T. && CUI neconfigurat - simuleaza raspunsul ANAF "cod inexistent"
|
||||||
|
RETURN .NULL.
|
||||||
ENDIF
|
ENDIF
|
||||||
RETURN goANAFMockData.Item(m.lcKey)
|
luItem = goANAFMockData.Item(m.lcKey)
|
||||||
|
IF VARTYPE(m.luItem) = 'C'
|
||||||
|
tcClasaEsec = m.luItem && simuleaza esecul wrapper-ului (FARA_RASPUNS / RASPUNS_NEINTELES)
|
||||||
|
RETURN .NULL.
|
||||||
|
ENDIF
|
||||||
|
RETURN m.luItem
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
* T7/lane E, dupa T5/sonda (handoff_anaf_404.md): mock peste sonda asincrona de disponibilitate
|
||||||
|
* (ANAF_SondaPorneste/AuSositRaspunsul/AReusit/Opreste, validare.prg) - fara mock, Activeaza()
|
||||||
|
* ar face un apel HTTP real (winHTTP async) la fiecare test cu starea NECUNOSCUT. Globalele de
|
||||||
|
* control (gcMockSondaModo, glMockSondaActiva, gnMockSondaPornireCount, glMockSondaGataManual,
|
||||||
|
* glMockSondaReusitaManual) se construiesc INLINE in programul principal (acelasi motiv ca mai sus).
|
||||||
|
* Mod 'AUTO' (implicit): sonda "raspunde" instant cu succes la primul ANAF_SondaVerifica() - transparent
|
||||||
|
* pentru scenariile care nu testeaza explicit sonda. Mod 'MANUAL': testul controleaza explicit daca/cand
|
||||||
|
* "a sosit raspunsul" (glMockSondaGataManual) si cu ce rezultat (glMockSondaReusitaManual) - foloseste
|
||||||
|
* pentru S2 (sonda in aer)/S3 (sonda reuseste)/S4 (sonda expira).
|
||||||
|
FUNCTION ANAF_SondaPorneste
|
||||||
|
IF TYPE('gnMockSondaPornireCount') = 'N'
|
||||||
|
gnMockSondaPornireCount = gnMockSondaPornireCount + 1
|
||||||
|
ENDIF
|
||||||
|
glMockSondaActiva = .T.
|
||||||
|
RETURN .T.
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
FUNCTION ANAF_SondaAuSositRaspunsul
|
||||||
|
IF TYPE('glMockSondaActiva') <> 'L' OR !glMockSondaActiva
|
||||||
|
RETURN .T.
|
||||||
|
ENDIF
|
||||||
|
IF TYPE('gcMockSondaModo') = 'C' AND gcMockSondaModo == 'MANUAL'
|
||||||
|
RETURN glMockSondaGataManual
|
||||||
|
ENDIF
|
||||||
|
RETURN .T. && AUTO: raspunde imediat
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
FUNCTION ANAF_SondaAReusit
|
||||||
|
IF TYPE('gcMockSondaModo') = 'C' AND gcMockSondaModo == 'MANUAL'
|
||||||
|
RETURN glMockSondaReusitaManual
|
||||||
|
ENDIF
|
||||||
|
RETURN .T. && AUTO: succes implicit
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
FUNCTION ANAF_SondaOpreste
|
||||||
|
LOCAL llOprita
|
||||||
|
llOprita = (TYPE('glMockSondaActiva') = 'L' AND glMockSondaActiva)
|
||||||
|
glMockSondaActiva = .F.
|
||||||
|
RETURN m.llOprita
|
||||||
ENDFUNC
|
ENDFUNC
|
||||||
|
|||||||
@@ -24,12 +24,22 @@
|
|||||||
* 1234567890128 TEST ANAF PERSFIZ - CNP valid, persoana fizica - fara verificare ANAF
|
* 1234567890128 TEST ANAF PERSFIZ - CNP valid, persoana fizica - fara verificare ANAF
|
||||||
* 1234567890123 TEST ANAF CNP INVALID - persoana fizica cu CNP invalid
|
* 1234567890123 TEST ANAF CNP INVALID - persoana fizica cu CNP invalid
|
||||||
* 1234567 TEST ANAF CIF INVALID - persoana juridica cu CIF invalid
|
* 1234567 TEST ANAF CIF INVALID - persoana juridica cu CIF invalid
|
||||||
|
* RO9000055 TEST ANAF CADERE SRL - S5 (handoff_anaf_404.md): esec ANAF simulat, apoi verdict
|
||||||
|
* normal dupa revenirea serviciului (gnIdCadere)
|
||||||
|
* TEST NENUMERIC OIL MARKET SRL TEST ANAF NENUMERIC SRL - cod fiscal nenumeric in loc de CIF, acelasi
|
||||||
|
* tipar ca (dar NU acelasi text ca) cazul real FANALEX din
|
||||||
|
* design-alegere-partener-anaf.md, gnIdNenumeric. ATENTIE: nu
|
||||||
|
* refolosi textul EXACT "FANALEX OIL MARKET S.R.L." - coincide
|
||||||
|
* cu un partener real preexistent in schema (ID_PART=2026,
|
||||||
|
* STERS=0, cu randuri CORESP_TIP_PART reale) folosit la
|
||||||
|
* investigatia initiala a bug-ului - un DELETE pe acel text
|
||||||
|
* sterge date reale, nu de test (descoperit 27.07.2026).
|
||||||
*
|
*
|
||||||
* NOTA ID_PART: NOM_PARTENERI are trigger BEFORE INSERT (trg_NOM_PARTENERI_befoins) care
|
* NOTA ID_PART: NOM_PARTENERI are trigger BEFORE INSERT (trg_NOM_PARTENERI_befoins) care
|
||||||
* SUPRASCRIE ID_PART cu seq_NOM_PARTENERI.nextval, indiferent de valoarea din INSERT - ID-urile
|
* SUPRASCRIE ID_PART cu seq_NOM_PARTENERI.nextval, indiferent de valoarea din INSERT - ID-urile
|
||||||
* nu pot fi alese explicit. Testul insereaza FARA ID_PART si citeste ID-ul real alocat dupa
|
* nu pot fi alese explicit. Testul insereaza FARA ID_PART si citeste ID-ul real alocat dupa
|
||||||
* insert (dupa COD_FISCAL, care e sub controlul testului) - gnIdConcord/gnIdDiscord/gnIdPereche/
|
* insert (dupa COD_FISCAL, care e sub controlul testului) - gnIdConcord/gnIdDiscord/gnIdPereche/
|
||||||
* gnIdNopereche/gnIdPersfiz (PUBLIC).
|
* gnIdNopereche/gnIdPersfiz/gnIdCadere/gnIdNenumeric (PUBLIC).
|
||||||
*
|
*
|
||||||
* Scenarii de decizie (RUNDA 11): dialogul propriu (anaf_dialog) a fost inlocuit cu AMESSAGEBOX
|
* Scenarii de decizie (RUNDA 11): dialogul propriu (anaf_dialog) a fost inlocuit cu AMESSAGEBOX
|
||||||
* tip 3+48 (Da/Nu/Abandon) si 1+48 (OK/Abandon) cand nu exista pereche. Raspunsul se impune prin
|
* tip 3+48 (Da/Nu/Abandon) si 1+48 (OK/Abandon) cand nu exista pereche. Raspunsul se impune prin
|
||||||
@@ -113,10 +123,31 @@ ADDPROPERTY(loRespNoPereche, 'statusInactivi', .F.)
|
|||||||
ADDPROPERTY(loRespNoPereche, 'denumire', 'NOPERECHE SRL ANAF')
|
ADDPROPERTY(loRespNoPereche, 'denumire', 'NOPERECHE SRL ANAF')
|
||||||
ADDPROPERTY(loRespNoPereche, 'mesaj', '')
|
ADDPROPERTY(loRespNoPereche, 'mesaj', '')
|
||||||
goANAFMockData.Add(loRespNoPereche, 'C9000004')
|
goANAFMockData.Add(loRespNoPereche, 'C9000004')
|
||||||
DO VpaLog WITH 'mock ANAF: 3 CUI-uri configurate (1112223, 7654320, 9000004)'
|
LOCAL loRespInactiv
|
||||||
|
loRespInactiv = CREATEOBJECT('Empty')
|
||||||
|
ADDPROPERTY(loRespInactiv, 'cui', '9000012')
|
||||||
|
ADDPROPERTY(loRespInactiv, 'scpTVA', .F.)
|
||||||
|
ADDPROPERTY(loRespInactiv, 'statusInactivi', .T.)
|
||||||
|
ADDPROPERTY(loRespInactiv, 'denumire', 'INACTIV SRL ANAF')
|
||||||
|
ADDPROPERTY(loRespInactiv, 'mesaj', '')
|
||||||
|
goANAFMockData.Add(loRespInactiv, 'C9000012')
|
||||||
|
DO VpaLog WITH 'mock ANAF: 4 CUI-uri configurate (1112223, 7654320, 9000004, 9000012)'
|
||||||
|
|
||||||
PUBLIC gnIdConcord, gnIdDiscord, gnIdPereche, gnIdNopereche, gnIdPersfiz, gnIdSpatiu
|
*-- T5/sonda (handoff_anaf_404.md): Activeaza() porneste sonda REALA (ANAF_SondaPorneste, validare.prg)
|
||||||
|
*-- ori de cate ori starea e NECUNOSCUT - fara mock ar insemna apel HTTP real la fiecare test. Mod 'AUTO'
|
||||||
|
*-- (implicit): sonda "raspunde" instant cu succes la primul ANAF_SondaVerifica() - transparent pentru
|
||||||
|
*-- toate scenariile vechi (AsteaptaTimer cheama acum ANAF_SondaVerifica() inainte de VerificaRand, ca
|
||||||
|
*-- anaf_timer.Timer). Mod 'MANUAL': S2/S3/S4 controleaza explicit gcMockSondaGataManual/ReusitaManual.
|
||||||
|
PUBLIC gcMockSondaModo, glMockSondaActiva, gnMockSondaPornireCount, glMockSondaGataManual, glMockSondaReusitaManual
|
||||||
|
gcMockSondaModo = 'AUTO'
|
||||||
|
glMockSondaActiva = .F.
|
||||||
|
gnMockSondaPornireCount = 0
|
||||||
|
glMockSondaGataManual = .F.
|
||||||
|
glMockSondaReusitaManual = .T.
|
||||||
|
|
||||||
|
PUBLIC gnIdConcord, gnIdDiscord, gnIdPereche, gnIdNopereche, gnIdPersfiz, gnIdSpatiu, gnIdInactiv, gnIdInexistent
|
||||||
PUBLIC gnIdCnpInv, gnIdCifInv, gnMockInputBox, gnMockInputCount, gcMockUltimPrompt, gcMockInputSecventa
|
PUBLIC gnIdCnpInv, gnIdCifInv, gnMockInputBox, gnMockInputCount, gcMockUltimPrompt, gcMockInputSecventa
|
||||||
|
PUBLIC gnIdCadere, gnIdNenumeric
|
||||||
gnMockInputBox = 1
|
gnMockInputBox = 1
|
||||||
gnMockInputCount = 0
|
gnMockInputCount = 0
|
||||||
gcMockUltimPrompt = ''
|
gcMockUltimPrompt = ''
|
||||||
@@ -261,6 +292,21 @@ TRY
|
|||||||
DO RuleazaIzolat WITH 'VerificaDiscriminatorDocumente'
|
DO RuleazaIzolat WITH 'VerificaDiscriminatorDocumente'
|
||||||
DO RuleazaIzolat WITH 'VerificaB1LabelGolit'
|
DO RuleazaIzolat WITH 'VerificaB1LabelGolit'
|
||||||
DO RuleazaIzolat WITH 'VerificaComutareOptiune'
|
DO RuleazaIzolat WITH 'VerificaComutareOptiune'
|
||||||
|
DO RuleazaIzolat WITH 'VerificaInactivCodCorect'
|
||||||
|
DO RuleazaIzolat WITH 'VerificaCodInexistentANAF'
|
||||||
|
|
||||||
|
*=========================================================================
|
||||||
|
* Scenariile T7 (handoff_anaf_404.md / plan-reparatie-anaf-404-breaker.md): intrerupatorul de
|
||||||
|
* disponibilitate ANAF (S1, S5, S6) si codul fiscal nenumeric (P8)
|
||||||
|
*=========================================================================
|
||||||
|
DO RuleazaIzolat WITH 'VerificaStareCazutaZeroApeluri'
|
||||||
|
DO RuleazaIzolat WITH 'VerificaBandaCazutDistinctaDePrompt'
|
||||||
|
DO RuleazaIzolat WITH 'VerificaEsecNuSeCacheaza'
|
||||||
|
DO RuleazaIzolat WITH 'VerificaCodNenumeric'
|
||||||
|
DO RuleazaIzolat WITH 'VerificaFixtureContract404'
|
||||||
|
DO RuleazaIzolat WITH 'VerificaSondaInAer'
|
||||||
|
DO RuleazaIzolat WITH 'VerificaSondaReuseste'
|
||||||
|
DO RuleazaIzolat WITH 'VerificaSondaExpira'
|
||||||
|
|
||||||
DO VpaLog WITH 'GATA - toate scenariile executate'
|
DO VpaLog WITH 'GATA - toate scenariile executate'
|
||||||
DO HarnessStep WITH 4, 'toate scenariile executate'
|
DO HarnessStep WITH 4, 'toate scenariile executate'
|
||||||
@@ -277,10 +323,14 @@ QUIT
|
|||||||
|
|
||||||
*==================================================================================
|
*==================================================================================
|
||||||
PROCEDURE CurataDateTest
|
PROCEDURE CurataDateTest
|
||||||
LOCAL lnOk
|
*-- CORESP_TIP_PART are FK_CORESP_TIP_PART_001 catre NOM_PARTENERI - copilul se sterge inaintea
|
||||||
lnOk = goExecutor.oExecuta([DELETE FROM NOM_PARTENERI WHERE COD_FISCAL IN ('RO1112223','7654320','RO7654320','RO 7654320','9000004','1234567890128','1234567890123','1234567')])
|
*-- parintelui (ORA-02292), aceeasi lista de coduri in ambele instructiuni (lcCoduri).
|
||||||
|
LOCAL lnOk, lnOkCoresp, lcCoduri
|
||||||
|
lcCoduri = ['RO1112223','7654320','RO7654320','RO 7654320','9000004','9000012','9000039','1234567890128','1234567890123','1234567','RO9000055','TEST NENUMERIC OIL MARKET SRL']
|
||||||
|
lnOkCoresp = goExecutor.oExecuta([DELETE FROM CORESP_TIP_PART WHERE ID_PART IN (SELECT ID_PART FROM NOM_PARTENERI WHERE COD_FISCAL IN (] + m.lcCoduri + [))])
|
||||||
|
lnOk = goExecutor.oExecuta([DELETE FROM NOM_PARTENERI WHERE COD_FISCAL IN (] + m.lcCoduri + [)])
|
||||||
=goExecutor.oExecuta('COMMIT')
|
=goExecutor.oExecuta('COMMIT')
|
||||||
DO VpaLog WITH 'CurataDateTest: sters=' + TRANSFORM(m.lnOk)
|
DO VpaLog WITH 'CurataDateTest: sters coresp_tip_part=' + TRANSFORM(m.lnOkCoresp) + ' nom_parteneri=' + TRANSFORM(m.lnOk)
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE CreeazaDateTest
|
PROCEDURE CreeazaDateTest
|
||||||
@@ -302,6 +352,12 @@ PROCEDURE CreeazaDateTest
|
|||||||
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
||||||
[('TEST ANAF NOPERECHE SRL','TEST ANAF NOPERECHE SRL','9000004',0,0,0,1,0,0)]
|
[('TEST ANAF NOPERECHE SRL','TEST ANAF NOPERECHE SRL','9000004',0,0,0,1,0,0)]
|
||||||
=goExecutor.oExecuta(m.lcIns)
|
=goExecutor.oExecuta(m.lcIns)
|
||||||
|
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
||||||
|
[('TEST ANAF INACTIV SRL','TEST ANAF INACTIV SRL','9000012',0,0,0,1,0,0)]
|
||||||
|
=goExecutor.oExecuta(m.lcIns)
|
||||||
|
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
||||||
|
[('TEST ANAF INEXISTENT SRL','TEST ANAF INEXISTENT SRL','9000039',0,0,0,1,0,0)]
|
||||||
|
=goExecutor.oExecuta(m.lcIns)
|
||||||
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
||||||
[('TEST ANAF PERSFIZ','TEST ANAF PERSFIZ','1234567890128',0,0,0,2,0,0)]
|
[('TEST ANAF PERSFIZ','TEST ANAF PERSFIZ','1234567890128',0,0,0,2,0,0)]
|
||||||
=goExecutor.oExecuta(m.lcIns)
|
=goExecutor.oExecuta(m.lcIns)
|
||||||
@@ -311,27 +367,42 @@ PROCEDURE CreeazaDateTest
|
|||||||
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
||||||
[('TEST ANAF CIF INVALID SRL','TEST ANAF CIF INVALID SRL','1234567',0,0,0,1,0,0)]
|
[('TEST ANAF CIF INVALID SRL','TEST ANAF CIF INVALID SRL','1234567',0,0,0,1,0,0)]
|
||||||
=goExecutor.oExecuta(m.lcIns)
|
=goExecutor.oExecuta(m.lcIns)
|
||||||
|
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
||||||
|
[('TEST ANAF CADERE SRL','TEST ANAF CADERE SRL','RO9000055',0,0,0,1,0,0)]
|
||||||
|
=goExecutor.oExecuta(m.lcIns)
|
||||||
|
lcIns = [INSERT INTO NOM_PARTENERI (NUME,DENUMIRE,COD_FISCAL,STERS,ID_MOD,INACTIV,TIP_PERSOANA,INSTITUTIE_PUBLICA,ENTITATE_AFILIATA) VALUES ] + ;
|
||||||
|
[('TEST ANAF NENUMERIC SRL','TEST ANAF NENUMERIC SRL','TEST NENUMERIC OIL MARKET SRL',0,0,0,1,0,0)]
|
||||||
|
=goExecutor.oExecuta(m.lcIns)
|
||||||
=goExecutor.oExecuta('COMMIT')
|
=goExecutor.oExecuta('COMMIT')
|
||||||
|
|
||||||
gnIdConcord = 0
|
gnIdConcord = 0
|
||||||
gnIdDiscord = 0
|
gnIdDiscord = 0
|
||||||
gnIdPereche = 0
|
gnIdPereche = 0
|
||||||
gnIdNopereche = 0
|
gnIdNopereche = 0
|
||||||
|
gnIdInactiv = 0
|
||||||
|
gnIdInexistent = 0
|
||||||
gnIdPersfiz = 0
|
gnIdPersfiz = 0
|
||||||
gnIdSpatiu = 0
|
gnIdSpatiu = 0
|
||||||
gnIdCnpInv = 0
|
gnIdCnpInv = 0
|
||||||
gnIdCifInv = 0
|
gnIdCifInv = 0
|
||||||
|
gnIdCadere = 0
|
||||||
|
gnIdNenumeric = 0
|
||||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = 'RO 7654320'], @gnIdSpatiu)
|
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = 'RO 7654320'], @gnIdSpatiu)
|
||||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = 'RO1112223'], @gnIdConcord)
|
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = 'RO1112223'], @gnIdConcord)
|
||||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '7654320'], @gnIdDiscord)
|
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '7654320'], @gnIdDiscord)
|
||||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = 'RO7654320'], @gnIdPereche)
|
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = 'RO7654320'], @gnIdPereche)
|
||||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '9000004'], @gnIdNopereche)
|
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '9000004'], @gnIdNopereche)
|
||||||
|
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '9000012'], @gnIdInactiv)
|
||||||
|
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '9000039'], @gnIdInexistent)
|
||||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '1234567890128'], @gnIdPersfiz)
|
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '1234567890128'], @gnIdPersfiz)
|
||||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '1234567890123'], @gnIdCnpInv)
|
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '1234567890123'], @gnIdCnpInv)
|
||||||
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '1234567'], @gnIdCifInv)
|
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = '1234567'], @gnIdCifInv)
|
||||||
|
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = 'RO9000055'], @gnIdCadere)
|
||||||
|
=goExecutor.oSelect2Value([SELECT ID_PART AS NR FROM NOM_PARTENERI WHERE COD_FISCAL = 'TEST NENUMERIC OIL MARKET SRL'], @gnIdNenumeric)
|
||||||
DO VpaLog WITH 'CreeazaDateTest: id-uri alocate concord=' + TRANSFORM(gnIdConcord) + ' discord=' + TRANSFORM(gnIdDiscord) + ;
|
DO VpaLog WITH 'CreeazaDateTest: id-uri alocate concord=' + TRANSFORM(gnIdConcord) + ' discord=' + TRANSFORM(gnIdDiscord) + ;
|
||||||
' pereche=' + TRANSFORM(gnIdPereche) + ' spatiu=' + TRANSFORM(gnIdSpatiu) + ;
|
' pereche=' + TRANSFORM(gnIdPereche) + ' spatiu=' + TRANSFORM(gnIdSpatiu) + ;
|
||||||
' nopereche=' + TRANSFORM(gnIdNopereche) + ' persfiz=' + TRANSFORM(gnIdPersfiz)
|
' nopereche=' + TRANSFORM(gnIdNopereche) + ' persfiz=' + TRANSFORM(gnIdPersfiz) + ;
|
||||||
|
' cadere=' + TRANSFORM(gnIdCadere) + ' nenumeric=' + TRANSFORM(gnIdNenumeric)
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE PornesteCautare
|
PROCEDURE PornesteCautare
|
||||||
@@ -369,24 +440,13 @@ PROCEDURE PornesteCautare
|
|||||||
goFormT.Show()
|
goFormT.Show()
|
||||||
DOEVENTS FORCE
|
DOEVENTS FORCE
|
||||||
|
|
||||||
*-- RUNDA 17 (B3): cu cmd_select prezent labelul ii ia coordonatele, iar inaltimea formei NU mai creste
|
*-- labelul primeste banda lui proprie sub grid: forma creste cu 54, iar banda are fundal propriu
|
||||||
IF TYPE('goFormT.cmd_select') = 'O'
|
IF VARTYPE(goFormT.lb_anaf) = 'O' AND goFormT.Height = m.lnInaltimeInitiala + 54 ;
|
||||||
IF VARTYPE(goFormT.lb_anaf) = 'O' AND goFormT.Height = m.lnInaltimeInitiala ;
|
AND goFormT.lb_anaf.Anchor = 14 AND goFormT.lb_anaf.BackStyle = 1
|
||||||
AND goFormT.lb_anaf.Top = goFormT.cmd_select.Top ;
|
DO VpaLog WITH 'PASS activare: lb_anaf creat in banda proprie, forma marita cu 54px (inaltime=' + TRANSFORM(goFormT.Height) + ')'
|
||||||
AND goFormT.lb_anaf.Left = goFormT.cmd_select.Left ;
|
|
||||||
AND goFormT.lb_anaf.Height = goFormT.cmd_select.Height ;
|
|
||||||
AND goFormT.lb_anaf.Anchor = 14
|
|
||||||
DO VpaLog WITH 'PASS activare: lb_anaf pe coordonatele cmd_select, inaltimea formei neschimbata (inaltime=' + TRANSFORM(goFormT.Height) + ')'
|
|
||||||
ELSE
|
|
||||||
DO VpaLog WITH 'FAIL activare: lb_anaf tip=' + TRANSFORM(VARTYPE(goFormT.lb_anaf)) + ' inaltime=' + TRANSFORM(goFormT.Height) + ;
|
|
||||||
' (initiala=' + TRANSFORM(m.lnInaltimeInitiala) + ')'
|
|
||||||
ENDIF
|
|
||||||
ELSE
|
ELSE
|
||||||
IF VARTYPE(goFormT.lb_anaf) = 'O' AND goFormT.Height = m.lnInaltimeInitiala + 38
|
DO VpaLog WITH 'FAIL activare: lb_anaf tip=' + TRANSFORM(VARTYPE(goFormT.lb_anaf)) + ' inaltime=' + TRANSFORM(goFormT.Height) + ;
|
||||||
DO VpaLog WITH 'PASS activare (fara cmd_select): lb_anaf creat, forma marita cu 38px (inaltime=' + TRANSFORM(goFormT.Height) + ')'
|
' (initiala=' + TRANSFORM(m.lnInaltimeInitiala) + ')'
|
||||||
ELSE
|
|
||||||
DO VpaLog WITH 'FAIL activare (fara cmd_select): lb_anaf tip=' + TRANSFORM(VARTYPE(goFormT.lb_anaf)) + ' inaltime=' + TRANSFORM(goFormT.Height)
|
|
||||||
ENDIF
|
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
*-- RUNDA 11: geometria label-ului DUPA Show() - bug-ul live era ca Anchor setat inainte de Top
|
*-- RUNDA 11: geometria label-ului DUPA Show() - bug-ul live era ca Anchor setat inainte de Top
|
||||||
@@ -412,8 +472,12 @@ PROCEDURE AsteaptaTimer
|
|||||||
*-- intern), nu pompari discrete. Apel DIRECT VerificaRand(.F.) - echivalent functional cu
|
*-- intern), nu pompari discrete. Apel DIRECT VerificaRand(.F.) - echivalent functional cu
|
||||||
*-- "timerul s-a declansat" - ca sa testez restul logicii (verdict/cache/dialog). Debounce-ul
|
*-- "timerul s-a declansat" - ca sa testez restul logicii (verdict/cache/dialog). Debounce-ul
|
||||||
*-- PROPRIU-ZIS (timerul reseteaza la fiecare navigare) e verificat separat, fara acest apel.
|
*-- PROPRIU-ZIS (timerul reseteaza la fiecare navigare) e verificat separat, fara acest apel.
|
||||||
|
*-- T5/sonda: ANAF_SondaVerifica() INAINTE de VerificaRand, exact ca anaf_timer.Timer (ocautare.prg) -
|
||||||
|
*-- altfel o sonda pornita de Activeaza() (stare NECUNOSCUT) n-ar mai fi rezolvata niciodata in acest
|
||||||
|
*-- runtime headless si ar bloca toate scenariile vechi in banda "se verifica...".
|
||||||
LOCAL loV
|
LOCAL loV
|
||||||
loV = IIF(VARTYPE(m.toVerif) = 'O', m.toVerif, poVerifAlegere)
|
loV = IIF(VARTYPE(m.toVerif) = 'O', m.toVerif, poVerifAlegere)
|
||||||
|
ANAF_SondaVerifica()
|
||||||
IF VARTYPE(m.loV) = 'O'
|
IF VARTYPE(m.loV) = 'O'
|
||||||
m.loV.VerificaRand(.F.)
|
m.loV.VerificaRand(.F.)
|
||||||
ENDIF
|
ENDIF
|
||||||
@@ -454,7 +518,7 @@ PROCEDURE VerificaCodInvalid
|
|||||||
DO AsteaptaTimer
|
DO AsteaptaTimer
|
||||||
lcCap = ALLTRIM(goFormT.lb_anaf.Caption)
|
lcCap = ALLTRIM(goFormT.lb_anaf.Caption)
|
||||||
*-- runda 17 (B2): eticheta primeste sufixul "F4 = detalii" si e BOLD (avertisment), ca discordanta ANAF
|
*-- runda 17 (B2): eticheta primeste sufixul "F4 = detalii" si e BOLD (avertisment), ca discordanta ANAF
|
||||||
IF m.lcCap == 'CIF invalid (1234567) (F4 = detalii)' AND goFormT.lb_anaf.ForeColor = RGB(192,0,0) AND goFormT.lb_anaf.FontBold ;
|
IF m.lcCap == CHR(149) + ' CIF invalid (1234567) (F4 = detalii)' AND goFormT.lb_anaf.ForeColor = RGB(192,0,0) AND goFormT.lb_anaf.FontBold ;
|
||||||
AND gnANAFCallCount = m.lnInainte
|
AND gnANAFCallCount = m.lnInainte
|
||||||
DO VpaLog WITH 'PASS cod-invalid-cif (B2): [' + m.lcCap + '] rosu, bold, fara apel ANAF'
|
DO VpaLog WITH 'PASS cod-invalid-cif (B2): [' + m.lcCap + '] rosu, bold, fara apel ANAF'
|
||||||
ELSE
|
ELSE
|
||||||
@@ -467,7 +531,7 @@ PROCEDURE VerificaCodInvalid
|
|||||||
goFormT._GRID1.AfterRowColChange(1)
|
goFormT._GRID1.AfterRowColChange(1)
|
||||||
DO AsteaptaTimer
|
DO AsteaptaTimer
|
||||||
lcCap = ALLTRIM(goFormT.lb_anaf.Caption)
|
lcCap = ALLTRIM(goFormT.lb_anaf.Caption)
|
||||||
IF m.lcCap == 'CNP invalid (1234567890123) (F4 = detalii)' AND goFormT.lb_anaf.ForeColor = RGB(192,0,0) AND goFormT.lb_anaf.FontBold
|
IF m.lcCap == CHR(149) + ' CNP invalid (1234567890123) (F4 = detalii)' AND goFormT.lb_anaf.ForeColor = RGB(192,0,0) AND goFormT.lb_anaf.FontBold
|
||||||
DO VpaLog WITH 'PASS cod-invalid-cnp (B2): [' + m.lcCap + '] rosu, bold'
|
DO VpaLog WITH 'PASS cod-invalid-cnp (B2): [' + m.lcCap + '] rosu, bold'
|
||||||
ELSE
|
ELSE
|
||||||
DO VpaLog WITH 'FAIL cod-invalid-cnp (B2): [' + m.lcCap + '] ForeColor=' + TRANSFORM(goFormT.lb_anaf.ForeColor) + ' Bold=' + TRANSFORM(goFormT.lb_anaf.FontBold)
|
DO VpaLog WITH 'FAIL cod-invalid-cnp (B2): [' + m.lcCap + '] ForeColor=' + TRANSFORM(goFormT.lb_anaf.ForeColor) + ' Bold=' + TRANSFORM(goFormT.lb_anaf.FontBold)
|
||||||
@@ -478,10 +542,10 @@ PROCEDURE VerificaCodInvalid
|
|||||||
goFormT._GRID1.AfterRowColChange(1)
|
goFormT._GRID1.AfterRowColChange(1)
|
||||||
DO AsteaptaTimer
|
DO AsteaptaTimer
|
||||||
lcCap = ALLTRIM(goFormT.lb_anaf.Caption)
|
lcCap = ALLTRIM(goFormT.lb_anaf.Caption)
|
||||||
IF EMPTY(m.lcCap)
|
IF m.lcCap == CHR(149) + ' Verificare ANAF la alegerea partenerului (F4 = detalii)' AND goFormT.lb_anaf.ForeColor = RGB(112,112,112)
|
||||||
DO VpaLog WITH 'PASS cod-valid-cnp: persoana fizica cu CNP valid - fara label, fara verificare ANAF'
|
DO VpaLog WITH 'PASS cod-valid-cnp: persoana fizica cu CNP valid - banda revine la text neutru, fara verificare ANAF'
|
||||||
ELSE
|
ELSE
|
||||||
DO VpaLog WITH 'FAIL cod-valid-cnp: label neasteptat [' + m.lcCap + ']'
|
DO VpaLog WITH 'FAIL cod-valid-cnp: label neasteptat [' + m.lcCap + '] ForeColor=' + TRANSFORM(goFormT.lb_anaf.ForeColor)
|
||||||
ENDIF
|
ENDIF
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
@@ -553,10 +617,15 @@ PROCEDURE VerificaDebounce
|
|||||||
LOCATE FOR id_part = gnIdNopereche
|
LOCATE FOR id_part = gnIdNopereche
|
||||||
goFormT._GRID1.AfterRowColChange(1)
|
goFormT._GRID1.AfterRowColChange(1)
|
||||||
DOEVENTS FORCE
|
DOEVENTS FORCE
|
||||||
IF gnANAFCallCount = m.lnInainte
|
*-- randurile intermediare (concord, discord) NU se verifica; banda isi face acum repaint la fiecare
|
||||||
DO VpaLog WITH 'PASS debounce: 3 navigari rapide, 0 apeluri ANAF noi (timer resetat de fiecare data)'
|
*-- schimbare de rand, iar repaint-ul pompeaza mesaje, deci timerul poate apuca sa se declanseze
|
||||||
|
*-- pentru randul CURENT (nopereche) inainte de AsteaptaTimer - un singur apel, tot pe randul oprit.
|
||||||
|
IF gnANAFCallCount <= m.lnInainte + 1 AND (gnANAFCallCount = m.lnInainte OR ALLTRIM(poVerifAlegere.cCui) == '9000004')
|
||||||
|
DO VpaLog WITH 'PASS debounce: 3 navigari rapide, niciun apel pe randurile intermediare (apeluri noi=' + ;
|
||||||
|
TRANSFORM(gnANAFCallCount - m.lnInainte) + ', CUI curent=' + ALLTRIM(poVerifAlegere.cCui) + ')'
|
||||||
ELSE
|
ELSE
|
||||||
DO VpaLog WITH 'FAIL debounce: gnANAFCallCount a crescut cu ' + TRANSFORM(gnANAFCallCount - m.lnInainte) + ' in timpul navigarii rapide'
|
DO VpaLog WITH 'FAIL debounce: gnANAFCallCount a crescut cu ' + TRANSFORM(gnANAFCallCount - m.lnInainte) + ;
|
||||||
|
' in timpul navigarii rapide, CUI curent=' + ALLTRIM(poVerifAlegere.cCui)
|
||||||
ENDIF
|
ENDIF
|
||||||
DO AsteaptaTimer
|
DO AsteaptaTimer
|
||||||
IF gnANAFCallCount = m.lnInainte + 1
|
IF gnANAFCallCount = m.lnInainte + 1
|
||||||
@@ -625,6 +694,13 @@ PROCEDURE VerificaDetalii
|
|||||||
ELSE
|
ELSE
|
||||||
DO VpaLog WITH 'FAIL detalii-click: click simplu pe label nu a deschis detaliile'
|
DO VpaLog WITH 'FAIL detalii-click: click simplu pe label nu a deschis detaliile'
|
||||||
ENDIF
|
ENDIF
|
||||||
|
*-- Detalii se incheie cu do_termin() (dupa Da/Nu se inchide cautarea) - formularul e Release-uit,
|
||||||
|
*-- deci scenariile urmatoare au nevoie de unul nou.
|
||||||
|
DO PregatesteFormularD1a
|
||||||
|
SELECT ctestparteneri
|
||||||
|
LOCATE FOR id_part = gnIdDiscord
|
||||||
|
goFormT._GRID1.AfterRowColChange(1)
|
||||||
|
DO AsteaptaTimer
|
||||||
lnLenInainte = IIF(FILE(gcUILog), LEN(FILETOSTR(gcUILog)), 0)
|
lnLenInainte = IIF(FILE(gcUILog), LEN(FILETOSTR(gcUILog)), 0)
|
||||||
poVerifAlegere.Detalii()
|
poVerifAlegere.Detalii()
|
||||||
lcLog = FILETOSTR(gcUILog)
|
lcLog = FILETOSTR(gcUILog)
|
||||||
@@ -644,6 +720,8 @@ ENDPROC
|
|||||||
PROCEDURE VerificaAlegereRapidaD2
|
PROCEDURE VerificaAlegereRapidaD2
|
||||||
*-- D2: alege un rand FARA sa astepte timerul (VerificaRand(.T.) sincron in VerificaAlegere)
|
*-- D2: alege un rand FARA sa astepte timerul (VerificaRand(.T.) sincron in VerificaAlegere)
|
||||||
LOCAL lnInainte
|
LOCAL lnInainte
|
||||||
|
*-- formularul precedent a fost inchis de Detalii (do_termin) - reia cu unul nou
|
||||||
|
DO PregatesteFormularD1a
|
||||||
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||||
goCacheANAF_Sesiune = CREATEOBJECT('Collection') && reset - CUI 1112223 nu a mai fost verificat "proaspat" pt. acest test
|
goCacheANAF_Sesiune = CREATEOBJECT('Collection') && reset - CUI 1112223 nu a mai fost verificat "proaspat" pt. acest test
|
||||||
ENDIF
|
ENDIF
|
||||||
@@ -1101,6 +1179,121 @@ PROCEDURE VerificaDataPoAct
|
|||||||
ENDIF
|
ENDIF
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE VerificaInactivCodCorect
|
||||||
|
*-- cod fiscal corect (fara RO, ANAF neplatitor), discordanta doar din "inactiv la ANAF":
|
||||||
|
*-- nu se mai cauta perechi si nu se mai sugereaza crearea unui partener cu acelasi cod.
|
||||||
|
LOCAL loFormI, loVerifI, lnOk, llRez, lcCapI
|
||||||
|
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||||
|
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||||
|
ENDIF
|
||||||
|
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||||
|
[WHERE ID_PART = ] + TRANSFORM(gnIdInactiv), 'ctestinactiv')
|
||||||
|
loFormI = CREATEOBJECT('cauta_alfa_form', 'ctestinactiv', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||||
|
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||||
|
loFormI.crs_cursor = 'ctestinactiv'
|
||||||
|
loFormI.lAles = .F.
|
||||||
|
loVerifI = CREATEOBJECT('anaf_verif_cautare')
|
||||||
|
ADDPROPERTY(loFormI, 'oVerifAlegere', loVerifI)
|
||||||
|
loVerifI.Activeaza(loFormI)
|
||||||
|
loVerifI.nNivel = 3
|
||||||
|
loFormI.WindowType = 0
|
||||||
|
loFormI.Show()
|
||||||
|
SELECT ctestinactiv
|
||||||
|
GO TOP
|
||||||
|
loFormI._GRID1.AfterRowColChange(1)
|
||||||
|
DO AsteaptaTimer WITH loVerifI
|
||||||
|
lcCapI = ALLTRIM(loFormI.lb_anaf.Caption)
|
||||||
|
|
||||||
|
gcMockUltimMesaj = ''
|
||||||
|
gnMockUltimTip = 0
|
||||||
|
gnMockRaspuns = 1 && De acord
|
||||||
|
llRez = loVerifI.VerificaAlegere(loFormI)
|
||||||
|
IF m.llRez AND gnMockUltimTip = 49 AND 'Neplatitor TVA, Inactiv' $ gcMockUltimMesaj ;
|
||||||
|
AND !('butonul Nou' $ gcMockUltimMesaj) AND !('Parteneri ROA cu CUI' $ gcMockUltimMesaj) ;
|
||||||
|
AND 'Neplatitor TVA, Inactiv' $ m.lcCapI
|
||||||
|
DO VpaLog WITH 'PASS inactiv-cod-corect: confirmare fara sugestia de creare - [' + STRTRAN(gcMockUltimMesaj, CHR(13), ' | ') + ']'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL inactiv-cod-corect: llRez=' + TRANSFORM(m.llRez) + ' tip=' + TRANSFORM(gnMockUltimTip) + ;
|
||||||
|
' label=[' + m.lcCapI + '] mesaj=[' + STRTRAN(gcMockUltimMesaj, CHR(13), ' | ') + ']'
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
gcMockUltimMesaj = ''
|
||||||
|
loVerifI.Detalii()
|
||||||
|
IF 'Nu exista alta varianta de partener de ales.' $ gcMockUltimMesaj AND !('butonul Nou' $ gcMockUltimMesaj) ;
|
||||||
|
AND !('Parteneri ROA cu CUI' $ gcMockUltimMesaj)
|
||||||
|
DO VpaLog WITH 'PASS inactiv-detalii: F4 arata doar starea, fara lista de variante'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL inactiv-detalii: mesaj=[' + STRTRAN(gcMockUltimMesaj, CHR(13), ' | ') + ']'
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
loVerifI.Dezactiveaza()
|
||||||
|
loFormI.Release()
|
||||||
|
IF USED('ctestinactiv')
|
||||||
|
USE IN ctestinactiv
|
||||||
|
ENDIF
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE VerificaCodInexistentANAF
|
||||||
|
*-- cod fiscal valid ca structura, dar pe care ANAF nu il gaseste: se semnaleaza in banda, nu se
|
||||||
|
*-- mai trece tacut peste el (deosebit de "ANAF nu a raspuns", care ramane tacut).
|
||||||
|
LOCAL loFormX, loVerifX, lnOk, lcCapX, lnInainte
|
||||||
|
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||||
|
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||||
|
ENDIF
|
||||||
|
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||||
|
[WHERE ID_PART = ] + TRANSFORM(gnIdInexistent), 'ctestinexistent')
|
||||||
|
loFormX = CREATEOBJECT('cauta_alfa_form', 'ctestinexistent', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||||
|
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||||
|
loFormX.crs_cursor = 'ctestinexistent'
|
||||||
|
loFormX.lAles = .F.
|
||||||
|
loVerifX = CREATEOBJECT('anaf_verif_cautare')
|
||||||
|
ADDPROPERTY(loFormX, 'oVerifAlegere', loVerifX)
|
||||||
|
loVerifX.Activeaza(loFormX)
|
||||||
|
loFormX.WindowType = 0
|
||||||
|
loFormX.Show()
|
||||||
|
SELECT ctestinexistent
|
||||||
|
GO TOP
|
||||||
|
loFormX._GRID1.AfterRowColChange(1)
|
||||||
|
DO AsteaptaTimer WITH loVerifX
|
||||||
|
lcCapX = ALLTRIM(loFormX.lb_anaf.Caption)
|
||||||
|
|
||||||
|
IF 'Cod fiscal inexistent la ANAF (9000039)' $ m.lcCapX AND loFormX.lb_anaf.ForeColor = RGB(192,0,0) ;
|
||||||
|
AND loFormX.lb_anaf.FontBold AND loVerifX.lNegasit
|
||||||
|
DO VpaLog WITH 'PASS cod-inexistent: banda semnaleaza codul negasit la ANAF - [' + m.lcCapX + ']'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL cod-inexistent: label=[' + m.lcCapX + '] ForeColor=' + TRANSFORM(loFormX.lb_anaf.ForeColor) + ;
|
||||||
|
' Bold=' + TRANSFORM(loFormX.lb_anaf.FontBold) + ' lNegasit=' + TRANSFORM(loVerifX.lNegasit)
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
*-- al doilea rand pe acelasi cod: verdictul "inexistent" NU se mai retine in cache (T4/handoff_anaf_404
|
||||||
|
*-- - doar rezultatele POZITIVE se cacheaza) - fiecare verificare noua face iar apel ANAF, acelasi verdict.
|
||||||
|
lnInainte = gnANAFCallCount
|
||||||
|
loVerifX.nIdPart = 0
|
||||||
|
loFormX._GRID1.AfterRowColChange(1)
|
||||||
|
DO AsteaptaTimer WITH loVerifX
|
||||||
|
IF gnANAFCallCount = m.lnInainte + 1 AND 'Cod fiscal inexistent la ANAF' $ ALLTRIM(loFormX.lb_anaf.Caption)
|
||||||
|
DO VpaLog WITH 'PASS cod-inexistent-fara-cache: verdictul "inexistent" nu se cacheaza - apel ANAF nou (' + ;
|
||||||
|
TRANSFORM(gnANAFCallCount - m.lnInainte) + '), acelasi verdict'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL cod-inexistent-fara-cache: apeluri noi=' + TRANSFORM(gnANAFCallCount - m.lnInainte) + ;
|
||||||
|
' label=[' + ALLTRIM(loFormX.lb_anaf.Caption) + ']'
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
gcMockUltimMesaj = ''
|
||||||
|
loVerifX.Detalii()
|
||||||
|
IF 'Codul fiscal nu exista la ANAF.' $ gcMockUltimMesaj
|
||||||
|
DO VpaLog WITH 'PASS cod-inexistent-detalii: F4 explica de ce nu exista verdict'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL cod-inexistent-detalii: mesaj=[' + STRTRAN(gcMockUltimMesaj, CHR(13), ' | ') + ']'
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
loVerifX.Dezactiveaza()
|
||||||
|
loFormX.Release()
|
||||||
|
IF USED('ctestinexistent')
|
||||||
|
USE IN ctestinexistent
|
||||||
|
ENDIF
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE RuleazaIzolat
|
PROCEDURE RuleazaIzolat
|
||||||
*-- izoleaza fiecare scenariu nou REVIZIA 4 - o eroare neasteptata intr-unul singur nu opreste
|
*-- izoleaza fiecare scenariu nou REVIZIA 4 - o eroare neasteptata intr-unul singur nu opreste
|
||||||
*-- restul suitei (spre deosebire de eroarea din TRY-ul principal, care oricum face QUIT).
|
*-- restul suitei (spre deosebire de eroarea din TRY-ul principal, care oricum face QUIT).
|
||||||
@@ -1114,6 +1307,447 @@ PROCEDURE RuleazaIzolat
|
|||||||
ENDTRY
|
ENDTRY
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE VerificaStareCazutaZeroApeluri
|
||||||
|
*-- S1 (handoff_anaf_404.md): stare de serviciu CAZUT -> randul NU face niciun apel ANAF nou,
|
||||||
|
*-- banda arata "ANAF nu a raspuns - verificare sarita" (gri, fara bold). ANAF_SeteazaStareServiciu
|
||||||
|
*-- e functia reala din ocautare.prg (nu un global impins direct), ca sceanariul sa treaca prin
|
||||||
|
*-- acelasi mecanism ca in productie.
|
||||||
|
LOCAL loFormS, loVerifS, lnOk, lnInainte, lcCapS
|
||||||
|
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||||
|
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||||
|
ENDIF
|
||||||
|
ANAF_SeteazaStareServiciu('CAZUT', 'test S1')
|
||||||
|
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||||
|
[WHERE ID_PART = ] + TRANSFORM(gnIdConcord), 'ctests1')
|
||||||
|
loFormS = CREATEOBJECT('cauta_alfa_form', 'ctests1', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||||
|
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||||
|
loFormS.crs_cursor = 'ctests1'
|
||||||
|
loFormS.lAles = .F.
|
||||||
|
loVerifS = CREATEOBJECT('anaf_verif_cautare')
|
||||||
|
ADDPROPERTY(loFormS, 'oVerifAlegere', loVerifS)
|
||||||
|
loVerifS.Activeaza(loFormS)
|
||||||
|
loFormS.WindowType = 0
|
||||||
|
loFormS.Show()
|
||||||
|
SELECT ctests1
|
||||||
|
GO TOP
|
||||||
|
lnInainte = gnANAFCallCount
|
||||||
|
loFormS._GRID1.AfterRowColChange(1)
|
||||||
|
DO AsteaptaTimer WITH loVerifS
|
||||||
|
lcCapS = ALLTRIM(loFormS.lb_anaf.Caption)
|
||||||
|
IF gnANAFCallCount = lnInainte AND 'ANAF nu a raspuns - verificare sarita' $ lcCapS ;
|
||||||
|
AND loFormS.lb_anaf.ForeColor = RGB(112,112,112) AND !loFormS.lb_anaf.FontBold
|
||||||
|
DO VpaLog WITH 'PASS stare-cazuta-zero-apeluri (S1): stare CAZUT -> 0 apeluri ANAF, banda gri [' + lcCapS + ']'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL stare-cazuta-zero-apeluri (S1): apeluri noi=' + TRANSFORM(gnANAFCallCount - lnInainte) + ;
|
||||||
|
' label=[' + lcCapS + '] ForeColor=' + TRANSFORM(loFormS.lb_anaf.ForeColor) + ' Bold=' + TRANSFORM(loFormS.lb_anaf.FontBold)
|
||||||
|
ENDIF
|
||||||
|
loVerifS.Dezactiveaza()
|
||||||
|
loFormS.Release()
|
||||||
|
IF USED('ctests1')
|
||||||
|
USE IN ctests1
|
||||||
|
ENDIF
|
||||||
|
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'reset dupa test S1')
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE VerificaBandaCazutDistinctaDePrompt
|
||||||
|
*-- S6 (handoff_anaf_404.md): banda gri "ANAF nu a raspuns - verificare sarita" (stare CAZUT) e
|
||||||
|
*-- DISTINCTA de promptul gri generic "Verificare ANAF la alegerea partenerului (F4 = detalii)" -
|
||||||
|
*-- regresia care ascundea initial defectul (fara ea, utilizatorul nu distinge "inca neverificat"
|
||||||
|
*-- de "ANAF picat").
|
||||||
|
LOCAL loFormB, loVerifB, lnOk, lcPromptGeneric, lcBandaCazut
|
||||||
|
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||||
|
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||||
|
ENDIF
|
||||||
|
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||||
|
[WHERE ID_PART = ] + TRANSFORM(gnIdConcord), 'ctests6')
|
||||||
|
loFormB = CREATEOBJECT('cauta_alfa_form', 'ctests6', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||||
|
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||||
|
loFormB.crs_cursor = 'ctests6'
|
||||||
|
loFormB.lAles = .F.
|
||||||
|
loVerifB = CREATEOBJECT('anaf_verif_cautare')
|
||||||
|
ADDPROPERTY(loFormB, 'oVerifAlegere', loVerifB)
|
||||||
|
loVerifB.Activeaza(loFormB) && Activeaza cheama AfiseazaPrompt() - captureaza promptul generic
|
||||||
|
loFormB.WindowType = 0
|
||||||
|
loFormB.Show()
|
||||||
|
lcPromptGeneric = ALLTRIM(loFormB.lb_anaf.Caption)
|
||||||
|
|
||||||
|
ANAF_SeteazaStareServiciu('CAZUT', 'test S6')
|
||||||
|
SELECT ctests6
|
||||||
|
GO TOP
|
||||||
|
loFormB._GRID1.AfterRowColChange(1)
|
||||||
|
DO AsteaptaTimer WITH loVerifB
|
||||||
|
lcBandaCazut = ALLTRIM(loFormB.lb_anaf.Caption)
|
||||||
|
|
||||||
|
IF !(m.lcPromptGeneric == m.lcBandaCazut) AND 'Verificare ANAF la alegerea partenerului' $ m.lcPromptGeneric ;
|
||||||
|
AND 'ANAF nu a raspuns - verificare sarita' $ m.lcBandaCazut
|
||||||
|
DO VpaLog WITH 'PASS banda-cazut-distincta (S6): prompt generic=[' + m.lcPromptGeneric + '] vs banda CAZUT=[' + m.lcBandaCazut + ']'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL banda-cazut-distincta (S6): prompt=[' + m.lcPromptGeneric + '] banda=[' + m.lcBandaCazut + ']'
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
loVerifB.Dezactiveaza()
|
||||||
|
loFormB.Release()
|
||||||
|
IF USED('ctests6')
|
||||||
|
USE IN ctests6
|
||||||
|
ENDIF
|
||||||
|
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'reset dupa test S6')
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE VerificaEsecNuSeCacheaza
|
||||||
|
*-- S5 (handoff_anaf_404.md): esecul (FARA_RASPUNS) NU se scrie in cache; dupa ce serviciul revine
|
||||||
|
*-- (stare VIU), ACELASI CUI se verifica din nou si primeste verdict - blocheaza regresia "verdict
|
||||||
|
*-- lipsa pana la repornirea programului". goANAFMockData primeste STRING 'FARA_RASPUNS' pt. cheia
|
||||||
|
*-- CUI-ului de test (vezi mock_anaf_verificare.prg), apoi e inlocuita cu obiectul de succes.
|
||||||
|
LOCAL lnOk, loFormE1, loVerifE1, loFormE2, loVerifE2, lnInainte, lcCap1, lcCap2, loRespCadere
|
||||||
|
|
||||||
|
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||||
|
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||||
|
ENDIF
|
||||||
|
IF goANAFMockData.GetKey('C9000055') <> 0
|
||||||
|
goANAFMockData.Remove('C9000055')
|
||||||
|
ENDIF
|
||||||
|
goANAFMockData.Add('FARA_RASPUNS', 'C9000055')
|
||||||
|
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'pregatire S5')
|
||||||
|
|
||||||
|
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||||
|
[WHERE ID_PART = ] + TRANSFORM(gnIdCadere), 'ctests5a')
|
||||||
|
loFormE1 = CREATEOBJECT('cauta_alfa_form', 'ctests5a', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||||
|
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||||
|
loFormE1.crs_cursor = 'ctests5a'
|
||||||
|
loFormE1.lAles = .F.
|
||||||
|
loVerifE1 = CREATEOBJECT('anaf_verif_cautare')
|
||||||
|
ADDPROPERTY(loFormE1, 'oVerifAlegere', loVerifE1)
|
||||||
|
loVerifE1.Activeaza(loFormE1)
|
||||||
|
loFormE1.WindowType = 0
|
||||||
|
loFormE1.Show()
|
||||||
|
SELECT ctests5a
|
||||||
|
GO TOP
|
||||||
|
lnInainte = gnANAFCallCount
|
||||||
|
loFormE1._GRID1.AfterRowColChange(1)
|
||||||
|
DO AsteaptaTimer WITH loVerifE1
|
||||||
|
lcCap1 = ALLTRIM(loFormE1.lb_anaf.Caption)
|
||||||
|
|
||||||
|
IF gnANAFCallCount = lnInainte + 1 AND 'ANAF nu a raspuns - verificare sarita' $ lcCap1 ;
|
||||||
|
AND goCacheANAF_Sesiune.GetKey('C9000055_' + DTOS(DATE())) = 0
|
||||||
|
DO VpaLog WITH 'PASS esec-nu-se-cacheaza (S5, pas 1): apel ANAF esuat (' + TRANSFORM(gnANAFCallCount - lnInainte) + ;
|
||||||
|
' apel nou), banda=[' + lcCap1 + '], NU s-a scris in cache'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL esec-nu-se-cacheaza (S5, pas 1): apeluri noi=' + TRANSFORM(gnANAFCallCount - lnInainte) + ;
|
||||||
|
' banda=[' + lcCap1 + '] cache-key=' + TRANSFORM(goCacheANAF_Sesiune.GetKey('C9000055_' + DTOS(DATE())))
|
||||||
|
ENDIF
|
||||||
|
loVerifE1.Dezactiveaza()
|
||||||
|
loFormE1.Release()
|
||||||
|
IF USED('ctests5a')
|
||||||
|
USE IN ctests5a
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
*-- serviciul revine: inlocuieste intrarea mock cu un obiect de succes real + stare VIU (fara sa
|
||||||
|
*-- astepte cele 10 minute de expirare CAZUT - vezi ANAF_SeteazaStareServiciu, ocautare.prg)
|
||||||
|
goANAFMockData.Remove('C9000055')
|
||||||
|
loRespCadere = CREATEOBJECT('Empty')
|
||||||
|
ADDPROPERTY(loRespCadere, 'cui', '9000055')
|
||||||
|
ADDPROPERTY(loRespCadere, 'scpTVA', .T.)
|
||||||
|
ADDPROPERTY(loRespCadere, 'statusInactivi', .F.)
|
||||||
|
ADDPROPERTY(loRespCadere, 'denumire', 'CADERE SRL ANAF')
|
||||||
|
ADDPROPERTY(loRespCadere, 'mesaj', '')
|
||||||
|
goANAFMockData.Add(loRespCadere, 'C9000055')
|
||||||
|
ANAF_SeteazaStareServiciu('VIU', 'revenire S5')
|
||||||
|
|
||||||
|
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||||
|
[WHERE ID_PART = ] + TRANSFORM(gnIdCadere), 'ctests5b')
|
||||||
|
loFormE2 = CREATEOBJECT('cauta_alfa_form', 'ctests5b', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||||
|
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||||
|
loFormE2.crs_cursor = 'ctests5b'
|
||||||
|
loFormE2.lAles = .F.
|
||||||
|
loVerifE2 = CREATEOBJECT('anaf_verif_cautare')
|
||||||
|
ADDPROPERTY(loFormE2, 'oVerifAlegere', loVerifE2)
|
||||||
|
loVerifE2.Activeaza(loFormE2)
|
||||||
|
loFormE2.WindowType = 0
|
||||||
|
loFormE2.Show()
|
||||||
|
SELECT ctests5b
|
||||||
|
GO TOP
|
||||||
|
lnInainte = gnANAFCallCount
|
||||||
|
loFormE2._GRID1.AfterRowColChange(1)
|
||||||
|
DO AsteaptaTimer WITH loVerifE2
|
||||||
|
lcCap2 = ALLTRIM(loFormE2.lb_anaf.Caption)
|
||||||
|
|
||||||
|
IF gnANAFCallCount = lnInainte + 1 AND 'ANAF: Platitor TVA' $ lcCap2 AND 'CADERE SRL ANAF' $ lcCap2
|
||||||
|
DO VpaLog WITH 'PASS esec-nu-se-cacheaza (S5, pas 2): dupa revenire (VIU), acelasi CUI 9000055 se re-verifica (' + ;
|
||||||
|
TRANSFORM(gnANAFCallCount - lnInainte) + ' apel nou) si primeste verdict [' + lcCap2 + ']'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL esec-nu-se-cacheaza (S5, pas 2): apeluri noi=' + TRANSFORM(gnANAFCallCount - lnInainte) + ' banda=[' + lcCap2 + ']'
|
||||||
|
ENDIF
|
||||||
|
loVerifE2.Dezactiveaza()
|
||||||
|
loFormE2.Release()
|
||||||
|
IF USED('ctests5b')
|
||||||
|
USE IN ctests5b
|
||||||
|
ENDIF
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE VerificaCodNenumeric
|
||||||
|
*-- P8 (handoff_anaf_404.md, acelasi tipar ca si cazul real FANALEX din design-alegere-partener-anaf.md,
|
||||||
|
*-- dar cu text disponibil pentru testare - textul EXACT real coincide cu un partener preexistent in
|
||||||
|
*-- schema, vezi nota din antetul fisierului): cod fiscal nenumeric dupa normalizare (litere in loc de
|
||||||
|
*-- cifre) -> banda gri distincta, fara apel ANAF si fara tacere completa (comportamentul dinainte de reparatie).
|
||||||
|
LOCAL loFormN, loVerifN, lnOk, lcCapN, lnInainte
|
||||||
|
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||||
|
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||||
|
ENDIF
|
||||||
|
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV, TIP_PERSOANA FROM NOM_PARTENERI ] + ;
|
||||||
|
[WHERE ID_PART = ] + TRANSFORM(gnIdNenumeric), 'ctestnenum')
|
||||||
|
loFormN = CREATEOBJECT('cauta_alfa_form', 'ctestnenum', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||||
|
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||||
|
loFormN.crs_cursor = 'ctestnenum'
|
||||||
|
loFormN.lAles = .F.
|
||||||
|
loVerifN = CREATEOBJECT('anaf_verif_cautare')
|
||||||
|
ADDPROPERTY(loFormN, 'oVerifAlegere', loVerifN)
|
||||||
|
loVerifN.Activeaza(loFormN)
|
||||||
|
loFormN.WindowType = 0
|
||||||
|
loFormN.Show()
|
||||||
|
SELECT ctestnenum
|
||||||
|
GO TOP
|
||||||
|
lnInainte = gnANAFCallCount
|
||||||
|
loFormN._GRID1.AfterRowColChange(1)
|
||||||
|
DO AsteaptaTimer WITH loVerifN
|
||||||
|
lcCapN = ALLTRIM(loFormN.lb_anaf.Caption)
|
||||||
|
IF gnANAFCallCount = lnInainte AND lcCapN == CHR(149) + ' Cod fiscal nenumeric - nu se poate verifica la ANAF' ;
|
||||||
|
AND loFormN.lb_anaf.ForeColor = RGB(112,112,112) AND !loFormN.lb_anaf.FontBold
|
||||||
|
DO VpaLog WITH 'PASS cod-nenumeric (P8): cod fiscal "TEST NENUMERIC OIL MARKET SRL" (tiparul cazului real FANALEX) -> banda gri distincta, fara apel ANAF - [' + lcCapN + ']'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL cod-nenumeric (P8): apeluri noi=' + TRANSFORM(gnANAFCallCount - lnInainte) + ' label=[' + lcCapN + ']'
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
*-- F4 (Detalii) pe cod nenumeric: text nou dedicat (cClasaEsec == 'COD_NENUMERIC'), distinct de
|
||||||
|
*-- "Codul fiscal nu exista la ANAF." si "ANAF nu a raspuns - verificarea a fost sarita." (ocautare.prg)
|
||||||
|
LOCAL lnLenInainte, lcLog
|
||||||
|
lnLenInainte = IIF(FILE(gcUILog), LEN(FILETOSTR(gcUILog)), 0)
|
||||||
|
loVerifN.Detalii()
|
||||||
|
lcLog = SUBSTR(FILETOSTR(gcUILog), lnLenInainte + 1)
|
||||||
|
IF 'MOCK amessagebox' $ lcLog AND 'Codul fiscal nu este numeric - nu se poate verifica la ANAF.' $ lcLog ;
|
||||||
|
AND !('Codul fiscal nu exista la ANAF.' $ lcLog) AND !('verificarea a fost sarita' $ lcLog)
|
||||||
|
DO VpaLog WITH 'PASS cod-nenumeric-detalii (P8): F4 arata textul dedicat codului nenumeric, distinct de negasit/fara-raspuns'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL cod-nenumeric-detalii (P8): log=[' + lcLog + ']'
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
loVerifN.Dezactiveaza()
|
||||||
|
loFormN.Release()
|
||||||
|
IF USED('ctestnenum')
|
||||||
|
USE IN ctestnenum
|
||||||
|
ENDIF
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE VerificaFixtureContract404
|
||||||
|
*-- F1 (handoff_anaf_404.md), REVIZUIT dupa T5/sonda: logica de verdict a fost extrasa in
|
||||||
|
*-- ANAF_VerdictDinCursor (validare.prg) - fixture-ul apeleaza acum FUNCTIA REALA (nu o replica
|
||||||
|
*-- locala), peste cursorul produs de ParseJsonANAFv8 (tot cod real, fara HTTP), cu cele doua
|
||||||
|
*-- corpuri MASURATE pe serviciul ANAF real (plan-reparatie-anaf-404-breaker.md, cauza 1).
|
||||||
|
LOCAL loVerif, lcJson404, lcJsonStrain, loObj404, loObjStrain, lcAlias404, lcAliasStrain
|
||||||
|
LOCAL lnCuiCautat, loResult404, loResultStrain, llNegasit404, llNegasitStrain, lcClasa404, lcClasaStrain
|
||||||
|
|
||||||
|
loVerif = CREATEOBJECT("VerificareANAF")
|
||||||
|
lnCuiCautat = 123456789
|
||||||
|
|
||||||
|
*=== corp masurat, status 404: {"found":[],"notFound":[123456789]} -> verdict "inexistent" ===
|
||||||
|
lcJson404 = '{"found":[],"notFound":[123456789]}'
|
||||||
|
lcAlias404 = 'crsFixtureF1a'
|
||||||
|
IF USED(lcAlias404)
|
||||||
|
USE IN (lcAlias404)
|
||||||
|
ENDIF
|
||||||
|
loObj404 = nfjsonread(lcJson404)
|
||||||
|
loVerif.ParseJsonANAFv8(loObj404, lcAlias404)
|
||||||
|
llNegasit404 = .F.
|
||||||
|
lcClasa404 = ''
|
||||||
|
loResult404 = ANAF_VerdictDinCursor(lcAlias404, lnCuiCautat, @llNegasit404, @lcClasa404)
|
||||||
|
IF ISNULL(loResult404) AND llNegasit404 AND EMPTY(lcClasa404)
|
||||||
|
DO VpaLog WITH 'PASS fixture-404-inexistent (F1): ANAF_VerdictDinCursor REALA, corp {"found":[],"notFound":[123456789]} -> tlNegasit=.T., clasa=[]'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL fixture-404-inexistent (F1): rezultat=' + TRANSFORM(VARTYPE(loResult404)) + ' llNegasit=' + TRANSFORM(llNegasit404) + ' clasa=[' + lcClasa404 + ']'
|
||||||
|
ENDIF
|
||||||
|
IF USED(lcAlias404)
|
||||||
|
USE IN (lcAlias404)
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
*=== corp strain (proxy/mentenanta/eroare) - NU trebuie sa dea verdict "inexistent" ===
|
||||||
|
lcJsonStrain = '{"message":"service unavailable"}'
|
||||||
|
lcAliasStrain = 'crsFixtureF1b'
|
||||||
|
IF USED(lcAliasStrain)
|
||||||
|
USE IN (lcAliasStrain)
|
||||||
|
ENDIF
|
||||||
|
loObjStrain = nfjsonread(lcJsonStrain)
|
||||||
|
loVerif.ParseJsonANAFv8(loObjStrain, lcAliasStrain)
|
||||||
|
llNegasitStrain = .F.
|
||||||
|
lcClasaStrain = ''
|
||||||
|
loResultStrain = ANAF_VerdictDinCursor(lcAliasStrain, lnCuiCautat, @llNegasitStrain, @lcClasaStrain)
|
||||||
|
IF ISNULL(loResultStrain) AND !llNegasitStrain AND lcClasaStrain == 'RASPUNS_NEINTELES'
|
||||||
|
DO VpaLog WITH 'PASS fixture-corp-strain (F1): ANAF_VerdictDinCursor REALA, corp {"message":"service unavailable"} -> clasa=RASPUNS_NEINTELES'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL fixture-corp-strain (F1): rezultat=' + TRANSFORM(VARTYPE(loResultStrain)) + ' llNegasit=' + TRANSFORM(llNegasitStrain) + ' clasa=[' + lcClasaStrain + ']'
|
||||||
|
ENDIF
|
||||||
|
IF USED(lcAliasStrain)
|
||||||
|
USE IN (lcAliasStrain)
|
||||||
|
ENDIF
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE VerificaSondaInAer
|
||||||
|
*-- S2 (handoff_anaf_404.md, T5/sonda): sonda in aer (stare SE_TESTEAZA) -> randul NU face apel
|
||||||
|
*-- propriu (gnANAFCallCount neschimbat), banda "ANAF: se verifica <cod>...". Plus (tabelul de
|
||||||
|
*-- moduri de esec): formular inchis CU sonda inca in aer -> starea revine la NECUNOSCUT, nu CAZUT
|
||||||
|
*-- (Dezactiveaza: ANAF_SondaOpreste() + ANAF_SeteazaStareServiciu, ocautare.prg).
|
||||||
|
LOCAL loFormS2, loVerifS2, lnOk, lnInainte, lcCap
|
||||||
|
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||||
|
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||||
|
ENDIF
|
||||||
|
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'pregatire S2')
|
||||||
|
gcMockSondaModo = 'MANUAL'
|
||||||
|
glMockSondaGataManual = .F. && sonda pleaca si NU raspunde inca
|
||||||
|
gnMockSondaPornireCount = 0
|
||||||
|
|
||||||
|
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||||
|
[WHERE ID_PART = ] + TRANSFORM(gnIdConcord), 'ctests2')
|
||||||
|
loFormS2 = CREATEOBJECT('cauta_alfa_form', 'ctests2', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||||
|
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||||
|
loFormS2.crs_cursor = 'ctests2'
|
||||||
|
loFormS2.lAles = .F.
|
||||||
|
loVerifS2 = CREATEOBJECT('anaf_verif_cautare')
|
||||||
|
ADDPROPERTY(loFormS2, 'oVerifAlegere', loVerifS2)
|
||||||
|
loVerifS2.Activeaza(loFormS2) && stare NECUNOSCUT -> porneste sonda (mock) -> SE_TESTEAZA
|
||||||
|
loFormS2.WindowType = 0
|
||||||
|
loFormS2.Show()
|
||||||
|
SELECT ctests2
|
||||||
|
GO TOP
|
||||||
|
lnInainte = gnANAFCallCount
|
||||||
|
loFormS2._GRID1.AfterRowColChange(1) && DupaRand -> EvalueazaRand(.F.) - vede SE_TESTEAZA, NU cheama AsteaptaTimer
|
||||||
|
DOEVENTS FORCE
|
||||||
|
lcCap = ALLTRIM(loFormS2.lb_anaf.Caption)
|
||||||
|
IF gnANAFCallCount = lnInainte AND ANAF_StareServiciu() == 'SE_TESTEAZA' ;
|
||||||
|
AND 'ANAF: se verifica' $ lcCap AND 'RO1112223' $ lcCap AND gnMockSondaPornireCount = 1
|
||||||
|
DO VpaLog WITH 'PASS sonda-in-aer (S2): sonda in aer -> 0 apeluri ANAF, banda [' + lcCap + ']'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL sonda-in-aer (S2): apeluri noi=' + TRANSFORM(gnANAFCallCount - lnInainte) + ' stare=' + ANAF_StareServiciu() + ;
|
||||||
|
' banda=[' + lcCap + '] porniri-sonda=' + TRANSFORM(gnMockSondaPornireCount)
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
*-- inchide formularul CU sonda inca in aer (glMockSondaGataManual ramane .F.) - starea trebuie sa
|
||||||
|
*-- revina la NECUNOSCUT, nu sa ramana blocata (fals) in SE_TESTEAZA sau sa treaca in CAZUT
|
||||||
|
loVerifS2.Dezactiveaza()
|
||||||
|
IF ANAF_StareServiciu() == 'NECUNOSCUT'
|
||||||
|
DO VpaLog WITH 'PASS sonda-inchisa-in-aer (S2): formular inchis cu sonda in aer -> stare revine la NECUNOSCUT'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL sonda-inchisa-in-aer (S2): stare=' + ANAF_StareServiciu()
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
loFormS2.Release()
|
||||||
|
IF USED('ctests2')
|
||||||
|
USE IN ctests2
|
||||||
|
ENDIF
|
||||||
|
gcMockSondaModo = 'AUTO'
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE VerificaSondaReuseste
|
||||||
|
*-- S3 (handoff_anaf_404.md, T5/sonda): sonda reuseste -> stare devine VIU si randul CURENT se
|
||||||
|
*-- re-evalueaza SINGUR (fara navigare noua) - EvalueazaRand nu comite This.nIdPart cat timp
|
||||||
|
*-- lcClasaEsec=='SE_TESTEAZA' (ocautare.prg), deci a doua evaluare pe acelasi rand nu iese
|
||||||
|
*-- devreme pe "acelasi rand" si ajunge la verdictul real. Blocheaza verdictul lipit pe rand.
|
||||||
|
LOCAL loFormS3, loVerifS3, lnOk, lcCap1, lcCap2
|
||||||
|
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||||
|
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||||
|
ENDIF
|
||||||
|
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'pregatire S3')
|
||||||
|
gcMockSondaModo = 'MANUAL'
|
||||||
|
glMockSondaGataManual = .F.
|
||||||
|
glMockSondaReusitaManual = .T.
|
||||||
|
|
||||||
|
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||||
|
[WHERE ID_PART = ] + TRANSFORM(gnIdConcord), 'ctests3')
|
||||||
|
loFormS3 = CREATEOBJECT('cauta_alfa_form', 'ctests3', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||||
|
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||||
|
loFormS3.crs_cursor = 'ctests3'
|
||||||
|
loFormS3.lAles = .F.
|
||||||
|
loVerifS3 = CREATEOBJECT('anaf_verif_cautare')
|
||||||
|
ADDPROPERTY(loFormS3, 'oVerifAlegere', loVerifS3)
|
||||||
|
loVerifS3.Activeaza(loFormS3) && NECUNOSCUT -> porneste sonda (mock) -> SE_TESTEAZA
|
||||||
|
loFormS3.WindowType = 0
|
||||||
|
loFormS3.Show()
|
||||||
|
SELECT ctests3
|
||||||
|
GO TOP
|
||||||
|
loFormS3._GRID1.AfterRowColChange(1)
|
||||||
|
DOEVENTS FORCE
|
||||||
|
lcCap1 = ALLTRIM(loFormS3.lb_anaf.Caption)
|
||||||
|
|
||||||
|
*-- raspunsul soseste, cu succes - FARA sa navighez randul din nou (acelasi rand, acelasi id_part)
|
||||||
|
glMockSondaGataManual = .T.
|
||||||
|
glMockSondaReusitaManual = .T.
|
||||||
|
ANAF_SondaVerifica() && acelasi apel ca in anaf_timer.Timer, inaintea lui EvalueazaRand
|
||||||
|
loVerifS3.VerificaRand(.F.)
|
||||||
|
DOEVENTS FORCE
|
||||||
|
lcCap2 = ALLTRIM(loFormS3.lb_anaf.Caption)
|
||||||
|
|
||||||
|
IF 'ANAF: se verifica' $ lcCap1 AND ANAF_StareServiciu() == 'VIU' AND 'ANAF:' $ lcCap2 AND !('se verifica' $ lcCap2)
|
||||||
|
DO VpaLog WITH 'PASS sonda-reuseste (S3): sonda reusita -> stare VIU, randul curent re-evaluat SINGUR (fara navigare noua) - [' + lcCap1 + '] -> [' + lcCap2 + ']'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL sonda-reuseste (S3): banda1=[' + lcCap1 + '] stare=' + ANAF_StareServiciu() + ' banda2=[' + lcCap2 + ']'
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
loVerifS3.Dezactiveaza()
|
||||||
|
loFormS3.Release()
|
||||||
|
IF USED('ctests3')
|
||||||
|
USE IN ctests3
|
||||||
|
ENDIF
|
||||||
|
gcMockSondaModo = 'AUTO'
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE VerificaSondaExpira
|
||||||
|
*-- S4 (handoff_anaf_404.md, T5/sonda): sonda ramane in aer peste termenul de viata (10s, masurat
|
||||||
|
*-- fata de gtANAF_StareServiciuMoment, PUBLIC in ocautare.prg) -> stare CAZUT, nu ramane blocata
|
||||||
|
*-- in SE_TESTEAZA. "Time travel" pe gtANAF_StareServiciuMoment (global de sesiune expus explicit
|
||||||
|
*-- pentru asta), fara sa astept efectiv 10 secunde reale.
|
||||||
|
LOCAL loFormS4, loVerifS4, lnOk, lcCap
|
||||||
|
IF TYPE('goCacheANAF_Sesiune') = 'O'
|
||||||
|
goCacheANAF_Sesiune = CREATEOBJECT('Collection')
|
||||||
|
ENDIF
|
||||||
|
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'pregatire S4')
|
||||||
|
gcMockSondaModo = 'MANUAL'
|
||||||
|
glMockSondaGataManual = .F. && sonda ramane in aer, nu raspunde niciodata
|
||||||
|
|
||||||
|
lnOk = goExecutor.oExecute([SELECT DISTINCT DENUMIRE, NUME, COD_FISCAL, ID_PART, INACTIV FROM NOM_PARTENERI ] + ;
|
||||||
|
[WHERE ID_PART = ] + TRANSFORM(gnIdConcord), 'ctests4')
|
||||||
|
loFormS4 = CREATEOBJECT('cauta_alfa_form', 'ctests4', '', 'Denumire,Nume,Cod fiscal,Id,Inactiv', ;
|
||||||
|
'denumire,nume,cod_fiscal,id_part,inactiv', .F., '', 1, '', '', '', '')
|
||||||
|
loFormS4.crs_cursor = 'ctests4'
|
||||||
|
loFormS4.lAles = .F.
|
||||||
|
loVerifS4 = CREATEOBJECT('anaf_verif_cautare')
|
||||||
|
ADDPROPERTY(loFormS4, 'oVerifAlegere', loVerifS4)
|
||||||
|
loVerifS4.Activeaza(loFormS4) && NECUNOSCUT -> porneste sonda (mock) -> SE_TESTEAZA
|
||||||
|
loFormS4.WindowType = 0
|
||||||
|
loFormS4.Show()
|
||||||
|
|
||||||
|
*-- da timpul inapoi cu 15s fata de momentul tranzitiei, ca sa simulez expirarea celor 10s fara
|
||||||
|
*-- sa astept efectiv
|
||||||
|
gtANAF_StareServiciuMoment = DATETIME() - 15
|
||||||
|
|
||||||
|
ANAF_SondaVerifica() && acelasi apel ca in anaf_timer.Timer - constata expirarea si inchide sonda
|
||||||
|
SELECT ctests4
|
||||||
|
GO TOP
|
||||||
|
loFormS4._GRID1.AfterRowColChange(1)
|
||||||
|
DOEVENTS FORCE
|
||||||
|
lcCap = ALLTRIM(loFormS4.lb_anaf.Caption)
|
||||||
|
|
||||||
|
IF ANAF_StareServiciu() == 'CAZUT' AND 'ANAF nu a raspuns - verificare sarita' $ lcCap
|
||||||
|
DO VpaLog WITH 'PASS sonda-expira (S4): sonda in aer peste 10s -> stare CAZUT, nu ramane blocata in SE_TESTEAZA - [' + lcCap + ']'
|
||||||
|
ELSE
|
||||||
|
DO VpaLog WITH 'FAIL sonda-expira (S4): stare=' + ANAF_StareServiciu() + ' banda=[' + lcCap + ']'
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
loVerifS4.Dezactiveaza()
|
||||||
|
loFormS4.Release()
|
||||||
|
IF USED('ctests4')
|
||||||
|
USE IN ctests4
|
||||||
|
ENDIF
|
||||||
|
ANAF_SeteazaStareServiciu('NECUNOSCUT', 'reset dupa S4')
|
||||||
|
gcMockSondaModo = 'AUTO'
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE VerificaCascadaOptiuni
|
PROCEDURE VerificaCascadaOptiuni
|
||||||
*-- REVIZIA 4 pct.1: ini '0' bate tot; utilizator bate firma; firma bate hardcodatul;
|
*-- REVIZIA 4 pct.1: ini '0' bate tot; utilizator bate firma; firma bate hardcodatul;
|
||||||
*-- absent != 0 (H7); fara crsOptiuni/crsOptiuniUtilizator -> fara eroare (nivel hardcodat).
|
*-- absent != 0 (H7); fara crsOptiuni/crsOptiuniUtilizator -> fara eroare (nivel hardcodat).
|
||||||
@@ -1440,6 +2074,16 @@ PROCEDURE VerificaDiscriminatorDocumente
|
|||||||
poVerifAlegere.Detalii()
|
poVerifAlegere.Detalii()
|
||||||
lcLog1 = SUBSTR(FILETOSTR(gcUILog), lnLenInainte + 1)
|
lcLog1 = SUBSTR(FILETOSTR(gcUILog), lnLenInainte + 1)
|
||||||
|
|
||||||
|
*-- primul Detalii s-a incheiat cu do_termin() - reface formularul inainte de al doilea
|
||||||
|
goExecutor = loReal
|
||||||
|
DO PregatesteFormularD1a
|
||||||
|
SELECT ctestparteneri
|
||||||
|
LOCATE FOR id_part = gnIdDiscord
|
||||||
|
goFormT._GRID1.AfterRowColChange(1)
|
||||||
|
DO AsteaptaTimer
|
||||||
|
goExecutor = CREATEOBJECT('dummyexecutordoctest')
|
||||||
|
goExecutor.oReal = loReal
|
||||||
|
|
||||||
goExecutor.nIdsConDocumente = gnIdPereche
|
goExecutor.nIdsConDocumente = gnIdPereche
|
||||||
lnLenInainte = IIF(FILE(gcUILog), LEN(FILETOSTR(gcUILog)), 0)
|
lnLenInainte = IIF(FILE(gcUILog), LEN(FILETOSTR(gcUILog)), 0)
|
||||||
poVerifAlegere.Detalii()
|
poVerifAlegere.Detalii()
|
||||||
@@ -1480,8 +2124,9 @@ PROCEDURE VerificaB1LabelGolit
|
|||||||
poVerifAlegere.VerificaRand(.F.)
|
poVerifAlegere.VerificaRand(.F.)
|
||||||
lcCapDupa = ALLTRIM(goFormT.lb_anaf.Caption)
|
lcCapDupa = ALLTRIM(goFormT.lb_anaf.Caption)
|
||||||
|
|
||||||
IF !EMPTY(lcCapInainte) AND EMPTY(lcCapDupa)
|
*-- banda nu ramane goala: fara rezultate revine la textul neutru, nu la verdictul anterior
|
||||||
DO VpaLog WITH 'PASS B1-label-golit (9): verdict anterior [' + lcCapInainte + '] -> golit dupa cautare fara rezultate'
|
IF !EMPTY(lcCapInainte) AND lcCapDupa == CHR(149) + ' Verificare ANAF la alegerea partenerului (F4 = detalii)'
|
||||||
|
DO VpaLog WITH 'PASS B1-label-golit (9): verdict anterior [' + lcCapInainte + '] -> text neutru dupa cautare fara rezultate'
|
||||||
ELSE
|
ELSE
|
||||||
DO VpaLog WITH 'FAIL B1-label-golit (9): inainte=[' + lcCapInainte + '] dupa=[' + lcCapDupa + ']'
|
DO VpaLog WITH 'FAIL B1-label-golit (9): inainte=[' + lcCapInainte + '] dupa=[' + lcCapDupa + ']'
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|||||||
Reference in New Issue
Block a user