teste ANAF nomenclator: proba e2e pe formularul real + init mediu ROADEF
Proba end-to-end ruleaza formularul frm_firme_nou_desktopf peste nomenclatorul Oracle real; 997/1000 coduri fiscale reale potrivite corect. Testul sintetic acopera 42 de verificari, fara Oracle si fara ANAF. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015husoVS24ewJZr21ZoVR3v
This commit is contained in:
1000
utile/Teste/cache_anaf/codes_1000_reale.txt
Normal file
1000
utile/Teste/cache_anaf/codes_1000_reale.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,13 @@
|
|||||||
* mock_amessagebox.prg - inlocuieste FUNCTION amessagebox (din oproceduri_comune.prg) in teste,
|
* mock_amessagebox.prg - inlocuieste FUNCTION amessagebox (din oproceduri_comune.prg) in teste,
|
||||||
* ca dialogurile modale de confirmare sa NU blocheze testul headless. Returneaza 6 (Da/OK) implicit.
|
* ca dialogurile modale de confirmare sa NU blocheze testul headless. Returneaza 6 (Da/OK) implicit.
|
||||||
* Se incarca ULTIMA cu SET PROCEDURE ... ADDITIVE - in VFP, la nume duplicat de procedura,
|
* Se incarca cu SET PROCEDURE ... ADDITIVE **PRIMA**, INAINTEA fisierelor aplicatiei: la nume
|
||||||
* castiga fisierul de proceduri deschis cel mai recent. Logheaza apelul (dovada rezolutiei).
|
* duplicat de procedura VFP foloseste fisierul cautat PRIMUL (verificat empiric - vezi
|
||||||
|
* COMUN\docs\testare-ui-vfp.md capcana g si antetul lui partener_anaf\mock_anaf_verificare.prg).
|
||||||
|
* 23.08.2026: antetul spunea pana acum "ULTIMA", ceea ce e invers si a costat o rulare blocata
|
||||||
|
* pe un dialog modal (test_e2e_anaf_firma). Logheaza apelul (dovada rezolutiei).
|
||||||
|
* LIMITA: nu acopera sigur apelurile INTRA-FISIER. `verifica_partener_show_info` si `amessagebox`
|
||||||
|
* sunt amandoua in oproceduri_comune.prg, deci dialogul acelei functii ramane modal chiar cu
|
||||||
|
* mock-ul incarcat; pentru el exista partener_anaf\mock_verifica_partener_show_info.prg.
|
||||||
* Configurabil per apel: daca testul declara PUBLIC gnMockRaspuns (implicit 6 daca nedeclarata),
|
* Configurabil per apel: daca testul declara PUBLIC gnMockRaspuns (implicit 6 daca nedeclarata),
|
||||||
* mock-ul returneaza acea valoare - necesar pt. meniuri cu raspunsuri diferite (6/7/2) pe acelasi
|
* mock-ul returneaza acea valoare - necesar pt. meniuri cu raspunsuri diferite (6/7/2) pe acelasi
|
||||||
* dialog (ex. do_sterge/do_copiaza_nota, flag 3+32 Yes/No/Cancel).
|
* dialog (ex. do_sterge/do_copiaza_nota, flag 3+32 Yes/No/Cancel).
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
* mock_verifica_partener_show_info.prg - inlocuieste FUNCTION verifica_partener_show_info
|
||||||
|
* (COMUN\programe\oproceduri_comune.prg:4767) in teste headless.
|
||||||
|
*
|
||||||
|
* DE CE UN MOCK SEPARAT, cand exista deja mock_amessagebox.prg: functia reala se termina cu
|
||||||
|
* `amessagebox(lcText, ...)`, iar acel apel pleaca DIN oproceduri_comune.prg, adica din acelasi
|
||||||
|
* fisier in care e definita si FUNCTION amessagebox. Mock-ul de messagebox nu acopera sigur
|
||||||
|
* apelurile intra-fisier, deci dialogul de confirmare "Doriti sa se completeze datele in
|
||||||
|
* formular?" ramanea modal si bloca rularea headless (masurat: proba se opreste pe primul CIF).
|
||||||
|
* Aici se inlocuieste direct wrapper-ul de dialog - tot infrastructura, nu un pas al fluxului
|
||||||
|
* testat: functia reala doar formateaza un text si intoarce raspunsul utilizatorului.
|
||||||
|
*
|
||||||
|
* Se incarca cu SET PROCEDURE ... ADDITIVE **INAINTEA** fisierelor aplicatiei: la nume duplicat
|
||||||
|
* de FUNCTION, VFP foloseste fisierul cautat PRIMUL (vezi COMUN\docs\testare-ui-vfp.md capcana g).
|
||||||
|
*
|
||||||
|
* Raspunsul intors: gnMockRaspunsShowInfo daca e declarata PUBLIC, altfel 6 (Da).
|
||||||
|
* Efect secundar util testelor: datele BRUTE primite de la ANAF (inainte de potrivirea peste
|
||||||
|
* nomenclator) se depun in variabilele publice de mai jos, daca testul le-a declarat ca string:
|
||||||
|
* gcMockAnafJudet, gcMockAnafLocalitate, gcMockAnafAdresa, gcMockAnafFirma
|
||||||
|
* plus contorul gnMockShowInfoApeluri (numeric), daca e declarat.
|
||||||
|
|
||||||
|
FUNCTION verifica_partener_show_info
|
||||||
|
LPARAMETERS toPartenerVerificare, tcCodFiscal, tcDenumire, tcMesajIntrebare
|
||||||
|
LOCAL lnRaspuns
|
||||||
|
|
||||||
|
IF TYPE('gnMockShowInfoApeluri') = 'N'
|
||||||
|
gnMockShowInfoApeluri = gnMockShowInfoApeluri + 1
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
IF VARTYPE(m.toPartenerVerificare) = 'O'
|
||||||
|
IF TYPE('gcMockAnafJudet') = 'C'
|
||||||
|
gcMockAnafJudet = IIF(PEMSTATUS(m.toPartenerVerificare, 'judet', 5), ;
|
||||||
|
ALLTRIM(NVL(toPartenerVerificare.judet, '')), '')
|
||||||
|
ENDIF
|
||||||
|
IF TYPE('gcMockAnafLocalitate') = 'C'
|
||||||
|
gcMockAnafLocalitate = IIF(PEMSTATUS(m.toPartenerVerificare, 'localitate', 5), ;
|
||||||
|
ALLTRIM(NVL(toPartenerVerificare.localitate, '')), '')
|
||||||
|
ENDIF
|
||||||
|
IF TYPE('gcMockAnafAdresa') = 'C'
|
||||||
|
gcMockAnafAdresa = IIF(PEMSTATUS(m.toPartenerVerificare, 'adresa', 5), ;
|
||||||
|
ALLTRIM(NVL(toPartenerVerificare.adresa, '')), '')
|
||||||
|
ENDIF
|
||||||
|
IF TYPE('gcMockAnafFirma') = 'C'
|
||||||
|
gcMockAnafFirma = IIF(PEMSTATUS(m.toPartenerVerificare, 'firma', 5), ;
|
||||||
|
ALLTRIM(NVL(toPartenerVerificare.firma, '')), '')
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
lnRaspuns = IIF(TYPE('gnMockRaspunsShowInfo') = 'N', gnMockRaspunsShowInfo, 6)
|
||||||
|
RETURN m.lnRaspuns
|
||||||
|
ENDFUNC
|
||||||
299
utile/Teste/partener_anaf/test_e2e_anaf_firma.prg
Normal file
299
utile/Teste/partener_anaf/test_e2e_anaf_firma.prg
Normal file
@@ -0,0 +1,299 @@
|
|||||||
|
* test_e2e_anaf_firma.prg
|
||||||
|
* Proba END-TO-END pentru todo #22 (preluare date ANAF la datele firmei), pe traseul REAL:
|
||||||
|
* formularul frm_firme_nou_desktopf + Click pe But_verifica1 -> anaf_completeaza_firma ->
|
||||||
|
* verifica_partener (apel ANAF live) -> ParseAdresaAnaf/FaraPrefixLoc -> AnafNomenclator ->
|
||||||
|
* Ct_localitate1.modifica_judet / modifica_localitate, peste nomenclatorul Oracle REAL.
|
||||||
|
*
|
||||||
|
* Ce acopera in plus fata de test_anaf_nomenclator.prg: acela ruleaza potrivirea pe cursoare
|
||||||
|
* SINTETICE, in afara formularului. Aici cursoarele sunt cele construite de ct_localitate din
|
||||||
|
* syn_vnom_judete / syn_vnom_localitati (inclusiv randul-santinela "<ALEGETI ...>"), iar
|
||||||
|
* apasarea e pe butonul real - conform regulii: testele pe frontend exerseaza fluxul real,
|
||||||
|
* nu populeaza direct cursoarele.
|
||||||
|
*
|
||||||
|
* ATENTIE (1): foloseste test_init_env_auto_ROADEF, nu test_init_env_auto.prg. Acela porneste pe
|
||||||
|
* D:\ROA\ROACONT\, alt working copy de COMUN, fara modificarile necomise de aici - ar testa
|
||||||
|
* codul vechi si ar da rezultate false.
|
||||||
|
* ATENTIE (2): tot codul care construieste obiecte sta INLINE in programul principal, nu in
|
||||||
|
* proceduri (capcana l din COMUN\docs\testare-ui-vfp.md), iar TRY/CATCH nu contine RETURN
|
||||||
|
* (VFP9: eroare 2060 "RETURN/RETRY statement not allowed in TRY/CATCH").
|
||||||
|
*
|
||||||
|
* Rulare headless (nu tine VFP IDE sau roadef.exe deschis):
|
||||||
|
* Remove-Item <acest .prg cu extensia .fxp> -Force
|
||||||
|
* & "C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe" -A -T ;
|
||||||
|
* "D:\ROA\ROADEF\COMUN\utile\Teste\partener_anaf\test_e2e_anaf_firma.prg"
|
||||||
|
* Log: test_e2e_anaf_firma_log.txt, langa acest fisier.
|
||||||
|
*
|
||||||
|
* Numarul de coduri fiscale rulate: gnE2ELimita (implicit 8). Codurile vin din
|
||||||
|
* ..\cache_anaf\codes_200_reale.txt (coduri reale). Fiecare cod = un apel ANAF live.
|
||||||
|
|
||||||
|
SET SAFETY OFF
|
||||||
|
SET TALK OFF
|
||||||
|
|
||||||
|
PUBLIC gcLogE2E, gnOk, gnEsec, gnSarite, gnE2ELimita, goNomE2E, ;
|
||||||
|
gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip, ;
|
||||||
|
gnMockRaspunsShowInfo, gnMockShowInfoApeluri, ;
|
||||||
|
gcMockAnafJudet, gcMockAnafLocalitate, gcMockAnafAdresa, gcMockAnafFirma
|
||||||
|
gcLogE2E = ADDBS(JUSTPATH(SYS(16, 0))) + 'test_e2e_anaf_firma_log.txt'
|
||||||
|
IF EMPTY(JUSTPATH(SYS(16, 0)))
|
||||||
|
gcLogE2E = 'D:\ROA\ROADEF\COMUN\utile\Teste\partener_anaf\test_e2e_anaf_firma_log.txt'
|
||||||
|
ENDIF
|
||||||
|
gnOk = 0
|
||||||
|
gnEsec = 0
|
||||||
|
gnSarite = 0
|
||||||
|
* cate coduri se ruleaza: implicit 8, sau variabila de mediu E2E_LIMITA (ex. 200 pentru
|
||||||
|
* o masuratoare completa) - vfp9.exe nu poate primi parametri pentru scriptul din -T
|
||||||
|
gnE2ELimita = IIF(VAL(GETENV('E2E_LIMITA')) > 0, INT(VAL(GETENV('E2E_LIMITA'))), 8)
|
||||||
|
goNomE2E = .NULL.
|
||||||
|
gnMockRaspuns = 6 && "Da" la dialogurile amessagebox
|
||||||
|
gcMockUltimMesaj = '' && mock_amessagebox memoreaza aici textul ultimului dialog
|
||||||
|
gnMockUltimTip = 0
|
||||||
|
gnMockRaspunsShowInfo = 6 && "Da" la "Doriti sa se completeze datele in formular?"
|
||||||
|
gnMockShowInfoApeluri = 0
|
||||||
|
* datele BRUTE de la ANAF, depuse de mock_verifica_partener_show_info INAINTE de potrivire
|
||||||
|
gcMockAnafJudet = ''
|
||||||
|
gcMockAnafLocalitate = ''
|
||||||
|
gcMockAnafAdresa = ''
|
||||||
|
gcMockAnafFirma = ''
|
||||||
|
|
||||||
|
STRTOFILE('START test_e2e_anaf_firma ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLogE2E)
|
||||||
|
|
||||||
|
ON ERROR DO E2EErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||||
|
ON SHUTDOWN QUIT
|
||||||
|
|
||||||
|
* ===== mock-urile de dialoguri, INAINTEA fisierelor aplicatiei =====
|
||||||
|
* La nume duplicat de FUNCTION, VFP foloseste fisierul cautat PRIMUL
|
||||||
|
* (COMUN\docs\testare-ui-vfp.md capcana g). Incarcate DUPA mediu, dialogurile raman modale
|
||||||
|
* si rularea headless se blocheaza pe primul CIF (masurat: proba s-a oprit pe 10117033).
|
||||||
|
SET PROCEDURE TO D:\ROA\ROADEF\COMUN\utile\Teste\partener_anaf\mock_verifica_partener_show_info.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO D:\ROA\ROADEF\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
||||||
|
|
||||||
|
* ===== mediu =====
|
||||||
|
DO D:\ROA\ROADEF\COMUN\utile\Teste\test_init_env_auto_roadef.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||||
|
IF TYPE('gnHandle') <> 'N' OR gnHandle <= 0
|
||||||
|
DO E2ELog WITH 'EROARE: conectare Oracle esuata, gnHandle=' + TRANSFORM(IIF(TYPE('gnHandle') = 'N', gnHandle, -1))
|
||||||
|
DO E2ELog WITH 'REZULTAT: NEDETERMINAT'
|
||||||
|
QUIT
|
||||||
|
ENDIF
|
||||||
|
DO E2ELog WITH 'mediu OK: gcS=' + gcS + ' gnIdFirma=' + TRANSFORM(gnIdFirma) + ;
|
||||||
|
' gnScrieRegistru=' + TRANSFORM(gnScrieRegistru) + ' gcNumeProgram=' + gcNumeProgram
|
||||||
|
|
||||||
|
* ===== dovada 1: rulam pe COMUN-ul din ROADEF, cu fixul din todo #22 =====
|
||||||
|
LOCAL llAreFix, loEx AS Exception
|
||||||
|
llAreFix = .F.
|
||||||
|
TRY
|
||||||
|
goNomE2E = CREATEOBJECT('AnafNomenclator')
|
||||||
|
llAreFix = (VARTYPE(goNomE2E) = 'O')
|
||||||
|
CATCH TO loEx
|
||||||
|
llAreFix = .F.
|
||||||
|
ENDTRY
|
||||||
|
DO E2ELog WITH 'AnafNomenclator disponibil: ' + IIF(m.llAreFix, 'DA', 'NU')
|
||||||
|
IF !m.llAreFix
|
||||||
|
DO E2ELog WITH 'REZULTAT: NEDETERMINAT - s-a incarcat un COMUN fara fixul din todo #22'
|
||||||
|
QUIT
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
* ===== dovada 2: mock-ul de dialog a castigat =====
|
||||||
|
* Cu obiect gol, functia REALA moare la loPartener.platitortvamfin inainte de amessagebox;
|
||||||
|
* mock-ul intoarce 6 fara sa deschida nimic. Daca nu castiga, rularea s-ar bloca pe primul modal.
|
||||||
|
LOCAL loDummyE2E, lnProbaMock
|
||||||
|
loDummyE2E = CREATEOBJECT('empty')
|
||||||
|
lnProbaMock = -1
|
||||||
|
TRY
|
||||||
|
lnProbaMock = verifica_partener_show_info(m.loDummyE2E, '0', '', 'proba mock')
|
||||||
|
CATCH TO loEx
|
||||||
|
lnProbaMock = -2
|
||||||
|
ENDTRY
|
||||||
|
gnMockShowInfoApeluri = 0
|
||||||
|
DO E2ELog WITH 'mock verifica_partener_show_info activ: ' + ;
|
||||||
|
IIF(m.lnProbaMock = 6, 'DA', 'NU (raspuns ' + TRANSFORM(m.lnProbaMock) + ')')
|
||||||
|
IF m.lnProbaMock <> 6
|
||||||
|
DO E2ELog WITH 'REZULTAT: NEDETERMINAT - fara mock, primul dialog modal blocheaza rularea headless'
|
||||||
|
QUIT
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
* ===== firma curenta, ca in oproceduri_roadef.viz_firme =====
|
||||||
|
LOCAL lcSqlFirma
|
||||||
|
lcSqlFirma = [select * from syn_v_nom_firme where sters = 0 and id_firma = ] + ALLTRIM(STR(goFirma.id_firma))
|
||||||
|
IF !goExecutor.oExecuta(m.lcSqlFirma, 'crsFirmaE2E') OR RECCOUNT('crsFirmaE2E') = 0
|
||||||
|
DO E2ELog WITH 'EROARE: nu am putut citi firma curenta (' + m.lcSqlFirma + ')'
|
||||||
|
DO E2ELog WITH 'REZULTAT: NEDETERMINAT'
|
||||||
|
QUIT
|
||||||
|
ENDIF
|
||||||
|
SELECT crsFirmaE2E
|
||||||
|
GO TOP
|
||||||
|
DO E2ELog WITH 'firma de lucru: id_firma=' + TRANSFORM(id_firma) + ' [' + ALLTRIM(NVL(firma, '')) + ']'
|
||||||
|
|
||||||
|
* ===== lista de coduri fiscale reale =====
|
||||||
|
LOCAL lcFisCoduri, lnTotalCoduri, lnI, lcCod
|
||||||
|
LOCAL ARRAY laCoduri[1]
|
||||||
|
* lotul de coduri: implicit cel de 200, sau variabila de mediu E2E_CODURI (cale completa)
|
||||||
|
lcFisCoduri = ALLTRIM(GETENV('E2E_CODURI'))
|
||||||
|
IF EMPTY(m.lcFisCoduri)
|
||||||
|
lcFisCoduri = 'D:\ROA\ROADEF\COMUN\utile\Teste\cache_anaf\codes_200_reale.txt'
|
||||||
|
ENDIF
|
||||||
|
IF !FILE(m.lcFisCoduri)
|
||||||
|
DO E2ELog WITH 'EROARE: lipseste ' + m.lcFisCoduri
|
||||||
|
DO E2ELog WITH 'REZULTAT: NEDETERMINAT'
|
||||||
|
QUIT
|
||||||
|
ENDIF
|
||||||
|
lnTotalCoduri = ALINES(laCoduri, FILETOSTR(m.lcFisCoduri))
|
||||||
|
DO E2ELog WITH 'lot: ' + m.lcFisCoduri
|
||||||
|
DO E2ELog WITH 'coduri disponibile: ' + TRANSFORM(m.lnTotalCoduri) + ', rulez primele ' + TRANSFORM(gnE2ELimita)
|
||||||
|
DO E2ELog WITH REPLICATE('-', 110)
|
||||||
|
|
||||||
|
* ===== rulare: un cod fiscal = un formular nou + un Click pe butonul real =====
|
||||||
|
* Totul inline (capcana l): CREATEOBJECT pe formular dintr-o procedura e nesigur headless.
|
||||||
|
PRIVATE poRec
|
||||||
|
LOCAL lnRulate, loFrm, llFrmOk, llClickOk, lcErr
|
||||||
|
LOCAL lcAdrAnaf, lcJudAnaf, lcLocAnaf, lcJudet, lcLoc, lnIdJudet, lnIdLoc
|
||||||
|
LOCAL llOkJud, llOkLoc, lcDetaliu
|
||||||
|
lnRulate = 0
|
||||||
|
|
||||||
|
FOR lnI = 1 TO m.lnTotalCoduri
|
||||||
|
lcCod = ALLTRIM(laCoduri[m.lnI])
|
||||||
|
IF !EMPTY(m.lcCod) AND ISDIGIT(m.lcCod) AND m.lnRulate < gnE2ELimita
|
||||||
|
lnRulate = m.lnRulate + 1
|
||||||
|
|
||||||
|
* record proaspat pentru fiecare cod, direct din cursorul firmei (ca in viz_firme:
|
||||||
|
* Select v_firme / Scatter Name loRec), ca sa nu ramana stare de la codul anterior.
|
||||||
|
* Plasa: _frm_base.Destroy face USE IN (SELECT(thisform.ccursor)) si, cu ccursor gol,
|
||||||
|
* poate inchide zona de lucru curenta - refacem cursorul daca s-a pierdut.
|
||||||
|
IF !USED('crsFirmaE2E')
|
||||||
|
IF !goExecutor.oExecuta(m.lcSqlFirma, 'crsFirmaE2E')
|
||||||
|
DO E2ELog WITH 'CIF ' + m.lcCod + ' -> ESEC: nu am putut reface crsFirmaE2E'
|
||||||
|
gnEsec = gnEsec + 1
|
||||||
|
LOOP
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
SELECT crsFirmaE2E
|
||||||
|
GO TOP
|
||||||
|
SCATTER NAME poRec MEMO
|
||||||
|
* golim campurile pe care le completeaza traseul ANAF, ca sa nu confundam o valoare
|
||||||
|
* ramasa din firma curenta cu una preluata acum
|
||||||
|
poRec.cod_fiscal = m.lcCod
|
||||||
|
poRec.judet = ''
|
||||||
|
poRec.id_judet = .NULL.
|
||||||
|
poRec.localitate = ''
|
||||||
|
poRec.id_loc = .NULL.
|
||||||
|
poRec.adresa = ''
|
||||||
|
IF TYPE('poRec.modificare_schema') = 'U'
|
||||||
|
ADDPROPERTY(poRec, 'modificare_schema', 0)
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
gcMockUltimMesaj = ''
|
||||||
|
gcMockAnafJudet = ''
|
||||||
|
gcMockAnafLocalitate = ''
|
||||||
|
gcMockAnafAdresa = ''
|
||||||
|
gcMockAnafFirma = ''
|
||||||
|
gnMockShowInfoApeluri = 0
|
||||||
|
|
||||||
|
llFrmOk = .F.
|
||||||
|
lcErr = ''
|
||||||
|
TRY
|
||||||
|
loFrm = CREATEOBJECT('frm_firme_nou_desktopf', poRec, poRec.id_firma, 'UPDATE')
|
||||||
|
llFrmOk = (VARTYPE(loFrm) = 'O')
|
||||||
|
CATCH TO loEx
|
||||||
|
lcErr = loEx.Message + ' [' + loEx.Procedure + ':' + TRANSFORM(loEx.LineNo) + ']'
|
||||||
|
ENDTRY
|
||||||
|
|
||||||
|
IF !m.llFrmOk
|
||||||
|
gnEsec = gnEsec + 1
|
||||||
|
DO E2ELog WITH 'CIF ' + m.lcCod + ' -> ESEC: nu s-a putut crea formularul: ' + m.lcErr
|
||||||
|
ELSE
|
||||||
|
llClickOk = .F.
|
||||||
|
lcErr = ''
|
||||||
|
TRY
|
||||||
|
loFrm.But_verifica1.Click()
|
||||||
|
llClickOk = .T.
|
||||||
|
CATCH TO loEx
|
||||||
|
lcErr = loEx.Message + ' [' + loEx.Procedure + ':' + TRANSFORM(loEx.LineNo) + ']'
|
||||||
|
ENDTRY
|
||||||
|
|
||||||
|
IF !m.llClickOk
|
||||||
|
gnEsec = gnEsec + 1
|
||||||
|
DO E2ELog WITH 'CIF ' + m.lcCod + ' -> ESEC: exceptie in But_verifica1.Click: ' + m.lcErr
|
||||||
|
ELSE
|
||||||
|
lcAdrAnaf = UPPER(ALLTRIM(gcMockAnafAdresa))
|
||||||
|
lcJudAnaf = UPPER(ALLTRIM(gcMockAnafJudet))
|
||||||
|
lcLocAnaf = UPPER(ALLTRIM(gcMockAnafLocalitate))
|
||||||
|
lcJudet = ALLTRIM(NVL(poRec.judet, ''))
|
||||||
|
lcLoc = ALLTRIM(NVL(poRec.localitate, ''))
|
||||||
|
lnIdJudet = NVL(poRec.id_judet, -1)
|
||||||
|
lnIdLoc = NVL(poRec.id_loc, -1)
|
||||||
|
|
||||||
|
IF gnMockShowInfoApeluri = 0 OR EMPTY(m.lcJudAnaf)
|
||||||
|
* ANAF n-a intors un partener valid, sau l-a intors fara adresa (cod inactiv /
|
||||||
|
* fara raspuns / notFound): nu se poate judeca potrivirea peste nomenclator
|
||||||
|
gnSarite = gnSarite + 1
|
||||||
|
DO E2ELog WITH 'CIF ' + m.lcCod + ' -> SARIT: ANAF nu a intors adresa. Ultim dialog: [' + ;
|
||||||
|
LEFT(STRTRAN(STRTRAN(gcMockUltimMesaj, CHR(13), ' '), CHR(10), ' '), 150) + ']'
|
||||||
|
ELSE
|
||||||
|
* judetul e OK daca s-a completat, are id din nomenclator si denumirea potrivita
|
||||||
|
* corespunde textului brut primit de la ANAF
|
||||||
|
llOkJud = !EMPTY(m.lcJudet) AND m.lnIdJudet > 0 AND E2EPotrivit(m.lcJudet, m.lcJudAnaf)
|
||||||
|
* localitatea: la fel; santinela "<ALEGETI LOCALITATEA>" NU e rezultat valid
|
||||||
|
llOkLoc = !EMPTY(m.lcLoc) AND !('<ALEGETI' $ UPPER(m.lcLoc)) AND m.lnIdLoc > 0 ;
|
||||||
|
AND E2EPotrivit(m.lcLoc, m.lcLocAnaf)
|
||||||
|
|
||||||
|
lcDetaliu = 'ANAF[jud=' + m.lcJudAnaf + ' loc=' + m.lcLocAnaf + ']' + ;
|
||||||
|
' -> NOM[judet=' + m.lcJudet + ' id_judet=' + TRANSFORM(m.lnIdJudet) + ;
|
||||||
|
' localitate=' + m.lcLoc + ' id_loc=' + TRANSFORM(m.lnIdLoc) + ']'
|
||||||
|
|
||||||
|
IF m.llOkJud AND m.llOkLoc
|
||||||
|
gnOk = gnOk + 1
|
||||||
|
DO E2ELog WITH 'CIF ' + m.lcCod + ' -> OK ' + m.lcDetaliu
|
||||||
|
ELSE
|
||||||
|
gnEsec = gnEsec + 1
|
||||||
|
DO E2ELog WITH 'CIF ' + m.lcCod + ' -> ESEC ' + ;
|
||||||
|
IIF(!m.llOkJud, '[judet] ', '') + IIF(!m.llOkLoc, '[localitate] ', '') + m.lcDetaliu
|
||||||
|
DO E2ELog WITH ' adresa ANAF: ' + LEFT(m.lcAdrAnaf, 150)
|
||||||
|
DO E2ELog WITH ' ultim dialog: [' + ;
|
||||||
|
LEFT(STRTRAN(STRTRAN(gcMockUltimMesaj, CHR(13), ' '), CHR(10), ' '), 200) + ']'
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
loFrm.Release()
|
||||||
|
loFrm = .NULL.
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
|
DO E2ELog WITH REPLICATE('-', 110)
|
||||||
|
DO E2ELog WITH 'TOTAL: ' + TRANSFORM(gnOk) + ' ok, ' + TRANSFORM(gnEsec) + ' esec, ' + ;
|
||||||
|
TRANSFORM(gnSarite) + ' sarite (fara raspuns ANAF), din ' + TRANSFORM(m.lnRulate) + ' coduri rulate'
|
||||||
|
DO E2ELog WITH 'REZULTAT: ' + IIF(gnEsec = 0, 'TOATE OK', 'AU FOST ESECURI') + ' ' + TTOC(DATETIME())
|
||||||
|
QUIT
|
||||||
|
|
||||||
|
|
||||||
|
*********************************************************************
|
||||||
|
* Denumirea aleasa din nomenclator corespunde textului brut de la ANAF?
|
||||||
|
* Comparatia foloseste cheia toleranta a clasei (fara sufixul dintre paranteze, fara
|
||||||
|
* separatoare, cu A si I unificate) - altfel "TIRGU MURES" din nomenclator nu ar corespunde
|
||||||
|
* cu "TARGU MURES" de la ANAF si am raporta un esec fals.
|
||||||
|
* goNomE2E e construit INLINE in main (capcana l); aici doar se foloseste.
|
||||||
|
FUNCTION E2EPotrivit
|
||||||
|
LPARAMETERS tcDinNomenclator, tcDeLaAnaf
|
||||||
|
LOCAL lcA, lcB
|
||||||
|
IF VARTYPE(goNomE2E) <> 'O' OR EMPTY(ALLTRIM(NVL(m.tcDeLaAnaf, '')))
|
||||||
|
RETURN .F.
|
||||||
|
ENDIF
|
||||||
|
lcA = goNomE2E.cheie_fuzzy(m.tcDinNomenclator)
|
||||||
|
lcB = goNomE2E.cheie_fuzzy(m.tcDeLaAnaf)
|
||||||
|
RETURN !EMPTY(m.lcA) AND (m.lcA == m.lcB)
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
|
||||||
|
*********************************************************************
|
||||||
|
PROCEDURE E2EErr
|
||||||
|
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||||
|
DO E2ELog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
|
*********************************************************************
|
||||||
|
PROCEDURE E2ELog
|
||||||
|
LPARAMETERS tcMsg
|
||||||
|
LOCAL lcL
|
||||||
|
lcL = IIF(FILE(gcLogE2E), FILETOSTR(gcLogE2E), '')
|
||||||
|
STRTOFILE(m.lcL + TRANSFORM(m.tcMsg) + CHR(13) + CHR(10), gcLogE2E)
|
||||||
|
ENDPROC
|
||||||
167
utile/Teste/test_anaf_nomenclator.prg
Normal file
167
utile/Teste/test_anaf_nomenclator.prg
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
*!* 23.08.2026
|
||||||
|
*!* marius.mutu
|
||||||
|
*!* Test headless pentru potrivirea denumirilor ANAF peste nomenclator: taierea prefixului in
|
||||||
|
*!* ParseAdresaAnaf si treptele din AnafNomenclator (exact / fara sufix / fuzzy A-I).
|
||||||
|
|
||||||
|
Local lcLog, lcComun, loV, loN, lnOk, lnNok
|
||||||
|
|
||||||
|
lcComun = Addbs(Justpath(Justpath(Justpath(Sys(16)))))
|
||||||
|
lcLog = Addbs(Justpath(Sys(16))) + "test_anaf_nomenclator_log.txt"
|
||||||
|
If File(m.lcLog)
|
||||||
|
Erase (m.lcLog)
|
||||||
|
Endif
|
||||||
|
|
||||||
|
Public gnOk, gnNok, gcLog
|
||||||
|
gnOk = 0
|
||||||
|
gnNok = 0
|
||||||
|
gcLog = m.lcLog
|
||||||
|
|
||||||
|
*** fara On Error o eroare de runtime ar deschide un dialog modal si testul ar atarna
|
||||||
|
On Error Strtofile("EROARE " + Transform(Error()) + " linia " + Transform(Lineno()) + ": " + Message() + Chr(13) + Chr(10), m.gcLog, .T.)
|
||||||
|
|
||||||
|
Set Procedure To (m.lcComun + "programe\validare.prg") Additive
|
||||||
|
Set Procedure To (m.lcComun + "programe\onomenclatoare.prg") Additive
|
||||||
|
|
||||||
|
loV = Createobject("VerificareANAF")
|
||||||
|
loN = Createobject("AnafNomenclator")
|
||||||
|
|
||||||
|
*** --- FaraPrefixLoc: prefixul se taie, restul denumirii ramane intreg ---
|
||||||
|
Verif("prefix JUD. un cuvant", loV.FaraPrefixLoc("JUD. CONSTANTA"), "CONSTANTA")
|
||||||
|
Verif("prefix JUD. doua cuvinte", loV.FaraPrefixLoc("JUD. SATU MARE"), "SATU MARE")
|
||||||
|
Verif("prefix ORS.", loV.FaraPrefixLoc("ORS. TIRGU NEAMT"), "TIRGU NEAMT")
|
||||||
|
Verif("prefix MUN. cu cratima", loV.FaraPrefixLoc("MUN. CLUJ-NAPOCA"), "CLUJ-NAPOCA")
|
||||||
|
Verif("prefix COM.", loV.FaraPrefixLoc("COM. AGHIRESU"), "AGHIRESU")
|
||||||
|
Verif("prefix SAT fara punct", loV.FaraPrefixLoc("SAT AGHIRESU-FABRICI"), "AGHIRESU-FABRICI")
|
||||||
|
Verif("fara prefix", loV.FaraPrefixLoc("CONSTANTA"), "CONSTANTA")
|
||||||
|
*** forma NEprescurtata: pe Bucuresti ANAF trimite "MUNICIPIUL BUCURESTI", nu "JUD. BUCURESTI"
|
||||||
|
Verif("prefix MUNICIPIUL", loV.FaraPrefixLoc("MUNICIPIUL BUCURESTI"), "BUCURESTI")
|
||||||
|
Verif("prefix JUDETUL", loV.FaraPrefixLoc("JUDETUL CLUJ"), "CLUJ")
|
||||||
|
*** ORASUL/COMUNA/SATUL NU se taie: exista localitati care chiar incep asa
|
||||||
|
Verif("ORASUL NU e prefix", loV.FaraPrefixLoc("ORASUL NOU"), "ORASUL NOU")
|
||||||
|
|
||||||
|
*** --- ParseAdresaAnaf: adresa completa, inclusiv cazul Bucuresti ---
|
||||||
|
Local loA
|
||||||
|
loA = loV.ParseAdresaAnaf("JUD. SATU MARE, MUN. SATU MARE, STR. LALELELOR, NR.12")
|
||||||
|
Verif("adresa judet doua cuvinte", loA.judet, "SATU MARE")
|
||||||
|
Verif("adresa loc doua cuvinte", loA.localitate, "SATU MARE")
|
||||||
|
|
||||||
|
loA = loV.ParseAdresaAnaf("MUN. BUCURESTI, SECTOR 1, STR. AVIATORILOR, NR.2")
|
||||||
|
Verif("bucuresti judet", loA.judet, "BUCURESTI")
|
||||||
|
Verif("bucuresti sectorul", loA.localitate, "BUCURESTI SECTORUL 1")
|
||||||
|
|
||||||
|
*** forma pe care o trimite ANAF in realitate (masurat pe 200 de coduri reale): nu "MUN.", ci
|
||||||
|
*** "MUNICIPIUL", si fara "JUD." pe primul element
|
||||||
|
loA = loV.ParseAdresaAnaf("MUNICIPIUL BUCURESTI, SECTOR 1, STR EMANOIL PORUMBARU, NR.90-92")
|
||||||
|
Verif("bucuresti real judet", loA.judet, "BUCURESTI")
|
||||||
|
Verif("bucuresti real sectorul", loA.localitate, "BUCURESTI SECTORUL 1")
|
||||||
|
|
||||||
|
loA = loV.ParseAdresaAnaf("JUD. CONSTANTA, MUN. CONSTANTA, ALEEA CRIZANTEMELOR, NR.6, BL.H1, SC.F, ET.2, AP.109")
|
||||||
|
Verif("nemodificat judet", loA.judet, "CONSTANTA")
|
||||||
|
Verif("nemodificat loc", loA.localitate, "CONSTANTA")
|
||||||
|
Verif("nemodificat strada", loA.strada, "CRIZANTEMELOR")
|
||||||
|
Verif("nemodificat nr", loA.nr, "6")
|
||||||
|
Verif("nemodificat bloc", loA.Bloc, "H1")
|
||||||
|
Verif("nemodificat apart", loA.apart, "109")
|
||||||
|
|
||||||
|
*** --- AnafNomenclator pe cursoare modelate dupa syn_vnom_* ---
|
||||||
|
Create Cursor crsJudeteT (id_judet I Null, judet C(30))
|
||||||
|
Insert Into crsJudeteT Values (Null, "<ALEGETI JUDETUL>")
|
||||||
|
Insert Into crsJudeteT Values (10, "BUCURESTI")
|
||||||
|
Insert Into crsJudeteT Values (14, "CLUJ")
|
||||||
|
Insert Into crsJudeteT Values (34, "SATU MARE")
|
||||||
|
|
||||||
|
VerifId("judet exact", loN.pozitioneaza_judet("crsJudeteT", "CLUJ"), "crsJudeteT.id_judet", 14)
|
||||||
|
VerifId("judet doua cuvinte", loN.pozitioneaza_judet("crsJudeteT", "SATU MARE"), "crsJudeteT.id_judet", 34)
|
||||||
|
Verif("judet inexistent", Transform(loN.pozitioneaza_judet("crsJudeteT", "ATLANTIDA")), ".F.")
|
||||||
|
|
||||||
|
Create Cursor crsLocT (id_loc I Null, localitate C(45))
|
||||||
|
Insert Into crsLocT Values (Null, "<ALEGETI LOCALITATEA>")
|
||||||
|
Insert Into crsLocT Values (57, "AGHIRESU")
|
||||||
|
Insert Into crsLocT Values (58, "AGHIRESU-FABRICI (COM. AGHIRESU)")
|
||||||
|
Insert Into crsLocT Values (1759, "BUCURESTI SECTORUL 1")
|
||||||
|
Insert Into crsLocT Values (9001, "TIRGU MURES")
|
||||||
|
Insert Into crsLocT Values (9002, "TIRGU NEAMT")
|
||||||
|
Insert Into crsLocT Values (9101, "SATU NOU (COM. ALFA)")
|
||||||
|
Insert Into crsLocT Values (9102, "SATU NOU (COM. BETA)")
|
||||||
|
Insert Into crsLocT Values (9201, "MAMAIA (MUN. CONSTANTA)")
|
||||||
|
Insert Into crsLocT Values (9202, "POIANA (ORS. OVIDIU)")
|
||||||
|
*** omonime departajabile dupa comuna (cazul real GRECI din Olt)
|
||||||
|
Insert Into crsLocT Values (9301, "GRECI (COM. SCHITU)")
|
||||||
|
Insert Into crsLocT Values (9302, "GRECI (COM. OSICA DE SUS)")
|
||||||
|
*** omonime unde marcajul e scris diferit in cele doua surse: nomenclatorul "(ORAS X)",
|
||||||
|
*** ANAF "ORS. X" - departajarea compara doar denumirea comunei/orasului
|
||||||
|
Insert Into crsLocT Values (9401, "STEFANESTI (COM. SUSENI)")
|
||||||
|
Insert Into crsLocT Values (9402, "STEFANESTI (ORAS STEFANESTI)")
|
||||||
|
*** omonime care difera de ANAF SI prin A/I: treapta exacta nu gaseste nimic, cea fuzzy gaseste
|
||||||
|
*** doi - departajarea dupa comuna trebuie sa se aplice si acolo (cazul real SIRBI, Maramures)
|
||||||
|
Insert Into crsLocT Values (9501, "SIRBI (COM. BUDESTI)")
|
||||||
|
Insert Into crsLocT Values (9502, "SIRBI (COM. FARCASA)")
|
||||||
|
|
||||||
|
*** exactul are prioritate: AGHIRESU nu trebuie sa cada pe AGHIRESU-FABRICI
|
||||||
|
VerifId("loc exact", loN.pozitioneaza_localitate("crsLocT", "AGHIRESU"), "crsLocT.id_loc", 57)
|
||||||
|
VerifId("loc fara sufix", loN.pozitioneaza_localitate("crsLocT", "AGHIRESU-FABRICI"), "crsLocT.id_loc", 58)
|
||||||
|
VerifId("loc sector", loN.pozitioneaza_localitate("crsLocT", "BUCURESTI SECTORUL 1"), "crsLocT.id_loc", 1759)
|
||||||
|
*** fuzzy: ANAF trimite forma cu A, nomenclatorul o tine cu I
|
||||||
|
VerifId("loc fuzzy A-I", loN.pozitioneaza_localitate("crsLocT", "TARGU MURES"), "crsLocT.id_loc", 9001)
|
||||||
|
VerifId("loc fuzzy A-I 2", loN.pozitioneaza_localitate("crsLocT", "TARGU NEAMT"), "crsLocT.id_loc", 9002)
|
||||||
|
*** sufix administrativ FARA paranteze - asa il trimite ANAF, intr-un singur element de virgula:
|
||||||
|
*** "JUD. CONSTANTA, SAT AGIGEA COM. AGIGEA, STR. ECLUZEI, NR.1". Nomenclatorul il tine cu
|
||||||
|
*** paranteze, deci ambele forme trebuie sa se reduca la aceeasi denumire.
|
||||||
|
VerifId("loc sufix COM. fara paranteze", ;
|
||||||
|
loN.pozitioneaza_localitate("crsLocT", "AGHIRESU-FABRICI COM. AGHIRESU"), "crsLocT.id_loc", 58)
|
||||||
|
VerifId("loc sufix MUN. fara paranteze", ;
|
||||||
|
loN.pozitioneaza_localitate("crsLocT", "MAMAIA MUN. CONSTANTA"), "crsLocT.id_loc", 9201)
|
||||||
|
VerifId("loc sufix ORS. fara paranteze", ;
|
||||||
|
loN.pozitioneaza_localitate("crsLocT", "POIANA ORS. OVIDIU"), "crsLocT.id_loc", 9202)
|
||||||
|
*** ambiguu: doua sate omonime in comune diferite - se refuza, nu se ghiceste
|
||||||
|
Verif("loc ambiguu refuzat", Transform(loN.pozitioneaza_localitate("crsLocT", "SATU NOU")), ".F.")
|
||||||
|
*** ...dar daca ANAF trimite comuna, omonimele SE departajeaza dupa ea
|
||||||
|
VerifId("omonime departajate dupa comuna", ;
|
||||||
|
loN.pozitioneaza_localitate("crsLocT", "SATU NOU COM. BETA"), "crsLocT.id_loc", 9102)
|
||||||
|
VerifId("omonime departajate, caz real GRECI", ;
|
||||||
|
loN.pozitioneaza_localitate("crsLocT", "GRECI COM. SCHITU"), "crsLocT.id_loc", 9301)
|
||||||
|
*** marcaj scris diferit in cele doua surse: ANAF "ORS. STEFANESTI" vs nomenclator "(ORAS STEFANESTI)"
|
||||||
|
VerifId("omonime, marcaj scris diferit", ;
|
||||||
|
loN.pozitioneaza_localitate("crsLocT", "STEFANESTI ORS. STEFANESTI"), "crsLocT.id_loc", 9402)
|
||||||
|
*** comuna care nu exista printre omonime: NU se ghiceste, ramane refuzat
|
||||||
|
Verif("omonime, comuna necunoscuta refuzata", ;
|
||||||
|
Transform(loN.pozitioneaza_localitate("crsLocT", "GRECI COM. ATLANTIDA")), ".F.")
|
||||||
|
*** fara comuna de la ANAF nu se poate departaja - refuz corect (cazul real STEFANESTI, Arges)
|
||||||
|
Verif("omonime fara comuna refuzate", ;
|
||||||
|
Transform(loN.pozitioneaza_localitate("crsLocT", "STEFANESTI")), ".F.")
|
||||||
|
*** departajarea se aplica SI dupa treapta fuzzy: ANAF "SARBI", nomenclatorul "SIRBI"
|
||||||
|
VerifId("omonime fuzzy departajate dupa comuna", ;
|
||||||
|
loN.pozitioneaza_localitate("crsLocT", "SARBI COM. FARCASA"), "crsLocT.id_loc", 9502)
|
||||||
|
Verif("omonime fuzzy fara comuna refuzate", ;
|
||||||
|
Transform(loN.pozitioneaza_localitate("crsLocT", "SARBI")), ".F.")
|
||||||
|
Verif("loc inexistent", Transform(loN.pozitioneaza_localitate("crsLocT", "ATLANTIDA")), ".F.")
|
||||||
|
|
||||||
|
*** On Error continua executia, deci o verificare sarita (obiect neinstantiat) nu s-ar vedea
|
||||||
|
*** in numarul de esecuri; se verifica explicit ca au rulat toate.
|
||||||
|
If m.gnOk + m.gnNok # 42
|
||||||
|
gnNok = m.gnNok + 1
|
||||||
|
Strtofile("ESEC au rulat doar " + Transform(m.gnOk + m.gnNok) + " verificari din 42" + Chr(13) + Chr(10), m.gcLog, .T.)
|
||||||
|
Endif
|
||||||
|
Strtofile("TOTAL: " + Transform(m.gnOk) + " ok, " + Transform(m.gnNok) + " esec" + Chr(13) + Chr(10), m.gcLog, .T.)
|
||||||
|
Quit
|
||||||
|
|
||||||
|
Procedure Verif
|
||||||
|
Lparameters tcNume, tcObtinut, tcAsteptat
|
||||||
|
Local lcStare
|
||||||
|
If Alltrim(Nvl(m.tcObtinut, "")) == Alltrim(m.tcAsteptat)
|
||||||
|
gnOk = m.gnOk + 1
|
||||||
|
lcStare = "ok "
|
||||||
|
Else
|
||||||
|
gnNok = m.gnNok + 1
|
||||||
|
lcStare = "ESEC "
|
||||||
|
Endif
|
||||||
|
Strtofile(m.lcStare + Padr(m.tcNume, 26) + " obtinut=[" + Alltrim(Nvl(m.tcObtinut, "")) + ;
|
||||||
|
"] asteptat=[" + Alltrim(m.tcAsteptat) + "]" + Chr(13) + Chr(10), m.gcLog, .T.)
|
||||||
|
Endproc
|
||||||
|
|
||||||
|
Procedure VerifId
|
||||||
|
Lparameters tcNume, tlGasit, tcExpresieId, tnAsteptat
|
||||||
|
Local lnId
|
||||||
|
lnId = Iif(m.tlGasit, Nvl(Evaluate(m.tcExpresieId), -1), -1)
|
||||||
|
Verif(m.tcNume, Transform(m.lnId), Transform(m.tnAsteptat))
|
||||||
|
Endproc
|
||||||
263
utile/Teste/test_init_env_auto_roadef.prg
Normal file
263
utile/Teste/test_init_env_auto_roadef.prg
Normal file
@@ -0,0 +1,263 @@
|
|||||||
|
* test_init_env_auto_roadef.prg
|
||||||
|
* Varianta ROADEF a test_init_env_auto.prg (acel fisier e specializat pe ROACONT -
|
||||||
|
* gcAppPath/clase/proceduri hardcodate D:\ROA\ROACONT\ - nu poate initializa mediul ROADEF).
|
||||||
|
* Initializare completa de mediu FARA interactiune, pentru vfp9.exe -A -T.
|
||||||
|
*
|
||||||
|
* MOTIVUL EXISTENTEI: D:\ROA\ROACONT\COMUN si D:\ROA\ROADEF\COMUN sunt doua working copy-uri
|
||||||
|
* SEPARATE ale aceluiasi COMUN din SVN, nu junctions. Un test pornit cu test_init_env_auto.prg
|
||||||
|
* incarca D:\ROA\ROACONT\COMUN\programe\*.prg, deci NU vede modificarile necomise din
|
||||||
|
* D:\ROA\ROADEF\COMUN si da rezultate false (verificat: AnafNomenclator lipseste acolo).
|
||||||
|
* Testele pe cod ROADEF necomis folosesc acest fisier.
|
||||||
|
*
|
||||||
|
* Utilizare:
|
||||||
|
* DO test_init_env_auto_roadef WITH 'CENTRAL', 'MARIUSM_AUTO', 'parola'
|
||||||
|
* IF gnHandle <= 0 ... eroare conectare
|
||||||
|
* Mediu de test standard: server CENTRAL, schema MARIUSM_AUTO.
|
||||||
|
*
|
||||||
|
* Dupa apel sunt disponibile: goConn/goExecutor/goApp/goLog/goApi, goFirma/goCalendar,
|
||||||
|
* gnAn/gnLuna/gcS/gnIdFirma/gnScrieRegistru etc., SET PATH/CLASSLIB/PROCEDURE ca in roadef.prg.
|
||||||
|
* ATENTIE: mentine lista de SET CLASSLIB/PROCEDURE sincronizata cu Programe\roadef.prg.
|
||||||
|
|
||||||
|
LPARAMETERS tcHost, tcSchema, tcPassword, tnAn, tnLuna
|
||||||
|
|
||||||
|
tcHost = IIF(EMPTY(tcHost), 'CENTRAL', tcHost)
|
||||||
|
tcSchema = IIF(EMPTY(tcSchema), 'MARIUSM_AUTO', tcSchema)
|
||||||
|
tcPassword = IIF(EMPTY(tcPassword), 'ROMFASTSOFT', tcPassword)
|
||||||
|
|
||||||
|
SET DELETED ON
|
||||||
|
SET ANSI ON
|
||||||
|
SET EXACT ON
|
||||||
|
SET SAFETY OFF
|
||||||
|
CLOSE DATABASES
|
||||||
|
SET CENTURY ON
|
||||||
|
SET DATE DMY
|
||||||
|
SET NULLDISPLAY TO ''
|
||||||
|
|
||||||
|
PUBLIC CT_SUCCES, CT_INSUCCES, crlf, gnAn, gnLuna, gnIdUtil, glEMama, gnIdFirma, gcCondSucursala, ;
|
||||||
|
gnIdSucursala, gcS, gcFirma, gcUserName, gcUserNameApp, gcNumeProgram, gcAppName, glLunaInchisa, ;
|
||||||
|
buton, gnButon, pnButon, gl406, gcAcces, gnid_prg_owner, gnScrieRegistru, ;
|
||||||
|
pcTitlu, pl_verificat, a4, gcUtilizatoriPath, gcPasswordApp, gcCaleServerDate, ;
|
||||||
|
gnNivelUtilizator, gnGrupUtilizator
|
||||||
|
CT_SUCCES = 1
|
||||||
|
CT_INSUCCES = -1
|
||||||
|
crlf = CHR(13) + CHR(10)
|
||||||
|
gnAn = IIF(EMPTY(tnAn), YEAR(DATE()), tnAn)
|
||||||
|
gnLuna = IIF(EMPTY(tnLuna), MONTH(DATE()), tnLuna)
|
||||||
|
gnIdUtil = -3
|
||||||
|
gnIdFirma = 110
|
||||||
|
gcCondSucursala = []
|
||||||
|
gnIdSucursala = m.gnIdFirma
|
||||||
|
gcS = UPPER(ALLTRIM(tcSchema))
|
||||||
|
gcFirma = m.gcS
|
||||||
|
gcUserName = m.gcS
|
||||||
|
gcUserNameApp = [MARIUS M]
|
||||||
|
gcPasswordApp = []
|
||||||
|
gcNumeProgram = [ROADEF]
|
||||||
|
gcAppName = [ROADEF]
|
||||||
|
glLunaInchisa = .F.
|
||||||
|
glEMama = .F.
|
||||||
|
gl406 = .F.
|
||||||
|
gnid_prg_owner = 0
|
||||||
|
pcTitlu = []
|
||||||
|
pl_verificat = .F.
|
||||||
|
a4 = .T.
|
||||||
|
gnNivelUtilizator = 0
|
||||||
|
gnGrupUtilizator = 0
|
||||||
|
gcCaleServerDate = []
|
||||||
|
* gnScrieRegistru: optiune de firma (registrul electronic al salariatilor). frm_firme_nou.Init
|
||||||
|
* o citeste NEPROTEJAT (ofirma.vc2, "IF gnScrieRegistru = 0"), deci trebuie sa existe INAINTE de
|
||||||
|
* optiuni_firma; daca optiunile o redefinesc mai jos, valoarea lor castiga.
|
||||||
|
gnScrieRegistru = 0
|
||||||
|
* PUBLIC, nu Declare: nrcrt() (oproceduri_comune.prg) citeste NROR din ControlSource-uri
|
||||||
|
* de grid mult dupa ce acest program s-a terminat (Declare ar muri la RETURN)
|
||||||
|
PUBLIC nror(65000)
|
||||||
|
buton = 1
|
||||||
|
gnButon = 1
|
||||||
|
pnButon = 1
|
||||||
|
|
||||||
|
LOCAL lcPath
|
||||||
|
PUBLIC gcAppPath, DIRGEN, gcDirMare, gcBasePath, gcTempPath, gcGeneralIniFile, gcSettingsFile, ;
|
||||||
|
gcSecurityPath, gcSecurityFile
|
||||||
|
gcAppPath = [D:\ROA\ROADEF\]
|
||||||
|
Set Default To (gcAppPath)
|
||||||
|
lcPath = gcAppPath + 'Date;' + ;
|
||||||
|
gcAppPath + 'Include;' + ;
|
||||||
|
gcAppPath + 'FERESTRE;' + ;
|
||||||
|
gcAppPath + 'GRAFICE;' + ;
|
||||||
|
gcAppPath + 'CLASE;' + ;
|
||||||
|
gcAppPath + 'MENIURI;' + ;
|
||||||
|
gcAppPath + 'PROGRAME;' + ;
|
||||||
|
gcAppPath + 'RAPOARTE;' + ;
|
||||||
|
gcAppPath + 'COMUN\CLASE;' + ;
|
||||||
|
gcAppPath + 'COMUN\FERESTRE;' + ;
|
||||||
|
gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||||
|
gcAppPath + 'COMUN\GRAFICE;' + ;
|
||||||
|
gcAppPath + 'COMUN\RAPOARTE;' + ;
|
||||||
|
gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||||
|
gcAppPath + 'COMUN\UTILE\HPDF;' + ;
|
||||||
|
gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||||
|
gcAppPath + 'COMUN\UTILE\WEB;' + ;
|
||||||
|
gcAppPath + 'COMUN\UTILE\NFJSON;' + ;
|
||||||
|
Addbs(Substr(gcAppPath,1,Rat([\],gcAppPath,2)))+[COMUNROA\]
|
||||||
|
SET PATH TO &lcPath ADDITIVE
|
||||||
|
|
||||||
|
Local lcMainClassLib
|
||||||
|
lcMainClassLib = gcAppPath + "clase\ofundal_sal"
|
||||||
|
SET CLASSLIB TO (lcMainClassLib) ADDITIVE
|
||||||
|
SET CLASSLIB TO CAUT ADDITIVE
|
||||||
|
SET CLASSLIB TO ooptiuni ADDITIVE
|
||||||
|
SET CLASSLIB TO ferestre_cere_date ADDITIVE
|
||||||
|
SET CLASSLIB TO oblocare ADDITIVE
|
||||||
|
SET CLASSLIB TO registry ADDITIVE
|
||||||
|
SET CLASSLIB TO decabaza ADDITIVE
|
||||||
|
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||||
|
SET CLASSLIB TO onom_sal ADDITIVE
|
||||||
|
SET CLASSLIB TO cauta_alfa_forms ADDITIVE
|
||||||
|
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||||
|
SET CLASSLIB TO caut_ora ADDITIVE
|
||||||
|
SET CLASSLIB TO otoolbar ADDITIVE
|
||||||
|
SET CLASSLIB TO Messagebox ADDITIVE
|
||||||
|
SET CLASSLIB TO opersonal ADDITIVE
|
||||||
|
SET CLASSLIB TO oasociere ADDITIVE
|
||||||
|
SET CLASSLIB TO ofirma ADDITIVE
|
||||||
|
SET CLASSLIB TO ferestre_roadef ADDITIVE
|
||||||
|
SET CLASSLIB TO oconfigurare_seturi.vcx ADDITIVE
|
||||||
|
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||||
|
SET CLASSLIB TO overificari.vcx ADDITIVE
|
||||||
|
SET CLASSLIB TO appwiz.vcx ADDITIVE
|
||||||
|
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||||
|
|
||||||
|
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||||
|
SET PROCEDURE TO ooperatii_comune ADDITIVE
|
||||||
|
SET PROCEDURE TO quitapp ADDITIVE
|
||||||
|
SET PROCEDURE TO init_program ADDITIVE
|
||||||
|
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||||
|
SET PROCEDURE TO oproceduri_comune ADDITIVE
|
||||||
|
SET PROCEDURE TO gencursor.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO oproceduri_maintenance.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO onomenclatoare ADDITIVE
|
||||||
|
SET PROCEDURE TO oproceduri_ams ADDITIVE
|
||||||
|
SET PROCEDURE TO ocautare ADDITIVE
|
||||||
|
SET PROCEDURE TO oproceduri_roadef_sal ADDITIVE
|
||||||
|
SET PROCEDURE TO oinit_optiuni ADDITIVE
|
||||||
|
SET PROCEDURE TO osecurity ADDITIVE
|
||||||
|
SET PROCEDURE TO oproceduri_roadef ADDITIVE
|
||||||
|
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO ini.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO osalarii_comun.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO proceduri_Excel.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO cauta_alfa.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO oproceduri_app.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO procese.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO version.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO wwApi.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO validare.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO nfjsonread.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO nfjsoncreate.prg ADDITIVE
|
||||||
|
|
||||||
|
Declare Integer GetPrivateProfileString In Kernel32 ;
|
||||||
|
string, String, String, String @, Integer, String
|
||||||
|
Declare Integer WritePrivateProfileString In Kernel32 ;
|
||||||
|
string, String, String, String
|
||||||
|
Declare Integer CopyFile In kernel32 ;
|
||||||
|
STRING lpExistingFileName, STRING lpNewFileName, INTEGER bFailIfExists
|
||||||
|
Declare Integer URLDownloadToFile In urlmon.Dll ;
|
||||||
|
INTEGER pCaller, String szURL, String szFileName, INTEGER dwReserved, Integer lpfnCB
|
||||||
|
Declare Integer PathFileExists In shlwapi STRING pszPath
|
||||||
|
|
||||||
|
If Type('goApi') = 'U'
|
||||||
|
Public goApi
|
||||||
|
goApi = Newobject("wwAPI", "wwAPI.prg")
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
PUBLIC gnHandle, goExecutor, goConn, goFirma, goCalendar, poLog, goLog, goApp
|
||||||
|
DIRGEN = [D:\ROA\]
|
||||||
|
gcDirMare = DIRGEN
|
||||||
|
gcBasePath = DIRGEN
|
||||||
|
gcSecurityPath = DIRGEN + 'Security\'
|
||||||
|
gcSecurityFile = gcSecurityPath + 'ROA_SECURITY.TXT'
|
||||||
|
gcGeneralIniFile = DIRGEN + "settings.ini"
|
||||||
|
gcSettingsFile = m.gcGeneralIniFile
|
||||||
|
gcUtilizatoriPath = gcAppPath + "UTILIZATORI\"
|
||||||
|
gcTempPath = Addbs(Shortpath(goApi.GetTempPath())) + gcS + [\]
|
||||||
|
If !Directory(gcTempPath)
|
||||||
|
Md (gcTempPath)
|
||||||
|
Endif
|
||||||
|
gcAcces = [1;2;3;4;5;6;7;8;]
|
||||||
|
|
||||||
|
poLog = Newobject("Log_Mesaje", "Log_Mesaje.prg")
|
||||||
|
goLog = poLog
|
||||||
|
goApp = Createobject("wzApplication")
|
||||||
|
gnHandle = 0
|
||||||
|
goExecutor = Createobject("oExecutor")
|
||||||
|
goConn = Createobject("oConn")
|
||||||
|
goConn.Connect(m.tcHost, m.tcSchema, m.tcPassword)
|
||||||
|
IF m.gnHandle <= 0
|
||||||
|
RETURN .F.
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
LOCAL llSucces, lcSql
|
||||||
|
goFirma = null
|
||||||
|
llSucces = goExecutor.oExecuta("select * from syn_v_nom_firme where schema = ?gcS", "cFirma")
|
||||||
|
IF m.llSucces
|
||||||
|
SELECT cFirma
|
||||||
|
gnIdFirma = id_firma
|
||||||
|
gnIdSucursala = null
|
||||||
|
gcFirma = ALLTRIM(firma)
|
||||||
|
SCATTER NAME goFirma
|
||||||
|
IF TYPE('goFirma.codfiscalfro') = 'U'
|
||||||
|
ADDPROPERTY(goFirma, 'codfiscalfro', ALLTRIM(STRTRAN(ALLTRIM(NVL(goFirma.cod_fiscal, '')), 'RO', '')))
|
||||||
|
ENDIF
|
||||||
|
ELSE
|
||||||
|
goFirma = CREATEOBJECT('custom')
|
||||||
|
goFirma.addproperty('cod_fiscal', '')
|
||||||
|
goFirma.addproperty('schema', m.gcS)
|
||||||
|
goFirma.addproperty('firma', m.gcS)
|
||||||
|
goFirma.addproperty('codfiscalfro', '')
|
||||||
|
ENDIF
|
||||||
|
USE IN (SELECT('cFirma'))
|
||||||
|
|
||||||
|
goCalendar = null
|
||||||
|
llSucces = goExecutor.oExecuta('SELECT anul, luna, tva_incasare FROM calendar WHERE an*12+luna = (select MAX(an*12+luna) FROM calendar)', 'cCalendar')
|
||||||
|
IF m.llSucces
|
||||||
|
SELECT cCalendar
|
||||||
|
GO TOP
|
||||||
|
IF EMPTY(m.tnAn)
|
||||||
|
gnAn = anul
|
||||||
|
gnLuna = luna
|
||||||
|
ENDIF
|
||||||
|
SCATTER NAME goCalendar
|
||||||
|
ENDIF
|
||||||
|
USE IN (SELECT('cCalendar'))
|
||||||
|
|
||||||
|
CREATE CURSOR dual (dummy c(10))
|
||||||
|
INSERT INTO dual (dummy) VALUES ("")
|
||||||
|
|
||||||
|
actualizeaza_optiuni()
|
||||||
|
Do optiuni_firma IN oinit_optiuni.prg
|
||||||
|
|
||||||
|
lcSql = [begin pack_sesiune.set_Id_Util(?gnIdUtil); end;]
|
||||||
|
llSucces = goExecutor.oExecuta(lcSql)
|
||||||
|
lcSql = [begin pack_sesiune.setluna(?gnLuna); pack_sesiune.setan(?gnAn); end;]
|
||||||
|
llSucces = goExecutor.oExecuta(lcSql)
|
||||||
|
lcSql = [begin pack_sesiune.setlunabal(?gnLuna); pack_sesiune.setanbal(?gnAn); end;]
|
||||||
|
llSucces = goExecutor.oExecuta(lcSql)
|
||||||
|
lcSql = [begin pack_contafin.SET_DATA_RON(?gcS); end;]
|
||||||
|
llSucces = goExecutor.oExecuta(lcSql)
|
||||||
|
lcSql = [begin pack_sesiune.set_data_ron(?gcS); end;]
|
||||||
|
llSucces = goExecutor.oExecuta(lcSql)
|
||||||
|
lcSql = [begin pack_contafin.set_id_sucursala(?gnIdSucursala); end;]
|
||||||
|
llSucces = goExecutor.oExecuta(lcSql)
|
||||||
|
lcSql = [begin pack_contafin.set_id_firma(?gnIdFirma); end;]
|
||||||
|
llSucces = goExecutor.oExecuta(lcSql)
|
||||||
|
|
||||||
|
RETURN .T.
|
||||||
Reference in New Issue
Block a user