Squash al branch-ului de lucru plan13-s2. Clase: ofacturare (nucleul formularului unificat), ofacturare_comun, ferestre_cere_date, ocomenzi, caut_ora (lista de preturi in combo-urile de cautare), omodificari. Programe: ofacturare impartit - ofacturare_antet, ofacturare_rutare_scriere si ogrid_latimi sunt fisiere noi; oproceduri_facturare primeste discountul pe linie si cota standard de TVA cand articolul nu are cota pe politica. Documentatie: capcana SQLExec no_data_found, conventia de encoding, depanarea testelor VFP si regulile de lucru - conflictele cu modificarile venite din alte proiecte sunt rezolvate pastrand ambele parti. Loguri de rulare a testelor scoase din versionare; testele raman. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PkyjGyrV2S7932om4kfSiK
245 lines
15 KiB
Plaintext
245 lines
15 KiB
Plaintext
* 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
|