#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
This commit is contained in:
199
utile/Teste/facturare_unificat/test_s3_controale.prg
Normal file
199
utile/Teste/facturare_unificat/test_s3_controale.prg
Normal file
@@ -0,0 +1,199 @@
|
||||
* 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
|
||||
Reference in New Issue
Block a user