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
348 lines
13 KiB
Plaintext
348 lines
13 KiB
Plaintext
* test_s4e_registru.prg
|
|
* Headless: S4e-4 - proba de neregresie a registrului, FARA COD NOU (nota_executie_s4e.md,
|
|
* sectiunea "S4e-4 - proba de neregresie a registrului", ~:451). Dovedeste pe RULARE, nu pe
|
|
* definitie de camp, ca do_sterge (COMUN\clase\ofacturare.vc2:20391-20458) si structura produsa
|
|
* de creeaza_facturacrs (COMUN\programe\ofacturare_comun.prg:1782-1798) raman corecte.
|
|
*
|
|
* Trei asertiuni:
|
|
* A1. Dupa APPEND BLANK pe un cursor creat de creeaza_facturacrs: id_c=0 si opt_facturare=0
|
|
* (campuri N() fara NULL, deci implicit 0 la APPEND BLANK - verificat pe rulare).
|
|
* A2. crsarticole cu 3 randuri de comanda (id_c 1..3); crsfactura cu o linie de comanda (id_c=2)
|
|
* si una libera (id_c=0). do_sterge pe linia LIBERA lasa Calculate Sum(cantitate) peste
|
|
* crsarticole NESCHIMBAT (REPLACE ... For id_c=0 nu gaseste niciun rand in crsarticole).
|
|
* do_sterge pe linia de COMANDA creste crsarticole.cantitate la id_c=2 cu exact cantitatea
|
|
* stearsa - ramura atinsa: "Case (gnScadereStoc=1 And poDate.tip=23) Or Inlist(poDate.tip,
|
|
* 3,4,21,25,28,42,47)" (ofacturare.vc2:20432).
|
|
* A3. Sum(crsarticole.cantitate) inainte si dupa adaugarea a doua linii libere in crsfactura:
|
|
* identic (liniile libere nu ating deloc crsarticole - cursoare separate).
|
|
*
|
|
* Sablon urmat: test_s4_5_do_sterge_garda.prg (garda Used(lcCursor) din do_sterge, deja verificata
|
|
* acolo - nu se reia aici). Dupa fiecare Calculate/Sum se face GO TOP IN crsarticole (Calculate muta
|
|
* Recno() la EOF pe cursorul afectat).
|
|
*
|
|
* Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s4e_registru.prg"
|
|
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4e_registru.log
|
|
* Mediu: ROA_CENTRAL / MARIUSM_AUTO; gnIdUtil = 8 inainte de creeaza_cursor_serii; gnScadereStoc = 1.
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
SET NOTIFY OFF
|
|
PUBLIC gcLog, gnFail, gnPass, gnErr, gcCaz, gcErr
|
|
PUBLIC gcMockApeluri, gnMockRaspuns, gcMockDuplicat, gnMockNumar
|
|
PUBLIC gnPc, gnPVal, gnPPretV, gnScadereStoc, gnMemProcDisc
|
|
gnMockNumar = 0
|
|
gnPc = 2
|
|
gnPVal = 2
|
|
gnPPretV = 4
|
|
gnScadereStoc = 1
|
|
gnMemProcDisc = 0
|
|
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4e_registru.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 = ""
|
|
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_generator_numere.prg", &lcProc
|
|
IF !actualizeaza_optiuni_program()
|
|
DO AfLog WITH "FAIL: actualizeaza_optiuni_program()"
|
|
DO Final
|
|
ENDIF
|
|
gnIdUtil = 8
|
|
gnIdSucursala = 167
|
|
goExecutor.oExecuta([begin pack_sesiune.set_Id_Util(?gnIdUtil); end;])
|
|
gnScadereStoc = 1
|
|
DO AfLog WITH "ENV OK, gnAn=" + TRANSFORM(gnAn) + " gnLuna=" + TRANSFORM(gnLuna) + " gnIdSucursala=" + TRANSFORM(gnIdSucursala)
|
|
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
|
|
|
|
IF USED('jtva_coloane')
|
|
USE IN jtva_coloane
|
|
ENDIF
|
|
CREATE CURSOR jtva_coloane (id_jtva_coloana N(14), denumire C(50), cota_tva N(6,2))
|
|
INSERT INTO jtva_coloane VALUES (190, 'TVA 19%', 19)
|
|
INSERT INTO jtva_coloane VALUES (210, 'TVA 21%', 21)
|
|
INSERT INTO jtva_coloane VALUES (110, 'TVA 11%', 11)
|
|
GO TOP IN jtva_coloane
|
|
|
|
PRIVATE poDate, poGeneratorNumere, plVizibil, pnTotalDiscountAvize
|
|
plVizibil = .F.
|
|
pnTotalDiscountAvize = 0
|
|
poDate = NULL
|
|
poGeneratorNumere = CREATEOBJECT("oGeneratorMock")
|
|
|
|
DO TestA1
|
|
DO TestA2
|
|
DO TestA3
|
|
|
|
DO Final
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* A1: pe rulare, nu pe definitie de camp - APPEND BLANK pe crsfactura creat de creeaza_facturacrs
|
|
* trebuie sa produca id_c=0 si opt_facturare=0 (ambele N() fara NULL in ofacturare_comun.prg:1782-1798).
|
|
PROCEDURE TestA1
|
|
LOCAL lnIdC, lnOptFact
|
|
|
|
gcCaz = "[A1: APPEND BLANK pe crsfactura din creeaza_facturacrs] "
|
|
DO AfLog WITH "PAS: " + gcCaz
|
|
DO Inchide WITH 'crstest_a1'
|
|
|
|
DO creeaza_facturacrs WITH 'crstest_a1'
|
|
DO Assert WITH USED('crstest_a1'), "cursorul a fost creat de creeaza_facturacrs"
|
|
|
|
SELECT crstest_a1
|
|
APPEND BLANK
|
|
lnIdC = id_c
|
|
lnOptFact = opt_facturare
|
|
DO Assert WITH lnIdC = 0, "id_c = 0 dupa APPEND BLANK (obtinut: " + TRANSFORM(lnIdC) + ")"
|
|
DO Assert WITH lnOptFact = 0, "opt_facturare = 0 dupa APPEND BLANK (obtinut: " + TRANSFORM(lnOptFact) + ")"
|
|
|
|
DO Inchide WITH 'crstest_a1'
|
|
ENDPROC
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* A2: do_sterge pe tip=3 (comanda), crsarticole cu 3 randuri (id_c 1..3), crsfactura cu o linie
|
|
* de comanda (id_c=2) si una libera (id_c=0).
|
|
* - stergerea liniei LIBERE: Calculate Sum(cantitate) peste crsarticole ramane neschimbat.
|
|
* - stergerea liniei de COMANDA: crsarticole.cantitate la id_c=2 creste cu exact cantitatea stearsa.
|
|
PROCEDURE TestA2
|
|
LOCAL loForm, lnSumInainte, lnSumDupa, lnCantId2Inainte, lnCantId2Dupa
|
|
|
|
gcCaz = "[A2: do_sterge - linie libera vs linie de comanda] "
|
|
DO AfLog WITH "PAS: " + gcCaz
|
|
DO Reseteaza WITH 3
|
|
|
|
SELECT 0
|
|
CREATE CURSOR crsarticole (id_c N(20), id_articol N(20), denumire C(100), cantitate N(20,4), ;
|
|
gestionabil N(1), opt_facturare N(3), Pret N(20,4), pret_val N(20,4), proc_tvav N(20,4), ;
|
|
preturi_cu_tva N(1), um C(10), id_gestiune N(20), cont C(10), id_valuta N(10), tip_valuta N(1), ;
|
|
Curs N(20,4), multiplicator N(10), discount_unitar N(20,4), discount_unitar_val N(20,4), ;
|
|
codmat C(50), codbare C(50), nume_val C(20))
|
|
INSERT INTO crsarticole VALUES (1, 401, "ARTICOL 1", 5, 1, 0, 100, 0, 1.19, 0, "BUC", ;
|
|
21, "371", 1, 0, 1, 1, 0, 0, "CM401", "", "RON")
|
|
INSERT INTO crsarticole VALUES (2, 402, "ARTICOL 2", 7, 1, 0, 100, 0, 1.19, 0, "BUC", ;
|
|
21, "371", 1, 0, 1, 1, 0, 0, "CM402", "", "RON")
|
|
INSERT INTO crsarticole VALUES (3, 403, "ARTICOL 3", 3, 1, 0, 100, 0, 1.19, 0, "BUC", ;
|
|
21, "371", 1, 0, 1, 1, 0, 0, "CM403", "", "RON")
|
|
GO TOP IN crsarticole
|
|
|
|
loForm = CREATEOBJECT('frm_facturare_articole2')
|
|
DO Assert WITH VARTYPE(loForm) = 'O', "Createobject frm_facturare_articole2"
|
|
IF VARTYPE(loForm) <> 'O'
|
|
RETURN
|
|
ENDIF
|
|
|
|
SELECT crsfactura
|
|
APPEND BLANK
|
|
REPLACE id_temp WITH 1, id_c WITH 2, id_articol WITH 402, denumire WITH "ARTICOL 2", ;
|
|
cantitate WITH 4, opt_facturare WITH 0
|
|
APPEND BLANK
|
|
REPLACE id_temp WITH 2, id_c WITH 0, id_articol WITH 999, denumire WITH "LINIE LIBERA", ;
|
|
cantitate WITH 2, opt_facturare WITH 0
|
|
DO Assert WITH RECCOUNT('crsfactura') = 2, "crsfactura are 2 randuri (comanda + libera)"
|
|
|
|
*-- pas 1: sterge linia LIBERA (id_c=0) - Sum(crsarticole.cantitate) ramane neschimbat
|
|
SELECT crsarticole
|
|
CALCULATE SUM(cantitate) TO lnSumInainte
|
|
GO TOP IN crsarticole
|
|
|
|
SELECT crsfactura
|
|
LOCATE FOR id_c = 0
|
|
DO Assert WITH FOUND(), "linia libera (id_c=0) gasita in crsfactura"
|
|
|
|
gnErr = 0
|
|
gcErr = ""
|
|
gnMockRaspuns = 6
|
|
loForm.do_sterge()
|
|
DO Assert WITH gnErr = 0, "do_sterge (linie libera) fara eroare"
|
|
DO Assert WITH RECCOUNT('crsfactura') = 1, "linia libera a fost stearsa din crsfactura"
|
|
|
|
SELECT crsarticole
|
|
CALCULATE SUM(cantitate) TO lnSumDupa
|
|
GO TOP IN crsarticole
|
|
DO Assert WITH lnSumDupa = lnSumInainte, "Sum(crsarticole.cantitate) neschimbat dupa stergerea liniei LIBERE (inainte=" + ;
|
|
TRANSFORM(lnSumInainte) + " dupa=" + TRANSFORM(lnSumDupa) + ")"
|
|
|
|
*-- pas 2: sterge linia de COMANDA (id_c=2) - crsarticole.cantitate la id_c=2 creste cu exact cantitatea stearsa (4)
|
|
SELECT crsarticole
|
|
LOCATE FOR id_c = 2
|
|
lnCantId2Inainte = cantitate
|
|
GO TOP IN crsarticole
|
|
|
|
SELECT crsfactura
|
|
LOCATE FOR id_c = 2
|
|
DO Assert WITH FOUND(), "linia de comanda (id_c=2) gasita in crsfactura"
|
|
|
|
gnErr = 0
|
|
gcErr = ""
|
|
gnMockRaspuns = 6
|
|
loForm.do_sterge()
|
|
DO Assert WITH gnErr = 0, "do_sterge (linie comanda) fara eroare"
|
|
DO Assert WITH RECCOUNT('crsfactura') = 0, "linia de comanda a fost stearsa din crsfactura"
|
|
|
|
SELECT crsarticole
|
|
LOCATE FOR id_c = 2
|
|
lnCantId2Dupa = cantitate
|
|
GO TOP IN crsarticole
|
|
DO Assert WITH lnCantId2Dupa = lnCantId2Inainte + 4, "crsarticole.cantitate la id_c=2 a crescut cu exact 4 (inainte=" + ;
|
|
TRANSFORM(lnCantId2Inainte) + " dupa=" + TRANSFORM(lnCantId2Dupa) + ")"
|
|
|
|
DO Inchide WITH 'crsarticole'
|
|
loForm.Release()
|
|
RELEASE loForm
|
|
ENDPROC
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* A3: adaugarea a doua linii libere (id_c=0) in crsfactura nu atinge deloc crsarticole -
|
|
* Sum(crsarticole.cantitate) identic inainte/dupa.
|
|
PROCEDURE TestA3
|
|
LOCAL lnSumInainte, lnSumDupa
|
|
|
|
gcCaz = "[A3: Sum(crsarticole) neschimbat de adaugarea liniilor libere] "
|
|
DO AfLog WITH "PAS: " + gcCaz
|
|
DO Reseteaza WITH 3
|
|
|
|
SELECT 0
|
|
CREATE CURSOR crsarticole (id_c N(20), id_articol N(20), denumire C(100), cantitate N(20,4), ;
|
|
gestionabil N(1), opt_facturare N(3), Pret N(20,4), pret_val N(20,4), proc_tvav N(20,4), ;
|
|
preturi_cu_tva N(1), um C(10), id_gestiune N(20), cont C(10), id_valuta N(10), tip_valuta N(1), ;
|
|
Curs N(20,4), multiplicator N(10), discount_unitar N(20,4), discount_unitar_val N(20,4), ;
|
|
codmat C(50), codbare C(50), nume_val C(20))
|
|
INSERT INTO crsarticole VALUES (1, 401, "ARTICOL 1", 5, 1, 0, 100, 0, 1.19, 0, "BUC", ;
|
|
21, "371", 1, 0, 1, 1, 0, 0, "CM401", "", "RON")
|
|
INSERT INTO crsarticole VALUES (2, 402, "ARTICOL 2", 7, 1, 0, 100, 0, 1.19, 0, "BUC", ;
|
|
21, "371", 1, 0, 1, 1, 0, 0, "CM402", "", "RON")
|
|
GO TOP IN crsarticole
|
|
|
|
SELECT crsarticole
|
|
CALCULATE SUM(cantitate) TO lnSumInainte
|
|
GO TOP IN crsarticole
|
|
|
|
SELECT crsfactura
|
|
APPEND BLANK
|
|
REPLACE id_temp WITH 1, id_c WITH 0, id_articol WITH 991, denumire WITH "LIBERA 1", ;
|
|
cantitate WITH 6, opt_facturare WITH 0
|
|
APPEND BLANK
|
|
REPLACE id_temp WITH 2, id_c WITH 0, id_articol WITH 992, denumire WITH "LIBERA 2", ;
|
|
cantitate WITH 9, opt_facturare WITH 0
|
|
DO Assert WITH RECCOUNT('crsfactura') = 2, "cele doua linii libere au fost adaugate in crsfactura"
|
|
|
|
SELECT crsarticole
|
|
CALCULATE SUM(cantitate) TO lnSumDupa
|
|
GO TOP IN crsarticole
|
|
DO Assert WITH lnSumDupa = lnSumInainte, "Sum(crsarticole.cantitate) identic inainte/dupa adaugarea a 2 linii libere (inainte=" + ;
|
|
TRANSFORM(lnSumInainte) + " dupa=" + TRANSFORM(lnSumDupa) + ")"
|
|
|
|
DO Inchide WITH 'crsarticole'
|
|
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'
|
|
DO Inchide WITH 'saft_tip_facturi'
|
|
SELECT 0
|
|
|
|
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 = ""
|
|
gcErr = ""
|
|
gnErr = 0
|
|
gnMockRaspuns = 6
|
|
gcMockDuplicat = ""
|
|
|
|
lnIdSet = 28000 + 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 = 79
|
|
poDate.serie_act = "TST"
|
|
poDate.id_client = 1
|
|
poDate.id_furnizor = 1
|
|
poDate.nrfactachi = 1
|
|
poDate.id_valuta = 1
|
|
poDate.in_valuta = 0
|
|
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
|
|
DO AfLog WITH "TOTAL pass=" + TRANSFORM(gnPass) + " fail=" + TRANSFORM(gnFail) + " err=" + TRANSFORM(gnErr)
|
|
DO AfLog WITH "END " + TTOC(DATETIME())
|
|
QUIT
|
|
ENDPROC
|