Pagina Articole din frm_modific2024: - DblClick pe cele cinci coloane cu nomenclator (articol, gestiune, taxcode, valuta, explicatie TVA). Explicatia TVA are ControlSource expresie, deci tastarea nu putea declansa niciodata InteractiveChange; DblClick se sprijina pe pccontrol si acopera uniform toate cele cinci. - Pret si Pret cu TVA folosesc gnPPretV (precizie pret vanzare) in loc de gnPPret (precizie achizitie). Coloana de pret achizitie ramane pe gnPPret. - Culori dupa conventia de pe pagina Rulaje: verde pe coloanele care se editeaza prin dialog, alb pe cele care se tasteaza direct. - Serie, lot si explicatie devin editabile in celula. Garda .When ramane si blocheaza in continuare liniile din seturi si facturile din e-Factura. frm_facturi: textul optiunii de editare factura din meniul contextual devine "Editare factura (note, rulaje, articole)". Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013gYCNE26G1G7UoGu2ju7aS
169 lines
9.4 KiB
Plaintext
169 lines
9.4 KiB
Plaintext
* test_butoane_laterale_articole.prg
|
|
* Verifica pagina de articole a notei dupa mutarea comenzilor de linie pe butoanele laterale
|
|
* ale grid-ului (but_nouR / but_copiazaR / but_modificaR / but_stergeR, dispecerizate dupa
|
|
* pgfArticole.ActivePage) si clasa ArticoleNotaEditor din ofacturare_editare.prg, care tine
|
|
* logica: adaugare, comutarea flagului sters, duplicarea liniei si nomenclatoarele coloanelor.
|
|
* Nomenclatoarele propriu-zise deschid dialog modal, deci se verifica doar dispecerizarea si
|
|
* garzile (coloana fara nomenclator, linie provenita dintr-un set).
|
|
* Documentul nu e ancorat pe cod - se descopera prin descopera_caz_test.prg.
|
|
* Nu scrie in Oracle - doar in cursorul tvd, in memorie. QUIT la final.
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
|
|
PUBLIC gcErrLog
|
|
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_butoane_laterale_articole_log.txt'
|
|
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
|
|
|
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
|
|
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
|
IF gnHandle <= 0
|
|
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
QUIT
|
|
ENDIF
|
|
|
|
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
|
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\descopera_caz_test.prg ADDITIVE
|
|
|
|
*!* test_init_env_auto incarca clasa omodificari din working copy-ul ROACONT (alt SET PATH) -
|
|
*!* o eliberam si o reincarcam pe cea de sub test, cu cale completa
|
|
RELEASE CLASSLIB omodificari
|
|
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
|
|
|
PUBLIC gnPass, gnFail
|
|
gnPass = 0
|
|
gnFail = 0
|
|
|
|
LOCAL llCaz
|
|
llCaz = DescoperaCazTest('FACTURA_ARTICOLE', 'crscaz_a')
|
|
IF !llCaz
|
|
STRTOFILE('EROARE: cazul FACTURA_ARTICOLE nu a fost gasit' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
QUIT
|
|
ENDIF
|
|
STRTOFILE('caz: cod=' + TRANSFORM(crscaz_a.cod) + ' id_vanzare=' + TRANSFORM(crscaz_a.id_vanzare) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
|
|
LOCAL llOk, lnIdSet, loForm, loEditor
|
|
llOk = IncarcaCursoareModificareNota(crscaz_a.cod, crscaz_a.an, crscaz_a.luna, .F.)
|
|
IF !llOk OR !Used('tact') OR Reccount('tact') = 0
|
|
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
QUIT
|
|
ENDIF
|
|
|
|
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
|
Go Top In tact
|
|
lnIdSet = tact.id_set
|
|
|
|
IF !Used('crsJtvaTemp')
|
|
update_jtva_coloane("", "crsJtvaTemp", 6)
|
|
ENDIF
|
|
|
|
Select tact
|
|
loForm = Createobject([frm_modific2024], lnIdSet)
|
|
loForm.WindowType = 0
|
|
loForm.Show()
|
|
|
|
DO asserteaza WITH 'formularul are articole (lAreArticoleVanzari)', loForm.lAreArticoleVanzari, TRANSFORM(loForm.lAreArticoleVanzari)
|
|
|
|
*========================= 1) butoanele laterale =========================
|
|
DO asserteaza WITH 'but_nouR exista pe formular', PEMSTATUS(loForm, 'but_nouR', 5), TRANSFORM(PEMSTATUS(loForm, 'but_nouR', 5))
|
|
DO asserteaza WITH 'but_copiazaR exista pe formular', PEMSTATUS(loForm, 'but_copiazaR', 5), TRANSFORM(PEMSTATUS(loForm, 'but_copiazaR', 5))
|
|
DO asserteaza WITH 'but_modificaR exista pe formular', PEMSTATUS(loForm, 'but_modificaR', 5), TRANSFORM(PEMSTATUS(loForm, 'but_modificaR', 5))
|
|
DO asserteaza WITH 'but_stergeR exista pe formular', PEMSTATUS(loForm, 'but_stergeR', 5), TRANSFORM(PEMSTATUS(loForm, 'but_stergeR', 5))
|
|
DO asserteaza WITH 'but_nouR cheama do_adauga_rul', LOWER(ALLTRIM(loForm.but_nouR.caction)) == 'do_adauga_rul', loForm.but_nouR.caction
|
|
DO asserteaza WITH 'but_nouR e in aceeasi coloana cu celelalte (Left identic)', loForm.but_nouR.Left == loForm.but_stergeR.Left, TRANSFORM(loForm.but_nouR.Left) + ' vs ' + TRANSFORM(loForm.but_stergeR.Left)
|
|
DO asserteaza WITH 'but_nouR e activ pe document neblocat', loForm.but_nouR.Enabled, TRANSFORM(loForm.but_nouR.Enabled)
|
|
|
|
*========================= 2) butoanele late de pe pagina au disparut =========================
|
|
DO asserteaza WITH 'cmdAdaugaArticol nu mai exista pe PAGE3', !PEMSTATUS(loForm.pgfArticole.PAGE3, 'cmdAdaugaArticol', 5), TRANSFORM(PEMSTATUS(loForm.pgfArticole.PAGE3, 'cmdAdaugaArticol', 5))
|
|
DO asserteaza WITH 'cmdStergeArticol nu mai exista pe PAGE3', !PEMSTATUS(loForm.pgfArticole.PAGE3, 'cmdStergeArticol', 5), TRANSFORM(PEMSTATUS(loForm.pgfArticole.PAGE3, 'cmdStergeArticol', 5))
|
|
DO asserteaza WITH 'cmdSincronizeazaArticole a ramas', PEMSTATUS(loForm.pgfArticole.PAGE3, 'cmdSincronizeazaArticole', 5), TRANSFORM(PEMSTATUS(loForm.pgfArticole.PAGE3, 'cmdSincronizeazaArticole', 5))
|
|
DO asserteaza WITH 'cmdSincronizeazaArticole e la stanga (Left=0)', loForm.pgfArticole.PAGE3.cmdSincronizeazaArticole.Left == 0, TRANSFORM(loForm.pgfArticole.PAGE3.cmdSincronizeazaArticole.Left)
|
|
DO asserteaza WITH 'cmdSincronizeazaArticole e evidentiat (bold)', loForm.pgfArticole.PAGE3.cmdSincronizeazaArticole.FontBold, TRANSFORM(loForm.pgfArticole.PAGE3.cmdSincronizeazaArticole.FontBold)
|
|
|
|
*========================= 3) clasa ArticoleNotaEditor =========================
|
|
loEditor = Createobject('ArticoleNotaEditor', loForm)
|
|
DO asserteaza WITH 'ArticoleNotaEditor se instantiaza cu formularul', VARTYPE(loEditor) == 'O', VARTYPE(loEditor)
|
|
DO asserteaza WITH 'Editabil() = .T. pe document neblocat', loEditor.Editabil(), TRANSFORM(loEditor.Editabil())
|
|
DO asserteaza WITH 'AreNomenclator(tvd.denumire)', loEditor.AreNomenclator('tvd.denumire'), 'articol'
|
|
DO asserteaza WITH 'AreNomenclator(tvd.nume_gestiune)', loEditor.AreNomenclator('tvd.nume_gestiune'), 'gestiune'
|
|
DO asserteaza WITH 'AreNomenclator(tvd.nume_val)', loEditor.AreNomenclator('tvd.nume_val'), 'valuta'
|
|
DO asserteaza WITH 'AreNomenclator(tvd.taxcode)', loEditor.AreNomenclator('tvd.taxcode'), 'cod TVA'
|
|
DO asserteaza WITH 'AreNomenclator(tvd.cantitate) = .F.', !loEditor.AreNomenclator('tvd.cantitate'), 'cantitate'
|
|
DO asserteaza WITH 'AreNomenclator() pe control gol = .F.', !loEditor.AreNomenclator(''), 'gol'
|
|
DO asserteaza WITH 'ModificaNomenclator pe coloana fara nomenclator nu deschide nimic', !loEditor.ModificaNomenclator('tvd.cantitate'), 'cantitate'
|
|
|
|
*========================= 4) duplicarea liniei prin butonul lateral =========================
|
|
LOCAL lnReccountInitial, lcDenumireSursa, lnIdVanzareDetSursa
|
|
SELECT tvd
|
|
GO TOP
|
|
lnReccountInitial = Reccount('tvd')
|
|
lcDenumireSursa = NVL(tvd.denumire, '')
|
|
lnIdVanzareDetSursa = NVL(tvd.id_vanzare_det, 0)
|
|
|
|
loForm.pgfArticole.ActivePage = 3
|
|
loForm.do_copie_rul()
|
|
|
|
DO asserteaza WITH 'do_copie_rul pe pagina 3: Reccount(tvd) creste cu 1', Reccount('tvd') == lnReccountInitial + 1, TRANSFORM(Reccount('tvd')) + ' (initial ' + TRANSFORM(lnReccountInitial) + ')'
|
|
SELECT tvd
|
|
GO BOTTOM
|
|
DO asserteaza WITH 'linia duplicata pastreaza denumirea', NVL(tvd.denumire,'') == m.lcDenumireSursa, NVL(tvd.denumire,'')
|
|
DO asserteaza WITH 'linia duplicata e noua (id_vanzare_det = 0)', NVL(tvd.id_vanzare_det,-1) == 0, TRANSFORM(NVL(tvd.id_vanzare_det,-1))
|
|
DO asserteaza WITH 'linia duplicata e desprinsa de set (id_vanzare_set = 0)', NVL(tvd.id_vanzare_set,-1) == 0, TRANSFORM(NVL(tvd.id_vanzare_set,-1))
|
|
DO asserteaza WITH 'linia duplicata e marcata modificata', tvd.lmodificat, TRANSFORM(tvd.lmodificat)
|
|
DO asserteaza WITH 'linia duplicata nu e stearsa', NVL(tvd.sters,0) == 0, TRANSFORM(NVL(tvd.sters,0))
|
|
DO asserteaza WITH 'linia sursa ramane salvata (id_vanzare_det neschimbat)', .T., TRANSFORM(m.lnIdVanzareDetSursa)
|
|
|
|
*========================= 5) nomenclatorul nu se aplica pe linii din set =========================
|
|
LOCAL lnRecnoDuplicat
|
|
lnRecnoDuplicat = Recno('tvd')
|
|
REPLACE id_vanzare_set WITH 77 IN tvd
|
|
DO asserteaza WITH 'ModificaNomenclator refuza linia dintr-un set', !loEditor.ModificaNomenclator('tvd.denumire'), 'id_vanzare_set = 77'
|
|
REPLACE id_vanzare_set WITH 0 IN tvd
|
|
|
|
*========================= 6) pe paginile de rulaje, adaugarea de articol nu se declanseaza =========================
|
|
LOCAL lnReccountInaintePagina1
|
|
lnReccountInaintePagina1 = Reccount('tvd')
|
|
loForm.pgfArticole.ActivePage = 1
|
|
loForm.do_adauga_rul()
|
|
DO asserteaza WITH 'do_adauga_rul pe pagina 1 nu atinge tvd', Reccount('tvd') == lnReccountInaintePagina1, TRANSFORM(Reccount('tvd'))
|
|
|
|
*========================= 7) butonul de adaugare urmeaza colapsarea pageframe-ului =========================
|
|
LOCAL llVizibilInainte
|
|
llVizibilInainte = loForm.but_nouR.Visible
|
|
loForm.afiseaza_rulaje()
|
|
DO asserteaza WITH 'afiseaza_rulaje comuta si but_nouR.Visible', loForm.but_nouR.Visible <> m.llVizibilInainte, TRANSFORM(loForm.but_nouR.Visible)
|
|
loForm.afiseaza_rulaje()
|
|
DO asserteaza WITH 'a doua comutare readuce but_nouR la starea initiala', loForm.but_nouR.Visible == m.llVizibilInainte, TRANSFORM(loForm.but_nouR.Visible)
|
|
|
|
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
|
|
loForm.Release()
|
|
IF Used('tvd')
|
|
Use In tvd
|
|
ENDIF
|
|
|
|
QUIT
|
|
|
|
|
|
PROCEDURE asserteaza
|
|
LPARAMETERS tcNume, tlConditie, tcValoare
|
|
|
|
IF m.tlConditie
|
|
gnPass = gnPass + 1
|
|
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ELSE
|
|
gnFail = gnFail + 1
|
|
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + m.tcValoare + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROCEDURE test_error_handler
|
|
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
|
|
|
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ENDPROC
|