Files
comun/utile/Teste/facturare_unificat/test_s4e_avize.prg
Marius Mutu 8e022d332e #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
2026-09-09 21:38:25 +03:00

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