teste: suita headless pentru pretul cu TVA pe linie (ROAFACTURARE 2.11.14)
Patru niveluri, 38 de asertii, toate PASS pe binarul din SVN r17998:
- test_pret_cu_tva_dialog - dialogul frm_articol_factura izolat (14)
- test_pret_cu_tva_nivel2 - factura in curs de compunere, adaugare si ambele cai de
modificare (buton si dublu-clic), Renunta bit-identic (7)
- test_pret_cu_tva_nivel2_retur - plafonul de cantitate recalculat, pe ramura de retur (4)
- test_pret_cu_tva_nivel3_gestiuni - ramura gestionabila, cu Oracle mockuit la granita prin
dummyexecutor: preselectia gestiunii, excluderea liniei din
propriul stoc, plafonul pe lot, multi-selectia (13)
Nivelurile 2 si 3 conduc dialoguri modale deschise din codul aplicatiei (Show(1) hardcodat),
prin Timer pe _SCREEN si detectie in _SCREEN.Forms - mecanismul e descris in
docs/testare-ui-vfp.md.
Suita nu e in SVN (utile/Teste e ignorat acolo), deci traieste doar in git.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
This commit is contained in:
663
utile/Teste/facturare_pret_cu_tva/test_pret_cu_tva_dialog.prg
Normal file
663
utile/Teste/facturare_pret_cu_tva/test_pret_cu_tva_dialog.prg
Normal file
@@ -0,0 +1,663 @@
|
||||
* test_pret_cu_tva_dialog.prg
|
||||
* Test UI Nivel 1 (S5, plan #7) pentru dialogul PER-ARTICOL real, clasa frm_articol_factura din
|
||||
* COMUN\clase\ofacturare.vc2. Instantiaza clasa exact cum o instantiaza aplicatia in
|
||||
* frm_facturare_articole.do_adauga_articol (ofacturare.vc2:12869):
|
||||
* Createobject("frm_articol_factura", lnCantitate, tlImplicit)
|
||||
* apoi exerseaza handlerele REALE (ck_pret_cu_tva.InteractiveChange, Clb_pretctva.tx_suma_nat.
|
||||
* InteractiveChange, Clb_discountctva.tx_suma_nat.Valid) - nu populeaza direct poArticol cu
|
||||
* rezultate calculate manual, doar cu DATELE DE INTRARE (pretul tastat, bifa), exact ce ar
|
||||
* introduce utilizatorul. poArticol se construieste ca obiect liber (CREATEOBJECT+ADDPROPERTY),
|
||||
* echivalent cu Scatter Name poArticol MEMO din crsarticole (acelasi shape de date), pentru ca
|
||||
* testul sa ramana independent de Oracle si de celelalte doua griduri ale formularului parinte.
|
||||
*
|
||||
* Nivel 2 (flux complet prin frm_facturare_articole, propagare in crsfactura, buton
|
||||
* but_modificare din S2b) NU e acoperit aici - vezi docs\cercetare\rec_s5_teste.md pentru motiv.
|
||||
*
|
||||
* Pasi (vezi vfp_ui_harness.ps1 -Steps):
|
||||
* 0 mediu pregatit
|
||||
* 1 cazul tinta: bifa=1, pret tastat 100.00 cu TVA, cantitate 1 -> total exact 100.00
|
||||
* 2 comutare bifa OFF->ON: pretul fara TVA tastat nu se pierde
|
||||
* 3 comutare bifa ON->OFF: pretul cu TVA tastat nu se pierde
|
||||
* 4 cota standard 21%
|
||||
* 5 cota redusa 11%
|
||||
* 6 discount unitar cu TVA (ramura discountctva)
|
||||
* 7 bifa activa pe tip de document din lista (Inlist 1,5,10,22,23,25,29,41)
|
||||
* 8 bifa dezactivata pe tip din afara listei, cu pret nenul
|
||||
* 9 final
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_pret_cu_tva\test_pret_cu_tva_dialog_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_pret_cu_tva\uisync\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAFACTURARE\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\CALENDAR;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EMAIL;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\NFJSON;' + gcAppPath + 'COMUN\UTILE\NFXML;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO AfLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE (lista din Programe\roafacturare.prg, scopul minim pentru ofacturare.vcx) -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms ADDITIVE
|
||||
SET CLASSLIB TO ofacturare.vcx ADDITIVE
|
||||
SET CLASSLIB TO ofacturare_comun.vcx ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO ofacturare_rapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO onom_curs ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date ADDITIVE
|
||||
SET CLASSLIB TO baza ADDITIVE
|
||||
SET CLASSLIB TO caut ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO serii_numere ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO _calendar.vcx ADDITIVE
|
||||
SET CLASSLIB TO locale ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ocomenzi ADDITIVE
|
||||
DO AfLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock amessagebox PRIMUL, ui_harness la final) -----
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg"
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.prg ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare2.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rapoarte_fact.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO odocumente ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa.prg ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_curs.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO wwApi.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.prg ADDITIVE
|
||||
SET PROCEDURE TO pmenu.prg ADDITIVE
|
||||
SET PROCEDURE TO ointroduceri.prg ADDITIVE
|
||||
SET PROCEDURE TO ovariabile_globale.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO suma_in_vorbe.prg ADDITIVE
|
||||
SET PROCEDURE TO controllerecr ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO AfLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
*----- Globale aplicatie cerute de frm_articol_factura / calculeaza_totaluri -----
|
||||
PUBLIC gnPc, gnPVal, gnPcant, gnPPretV, gnScadereStoc, gnMemProcDisc, gl406, gcAcces
|
||||
gnPc = 2 && precizie sume lei
|
||||
gnPVal = 2 && precizie sume valuta
|
||||
gnPcant = 3 && precizie cantitate (doar pt. InputMask)
|
||||
gnPPretV = 4 && precizie unitara pret/tva/discount
|
||||
gnScadereStoc = 0 && ocoleste ramura serie/lot needitabila si clb_procent_adaos
|
||||
gnMemProcDisc = 0 && ocoleste memorarea procentului de discount intre articole
|
||||
gl406 = .F. && SAFT dezactivat - flagul pret_cu_tva nu are legatura cu taxcode
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
PUBLIC nror(65000)
|
||||
|
||||
PUBLIC goApp
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
|
||||
*----- jtva_coloane: cotele curente (regim post 01.08.2025) - 21% standard, 11% redusa -----
|
||||
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 (1, 'TVA 21%', 21)
|
||||
INSERT INTO jtva_coloane VALUES (2, 'TVA 11%', 11)
|
||||
GO TOP IN jtva_coloane
|
||||
|
||||
*----- saft_taxtable: desi gl406=.F. (codul aplicatiei nu-l cere explicit), cb_explicatie_saft
|
||||
* din frm_articol_factura are RowSource="select ... from saft_taxtable ..." legat direct
|
||||
* pe control (RowSourceType=3) - fara cursorul cu acest alias, SELECT-ul cauta un fisier
|
||||
* saft_taxtable.dbf inexistent si scoate dialogul nativ Windows "Open" care blocheaza
|
||||
* headless la nesfarsit, fara nicio linie noua in log (capcana j, testare-ui-vfp.md). -----
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250), procent_taxa N(7,2), taxcode N(6), tva_livrari N(1))
|
||||
INSERT INTO saft_taxtable VALUES ('301104-Achizitii de bunuri si servicii taxabile cu cota de 21%', 21, 301104, 1)
|
||||
INSERT INTO saft_taxtable VALUES ('3011XX-Achizitii de bunuri si servicii taxabile cu cota de 11%', 11, 301108, 1)
|
||||
|
||||
*----- tablourile cu campurile poArticol: constructie poArticol INLINE in main la fiecare
|
||||
* scenariu (nu intr-o PROCEDURA - vezi capcana ADDPROPERTY apelat dintr-o procedura,
|
||||
* testare-ui-vfp.md litera l), dar bucla de ADDPROPERTY ramane in corpul principal, deci
|
||||
* e sigura; reduce field-urile "neutre" (0 / '') la doua tablouri reutilizate. -----
|
||||
LOCAL lnI
|
||||
LOCAL ARRAY laPropN(49)
|
||||
laPropN( 1)='id_articol' && identificatori si asociatii
|
||||
laPropN( 2)='Id_Pol'
|
||||
laPropN( 3)='id_gestiune'
|
||||
laPropN( 4)='id_c'
|
||||
laPropN( 5)='id_ctr'
|
||||
laPropN( 6)='id_valuta'
|
||||
laPropN( 7)='id_valuta_d'
|
||||
laPropN( 8)='id_lucrare_rez'
|
||||
laPropN( 9)='id_part_rez'
|
||||
laPropN(10)='id_jtva_coloana'
|
||||
laPropN(11)='taxcode'
|
||||
laPropN(12)='opt_facturare'
|
||||
laPropN(13)='gestionabil' && cantitate / pret / valuta
|
||||
laPropN(14)='tip_valuta'
|
||||
laPropN(15)='cantitate'
|
||||
laPropN(16)='Curs'
|
||||
laPropN(17)='multiplicator'
|
||||
laPropN(18)='pret_achizitie'
|
||||
laPropN(19)='pretv_orig'
|
||||
laPropN(20)='pretd'
|
||||
laPropN(21)='proc_tvav'
|
||||
laPropN(22)='preturi_cu_tva' && preturi
|
||||
laPropN(23)='pretftva'
|
||||
laPropN(24)='pretftva_val'
|
||||
laPropN(25)='pretctva'
|
||||
laPropN(26)='pretctva_val'
|
||||
laPropN(27)='tva'
|
||||
laPropN(28)='tva_val'
|
||||
laPropN(29)='discount_unitar' && discount unitar
|
||||
laPropN(30)='discount_unitar_val'
|
||||
laPropN(31)='discount_unitar_ctva'
|
||||
laPropN(32)='discount_unitar_ctva_val'
|
||||
laPropN(33)='valftva' && totaluri lei (calculate de calculeaza_totaluri)
|
||||
laPropN(34)='valtva'
|
||||
laPropN(35)='valctva'
|
||||
laPropN(36)='valdiscountftva'
|
||||
laPropN(37)='valdiscounttva'
|
||||
laPropN(38)='valdiscountctva'
|
||||
laPropN(39)='valdiminuatftva'
|
||||
laPropN(40)='valdiminuattva'
|
||||
laPropN(41)='valdiminuatctva'
|
||||
laPropN(42)='vvalftva' && totaluri valuta (calculate de calculeaza_totaluri)
|
||||
laPropN(43)='vvaltva'
|
||||
laPropN(44)='vvalctva'
|
||||
laPropN(45)='vvaldiscountftva'
|
||||
laPropN(46)='vvaldiscounttva'
|
||||
laPropN(47)='vvaldiscountctva'
|
||||
laPropN(48)='vvaldiminuatftva'
|
||||
laPropN(49)='vvaldiminuattva'
|
||||
*-- (vvaldiminuatctva se adauga separat mai jos, ALEN a ramas 49 din motive de numarare initiala)
|
||||
LOCAL ARRAY laPropC(11)
|
||||
laPropC( 1)='codmat'
|
||||
laPropC( 2)='codmatf'
|
||||
laPropC( 3)='denumire'
|
||||
laPropC( 4)='um'
|
||||
laPropC( 5)='serie'
|
||||
laPropC( 6)='lot'
|
||||
laPropC( 7)='explicatie'
|
||||
laPropC( 8)='numar_contract'
|
||||
laPropC( 9)='codbare'
|
||||
laPropC(10)='nume_val'
|
||||
laPropC(11)='Cont'
|
||||
|
||||
PRIVATE poArticol, poDate
|
||||
DO AfLog WITH 'mediu pregatit, incep scenariile'
|
||||
|
||||
*========================= PAS 0: mediu pregatit =========================
|
||||
DO HarnessStep WITH 0, 'mediu pregatit, jtva_coloane cu ' + TRANSFORM(RECCOUNT('jtva_coloane')) + ' cote'
|
||||
|
||||
*========================= SCENARIU 1 (cazul tinta): bifa=1, 100.00 cu TVA, cant 1 =========
|
||||
poArticol = CREATEOBJECT('Empty')
|
||||
FOR lnI = 1 TO ALEN(laPropN)
|
||||
=ADDPROPERTY(poArticol, laPropN(lnI), 0)
|
||||
ENDFOR
|
||||
=ADDPROPERTY(poArticol, 'vvaldiminuatctva', 0)
|
||||
FOR lnI = 1 TO ALEN(laPropC)
|
||||
=ADDPROPERTY(poArticol, laPropC(lnI), '')
|
||||
ENDFOR
|
||||
poArticol.id_articol = 1001
|
||||
poArticol.Id_Pol = 1
|
||||
poArticol.Cont = '707'
|
||||
poArticol.id_gestiune = 1
|
||||
poArticol.gestionabil = 1
|
||||
poArticol.tip_valuta = 0
|
||||
poArticol.Curs = 1
|
||||
poArticol.multiplicator = 1
|
||||
poArticol.cantitate = 1
|
||||
poArticol.codmat = 'ART001'
|
||||
poArticol.denumire = 'ARTICOL TEST 100 CU TVA'
|
||||
poArticol.um = 'BUC'
|
||||
poArticol.proc_tvav = 1.21 && cota standard 21%
|
||||
poArticol.preturi_cu_tva = 1 && bifa PORNITA - politica implicita cu TVA inclus
|
||||
|
||||
poDate = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(poDate, 'tip', 1) && 1 = lista de preturi, in Inlist activator bifa
|
||||
=ADDPROPERTY(poDate, 'in_valuta', 0)
|
||||
|
||||
PUBLIC goDlg
|
||||
goDlg = CREATEOBJECT('frm_articol_factura', 1, .F.)
|
||||
IF VARTYPE(goDlg) <> 'O'
|
||||
DO AfLog WITH 'FAIL: instantiere frm_articol_factura (scenariul 1)'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
QUIT
|
||||
ENDIF
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
|
||||
DO AfLog WITH 'S1 dupa Init: preturi_cu_tva=' + TRANSFORM(poArticol.preturi_cu_tva) + ;
|
||||
' ck_pret_cu_tva.Value=' + TRANSFORM(goDlg.ck_pret_cu_tva.Value) + ;
|
||||
' Enabled=' + TRANSFORM(goDlg.ck_pret_cu_tva.Enabled)
|
||||
|
||||
*-- utilizatorul tasteaza 100.00 in campul "Pret cu TVA" (bifa deja pornita)
|
||||
goDlg.Clb_pretctva.tx_suma_nat.Value = 100
|
||||
goDlg.Clb_pretctva.tx_suma_nat.InteractiveChange()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 1, 'cazul tinta: pretctva tastat 100.00, cantitate 1'
|
||||
|
||||
DO VerificaNumeric WITH 'S1 pretctva pastrat', poArticol.pretctva, 100, 0.005
|
||||
DO VerificaNumeric WITH 'S1 CAZUL TINTA totalul facturii (valctva)', poArticol.valctva, 100, 0.005
|
||||
*-- cifrele complete ale cazului tinta, indiferent de PASS/FAIL - de citat in raport ca atare
|
||||
DO AfLog WITH 'S1 CIFRE CAZ TINTA: pretftva=' + TRANSFORM(poArticol.pretftva) + ;
|
||||
' pretctva=' + TRANSFORM(poArticol.pretctva) + ' tva=' + TRANSFORM(poArticol.tva) + ;
|
||||
' valftva=' + TRANSFORM(poArticol.valftva) + ' valtva=' + TRANSFORM(poArticol.valtva) + ;
|
||||
' valctva=' + TRANSFORM(poArticol.valctva)
|
||||
|
||||
*-- butonul OK (inainte_de_do_termin): parte din fluxul real, dar poate cere ActiveControl
|
||||
*-- (focus real de fereastra), nesigur headless. Daca arunca eroare, pasul e NEACOPERIT -
|
||||
*-- nu se raporteaza PASS/FAIL pe o executie care nu s-a confirmat.
|
||||
LOCAL llOkS1
|
||||
TRY
|
||||
llOkS1 = goDlg.inainte_de_do_termin()
|
||||
DO VerificaLogic WITH 'S1 buton OK (inainte_de_do_termin)', llOkS1, .T.
|
||||
CATCH TO loExcOk
|
||||
DO AfLog WITH 'NEACOPERIT S1 buton OK (inainte_de_do_termin): eroare ' + ;
|
||||
TRANSFORM(loExcOk.ErrorNo) + ' [' + loExcOk.Message + '] in ' + loExcOk.Procedure + ;
|
||||
':' + TRANSFORM(loExcOk.LineNo) + ' - pasul nu s-a putut executa headless, nu e nici PASS nici FAIL'
|
||||
ENDTRY
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*========================= SCENARIU 2: comutare bifa, valoarea tastata nu se pierde =========
|
||||
poArticol = CREATEOBJECT('Empty')
|
||||
FOR lnI = 1 TO ALEN(laPropN)
|
||||
=ADDPROPERTY(poArticol, laPropN(lnI), 0)
|
||||
ENDFOR
|
||||
=ADDPROPERTY(poArticol, 'vvaldiminuatctva', 0)
|
||||
FOR lnI = 1 TO ALEN(laPropC)
|
||||
=ADDPROPERTY(poArticol, laPropC(lnI), '')
|
||||
ENDFOR
|
||||
poArticol.id_articol = 1002
|
||||
poArticol.Id_Pol = 1
|
||||
poArticol.Cont = '707'
|
||||
poArticol.id_gestiune = 1
|
||||
poArticol.gestionabil = 1
|
||||
poArticol.tip_valuta = 0
|
||||
poArticol.Curs = 1
|
||||
poArticol.multiplicator = 1
|
||||
poArticol.cantitate = 2
|
||||
poArticol.codmat = 'ART002'
|
||||
poArticol.denumire = 'ARTICOL TEST COMUTARE BIFA'
|
||||
poArticol.um = 'BUC'
|
||||
poArticol.proc_tvav = 1.21
|
||||
poArticol.preturi_cu_tva = 0 && bifa OPRITA - pretul fara TVA e cel editabil
|
||||
|
||||
poDate = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(poDate, 'tip', 1)
|
||||
=ADDPROPERTY(poDate, 'in_valuta', 0)
|
||||
|
||||
goDlg = CREATEOBJECT('frm_articol_factura', 2, .F.)
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*-- utilizatorul tasteaza 50.00 fara TVA (bifa oprita)
|
||||
goDlg.Clb_pretftva.tx_suma_nat.Value = 50
|
||||
goDlg.Clb_pretftva.tx_suma_nat.InteractiveChange()
|
||||
DOEVENTS FORCE
|
||||
DO AfLog WITH 'S2 dupa tastare pretftva=50: pretftva=' + TRANSFORM(poArticol.pretftva) + ;
|
||||
' pretctva=' + TRANSFORM(poArticol.pretctva)
|
||||
|
||||
*-- bifeaza (OFF -> ON): pretul fara TVA tastat (50) nu trebuie sa se piarda
|
||||
goDlg.ck_pret_cu_tva.Value = 1
|
||||
goDlg.ck_pret_cu_tva.InteractiveChange()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 2, 'bifa OFF->ON: pretftva tastat=50 trebuie pastrat'
|
||||
DO VerificaNumeric WITH 'S2 comutare OFF->ON: pretftva NEPIERDUT', poArticol.pretftva, 50, 0.005
|
||||
DO VerificaNumeric WITH 'S2 comutare OFF->ON: pretctva derivat', poArticol.pretctva, 60.5, 0.005
|
||||
|
||||
*-- debifeaza (ON -> OFF): pretul (acum cu TVA, derivat) trebuie sa duca inapoi la acelasi pretftva=50
|
||||
goDlg.ck_pret_cu_tva.Value = 0
|
||||
goDlg.ck_pret_cu_tva.InteractiveChange()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 3, 'bifa ON->OFF: pretftva trebuie sa ramana 50 (roundtrip)'
|
||||
DO VerificaNumeric WITH 'S2 comutare ON->OFF: pretftva NEPIERDUT (roundtrip)', poArticol.pretftva, 50, 0.005
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*========================= SCENARIU 3: cota standard 21% vs cota redusa 11% =========
|
||||
poArticol = CREATEOBJECT('Empty')
|
||||
FOR lnI = 1 TO ALEN(laPropN)
|
||||
=ADDPROPERTY(poArticol, laPropN(lnI), 0)
|
||||
ENDFOR
|
||||
=ADDPROPERTY(poArticol, 'vvaldiminuatctva', 0)
|
||||
FOR lnI = 1 TO ALEN(laPropC)
|
||||
=ADDPROPERTY(poArticol, laPropC(lnI), '')
|
||||
ENDFOR
|
||||
poArticol.id_articol = 1003
|
||||
poArticol.Id_Pol = 1
|
||||
poArticol.Cont = '707'
|
||||
poArticol.id_gestiune = 1
|
||||
poArticol.gestionabil = 1
|
||||
poArticol.tip_valuta = 0
|
||||
poArticol.Curs = 1
|
||||
poArticol.multiplicator = 1
|
||||
poArticol.cantitate = 1
|
||||
poArticol.codmat = 'ART003A'
|
||||
poArticol.denumire = 'ARTICOL TEST COTA STANDARD'
|
||||
poArticol.um = 'BUC'
|
||||
poArticol.proc_tvav = 1.21 && cota standard 21%
|
||||
poArticol.preturi_cu_tva = 0
|
||||
|
||||
poDate = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(poDate, 'tip', 1)
|
||||
=ADDPROPERTY(poDate, 'in_valuta', 0)
|
||||
|
||||
goDlg = CREATEOBJECT('frm_articol_factura', 1, .F.)
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
goDlg.Clb_pretftva.tx_suma_nat.Value = 100
|
||||
goDlg.Clb_pretftva.tx_suma_nat.InteractiveChange()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 4, 'cota standard 21%: pretftva=100 -> tva/pretctva'
|
||||
DO VerificaNumeric WITH 'S3a cota 21%: tva', poArticol.tva, 21, 0.005
|
||||
DO VerificaNumeric WITH 'S3a cota 21%: pretctva', poArticol.pretctva, 121, 0.005
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
poArticol = CREATEOBJECT('Empty')
|
||||
FOR lnI = 1 TO ALEN(laPropN)
|
||||
=ADDPROPERTY(poArticol, laPropN(lnI), 0)
|
||||
ENDFOR
|
||||
=ADDPROPERTY(poArticol, 'vvaldiminuatctva', 0)
|
||||
FOR lnI = 1 TO ALEN(laPropC)
|
||||
=ADDPROPERTY(poArticol, laPropC(lnI), '')
|
||||
ENDFOR
|
||||
poArticol.id_articol = 1004
|
||||
poArticol.Id_Pol = 1
|
||||
poArticol.Cont = '707'
|
||||
poArticol.id_gestiune = 1
|
||||
poArticol.gestionabil = 1
|
||||
poArticol.tip_valuta = 0
|
||||
poArticol.Curs = 1
|
||||
poArticol.multiplicator = 1
|
||||
poArticol.cantitate = 1
|
||||
poArticol.codmat = 'ART003B'
|
||||
poArticol.denumire = 'ARTICOL TEST COTA REDUSA'
|
||||
poArticol.um = 'BUC'
|
||||
poArticol.proc_tvav = 1.11 && cota redusa 11%
|
||||
poArticol.preturi_cu_tva = 0
|
||||
|
||||
poDate = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(poDate, 'tip', 1)
|
||||
=ADDPROPERTY(poDate, 'in_valuta', 0)
|
||||
|
||||
goDlg = CREATEOBJECT('frm_articol_factura', 1, .F.)
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
goDlg.Clb_pretftva.tx_suma_nat.Value = 100
|
||||
goDlg.Clb_pretftva.tx_suma_nat.InteractiveChange()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 5, 'cota redusa 11%: pretftva=100 -> tva/pretctva'
|
||||
DO VerificaNumeric WITH 'S3b cota 11%: tva', poArticol.tva, 11, 0.005
|
||||
DO VerificaNumeric WITH 'S3b cota 11%: pretctva', poArticol.pretctva, 111, 0.005
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*========================= SCENARIU 4: discount unitar cu TVA (ramura discountctva) =========
|
||||
poArticol = CREATEOBJECT('Empty')
|
||||
FOR lnI = 1 TO ALEN(laPropN)
|
||||
=ADDPROPERTY(poArticol, laPropN(lnI), 0)
|
||||
ENDFOR
|
||||
=ADDPROPERTY(poArticol, 'vvaldiminuatctva', 0)
|
||||
FOR lnI = 1 TO ALEN(laPropC)
|
||||
=ADDPROPERTY(poArticol, laPropC(lnI), '')
|
||||
ENDFOR
|
||||
poArticol.id_articol = 1005
|
||||
poArticol.Id_Pol = 1
|
||||
poArticol.Cont = '707'
|
||||
poArticol.id_gestiune = 1
|
||||
poArticol.gestionabil = 1
|
||||
poArticol.tip_valuta = 0
|
||||
poArticol.Curs = 1
|
||||
poArticol.multiplicator = 1
|
||||
poArticol.cantitate = 1
|
||||
poArticol.codmat = 'ART004'
|
||||
poArticol.denumire = 'ARTICOL TEST DISCOUNT CU TVA'
|
||||
poArticol.um = 'BUC'
|
||||
poArticol.proc_tvav = 1.21
|
||||
poArticol.preturi_cu_tva = 1 && bifa pornita - ramura discountctva e cea activa
|
||||
|
||||
poDate = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(poDate, 'tip', 1)
|
||||
=ADDPROPERTY(poDate, 'in_valuta', 0)
|
||||
|
||||
goDlg = CREATEOBJECT('frm_articol_factura', 1, .F.)
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
goDlg.Clb_pretctva.tx_suma_nat.Value = 100
|
||||
goDlg.Clb_pretctva.tx_suma_nat.InteractiveChange()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*-- utilizatorul tasteaza 10.00 discount unitar cu TVA (Valid, cu When intai - ca la focus real)
|
||||
goDlg.Clb_discountctva.tx_suma_nat.When()
|
||||
goDlg.Clb_discountctva.tx_suma_nat.Value = 10
|
||||
goDlg.Clb_discountctva.tx_suma_nat.Valid()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 6, 'discount unitar cu TVA = 10, pret 100, cant 1'
|
||||
DO VerificaNumeric WITH 'S4 discount_unitar_ctva pastrat', poArticol.discount_unitar_ctva, 10, 0.005
|
||||
DO VerificaNumeric WITH 'S4 total diminuat cu TVA (valdiminuatctva)', poArticol.valdiminuatctva, 90, 0.005
|
||||
DO AfLog WITH 'S4 comparatie: fara discount (scenariul 1) valctva=100.00, cu discount 10 -> valdiminuatctva=' + TRANSFORM(poArticol.valdiminuatctva)
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*========================= SCENARIU 5: bifa ACTIVA pe tip din Inlist =========================
|
||||
poArticol = CREATEOBJECT('Empty')
|
||||
FOR lnI = 1 TO ALEN(laPropN)
|
||||
=ADDPROPERTY(poArticol, laPropN(lnI), 0)
|
||||
ENDFOR
|
||||
=ADDPROPERTY(poArticol, 'vvaldiminuatctva', 0)
|
||||
FOR lnI = 1 TO ALEN(laPropC)
|
||||
=ADDPROPERTY(poArticol, laPropC(lnI), '')
|
||||
ENDFOR
|
||||
poArticol.id_articol = 1006
|
||||
poArticol.Id_Pol = 1
|
||||
poArticol.Cont = '707'
|
||||
poArticol.id_gestiune = 1
|
||||
poArticol.gestionabil = 1
|
||||
poArticol.tip_valuta = 0
|
||||
poArticol.Curs = 1
|
||||
poArticol.multiplicator = 1
|
||||
poArticol.cantitate = 1
|
||||
poArticol.codmat = 'ART005'
|
||||
poArticol.denumire = 'ARTICOL TEST BIFA ACTIVA'
|
||||
poArticol.um = 'BUC'
|
||||
poArticol.proc_tvav = 1.21
|
||||
poArticol.preturi_cu_tva = 0
|
||||
poArticol.pretftva = 0 && pret zero - irelevant, tip 1 activeaza bifa oricum
|
||||
|
||||
poDate = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(poDate, 'tip', 1) && 1 = lista de preturi, IN Inlist(1,5,10,22,23,25,29,41)
|
||||
=ADDPROPERTY(poDate, 'in_valuta', 0)
|
||||
|
||||
goDlg = CREATEOBJECT('frm_articol_factura', 1, .F.)
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 7, 'tip=1 (Inlist) -> bifa trebuie activa (Enabled=.T.)'
|
||||
DO VerificaLogic WITH 'S5 bifa ACTIVA pe tip din Inlist', goDlg.ck_pret_cu_tva.Enabled, .T.
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*========================= SCENARIU 6: bifa DEZACTIVATA pe tip din afara listei =========
|
||||
poArticol = CREATEOBJECT('Empty')
|
||||
FOR lnI = 1 TO ALEN(laPropN)
|
||||
=ADDPROPERTY(poArticol, laPropN(lnI), 0)
|
||||
ENDFOR
|
||||
=ADDPROPERTY(poArticol, 'vvaldiminuatctva', 0)
|
||||
FOR lnI = 1 TO ALEN(laPropC)
|
||||
=ADDPROPERTY(poArticol, laPropC(lnI), '')
|
||||
ENDFOR
|
||||
poArticol.id_articol = 1007
|
||||
poArticol.Id_Pol = 1
|
||||
poArticol.Cont = '707'
|
||||
poArticol.id_gestiune = 1
|
||||
poArticol.gestionabil = 1
|
||||
poArticol.tip_valuta = 0
|
||||
poArticol.Curs = 1
|
||||
poArticol.multiplicator = 1
|
||||
poArticol.cantitate = 1
|
||||
poArticol.codmat = 'ART006'
|
||||
poArticol.denumire = 'ARTICOL TEST BIFA DEZACTIVATA'
|
||||
poArticol.um = 'BUC'
|
||||
poArticol.proc_tvav = 1.21
|
||||
poArticol.preturi_cu_tva = 0
|
||||
poArticol.pretftva = 50 && pret NENUL - conditie ceruta ca bifa sa ramana dezactivata
|
||||
|
||||
poDate = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(poDate, 'tip', 3) && 3 = comanda, NU e in Inlist(1,5,10,22,23,25,29,41)
|
||||
=ADDPROPERTY(poDate, 'in_valuta', 0)
|
||||
|
||||
goDlg = CREATEOBJECT('frm_articol_factura', 1, .F.)
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 8, 'tip=3 (afara Inlist), pret nenul -> bifa trebuie dezactivata'
|
||||
DO VerificaLogic WITH 'S6 bifa DEZACTIVATA pe tip din afara listei, pret nenul', goDlg.ck_pret_cu_tva.Enabled, .F.
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
|
||||
DO AfLog WITH 'GATA - toate scenariile Nivel 1 executate'
|
||||
DO HarnessStep WITH 9, 'final'
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO AfLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE VerificaNumeric
|
||||
LPARAMETERS tcEticheta, tnObtinut, tnAsteptat, tnToleranta
|
||||
LOCAL lcMsg
|
||||
IF ABS(NVL(tnObtinut,-999999) - tnAsteptat) < tnToleranta
|
||||
lcMsg = 'PASS ' + tcEticheta + ': ' + TRANSFORM(tnObtinut) + ' (asteptat ' + TRANSFORM(tnAsteptat) + ')'
|
||||
ELSE
|
||||
lcMsg = 'FAIL ' + tcEticheta + ': obtinut=' + TRANSFORM(tnObtinut) + ' asteptat=' + TRANSFORM(tnAsteptat)
|
||||
ENDIF
|
||||
DO AfLog WITH lcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaLogic
|
||||
LPARAMETERS tcEticheta, tlObtinut, tlAsteptat
|
||||
LOCAL lcMsg
|
||||
IF tlObtinut = tlAsteptat
|
||||
lcMsg = 'PASS ' + tcEticheta + ': ' + TRANSFORM(tlObtinut) + ' (asteptat ' + TRANSFORM(tlAsteptat) + ')'
|
||||
ELSE
|
||||
lcMsg = 'FAIL ' + tcEticheta + ': obtinut=' + TRANSFORM(tlObtinut) + ' asteptat=' + TRANSFORM(tlAsteptat)
|
||||
ENDIF
|
||||
DO AfLog WITH lcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO AfLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
@@ -0,0 +1,10 @@
|
||||
# test_pret_cu_tva_dialog.ps1 - wrapper peste harness-ul generic pentru testul frm_articol_factura
|
||||
# (S5, plan #7 - pret_cu_tva). Rulare: powershell -ExecutionPolicy Bypass -File test_pret_cu_tva_dialog.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_pret_cu_tva_dialog.prg') `
|
||||
-Steps @('mediu','tinta_100', 'comutare_on', 'comutare_off', 'cota_21', 'cota_11', 'discount', 'bifa_activa', 'bifa_dezactivata', 'final') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots') `
|
||||
-SyncDir (Join-Path $Teste 'uisync') `
|
||||
-StepTimeoutSec 60
|
||||
630
utile/Teste/facturare_pret_cu_tva/test_pret_cu_tva_nivel2.prg
Normal file
630
utile/Teste/facturare_pret_cu_tva/test_pret_cu_tva_nivel2.prg
Normal file
@@ -0,0 +1,630 @@
|
||||
* test_pret_cu_tva_nivel2.prg
|
||||
* Test UI Nivel 2 (S5, plan #7) pentru fluxul COMPLET prin frm_facturare_articole - cazurile 6 si 8
|
||||
* din task. Foloseste mecanismul validat in test_modal_unlock_smoketest2.prg (Timer pe _SCREEN +
|
||||
* _SCREEN.Forms + Controls(i)) ca sa conduca dialogul frm_articol_factura, deschis cu Show(1)
|
||||
* hardcodat in do_adauga_articol/do_modifica (frm_facturare_articole, ofacturare.vc2).
|
||||
*
|
||||
* Flux REAL, nu populare directa: articolul intra in crsfactura prin But_urmator1.Click() ->
|
||||
* do_urmator() -> do_adauga_articol() (cazul 6); modificarea trece prin But_modifica1.Click() /
|
||||
* grd_factura.DblClick() -> do_modifica() (cazul 8). crsarticole si crsfactura au structura REALA
|
||||
* (creeaza_facturacrs, aceleasi campuri ca in productie), fara Oracle.
|
||||
*
|
||||
* Cazuri:
|
||||
* PAS 0: grid gol - But_modifica1.Click() si grd_factura.DblClick() nu fac nimic, fara eroare.
|
||||
* PAS 1 (caz 6): adaugare cu bifa schimbata fata de politica (policy=0, user seteaza 1, pret cu
|
||||
* TVA=100) -> crsfactura.cu_tva=1, valctva=100.00 exact.
|
||||
* PAS 2 (caz 8a): modificare - But_modifica1 redeschide dialogul pe randul adaugat, comuta bifa
|
||||
* OFF, tasteaza pret fara TVA=60 -> acelasi rand actualizat (cu_tva=0, valctva=72.60).
|
||||
* PAS 3 (caz 8b): modificare prin grd_factura.DblClick() (al doilea canal, acelasi rezultat) -
|
||||
* schimba pretul cu TVA la 200, bifa ramane ON dupa pasul anterior... de fapt pasul 2 a
|
||||
* lasat bifa OFF, deci verifica ramura fara TVA din nou, cu alta valoare.
|
||||
* PAS 4 (caz 8c): Renunta - deschide dialogul, schimba o valoare, apasa Renunta -> randul ramane
|
||||
* BIT-IDENTIC (comparat camp cu camp fata de starea dinainte).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_pret_cu_tva\test_pret_cu_tva_nivel2_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_pret_cu_tva\uisync_nivel2\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAFACTURARE\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\CALENDAR;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EMAIL;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\NFJSON;' + gcAppPath + 'COMUN\UTILE\NFXML;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO AfLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE (lista dovedita de suita Nivel 1 - mediul unei suite noi se mosteneste din suita
|
||||
* care TRECE, nu dintr-un smoke-test) -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms ADDITIVE
|
||||
SET CLASSLIB TO ofacturare.vcx ADDITIVE
|
||||
SET CLASSLIB TO ofacturare_comun.vcx ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO ofacturare_rapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO onom_curs ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date ADDITIVE
|
||||
SET CLASSLIB TO baza ADDITIVE
|
||||
SET CLASSLIB TO caut ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO serii_numere ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO _calendar.vcx ADDITIVE
|
||||
SET CLASSLIB TO locale ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ocomenzi ADDITIVE
|
||||
DO AfLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock amessagebox PRIMUL, ui_harness la final) -----
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg"
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.prg ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare2.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rapoarte_fact.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO odocumente ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa.prg ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_curs.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO wwApi.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.prg ADDITIVE
|
||||
SET PROCEDURE TO pmenu.prg ADDITIVE
|
||||
SET PROCEDURE TO ointroduceri.prg ADDITIVE
|
||||
SET PROCEDURE TO ovariabile_globale.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO suma_in_vorbe.prg ADDITIVE
|
||||
SET PROCEDURE TO controllerecr ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO AfLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
*----- Globale aplicatie -----
|
||||
PUBLIC gnPc, gnPVal, gnPcant, gnPPretV, gnScadereStoc, gnMemProcDisc, gl406, gcAcces
|
||||
PUBLIC gnModTotFact, gnRF_FACTURARE_FARA_STOC
|
||||
*-- gnModTotFact/gnRF_FACTURARE_FARA_STOC: lista completa a globalelor de aplicatie cerute de
|
||||
*-- Init/do_adauga_articol/do_modifica/do_verifica_articol/do_initializeaza_articol (extrasa cu
|
||||
*-- vfp_symbols.ps1 -Class frm_facturare_articole, identificatori g[nlc]\w+), restul deja
|
||||
*-- prezente in mediu. Puse pe 0 (implicit prudent) ca sa NU activeze ramuri neintentionate -
|
||||
*-- gnModTotFact=1 ar intra pe modificarea totalului facturii, gnRF_FACTURARE_FARA_STOC=1 pe
|
||||
*-- facturare fara stoc; niciuna nu e ce se testeaza aici. NVL() nu apara de variabila
|
||||
*-- nedeclarata, doar de valoare NULL - trebuie sa existe.
|
||||
gnModTotFact = 0
|
||||
gnRF_FACTURARE_FARA_STOC = 0
|
||||
*-- gnPPret/gnPPretVal: presupuse (nu exista in cod - vin din configuratia Oracle citita la
|
||||
*-- pornirea reala; ceruta de creeaza_facturacrs, ofacturare_comun.prg:1770, neintalnita la
|
||||
*-- Nivel 1 care nu atinge acel cursor). Ating DOAR pret_achizitie/pretd (max(...,4)) - niciun
|
||||
*-- camp verificat de testele de mai jos (pretftva/pretctva/valftva/valtva/valctva folosesc
|
||||
*-- gnPPretV+gnPc, deja corecte). precizie_max_pret_vz e #define=6 in acelasi fisier, nu
|
||||
*-- variabila - nu se declara aici.
|
||||
PUBLIC gnPPret, gnPPretVal
|
||||
gnPc = 2
|
||||
gnPVal = 2
|
||||
gnPcant = 3
|
||||
gnPPretV = 4
|
||||
gnPPret = 4
|
||||
gnPPretVal = 4
|
||||
gnScadereStoc = 0 && bypass complet logica de stoc (do_alege_stoc nu se apeleaza)
|
||||
gnMemProcDisc = 0
|
||||
gl406 = .F.
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
PUBLIC nror(65000)
|
||||
|
||||
PUBLIC goApp, goExport, goExecutor
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
goExport = CREATEOBJECT('dummyexport')
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
|
||||
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 (1, 'TVA 21%', 21)
|
||||
INSERT INTO jtva_coloane VALUES (2, 'TVA 11%', 11)
|
||||
GO TOP IN jtva_coloane
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250), procent_taxa N(7,2), taxcode N(6), tva_livrari N(1))
|
||||
INSERT INTO saft_taxtable VALUES ('301104-Achizitii de bunuri si servicii taxabile cu cota de 21%', 21, 301104, 1)
|
||||
INSERT INTO saft_taxtable VALUES ('3011XX-Achizitii de bunuri si servicii taxabile cu cota de 11%', 11, 301108, 1)
|
||||
|
||||
*----- crsfactura: structura REALA, fara Oracle (creeaza_facturacrs, ofacturare_comun.prg:1770) -----
|
||||
DO creeaza_facturacrs WITH 'crsfactura'
|
||||
DO AfLog WITH 'crsfactura creat, Reccount=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
*----- crsarticole: sursa (stoc/lista de preturi) - RecordSource al grd_articole. Campuri
|
||||
* alese ca sa acopere atat coloanele gridului (denumire, gestionabil, codmat, pret,
|
||||
* cantitate, preturi_cu_tva, pret_val, nume_val, nume_lista_preturi, serie, codbare) cat
|
||||
* si tot ce Scatter+do_initializeaza_articol au nevoie (restul, verificat din cod). -----
|
||||
IF USED('crsarticole')
|
||||
USE IN ('crsarticole')
|
||||
ENDIF
|
||||
CREATE CURSOR crsarticole (id_articol N(10), Id_Pol N(10), id_gestiune N(10), denumire C(100), ;
|
||||
codmat C(50), codbare C(50), gestionabil N(1), cantitate N(18,4), pret N(18,4), ;
|
||||
pret_val N(18,4), preturi_cu_tva N(1), proc_tvav N(18,4), discount_unitar N(18,4), ;
|
||||
discount_unitar_val N(18,4), pret_achizitie N(18,4), tip_valuta N(1), Curs N(18,4), ;
|
||||
multiplicator N(10,4), Cont C(10), um C(10), serie C(30), lot C(30), explicatie C(200), ;
|
||||
opt_facturare N(3), id_ctr N(10), numar_contract C(50), pretd N(18,4), id_valuta N(10), ;
|
||||
nume_val C(20), nume_lista_preturi C(100), id_jtva_coloana N(10), taxcode N(6), id_c N(10))
|
||||
INSERT INTO crsarticole (id_articol, Id_Pol, id_gestiune, denumire, codmat, codbare, ;
|
||||
gestionabil, cantitate, pret, pret_val, preturi_cu_tva, proc_tvav, discount_unitar, ;
|
||||
discount_unitar_val, pret_achizitie, tip_valuta, Curs, multiplicator, Cont, um, serie, ;
|
||||
lot, explicatie, opt_facturare, id_ctr, numar_contract, pretd, id_valuta, nume_val, ;
|
||||
nume_lista_preturi, id_jtva_coloana, taxcode, id_c) ;
|
||||
VALUES (2001, 1, 1, 'ARTICOL NIVEL2', 'ART2001', '', ;
|
||||
0, 100, 50, 0, 0, 1.21, 0, ;
|
||||
0, 0, 0, 1, 1, '707', 'BUC', '', ;
|
||||
'', '', 0, 0, '', 0, 0, '', ;
|
||||
'LISTA TEST', 1, 0, 1)
|
||||
GO TOP IN crsarticole
|
||||
DO AfLog WITH 'crsarticole creat, Reccount=' + TRANSFORM(RECCOUNT('crsarticole'))
|
||||
|
||||
*----- poDate: clasa REALA oDateFactura (ofacturare_comun.prg:99, deja incarcata prin SET
|
||||
* PROCEDURE), nu obiect Empty umplut manual - are toate proprietatile cu valorile
|
||||
* implicite de productie (inclusiv discount_evidentiat=0). PRIVATE la nivel de PROGRAM
|
||||
* PRINCIPAL, vizibil (scoping VFP) in tot lantul apelat mai jos (frm_facturare_articole,
|
||||
* do_adauga_articol, do_modifica, frm_articol_factura) - la fel ca in productie
|
||||
* (Procedure factureaza, ofacturare.prg:95). Constructia ramane INLINE in main (capcana l). -----
|
||||
PRIVATE poDate
|
||||
poDate = CREATEOBJECT('oDateFactura')
|
||||
poDate.tip = 1 && 1 = facturare pe baza de lista de preturi
|
||||
poDate.serie_act = 'TST'
|
||||
poDate.nract = 1
|
||||
DO AfLog WITH 'poDate pregatit (oDateFactura), tip=' + TRANSFORM(poDate.tip)
|
||||
|
||||
*----- driverul de deblocare Show(1): Timer la nivel _SCREEN + _SCREEN.Forms + Controls(i),
|
||||
* mecanism validat in test_modal_unlock_smoketest2.prg (PASS). gcCazAct selecteaza
|
||||
* interactiunea de aplicat la fiecare dialog nou detectat. -----
|
||||
PUBLIC goDriver, gnDriverTick, glDlgTratat, gcCazAct
|
||||
gnDriverTick = 0
|
||||
glDlgTratat = .F.
|
||||
gcCazAct = ''
|
||||
goDriver = CREATEOBJECT('driverdeblocare3')
|
||||
_SCREEN.AddObject('tmrDrvN2', 'Timer')
|
||||
_SCREEN.tmrDrvN2.Interval = 200
|
||||
BINDEVENT(_SCREEN.tmrDrvN2, 'Timer', goDriver, 'Executa')
|
||||
_SCREEN.tmrDrvN2.Enabled = .T.
|
||||
DO AfLog WITH 'driver+timer pregatiti'
|
||||
|
||||
*----- Desktop VFP vizibil, ca la celelalte suite UI -----
|
||||
_SCREEN.Visible = .T.
|
||||
_SCREEN.WindowState = 2
|
||||
_SCREEN.Caption = 'TEST UI Nivel 2 (cazurile 6 si 8)'
|
||||
|
||||
PUBLIC goFrm
|
||||
goFrm = CREATEOBJECT('frm_facturare_articole')
|
||||
goFrm.WindowType = 0 && testul instantiaza direct - modeless, Show() revine imediat
|
||||
goFrm.Show()
|
||||
goFrm.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
DO AfLog WITH 'frm_facturare_articole afisat modeless, Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
DO HarnessStep WITH 0, 'formular afisat, grid gol'
|
||||
|
||||
*========================= PAS 0: grid gol - But_modifica1/DblClick nu fac nimic =========
|
||||
LOCAL lnRecFataDe0
|
||||
lnRecFataDe0 = RECCOUNT('crsfactura')
|
||||
goFrm.But_modifica1.Click()
|
||||
DOEVENTS FORCE
|
||||
IF RECCOUNT('crsfactura') = lnRecFataDe0
|
||||
DO UILog WITH 'PASS P0a But_modifica1 pe grid gol: nu a modificat Reccount (' + TRANSFORM(RECCOUNT('crsfactura')) + ')'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P0a But_modifica1 pe grid gol: Reccount a devenit ' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
ENDIF
|
||||
goFrm.grd_factura.DblClick()
|
||||
DOEVENTS FORCE
|
||||
IF RECCOUNT('crsfactura') = lnRecFataDe0
|
||||
DO UILog WITH 'PASS P0b grd_factura.DblClick pe grid gol: nu a modificat Reccount'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P0b grd_factura.DblClick pe grid gol: Reccount a devenit ' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
ENDIF
|
||||
DO HarnessStep WITH 1, 'P0 grid gol verificat'
|
||||
|
||||
*========================= PAS 1 (CAZUL 6): adaugare cu bifa schimbata =========================
|
||||
*-- politica implicita (crsarticole.preturi_cu_tva=0, fara TVA) - userul o schimba in dialog la
|
||||
*-- 1 (cu TVA), tasteaza pret cu TVA=100, cantitate=1 (zerorizata de do_initializeaza_articol
|
||||
*-- pt. tip=1, se completeaza in dialog, ca la fluxul real).
|
||||
SELECT crsarticole
|
||||
GO TOP
|
||||
gcCazAct = 'CASE6'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_urmator1.Click()
|
||||
DOEVENTS FORCE
|
||||
LOCAL lnWait
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa But_urmator1: glDlgTratat=' + TRANSFORM(glDlgTratat) + ' Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
IF RECCOUNT('crsfactura') = 1
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
IF cu_tva = 1 AND ABS(valctva - 100) < 0.01
|
||||
DO UILog WITH 'PASS P1 CAZUL 6: cu_tva=' + TRANSFORM(cu_tva) + ' valctva=' + TRANSFORM(valctva) + ' (asteptat cu_tva=1 valctva=100)'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P1 CAZUL 6: cu_tva=' + TRANSFORM(cu_tva) + ' valctva=' + TRANSFORM(valctva) + ' (asteptat cu_tva=1 valctva=100)'
|
||||
ENDIF
|
||||
DO UILog WITH 'P1 cifre complete: pretftva=' + TRANSFORM(pretftva) + ' pretctva=' + TRANSFORM(pretctva) + ' valftva=' + TRANSFORM(valftva) + ' valtva=' + TRANSFORM(valtva)
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P1 CAZUL 6: Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura')) + ' (asteptat 1) - articolul nu a fost adaugat'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 2, 'P1 caz 6 propagare: Reccount=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
*========================= PAS 2 (CAZUL 8a): modificare prin But_modifica1 =========================
|
||||
*-- comuta bifa OFF (fara TVA), tasteaza pret fara TVA=60 -> valctva asteptat 60*1.21=72.60
|
||||
IF RECCOUNT('crsfactura') = 1
|
||||
gcCazAct = 'CASE8_MOD_OFF'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_modifica1.Click()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa But_modifica1 (P2): glDlgTratat=' + TRANSFORM(glDlgTratat)
|
||||
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
IF cu_tva = 0 AND ABS(valctva - 72.6) < 0.01
|
||||
DO UILog WITH 'PASS P2 CAZUL 8a (But_modifica1): cu_tva=' + TRANSFORM(cu_tva) + ' valctva=' + TRANSFORM(valctva) + ' (asteptat cu_tva=0 valctva=72.60)'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P2 CAZUL 8a (But_modifica1): cu_tva=' + TRANSFORM(cu_tva) + ' valctva=' + TRANSFORM(valctva) + ' (asteptat cu_tva=0 valctva=72.60)'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO UILog WITH 'NEACOPERIT P2: nu exista randul din P1 (Reccount=' + TRANSFORM(RECCOUNT('crsfactura')) + ')'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 3, 'P2 caz 8a modificare But_modifica1'
|
||||
|
||||
*========================= PAS 3 (CAZUL 8b): modificare prin grd_factura.DblClick() =========
|
||||
*-- al doilea canal cerut de task - schimba pretul cu TVA la 200, bifa ON
|
||||
IF RECCOUNT('crsfactura') = 1
|
||||
gcCazAct = 'CASE8_MOD_ON'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.grd_factura.DblClick()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa grd_factura.DblClick (P3): glDlgTratat=' + TRANSFORM(glDlgTratat)
|
||||
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
IF cu_tva = 1 AND ABS(valctva - 200) < 0.01
|
||||
DO UILog WITH 'PASS P3 CAZUL 8b (DblClick): cu_tva=' + TRANSFORM(cu_tva) + ' valctva=' + TRANSFORM(valctva) + ' (asteptat cu_tva=1 valctva=200)'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P3 CAZUL 8b (DblClick): cu_tva=' + TRANSFORM(cu_tva) + ' valctva=' + TRANSFORM(valctva) + ' (asteptat cu_tva=1 valctva=200)'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO UILog WITH 'NEACOPERIT P3: nu exista randul (Reccount=' + TRANSFORM(RECCOUNT('crsfactura')) + ')'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 4, 'P3 caz 8b modificare DblClick'
|
||||
|
||||
*========================= PAS 4 (CAZUL 8c): Renunta - randul ramane BIT-IDENTIC =========
|
||||
*-- SCATTER TO array (nu AFIELDS - AFIELDS umple un tablou de METADATE si intoarce un numar,
|
||||
*-- nu e o colectie FOR EACH) captureaza VALORILE campurilor din randul curent, memo inclusiv.
|
||||
IF RECCOUNT('crsfactura') = 1
|
||||
LOCAL ARRAY laSnapDinainte[1]
|
||||
LOCAL lnF, lnCampuri
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
SCATTER TO laSnapDinainte
|
||||
|
||||
gcCazAct = 'CASE8_RENUNTA'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_modifica1.Click()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa But_modifica1 (P4, Renunta): glDlgTratat=' + TRANSFORM(glDlgTratat)
|
||||
|
||||
LOCAL ARRAY laSnapDupa[1]
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
SCATTER TO laSnapDupa
|
||||
|
||||
LOCAL llIdentic
|
||||
llIdentic = (ALEN(laSnapDinainte,1) == ALEN(laSnapDupa,1))
|
||||
lnCampuri = 0
|
||||
IF llIdentic
|
||||
FOR lnF = 1 TO ALEN(laSnapDinainte,1)
|
||||
lnCampuri = lnCampuri + 1
|
||||
IF !(TRANSFORM(laSnapDinainte(lnF)) == TRANSFORM(laSnapDupa(lnF)))
|
||||
llIdentic = .F.
|
||||
DO AfLog WITH 'P4 diagnostic - campul ' + TRANSFORM(lnF) + ' difera: [' + ;
|
||||
TRANSFORM(laSnapDinainte(lnF)) + '] -> [' + TRANSFORM(laSnapDupa(lnF)) + ']'
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ENDIF
|
||||
|
||||
IF llIdentic
|
||||
DO UILog WITH 'PASS P4 CAZUL 8c Renunta: randul ramane BIT-IDENTIC (' + TRANSFORM(lnCampuri) + ' campuri comparate)'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P4 CAZUL 8c Renunta: randul S-A MODIFICAT desi s-a apasat Renunta (vezi diag pe campuri mai sus)'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO UILog WITH 'NEACOPERIT P4: nu exista randul (Reccount=' + TRANSFORM(RECCOUNT('crsfactura')) + ')'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 5, 'P4 caz 8c Renunta'
|
||||
|
||||
*========================= PAS 5 (CAZUL 11, rec_s2c): crestere cantitate pe tip FARA verificare
|
||||
*========================= de stoc -> acceptata neconditionat (plafonul exista dar nu se verifica)
|
||||
*-- tip=1 nu e in Inlist(poDate.tip,4,21,23,28,42,47) din inainte_de_do_termin, deci cresterea
|
||||
*-- cantitatii nu are plafon real - verifica ca S2c (recalcularea plafonului pt. tipurile CU
|
||||
*-- stoc) nu a introdus vreo restrictie neintentionata pe tipurile FARA verificare.
|
||||
IF RECCOUNT('crsfactura') = 1
|
||||
gcCazAct = 'CASE11_CANTITATE'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_modifica1.Click()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa But_modifica1 (P5, caz 11): glDlgTratat=' + TRANSFORM(glDlgTratat)
|
||||
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
IF ABS(cantitate - 50) < 0.001
|
||||
DO UILog WITH 'PASS P5 CAZUL 11 (rec_s2c): crestere cantitate pe tip fara verificare de stoc acceptata: cantitate=' + TRANSFORM(cantitate) + ' (asteptat 50)'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P5 CAZUL 11 (rec_s2c): cantitate=' + TRANSFORM(cantitate) + ' (asteptat 50) - crestere respinsa sau neaplicata'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO UILog WITH 'NEACOPERIT P5: nu exista randul (Reccount=' + TRANSFORM(RECCOUNT('crsfactura')) + ')'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 6, 'P5 caz 11 plafon - final'
|
||||
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO AfLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE AfErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO AfLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE UILog
|
||||
LPARAMETERS tcMsg
|
||||
DO AfLog WITH tcMsg
|
||||
ENDPROC
|
||||
|
||||
*-- FindCtl: referinta directa la un control prin Controls(i), potrivit dupa .Name - tehnica
|
||||
*-- validata in test_modal_unlock_smoketest2.prg (accesul cu prefix direct pe o referinta obtinuta
|
||||
*-- din _SCREEN.Forms a dat eroare 1925 in acel diagnostic; Controls(i) e calea sigura, folosita
|
||||
*-- consecvent, inclusiv pentru nivelurile imbricate).
|
||||
PROCEDURE FindCtl
|
||||
LPARAMETERS toParent, tcName
|
||||
LOCAL lnI, loGasit
|
||||
loGasit = .NULL.
|
||||
FOR lnI = 1 TO toParent.ControlCount
|
||||
IF UPPER(toParent.Controls(lnI).Name) == UPPER(tcName)
|
||||
loGasit = toParent.Controls(lnI)
|
||||
ENDIF
|
||||
ENDFOR
|
||||
RETURN loGasit
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexport AS Custom
|
||||
PROCEDURE citesteSetareRegistru
|
||||
LPARAMETERS tcCheie
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcCursor) (codmatf C(50))
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS driverdeblocare3 AS Custom
|
||||
PROCEDURE Executa
|
||||
*-- rulat la fiecare tick al _SCREEN.tmrDrvN2. Cauta FRM_ARTICOL_FACTURA prin _SCREEN.Forms,
|
||||
*-- aplica interactiunea selectata de gcCazAct (setata de test INAINTE de fiecare click),
|
||||
*-- si inchide dialogul (do_termin sau do_renunt, dupa caz).
|
||||
LOCAL lnI, loForm, llGasit
|
||||
gnDriverTick = gnDriverTick + 1
|
||||
llGasit = .F.
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
IF UPPER(_SCREEN.Forms(lnI).Class) == 'FRM_ARTICOL_FACTURA'
|
||||
loForm = _SCREEN.Forms(lnI)
|
||||
llGasit = .T.
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
IF glDlgTratat OR !llGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
DO AfLog WITH 'driver3 tick ' + TRANSFORM(gnDriverTick) + ' POTRIVIT (caz=' + gcCazAct + '), intru in interactiune'
|
||||
|
||||
LOCAL loBifa, loCantitateCtn, loCantitate, loPretCtvaCtn, loPretCtvaNat, loPretFtvaCtn, loPretFtvaNat, loRenunt
|
||||
|
||||
TRY
|
||||
DO CASE
|
||||
CASE gcCazAct == 'CASE6'
|
||||
loBifa = FindCtl(loForm, 'ck_pret_cu_tva')
|
||||
loBifa.Value = 1
|
||||
loBifa.InteractiveChange()
|
||||
loCantitateCtn = FindCtl(loForm, 'clb_cantitate')
|
||||
loCantitate = FindCtl(loCantitateCtn, 'Text_simplu1')
|
||||
loCantitate.Value = 1
|
||||
loCantitate.InteractiveChange()
|
||||
loPretCtvaCtn = FindCtl(loForm, 'Clb_pretctva')
|
||||
loPretCtvaNat = FindCtl(loPretCtvaCtn, 'tx_suma_nat')
|
||||
loPretCtvaNat.Value = 100
|
||||
loPretCtvaNat.InteractiveChange()
|
||||
DO AfLog WITH 'driver3 CASE6: bifa=1 cantitate=1 pretctva=100, apas do_termin()'
|
||||
loForm.do_termin()
|
||||
|
||||
CASE gcCazAct == 'CASE8_MOD_OFF'
|
||||
loBifa = FindCtl(loForm, 'ck_pret_cu_tva')
|
||||
loBifa.Value = 0
|
||||
loBifa.InteractiveChange()
|
||||
loPretFtvaCtn = FindCtl(loForm, 'Clb_pretftva')
|
||||
loPretFtvaNat = FindCtl(loPretFtvaCtn, 'tx_suma_nat')
|
||||
loPretFtvaNat.Value = 60
|
||||
loPretFtvaNat.InteractiveChange()
|
||||
DO AfLog WITH 'driver3 CASE8_MOD_OFF: bifa=0 pretftva=60, apas do_termin()'
|
||||
loForm.do_termin()
|
||||
|
||||
CASE gcCazAct == 'CASE8_MOD_ON'
|
||||
loBifa = FindCtl(loForm, 'ck_pret_cu_tva')
|
||||
loBifa.Value = 1
|
||||
loBifa.InteractiveChange()
|
||||
loPretCtvaCtn = FindCtl(loForm, 'Clb_pretctva')
|
||||
loPretCtvaNat = FindCtl(loPretCtvaCtn, 'tx_suma_nat')
|
||||
loPretCtvaNat.Value = 200
|
||||
loPretCtvaNat.InteractiveChange()
|
||||
DO AfLog WITH 'driver3 CASE8_MOD_ON: bifa=1 pretctva=200, apas do_termin()'
|
||||
loForm.do_termin()
|
||||
|
||||
CASE gcCazAct == 'CASE8_RENUNTA'
|
||||
loPretCtvaCtn = FindCtl(loForm, 'Clb_pretctva')
|
||||
loPretCtvaNat = FindCtl(loPretCtvaCtn, 'tx_suma_nat')
|
||||
loPretCtvaNat.Value = 9999
|
||||
loPretCtvaNat.InteractiveChange()
|
||||
loRenunt = FindCtl(loForm, 'But_renunt1')
|
||||
DO AfLog WITH 'driver3 CASE8_RENUNTA: pretctva tastat 9999, apas But_renunt1 (Renunta)'
|
||||
loRenunt.Click()
|
||||
|
||||
CASE gcCazAct == 'CASE11_CANTITATE'
|
||||
loCantitateCtn = FindCtl(loForm, 'clb_cantitate')
|
||||
loCantitate = FindCtl(loCantitateCtn, 'Text_simplu1')
|
||||
loCantitate.Value = 50
|
||||
loCantitate.InteractiveChange()
|
||||
DO AfLog WITH 'driver3 CASE11_CANTITATE: cantitate=50 (tip fara verificare de stoc), apas do_termin()'
|
||||
loForm.do_termin()
|
||||
|
||||
OTHERWISE
|
||||
DO AfLog WITH 'driver3: gcCazAct necunoscut [' + gcCazAct + ']'
|
||||
ENDCASE
|
||||
|
||||
glDlgTratat = .T.
|
||||
DO AfLog WITH 'driver3: interactiune REUSITA pentru caz=' + gcCazAct
|
||||
CATCH TO loExcDrv
|
||||
DO AfLog WITH 'driver3: CATCH caz=' + gcCazAct + ' ErrorNo=' + TRANSFORM(loExcDrv.ErrorNo) + ;
|
||||
' Message=' + loExcDrv.Message + ' Procedure=' + loExcDrv.Procedure + ;
|
||||
' LineNo=' + TRANSFORM(loExcDrv.LineNo) + ' LineContents=[' + loExcDrv.LineContents + ']'
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
@@ -0,0 +1,11 @@
|
||||
# test_pret_cu_tva_nivel2.ps1 - wrapper peste harness-ul generic pentru testele Nivel 2
|
||||
# (cazurile 6 si 8, S5, plan #7). Rulare: powershell -ExecutionPolicy Bypass -File test_pret_cu_tva_nivel2.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_pret_cu_tva_nivel2.prg') `
|
||||
-Steps @('grid_gol_afisat', 'p0_grid_gol', 'p1_caz6', 'p2_caz8a', 'p3_caz8b', 'p4_caz8c', 'p5_caz11_plafon') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_nivel2') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_nivel2') `
|
||||
-StepTimeoutSec 60 `
|
||||
-ReadyTimeoutSec 90
|
||||
@@ -0,0 +1,506 @@
|
||||
* test_pret_cu_tva_nivel2_retur.prg
|
||||
* Test UI Nivel 2 (S5, plan #7) pentru RAMURA DE RETUR (tip 8/9) a plafonului recalculat de S2c
|
||||
* (rec_s2c_ncantitatemax.md). Verificarea de plafon pentru retur (frm_articol_factura.
|
||||
* inainte_de_do_termin, ofacturare.vc2:2265, "Nu se poate returna mai mult decat a fost facturat!")
|
||||
* NU are garda de gestionabil/llStoculConteaza - se verifica NECONDITIONAT - deci articolul poate
|
||||
* fi gestionabil=0, ceea ce pastreaza fluxul de adaugare pe calea SIMPLA (frm_articol_factura
|
||||
* direct, fara do_alege_stoc), aceeasi infrastructura dovedita la cazurile 6/8.
|
||||
*
|
||||
* Cazuri (din rec_s2c_ncantitatemax.md, ramura retur - tip 8/9):
|
||||
* PAS 0: adaugare linie retur (crsarticole.cantitate=10 "cat s-a facturat", id_c=3001) prin
|
||||
* But_urmator1.Click() real -> crsfactura.cantitate=-10 (negat de do_initializeaza_articol
|
||||
* pt. tip 8/9), crsarticole.cantitate scade la 0 (decrementata de do_adauga_articol).
|
||||
* PAS 1: modificare DOAR de pret (cantitate neschimbata) -> trebuie ACCEPTATA (plafonul recalculat
|
||||
* egaleaza cantitatea curenta a liniei: 0 - (-10) = 10 = Abs(-10), nu strict mai mare).
|
||||
* PAS 2: se simuleaza o schimbare externa a stocului sursa (alt utilizator/proces a modificat
|
||||
* cat mai e disponibil de returnat) - crsarticole.cantitate setat manual la 5 (NU e
|
||||
* populare de crsfactura, e o schimbare pe cursorul SURSA, plauzibila in productie).
|
||||
* PAS 3: crestere cantitate returnata la -12 (magnitudine 12) -> plafonul RECALCULAT e
|
||||
* 5 - (-10) = 15, deci 12 <= 15 -> ACCEPTATA. Sub formula VECHE (ncantitatemax fixat la
|
||||
* cantitatea curenta a liniei, magnitudine 10, nerecalculat), 12 > 10 ar fi fost RESPINSA -
|
||||
* acesta e cazul care distinge formula veche de cea noua (S2c).
|
||||
* PAS 4: crestere cantitate returnata la -20 (magnitudine 20) -> peste plafonul recalculat (15) ->
|
||||
* RESPINSA cu mesajul "Nu se poate returna mai mult decat a fost facturat!"; iesire din
|
||||
* dialog prin do_renunt() (nu do_termin(), care nu elibereaza formularul la respingere).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_pret_cu_tva\test_pret_cu_tva_nivel2_retur_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_pret_cu_tva\uisync_nivel2_retur\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAFACTURARE\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\CALENDAR;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EMAIL;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\NFJSON;' + gcAppPath + 'COMUN\UTILE\NFXML;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO AfLog WITH 'SET PATH OK'
|
||||
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms ADDITIVE
|
||||
SET CLASSLIB TO ofacturare.vcx ADDITIVE
|
||||
SET CLASSLIB TO ofacturare_comun.vcx ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO ofacturare_rapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO onom_curs ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date ADDITIVE
|
||||
SET CLASSLIB TO baza ADDITIVE
|
||||
SET CLASSLIB TO caut ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO serii_numere ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO _calendar.vcx ADDITIVE
|
||||
SET CLASSLIB TO locale ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ocomenzi ADDITIVE
|
||||
DO AfLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg"
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.prg ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare2.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rapoarte_fact.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO odocumente ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa.prg ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_curs.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO wwApi.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.prg ADDITIVE
|
||||
SET PROCEDURE TO pmenu.prg ADDITIVE
|
||||
SET PROCEDURE TO ointroduceri.prg ADDITIVE
|
||||
SET PROCEDURE TO ovariabile_globale.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO suma_in_vorbe.prg ADDITIVE
|
||||
SET PROCEDURE TO controllerecr ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO AfLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
PUBLIC gnPc, gnPVal, gnPcant, gnPPretV, gnScadereStoc, gnMemProcDisc, gl406, gcAcces
|
||||
PUBLIC gnModTotFact, gnRF_FACTURARE_FARA_STOC, gnPPret, gnPPretVal
|
||||
gnPc = 2
|
||||
gnPVal = 2
|
||||
gnPcant = 3
|
||||
gnPPretV = 4
|
||||
gnPPret = 4
|
||||
gnPPretVal = 4
|
||||
gnScadereStoc = 0
|
||||
gnMemProcDisc = 0
|
||||
gl406 = .F.
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
gnModTotFact = 0
|
||||
gnRF_FACTURARE_FARA_STOC = 0
|
||||
PUBLIC nror(65000)
|
||||
|
||||
PUBLIC goApp, goExport, goExecutor
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
goExport = CREATEOBJECT('dummyexport')
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
|
||||
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 (1, 'TVA 21%', 21)
|
||||
GO TOP IN jtva_coloane
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250), procent_taxa N(7,2), taxcode N(6), tva_livrari N(1))
|
||||
INSERT INTO saft_taxtable VALUES ('301104-Achizitii de bunuri si servicii taxabile cu cota de 21%', 21, 301104, 1)
|
||||
|
||||
DO creeaza_facturacrs WITH 'crsfactura'
|
||||
DO AfLog WITH 'crsfactura creat, Reccount=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
*-- crsarticole: cantitate=10 reprezinta "cat s-a facturat / e disponibil de returnat".
|
||||
*-- gestionabil=0: verificarea de retur (:2265) nu are garda de gestionabil, deci ramane pe
|
||||
*-- calea simpla (frm_articol_factura direct), dar plafonul tot se verifica.
|
||||
IF USED('crsarticole')
|
||||
USE IN ('crsarticole')
|
||||
ENDIF
|
||||
CREATE CURSOR crsarticole (id_articol N(10), Id_Pol N(10), id_gestiune N(10), denumire C(100), ;
|
||||
codmat C(50), codbare C(50), gestionabil N(1), cantitate N(18,4), pret N(18,4), ;
|
||||
pret_val N(18,4), preturi_cu_tva N(1), proc_tvav N(18,4), discount_unitar N(18,4), ;
|
||||
discount_unitar_val N(18,4), pret_achizitie N(18,4), tip_valuta N(1), Curs N(18,4), ;
|
||||
multiplicator N(10,4), Cont C(10), um C(10), serie C(30), lot C(30), explicatie C(200), ;
|
||||
opt_facturare N(3), id_ctr N(10), numar_contract C(50), pretd N(18,4), id_valuta N(10), ;
|
||||
nume_val C(20), nume_lista_preturi C(100), id_jtva_coloana N(10), taxcode N(6), id_c N(10))
|
||||
INSERT INTO crsarticole (id_articol, Id_Pol, id_gestiune, denumire, codmat, codbare, ;
|
||||
gestionabil, cantitate, pret, pret_val, preturi_cu_tva, proc_tvav, discount_unitar, ;
|
||||
discount_unitar_val, pret_achizitie, tip_valuta, Curs, multiplicator, Cont, um, serie, ;
|
||||
lot, explicatie, opt_facturare, id_ctr, numar_contract, pretd, id_valuta, nume_val, ;
|
||||
nume_lista_preturi, id_jtva_coloana, taxcode, id_c) ;
|
||||
VALUES (3001, 1, 1, 'ARTICOL RETUR NIVEL2', 'ART3001', '', ;
|
||||
0, 10, 50, 0, 1, 1.21, 0, ;
|
||||
0, 0, 0, 1, 1, '707', 'BUC', '', ;
|
||||
'', '', 0, 0, '', 0, 0, '', ;
|
||||
'LISTA TEST', 1, 0, 3001)
|
||||
GO TOP IN crsarticole
|
||||
DO AfLog WITH 'crsarticole (retur) creat, Reccount=' + TRANSFORM(RECCOUNT('crsarticole'))
|
||||
|
||||
PRIVATE poDate
|
||||
poDate = CREATEOBJECT('oDateFactura')
|
||||
poDate.tip = 8 && 8 = factura retur lei
|
||||
poDate.serie_act = 'TST'
|
||||
poDate.nract = 1
|
||||
DO AfLog WITH 'poDate pregatit (oDateFactura), tip=' + TRANSFORM(poDate.tip)
|
||||
|
||||
PUBLIC goDriver, gnDriverTick, glDlgTratat, gcCazAct
|
||||
gnDriverTick = 0
|
||||
glDlgTratat = .F.
|
||||
gcCazAct = ''
|
||||
goDriver = CREATEOBJECT('driverdeblocare4')
|
||||
_SCREEN.AddObject('tmrDrvN2R', 'Timer')
|
||||
_SCREEN.tmrDrvN2R.Interval = 200
|
||||
BINDEVENT(_SCREEN.tmrDrvN2R, 'Timer', goDriver, 'Executa')
|
||||
_SCREEN.tmrDrvN2R.Enabled = .T.
|
||||
DO AfLog WITH 'driver+timer pregatiti'
|
||||
|
||||
_SCREEN.Visible = .T.
|
||||
_SCREEN.WindowState = 2
|
||||
_SCREEN.Caption = 'TEST UI Nivel 2 - ramura retur (S2c)'
|
||||
|
||||
PUBLIC goFrm
|
||||
goFrm = CREATEOBJECT('frm_facturare_articole')
|
||||
goFrm.WindowType = 0
|
||||
goFrm.Show()
|
||||
goFrm.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
DO AfLog WITH 'frm_facturare_articole afisat modeless, Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
DO HarnessStep WITH 0, 'formular afisat, grid gol'
|
||||
|
||||
*========================= PAS 0: adaugare linie retur (cantitate default, neschimbata) =========
|
||||
SELECT crsarticole
|
||||
GO TOP
|
||||
gcCazAct = 'ADD_DEFAULT'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_urmator1.Click()
|
||||
DOEVENTS FORCE
|
||||
LOCAL lnWait
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa But_urmator1: glDlgTratat=' + TRANSFORM(glDlgTratat) + ' Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
IF RECCOUNT('crsfactura') = 1
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
SELECT crsarticole
|
||||
LOCATE FOR id_c = 3001
|
||||
IF ABS(crsfactura.cantitate - (-10)) < 0.001 AND ABS(crsarticole.cantitate - 0) < 0.001
|
||||
DO UILog WITH 'PASS P0 adaugare retur: crsfactura.cantitate=' + TRANSFORM(crsfactura.cantitate) + ' crsarticole.cantitate=' + TRANSFORM(crsarticole.cantitate) + ' (asteptat -10 / 0)'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P0 adaugare retur: crsfactura.cantitate=' + TRANSFORM(crsfactura.cantitate) + ' crsarticole.cantitate=' + TRANSFORM(crsarticole.cantitate) + ' (asteptat -10 / 0)'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P0: Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura')) + ' (asteptat 1) - articolul retur nu a fost adaugat'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 1, 'P0 adaugare retur: Reccount=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
*========================= PAS 1: modificare DOAR de pret, cantitate neschimbata -> ACCEPTATA ===
|
||||
IF RECCOUNT('crsfactura') = 1
|
||||
gcCazAct = 'RETUR_DOAR_PRET'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_modifica1.Click()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa But_modifica1 (P1): glDlgTratat=' + TRANSFORM(glDlgTratat)
|
||||
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
IF ABS(cantitate - (-10)) < 0.001 AND ABS(pretftva - 77) < 0.01
|
||||
DO UILog WITH 'PASS P1 retur - doar pret modificat, ACCEPTAT: cantitate=' + TRANSFORM(cantitate) + ' pretftva=' + TRANSFORM(pretftva) + ' (asteptat -10 / 77)'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P1 retur - doar pret: cantitate=' + TRANSFORM(cantitate) + ' pretftva=' + TRANSFORM(pretftva) + ' (asteptat -10 / 77 - verifica daca a fost respins pe nedrept)'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO UILog WITH 'NEACOPERIT P1: nu exista randul'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 2, 'P1 retur doar pret'
|
||||
|
||||
*========================= PAS 2: simulare schimbare externa a stocului sursa =========
|
||||
SELECT crsarticole
|
||||
LOCATE FOR id_c = 3001
|
||||
IF FOUND()
|
||||
REPLACE cantitate WITH 5
|
||||
DO AfLog WITH 'P2: crsarticole.cantitate setat manual la 5 (simuleaza schimbare externa a stocului sursa, NU populare de crsfactura)'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 3, 'P2 stoc extern schimbat'
|
||||
|
||||
*========================= PAS 3: crestere la -12 (in limita plafonului RECALCULAT=15, dar peste
|
||||
*========================= plafonul VECHI fixat la 10) -> trebuie ACCEPTATA =========
|
||||
IF RECCOUNT('crsfactura') = 1
|
||||
gcCazAct = 'RETUR_CRESTERE_IN_PLAFON_NOU'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_modifica1.Click()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa But_modifica1 (P3): glDlgTratat=' + TRANSFORM(glDlgTratat)
|
||||
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
IF ABS(cantitate - (-12)) < 0.001
|
||||
DO UILog WITH 'PASS P3 retur - crestere la magnitudine 12 (peste plafonul VECHI=10, in plafonul NOU recalculat=15), ACCEPTATA: cantitate=' + TRANSFORM(cantitate) + ' - confirma ca S2c chiar RECALCULEAZA plafonul, nu il fixeaza la cantitatea initiala a liniei'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P3 retur - crestere in plafonul nou: cantitate=' + TRANSFORM(cantitate) + ' (asteptat -12) - fie a fost respinsa (plafon nerecalculat), fie alta problema'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO UILog WITH 'NEACOPERIT P3: nu exista randul'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 4, 'P3 retur crestere in plafon nou'
|
||||
|
||||
*========================= PAS 4: crestere la -20 (peste plafonul NOU=15) -> RESPINSA =========
|
||||
IF RECCOUNT('crsfactura') = 1
|
||||
LOCAL lnCantitateInainte
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
lnCantitateInainte = cantitate
|
||||
|
||||
gcCazAct = 'RETUR_CRESTERE_PESTE_PLAFON'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_modifica1.Click()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa But_modifica1 (P4): glDlgTratat=' + TRANSFORM(glDlgTratat)
|
||||
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
IF ABS(cantitate - lnCantitateInainte) < 0.001
|
||||
DO UILog WITH 'PASS P4 retur - crestere la magnitudine 20 (peste plafonul nou=15) RESPINSA: randul a ramas neschimbat, cantitate=' + TRANSFORM(cantitate)
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P4 retur - crestere peste plafon: cantitate=' + TRANSFORM(cantitate) + ' (asteptat neschimbat, ' + TRANSFORM(lnCantitateInainte) + ') - a fost acceptata desi trebuia respinsa'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO UILog WITH 'NEACOPERIT P4: nu exista randul'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 5, 'P4 retur peste plafon - final'
|
||||
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO AfLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE AfErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO AfLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE UILog
|
||||
LPARAMETERS tcMsg
|
||||
DO AfLog WITH tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE FindCtl
|
||||
LPARAMETERS toParent, tcName
|
||||
LOCAL lnI, loGasit
|
||||
loGasit = .NULL.
|
||||
FOR lnI = 1 TO toParent.ControlCount
|
||||
IF UPPER(toParent.Controls(lnI).Name) == UPPER(tcName)
|
||||
loGasit = toParent.Controls(lnI)
|
||||
ENDIF
|
||||
ENDFOR
|
||||
RETURN loGasit
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexport AS Custom
|
||||
PROCEDURE citesteSetareRegistru
|
||||
LPARAMETERS tcCheie
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcCursor) (codmatf C(50))
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS driverdeblocare4 AS Custom
|
||||
PROCEDURE Executa
|
||||
LOCAL lnI, loForm, llGasit
|
||||
gnDriverTick = gnDriverTick + 1
|
||||
llGasit = .F.
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
IF UPPER(_SCREEN.Forms(lnI).Class) == 'FRM_ARTICOL_FACTURA'
|
||||
loForm = _SCREEN.Forms(lnI)
|
||||
llGasit = .T.
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
IF glDlgTratat OR !llGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
DO AfLog WITH 'driver4 tick ' + TRANSFORM(gnDriverTick) + ' POTRIVIT (caz=' + gcCazAct + '), intru in interactiune'
|
||||
|
||||
LOCAL loCantitateCtn, loCantitate, loPretFtvaCtn, loPretFtvaNat, loRenunt
|
||||
|
||||
TRY
|
||||
DO CASE
|
||||
CASE gcCazAct == 'ADD_DEFAULT'
|
||||
DO AfLog WITH 'driver4 ADD_DEFAULT: nu ating nimic, apas do_termin() (accepta valorile implicite)'
|
||||
loForm.do_termin()
|
||||
|
||||
CASE gcCazAct == 'RETUR_DOAR_PRET'
|
||||
loPretFtvaCtn = FindCtl(loForm, 'Clb_pretftva')
|
||||
loPretFtvaNat = FindCtl(loPretFtvaCtn, 'tx_suma_nat')
|
||||
loPretFtvaNat.Value = 77
|
||||
loPretFtvaNat.InteractiveChange()
|
||||
DO AfLog WITH 'driver4 RETUR_DOAR_PRET: pretftva=77, cantitate neatinsa, apas do_termin()'
|
||||
loForm.do_termin()
|
||||
|
||||
CASE gcCazAct == 'RETUR_CRESTERE_IN_PLAFON_NOU'
|
||||
loCantitateCtn = FindCtl(loForm, 'clb_cantitate')
|
||||
loCantitate = FindCtl(loCantitateCtn, 'Text_simplu1')
|
||||
loCantitate.Value = -12
|
||||
loCantitate.InteractiveChange()
|
||||
DO AfLog WITH 'driver4 RETUR_CRESTERE_IN_PLAFON_NOU: cantitate=-12, apas do_termin()'
|
||||
loForm.do_termin()
|
||||
|
||||
CASE gcCazAct == 'RETUR_CRESTERE_PESTE_PLAFON'
|
||||
loCantitateCtn = FindCtl(loForm, 'clb_cantitate')
|
||||
loCantitate = FindCtl(loCantitateCtn, 'Text_simplu1')
|
||||
loCantitate.Value = -20
|
||||
loCantitate.InteractiveChange()
|
||||
DO AfLog WITH 'driver4 RETUR_CRESTERE_PESTE_PLAFON: cantitate=-20, apas do_termin() (asteptat: respins, ramane deschis)'
|
||||
loForm.do_termin()
|
||||
DO AfLog WITH 'driver4: dupa do_termin() pe cazul de respingere - inchid explicit prin do_renunt() ca sa nu ramana Show(1) blocat'
|
||||
loForm.do_renunt()
|
||||
|
||||
OTHERWISE
|
||||
DO AfLog WITH 'driver4: gcCazAct necunoscut [' + gcCazAct + ']'
|
||||
ENDCASE
|
||||
|
||||
glDlgTratat = .T.
|
||||
DO AfLog WITH 'driver4: interactiune REUSITA pentru caz=' + gcCazAct
|
||||
CATCH TO loExcDrv
|
||||
DO AfLog WITH 'driver4: CATCH caz=' + gcCazAct + ' ErrorNo=' + TRANSFORM(loExcDrv.ErrorNo) + ;
|
||||
' Message=' + loExcDrv.Message + ' Procedure=' + loExcDrv.Procedure + ;
|
||||
' LineNo=' + TRANSFORM(loExcDrv.LineNo) + ' LineContents=[' + loExcDrv.LineContents + ']'
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
@@ -0,0 +1,12 @@
|
||||
# test_pret_cu_tva_nivel2_retur.ps1 - wrapper peste harness-ul generic pentru ramura de retur
|
||||
# a plafonului recalculat (S2c, rec_s2c_ncantitatemax.md). Rulare:
|
||||
# powershell -ExecutionPolicy Bypass -File test_pret_cu_tva_nivel2_retur.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_pret_cu_tva_nivel2_retur.prg') `
|
||||
-Steps @('formular_afisat', 'p0_adaugare', 'p1_doar_pret', 'p2_stoc_extern', 'p3_in_plafon_nou', 'p4_peste_plafon') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_nivel2_retur') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_nivel2_retur') `
|
||||
-StepTimeoutSec 60 `
|
||||
-ReadyTimeoutSec 90
|
||||
@@ -0,0 +1,940 @@
|
||||
* test_pret_cu_tva_nivel3_gestiuni.prg
|
||||
* Test UI Nivel 3 (S2d, plan #7) pentru ramura GESTIONABILA a lui do_modifica/do_adauga_articol -
|
||||
* dialogul frm_articol_gest_factura, deschis prin do_alege_stoc (frm_facturare_articole,
|
||||
* ofacturare.vc2). Decizia coordonatorului: se mockuieste Oracle la GRANITA (goExecutor.oExecute,
|
||||
* singurul punct de contact al lui do_alege_stoc cu Oracle), NU se populeaza direct crsgestarticol/
|
||||
* crsfactura - fluxul real (butoane, taste, SPACE) ramane intact, doar sursa de date se inlocuieste.
|
||||
*
|
||||
* Articol 3001, gestionabil=1, gnScadereStoc=1, poDate.tip=4 (aviz - in Inlist-ul validat de
|
||||
* inainte_de_do_termin SI de plafonul S2c/S2d). 4 gestiuni mock, stoc constant (10/15/8/6) - Oracle
|
||||
* nu stie de cosul in lucru, exact ca in productie; scaderea celor deja pe factura o face codul
|
||||
* real (sub-selectul cu excluderea id_temp, S2d pct. 1).
|
||||
*
|
||||
* Cazuri (litere din review-ul S2d):
|
||||
* PAS 1 (caz a): adaugare linie1 din gestiunea G1 -> dialogul cu gestiuni arata mai multe
|
||||
* gestiuni (nu auto-select), ck_pret_cu_tva exista si e la Top=510 pe forma Height=546.
|
||||
* PAS 2: adaugare linie2 (acelasi articol) din gestiunea G2 - pregateste discriminantul de la c.
|
||||
* PAS 3 (cazuri b+c): redeschide linia1 -> crsgestarticol pozitionat pe gestiunea G1 a liniei;
|
||||
* randul G1 arata stocul disponibil PLUS cantitatea proprie (10, nu 7); randul G2 (linia2,
|
||||
* neexclusa) arata stocul scazut normal (11, nu 15). Inchis cu Renunta, nimic comis.
|
||||
* PAS 4 (caz d, respins): redeschide linia1, cere cantitate 11 (peste stocul gestiunii G1=10) ->
|
||||
* respins cu mesajul real "Cantitatea nu poate fi mai mare decat stocul gestiunii ...".
|
||||
* PAS 5 (caz d, acceptat): redeschide linia1, cere cantitate 10 (exact stocul gestiunii) ->
|
||||
* acceptat.
|
||||
* PAS 6 (caz e): redeschide linia1, navigheaza (fara SPACE) pe gestiunea G3, cantitate 5 ->
|
||||
* acceptat, linia1 trece pe G3. Verifica si g) crsarticole ajustat cu diferenta (-5).
|
||||
* PAS 7 (caz f+g): redeschide linia1, SPACE pe G1 si G4 (multi-selectie) -> linia1 devine G1/10,
|
||||
* apare O SINGURA linie noua G4/6 (exact regresia Scan/Skip, deja corectata) - Reccount
|
||||
* creste cu 1, nu cu 2. Verifica si crsarticole ajustat cu diferenta (delta 16-5=11).
|
||||
* PAS 8 (caz h): redeschide linia1, schimba pretul, apasa Renunta -> randul ramane BIT-IDENTIC.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_pret_cu_tva\test_pret_cu_tva_nivel3_gestiuni_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_pret_cu_tva\uisync_nivel3\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAFACTURARE\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\CALENDAR;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EMAIL;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\NFJSON;' + gcAppPath + 'COMUN\UTILE\NFXML;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GridExtras;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO AfLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE (lista dovedita de Nivel 1/2 - mediul unei suite noi se mosteneste din suita
|
||||
* care TRECE, nu dintr-un smoke-test) -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms ADDITIVE
|
||||
SET CLASSLIB TO ofacturare.vcx ADDITIVE
|
||||
SET CLASSLIB TO ofacturare_comun.vcx ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO ofacturare_rapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO onom_curs ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date ADDITIVE
|
||||
SET CLASSLIB TO baza ADDITIVE
|
||||
SET CLASSLIB TO caut ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO serii_numere ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO _calendar.vcx ADDITIVE
|
||||
SET CLASSLIB TO locale ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ocomenzi ADDITIVE
|
||||
DO AfLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock amessagebox PRIMUL, ui_harness la final) -----
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg"
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.prg ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare2.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rapoarte_fact.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO odocumente ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa.prg ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_curs.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO wwApi.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.prg ADDITIVE
|
||||
SET PROCEDURE TO pmenu.prg ADDITIVE
|
||||
SET PROCEDURE TO ointroduceri.prg ADDITIVE
|
||||
SET PROCEDURE TO ovariabile_globale.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO suma_in_vorbe.prg ADDITIVE
|
||||
SET PROCEDURE TO controllerecr ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO AfLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
*----- Globale aplicatie -----
|
||||
PUBLIC gnPc, gnPVal, gnPcant, gnPPretV, gnScadereStoc, gnMemProcDisc, gl406, gcAcces
|
||||
PUBLIC gnModTotFact, gnRF_FACTURARE_FARA_STOC
|
||||
gnModTotFact = 0
|
||||
gnRF_FACTURARE_FARA_STOC = 0
|
||||
PUBLIC gnPPret, gnPPretVal
|
||||
gnPc = 2
|
||||
gnPVal = 2
|
||||
gnPcant = 3
|
||||
gnPPretV = 4
|
||||
gnPPret = 4
|
||||
gnPPretVal = 4
|
||||
gnScadereStoc = 1 && activeaza ramura de stoc - do_alege_stoc SE apeleaza (opusul Nivel 2)
|
||||
gnMemProcDisc = 0
|
||||
gl406 = .F.
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
*-- do_alege_stoc citeste si aceste globale (parametri SQL cursor_gestiuni_articol) - lipsa lor
|
||||
*-- da ON ERROR 12 "Variable not found" la primul apel
|
||||
PUBLIC gnAn, gnLuna, gnIdUtil, gnIdSucursala
|
||||
gnAn = YEAR(DATE())
|
||||
gnLuna = MONTH(DATE())
|
||||
gnIdUtil = 1
|
||||
gnIdSucursala = 0
|
||||
PUBLIC nror(65000)
|
||||
|
||||
*-- gcMockUltimMesaj: mock_amessagebox.prg memoreaza aici ultimul mesaj afisat - folosit pt.
|
||||
*-- asertia pe TEXTUL respingerii de plafon (caz d).
|
||||
PUBLIC gcMockUltimMesaj, gnMockUltimTip
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
|
||||
PUBLIC goApp, goExport, goExecutor
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
goExport = CREATEOBJECT('dummyexport')
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
|
||||
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 (1, 'TVA 21%', 21)
|
||||
INSERT INTO jtva_coloane VALUES (2, 'TVA 11%', 11)
|
||||
GO TOP IN jtva_coloane
|
||||
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250), procent_taxa N(7,2), taxcode N(6), tva_livrari N(1))
|
||||
INSERT INTO saft_taxtable VALUES ('301104-Achizitii de bunuri si servicii taxabile cu cota de 21%', 21, 301104, 1)
|
||||
INSERT INTO saft_taxtable VALUES ('3011XX-Achizitii de bunuri si servicii taxabile cu cota de 11%', 11, 301108, 1)
|
||||
|
||||
*----- crsfactura: structura REALA, fara Oracle -----
|
||||
DO creeaza_facturacrs WITH 'crsfactura'
|
||||
DO AfLog WITH 'crsfactura creat, Reccount=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
*----- crsarticole: sursa (stoc/lista de preturi). Articolul 3001, gestionabil=1, cantitate mare
|
||||
* (plafonul S2c/S2d ramane generos - testele de mai jos verifica plafonul PE LOT din
|
||||
* dialogul de gestiuni, nu plafonul pe articol din crsarticole). -----
|
||||
IF USED('crsarticole')
|
||||
USE IN ('crsarticole')
|
||||
ENDIF
|
||||
CREATE CURSOR crsarticole (id_articol N(10), Id_Pol N(10), id_gestiune N(10), denumire C(100), ;
|
||||
codmat C(50), codbare C(50), gestionabil N(1), cantitate N(18,4), pret N(18,4), ;
|
||||
pret_val N(18,4), preturi_cu_tva N(1), proc_tvav N(18,4), discount_unitar N(18,4), ;
|
||||
discount_unitar_val N(18,4), pret_achizitie N(18,4), tip_valuta N(1), Curs N(18,4), ;
|
||||
multiplicator N(10,4), Cont C(10), um C(10), serie C(30), lot C(30), explicatie C(200), ;
|
||||
opt_facturare N(3), id_ctr N(10), numar_contract C(50), pretd N(18,4), id_valuta N(10), ;
|
||||
nume_val C(20), nume_lista_preturi C(100), id_jtva_coloana N(10), taxcode N(6), id_c N(10))
|
||||
INSERT INTO crsarticole (id_articol, Id_Pol, id_gestiune, denumire, codmat, codbare, ;
|
||||
gestionabil, cantitate, pret, pret_val, preturi_cu_tva, proc_tvav, discount_unitar, ;
|
||||
discount_unitar_val, pret_achizitie, tip_valuta, Curs, multiplicator, Cont, um, serie, ;
|
||||
lot, explicatie, opt_facturare, id_ctr, numar_contract, pretd, id_valuta, nume_val, ;
|
||||
nume_lista_preturi, id_jtva_coloana, taxcode, id_c) ;
|
||||
VALUES (3001, 1, 0, 'ARTICOL GESTIUNI NIVEL3', 'ART3001', '', ;
|
||||
1, 1000, 50, 0, 0, 1.21, 0, ;
|
||||
0, 0, 0, 1, 1, '701', 'BUC', '', ;
|
||||
'', '', 0, 0, '', 0, 0, '', ;
|
||||
'LISTA TEST', 1, 0, 3001)
|
||||
GO TOP IN crsarticole
|
||||
DO AfLog WITH 'crsarticole creat, Reccount=' + TRANSFORM(RECCOUNT('crsarticole'))
|
||||
|
||||
*----- crsMockStoc: gestiunile "Oracle" pentru articolul 3001, stoc FIX pe tot testul - Oracle
|
||||
* nu stie de cosul in lucru; scaderea celor deja pe factura o face codul real (LEFT JOIN +
|
||||
* excluderea id_temp, S2d pct. 1), nu mock-ul. dummyexecutor.oExecute o serveste la fiecare
|
||||
* apel cu 'cursor_gestiuni_articol' in SQL. Coloanele sunt exact cele citite de do_alege_stoc
|
||||
* (Insert Into (lcCursor) (...), ofacturare.vc2:13299, si copiaza_structura_cursor). -----
|
||||
IF USED('crsMockStoc')
|
||||
USE IN ('crsMockStoc')
|
||||
ENDIF
|
||||
*-- Cont/serie/lot cu ACEEASI latime ca in crsfactura (creeaza_facturacrs: Cont c(4), serie c(100),
|
||||
*-- lot C(20)) - LEFT JOIN-ul din do_alege_stoc compara aceste campuri intre cele doua cursoare
|
||||
*-- (:13304-13306); latimi diferite ar produce padding diferit si ar rupe egalitatea sub SET EXACT ON.
|
||||
*-- datain e DateTime (T), nu Date: coloana cDataIn a gridului are ControlSource "TTOD(datain)"
|
||||
*-- (ofacturare.vc2:3519), iar TTOD pe un camp D da eroarea 11 la constructia formularului.
|
||||
CREATE CURSOR crsMockStoc (ales N(1), id_gestiune N(10), cantitate N(18,4), Cont C(4), ;
|
||||
serie C(100), lot C(20), Pret N(18,4), nume_gestiune C(50), datain T, pretv N(18,4), ;
|
||||
pretvctva N(18,4), part_rez C(30), id_part_rez N(10), nrord_rez N(10), id_lucrare_rez N(10), ;
|
||||
pretd N(18,4), id_valuta N(10), nume_val C(20))
|
||||
INSERT INTO crsMockStoc VALUES (0, 101, 10, '701', 'SG1', 'LOT1', 50, 'GESTIUNE 1', {^2020-01-01 08:00:00}, 50, 60.50, '', 0, 0, 0, 0, 0, '')
|
||||
INSERT INTO crsMockStoc VALUES (0, 102, 15, '701', 'SG2', 'LOT2', 55, 'GESTIUNE 2', {^2020-01-02 08:00:00}, 55, 66.55, '', 0, 0, 0, 0, 0, '')
|
||||
INSERT INTO crsMockStoc VALUES (0, 103, 8, '701', 'SG3', 'LOT3', 52, 'GESTIUNE 3', {^2020-01-03 08:00:00}, 52, 62.92, '', 0, 0, 0, 0, 0, '')
|
||||
INSERT INTO crsMockStoc VALUES (0, 104, 6, '701', 'SG4', 'LOT4', 48, 'GESTIUNE 4', {^2020-01-04 08:00:00}, 48, 58.08, '', 0, 0, 0, 0, 0, '')
|
||||
GO TOP IN crsMockStoc
|
||||
DO AfLog WITH 'crsMockStoc creat (4 gestiuni, stoc 10/15/8/6), Reccount=' + TRANSFORM(RECCOUNT('crsMockStoc'))
|
||||
|
||||
*----- poDate: clasa REALA oDateFactura -----
|
||||
PRIVATE poDate
|
||||
poDate = CREATEOBJECT('oDateFactura')
|
||||
poDate.tip = 4 && 4 = aviz - in Inlist-ul validat de inainte_de_do_termin SI de plafonul S2c/S2d
|
||||
poDate.serie_act = 'TST'
|
||||
poDate.nract = 1
|
||||
DO AfLog WITH 'poDate pregatit (oDateFactura), tip=' + TRANSFORM(poDate.tip) + ' gnScadereStoc=' + TRANSFORM(gnScadereStoc)
|
||||
|
||||
*----- driverul de deblocare Show(1): Timer la nivel _SCREEN + _SCREEN.Forms + Controls(i),
|
||||
* mecanism validat (test_modal_unlock_smoketest2.prg / Nivel 2). De data asta cauta
|
||||
* FRM_ARTICOL_GEST_FACTURA, nu FRM_ARTICOL_FACTURA. -----
|
||||
PUBLIC goDriver, gnDriverTick, glDlgTratat, gcCazAct
|
||||
gnDriverTick = 0
|
||||
glDlgTratat = .F.
|
||||
gcCazAct = ''
|
||||
goDriver = CREATEOBJECT('driverdeblocaregest')
|
||||
_SCREEN.AddObject('tmrDrvN3', 'Timer')
|
||||
_SCREEN.tmrDrvN3.Interval = 200
|
||||
BINDEVENT(_SCREEN.tmrDrvN3, 'Timer', goDriver, 'Executa')
|
||||
_SCREEN.tmrDrvN3.Enabled = .T.
|
||||
DO AfLog WITH 'driver+timer pregatiti (cauta FRM_ARTICOL_GEST_FACTURA)'
|
||||
|
||||
*----- Desktop VFP vizibil, ca la celelalte suite UI -----
|
||||
_SCREEN.Visible = .T.
|
||||
_SCREEN.WindowState = 2
|
||||
_SCREEN.Caption = 'TEST UI Nivel 3 (S2d - ramura gestiuni)'
|
||||
|
||||
PUBLIC goFrm
|
||||
goFrm = CREATEOBJECT('frm_facturare_articole')
|
||||
goFrm.WindowType = 0 && testul instantiaza direct - modeless, Show() revine imediat
|
||||
goFrm.Show()
|
||||
goFrm.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
DO AfLog WITH 'frm_facturare_articole afisat modeless, Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
DO HarnessStep WITH 0, 'formular afisat, mediu pregatit'
|
||||
|
||||
*-- Local-e folosite pe tot parcursul --
|
||||
LOCAL lnWait, lnIdTempLinie1, lnIdTempLinie2, lnArtStocInainte, lnArtStocDupa
|
||||
|
||||
*========================= PAS 1 (caz a): adaugare linie1 din G1 =========================
|
||||
SELECT crsarticole
|
||||
GO TOP
|
||||
gcCazAct = 'ADD_G1_Q3'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_urmator1.Click()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa ADD_G1_Q3: glDlgTratat=' + TRANSFORM(glDlgTratat) + ' Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
IF RECCOUNT('crsfactura') = 1
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
lnIdTempLinie1 = id_temp
|
||||
IF id_gestiune = 101 AND ABS(cantitate - 3) < 0.001
|
||||
DO UILog WITH 'PASS P1 (caz a) linia1 adaugata din G1: id_gestiune=' + TRANSFORM(id_gestiune) + ' cantitate=' + TRANSFORM(cantitate) + ' pret_achizitie=' + TRANSFORM(pret_achizitie)
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P1 (caz a) linia1: id_gestiune=' + TRANSFORM(id_gestiune) + ' cantitate=' + TRANSFORM(cantitate) + ' (asteptat id_gestiune=101 cantitate=3)'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P1 (caz a): Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura')) + ' (asteptat 1) - linia1 nu a fost adaugata'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 1, 'P1 linia1 adaugata din G1'
|
||||
|
||||
*========================= PAS 2: adaugare linie2 (acelasi articol) din G2 =========================
|
||||
SELECT crsarticole
|
||||
GO TOP
|
||||
gcCazAct = 'ADD_G2_Q4'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_urmator1.Click()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa ADD_G2_Q4: glDlgTratat=' + TRANSFORM(glDlgTratat) + ' Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
IF RECCOUNT('crsfactura') = 2
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_gestiune = 102
|
||||
IF FOUND()
|
||||
lnIdTempLinie2 = id_temp
|
||||
IF ABS(cantitate - 4) < 0.001
|
||||
DO UILog WITH 'PASS P2 linia2 adaugata din G2: cantitate=' + TRANSFORM(cantitate)
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P2 linia2: cantitate=' + TRANSFORM(cantitate) + ' (asteptat 4)'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P2: nu exista rand cu id_gestiune=102'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P2: Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura')) + ' (asteptat 2)'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 2, 'P2 linia2 adaugata din G2'
|
||||
|
||||
*========================= PAS 3 (cazuri b+c): redeschide linia1, verifica preselectia si
|
||||
*========================= excluderea id_temp, apoi Renunta (nimic comis) =========================
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_temp = lnIdTempLinie1
|
||||
gcCazAct = 'MOD_L1_PRESELECT_CHECK'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_modifica1.Click()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa MOD_L1_PRESELECT_CHECK: glDlgTratat=' + TRANSFORM(glDlgTratat)
|
||||
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_temp = lnIdTempLinie1
|
||||
IF RECCOUNT('crsfactura') = 2 AND FOUND() AND id_gestiune = 101 AND ABS(cantitate - 3) < 0.001
|
||||
DO UILog WITH 'PASS P3 (caz b+c, Renunta) nimic comis: Reccount=2, linia1 neschimbata (G1/3)'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P3 (caz b+c, Renunta): Reccount=' + TRANSFORM(RECCOUNT('crsfactura')) + ' found=' + TRANSFORM(FOUND()) + ' id_gestiune=' + TRANSFORM(id_gestiune) + ' cantitate=' + TRANSFORM(cantitate) + ' (asteptat 2 / 101 / 3)'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 3, 'P3 cazuri b+c - preselectie si excludere id_temp'
|
||||
|
||||
*========================= PAS 4 (caz d, respins): redeschide linia1, cere 11 (peste stocul G1=10) =========================
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_temp = lnIdTempLinie1
|
||||
gcCazAct = 'MOD_L1_REJECT_OVER_LOT'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
gcMockUltimMesaj = ''
|
||||
goFrm.But_modifica1.Click()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa MOD_L1_REJECT_OVER_LOT: glDlgTratat=' + TRANSFORM(glDlgTratat) + ' mesaj=[' + gcMockUltimMesaj + ']'
|
||||
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_temp = lnIdTempLinie1
|
||||
IF ABS(cantitate - 3) < 0.001 AND 'stocul gestiunii' $ gcMockUltimMesaj
|
||||
DO UILog WITH 'PASS P4 (caz d, respins) cantitate 11 peste stocul G1(10) respinsa, linia neschimbata (cantitate=' + TRANSFORM(cantitate) + '), mesaj=[' + gcMockUltimMesaj + ']'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P4 (caz d, respins): cantitate=' + TRANSFORM(cantitate) + ' (asteptat 3, neschimbata) mesaj=[' + gcMockUltimMesaj + ']'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 4, 'P4 caz d - respins peste plafonul lotului'
|
||||
|
||||
*========================= PAS 5 (caz d, acceptat): redeschide linia1, cere exact 10 =========================
|
||||
SELECT crsarticole
|
||||
lnArtStocInainte = cantitate
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_temp = lnIdTempLinie1
|
||||
gcCazAct = 'MOD_L1_ACCEPT_AT_LOT'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_modifica1.Click()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa MOD_L1_ACCEPT_AT_LOT: glDlgTratat=' + TRANSFORM(glDlgTratat)
|
||||
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_temp = lnIdTempLinie1
|
||||
IF ABS(cantitate - 10) < 0.001 AND id_gestiune = 101
|
||||
DO UILog WITH 'PASS P5 (caz d, acceptat) cantitate 10 (exact stocul G1) acceptata: cantitate=' + TRANSFORM(cantitate)
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P5 (caz d, acceptat): cantitate=' + TRANSFORM(cantitate) + ' id_gestiune=' + TRANSFORM(id_gestiune) + ' (asteptat 10 / 101)'
|
||||
ENDIF
|
||||
*-- caz g: cantitatea liniei a crescut de la 3 la 10 (delta +7) -> crsarticole trebuie sa scada cu 7
|
||||
SELECT crsarticole
|
||||
lnArtStocDupa = cantitate
|
||||
IF ABS((lnArtStocInainte - lnArtStocDupa) - 7) < 0.001
|
||||
DO UILog WITH 'PASS P5 (caz g) crsarticole ajustat cu diferenta: ' + TRANSFORM(lnArtStocInainte) + ' -> ' + TRANSFORM(lnArtStocDupa) + ' (-7, cantitatea liniei a crescut 3->10)'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P5 (caz g): crsarticole ' + TRANSFORM(lnArtStocInainte) + ' -> ' + TRANSFORM(lnArtStocDupa) + ' (asteptat -7)'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 5, 'P5 caz d - acceptat la exact plafonul lotului'
|
||||
|
||||
*========================= PAS 6 (caz e + g): navigheaza (fara SPACE) pe G3, cantitate 5 =========================
|
||||
*-- martorul se ia AICI: cel din PAS 5 masoara efectul lui PAS 5, nu al lui PAS 6
|
||||
SELECT crsarticole
|
||||
lnArtStocInainte = cantitate
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_temp = lnIdTempLinie1
|
||||
gcCazAct = 'MOD_L1_CHANGE_GESTIUNE_NAV'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_modifica1.Click()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa MOD_L1_CHANGE_GESTIUNE_NAV: glDlgTratat=' + TRANSFORM(glDlgTratat)
|
||||
|
||||
SELECT crsarticole
|
||||
lnArtStocDupa = cantitate
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_temp = lnIdTempLinie1
|
||||
IF id_gestiune = 103 AND ABS(cantitate - 5) < 0.001 AND ABS(pret_achizitie - 52) < 0.001
|
||||
DO UILog WITH 'PASS P6 (caz e) schimbare gestiune prin navigare (fara SPACE): id_gestiune=' + TRANSFORM(id_gestiune) + ' cantitate=' + TRANSFORM(cantitate) + ' pret_achizitie=' + TRANSFORM(pret_achizitie)
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P6 (caz e): id_gestiune=' + TRANSFORM(id_gestiune) + ' cantitate=' + TRANSFORM(cantitate) + ' pret_achizitie=' + TRANSFORM(pret_achizitie) + ' (asteptat 103 / 5 / 52)'
|
||||
ENDIF
|
||||
*-- caz g: cantitatea liniei a scazut de la 10 la 5 (delta -5) -> crsarticole trebuie sa creasca cu 5
|
||||
IF ABS((lnArtStocDupa - lnArtStocInainte) - 5) < 0.001
|
||||
DO UILog WITH 'PASS P6 (caz g) crsarticole ajustat cu diferenta: ' + TRANSFORM(lnArtStocInainte) + ' -> ' + TRANSFORM(lnArtStocDupa) + ' (+5, cantitatea liniei a scazut 10->5)'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P6 (caz g): crsarticole ' + TRANSFORM(lnArtStocInainte) + ' -> ' + TRANSFORM(lnArtStocDupa) + ' (asteptat +5)'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 6, 'P6 caz e+g - schimbare gestiune prin navigare + sincronizare crsarticole'
|
||||
|
||||
*========================= PAS 7 (caz f + g): multi-selectie SPACE pe G1 si G4 =========================
|
||||
SELECT crsarticole
|
||||
lnArtStocInainte = cantitate
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_temp = lnIdTempLinie1
|
||||
gcCazAct = 'MOD_L1_MULTISELECT'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_modifica1.Click()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa MOD_L1_MULTISELECT: glDlgTratat=' + TRANSFORM(glDlgTratat) + ' Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura'))
|
||||
|
||||
SELECT crsarticole
|
||||
lnArtStocDupa = cantitate
|
||||
IF RECCOUNT('crsfactura') = 3
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_temp = lnIdTempLinie1
|
||||
LOCAL llL1ok, llL2ok, llNouaOk
|
||||
llL1ok = (id_gestiune = 101 AND ABS(cantitate - 10) < 0.001)
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_temp = lnIdTempLinie2
|
||||
llL2ok = FOUND() AND id_gestiune = 102 AND ABS(cantitate - 4) < 0.001
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_gestiune = 104
|
||||
llNouaOk = FOUND() AND ABS(cantitate - 6) < 0.001 AND id_temp <> lnIdTempLinie1 AND id_temp <> lnIdTempLinie2
|
||||
IF llL1ok AND llL2ok AND llNouaOk
|
||||
DO UILog WITH 'PASS P7 (caz f) multi-selectie: Reccount=3 (linia1 actualizata G1/10, linia2 neschimbata G2/4, O SINGURA linie noua G4/6 - fara duplicat)'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P7 (caz f): llL1ok=' + TRANSFORM(llL1ok) + ' llL2ok=' + TRANSFORM(llL2ok) + ' llNouaOk=' + TRANSFORM(llNouaOk)
|
||||
ENDIF
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P7 (caz f): Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura')) + ' (asteptat 3 - daca e 4, a reaparut regresia Scan/Skip cu linie duplicat)'
|
||||
ENDIF
|
||||
*-- caz g: cantitatea totala a articolului pe factura a crescut de la 5+4=9 la 10+6+4=20, delta +11 -> crsarticole trebuie sa scada cu 11
|
||||
IF ABS((lnArtStocInainte - lnArtStocDupa) - 11) < 0.001
|
||||
DO UILog WITH 'PASS P7 (caz g) crsarticole ajustat cu diferenta: ' + TRANSFORM(lnArtStocInainte) + ' -> ' + TRANSFORM(lnArtStocDupa) + ' (-11, cantitatea totala a crescut de la 5 la 16 pe aceasta redeschidere)'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P7 (caz g): crsarticole ' + TRANSFORM(lnArtStocInainte) + ' -> ' + TRANSFORM(lnArtStocDupa) + ' (asteptat -11)'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 7, 'P7 caz f+g - multi-selectie si sincronizare crsarticole'
|
||||
|
||||
*========================= PAS 8 (caz h): Renunta pe dialogul cu gestiuni - rand bit-identic =========================
|
||||
IF RECCOUNT('crsfactura') >= 1
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_temp = lnIdTempLinie1
|
||||
IF FOUND()
|
||||
LOCAL ARRAY laSnapDinainte[1]
|
||||
LOCAL lnF, lnCampuri
|
||||
SCATTER TO laSnapDinainte
|
||||
|
||||
gcCazAct = 'MOD_L1_RENUNTA'
|
||||
glDlgTratat = .F.
|
||||
gnDriverTick = 0
|
||||
goFrm.But_modifica1.Click()
|
||||
DOEVENTS FORCE
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratat AND lnWait < 150
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO AfLog WITH 'dupa MOD_L1_RENUNTA: glDlgTratat=' + TRANSFORM(glDlgTratat)
|
||||
|
||||
LOCAL ARRAY laSnapDupa[1]
|
||||
SELECT crsfactura
|
||||
LOCATE FOR id_temp = lnIdTempLinie1
|
||||
SCATTER TO laSnapDupa
|
||||
|
||||
LOCAL llIdentic
|
||||
llIdentic = (ALEN(laSnapDinainte,1) == ALEN(laSnapDupa,1))
|
||||
lnCampuri = 0
|
||||
IF llIdentic
|
||||
FOR lnF = 1 TO ALEN(laSnapDinainte,1)
|
||||
lnCampuri = lnCampuri + 1
|
||||
IF !(TRANSFORM(laSnapDinainte(lnF)) == TRANSFORM(laSnapDupa(lnF)))
|
||||
llIdentic = .F.
|
||||
DO AfLog WITH 'P8 diagnostic - campul ' + TRANSFORM(lnF) + ' difera: [' + ;
|
||||
TRANSFORM(laSnapDinainte(lnF)) + '] -> [' + TRANSFORM(laSnapDupa(lnF)) + ']'
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ENDIF
|
||||
|
||||
IF llIdentic
|
||||
DO UILog WITH 'PASS P8 (caz h) Renunta pe dialogul cu gestiuni: randul ramane BIT-IDENTIC (' + TRANSFORM(lnCampuri) + ' campuri comparate)'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P8 (caz h): randul S-A MODIFICAT desi s-a apasat Renunta (vezi diag pe campuri mai sus)'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO UILog WITH 'NEACOPERIT P8: linia1 (id_temp=' + TRANSFORM(lnIdTempLinie1) + ') nu mai exista'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO UILog WITH 'NEACOPERIT P8: crsfactura gol'
|
||||
ENDIF
|
||||
DO HarnessStep WITH 8, 'P8 caz h - Renunta bit-identic'
|
||||
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO AfLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
|
||||
*-- DIAGNOSTIC temporar: AERROR() suplimentar, stare crsgestarticol, si o proba izolata de
|
||||
*-- CREATEOBJECT("frm_articol_gest_factura",...) cu poArticol construit liber (ca Nivel 1) -
|
||||
*-- separa o cauza de MEDIU (clase/globale) de una legata de FORMA lui poArticol produs de
|
||||
*-- fluxul real (do_initializeaza_articol).
|
||||
LOCAL ARRAY laErrDiag(1)
|
||||
LOCAL lnEd
|
||||
=AERROR(laErrDiag)
|
||||
FOR lnEd = 1 TO ALEN(laErrDiag,1)
|
||||
DO AfLog WITH 'AERROR[' + TRANSFORM(lnEd) + ']=' + TRANSFORM(NVL(laErrDiag(lnEd),'.NULL.'))
|
||||
ENDFOR
|
||||
DO AfLog WITH 'DIAG: USED(crsgestarticol)=' + TRANSFORM(USED('crsgestarticol')) + IIF(USED('crsgestarticol'), ' Reccount=' + TRANSFORM(RECCOUNT('crsgestarticol')), '')
|
||||
|
||||
LOCAL lnPi, loProba
|
||||
LOCAL ARRAY laPPropN(49), laPPropC(11)
|
||||
laPPropN( 1)='id_articol'
|
||||
laPPropN( 2)='Id_Pol'
|
||||
laPPropN( 3)='id_gestiune'
|
||||
laPPropN( 4)='id_c'
|
||||
laPPropN( 5)='id_ctr'
|
||||
laPPropN( 6)='id_valuta'
|
||||
laPPropN( 7)='id_valuta_d'
|
||||
laPPropN( 8)='id_lucrare_rez'
|
||||
laPPropN( 9)='id_part_rez'
|
||||
laPPropN(10)='id_jtva_coloana'
|
||||
laPPropN(11)='taxcode'
|
||||
laPPropN(12)='opt_facturare'
|
||||
laPPropN(13)='gestionabil'
|
||||
laPPropN(14)='tip_valuta'
|
||||
laPPropN(15)='cantitate'
|
||||
laPPropN(16)='Curs'
|
||||
laPPropN(17)='multiplicator'
|
||||
laPPropN(18)='pret_achizitie'
|
||||
laPPropN(19)='pretv_orig'
|
||||
laPPropN(20)='pretd'
|
||||
laPPropN(21)='proc_tvav'
|
||||
laPPropN(22)='preturi_cu_tva'
|
||||
laPPropN(23)='pretftva'
|
||||
laPPropN(24)='pretftva_val'
|
||||
laPPropN(25)='pretctva'
|
||||
laPPropN(26)='pretctva_val'
|
||||
laPPropN(27)='tva'
|
||||
laPPropN(28)='tva_val'
|
||||
laPPropN(29)='discount_unitar'
|
||||
laPPropN(30)='discount_unitar_val'
|
||||
laPPropN(31)='discount_unitar_ctva'
|
||||
laPPropN(32)='discount_unitar_ctva_val'
|
||||
laPPropN(33)='valftva'
|
||||
laPPropN(34)='valtva'
|
||||
laPPropN(35)='valctva'
|
||||
laPPropN(36)='valdiscountftva'
|
||||
laPPropN(37)='valdiscounttva'
|
||||
laPPropN(38)='valdiscountctva'
|
||||
laPPropN(39)='valdiminuatftva'
|
||||
laPPropN(40)='valdiminuattva'
|
||||
laPPropN(41)='valdiminuatctva'
|
||||
laPPropN(42)='vvalftva'
|
||||
laPPropN(43)='vvaltva'
|
||||
laPPropN(44)='vvalctva'
|
||||
laPPropN(45)='vvaldiscountftva'
|
||||
laPPropN(46)='vvaldiscounttva'
|
||||
laPPropN(47)='vvaldiscountctva'
|
||||
laPPropN(48)='vvaldiminuatftva'
|
||||
laPPropN(49)='vvaldiminuattva'
|
||||
laPPropC( 1)='codmat'
|
||||
laPPropC( 2)='codmatf'
|
||||
laPPropC( 3)='denumire'
|
||||
laPPropC( 4)='um'
|
||||
laPPropC( 5)='serie'
|
||||
laPPropC( 6)='lot'
|
||||
laPPropC( 7)='explicatie'
|
||||
laPPropC( 8)='numar_contract'
|
||||
laPPropC( 9)='codbare'
|
||||
laPPropC(10)='nume_val'
|
||||
laPPropC(11)='Cont'
|
||||
|
||||
PRIVATE poArticol
|
||||
poArticol = CREATEOBJECT('Empty')
|
||||
FOR lnPi = 1 TO 49
|
||||
=ADDPROPERTY(poArticol, laPPropN(lnPi), 0)
|
||||
ENDFOR
|
||||
=ADDPROPERTY(poArticol, 'vvaldiminuatctva', 0)
|
||||
FOR lnPi = 1 TO 11
|
||||
=ADDPROPERTY(poArticol, laPPropC(lnPi), '')
|
||||
ENDFOR
|
||||
poArticol.id_articol = 3001
|
||||
poArticol.Id_Pol = 1
|
||||
poArticol.Cont = '701'
|
||||
poArticol.id_gestiune = 101
|
||||
poArticol.gestionabil = 1
|
||||
poArticol.tip_valuta = 0
|
||||
poArticol.Curs = 1
|
||||
poArticol.multiplicator = 1
|
||||
poArticol.cantitate = 3
|
||||
poArticol.codmat = 'ART3001'
|
||||
poArticol.denumire = 'ARTICOL GESTIUNI NIVEL3'
|
||||
poArticol.um = 'BUC'
|
||||
poArticol.proc_tvav = 1.21
|
||||
poArticol.preturi_cu_tva = 0
|
||||
poArticol.pretftva = 50
|
||||
poArticol.pretctva = 60.5
|
||||
|
||||
TRY
|
||||
loProba = CREATEOBJECT('frm_articol_gest_factura', 3, .F., .F.)
|
||||
DO AfLog WITH 'DIAG PROBA: CREATEOBJECT reusit izolat, Class=' + loProba.Class
|
||||
loProba.Release()
|
||||
CATCH TO loExcProba
|
||||
DO AfLog WITH 'DIAG PROBA: CATCH ErrorNo=' + TRANSFORM(loExcProba.ErrorNo) + ' Message=' + loExcProba.Message + ' Proc=' + loExcProba.Procedure + ' Line=' + TRANSFORM(loExcProba.LineNo) + ' [' + loExcProba.LineContents + ']'
|
||||
ENDTRY
|
||||
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE AfErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO AfLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AfLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE UILog
|
||||
LPARAMETERS tcMsg
|
||||
DO AfLog WITH tcMsg
|
||||
ENDPROC
|
||||
|
||||
*-- FindCtl: referinta directa la un control prin Controls(i), potrivit dupa .Name - tehnica
|
||||
*-- validata in test_modal_unlock_smoketest2.prg / Nivel 2 (accesul cu prefix direct pe o referinta
|
||||
*-- obtinuta din _SCREEN.Forms da eroare 1925; Controls(i) e calea sigura).
|
||||
PROCEDURE FindCtl
|
||||
LPARAMETERS toParent, tcName
|
||||
LOCAL lnI, loGasit
|
||||
loGasit = .NULL.
|
||||
FOR lnI = 1 TO toParent.ControlCount
|
||||
IF UPPER(toParent.Controls(lnI).Name) == UPPER(tcName)
|
||||
loGasit = toParent.Controls(lnI)
|
||||
ENDIF
|
||||
ENDFOR
|
||||
RETURN loGasit
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexport AS Custom
|
||||
PROCEDURE citesteSetareRegistru
|
||||
LPARAMETERS tcCheie
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
*-- dummyexecutor: mock la GRANITA (goExecutor.oExecute e singurul punct de contact al lui
|
||||
*-- do_alege_stoc cu Oracle, ofacturare.vc2:13254). Ramifica pe continutul SQL-ului: cererile
|
||||
*-- 'cursor_gestiuni_articol*' (normal/_retur/_stoc0 - toate three trec prin acelasi mock, textul
|
||||
*-- nu se distinge in teste, doar sursa comuna crsMockStoc) primesc structura+datele din
|
||||
*-- crsMockStoc; orice alta interogare (ex. select codmatf ... from nom_articole, apelata dupa
|
||||
*-- gnButon=1) primeste comportamentul implicit de dinainte (cursor gol cu un singur camp).
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
IF 'CURSOR_GESTIUNI_ARTICOL' $ UPPER(tcSql)
|
||||
SELECT * FROM crsMockStoc INTO CURSOR (tcCursor) READWRITE
|
||||
ELSE
|
||||
CREATE CURSOR (tcCursor) (codmatf C(50))
|
||||
ENDIF
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oPrelucrareEroare
|
||||
RETURN cEroare
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS driverdeblocaregest AS Custom
|
||||
PROCEDURE Executa
|
||||
*-- rulat la fiecare tick al _SCREEN.tmrDrvN3. Cauta FRM_ARTICOL_GEST_FACTURA (nu
|
||||
*-- FRM_ARTICOL_FACTURA - dialogul cu gridul de gestiuni, deschis de do_alege_stoc),
|
||||
*-- aplica interactiunea selectata de gcCazAct, inchide dialogul (do_termin sau
|
||||
*-- But_renunt1.Click(), dupa caz).
|
||||
LOCAL lnI, loForm, llGasit
|
||||
gnDriverTick = gnDriverTick + 1
|
||||
llGasit = .F.
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
IF UPPER(_SCREEN.Forms(lnI).Class) == 'FRM_ARTICOL_GEST_FACTURA'
|
||||
loForm = _SCREEN.Forms(lnI)
|
||||
llGasit = .T.
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
IF glDlgTratat OR !llGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
DO AfLog WITH 'driverGest tick ' + TRANSFORM(gnDriverTick) + ' POTRIVIT (caz=' + gcCazAct + '), intru in interactiune'
|
||||
|
||||
LOCAL loCantitateCtn, loCantitate, loBifa, loRenunt, loGrid
|
||||
|
||||
TRY
|
||||
DO CASE
|
||||
CASE gcCazAct == 'ADD_G1_Q3'
|
||||
*-- caz a: dialogul cu gestiuni s-a deschis pe mai multe gestiuni (nu auto-select);
|
||||
*-- verific ck_pret_cu_tva (mostenit din frm_articol_factura, S2a) - existenta si layout.
|
||||
loBifa = FindCtl(loForm, 'ck_pret_cu_tva')
|
||||
IF VARTYPE(loBifa) = 'O'
|
||||
IF loForm.Height = 546 AND loBifa.Top = 510
|
||||
DO AfLog WITH 'driverGest ADD_G1_Q3: ck_pret_cu_tva EXISTA, Top=' + TRANSFORM(loBifa.Top) + ' pe forma Height=' + TRANSFORM(loForm.Height) + ' -> PASS layout'
|
||||
ELSE
|
||||
DO AfLog WITH 'driverGest ADD_G1_Q3: ck_pret_cu_tva EXISTA dar layout neasteptat: Top=' + TRANSFORM(loBifa.Top) + ' Height forma=' + TRANSFORM(loForm.Height)
|
||||
ENDIF
|
||||
ELSE
|
||||
DO AfLog WITH 'driverGest ADD_G1_Q3: ck_pret_cu_tva LIPSESTE din instanta'
|
||||
ENDIF
|
||||
DO AfLog WITH 'driverGest ADD_G1_Q3: Reccount(crsgestarticol)=' + TRANSFORM(RECCOUNT('crsgestarticol'))
|
||||
*-- pozitia implicita (Go Top, tnIdTempExclus=0 la adaugare) e deja pe G1 (datain cel mai vechi)
|
||||
loCantitateCtn = FindCtl(loForm, 'clb_cantitate')
|
||||
loCantitate = FindCtl(loCantitateCtn, 'Text_simplu1')
|
||||
loCantitate.Value = 3
|
||||
loCantitate.InteractiveChange()
|
||||
DO AfLog WITH 'driverGest ADD_G1_Q3: cantitate=3 pe G1 (pozitia implicita), apas do_termin()'
|
||||
loForm.do_termin()
|
||||
|
||||
CASE gcCazAct == 'ADD_G2_Q4'
|
||||
SELECT crsgestarticol
|
||||
LOCATE FOR id_gestiune = 102
|
||||
loGrid = FindCtl(loForm, 'grd_gestiuni')
|
||||
loGrid.AfterRowColChange(1)
|
||||
loCantitateCtn = FindCtl(loForm, 'clb_cantitate')
|
||||
loCantitate = FindCtl(loCantitateCtn, 'Text_simplu1')
|
||||
loCantitate.Value = 4
|
||||
loCantitate.InteractiveChange()
|
||||
DO AfLog WITH 'driverGest ADD_G2_Q4: navigheaza pe G2, cantitate=4, apas do_termin()'
|
||||
loForm.do_termin()
|
||||
|
||||
CASE gcCazAct == 'MOD_L1_PRESELECT_CHECK'
|
||||
*-- cazuri b+c: verifica preselectia pe randul liniei si excluderea id_temp, fara sa comita nimic
|
||||
SELECT crsgestarticol
|
||||
IF id_gestiune = 101 AND ABS(cantitate - 10) < 0.001
|
||||
DO UILog WITH 'PASS P3 (caz b) preselectie pe randul liniei modificate, cu propria cantitate reintoarsa in stoc: id_gestiune=' + TRANSFORM(id_gestiune) + ' cantitate=' + TRANSFORM(cantitate)
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P3 (caz b): id_gestiune=' + TRANSFORM(id_gestiune) + ' cantitate=' + TRANSFORM(cantitate) + ' (asteptat 101 / 10)'
|
||||
ENDIF
|
||||
LOCATE FOR id_gestiune = 102
|
||||
IF FOUND() AND ABS(cantitate - 11) < 0.001
|
||||
DO UILog WITH 'PASS P3 (caz c) randul G2 (linia2, neexclusa) scade normal cu cantitatea ei: cantitate=' + TRANSFORM(cantitate) + ' (15-4)'
|
||||
ELSE
|
||||
DO UILog WITH 'FAIL P3 (caz c): randul G2 found=' + TRANSFORM(FOUND()) + IIF(FOUND(), ' cantitate=' + TRANSFORM(cantitate), '') + ' (asteptat 11 = 15-4)'
|
||||
ENDIF
|
||||
loRenunt = FindCtl(loForm, 'But_renunt1')
|
||||
DO AfLog WITH 'driverGest MOD_L1_PRESELECT_CHECK: apas Renunta (nimic de comis)'
|
||||
loRenunt.Click()
|
||||
|
||||
CASE gcCazAct == 'MOD_L1_REJECT_OVER_LOT'
|
||||
SELECT crsgestarticol
|
||||
LOCATE FOR id_gestiune = 101
|
||||
loGrid = FindCtl(loForm, 'grd_gestiuni')
|
||||
loGrid.AfterRowColChange(1)
|
||||
loCantitateCtn = FindCtl(loForm, 'clb_cantitate')
|
||||
loCantitate = FindCtl(loCantitateCtn, 'Text_simplu1')
|
||||
loCantitate.Value = 11
|
||||
loCantitate.InteractiveChange()
|
||||
DO AfLog WITH 'driverGest MOD_L1_REJECT_OVER_LOT: cantitate=11 pe G1 (stoc 10), apas do_termin() - astept respingere'
|
||||
loForm.do_termin()
|
||||
*-- daca a respins, formularul ramane deschis (testare-ui-vfp.md, "Dialoguri modale") - inchid prin Renunta
|
||||
loRenunt = FindCtl(loForm, 'But_renunt1')
|
||||
IF VARTYPE(loRenunt) = 'O'
|
||||
DO AfLog WITH 'driverGest MOD_L1_REJECT_OVER_LOT: dialogul a ramas deschis (validare respinsa, cum era asteptat), inchid cu Renunta'
|
||||
loRenunt.Click()
|
||||
ENDIF
|
||||
|
||||
CASE gcCazAct == 'MOD_L1_ACCEPT_AT_LOT'
|
||||
SELECT crsgestarticol
|
||||
LOCATE FOR id_gestiune = 101
|
||||
loGrid = FindCtl(loForm, 'grd_gestiuni')
|
||||
loGrid.AfterRowColChange(1)
|
||||
loCantitateCtn = FindCtl(loForm, 'clb_cantitate')
|
||||
loCantitate = FindCtl(loCantitateCtn, 'Text_simplu1')
|
||||
loCantitate.Value = 10
|
||||
loCantitate.InteractiveChange()
|
||||
DO AfLog WITH 'driverGest MOD_L1_ACCEPT_AT_LOT: cantitate=10 pe G1 (exact stocul), apas do_termin()'
|
||||
loForm.do_termin()
|
||||
|
||||
CASE gcCazAct == 'MOD_L1_CHANGE_GESTIUNE_NAV'
|
||||
SELECT crsgestarticol
|
||||
LOCATE FOR id_gestiune = 103
|
||||
loGrid = FindCtl(loForm, 'grd_gestiuni')
|
||||
loGrid.AfterRowColChange(1)
|
||||
loCantitateCtn = FindCtl(loForm, 'clb_cantitate')
|
||||
loCantitate = FindCtl(loCantitateCtn, 'Text_simplu1')
|
||||
loCantitate.Value = 5
|
||||
loCantitate.InteractiveChange()
|
||||
DO AfLog WITH 'driverGest MOD_L1_CHANGE_GESTIUNE_NAV: navigheaza (fara SPACE) pe G3, cantitate=5, apas do_termin()'
|
||||
loForm.do_termin()
|
||||
|
||||
CASE gcCazAct == 'MOD_L1_MULTISELECT'
|
||||
SELECT crsgestarticol
|
||||
LOCATE FOR id_gestiune = 101
|
||||
DO AfLog WITH 'driverGest MOD_L1_MULTISELECT: SPACE (do_executa) pe G1'
|
||||
loForm.do_executa()
|
||||
SELECT crsgestarticol
|
||||
LOCATE FOR id_gestiune = 104
|
||||
DO AfLog WITH 'driverGest MOD_L1_MULTISELECT: SPACE (do_executa) pe G4'
|
||||
loForm.do_executa()
|
||||
DO AfLog WITH 'driverGest MOD_L1_MULTISELECT: nselectate=' + TRANSFORM(loForm.nselectate) + IIF(TYPE('poArticol.cantitate') = 'N', ' poArticol.cantitate acumulata=' + TRANSFORM(poArticol.cantitate), '') + ', apas do_termin()'
|
||||
loForm.do_termin()
|
||||
|
||||
CASE gcCazAct == 'MOD_L1_RENUNTA'
|
||||
loCantitateCtn = FindCtl(loForm, 'Clb_pretftva')
|
||||
IF VARTYPE(loCantitateCtn) = 'O'
|
||||
loCantitate = FindCtl(loCantitateCtn, 'tx_suma_nat')
|
||||
IF VARTYPE(loCantitate) = 'O'
|
||||
loCantitate.Value = 9999
|
||||
loCantitate.InteractiveChange()
|
||||
ENDIF
|
||||
ENDIF
|
||||
loRenunt = FindCtl(loForm, 'But_renunt1')
|
||||
DO AfLog WITH 'driverGest MOD_L1_RENUNTA: pret tastat 9999, apas But_renunt1 (Renunta)'
|
||||
loRenunt.Click()
|
||||
|
||||
OTHERWISE
|
||||
DO AfLog WITH 'driverGest: gcCazAct necunoscut [' + gcCazAct + ']'
|
||||
ENDCASE
|
||||
|
||||
glDlgTratat = .T.
|
||||
DO AfLog WITH 'driverGest: interactiune REUSITA pentru caz=' + gcCazAct
|
||||
CATCH TO loExcDrv
|
||||
DO AfLog WITH 'driverGest: CATCH caz=' + gcCazAct + ' ErrorNo=' + TRANSFORM(loExcDrv.ErrorNo) + ;
|
||||
' Message=' + loExcDrv.Message + ' Procedure=' + loExcDrv.Procedure + ;
|
||||
' LineNo=' + TRANSFORM(loExcDrv.LineNo) + ' LineContents=[' + loExcDrv.LineContents + ']'
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
@@ -0,0 +1,13 @@
|
||||
# test_pret_cu_tva_nivel3_gestiuni.ps1 - wrapper peste harness-ul generic pentru ramura GESTIONABILA
|
||||
# a lui do_modifica/do_adauga_articol (S2d, review). Oracle mockuit la granita (goExecutor), fluxul
|
||||
# real (butoane, taste, SPACE) ramane intact. Rulare:
|
||||
# powershell -ExecutionPolicy Bypass -File test_pret_cu_tva_nivel3_gestiuni.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_pret_cu_tva_nivel3_gestiuni.prg') `
|
||||
-Steps @('mediu', 'p1_add_g1', 'p2_add_g2', 'p3_preselectie_excludere', 'p4_respins_peste_lot', 'p5_acceptat_la_lot', 'p6_schimbare_gestiune_nav', 'p7_multiselectie', 'p8_renunta') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_nivel3') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_nivel3') `
|
||||
-StepTimeoutSec 60 `
|
||||
-ReadyTimeoutSec 90
|
||||
Reference in New Issue
Block a user