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
188 lines
8.8 KiB
Plaintext
188 lines
8.8 KiB
Plaintext
* test_s8_pas6_linii.prg
|
|
* Verifica IncarcaLiniiFacturaEditare (ofacturare_editare.prg), pasul 6 din
|
|
* docs\propunere_s8_incarcare.md: incarcarea LINIILOR unui document existent direct in crsfactura.
|
|
* Documente reale, gasite prin interogare read-only (nu inventate) pe MARIUSM_AUTO:
|
|
* 627 - VALUTA (EURO, curs=4.50), 4 linii
|
|
* 1050 - lei, 4 linii
|
|
* 1047 - lei, 2 linii (materiale/manopera, fara id_articol pe una)
|
|
* 1040 - lei, 1 linie, id_ctr=235
|
|
* 894 - lei, 2 linii, una cu pretd=100/id_valutad=2 (achizitie in valuta)
|
|
* 1049 - lei, 3 linii active + 1 linie STEARSA (sters=1) - caz limita G3
|
|
* Fiecare linie e verificata impotriva unei interogari INDEPENDENTE pe VANZARI_DETALII/NOM_ARTICOLE
|
|
* (nu impotriva codului testat). 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_pas6_linii_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 poDate
|
|
poDate = .NULL.
|
|
|
|
DO VerificaDocument WITH 627, 'valuta EURO'
|
|
DO VerificaDocument WITH 1050, 'lei'
|
|
DO VerificaDocument WITH 1047, 'lei, materiale/manopera'
|
|
DO VerificaDocument WITH 1040, 'lei, id_ctr'
|
|
DO VerificaDocument WITH 894, 'lei, pretd/id_valutad pe o linie'
|
|
DO VerificaDocument WITH 1049, 'lei, 1 linie stearsa + 3 active'
|
|
|
|
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
|
|
QUIT
|
|
|
|
|
|
PROCEDURE VerificaDocument
|
|
LPARAMETERS tnIdVanzare, tcEticheta
|
|
|
|
LOCAL lcSql, lnSucces, lnMartorActive, lcPrefix, lnDiscRon, lnDiscVal
|
|
lcPrefix = TRANSFORM(tnIdVanzare) + ' [' + tcEticheta + ']'
|
|
|
|
*!* --- martor G3: numar de linii nesterse, interogare independenta ---
|
|
IF USED('v_g3')
|
|
USE IN v_g3
|
|
ENDIF
|
|
lnSucces = goExecutor.oExecute([select count(*) as nr from vanzari_detalii where id_vanzare = ] + ;
|
|
TRANSFORM(m.tnIdVanzare) + [ and sters = 0], [v_g3])
|
|
goExecutor.oReset()
|
|
DO asserteaza WITH lcPrefix + ': martor G3 Oracle a reusit', lnSucces >= 0 AND USED('v_g3'), TRANSFORM(lnSucces)
|
|
lnMartorActive = v_g3.nr
|
|
USE IN v_g3
|
|
|
|
*!* --- antetul (prerechizita productiei - pasul 5) ---
|
|
poDate = IncarcaAntetFacturaEditare(m.tnIdVanzare, @lnDiscRon, @lnDiscVal)
|
|
DO asserteaza WITH lcPrefix + ': antetul s-a incarcat', VARTYPE(poDate) == 'O', VARTYPE(poDate)
|
|
IF VARTYPE(poDate) <> 'O'
|
|
RETURN
|
|
ENDIF
|
|
|
|
*!* --- codul testat ---
|
|
IF USED('crsfactura')
|
|
USE IN crsfactura
|
|
ENDIF
|
|
IncarcaLiniiFacturaEditare(poDate, m.tnIdVanzare)
|
|
DO asserteaza WITH lcPrefix + ': crsfactura s-a deschis', USED('crsfactura'), TRANSFORM(USED('crsfactura'))
|
|
IF !USED('crsfactura')
|
|
RETURN
|
|
ENDIF
|
|
|
|
*!* --- G3 ---
|
|
DO asserteaza WITH lcPrefix + ' G3: RECCOUNT(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura')) + ' = martor(' + TRANSFORM(lnMartorActive) + ')', ;
|
|
RECCOUNT('crsfactura') == m.lnMartorActive, TRANSFORM(RECCOUNT('crsfactura'))
|
|
|
|
*!* --- martor G4/G4b: interogare independenta pe VANZARI_DETALII + NOM_ARTICOLE ---
|
|
IF USED('v_g4')
|
|
USE IN v_g4
|
|
ENDIF
|
|
lcSql = [select vd.id_vanzare_det, vd.id_articol, vd.cantitate, vd.pret, vd.discount_unitar, vd.pret_cu_tva, ] + ;
|
|
[vd.proc_tvav, vd.lot, vd.serie, vd.explicatie, vd.taxcode, vd.id_gestiune, vd.id_pol, vd.pretd, vd.id_valutad, ] + ;
|
|
[na.in_stoc from vanzari_detalii vd left join nom_articole na on na.id_articol = vd.id_articol ] + ;
|
|
[where vd.id_vanzare = ] + TRANSFORM(m.tnIdVanzare) + [ and vd.sters = 0 order by vd.id_vanzare_det]
|
|
lnSucces = goExecutor.oExecute(lcSql, [v_g4])
|
|
goExecutor.oReset()
|
|
DO asserteaza WITH lcPrefix + ': martor G4 Oracle a reusit', lnSucces >= 0 AND USED('v_g4'), TRANSFORM(lnSucces)
|
|
IF !USED('v_g4')
|
|
RETURN
|
|
ENDIF
|
|
|
|
LOCAL lnCursUse, lnMultUse, llValuta, lnDetTemp, llGasit, lnPretRon, lnDiscRonLinie, lnPretAsteptat, lnDiscAsteptat
|
|
llValuta = (poDate.in_valuta = 1)
|
|
lnCursUse = IIF(m.llValuta, poDate.Curs, 1)
|
|
lnMultUse = IIF(m.llValuta, poDate.multiplicator, 1)
|
|
|
|
SELECT v_g4
|
|
SCAN
|
|
lnDetTemp = v_g4.id_vanzare_det
|
|
SELECT crsfactura
|
|
LOCATE FOR id_temp = m.lnDetTemp
|
|
llGasit = FOUND()
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ': gasit in crsfactura', m.llGasit, TRANSFORM(m.llGasit)
|
|
IF !m.llGasit
|
|
SELECT v_g4
|
|
LOOP
|
|
ENDIF
|
|
|
|
*!* G4 - campuri directe
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ': cantitate', ROUND(crsfactura.cantitate,4) == ROUND(v_g4.cantitate,4), TRANSFORM(crsfactura.cantitate)
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ': taxcode', NVL(crsfactura.taxcode,0) == NVL(v_g4.taxcode,0), TRANSFORM(NVL(crsfactura.taxcode,0))
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ': lot', ALLTRIM(NVL(crsfactura.lot,'')) == ALLTRIM(NVL(v_g4.lot,'')), crsfactura.lot
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ': serie', ALLTRIM(NVL(crsfactura.serie,'')) == ALLTRIM(NVL(v_g4.serie,'')), crsfactura.serie
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ': explicatie', ALLTRIM(NVL(crsfactura.explicatie,'')) == ALLTRIM(NVL(v_g4.explicatie,'')), crsfactura.explicatie
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ': proc_tvav', crsfactura.proc_tvav == v_g4.proc_tvav, TRANSFORM(crsfactura.proc_tvav)
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ': id_pol', NVL(crsfactura.id_pol,-1) == NVL(v_g4.id_pol,-1), TRANSFORM(NVL(crsfactura.id_pol,-1))
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ': pretd', NVL(crsfactura.pretd,-1) == NVL(v_g4.pretd,-1), TRANSFORM(NVL(crsfactura.pretd,-1))
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ': id_valuta_d', NVL(crsfactura.id_valuta_d,-1) == NVL(v_g4.id_valutad,-1), TRANSFORM(NVL(crsfactura.id_valuta_d,-1))
|
|
|
|
*!* G4b - gestionabil din NOMENCLATORUL CURENT, nu din id_gestiune al documentului
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ' G4b: gestionabil=in_stoc curent(' + TRANSFORM(NVL(v_g4.in_stoc,0)) + ')', ;
|
|
crsfactura.gestionabil == IIF(NVL(v_g4.in_stoc,0) <> 0, 1, 0), TRANSFORM(crsfactura.gestionabil)
|
|
|
|
*!* G4 - pret/discount, convertite in lei ca discountul de antet (IncarcaAntetFacturaEditare)
|
|
lnPretRon = IIF(m.llValuta, ROUND(v_g4.pret * m.lnCursUse / m.lnMultUse, gnPPretV), v_g4.pret)
|
|
lnDiscRonLinie = IIF(m.llValuta, ROUND(v_g4.discount_unitar * m.lnCursUse / m.lnMultUse, gnPPretV), v_g4.discount_unitar)
|
|
IF v_g4.pret_cu_tva = 1
|
|
lnPretAsteptat = ROUND(m.lnPretRon, gnPPretV)
|
|
lnDiscAsteptat = ROUND(m.lnDiscRonLinie, gnPPretV)
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ' G4: pretctva rotunjit', crsfactura.pretctva == m.lnPretAsteptat, TRANSFORM(crsfactura.pretctva)
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ' G4: discountctva rotunjit', crsfactura.discountctva == m.lnDiscAsteptat, TRANSFORM(crsfactura.discountctva)
|
|
ELSE
|
|
lnPretAsteptat = ROUND(m.lnPretRon, gnPPretV)
|
|
lnDiscAsteptat = ROUND(m.lnDiscRonLinie, gnPPretV)
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ' G4: pretftva rotunjit', crsfactura.pretftva == m.lnPretAsteptat, TRANSFORM(crsfactura.pretftva)
|
|
DO asserteaza WITH lcPrefix + ' det=' + TRANSFORM(m.lnDetTemp) + ' G4: discountftva rotunjit', crsfactura.discountftva == m.lnDiscAsteptat, TRANSFORM(crsfactura.discountftva)
|
|
ENDIF
|
|
|
|
SELECT v_g4
|
|
ENDSCAN
|
|
USE IN v_g4
|
|
|
|
*!* --- G9: niciun dialog modal la incarcare ---
|
|
DO asserteaza WITH lcPrefix + ' G9: niciun amessagebox in tot fluxul (antet+linii)', EMPTY(gcMockUltimMesaj), gcMockUltimMesaj
|
|
|
|
USE IN crsfactura
|
|
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
|