Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WsxyCHJYL6W9MZ6FPnH8ax
412 lines
22 KiB
Plaintext
412 lines
22 KiB
Plaintext
* test_storno_e2e.prg
|
|
* Test E2E HEADLESS pentru "Generare XML storno si trimitere la ANAF" din borderoul eFactura:
|
|
* exerseaza codul REAL din anaf_efactura.vcx (metoda do_storno_efactura + clasa
|
|
* frm_storno_efactura), nu copii ale lui. Vezi docs\handoff_storno_efactura.md.
|
|
*
|
|
* Ruleaza direct pe binarul real din proiect (COMUN\CLASE\anaf_efactura.vcx, cu write-back):
|
|
* vfp9.exe -A -T "...\test_storno_e2e.prg"
|
|
*
|
|
* ZERO trimiteri ANAF: Thisform.oAnaf.AnafeFacturaServer e inlocuit cu MockAnafServerStorno
|
|
* (mock_anaf_server_storno.prg) imediat dupa ce forma reala citeste cCodFiscal/lTest de la
|
|
* serverul real. cmdValideaza (ValidareEFacturaANAF, apel HTTP real, hardcodat /prod/ -
|
|
* xmlefactura.prg:1275,1278) NU e apelat; se ocoleste cu SetStare(1) direct.
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
SET DELETED ON
|
|
SET EXACT ON
|
|
SET CENTURY ON
|
|
SET DATE DMY
|
|
SET NULLDISPLAY TO ''
|
|
CLOSE DATABASES
|
|
|
|
PUBLIC gcUILog, gcTestDir, gcTesteDir
|
|
PUBLIC gnPass, gnFail, gnMockRaspuns, gnAmsgCalls, gnMockApeluri
|
|
PUBLIC loAnaf, loForm, loMockSrv, loStornoForm, lnLastErrorNo, lcLastErrorMsg
|
|
DECLARE gaAmsgCalls[1,2]
|
|
DECLARE gaMockApeluri[1,3]
|
|
gnPass = 0
|
|
gnFail = 0
|
|
gnAmsgCalls = 0
|
|
gnMockApeluri = 0
|
|
gnMockRaspuns = 6
|
|
lnLastErrorNo = 0
|
|
lcLastErrorMsg = ''
|
|
|
|
gcTestDir = ADDBS(JUSTPATH(SYS(16)))
|
|
gcTesteDir = ADDBS(JUSTPATH(JUSTPATH(SYS(16))))
|
|
gcUILog = gcTestDir + 'test_storno_e2e_log_real.txt'
|
|
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
|
|
|
ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
ON SHUTDOWN QUIT
|
|
|
|
* mock-urile INAINTEA test_init_env_auto: la nume duplicat de procedura castiga fisierul
|
|
* cautat PRIMUL (vezi mock_amessagebox.prg / capcana testare-ui-vfp.md)
|
|
SET PROCEDURE TO (gcTestDir + 'mock_amessagebox_storno.prg') ADDITIVE
|
|
SET PROCEDURE TO (gcTestDir + 'mock_anaf_server_storno.prg') ADDITIVE
|
|
|
|
TRY
|
|
DO (gcTesteDir + 'test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
|
IF gnHandle <= 0
|
|
DO PrLogLocal WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
|
|
QUIT
|
|
ENDIF
|
|
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle) + ' gcS=' + gcS
|
|
|
|
* gnId_Prg_Owner: setat de roacont.prg la pornirea reala a aplicatiei (=0). test_init_env_auto.prg
|
|
* NU il seteaza pentru ROACONT - do_storno_efactura il foloseste direct (is_luna_blocata),
|
|
* fara TYPE()-check => "variable not found" daca lipseste (capcana de mediu, nu bug de aplicatie).
|
|
PUBLIC gnId_Prg_Owner
|
|
gnId_Prg_Owner = 0
|
|
|
|
* gnEFACTURA_*/gcEFACTURA_*: memvari globale create dinamic de optiuni_firma() (oinit_optiuni.prg,
|
|
* apelata din ocomenzi.vc2:6675 la login real) din tabela de optiuni (v_optiuni, macro-substitutie
|
|
* PUBLIC gn&lcvarname.). test_init_env_auto.prg:290 apeleaza ACELASI loader - nu setez manual,
|
|
* doar diagnostichez ce a produs, pentru cele 11 legate de controale in pgfeFactura.Page4
|
|
* (vc2:4952-5201).
|
|
LOCAL i, laEFVars[11], lcEFDiag
|
|
laEFVars[1] = 'gnEFACTURA_ZIP_DATABASE'
|
|
laEFVars[2] = 'gnEFACTURA_SAVE'
|
|
laEFVars[3] = 'gnEFACTURA_SAVE_ANAF_PDF'
|
|
laEFVars[4] = 'gnEFACTURA_VALIDARE_ONLINE'
|
|
laEFVars[5] = 'gcEFACTURA_NETWORK_PATH'
|
|
laEFVars[6] = 'gcEFACTURA_RESPONSESPATH'
|
|
laEFVars[7] = 'gcEFACTURA_SAVE_CLIENTI_FILE'
|
|
laEFVars[8] = 'gcEFACTURA_SAVE_CLIENTI_PATH'
|
|
laEFVars[9] = 'gcEFACTURA_SAVE_FURNIZORI_FILE'
|
|
laEFVars[10] = 'gcEFACTURA_SAVE_FURNIZORI_PATH'
|
|
laEFVars[11] = 'gcEFACTURA_SERVER_PATH'
|
|
FOR i = 1 TO 11
|
|
lcEFDiag = laEFVars[i] + '=TYPE[' + TYPE(laEFVars[i]) + ']'
|
|
IF TYPE(laEFVars[i]) != 'U'
|
|
lcEFDiag = lcEFDiag + ' val=[' + TRANSFORM(EVALUATE(laEFVars[i])) + ']'
|
|
ENDIF
|
|
DO PrLogLocal WITH lcEFDiag
|
|
ENDFOR
|
|
|
|
*=========================================================================
|
|
DO PrLogLocal WITH '=== PAS 0: sursa reala MARIUSM_AUTO.anaf_vefactura_trimis id=1127 (FACTURA TRIMISA) ==='
|
|
LOCAL lnIdSursa, lnTestSursa, ldDataSursa, llLunaBlocataDiag
|
|
lnIdSursa = 0
|
|
* numar_act/data_act nu exista pe tabela anaf_efactura (are xnumar_act/xdata_act) - doar pe
|
|
* view-ul anaf_vefactura_trimis (verificat cu DESC pe MARIUSM_AUTO@ROA_CENTRAL).
|
|
IF !goExecutor.oExecuta("select id, numar_act, data_act, test, tip_mesaj_raspuns from anaf_vefactura_trimis where id = 1127", "cSursa")
|
|
DO PrLogLocal WITH 'FAIL: select sursa id=1127: ' + ALLTRIM(NVL(goExecutor.cEroare,''))
|
|
QUIT
|
|
ENDIF
|
|
IF RECCOUNT('cSursa') = 0
|
|
DO PrLogLocal WITH 'FAIL: id=1127 nu exista in MARIUSM_AUTO.anaf_vefactura_trimis'
|
|
QUIT
|
|
ENDIF
|
|
SELECT cSursa
|
|
lnIdSursa = id
|
|
lnTestSursa = NVL(test, 0)
|
|
ldDataSursa = data_act
|
|
DO PrLogLocal WITH 'sursa: id=' + TRANSFORM(lnIdSursa) + ' numar=[' + ALLTRIM(NVL(numar_act, '')) + '] data=' + DTOC(ldDataSursa) + ' test=' + TRANSFORM(lnTestSursa) + ' tip_mesaj=' + ALLTRIM(NVL(tip_mesaj_raspuns, ''))
|
|
USE IN (SELECT('cSursa'))
|
|
|
|
llLunaBlocataDiag = IS_LUNA_BLOCATA(gcS, gnId_Prg_Owner, YEAR(ldDataSursa), MONTH(ldDataSursa))
|
|
DO PrLogLocal WITH 'diagnostic is_luna_blocata(' + TRANSFORM(YEAR(ldDataSursa)) + '/' + TRANSFORM(MONTH(ldDataSursa)) + ')=' + TRANSFORM(llLunaBlocataDiag) + ' (informativ - daca e .T., formularul de storno nu va aparea deloc)'
|
|
|
|
*=========================================================================
|
|
DO PrLogLocal WITH '=== PAS 1: cursoarele borderoului (copie fluxul real ANAFeFactura.vizeFactura, anaf_efactura.prg:2867+) ==='
|
|
PUBLIC poFacturiEmise, poFacturiPrimite, poFacturiTrimise, poFacturiDetalii
|
|
LOCAL lcData1, lcSchema, lcSelect, lcFiltru, lcFiltruOriginal, lcOrder, lcgroup, llModParam, llAfiseaza
|
|
lcData1 = '01' + PADL(INT(gnLuna), 2, '0') + ALLTRIM(STR(gnAn))
|
|
|
|
* FACTURI PRIMITE (goale - nu sunt necesare pentru storno, dar cursorul trebuie sa existe:
|
|
* lipsa lui a lasat formularul cu controale incomplete intr-o sesiune anterioara - vezi
|
|
* testare-ui-vfp.md, capcana j)
|
|
TEXT TO lcSchema NOSHOW
|
|
ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), id_incarcare C(36), id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4), descriere M null, detalii_plata M null, diferenta N(16,4), procesat N(1), tip_persoana N(1) null, descarcat N(1) null, filepath c(250) null, procesat_server N(1) null, creditnote N(1)
|
|
ENDTEXT
|
|
TEXT TO lcSelect NOSHOW
|
|
SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, id_incarcare, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, decode(creditnote,0,1,-1) * NVL(total_cu_tva, 0.00)-NVL(jtotctva, 0.00) as diferenta, procesat, tip_persoana, descarcat, filepath, procesat_server, creditnote FROM anaf_vefactura_primit
|
|
ENDTEXT
|
|
lcOrder = [data_act,numar_act,data_raspuns]
|
|
lcgroup = []
|
|
lcFiltru = [1=2]
|
|
lcFiltruOriginal = []
|
|
llModParam = .T.
|
|
llAfiseaza = .F.
|
|
gencursor('poFacturiPrimite', 'crsFacturiPrimite', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
|
|
poFacturiPrimite.ca_baza1.afisare()
|
|
SELECT crsFacturiPrimite
|
|
GO TOP
|
|
|
|
* FACTURI TRIMISE - filtru tintit pe sursa reala (id=1127), nu pe luna curenta
|
|
TEXT TO lcSchema NOSHOW
|
|
ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), id_incarcare C(36), id_descarcare c(36) null, mesaj_trimis C(250) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4), descriere M null, detalii_plata M null, diferenta N(16,4), procesat N(1), tip_persoana N(1) null, descarcat N(1) null, filepath c(250) null, procesat_server N(1) null, creditnote N(1)
|
|
ENDTEXT
|
|
TEXT TO lcSelect NOSHOW
|
|
SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, id_incarcare, id_descarcare, mesaj_trimis, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, decode(creditnote,0,1,-1) * NVL(total_cu_tva, 0.00)-NVL(jtotctva, 0.00) as diferenta, procesat, tip_persoana, descarcat, filepath, procesat_server, creditnote FROM anaf_vefactura_trimis
|
|
ENDTEXT
|
|
lcOrder = [data_act,numar_act,data_trimis,data_raspuns]
|
|
lcgroup = []
|
|
lcFiltru = [id = 1127]
|
|
lcFiltruOriginal = []
|
|
llModParam = .T.
|
|
llAfiseaza = .F.
|
|
gencursor('poFacturiTrimise', 'crsFacturiTrimise', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
|
|
poFacturiTrimise.ca_baza1.afisare()
|
|
SELECT crsFacturiTrimise
|
|
GO TOP
|
|
DO TVerdict WITH RECCOUNT('crsFacturiTrimise') = 1 AND NVL(crsFacturiTrimise.Id, 0) = lnIdSursa, 'PRECONDITIE crsFacturiTrimise populat cu id=1127 (flux real gencursor)', 'reccount=' + TRANSFORM(RECCOUNT('crsFacturiTrimise')) + ' id curent=' + TRANSFORM(NVL(crsFacturiTrimise.Id, 0))
|
|
|
|
* FACTURI EMISE (goale)
|
|
TEXT TO lcSchema NOSHOW
|
|
ales N(1), id N(20), id_fact N(20), id_vanzare N(10), data_act D, numar_act N(14), in_valuta N(1) null, curs N(10,4) null, valval N(16,2), tvaval N(16,2),totval N(16,2), total_fara_tva N(16,2), total_tva N(16,2), total_cu_tva N(16,2), nume_valuta C(5) null, client C(100), id_client N(10), cod_fiscal C(30), tip_persoana N(1) null, trimis N(1) null, data_trimis T null, stare C(100) null, id_incarcare C(36) null, mesaj_trimis C(250) null, id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, xfurnizor C(200), xclient C(200), xdata_act D, xnumar_act C(30), xtotal_fara_tva N(16,4), xtotal_tva N(16,4), xtotal_tva_ron N(16,4), xtotal_cu_tva N(16,4), xdiscount_fara_tva N(16,4), xtaxe_fara_tva N(16,4), xvaloare_fara_tva N(16,4), xtotal_de_plata N(16,4), xnume_valuta C(5), test N(1) null, id_util N(10), utilizator C(100), jtotctva N(16,4), diferenta N(16,4), procesat N(1), procesat_server N(1), creditnote N(1)
|
|
ENDTEXT
|
|
TEXT TO lcSelect NOSHOW
|
|
SELECT 0 as ales, id, id_fact, id_vanzare, data_act, numar_act, in_valuta, curs, valval, tvaval, totval, total_fara_tva, total_tva,total_cu_tva, nume_valuta, client, id_client, cod_fiscal, NVL(tip_persoana,1) as tip_persoana, NVL(trimis,0) as trimis, data_trimis, stare, id_incarcare, mesaj_trimis, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, xfurnizor, xclient, xdata_act, xnumar_act, xtotal_fara_tva, xtotal_tva, xtotal_tva_ron, xtotal_cu_tva, xdiscount_fara_tva, xtaxe_fara_tva, xvaloare_fara_tva, xtotal_de_plata, xnume_valuta, test, id_util, utilizator, jtotctva, decode(creditnote,0,1,-1) * ROUND(NVL(xtotal_cu_tva , 0.00) * decode(in_valuta,1,curs,1), 2)-NVL(jtotctva, 0.00) as diferenta, procesat, procesat_server,creditnote FROM anaf_vefactura_emis
|
|
ENDTEXT
|
|
lcOrder = [data_act,numar_act]
|
|
lcgroup = []
|
|
lcFiltru = [1=2]
|
|
lcFiltruOriginal = []
|
|
llModParam = .T.
|
|
llAfiseaza = .F.
|
|
gencursor('poFacturiEmise', 'crsFacturiEmise', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
|
|
poFacturiEmise.ca_baza1.afisare()
|
|
|
|
* DETALII (goale)
|
|
TEXT TO lcSchema NOSHOW
|
|
id N(20), id_efactura N(20), nr N(5), articol V(250), descriere V(250), detalii M, cantitate N(18,6), um V(20), pret N(20,6), proctva N(7,2), valoarefaratva N(20,6), discountfaratva N(20,6)
|
|
ENDTEXT
|
|
TEXT TO lcSelect NOSHOW
|
|
select id, id_efactura, nr, articol, descriere, detalii, cantitate, um, pret, proctva, valoarefaratva, discountfaratva from anaf_vefactura_detalii
|
|
ENDTEXT
|
|
lcOrder = [nr]
|
|
lcgroup = []
|
|
lcFiltru = [1=2]
|
|
lcFiltruOriginal = []
|
|
llModParam = .T.
|
|
llAfiseaza = .F.
|
|
gencursor('poFacturiDetalii', 'crsDetaliiFacturi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
|
|
poFacturiDetalii.ca_baza1.afisare()
|
|
|
|
*=========================================================================
|
|
DO PrLogLocal WITH '=== PAS 2: forma REALA anaf_efactura (modeless) + mock pe AnafeFacturaServer ==='
|
|
LOCAL lcCifReal
|
|
loAnaf = CREATEOBJECT('ANAFeFactura')
|
|
lcCifReal = ALLTRIM(loAnaf.AnafeFacturaServer.cCodFiscal)
|
|
DO PrLogLocal WITH 'AnafeFacturaServer real (INAINTE de inlocuire): cCodFiscal=[' + lcCifReal + '] lTest=' + TRANSFORM(loAnaf.AnafeFacturaServer.lTest)
|
|
|
|
loMockSrv = NEWOBJECT('MockAnafServerStorno', gcTestDir + 'mock_anaf_server_storno.prg')
|
|
loMockSrv.cCodFiscal = lcCifReal
|
|
loMockSrv.lTest = (lnTestSursa = 1)
|
|
loAnaf.AnafeFacturaServer = loMockSrv
|
|
DO PrLogLocal WITH 'AnafeFacturaServer INLOCUIT cu MockAnafServerStorno (ZERO retea): cCodFiscal=[' + loAnaf.AnafeFacturaServer.cCodFiscal + '] lTest=' + TRANSFORM(loAnaf.AnafeFacturaServer.lTest) + ' Class=' + loAnaf.AnafeFacturaServer.Class
|
|
CATCH TO loExOuter
|
|
DO PrLogLocal WITH 'EXCEPTIE NEPRINSA: ' + loExOuter.Message + ' (' + TRANSFORM(loExOuter.LineNo) + ') ' + loExOuter.Procedure
|
|
gnFail = gnFail + 1
|
|
DO PrLogLocal WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
|
QUIT
|
|
ENDTRY
|
|
|
|
* ABATERE: instantiat prin frmtest_anaf.scx (subclasa goala peste anaf_efactura.vcx, stub de test,
|
|
* vezi frmtest_anaf.sc2 in acest folder) in loc de CREATEOBJECT direct pe clasa din .vcx - sfatul
|
|
* lui Marius: instantierea prin forma .scx arata calea COMPLETA a controlului in mesajul de eroare,
|
|
* nu doar numele de baza "_checkbox1". Afara din orice TRY, ca eroarea sa treaca prin ON ERROR
|
|
* (logata cu AERROR, executia continua) in loc sa opreasca testul.
|
|
* CREATEOBJECT('form1', <scx>) a dat "Class definition FORM1 is not found" - .scx foloseste alt
|
|
* mecanism de incarcare decat .vcx; DO FORM e calea nativa pentru clase de forma.
|
|
DO FORM (gcTestDir + 'frmtest_anaf.scx') NAME loForm NOSHOW WITH loAnaf
|
|
IF VARTYPE(loForm) != 'O'
|
|
DO PrLogLocal WITH 'FAIL: DO FORM frmtest_anaf nu a returnat obiect, VARTYPE=' + VARTYPE(loForm)
|
|
QUIT
|
|
ENDIF
|
|
DO PrLogLocal WITH 'loForm creat dupa eroarea 177 (abatere de mediu, consemnata): VARTYPE=O, Class=' + loForm.Class
|
|
|
|
TRY
|
|
DO PrLogLocal WITH 'ClassLibrary anaf_efactura = implicit, via SET CLASSLIB (COMUN\CLASE\anaf_efactura.vcx, binar real cu write-back)'
|
|
* ABATERE: loForm.Show() NU se apeleaza (nu e necesar - do_storno_efactura foloseste doar
|
|
* Thisform.oAnaf si crsFacturiTrimise).
|
|
loForm.WindowType = 0
|
|
DO PrLogLocal WITH 'BORDEROU creat (nu afisat - vezi abaterea de mai sus): Class=' + loForm.Class
|
|
|
|
*=========================================================================
|
|
DO PrLogLocal WITH '=== PAS 3: driver Timer pe _SCREEN (Show(1) in do_storno_efactura e modal si pompeaza mesaje Windows) ==='
|
|
IF TYPE('_SCREEN.tmrDrvStorno') = 'U'
|
|
_SCREEN.ADDOBJECT('tmrDrvStorno', 'Timer')
|
|
ENDIF
|
|
_SCREEN.tmrDrvStorno.Interval = 200
|
|
PUBLIC loDriverStorno
|
|
loDriverStorno = CREATEOBJECT('DriverStorno')
|
|
BINDEVENT(_SCREEN.tmrDrvStorno, 'Timer', loDriverStorno, 'Executa')
|
|
_SCREEN.tmrDrvStorno.Enabled = .T.
|
|
|
|
DO PrLogLocal WITH '=== PAS 4: This.do_storno_efactura() - exact ce apeleaza optiunea de meniu 10 (anaf_efactura.vc2:5829) ==='
|
|
DO PrLogLocal WITH 'ON(ERROR) inainte de do_storno_efactura: [' + ON('ERROR') + ']'
|
|
loForm.do_storno_efactura()
|
|
|
|
_SCREEN.tmrDrvStorno.Enabled = .F.
|
|
TRY
|
|
UNBINDEVENTS(_SCREEN.tmrDrvStorno)
|
|
CATCH
|
|
ENDTRY
|
|
|
|
DO TVerdict WITH loDriverStorno.lDone, 'driverul a ajuns la final (a tratat forma de storno pana la capat)', 'nState final=' + TRANSFORM(loDriverStorno.nState) + ' tick-uri=' + TRANSFORM(loDriverStorno.nTicks)
|
|
|
|
LOCAL i
|
|
IF !loDriverStorno.lDone OR loDriverStorno.nState < 4
|
|
FOR i = 1 TO gnAmsgCalls
|
|
DO PrLogLocal WITH 'AMESSAGEBOX vazut: [' + gaAmsgCalls[i, 1] + '] -> ' + TRANSFORM(gaAmsgCalls[i, 2])
|
|
ENDFOR
|
|
ENDIF
|
|
|
|
DO PrLogLocal WITH 'TOTAL apeluri mock server: ' + TRANSFORM(gnMockApeluri)
|
|
FOR i = 1 TO gnMockApeluri
|
|
DO PrLogLocal WITH ' mock[' + TRANSFORM(i) + '] ' + gaMockApeluri[i, 1] + ' | ' + gaMockApeluri[i, 2] + ' | ' + gaMockApeluri[i, 3]
|
|
ENDFOR
|
|
|
|
TRY
|
|
loForm.Release()
|
|
CATCH
|
|
ENDTRY
|
|
|
|
DO PrLogLocal WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
|
CATCH TO loExOuter
|
|
DO PrLogLocal WITH 'EXCEPTIE NEPRINSA: ' + loExOuter.Message + ' (' + TRANSFORM(loExOuter.LineNo) + ') ' + loExOuter.Procedure
|
|
gnFail = gnFail + 1
|
|
DO PrLogLocal WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
|
ENDTRY
|
|
|
|
QUIT
|
|
|
|
**********************************************************
|
|
PROCEDURE TVerdict
|
|
LPARAMETERS tlCond, tcLabel, tcDetaliu
|
|
IF tlCond
|
|
gnPass = gnPass + 1
|
|
DO PrLogLocal WITH 'PASS ' + tcLabel + ' | ' + TRANSFORM(tcDetaliu)
|
|
ELSE
|
|
gnFail = gnFail + 1
|
|
DO PrLogLocal WITH 'FAIL ' + tcLabel + ' | ' + TRANSFORM(tcDetaliu)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
**********************************************************
|
|
PROCEDURE PrLogLocal
|
|
LPARAMETERS tcMsg
|
|
LOCAL lcL
|
|
SET SAFETY OFF
|
|
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
|
STRTOFILE(lcL + TTOC(DATETIME()) + ' ' + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
|
|
ENDPROC
|
|
|
|
**********************************************************
|
|
PROCEDURE PrErrLocal
|
|
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
|
LOCAL laErrDetail[1], i, lcDetail
|
|
lnLastErrorNo = tnError
|
|
lcLastErrorMsg = TRANSFORM(tcMessage)
|
|
DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
|
|
AERROR(laErrDetail)
|
|
lcDetail = ''
|
|
FOR i = 1 TO ALEN(laErrDetail, 1)
|
|
lcDetail = lcDetail + TRANSFORM(i) + '=[' + TRANSFORM(NVL(laErrDetail[i], '')) + '] '
|
|
ENDFOR
|
|
DO PrLogLocal WITH 'AERROR: ' + lcDetail
|
|
ENDPROC
|
|
|
|
**********************************************************
|
|
FUNCTION ExistaApelMock
|
|
LPARAMETERS tcMetoda
|
|
LOCAL i
|
|
FOR i = 1 TO gnMockApeluri
|
|
IF gaMockApeluri[i, 1] == tcMetoda
|
|
RETURN .T.
|
|
ENDIF
|
|
ENDFOR
|
|
RETURN .F.
|
|
ENDFUNC
|
|
|
|
**********************************************************
|
|
* Driver pentru dialogul modal Show(1) al frm_storno_efactura (deschis din interiorul
|
|
* do_storno_efactura). Vezi COMUN\docs\testare-ui-vfp.md, sectiunea "Dialoguri modale (Show(1))",
|
|
* varianta B: Timer pe _SCREEN, detectie prin _SCREEN.Forms (nu _SCREEN.ActiveForm - nu merge
|
|
* headless).
|
|
DEFINE CLASS DriverStorno AS Custom
|
|
nState = 0
|
|
nTicks = 0
|
|
lDone = .F.
|
|
|
|
PROCEDURE Executa
|
|
LOCAL loStorno, i, llRet
|
|
LOCAL loExD
|
|
This.nTicks = This.nTicks + 1
|
|
IF This.nTicks = 1
|
|
DO PrLogLocal WITH 'ON(ERROR) in interiorul DriverStorno.Executa (primul tick): [' + ON('ERROR') + ']'
|
|
ENDIF
|
|
TRY
|
|
DO CASE
|
|
CASE This.nState = 0
|
|
loStorno = .NULL.
|
|
FOR i = 1 TO _SCREEN.FormCount
|
|
IF UPPER(_SCREEN.Forms(i).Class) == 'FRM_STORNO_EFACTURA'
|
|
loStorno = _SCREEN.Forms(i)
|
|
EXIT
|
|
ENDIF
|
|
ENDFOR
|
|
IF ISNULL(loStorno)
|
|
IF This.nTicks > 150
|
|
DO PrLogLocal WITH 'DRIVER FAIL: frm_storno_efactura nu a aparut in ~30s (nState=0)'
|
|
gnFail = gnFail + 1
|
|
This.lDone = .T.
|
|
_SCREEN.tmrDrvStorno.Enabled = .F.
|
|
ENDIF
|
|
RETURN
|
|
ENDIF
|
|
loStornoForm = loStorno
|
|
DO PrLogLocal WITH 'DRIVER: frm_storno_efactura gasita dupa ' + TRANSFORM(This.nTicks) + ' tick-uri, Class=' + loStorno.Class
|
|
DO TVerdict WITH lnLastErrorNo = 0, 'fara eroare pana la afisarea formei stornului', 'lnLastErrorNo=' + TRANSFORM(lnLastErrorNo) + ' [' + lcLastErrorMsg + ']'
|
|
DO TVerdict WITH RECCOUNT('crsStornoDetalii') > 0, 'grid crsStornoDetalii populat', 'reccount=' + TRANSFORM(RECCOUNT('crsStornoDetalii'))
|
|
DO TVerdict WITH 'TEST' $ UPPER(loStorno.Caption), 'Caption contine TEST', 'caption=[' + loStorno.Caption + ']'
|
|
DO TVerdict WITH UPPER(ALLTRIM(loStorno.lblStare.Caption)) == 'NEVALIDAT', 'stare initiala Nevalidat', 'stare=[' + loStorno.lblStare.Caption + ']'
|
|
DO TVerdict WITH FILE(loStorno.pcFisierStorno), 'fisier storno exista pe disc', 'fisier=[' + loStorno.pcFisierStorno + ']'
|
|
This.nState = 1
|
|
|
|
CASE This.nState = 1
|
|
loStorno = loStornoForm
|
|
loStorno.pcNumarNou = ALLTRIM(loStorno.pcNumarNou) + 'X'
|
|
loStorno.pcMotiv = 'Motiv test E2E'
|
|
llRet = loStorno.RegenereazaXml()
|
|
DO TVerdict WITH llRet, 'RegenereazaXml dupa schimbare numar/motiv', 'numarnou=[' + loStorno.pcNumarNou + '] return=' + TRANSFORM(llRet)
|
|
DO TVerdict WITH RECCOUNT('crsStornoDetalii') > 0, 'grid populat dupa regenerare', 'reccount=' + TRANSFORM(RECCOUNT('crsStornoDetalii'))
|
|
This.nState = 2
|
|
|
|
CASE This.nState = 2
|
|
loStorno = loStornoForm
|
|
loStorno.SetStare(1)
|
|
DO TVerdict WITH UPPER(ALLTRIM(loStorno.lblStare.Caption)) == 'VALID', 'SetStare(1) -> Valid (ocolire ValidareEFacturaANAF, retea reala, cf. instructiuni)', 'stare=[' + loStorno.lblStare.Caption + ']'
|
|
loStorno.cmdTrimite.Click()
|
|
DO TVerdict WITH UPPER(ALLTRIM(loStorno.lblStare.Caption)) == 'TRIMIS', 'dupa cmdTrimite.Click -> Trimis', 'stare=[' + loStorno.lblStare.Caption + ']'
|
|
DO TVerdict WITH ExistaApelMock('TrimiteFacturaXML'), 'mock a primit TrimiteFacturaXML', ''
|
|
This.nState = 3
|
|
|
|
CASE This.nState = 3
|
|
loStorno = loStornoForm
|
|
TRY
|
|
loStorno.Release()
|
|
CATCH TO loExD
|
|
DO PrLogLocal WITH 'DRIVER: eroare la Release: ' + loExD.Message
|
|
ENDTRY
|
|
This.lDone = .T.
|
|
This.nState = 4
|
|
_SCREEN.tmrDrvStorno.Enabled = .F.
|
|
ENDCASE
|
|
CATCH TO loExD
|
|
DO PrLogLocal WITH 'DRIVER EXCEPTIE nState=' + TRANSFORM(This.nState) + ': ' + loExD.Message + ' linia ' + TRANSFORM(loExD.LineNo)
|
|
gnFail = gnFail + 1
|
|
This.lDone = .T.
|
|
_SCREEN.tmrDrvStorno.Enabled = .F.
|
|
TRY
|
|
loStornoForm.Release()
|
|
CATCH
|
|
ENDTRY
|
|
ENDTRY
|
|
ENDPROC
|
|
ENDDEFINE
|