* mock_cursor_articole.prg - suportul headless al lui test_s3_4_cursor_articole.prg. * oExecutorMock (subclasa de test a lui oexecutor) intercepteaza DOAR apelul pe cursorul crsarticole: * jurnalizeaza SQL-ul in gcMockSql, construieste un cursor sintetic dupa gcMockMod (PLIN / PLIN2 = si * crsarticole1 pentru contracte / GOL / FARA = niciun cursor) si intoarce gnMockSucces cu nEroare = * gnMockEroare. Orice alt apel (citeste_cursuri_zi) merge la executorul real, prin This.oReal. * vizualizeaza_curs e inlocuita ca sa nu deschida formularul de cursuri la esecul Oracle -20005; se * incarca ULTIMA cu SET PROCEDURE ... ADDITIVE, ca sa castige la rezolutia de nume. * Publicele asteptate de la test: gcMockSql, gcMockMod, gnMockSucces, gnMockEroare, gcMockCurs. DEFINE CLASS oExecutorMock AS oexecutor oReal = NULL PROCEDURE oExecute LPARAMETERS tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect IF !(UPPER(ALLTRIM(TRANSFORM(tcCursor))) == 'CRSARTICOLE') RETURN This.oReal.oExecute(tcSql, tcCursor) ENDIF gcMockSql = gcMockSql + TRANSFORM(tcSql) + CHR(13) + CHR(10) This.nEroare = gnMockEroare This.nSucces = gnMockSucces DO CreeazaArticole WITH gcMockMod RETURN gnMockSucces ENDPROC FUNCTION oPrelucrareEroare RETURN "MOCK eroare Oracle " + TRANSFORM(This.nEroare) ENDFUNC ENDDEFINE * cursorul sintetic de articole: campurile citite de blocul testat (gestionabil, curs/nume_val/id_valuta/ * multiplicator/tip_valuta pentru crscursuri, nume_lista_preturi/id_pol pentru crspolitici, id_gestiune/ * nume_gestiune pentru crsgestiunidest) plus campurile luate cu Scatter pe ramura tnTip = 30 PROCEDURE CreeazaArticole LPARAMETERS tcMod IF USED('crsarticole') USE IN crsarticole ENDIF IF USED('crsarticole1') USE IN crsarticole1 ENDIF IF tcMod == "FARA" RETURN ENDIF CREATE CURSOR crsarticole (id_c N(20), id_articol N(20), id_gestiune N(20), nume_gestiune C(100), ; cont C(4), um C(10), id_valuta N(10), gestionabil N(1), tip_valuta N(1), curs N(20,4), ; multiplicator N(10), codmat C(100), preta N(20,4), pretd N(20,4), id_valuta_d N(15), ; denumire C(100), pretftva N(20,4), pretctva N(20,4), cantitate N(20,4), tvav N(20,4), ; proc_tvav N(20,4), preturi_cu_tva N(1), nume_val C(20), nume_lista_preturi C(100), id_pol N(20)) IF tcMod == "GOL" RETURN ENDIF INSERT INTO crsarticole VALUES (1, 11, 21, "GEST A", "371", "BUC", 1, 1, 1, 4.9, 1, "CM1", ; 10, 11, 1, "Articol A", 100, 119, 2, 19, 1.19, 0, "EUR", "LISTA A", 31) INSERT INTO crsarticole VALUES (2, 12, 22, "GEST B", "371", "BUC", 2, 0, 1, 5.1, 1, "CM2", ; 20, 21, 2, "Articol B", 200, 238, 3, 38, 1.19, 0, "USD", "LISTA B", 32) GO TOP IN crsarticole IF tcMod == "PLIN2" CREATE CURSOR crsarticole1 (id_ctr N(20), numar_contract C(100), data D NULL, numar C(50) NULL) INSERT INTO crsarticole1 VALUES (41, "CTR A", DATE(2026, 1, 1), "A1") INSERT INTO crsarticole1 VALUES (42, "CTR B", DATE(2026, 2, 1), "B1") GO TOP IN crsarticole1 ENDIF ENDPROC * fara formularul de cursuri in headless - jurnalizeaza doar ca a fost chemata PROCEDURE vizualizeaza_curs LPARAMETERS tdDataCurs gcMockCurs = gcMockCurs + "vizualizeaza_curs(" + TRANSFORM(tdDataCurs) + ")" + CHR(13) + CHR(10) ENDPROC