Compare commits
2 Commits
8df728cf8b
...
c5b0ce3a25
| Author | SHA1 | Date | |
|---|---|---|---|
| c5b0ce3a25 | |||
| f88b2b9a5b |
@@ -5,22 +5,22 @@ Poate folosesti exact datele de la anaf descarcate pentru verificarea codurilor
|
||||
|
||||
Vreau ca verificarile de coduri fiscale din D406, D394, Registrele de TVA sa foloseasca direct ANAF, si sa actualizeze cache-ul istoricul din baza de date (ISTORIC_CODURI_FISCALE)
|
||||
|
||||
2. ROACONT - Borderou eFactura, checkbox-urile diferente fata de Registrele de TVA sa aiba in caption si numarul de inregistrari cu diferente, astfel incat utilizatorul sa stie daca este cazul sa filtreze pentru afisarea facturilor cu diferente
|
||||
DONE 2. ROACONT - Borderou eFactura, checkbox-urile diferente fata de Registrele de TVA sa aiba in caption si numarul de inregistrari cu diferente, astfel incat utilizatorul sa stie daca este cazul sa filtreze pentru afisarea facturilor cu diferente
|
||||
|
||||
3. ROACONT - modificare nota, explicatia tva sa filtreze dupa procent tva din tabel, ca sa arate o selectie mai mica de explicatii tva. vezi cum ai facut la explicatia tva din ointroduceri.vcx > import_nota.
|
||||
DONE 3. ROACONT - modificare nota, explicatia tva sa filtreze dupa procent tva din tabel, ca sa arate o selectie mai mica de explicatii tva. vezi cum ai facut la explicatia tva din ointroduceri.vcx > import_nota.
|
||||
|
||||
4. ROACONT - overificari.vcx > formularul istoric coduri fiscale are coloane care nu mai au relavanta sau nu mai sunt completate din tabel. in tabelul contafin_oracle.istoric_coduri_fiscale, campul regcom are spatii si nu se afiseaza in formularul istoric. verifica
|
||||
DONE 4. ROACONT - overificari.vcx > formularul istoric coduri fiscale are coloane care nu mai au relavanta sau nu mai sunt completate din tabel. in tabelul contafin_oracle.istoric_coduri_fiscale, campul regcom are spatii si nu se afiseaza in formularul istoric. verifica
|
||||
|
||||
5. ROACONT - VERIFICARE cod fiscal, label-ul de sub grid-ul cu rezultate si detalii F4 sa contina si status "TVA Incasare"
|
||||
DONE 5. ROACONT - VERIFICARE cod fiscal, label-ul de sub grid-ul cu rezultate si detalii F4 sa contina si status "TVA Incasare"
|
||||
|
||||
6. ROAFACTURARE - EDITARE FACTURA EMISA ANTERIOR, CARE NU A FOST TRIMISA INCA IN EFACTURA (anaf_efactura.id_fact). punctul critic este ca notele contabile si eventual rulajele generate se genereaza complicat la emiterea facturii prin pack_facturare, iar editarea este o simpla editare, si nu sincronizeaza si notele contabile si rulajele. si sunt diverse tipuri de facturi sau de avize (pe baza de lista de preturi, pe baza de comanda, pe baza de contract, pe baza de aviz) si fiecare genereaza note contabile sau rulaje si articole de vanzare (vanzari si vanzari_detalii)
|
||||
|
||||
7. ROAFACTURARE - TVA unitar si valoarea TVA pe o linie de articol este calculata si nu salvata in vanzari si vanzari_detalii. din aceasta cauza, daca o factura are valoare totala 99.99 lei, dar utilizatorul doreste 100.00 lei total cu tva (pentru ca politica de preturi are bifat preturi fara TVA si se porneste calculul incepand de la pretul fara TVA al articolului) tva-ul se calculeaza rotunjit si nu se poate edita, ca sa dea factura fix 100.00 lei. implicatiile calculului TVA in loc de salvare sunt foarte mari si adanci in program, la introducerea facturii, listarea facturii initiale, relistarea facturii
|
||||
Sau de fapt este posibil sa poata utilizatorul sa modifice "preturi_cu_tva" la nivel de fiecare articol, la introducerea facturii si ulterior la editare factura, tocmai pentru ca utilizatorul doreste sa ajusteze tva-ul total pentru ca are restrictie sa dea facturii o valoare totala rotunjita, si se poate ajusta exact din pretul cu tva individual. pret_cu_tva se salveaza in vanzari_detalii pe fiecare articol.
|
||||
|
||||
8. ROAFACTURARE - in pack_facturare am salvat in vanzari valori totale denormalizat (fara tva, tva, cu tva, numarul avizului/comanda/contract etc.) ca sa nu le calculez in view din vanzari_detalii pentru ca view-ul de facturi este foarte complex, cu functii si expresii si nu era optimizabil si acceseaza total tabelele vanzari si vanzari_detalii. folosesc un view pe modelul original, si un view cu valorile totale din vanzari. doar ca am observat un bug, la facturile din avize, nu se salveaza corect in vanzari avizul sau numarul/data/suma chitantei daca factura este achitata numerar. trebuie depanat. schema de verificare productie este VENDING@ROA_VENDING
|
||||
DONE 8. ROAFACTURARE - in pack_facturare am salvat in vanzari valori totale denormalizat (fara tva, tva, cu tva, numarul avizului/comanda/contract etc.) ca sa nu le calculez in view din vanzari_detalii pentru ca view-ul de facturi este foarte complex, cu functii si expresii si nu era optimizabil si acceseaza total tabelele vanzari si vanzari_detalii. folosesc un view pe modelul original, si un view cu valorile totale din vanzari. doar ca am observat un bug, la facturile din avize, nu se salveaza corect in vanzari avizul sau numarul/data/suma chitantei daca factura este achitata numerar. trebuie depanat. schema de verificare productie este VENDING@ROA_VENDING
|
||||
|
||||
9. ROAGEST - MODIFICARE REGISTRU JURNAL - SA SE POATA MODIFICA SI "NNIR" in notele contabile si sincronizat in rulajele asociate. nu exista coloana NNIR in formularul de editare.
|
||||
DONE 9. ROAGEST - MODIFICARE REGISTRU JURNAL - SA SE POATA MODIFICA SI "NNIR" in notele contabile si sincronizat in rulajele asociate. nu exista coloana NNIR in formularul de editare.
|
||||
|
||||
10. ROAFACTURARE - Integrare pagina contracte si rapoarte contracte in ROAFACTURARE, similar COMENZI in ROAFACTURARE - facturare pe baza de comenzi/contracte. trebuie comasate si drepturile pe obiectele din roacontracte cu obiectele noi din ROAFACTURARE.
|
||||
|
||||
@@ -34,7 +34,7 @@ Am vazut la SAGA (alt ERP popular) ca in nomenclatorul de articole au cateva col
|
||||
|
||||
Ideea este sa se poata face configurarea mult mai repede, eficient, dintr-un singur loc, ca sa se poata face factura mai rapid. Acum este nevoie de mult suport tehnic/instructaj si configurari pana se ajunge la facturare, si daca apare un articol diferit (ex: vanzare auto, in loc de marfa in mod normal), trebuie creata o politica noua de preturi, ca sa ii spun ce nota contabila de vanzare (4111 = 7xx) sa aiba aiba articolul respectiv.
|
||||
|
||||
13. ROAFACTURARE - FORMULARUL DE FACTURARE SA INCLUDA SI FORMULARUL DATE_FACTURA/DATE_AVIZ ETC. SI SA NU MAI INCARCE DE PE SERVER TOATE ARTICOLELE DIN TOATE POLITICELE DE PRETURI - INTRUCAT ESTE POSIBIL SA FIE SI MII DE ARTICOLE SI DUREAZA MULT SA LE ADUCA DE PE SERVER. AM INCEPUT DEJA MAI DEMULT UN FORMULAR UNIFICAT, DAR ERA MULT DE INTEGRAT DIN FORMULARUL VECHI.
|
||||
13. ROAFACTURARE - FORMULARUL DE FACTURARE SA INCLUDA SI FORMULARUL DATE_FACTURA/DATE_AVIZ ETC. SI SA NU MAI INCARCE DE PE SERVER TOATE ARTICOLELE DIN TOATE POLITICELE DE PRETURI - INTRUCAT ESTE POSIBIL SA FIE SI MII DE ARTICOLE SI DUREAZA MULT SA LE ADUCA DE PE SERVER. AM INCEPUT DEJA MAI DEMULT UN FORMULAR UNIFICAT frm_facturare_articole2, DAR ERA MULT DE INTEGRAT DIN FORMULARUL VECHI.
|
||||
FRONTEND SIMILAR PE CARE IL DORESC ESTE IN ROAACPRO > FACTURA, SAU IN IMPORTUL DE EFACTURA, IN CARE AM INTEGRAT DATELE FACTURI, DOAR CA FACTURAREA DIN ROAFACTURARE ESTE MAI COMPLEXA - ESTE FOLOSITA SI PENTRU POLITICI DE PRETURI SI PENTRU CONTRACT/COMANDA/AVIZ/RETUR ETC.
|
||||
INTERESUL MEU ESTE SA SIMPLIFIC INTERFATA, SA FIE MAI EFICIENTA, SA NU FIE 2 FORMULARE PENTRU FACTURA, SA FAC MAI RAPID.
|
||||
|
||||
@@ -42,3 +42,7 @@ INTERESUL MEU ESTE SA SIMPLIFIC INTERFATA, SA FIE MAI EFICIENTA, SA NU FIE 2 FOR
|
||||
|
||||
15. ROACONT - ce locuri din program mai folosesc frm_modific2007 in loc de frm_modific2024. trebuie migrat la formularul mai nou.
|
||||
|
||||
16. ROAFACTURARE - in date_factura/date_aviz etc, la finalizare se verifica cursul valutar necesar pentru politicile de preturi care se factureaza. la revenire din formularul de curs valutar, focusul revine inainte de numar document, cred ca pe TIP DOCUMENT, si la iesire din serie se regenereaza numar act, ceea ce este periculos daca utilizatorul l-a schimbat si se modifica automat.
|
||||
|
||||
17. ROAFACTURARE - daca o nota contabile de vanzare nu are configurat tip de venit/cheltuiala, si nici articolele din lista de preturi, si nici nu se completeaza tip venit/cheltuiala la facturare, la finalizarea facturii apare o eroare oracle ORA ca id_venchelt nu are voie sa fie null. eroarea nu este user friendly si nu se poate recupera usor, pentru ca trebuie sa se dea renunt la toata factura si sa se reia tot porcesul, cu completarea tip venit cheltuiala. si nici nu stiu de ce este obligatoriu tip venit/cheltuiala.
|
||||
|
||||
|
||||
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