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
239 lines
8.7 KiB
Plaintext
239 lines
8.7 KiB
Plaintext
* test_s4e_2_verifica_articol.prg
|
|
* Headless: do_verifica_articol pe frm_facturare_articole2 (COMUN\clase\ofacturare.vc2) primeste
|
|
* articolul ca parametru explicit (toArticol), decizia 44 - in loc sa citeasca Private-ul poArticol
|
|
* populat de apelant. Testul construieste poArticol ad-hoc (CREATEOBJECT('Empty') + AddProperty),
|
|
* FARA sa declare Private poArticol in scopul apelant, si verifica ca metoda produce acelasi verdict
|
|
* ca inainte de schimbare pe un tabel de cazuri care acopera dimensiunile din nota_executie_s4e.md §8:
|
|
* gestionabil (0/1), cantitate (<=0 / >0), opt_facturare (0/3), poDate.tip (3/8/2).
|
|
*
|
|
* Conditia din cod (neschimbata ca logica, doar poArticol -> toArticol):
|
|
* (cantitate>=0 SI tip IN(8,9)) -> refuz (stoc)
|
|
* SAU (cantitate<=0 SI NOT(tip=2 SI opt_facturare=3) SI tip NOT IN(8,9)
|
|
* SI gestionabil=1 SI gnScadereStoc=1 SI NOT llFacturareFaraStoc) -> refuz (stoc)
|
|
* altfel -> accept
|
|
*
|
|
* Cazuri (tlContract = .F., gnScadereStoc = 1, gnRF_FACTURARE_FARA_STOC nesetat):
|
|
* C1. RETUR_POZITIV tip=8 cant=5 gest=1 opt=0 -> refuz (cantitate pozitiva pe retur)
|
|
* C2. STOC_INSUFICIENT tip=3 cant=-1 gest=1 opt=0 -> refuz (cazul normal de "nu e pe stoc")
|
|
* C3. NEGESTIONABIL tip=3 cant=-1 gest=0 opt=0 -> accept (articol negestionabil, fara plafon)
|
|
* C4. CANTITATE_POZITIVA tip=3 cant=5 gest=1 opt=0 -> accept (cantitate pozitiva pe tip normal)
|
|
* C5. CONTRACT_OPT3 tip=2 cant=-1 gest=1 opt=3 -> accept (exceptia pret fixat prin contract)
|
|
* C6. CONTRACT_OPT0 tip=2 cant=-1 gest=1 opt=0 -> refuz (fara exceptia opt_facturare=3)
|
|
* C7. RETUR_NEPOZITIV tip=8 cant=-1 gest=1 opt=0 -> accept (retur cu cantitate nepozitiva)
|
|
*
|
|
* amessagebox e mocat (mock_validare_antet.prg, ADITIV inainte in SET PROCEDURE) ca sa nu apara
|
|
* dialogul real "Acest articol nu este pe stoc!" - apelul se verifica prin gcMockApeluri, nu vizual.
|
|
*
|
|
* Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s4e_2_verifica_articol.prg"
|
|
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4e_2_verifica_articol.log
|
|
* Mediu: ROA_CENTRAL / MARIUSM_AUTO; gnIdUtil = 8; gnScadereStoc = 1.
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
SET NOTIFY OFF
|
|
PUBLIC gcLog, gnFail, gnPass, gnErr, gcCaz, gcErr
|
|
PUBLIC gcMockApeluri, gnMockNumar, gcMockSql, gnMockSucces, gnMockEroare, gcMockMod, gcMockCurs
|
|
PUBLIC gnMockRaspuns, gcMockDuplicat, goExecutorReal
|
|
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4e_2_verifica_articol.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
|
|
gnErr = 0
|
|
gcCaz = ""
|
|
gcErr = ""
|
|
gcMockApeluri = ""
|
|
gnMockNumar = 0
|
|
gcMockSql = ""
|
|
gnMockSucces = 1
|
|
gnMockEroare = 0
|
|
gcMockMod = "PLIN"
|
|
gcMockCurs = ""
|
|
gnMockRaspuns = 6
|
|
gcMockDuplicat = ""
|
|
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
|
|
LOCAL lcProc
|
|
lcProc = SET("PROCEDURE")
|
|
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\mock_validare_antet.prg", ;
|
|
"D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\mock_cursor_articole.prg", ;
|
|
&lcProc, "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\mock_generator_numere.prg"
|
|
IF !actualizeaza_optiuni_program()
|
|
DO AfLog WITH "FAIL: actualizeaza_optiuni_program()"
|
|
DO Final
|
|
ENDIF
|
|
gnIdUtil = 8
|
|
goExecutor.oExecuta([begin pack_sesiune.set_Id_Util(?gnIdUtil); end;])
|
|
gnScadereStoc = 1
|
|
DO AfLog WITH "ENV OK, gnAn=" + TRANSFORM(gnAn) + " gnLuna=" + TRANSFORM(gnLuna)
|
|
SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras" ADDITIVE
|
|
SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras\gridextras.vcx" ADDITIVE
|
|
SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\clase\_cb_base.vcx" ADDITIVE
|
|
|
|
update_jtva_coloane([JV], [jtva_coloane_temp])
|
|
|
|
PRIVATE poDate, poGeneratorNumere, plVizibil, pnTotalDiscountAvize
|
|
plVizibil = .F.
|
|
pnTotalDiscountAvize = 0
|
|
poGeneratorNumere = CREATEOBJECT("oGeneratorMock")
|
|
poDate = NULL
|
|
|
|
goExecutorReal = goExecutor
|
|
goExecutor = CREATEOBJECT("oExecutorMock")
|
|
goExecutor.oReal = goExecutorReal
|
|
|
|
DO Caz WITH "C1_RETUR_POZITIV", 8, 1, 0, 5, .T.
|
|
DO Caz WITH "C2_STOC_INSUFICIENT", 3, 1, 0, -1, .T.
|
|
DO Caz WITH "C3_NEGESTIONABIL", 3, 0, 0, -1, .F.
|
|
DO Caz WITH "C4_CANTITATE_POZITIVA", 3, 1, 0, 5, .F.
|
|
DO Caz WITH "C5_CONTRACT_OPT3", 2, 1, 3, -1, .F.
|
|
DO Caz WITH "C6_CONTRACT_OPT0", 2, 1, 0, -1, .T.
|
|
DO Caz WITH "C7_RETUR_NEPOZITIV", 8, 1, 0, -1, .F.
|
|
|
|
DO Final
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* tnTip, tnGestionabil, tnOptFacturare, tnCantitate, tlAsteptatRefuz (.T. = trebuie refuzat)
|
|
PROCEDURE Caz
|
|
LPARAMETERS tcCaz, tnTip, tnGestionabil, tnOptFacturare, tnCantitate, tlAsteptatRefuz
|
|
LOCAL loForm, llRezultat, loArticol
|
|
gcCaz = "[" + tcCaz + "] "
|
|
DO AfLog WITH "PAS: " + gcCaz
|
|
|
|
DO Reseteaza WITH tnTip
|
|
|
|
loForm = CREATEOBJECT('frm_facturare_articole2')
|
|
DO Assert WITH VARTYPE(loForm) = 'O', "Createobject frm_facturare_articole2"
|
|
IF VARTYPE(loForm) <> 'O'
|
|
RETURN
|
|
ENDIF
|
|
|
|
loArticol = CREATEOBJECT('Empty')
|
|
AddProperty(loArticol, 'gestionabil', tnGestionabil)
|
|
AddProperty(loArticol, 'opt_facturare', tnOptFacturare)
|
|
AddProperty(loArticol, 'id_articol', 1)
|
|
AddProperty(loArticol, 'denumire', 'ARTICOL TEST')
|
|
AddProperty(loArticol, 'nume_lista_preturi', 'LISTA TEST')
|
|
|
|
gcMockApeluri = ""
|
|
llRezultat = loForm.do_verifica_articol(loArticol, .F., tnCantitate)
|
|
|
|
IF tlAsteptatRefuz
|
|
DO Assert WITH !llRezultat, "Return .F. (refuz) asteptat"
|
|
DO Assert WITH "amessagebox(" $ gcMockApeluri, "mesaj de stoc afisat (mocat)"
|
|
ELSE
|
|
DO Assert WITH llRezultat, "Return .T. (accept) asteptat"
|
|
DO Assert WITH !("amessagebox(" $ gcMockApeluri), "niciun mesaj de stoc afisat"
|
|
ENDIF
|
|
|
|
loForm.Release()
|
|
RELEASE loForm
|
|
ENDPROC
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
PROCEDURE Reseteaza
|
|
LPARAMETERS tnTip
|
|
LOCAL lnIdSet
|
|
|
|
DO Inchide WITH 'crsarticole'
|
|
DO Inchide WITH 'crsarticole1'
|
|
DO Inchide WITH 'crsfactura'
|
|
DO Inchide WITH 'crscursuri'
|
|
DO Inchide WITH 'crspolitici'
|
|
DO Inchide WITH 'crscontracte'
|
|
DO Inchide WITH 'crsgestiunidest'
|
|
DO Inchide WITH 'crsCtrTemp'
|
|
DO Inchide WITH 'CrsCotaTva'
|
|
SELECT 0
|
|
|
|
* cboTipFactura (frm_facturare_articole2) cere RowSource pe saft_tip_facturi la constructie
|
|
IF !USED('saft_tip_facturi')
|
|
CREATE CURSOR saft_tip_facturi (cod N(3) NULL, tip_saftname C(200) NULL)
|
|
INSERT INTO saft_tip_facturi (cod, tip_saftname) VALUES (NULL, '')
|
|
INDEX ON cod TAG cod
|
|
ENDIF
|
|
|
|
DO creeaza_facturacrs WITH 'crsfactura'
|
|
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
|
|
|
|
gcMockApeluri = ""
|
|
gcMockSql = ""
|
|
gcMockCurs = ""
|
|
gcErr = ""
|
|
gnMockNumar = 100
|
|
gnMockRaspuns = 6
|
|
gcMockDuplicat = ""
|
|
gcMockMod = "PLIN"
|
|
gnMockSucces = 1
|
|
gnMockEroare = 0
|
|
|
|
lnIdSet = 25000 + tnTip
|
|
poDate = NULL
|
|
poDate = CREATEOBJECT("oDateFactura", lnIdSet, tnTip)
|
|
poDate.dataireg = DATE(gnAn, gnLuna, 1)
|
|
poDate.dataact = poDate.dataireg
|
|
poDate.zi_curs = poDate.dataireg
|
|
poDate.id_fdoc = 1
|
|
poDate.fdoc = "FEL TEST"
|
|
poDate.nract = 77
|
|
poDate.serie_act = "TST"
|
|
poDate.id_client = 1
|
|
poDate.id_furnizor = 1
|
|
poDate.nrfactachi = 1
|
|
poDate.id_valuta = 1
|
|
poDate.listaid = "1"
|
|
|
|
poGeneratorNumere.ResetNumere()
|
|
poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc)
|
|
gcMockApeluri = ""
|
|
ENDPROC
|
|
|
|
PROCEDURE Inchide
|
|
LPARAMETERS tcAlias
|
|
IF USED(tcAlias)
|
|
USE IN (tcAlias)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROCEDURE Assert
|
|
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
|
|
gcErr = gcErr + TRANSFORM(tnErr) + " " + tcMsg + " (" + TRANSFORM(tcProg) + ":" + TRANSFORM(tnLine) + ")" + CHR(13) + CHR(10)
|
|
gnErr = gnErr + 1
|
|
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
|
|
ENDPROC
|
|
|
|
PROCEDURE Final
|
|
IF TYPE('goExecutorReal') = 'O'
|
|
goExecutor = goExecutorReal
|
|
ENDIF
|
|
DO AfLog WITH "TOTAL pass=" + TRANSFORM(gnPass) + " fail=" + TRANSFORM(gnFail) + " err=" + TRANSFORM(gnErr)
|
|
DO AfLog WITH "END " + TTOC(DATETIME())
|
|
QUIT
|
|
ENDPROC
|