Files
comun/utile/Teste/facturare_unificat/probe_12b_s7a_optiuni_readonly.prg
2026-09-15 23:58:47 +03:00

188 lines
8.6 KiB
Plaintext

* probe_12b_s7a_optiuni_readonly.prg
* Plan #12b, S7a - proba headless pe frm_optiuni_facturare (COMUN\clase\ofacturare.vc2:24650):
* .ct_clb_pol_pret_stoc.Enabled = Empty(Thisform.nidpolpretstoc) in Init.
*
* nidpolpretstoc vine din pack_facturare.citeste_setari_pol_pret(1, gnIdUtil, ...) (apelata din
* actualizeaza_politica_pret, ofacturare.vc2:24573). Sursa PL/SQL (ALL_SOURCE, verificata inainte
* de proba, nu presupusa) pentru V_TIP=1 NU filtreaza dupa V_ID_UTIL - citeste direct
* OPTIUNI.VARVALUE (VARNAME='ID_POL_PRET_STOC') si verifica doar ca politica exista si nu e STERS
* in CRM_POLITICI_PRETURI. Filtrul pe utilizator (CRM_VPOLPRETCURUTIL) exista doar pe ramurile
* V_TIP IN (23,30,41) si V_TIP IN (48,49) - S3 a scos exact acest filtru de pe ramura V_TIP=1
* ("Locul #3 (citire din OPTIUNI + CRM_POLITICI_PRETURI, fara view-ul pe utilizator)"). Cum S3 e
* deja aplicat REAL pe schema (stare_plan_12b.md), id_util=4 (fara drept azi la politica 41 prin
* CRM_VPOLPRETCURUTIL, baseline_12b.md sectiunea 11) primeste ACUM acelasi id_pol=41 ca id_util=8
* pe aceasta ramura - nota "fara drept inainte de S3" din plan descrie starea DINAINTE de aplicarea
* reala a S3, nu starea curenta a schemei.
*
* Spion pe goExecutor (subclasa, DODEFAULT pe PCOUNT) - tiparul din
* editare_factura\probe_s13_toomanycolumns.prg: nu opreste executia, doar logheaza fiecare SQL.
*
* Rulare: powershell -ExecutionPolicy Bypass -File ruleaza_suita.ps1 -Nume probe_12b_s7a_optiuni_readonly
* Log: D:\ROA\ROAFACTURARE\docs\loguri_12b\s7a_optiuni_readonly.log (cerut de sarcina, nu out\)
SET SAFETY OFF
SET TALK OFF
SET NOTIFY OFF
CLOSE DATABASES
PUBLIC gcLog, gcCaz, gnPass, gnFail
gcLog = "D:\ROA\ROAFACTURARE\docs\loguri_12b\s7a_optiuni_readonly.log"
IF !DIRECTORY("D:\ROA\ROAFACTURARE\docs\loguri_12b")
MD "D:\ROA\ROAFACTURARE\docs\loguri_12b"
ENDIF
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
gcCaz = ""
gnPass = 0
gnFail = 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
DO AfLog WITH "ENV OK gnHandle=" + TRANSFORM(gnHandle)
* incarcare explicita a clasei din calea COMPLETA (nu relativa via SET PATH), ca sa fim siguri
* care ofacturare.vcx s-a incarcat de fapt
RELEASE CLASSLIB ofacturare
SET CLASSLIB TO (gcAppPath + "COMUN\CLASE\ofacturare.vcx") ADDITIVE
DO AfLog WITH "SET CLASSLIB la " + gcAppPath + "COMUN\CLASE\ofacturare.vcx"
gnTransOriginal = SQLGETPROP(gnHandle, "Transactions")
SQLSETPROP(gnHandle, "Transactions", 2)
DO AfLog WITH "Transactions manual, original=" + TRANSFORM(gnTransOriginal)
LOCAL loForm1, loForm2, loForm3, loForm4, loReal, loSpy
*----------------------------------------------------------------------------------------
gcCaz = "[1: optiune setata, id_util=8] "
gnIdUtil = 8
loForm1 = CREATEOBJECT('frm_optiuni_facturare', 1)
DO Verdict WITH LOWER(JUSTFNAME(loForm1.ClassLibrary)) == 'ofacturare.vcx', ;
"ClassLibrary incarcat = ofacturare.vcx (cale completa) - " + TRANSFORM(loForm1.ClassLibrary)
DO Verdict WITH loForm1.pgfrm_optiuni.Page1.Ct_clb_pol_pret_stoc.Enabled = .F., ;
"Enabled=.F. dupa Init (nidpolpretstoc=" + TRANSFORM(loForm1.nidpolpretstoc) + ")"
loForm1.Refresh()
DO Verdict WITH loForm1.pgfrm_optiuni.Page1.Ct_clb_pol_pret_stoc.Enabled = .F., "Enabled=.F. dupa Refresh()"
*----------------------------------------------------------------------------------------
gcCaz = "[2: optiune setata, id_util=4 fara drept CRM_VPOLPRETCURUTIL] "
gnIdUtil = 4
loForm2 = CREATEOBJECT('frm_optiuni_facturare', 1)
DO Verdict WITH loForm2.pgfrm_optiuni.Page1.Ct_clb_pol_pret_stoc.Enabled = .F., ;
"Enabled=.F. dupa Init (nidpolpretstoc=" + TRANSFORM(loForm2.nidpolpretstoc) + ") - fara filtru pe utilizator pe ramura V_TIP=1, cf. sursei citite"
loForm2.Refresh()
DO Verdict WITH loForm2.pgfrm_optiuni.Page1.Ct_clb_pol_pret_stoc.Enabled = .F., "Enabled=.F. dupa Refresh()"
*----------------------------------------------------------------------------------------
gcCaz = "[3: optiune GOALA] "
gnIdUtil = 8
LOCAL lnOk
lnOk = SQLEXEC(gnHandle, "UPDATE OPTIUNI SET VARVALUE = NULL WHERE PROGRAM = 'ROAFACTURARE' AND VARNAME = 'ID_POL_PRET_STOC'")
DO Verdict WITH lnOk > 0, "UPDATE OPTIUNI ID_POL_PRET_STOC=NULL (in tranzactie, ROLLBACK la final) - lnOk=" + TRANSFORM(lnOk)
loForm3 = CREATEOBJECT('frm_optiuni_facturare', 1)
DO Verdict WITH loForm3.pgfrm_optiuni.Page1.Ct_clb_pol_pret_stoc.Enabled = .T., ;
"Enabled=.T. cu optiunea goala (nidpolpretstoc=" + TRANSFORM(NVL(loForm3.nidpolpretstoc, -999)) + ")"
*----------------------------------------------------------------------------------------
* revin la optiunea reala (41) pentru cazul 4 - salvare fara schimbare trebuie sa compare fata
* de valoarea reala din OPTIUNI, nu fata de NULL-ul de mai sus
lnOk = SQLEXEC(gnHandle, "UPDATE OPTIUNI SET VARVALUE = '41' WHERE PROGRAM = 'ROAFACTURARE' AND VARNAME = 'ID_POL_PRET_STOC'")
DO Verdict WITH lnOk > 0, "restaurare OPTIUNI ID_POL_PRET_STOC=41 (tot in tranzactie) - lnOk=" + TRANSFORM(lnOk)
gcCaz = "[4: salvare fara schimbare de camp, spion oexecutor] "
loForm4 = CREATEOBJECT('frm_optiuni_facturare', 1)
loReal = goExecutor
loSpy = CREATEOBJECT('SpyS7a')
loSpy.nHandle = gnHandle
goExecutor = loSpy
loForm4.inainte_de_do_termin()
goExecutor = loReal
DO Verdict WITH !('modificare_politica_stoc' $ UPPER(loSpy.cToateSql)) AND !('MODIFICARE_POLITICA_STOC' $ loSpy.cToateSql), ;
"niciun SQL trimis prin executor nu contine modificare_politica_stoc (" + TRANSFORM(loSpy.nApeluri) + " apel(uri))"
*----------------------------------------------------------------------------------------
gcCaz = "[mutatie de control, instanta separata] "
LOCAL loFormCtrl
gnIdUtil = 8
loFormCtrl = CREATEOBJECT('frm_optiuni_facturare', 1)
loFormCtrl.pgfrm_optiuni.Page1.Ct_clb_pol_pret_stoc.Enabled = .T.
DO Verdict WITH loFormCtrl.pgfrm_optiuni.Page1.Ct_clb_pol_pret_stoc.Enabled = .T., ;
"dupa fortare manuala Enabled=.T. pe o instanta separata - un assert naiv 'Enabled=.F.' de la cazul 1 ar fi picat aici, deci asertul e sensibil la linia din Init"
DO Final
*==================================================================================================
* Spion pe goExecutor - subclasa DODEFAULT pe PCOUNT (nu opreste executia), tiparul din
* editare_factura\probe_s13_toomanycolumns.prg. Acumuleaza toate SQL-urile intr-un singur sir,
* pentru un singur test de substring la final.
*==================================================================================================
DEFINE CLASS SpyS7a AS oexecutor
nApeluri = 0
cToateSql = ''
PROCEDURE oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect)
LOCAL lnRet, lnPc, lcS
THIS.nApeluri = THIS.nApeluri + 1
lcS = IIF(VARTYPE(m.tcSql) = 'C', m.tcSql, '<NU E SIR>')
THIS.cToateSql = THIS.cToateSql + lcS + CHR(13) + CHR(10)
STRTOFILE(' SpyS7a #' + TRANSFORM(THIS.nApeluri) + ' SQL=[' + lcS + ']' + CHR(13) + CHR(10), gcLog, 1)
lnPc = PCOUNT()
DO CASE
CASE lnPc <= 1
lnRet = DODEFAULT(m.tcSql)
CASE lnPc = 2
lnRet = DODEFAULT(m.tcSql, m.tcCursor)
CASE lnPc = 3
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress)
CASE lnPc = 4
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress)
CASE lnPc = 5
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle)
CASE lnPc = 6
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError)
CASE lnPc = 7
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError)
OTHERWISE
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError, m.tlReconnect)
ENDCASE
RETURN lnRet
ENDPROC
ENDDEFINE
PROCEDURE Verdict
LPARAMETERS tlCond, tcMsg
IF tlCond
gnPass = gnPass + 1
DO AfLog WITH "PASS: " + gcCaz + tcMsg
ELSE
gnFail = gnFail + 1
DO AfLog WITH "FAIL: " + gcCaz + tcMsg
ENDIF
ENDPROC
PROCEDURE AfLog
LPARAMETERS tcMsg
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
ENDPROC
PROCEDURE AfErr
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + gcCaz + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
ENDPROC
PROCEDURE Final
LOCAL lnOk
gcCaz = "[final] "
lnOk = SQLEXEC(gnHandle, "ROLLBACK")
DO AfLog WITH "ROLLBACK lnOk=" + TRANSFORM(lnOk)
IF TYPE('gnTransOriginal') = 'N'
SQLSETPROP(gnHandle, "Transactions", gnTransOriginal)
ENDIF
DO AfLog WITH "TOTAL PASS=" + TRANSFORM(gnPass) + " FAIL=" + TRANSFORM(gnFail)
DO AfLog WITH "END " + TTOC(DATETIME())
QUIT
ENDPROC