Files
comun/utile/Teste/editare_factura/test_s8_pas6_linii.prg
Marius Mutu 8e022d332e #13: formular de facturare unificat - etapa curenta
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
2026-09-09 21:38:25 +03:00

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