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
503 lines
21 KiB
Plaintext
503 lines
21 KiB
Plaintext
* test_s4e_avize.prg
|
|
* Headless: S4e-5 - extinderea si proba pe avize (tip 4 si 21,25,28,42,47), nota_executie_s4e.md
|
|
* sectiunea "S4e-5 - extinderea si proba pe avize (tip 4 si 21,25,28,42,47)" (~:479). FARA COD NOU -
|
|
* repeta probele S4e-4 (test_s4e_registru.prg) pe tip 4 ("factura din avize") si tip 21 (aviz din
|
|
* comanda), plus o proba suplimentara ceruta explicit de nota: dovada ca o linie LIBERA in crsfactura
|
|
* NU polueaza pnParametruAditional trimis catre Oracle prin scrie_factura_avize.
|
|
*
|
|
* CONSTATARE DE PROIECTARE (verificata pe cod, nu pe descrierea nota): pentru frm_facturare_articole2
|
|
* (clasa vizata de S4e - do_scrie_factura la COMUN\clase\ofacturare.vc2:19983-20322), ramura
|
|
* Case poDate.Tip = 4 (:20059-20074) NU foloseste un Calculate Sum(cantitate) local peste crsarticole
|
|
* / crsfactura, cum descrie nota - foloseste o functie Oracle server-side, pack_facturare.
|
|
* exista_ramas_avize_lista(poDate.listaid), care citeste dupa listaid, nu dupa continutul cursoarelor
|
|
* locale. La fel, ramura Case Inlist(poDate.Tip,3,21,25,28,42,47) (:20096-20107) foloseste
|
|
* pack_facturare.cantitate_ramasa_comanda(Val(poDate.listaid)). ("Calculate Sum(cantitate)" local
|
|
* exista doar in copia VECHE, frm_facturare_articole.do_scrie_factura, :14454/:14485 - alta clasa,
|
|
* nu cea vizata de S4e.) Asertiunile B/C de mai jos dovedesc pe rulare, nu doar pe citirea codului,
|
|
* ca rezultatul (SQL/suma/pnParametruAditional/dialog) e identic cu si fara linie libera.
|
|
*
|
|
* Patru grupe de asertiuni:
|
|
* A_Tip4 / A_Tip21 (echivalent A2 din test_s4e_registru.prg): do_sterge pe o linie LIBERA lasa
|
|
* Sum(crsarticole.cantitate) neschimbat; pe o linie de AVIZ/COMANDA creste cantitatea la id_c
|
|
* respectiv cu exact cantitatea stearsa. Ramura Do Case atinsa (ofacturare.vc2:20436):
|
|
* "Case (gnScadereStoc=1 And poDate.tip=23) Or Inlist(poDate.tip,3,4,21,25,28,42,47)" - aceeasi
|
|
* ca la tip 3 (S4e-4), doar poDate.tip difera.
|
|
* BC_Tip4 / BC_Tip21: asertiune DIRECTA - SQL-ul construit, lnCantitateRamasa, pnFacturaRetur (doar
|
|
* tip4) si pnParametruAditional sunt IDENTICE intre o rulare cu crsfactura continand doar linii de
|
|
* aviz/comanda si o rulare cu ACEEASI stare + o linie LIBERA suplimentara (cantitate mare, 999, ca
|
|
* sa iasa in evidenta orice contaminare). Executa SimulaRamuraTip4/SimulaRamuraComanda - o oglinda
|
|
* LITERALA a codului de productie citat mai sus (nu apeleaza Thisform.do_scrie_factura, care ar
|
|
* scrie in Oracle prin do_scrie_articole - risc si scop in afara perimetrului "fara cod nou").
|
|
* Captureaza si TEXTUL dialogului + tipul lui (raspunsul implicit e codificat in tnDialogBoxType,
|
|
* 4+32) prin mock_amessebox.prg (gcMockUltimMesaj/gnMockUltimTip) - PROBA PRIN MOCK, NU DIALOGUL
|
|
* REAL. Proba manuala pe dialogul real ("Gata cand" oficial al nota) ramane DATORIE DESCHISA -
|
|
* vezi raport.
|
|
*
|
|
* Sablon: test_s4e_registru.prg (S4e-4) + mock_amessagebox din test_s3b_emitere_reala.prg (PUBLIC
|
|
* gcMockUltimMesaj/gnMockUltimTip). CAPCANA descoperita aici: mock_validare_antet.prg defineste SI
|
|
* EL amessagebox, iar la nume duplicat de PROCEDURE intre fisiere SET PROCEDURE castiga PRIMUL
|
|
* fisier din lista (verificat empiric - vezi comentariul de la incarcarea SET PROCEDURE mai jos),
|
|
* nu ultimul cum spune antetul mock_amessagebox.prg - deci mock_amessagebox.prg trebuie incarcat
|
|
* PRIMUL. 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_avize.prg"
|
|
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4e_avize.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
|
|
PUBLIC gcMockUltimMesaj, gnMockUltimTip
|
|
PUBLIC gcUltimSql, gnUltimRamas, gnUltimFacturaRetur, gnUltimParamAditional
|
|
gnMockNumar = 0
|
|
gnPc = 2
|
|
gnPVal = 2
|
|
gnPPretV = 4
|
|
gnScadereStoc = 1
|
|
gnMemProcDisc = 0
|
|
gcMockUltimMesaj = ''
|
|
gnMockUltimTip = 0
|
|
gcUltimSql = ''
|
|
gnUltimRamas = 0
|
|
gnUltimFacturaRetur = 0
|
|
gnUltimParamAditional = 0
|
|
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s4e_avize.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")
|
|
* CAPCANA descoperita la scrierea acestui test: mock_validare_antet.prg si mock_amessagebox.prg
|
|
* definesc AMANDOUA FUNCTION amessagebox, si comentariile lor de antet se CONTRAZIC despre cine
|
|
* castiga la nume duplicat ("primul in lista" vs. "ultima incarcata"). Verificat EMPIRIC aici:
|
|
* la nume duplicat de PROCEDURE/FUNCTION intre fisiere SET PROCEDURE, castiga PRIMUL fisier din
|
|
* lista curenta a lui SET("PROCEDURE") - exact ce spune antetul mock_validare_antet.prg, NU ce
|
|
* spune antetul mock_amessagebox.prg. De-aici, mock_amessagebox.prg trebuie pus PRIMUL ca sa
|
|
* castige (necesar pt. captura gcMockUltimMesaj/gnMockUltimTip din TestBC_*); mock_validare_antet.prg
|
|
* ramane incarcat dupa el, doar pt. facturi_duplicate (nefolosit de acest test, dar pastrat pt.
|
|
* orice alt apel indirect din do_sterge).
|
|
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", ;
|
|
"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 TestA_Tip4
|
|
DO TestA_Tip21
|
|
DO TestBC_Tip4
|
|
DO TestBC_Tip21
|
|
|
|
DO Final
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* A_Tip4: echivalentul A2 din test_s4e_registru.prg, pe poDate.tip=4. crsarticole cu 3 randuri
|
|
* (id_c 1..3); crsfactura cu o linie de aviz (id_c=2) si una libera (id_c=0). Ramura Do Case atinsa
|
|
* in do_sterge (ofacturare.vc2:20436): Inlist(poDate.tip,3,4,21,25,28,42,47) - include 4 explicit.
|
|
PROCEDURE TestA_Tip4
|
|
DO TestARegistru WITH 4
|
|
ENDPROC
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* A_Tip21: identic cu A_Tip4, pe poDate.tip=21 (aviz din comanda). Aceeasi ramura Do Case
|
|
* (Inlist include si 21).
|
|
PROCEDURE TestA_Tip21
|
|
DO TestARegistru WITH 21
|
|
ENDPROC
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* Corpul comun A2-echivalent, parametrizat pe tip (3 la S4e-4, 4/21 aici).
|
|
PROCEDURE TestARegistru
|
|
LPARAMETERS tnTip
|
|
LOCAL loForm, lnSumInainte, lnSumDupa, lnCantId2Inainte, lnCantId2Dupa
|
|
|
|
gcCaz = "[A tip=" + TRANSFORM(tnTip) + ": do_sterge - linie libera vs linie de aviz/comanda] "
|
|
DO AfLog WITH "PAS: " + gcCaz
|
|
DO Reseteaza WITH tnTip
|
|
|
|
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 (aviz/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 aviz/comanda (id_c=2) - crsarticole.cantitate la id_c=2 creste cu exact 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 aviz/comanda (id_c=2) gasita in crsfactura"
|
|
|
|
gnErr = 0
|
|
gcErr = ""
|
|
gnMockRaspuns = 6
|
|
loForm.do_sterge()
|
|
DO Assert WITH gnErr = 0, "do_sterge (linie aviz/comanda) fara eroare"
|
|
DO Assert WITH RECCOUNT('crsfactura') = 0, "linia de aviz/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
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* BC_Tip4: asertiune directa - SQL/suma/pnFacturaRetur/pnParametruAditional/dialog (text+tip)
|
|
* identice intre "fara linie libera" si "cu linie libera" pe ramura tip 4.
|
|
PROCEDURE TestBC_Tip4
|
|
LOCAL lcSql1, lnRamas1, lnFacturaRetur1, lnParam1, lcMesaj1, lnTip1
|
|
LOCAL lcSql2, lnRamas2, lnFacturaRetur2, lnParam2, lcMesaj2, lnTip2
|
|
|
|
gcCaz = "[BC tip=4: SQL/suma/pnParametruAditional/dialog identice cu si fara linie libera] "
|
|
DO AfLog WITH "PAS: " + gcCaz
|
|
DO Reseteaza WITH 4
|
|
poDate.listaid = "1"
|
|
|
|
*-- baseline: crsfactura cu doar o linie de aviz (fara linie libera)
|
|
SELECT crsfactura
|
|
APPEND BLANK
|
|
REPLACE id_temp WITH 1, id_c WITH 5, id_articol WITH 501, denumire WITH "AVIZ LINIE", ;
|
|
cantitate WITH 3, opt_facturare WITH 0
|
|
|
|
gcMockUltimMesaj = ''
|
|
gnMockUltimTip = 0
|
|
IF !DO_SimulaRamuraTip4()
|
|
DO AfLog WITH "FAIL: SimulaRamuraTip4 (baseline) nu a putut fi executata - vezi asertiunea SELECT de mai sus"
|
|
RETURN
|
|
ENDIF
|
|
lcSql1 = gcUltimSql
|
|
lnRamas1 = gnUltimRamas
|
|
lnFacturaRetur1 = gnUltimFacturaRetur
|
|
lnParam1 = gnUltimParamAditional
|
|
lcMesaj1 = gcMockUltimMesaj
|
|
lnTip1 = gnMockUltimTip
|
|
|
|
*-- poluat: aceeasi stare + o linie LIBERA (id_c=0), cantitate mare (999) ca sa iasa in evidenta
|
|
SELECT crsfactura
|
|
APPEND BLANK
|
|
REPLACE id_temp WITH 2, id_c WITH 0, id_articol WITH 999, denumire WITH "LINIE LIBERA", ;
|
|
cantitate WITH 999, opt_facturare WITH 0
|
|
DO Assert WITH RECCOUNT('crsfactura') = 2, "crsfactura are acum si linia libera (tip 4)"
|
|
|
|
gcMockUltimMesaj = ''
|
|
gnMockUltimTip = 0
|
|
IF !DO_SimulaRamuraTip4()
|
|
DO AfLog WITH "FAIL: SimulaRamuraTip4 (poluat) nu a putut fi executata - vezi asertiunea SELECT de mai sus"
|
|
RETURN
|
|
ENDIF
|
|
lcSql2 = gcUltimSql
|
|
lnRamas2 = gnUltimRamas
|
|
lnFacturaRetur2 = gnUltimFacturaRetur
|
|
lnParam2 = gnUltimParamAditional
|
|
lcMesaj2 = gcMockUltimMesaj
|
|
lnTip2 = gnMockUltimTip
|
|
|
|
DO Assert WITH lcSql1 = lcSql2, "SQL-ul (exista_ramas_avize_lista) identic cu/fara linie libera"
|
|
DO Assert WITH lnRamas1 = lnRamas2, "lnCantitateRamasa identic (obtinut: " + TRANSFORM(lnRamas1) + " / " + TRANSFORM(lnRamas2) + ")"
|
|
DO Assert WITH lnFacturaRetur1 = lnFacturaRetur2, "pnFacturaRetur identic (obtinut: " + TRANSFORM(lnFacturaRetur1) + " / " + TRANSFORM(lnFacturaRetur2) + ")"
|
|
DO Assert WITH lnParam1 = lnParam2, "pnParametruAditional identic (obtinut: " + TRANSFORM(lnParam1) + " / " + TRANSFORM(lnParam2) + ")"
|
|
DO Assert WITH lcMesaj1 = lcMesaj2, "textul dialogului (mock) identic cu/fara linie libera (obtinut: [" + lcMesaj1 + "] / [" + lcMesaj2 + "])"
|
|
DO Assert WITH lnTip1 = lnTip2, "tipul dialogului / raspunsul implicit (mock) identic cu/fara linie libera (obtinut: " + TRANSFORM(lnTip1) + " / " + TRANSFORM(lnTip2) + ")"
|
|
ENDPROC
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* BC_Tip21: identic cu BC_Tip4, dar pe ramura Inlist(poDate.Tip,3,21,25,28,42,47) - foloseste
|
|
* cantitate_ramasa_comanda in loc de exista_ramas_avize_lista, si nu are pnFacturaRetur.
|
|
PROCEDURE TestBC_Tip21
|
|
LOCAL lcSql1, lnRamas1, lnParam1, lcMesaj1, lnTip1
|
|
LOCAL lcSql2, lnRamas2, lnParam2, lcMesaj2, lnTip2
|
|
|
|
gcCaz = "[BC tip=21: SQL/suma/pnParametruAditional/dialog identice cu si fara linie libera] "
|
|
DO AfLog WITH "PAS: " + gcCaz
|
|
DO Reseteaza WITH 21
|
|
poDate.listaid = "1"
|
|
|
|
SELECT crsfactura
|
|
APPEND BLANK
|
|
REPLACE id_temp WITH 1, id_c WITH 5, id_articol WITH 501, denumire WITH "COMANDA LINIE", ;
|
|
cantitate WITH 3, opt_facturare WITH 0
|
|
|
|
gcMockUltimMesaj = ''
|
|
gnMockUltimTip = 0
|
|
IF !DO_SimulaRamuraComanda()
|
|
DO AfLog WITH "FAIL: SimulaRamuraComanda (baseline) nu a putut fi executata - vezi asertiunea SELECT de mai sus"
|
|
RETURN
|
|
ENDIF
|
|
lcSql1 = gcUltimSql
|
|
lnRamas1 = gnUltimRamas
|
|
lnParam1 = gnUltimParamAditional
|
|
lcMesaj1 = gcMockUltimMesaj
|
|
lnTip1 = gnMockUltimTip
|
|
|
|
SELECT crsfactura
|
|
APPEND BLANK
|
|
REPLACE id_temp WITH 2, id_c WITH 0, id_articol WITH 999, denumire WITH "LINIE LIBERA", ;
|
|
cantitate WITH 999, opt_facturare WITH 0
|
|
DO Assert WITH RECCOUNT('crsfactura') = 2, "crsfactura are acum si linia libera (tip 21)"
|
|
|
|
gcMockUltimMesaj = ''
|
|
gnMockUltimTip = 0
|
|
IF !DO_SimulaRamuraComanda()
|
|
DO AfLog WITH "FAIL: SimulaRamuraComanda (poluat) nu a putut fi executata - vezi asertiunea SELECT de mai sus"
|
|
RETURN
|
|
ENDIF
|
|
lcSql2 = gcUltimSql
|
|
lnRamas2 = gnUltimRamas
|
|
lnParam2 = gnUltimParamAditional
|
|
lcMesaj2 = gcMockUltimMesaj
|
|
lnTip2 = gnMockUltimTip
|
|
|
|
DO Assert WITH lcSql1 = lcSql2, "SQL-ul (cantitate_ramasa_comanda) identic cu/fara linie libera"
|
|
DO Assert WITH lnRamas1 = lnRamas2, "lnCantitateRamasa identic (obtinut: " + TRANSFORM(lnRamas1) + " / " + TRANSFORM(lnRamas2) + ")"
|
|
DO Assert WITH lnParam1 = lnParam2, "pnParametruAditional identic (obtinut: " + TRANSFORM(lnParam1) + " / " + TRANSFORM(lnParam2) + ")"
|
|
DO Assert WITH lcMesaj1 = lcMesaj2, "textul dialogului (mock) identic cu/fara linie libera (obtinut: [" + lcMesaj1 + "] / [" + lcMesaj2 + "])"
|
|
DO Assert WITH lnTip1 = lnTip2, "tipul dialogului / raspunsul implicit (mock) identic cu/fara linie libera (obtinut: " + TRANSFORM(lnTip1) + " / " + TRANSFORM(lnTip2) + ")"
|
|
ENDPROC
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* Oglinda LITERALA a COMUN\clase\ofacturare.vc2:20059-20074 (frm_facturare_articole2.do_scrie_factura,
|
|
* Case poDate.Tip = 4). NU apeleaza metoda reala - aceea scrie in Oracle prin do_scrie_articole,
|
|
* in afara perimetrului "fara cod nou" al S4e-5. Rezultatul se pune in gcUltimSql/gnUltimRamas/
|
|
* gnUltimFacturaRetur/gnUltimParamAditional. Returneaza .F. daca SELECT-ul Oracle a esuat (nu e
|
|
* asertiune de esec al S4e-5, ci semnal ca proba nu a putut rula pe acest mediu).
|
|
PROCEDURE DO_SimulaRamuraTip4
|
|
LOCAL lcSql, lnCantitateRamasa, lnFacturaRetur, lnParamAditional, lnRet
|
|
|
|
lcSql = [SELECT pack_facturare.exista_ramas_avize_lista('] + Alltrim(poDate.listaid) + [') AS ramas FROM dual]
|
|
lnRet = goExecutor.oExecute(lcSql,'crsramasavize')
|
|
DO Assert WITH lnRet >= 0, "SELECT exista_ramas_avize_lista a rulat fara eroare (ret=" + TRANSFORM(lnRet) + ")"
|
|
IF lnRet < 0
|
|
RETURN .F.
|
|
ENDIF
|
|
lnCantitateRamasa = crsramasavize.ramas
|
|
USE IN (SELECT('crsramasavize'))
|
|
IF lnCantitateRamasa > 0
|
|
lnFacturaRetur = 7 - amessagebox("Doriti sa se inregistreze si avizul de retur?",4+32,"Confirmare")
|
|
lnParamAditional = 1
|
|
ELSE
|
|
lnFacturaRetur = 0
|
|
lnParamAditional = 0
|
|
ENDIF
|
|
gcUltimSql = lcSql
|
|
gnUltimRamas = lnCantitateRamasa
|
|
gnUltimFacturaRetur = lnFacturaRetur
|
|
gnUltimParamAditional = lnParamAditional
|
|
RETURN .T.
|
|
ENDPROC
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* Oglinda LITERALA a ofacturare.vc2:20096-20107 (Case Inlist(poDate.Tip,3,21,25,28,42,47)).
|
|
PROCEDURE DO_SimulaRamuraComanda
|
|
LOCAL lcSql, lnCantitateRamasa, lnParamAditional, lnRet
|
|
|
|
lcSql = [SELECT pack_facturare.cantitate_ramasa_comanda(] + Alltrim(Str(Val(poDate.listaid))) + [) AS ramas FROM dual]
|
|
lnRet = goExecutor.oExecute(lcSql,'crsramascomanda')
|
|
DO Assert WITH lnRet >= 0, "SELECT cantitate_ramasa_comanda a rulat fara eroare (ret=" + TRANSFORM(lnRet) + ")"
|
|
IF lnRet < 0
|
|
RETURN .F.
|
|
ENDIF
|
|
lnCantitateRamasa = crsramascomanda.ramas
|
|
USE IN (SELECT('crsramascomanda'))
|
|
lnParamAditional = 0
|
|
IF lnCantitateRamasa <> 0
|
|
lnParamAditional = 7 - amessagebox("Doriti sa se inchida comanda?",4+32,"Confirmare")
|
|
ENDIF
|
|
gcUltimSql = lcSql
|
|
gnUltimRamas = lnCantitateRamasa
|
|
gnUltimParamAditional = lnParamAditional
|
|
RETURN .T.
|
|
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 = ""
|
|
gcMockUltimMesaj = ''
|
|
gnMockUltimTip = 0
|
|
|
|
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
|