Files
comun/utile/Teste/editare_factura/test_butoane_laterale_articole.prg
Marius Mutu b9a14bcb9c #6 editare factura emisa: runda 6 - nomenclatoare, zecimale, aspect grid, meniu
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
2026-08-20 16:28:02 +03:00

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