* 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