* test_s8_pas5_antet.prg * Verifica IncarcaAntetFacturaEditare/IncarcaListaAvizeSursa (ofacturare_editare.prg), pasul 5 din * docs\propunere_s8_incarcare.md: incarcarea ANTETULUI unui document existent intr-un oDateFactura nou. * Documente reale, gasite prin interogare read-only (nu inventate) pe MARIUSM_AUTO: * 280 - sursa CONTRACT (id_ctr=20), lei * 575 - document SIMPLU (fara comanda/ctr), discount<>0 * 627 - VALUTA (EURO), cu id_facturare/listare_detaliata populate * 665 - emis din avizul 664 (VANZARI_CORESP.TIP=1) - proba cListaSursaAvize * 142 - sursa COMANDA (id_comanda=31), cu DATA_SCAD NULL - caz limita pe G1 * Fiecare document e verificat impotriva unei interogari INDEPENDENTE pe FACT_VFACTURI (nu impotriva * codului testat) pentru G1/G6/G7. G2 se verifica prin snapshot pe VPLAJE_NUMERE (urmval), inainte/dupa * toate apelurile - niciun numar nu trebuie ars, functia nu atinge poGeneratorNumere. Nu scrie in * Oracle - doar SELECT. SET SAFETY OFF SET TALK OFF PUBLIC gcErrLog gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s8_pas5_antet_log.txt' STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog) ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT' IF gnHandle <= 0 STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1) QUIT ENDIF SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE *!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul - *!* mock-ul se pune in fata listei existente, altfel amessagebox() real blocheaza headless LOCAL lcProcExistent lcProcExistent = SET("PROCEDURE") SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent PUBLIC gnPass, gnFail, gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns gcMockUltimMesaj = '' gnMockUltimTip = 0 gnMockRaspuns = 6 gnPass = 0 gnFail = 0 *!* PRIVATE + initializare la nivel de program - poDate declarat Local in Init nu e vizibil in .vcx, *!* dar aici testam direct functia, fara formular; Private e doar disciplina consecventa cu restul suitei PRIVATE poDate poDate = .NULL. *!* --- G2: snapshot VPLAJE_NUMERE INAINTE de orice apel --- LOCAL lcPlajeInainte, lcPlajeDupa lcPlajeInainte = SnapshotPlaje() DO asserteaza WITH 'snapshot VPLAJE_NUMERE initial nu e gol', !EMPTY(lcPlajeInainte), lcPlajeInainte *!* ========================================================================= *!* Caz 1: id_vanzare=280, sursa CONTRACT (id_ctr=20), lei *!* ========================================================================= LOCAL lnDiscRon, lnDiscVal poDate = IncarcaAntetFacturaEditare(280, @lnDiscRon, @lnDiscVal) DO asserteaza WITH '280: IncarcaAntetFacturaEditare intoarce obiect', VARTYPE(poDate) == 'O', VARTYPE(poDate) IF VARTYPE(poDate) == 'O' DO asserteaza WITH '280: lEditare=.T.', poDate.lEditare, TRANSFORM(poDate.lEditare) DO asserteaza WITH '280: zi_curs = dataact (cursul zilei documentului)', poDate.zi_curs == poDate.dataact, TRANSFORM(poDate.zi_curs) *!* martor independent - interogare separata pe fact_vfacturi, NU cea din codul testat LOCAL lnSuccesM IF USED('v_martor') USE IN v_martor ENDIF lnSuccesM = goExecutor.oExecute([select tip, eproforma, serie_act, numar_act, data_act, data_scad, discount, ] + ; [discount_evidentiat, delegat, id_delegat, nrinmat, id_masina, nume_agent, id_agent, adresa_facturare, ] + ; [id_facturare, dataora_exp, listare_detaliata, tip_saft, efactura, id_ruta, in_valuta, id_part, client, ] + ; [id_comanda, id_ctr from fact_vfacturi where id_vanzare = 280], [v_martor]) goExecutor.oReset() DO asserteaza WITH '280: martor Oracle a reusit', lnSuccesM >= 0 AND USED('v_martor') AND RECCOUNT('v_martor') = 1, TRANSFORM(lnSuccesM) SELECT v_martor *!* G1 DO asserteaza WITH '280 G1 serie_act = VANZARI [' + ALLTRIM(NVL(serie_act,'')) + ']', ALLTRIM(NVL(poDate.serie_act,'')) == ALLTRIM(NVL(serie_act,'')), ALLTRIM(NVL(poDate.serie_act,'')) DO asserteaza WITH '280 G1 nract=' + TRANSFORM(numar_act) + ' = VANZARI', poDate.nract == numar_act, TRANSFORM(poDate.nract) DO asserteaza WITH '280 G1 dataact=' + DTOC(data_act) + ' = VANZARI', poDate.dataact == data_act, DTOC(poDate.dataact) DO asserteaza WITH '280 G1 datascad=' + DTOC(data_scad) + ' = VANZARI', poDate.datascad == data_scad, DTOC(poDate.datascad) *!* G6 DO asserteaza WITH '280 G6 discount lei=' + TRANSFORM(discount) + ' = calculat (in_valuta=0)', lnDiscRon == NVL(discount,0), TRANSFORM(lnDiscRon) DO asserteaza WITH '280 G6 discount_evidentiat=' + TRANSFORM(discount_evidentiat) + ' = VANZARI', poDate.discount_evidentiat == NVL(discount_evidentiat,0), TRANSFORM(poDate.discount_evidentiat) *!* G7 DO asserteaza WITH '280 G7 id_delegat=' + TRANSFORM(NVL(id_delegat,-1)) + ' = VANZARI', poDate.id_delegat == id_delegat, TRANSFORM(poDate.id_delegat) DO asserteaza WITH '280 G7 nume_delegat=[' + ALLTRIM(NVL(delegat,'')) + '] = VANZARI', ALLTRIM(NVL(poDate.nume_delegat,'')) == ALLTRIM(NVL(delegat,'')), ALLTRIM(NVL(poDate.nume_delegat,'')) DO asserteaza WITH '280 G7 adresa_facturare = VANZARI', ALLTRIM(NVL(poDate.adresa_facturare,'')) == ALLTRIM(NVL(adresa_facturare,'')), ALLTRIM(NVL(poDate.adresa_facturare,'')) DO asserteaza WITH '280 G7 dataora_exp = VANZARI', poDate.dataora_exp == dataora_exp, TRANSFORM(poDate.dataora_exp) DO asserteaza WITH '280 G7 listare_detaliata=' + TRANSFORM(NVL(listare_detaliata,-1)) + ' = VANZARI', poDate.nListareDetaliata == NVL(listare_detaliata,0), TRANSFORM(poDate.nListareDetaliata) DO asserteaza WITH '280 G7 id_ruta = VANZARI (ambele NULL, camp gol pe acest document)', ISNULL(poDate.id_ruta) == ISNULL(id_ruta), TRANSFORM(poDate.id_ruta) DO asserteaza WITH '280 G7 efactura = VANZARI', poDate.eFactura == NVL(efactura,0), TRANSFORM(poDate.eFactura) *!* alte campuri de antet DO asserteaza WITH '280 tip=' + TRANSFORM(tip) + ' = VANZARI', poDate.tip == tip, TRANSFORM(poDate.tip) DO asserteaza WITH '280 eProforma derivat=0 (nu e proforma)', poDate.eProforma == NVL(eproforma,0), TRANSFORM(poDate.eProforma) DO asserteaza WITH '280 id_client = VANZARI', poDate.id_client == id_part, TRANSFORM(poDate.id_client) DO asserteaza WITH '280 cListaSursa = id_ctr (' + TRANSFORM(id_ctr) + ')', ALLTRIM(poDate.cListaSursa) == ALLTRIM(STR(id_ctr)), poDate.cListaSursa USE IN v_martor ENDIF *!* ========================================================================= *!* Caz 2: id_vanzare=575, document SIMPLU, discount<>0 *!* ========================================================================= poDate = IncarcaAntetFacturaEditare(575, @lnDiscRon, @lnDiscVal) DO asserteaza WITH '575: IncarcaAntetFacturaEditare intoarce obiect', VARTYPE(poDate) == 'O', VARTYPE(poDate) IF VARTYPE(poDate) == 'O' IF USED('v_martor') USE IN v_martor ENDIF lnSuccesM = goExecutor.oExecute([select tip, eproforma, serie_act, numar_act, data_act, data_scad, discount, ] + ; [discount_evidentiat, delegat, id_delegat, bidelegat, cnpdelegat, nrinmat, id_masina, id_agent, ] + ; [nvl(text_aditional,'-') as ta, tip_saft, efactura, id_ruta, id_part, id_comanda, id_ctr ] + ; [from fact_vfacturi where id_vanzare = 575], [v_martor]) goExecutor.oReset() DO asserteaza WITH '575: martor Oracle a reusit', lnSuccesM >= 0 AND USED('v_martor') AND RECCOUNT('v_martor') = 1, TRANSFORM(lnSuccesM) SELECT v_martor DO asserteaza WITH '575 G1 nract=' + TRANSFORM(numar_act) + ' = VANZARI', poDate.nract == numar_act, TRANSFORM(poDate.nract) DO asserteaza WITH '575 G1 dataact = VANZARI', poDate.dataact == data_act, DTOC(poDate.dataact) DO asserteaza WITH '575 G6 discount lei=' + TRANSFORM(discount) + ' (nenul, camp important)', lnDiscRon == NVL(discount,0) AND lnDiscRon <> 0, TRANSFORM(lnDiscRon) DO asserteaza WITH '575 G6 discount valuta=0 (document in lei)', lnDiscVal == 0, TRANSFORM(lnDiscVal) DO asserteaza WITH '575 G6 discount_evidentiat = VANZARI', poDate.discount_evidentiat == NVL(discount_evidentiat,0), TRANSFORM(poDate.discount_evidentiat) DO asserteaza WITH '575 G7 CNPdelegat=[' + ALLTRIM(NVL(cnpdelegat,'')) + '] = VANZARI (nenul, camp important)', ALLTRIM(NVL(poDate.CNPdelegat,'')) == ALLTRIM(NVL(cnpdelegat,'')) AND !EMPTY(poDate.CNPdelegat), poDate.CNPdelegat DO asserteaza WITH '575 G7 tip_saft: gol pe document (-1/NULL) - ramane implicitul clasei 380 (nesuprascris cu gunoi)', poDate.tip_saft == 380, TRANSFORM(poDate.tip_saft) DO asserteaza WITH '575 cListaSursa gol (fara comanda/contract)', EMPTY(poDate.cListaSursa), poDate.cListaSursa DO asserteaza WITH '575 cListaSursaAvize gol (fara VANZARI_CORESP tip=1 pentru acest id)', EMPTY(poDate.cListaSursaAvize), poDate.cListaSursaAvize USE IN v_martor ENDIF *!* ========================================================================= *!* Caz 3: id_vanzare=627, VALUTA (EURO), id_facturare/listare_detaliata populate *!* ========================================================================= poDate = IncarcaAntetFacturaEditare(627, @lnDiscRon, @lnDiscVal) DO asserteaza WITH '627: IncarcaAntetFacturaEditare intoarce obiect', VARTYPE(poDate) == 'O', VARTYPE(poDate) IF VARTYPE(poDate) == 'O' IF USED('v_martor') USE IN v_martor ENDIF lnSuccesM = goExecutor.oExecute([select in_valuta, id_valuta, nume_val, curs, multiplicator, discount, ] + ; [id_facturare, adresa_facturare, listare_detaliata, id_masina, nrinmat, id_delegat, delegat ] + ; [from fact_vfacturi where id_vanzare = 627], [v_martor]) goExecutor.oReset() DO asserteaza WITH '627: martor Oracle a reusit', lnSuccesM >= 0 AND USED('v_martor') AND RECCOUNT('v_martor') = 1, TRANSFORM(lnSuccesM) SELECT v_martor DO asserteaza WITH '627 in_valuta=1 = VANZARI', poDate.in_valuta == in_valuta, TRANSFORM(poDate.in_valuta) DO asserteaza WITH '627 id_valuta = VANZARI', poDate.id_valuta == id_valuta, TRANSFORM(poDate.id_valuta) DO asserteaza WITH '627 nume_valuta=[' + ALLTRIM(NVL(nume_val,'')) + '] = VANZARI', ALLTRIM(NVL(poDate.nume_valuta,'')) == ALLTRIM(NVL(nume_val,'')), poDate.nume_valuta DO asserteaza WITH '627 Curs=' + TRANSFORM(curs) + ' = VANZARI', poDate.Curs == curs, TRANSFORM(poDate.Curs) DO asserteaza WITH '627 multiplicator = VANZARI', poDate.multiplicator == multiplicator, TRANSFORM(poDate.multiplicator) DO asserteaza WITH '627 G6 discount valuta = discount brut (document in valuta, discount=0 pe acest caz)', lnDiscVal == NVL(discount,0), TRANSFORM(lnDiscVal) DO asserteaza WITH '627 G6 discount lei = valuta*curs/multiplicator (0*4.5/1=0)', lnDiscRon == ROUND(NVL(discount,0) * curs / multiplicator, gnPPretV), TRANSFORM(lnDiscRon) DO asserteaza WITH '627 G7 id_facturare=' + TRANSFORM(NVL(id_facturare,-1)) + ' = VANZARI (nenul, camp important)', poDate.id_facturare == id_facturare AND !EMPTY(NVL(poDate.id_facturare,0)), TRANSFORM(poDate.id_facturare) DO asserteaza WITH '627 G7 listare_detaliata=1 = VANZARI (nenul)', poDate.nListareDetaliata == listare_detaliata AND poDate.nListareDetaliata = 1, TRANSFORM(poDate.nListareDetaliata) DO asserteaza WITH '627 G7 nrinmat=[' + ALLTRIM(NVL(nrinmat,'')) + '] = VANZARI (nenul)', ALLTRIM(NVL(poDate.nrinmat,'')) == ALLTRIM(NVL(nrinmat,'')) AND !EMPTY(poDate.nrinmat), poDate.nrinmat USE IN v_martor ENDIF *!* ========================================================================= *!* Caz 4: id_vanzare=665, emis din avizul 664 - proba cListaSursaAvize *!* ========================================================================= poDate = IncarcaAntetFacturaEditare(665, @lnDiscRon, @lnDiscVal) DO asserteaza WITH '665: IncarcaAntetFacturaEditare intoarce obiect', VARTYPE(poDate) == 'O', VARTYPE(poDate) IF VARTYPE(poDate) == 'O' DO asserteaza WITH '665 cListaSursaAvize = 664 (VANZARI_CORESP.TIP=1)', ALLTRIM(poDate.cListaSursaAvize) == '664', poDate.cListaSursaAvize ENDIF *!* ========================================================================= *!* Caz 5: id_vanzare=142, sursa COMANDA (id_comanda=31), DATA_SCAD NULL - caz limita G1 *!* ========================================================================= poDate = IncarcaAntetFacturaEditare(142, @lnDiscRon, @lnDiscVal) DO asserteaza WITH '142: IncarcaAntetFacturaEditare intoarce obiect', VARTYPE(poDate) == 'O', VARTYPE(poDate) IF VARTYPE(poDate) == 'O' DO asserteaza WITH '142 G1 datascad ramane NULL (nu se inventeaza o valoare)', ISNULL(poDate.datascad), TRANSFORM(poDate.datascad) DO asserteaza WITH '142 cListaSursa = id_comanda (31)', ALLTRIM(poDate.cListaSursa) == '31', poDate.cListaSursa IF USED('v_martor') USE IN v_martor ENDIF lnSuccesM = goExecutor.oExecute([select id_agent, nume_agent from fact_vfacturi where id_vanzare = 142], [v_martor]) goExecutor.oReset() IF lnSuccesM >= 0 AND USED('v_martor') AND RECCOUNT('v_martor') = 1 SELECT v_martor DO asserteaza WITH '142 G7 id_agent=' + TRANSFORM(NVL(id_agent,-1)) + ' = VANZARI (nenul, camp important)', poDate.id_agent == id_agent AND !EMPTY(NVL(poDate.id_agent,0)), TRANSFORM(poDate.id_agent) DO asserteaza WITH '142 G7 nume_agent=[' + ALLTRIM(NVL(nume_agent,'')) + '] = VANZARI (nenul)', ALLTRIM(NVL(poDate.nume_agent,'')) == ALLTRIM(NVL(nume_agent,'')) AND !EMPTY(poDate.nume_agent), poDate.nume_agent USE IN v_martor ENDIF ENDIF *!* ========================================================================= *!* Caz 6: id inexistent -> .NULL., fara efecte secundare *!* ========================================================================= poDate = IncarcaAntetFacturaEditare(999999999, @lnDiscRon, @lnDiscVal) DO asserteaza WITH '999999999: IncarcaAntetFacturaEditare intoarce .NULL.', ISNULL(poDate), TRANSFORM(VARTYPE(poDate)) DO asserteaza WITH '999999999: gcMockUltimMesaj ramane gol (id inexistent nu e eroare Oracle)', EMPTY(gcMockUltimMesaj), gcMockUltimMesaj *!* --- G2: snapshot VPLAJE_NUMERE DUPA toate apelurile - trebuie identic --- lcPlajeDupa = SnapshotPlaje() DO asserteaza WITH 'G2: VPLAJE_NUMERE neschimbat dupa 6 apeluri (niciun numar ars)', lcPlajeInainte == lcPlajeDupa, IIF(lcPlajeInainte==lcPlajeDupa,'identic','DIFERIT') STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1) QUIT PROCEDURE SnapshotPlaje LOCAL lcSql, lnSucces, lcSnap lcSnap = '' IF USED('v_plaje_snap') USE IN v_plaje_snap ENDIF lcSql = [select id_plaja, urmval from vplaje_numere where NVL(id_sucursala,-99) = ] + TRANSFORM(NVL(gnIdSucursala,-99)) + [ order by id_plaja] lnSucces = goExecutor.oExecute(lcSql,[v_plaje_snap]) goExecutor.oReset() IF lnSucces >= 0 AND USED('v_plaje_snap') SELECT v_plaje_snap SCAN lcSnap = lcSnap + TRANSFORM(id_plaja) + '=' + ALLTRIM(NVL(urmval,'-')) + ';' ENDSCAN USE IN v_plaje_snap ENDIF RETURN lcSnap ENDPROC PROCEDURE asserteaza LPARAMETERS tcNume, tlConditie, tcValoare IF m.tlConditie gnPass = gnPass + 1 STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1) ELSE gnFail = gnFail + 1 STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + TRANSFORM(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1) ENDIF ENDPROC PROCEDURE test_error_handler LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1) ENDPROC