Files
comun/utile/Teste/facturare_unificat/test_s3_controale.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

200 lines
8.5 KiB
Plaintext

* test_s3_controale.prg
* Headless: controalele de antet adaugate pe frm_facturare_articole2 exista dupa Createobject,
* iar frm_date_factura (calea veche, neatinsa) le are in continuare.
*
* Rezultat asteptat (declarat inainte de rulare), pe poDate tip 1, gnScadereStoc = 0 (fara gestiune
* sursa: Init-ul de antet elimina Ct_clb_gestiune_init pe tip 1, deci dupa pasul 1 acesta e ABSENT):
* frm_facturare_articole2: Clb_dataireg, Ct_clb_politici_preturi(*), txtCodFiscal, lblCodFiscal,
* txtSoldLei, lblSoldLei, But_verifica1 -> PEMSTATUS(...,5) = .T.
* Ct_clb_gestiune_init -> prezent DOAR daca Init-ul de antet (pasul 1) nu e inca portat; dupa
* pasul 1 e eliminat pe tip 1 (ca pe frm_date_factura). Se logheaza, nu se asserteaza.
* (*) dupa pasul 1, pe factura Ct_clb_politici_preturi e eliminat (control doar de aviz).
* Clb_dataireg.Text_simplu1.ControlSource = 'poDate.dataireg'
* Prezenta = apartenenta la colectia Objects (PEMSTATUS/TYPE raman .T. dupa RemoveObject).
* frm_date_factura (acelasi poDate): Clb_dataireg, txtCodFiscal, lblCodFiscal, txtSoldLei,
* lblSoldLei, But_verifica1 -> .T.; Ct_clb_gestiune_init -> .F. (eliminat de Init pe tip 1).
*
* Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s3_controale.prg"
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s3_controale.log
SET SAFETY OFF
SET TALK OFF
SET NOTIFY OFF
PUBLIC gcLog, gnFail, gnPass
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s3_controale.log"
IF !DIRECTORY("D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out")
MD "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out"
ENDIF
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
gnFail = 0
gnPass = 0
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
DO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
IF TYPE('gnHandle') <> 'N' OR gnHandle <= 0
DO AfLog WITH "FAIL: conexiune Oracle esuata"
DO Final
ENDIF
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
PUBLIC gcMockUltimMesaj, gnMockUltimTip
gcMockUltimMesaj = ""
gnMockUltimTip = 0
DO AfLog WITH "ENV OK, gnAn=" + TRANSFORM(gnAn) + " gnLuna=" + TRANSFORM(gnLuna)
IF !actualizeaza_optiuni_program()
DO AfLog WITH "FAIL: actualizeaza_optiuni_program()"
DO Final
ENDIF
gnScadereStoc = 0
* seriile de facturi (tipdoc 5) sunt pe utilizator in MARIUSM_AUTO: utilizatorul 8 are plaja activa 2010-2099
gnIdUtil = 8
goExecutor.oExecuta([begin pack_sesiune.set_Id_Util(?gnIdUtil); end;])
DO AfLog WITH "gnScadereStoc=" + TRANSFORM(gnScadereStoc) + " gnScadentaAutomata=" + TRANSFORM(gnScadentaAutomata)
PRIVATE poDate, poGeneratorNumere, plVizibil
plVizibil = .F.
DO AfLog WITH "creez poDate"
poDate = CREATEOBJECT("oDateFactura", 25000, 1)
DO AfLog WITH "poDate creat"
poDate.nIdTipDoc = 5
poGeneratorNumere = CREATEOBJECT("oGeneratorNumere")
poGeneratorNumere.ResetNumere()
DO AfLog WITH "generator creat"
DO ProbaSerii WITH poDate.nIdTipDoc
poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc)
DO AfLog WITH "poDate tip=1 rezultat_serii=" + TRANSFORM(poDate.rezultat_serii) + " ultim amessagebox=[" + gcMockUltimMesaj + "]"
IF USED('crscursuri')
USE IN crscursuri
ENDIF
CREATE CURSOR crscursuri (curs N(12,4), nume_val C(10), multiplicator N(6))
DO creeaza_facturacrs WITH 'crsfactura'
* grd_factura.cGestiune e legat la crsFactura.gestiune, camp inexistent in creeaza_facturacrs (nume_gestiune)
SELECT *, CAST(NULL AS C(100)) AS gestiune FROM crsfactura INTO CURSOR crsfact_tmp READWRITE
USE IN crsfactura
SELECT * FROM crsfact_tmp INTO CURSOR crsfactura READWRITE
USE IN crsfact_tmp
* gridextras.vcx e referit din ofacturare.vcx cu cale relativa (..\utile\gridextras), rezolvabila doar din exe/IDE
SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras\gridextras.vcx" ADDITIVE
SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras" ADDITIVE
* grd_factura.cCodMat.cboCodmat e declarat AS combosql OF cautare.vcx, dar clasa e definita in _cb_base.vcx
SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\clase\_cb_base.vcx" ADDITIVE
LOCAL loNou, loVechi, lcC
DO AfLog WITH "creez frm_facturare_articole2"
* clasa REALA (nu subclasa: pe o subclasa RemoveObject nu scoate membrii definiti in parinte).
* Atentie: metoda Error a prototipului face SET STEP ON - orice eroare in Init deschide debugger-ul
* si blocheaza rularea headless; diagnosticul se face atunci cu o subclasa cu Error care logheaza.
loNou = CREATEOBJECT('frm_facturare_articole2')
DO Assert WITH VARTYPE(loNou) = 'O', "Createobject frm_facturare_articole2"
IF VARTYPE(loNou) = 'O'
LOCAL laC[6], i
laC[1] = "Clb_dataireg"
laC[2] = "txtCodFiscal"
laC[3] = "lblCodFiscal"
laC[4] = "txtSoldLei"
laC[5] = "lblSoldLei"
laC[6] = "But_verifica1"
FOR i = 1 TO 6
DO Assert WITH ObjExists(loNou, laC[i]), "nou: " + laC[i] + " prezent"
ENDFOR
DO AfLog WITH "nou: Ct_clb_gestiune_init prezent=" + TRANSFORM(ObjExists(loNou, 'Ct_clb_gestiune_init')) + ;
" Ct_clb_politici_preturi prezent=" + TRANSFORM(ObjExists(loNou, 'Ct_clb_politici_preturi'))
DO Assert WITH loNou.Clb_dataireg.Text_simplu1.ControlSource == 'poDate.dataireg', "nou: Clb_dataireg.ControlSource"
DO Assert WITH loNou.Clb_dataireg.Top >= 30, "nou: Clb_dataireg sub bara de titlu (Top=" + TRANSFORM(loNou.Clb_dataireg.Top) + ")"
DO Assert WITH PEMSTATUS(loNou, 'cgestiune_init', 5) AND PEMSTATUS(loNou, 'lcopiere', 5) AND PEMSTATUS(loNou, 'nid_tip', 5) ;
AND PEMSTATUS(loNou, 'nsoldlei', 5) AND PEMSTATUS(loNou, 'nsoldvaluta', 5) AND PEMSTATUS(loNou, 'ntip', 5), "nou: proprietati *p: materializate"
* C6: Error nu mai face SET STEP ON - o eroare provocata nu blocheaza rularea
LOCAL llErr
llErr = .F.
TRY
loNou.metoda_inexistenta_s3()
CATCH
llErr = .T.
ENDTRY
DO Assert WITH llErr, "C6: eroarea provocata (metoda inexistenta) a fost prinsa, fara blocaj"
loNou.Error(1, 'test', 1)
DO Assert WITH .T., "C6: apel direct o.Error(1,'test',1) a revenit"
loNou.Release()
RELEASE loNou
ENDIF
loVechi = CREATEOBJECT('frm_date_factura')
DO Assert WITH VARTYPE(loVechi) = 'O', "Createobject frm_date_factura"
IF VARTYPE(loVechi) = 'O'
FOR i = 1 TO 6
DO Assert WITH ObjExists(loVechi, laC[i]), "vechi: " + laC[i] + " prezent"
ENDFOR
DO Assert WITH !ObjExists(loVechi, 'Ct_clb_gestiune_init'), "vechi: Ct_clb_gestiune_init eliminat pe tip 1"
loVechi.Release()
RELEASE loVechi
ENDIF
DO Final
PROCEDURE ProbaSerii
* apel direct al procedurii Oracle din creeaza_cursor_serii: logheaza eroarea reala (goExecutor
* ar deschide amessagebox modal, care agata rularea headless) si incalzeste starea pachetului
LPARAMETERS tnIdTipDoc
LOCAL lnOk, laErr[1], i, lcSql
PRIVATE pnIdTipDoc, pnRezultat
pnIdTipDoc = tnIdTipDoc
pnRezultat = 0
lcSql = "{call " + gcS + ".pack_serii_numere.verifica_cursor_serii(?pnIdTipDoc,?gnIdUtil,?gnIdSucursala,?@pnRezultat)}"
FOR i = 1 TO 3
lnOk = SQLEXEC(gnHandle, lcSql, "crsprobaserii")
IF lnOk > 0
DO AfLog WITH "proba serii OK la incercarea " + TRANSFORM(i) + ", pnRezultat=" + TRANSFORM(pnRezultat) + " randuri=" + TRANSFORM(RECCOUNT("crsprobaserii"))
USE IN (SELECT("crsprobaserii"))
EXIT
ELSE
AERROR(laErr)
DO AfLog WITH "proba serii ESEC la incercarea " + TRANSFORM(i) + ": " + TRANSFORM(laErr[1]) + " / " + TRANSFORM(laErr[2]) + " / " + TRANSFORM(laErr[5])
ENDIF
ENDFOR
ENDPROC
FUNCTION ObjExists
* prezenta reala in colectia Objects, cautare recursiva - controalele pot fi in containere
LPARAMETERS toContainer, tcName
LOCAL i, loO
FOR i = 1 TO toContainer.Objects.Count
loO = toContainer.Objects(i)
IF UPPER(loO.Name) == UPPER(tcName)
RETURN .T.
ENDIF
IF TYPE('loO.Objects.Count') = 'N'
IF ObjExists(loO, tcName)
RETURN .T.
ENDIF
ENDIF
ENDFOR
RETURN .F.
ENDFUNC
PROCEDURE Assert
LPARAMETERS tlCond, tcMsg
IF tlCond
gnPass = gnPass + 1
DO AfLog WITH "PASS: " + tcMsg
ELSE
gnFail = gnFail + 1
DO AfLog WITH "FAIL: " + tcMsg
ENDIF
ENDPROC
PROCEDURE AfLog
LPARAMETERS tcMsg
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
ENDPROC
PROCEDURE AfErr
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
gnFail = gnFail + 1
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
ENDPROC
PROCEDURE Final
DO AfLog WITH "TOTAL pass=" + TRANSFORM(gnPass) + " fail=" + TRANSFORM(gnFail)
DO AfLog WITH "END " + TTOC(DATETIME())
QUIT
ENDPROC