#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
This commit is contained in:
168
utile/Teste/editare_factura/test_butoane_laterale_articole.prg
Normal file
168
utile/Teste/editare_factura/test_butoane_laterale_articole.prg
Normal file
@@ -0,0 +1,168 @@
|
||||
* 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
|
||||
@@ -91,8 +91,7 @@ DO asserteaza WITH 'caz A: gridul ramane legat pe tvd (RecordSource neschimbat)'
|
||||
DO asserteaza WITH 'caz A: tvd are cel putin o linie vizibila (articolele nu au fost golite)', Used('tvd') AND Reccount('tvd') > 0, IIF(Used('tvd'), TRANSFORM(Reccount('tvd')), 'tvd lipsa')
|
||||
|
||||
*!* --- doar EDITAREA se opreste: butoanele si celulele needitabile ---
|
||||
DO asserteaza WITH 'caz A: cmdAdaugaArticol.Enabled = .F.', !loFormA.pgfArticole.PAGE3.cmdAdaugaArticol.Enabled, TRANSFORM(loFormA.pgfArticole.PAGE3.cmdAdaugaArticol.Enabled)
|
||||
DO asserteaza WITH 'caz A: cmdStergeArticol.Enabled = .F.', !loFormA.pgfArticole.PAGE3.cmdStergeArticol.Enabled, TRANSFORM(loFormA.pgfArticole.PAGE3.cmdStergeArticol.Enabled)
|
||||
DO asserteaza WITH 'caz A: but_nouR.Enabled = .F.', !loFormA.but_nouR.Enabled, TRANSFORM(loFormA.but_nouR.Enabled)
|
||||
DO asserteaza WITH 'caz A: marcajul vizual (lblArticoleReadOnly) e vizibil', loFormA.pgfArticole.PAGE3.lblArticoleReadOnly.Visible, TRANSFORM(loFormA.pgfArticole.PAGE3.lblArticoleReadOnly.Visible)
|
||||
DO asserteaza WITH 'caz A: txtDiscountArt.ReadOnly = .T.', loFormA.pgfArticole.PAGE3.txtDiscountArt.ReadOnly, TRANSFORM(loFormA.pgfArticole.PAGE3.txtDiscountArt.ReadOnly)
|
||||
|
||||
@@ -103,8 +102,9 @@ DO asserteaza WITH 'caz A: txtDiscountArt.ReadOnly = .T.', loFormA.pgfArticole.P
|
||||
*!* --- stergerea de linie (Click direct, fara dialog modal) e blocata de garda ---
|
||||
LOCAL lnStersInainte
|
||||
lnStersInainte = Nvl(tvd.sters, 0)
|
||||
loFormA.pgfArticole.PAGE3.cmdStergeArticol.Click()
|
||||
DO asserteaza WITH 'caz A: cmdStergeArticol.Click() nu modifica linia (garda eFactura)', Nvl(tvd.sters,0) == m.lnStersInainte, TRANSFORM(Nvl(tvd.sters,0))
|
||||
loFormA.pgfArticole.ActivePage = 3
|
||||
loFormA.but_stergeR.Click()
|
||||
DO asserteaza WITH 'caz A: but_stergeR.Click() nu modifica linia (garda eFactura)', Nvl(tvd.sters,0) == m.lnStersInainte, TRANSFORM(Nvl(tvd.sters,0))
|
||||
|
||||
*!* --- notele/rulajele raman neafectate de garda (grid1, pe notele contabile) ---
|
||||
DO asserteaza WITH 'caz A: Grid1 (nota contabila) ramane editabil - garda nu atinge nota', !loFormA.Grid1.ReadOnly, TRANSFORM(loFormA.Grid1.ReadOnly)
|
||||
@@ -178,8 +178,7 @@ loFormB.Show()
|
||||
DO asserteaza WITH 'caz B: formularul are articole (lAreArticoleVanzari)', loFormB.lAreArticoleVanzari, TRANSFORM(loFormB.lAreArticoleVanzari)
|
||||
DO asserteaza WITH 'caz B: lArticoleReadOnly = .F. (documentul NU e in eFactura)', !loFormB.lArticoleReadOnly, TRANSFORM(loFormB.lArticoleReadOnly)
|
||||
DO asserteaza WITH 'caz B: PAGE3 pregatita normal', loFormB.pgfArticole.PageCount == 3, TRANSFORM(loFormB.pgfArticole.PageCount)
|
||||
DO asserteaza WITH 'caz B: cmdAdaugaArticol.Enabled = .T. (neregresat)', loFormB.pgfArticole.PAGE3.cmdAdaugaArticol.Enabled, TRANSFORM(loFormB.pgfArticole.PAGE3.cmdAdaugaArticol.Enabled)
|
||||
DO asserteaza WITH 'caz B: cmdStergeArticol.Enabled = .T. (neregresat)', loFormB.pgfArticole.PAGE3.cmdStergeArticol.Enabled, TRANSFORM(loFormB.pgfArticole.PAGE3.cmdStergeArticol.Enabled)
|
||||
DO asserteaza WITH 'caz B: but_nouR.Enabled = .T. (neregresat)', loFormB.but_nouR.Enabled, TRANSFORM(loFormB.but_nouR.Enabled)
|
||||
DO asserteaza WITH 'caz B: marcajul vizual NU e afisat', !loFormB.pgfArticole.PAGE3.lblArticoleReadOnly.Visible, TRANSFORM(loFormB.pgfArticole.PAGE3.lblArticoleReadOnly.Visible)
|
||||
DO asserteaza WITH 'caz B: txtDiscountArt.ReadOnly = .F. (neregresat)', !loFormB.pgfArticole.PAGE3.txtDiscountArt.ReadOnly, TRANSFORM(loFormB.pgfArticole.PAGE3.txtDiscountArt.ReadOnly)
|
||||
|
||||
@@ -188,8 +187,9 @@ DO asserteaza WITH 'caz B: txtDiscountArt.ReadOnly = .F. (neregresat)', !loFormB
|
||||
IF Used('tvd') AND Reccount('tvd') > 0
|
||||
LOCAL lnStersInainteB
|
||||
lnStersInainteB = Nvl(tvd.sters, 0)
|
||||
loFormB.pgfArticole.PAGE3.cmdStergeArticol.Click()
|
||||
DO asserteaza WITH 'caz B: cmdStergeArticol.Click() comuta flagul sters (neregresat)', Nvl(tvd.sters,0) <> m.lnStersInainteB, TRANSFORM(Nvl(tvd.sters,0))
|
||||
loFormB.pgfArticole.ActivePage = 3
|
||||
loFormB.but_stergeR.Click()
|
||||
DO asserteaza WITH 'caz B: but_stergeR.Click() comuta flagul sters (neregresat)', Nvl(tvd.sters,0) <> m.lnStersInainteB, TRANSFORM(Nvl(tvd.sters,0))
|
||||
*!* restaureaza starea locala a cursorului (memorie, nesalvat in Oracle)
|
||||
REPLACE sters WITH m.lnStersInainteB IN tvd
|
||||
ENDIF
|
||||
|
||||
@@ -12,19 +12,22 @@
|
||||
* Ce verifica dupa fiecare editare (VerificaDupaEditare): nota veche (vact_tot, cod dinainte) are
|
||||
* STERS=1, nota noua (cod nou) exista si e activa cu acelasi id_fact, VANZARI.id_fact ramane
|
||||
* neschimbat, VANZARI/VANZARI_DETALII raman sincronizate (numar de linii active si totalurile
|
||||
* denormalizate identice cu inainte de editare, fara_tva+tva=cu_tva), rulajele sunt refacute
|
||||
* (Reccount(trul)>0 pe nota noua) si totalurile de control ACT/RUL (ActualizeazaVerdictActRul,
|
||||
* denormalizate identice cu inainte de editare, fara_tva+tva=cu_tva), rulajele nu se pierd la
|
||||
* editare (Reccount(trul) pe nota noua ramane cel putin cat era inainte - un document care nu misca
|
||||
* stocul, cum e factura emisa din aviz, n-are rulaje deloc si nici nu capata) si totalurile de
|
||||
* control ACT/RUL (ActualizeazaVerdictActRul,
|
||||
* omodificari.vc2) raman concordante fata de inainte de editare - CalculeazaTotaluriS4b instantiaza
|
||||
* frm_modific2024 exact ca test_verdict_act_rul.prg, fara UI. Suplimentar: gcMockUltimMesaj
|
||||
* (mock_amessagebox.prg) trebuie sa ramana gol dupa lantul de scriere - dovada ca verifica_stoc
|
||||
* (oscrie_in_fisiere.prg:92-106, apelata doar cand tnScrie_Sterge=2 And !tlModificare) nu s-a
|
||||
* declansat, pentru ca ambele lanturi trec tlModificare=.T. la OSCRIE_IN_FISIERE.
|
||||
*
|
||||
* Matricea completa (4 documente, cate unul din fiecare tip de sursa) e definita in gaMatriceS8, dar
|
||||
* NUMAI id_vanzare=1048 e activ in gaCazuriActive - celelalte trei se consuma ireversibil (cod se
|
||||
* realoca, note vechi raman sterse) si se ruleaza separat, dupa ce felia asta trece. Cazurile
|
||||
* neactive sunt doar loghate, fara niciun acces la Oracle. Codul e parametrizat pe id_vanzare -
|
||||
* activarea unui caz nou inseamna doar adaugarea lui in gaCazuriActive.
|
||||
* Matricea completa (4 documente, cate unul din fiecare tip de sursa) e definita in gaMatriceS8, iar
|
||||
* gaCazuriActive alege ce se ruleaza: fiecare document se consuma ireversibil (cod se realoca, note
|
||||
* vechi raman sterse), deci se activeaza cate unul pe rand, iar implicit lista e goala ca o rulare
|
||||
* accidentala sa nu consume nimic. Cazurile neactive sunt doar loghate, fara niciun acces la Oracle.
|
||||
* Codul e parametrizat pe id_vanzare - activarea unui caz nou inseamna doar adaugarea lui in
|
||||
* gaCazuriActive. Logul se rescrie la fiecare rulare, deci contine doar ultima felie activata.
|
||||
*
|
||||
* Documentele de test se editeaza exclusiv prin fluxul aplicatiei (OSCRIE_IN_FISIERE,
|
||||
* finalizeaza_modificare_nota, ScrieArticoleFacturaEditate) - interogarile SQL sunt doar de citire.
|
||||
@@ -247,7 +250,7 @@ ENDPROC
|
||||
*-- stare VANZARI dupa, nota veche/noua din vact_tot, totalurile de control S4b dupa editare
|
||||
PROCEDURE VerificaDupaEditare
|
||||
LPARAMETERS tnIdVanzare, tcEtapa, tnCodInainte, tnIdFactInainte, tnTotFtvaInainte, tnTotTvaInainte, ;
|
||||
tnTotCtvaInainte, tnNrActiveInainte, tnActBaseline, tnRulBaseline, tnAn, tnLuna, tcLog
|
||||
tnTotCtvaInainte, tnNrActiveInainte, tnActBaseline, tnRulBaseline, tnNrRulBaseline, tnAn, tnLuna, tcLog
|
||||
|
||||
LOCAL lcSql, lnQ, lnCodDupa, lnIdFactDupa, lnStersDupa, lnTotFtvaDupa, lnTotTvaDupa, lnTotCtvaDupa, lnNrActiveDupa
|
||||
LOCAL lnStersNotaVeche, lnStersNotaNoua, lnIdFactNotaNoua
|
||||
@@ -305,7 +308,10 @@ PROCEDURE VerificaDupaEditare
|
||||
*-- rulajele refacute + totalurile de control S4b concordante fata de dinainte de editare
|
||||
DO CalculeazaTotaluriS4b WITH lnCodDupa, tnAn, tnLuna, tcEtapa + ' [dupa]', tcLog
|
||||
DO asserteaza WITH tcEtapa + ': totalurile de control S4b calculabile pe nota noua', glS4bOk, TRANSFORM(glS4bOk)
|
||||
DO asserteaza WITH tcEtapa + ': rulajele au fost refacute pe nota noua (Reccount(trul)>0)', gnS4bRulReccount > 0, TRANSFORM(gnS4bRulReccount)
|
||||
*-- RUL retine doar miscari pe cont de stoc: un document care nu atinge stocul (factura emisa din
|
||||
*-- aviz - marfa a iesit deja la aviz) n-are rulaje nici inainte, nici dupa. Se cere doar sa nu se piarda.
|
||||
DO asserteaza WITH tcEtapa + ': rulajele nu s-au pierdut la editare (Reccount(trul) pe nota noua)', ;
|
||||
gnS4bRulReccount >= tnNrRulBaseline, TRANSFORM(tnNrRulBaseline) + ' -> ' + TRANSFORM(gnS4bRulReccount)
|
||||
DO asserteaza WITH tcEtapa + ': Total ACT ramane concordant fata de inainte de editare (fara modificari de linii)', ;
|
||||
ABS(gnS4bAct - tnActBaseline) < 0.01, TRANSFORM(tnActBaseline) + ' -> ' + TRANSFORM(gnS4bAct)
|
||||
DO asserteaza WITH tcEtapa + ': Total RUL ramane concordant fata de inainte de editare (fara modificari de linii)', ;
|
||||
@@ -323,7 +329,7 @@ PROCEDURE EditeazaDinRoafacturare
|
||||
PRIVATE pnAn, pnLuna, lnCod, lnIdFact
|
||||
LOCAL lcEtapa, lcSql, lnQ, lnSters, llEProforma, lnIdSet, lnIdFactD, lnSucces, llBlocatReferinte
|
||||
LOCAL lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, lnTotCtvaInainte, lnNrActiveInainte
|
||||
LOCAL lnActBaseline, lnRulBaseline, llS4bBaselineOk, llGasitRand
|
||||
LOCAL lnActBaseline, lnRulBaseline, lnNrRulBaseline, llS4bBaselineOk, llGasitRand
|
||||
|
||||
lcEtapa = tcSursa + ' / intrare ROAFACTURARE (do_editare_factura)'
|
||||
STRTOFILE(CHR(13) + CHR(10) + '========== ' + lcEtapa + ', id_vanzare=' + TRANSFORM(tnIdVanzare) + ' ==========' + CHR(13) + CHR(10), tcLog, 1)
|
||||
@@ -379,6 +385,7 @@ PROCEDURE EditeazaDinRoafacturare
|
||||
DO CalculeazaTotaluriS4b WITH lnCod, pnAn, pnLuna, lcEtapa + ' [inainte]', tcLog
|
||||
lnActBaseline = gnS4bAct
|
||||
lnRulBaseline = gnS4bRul
|
||||
lnNrRulBaseline = MAX(gnS4bRulReccount, 0)
|
||||
llS4bBaselineOk = glS4bOk
|
||||
DO asserteaza WITH lcEtapa + ': totalurile de control S4b (ACT/RUL) calculabile inainte de editare', llS4bBaselineOk, TRANSFORM(llS4bBaselineOk)
|
||||
|
||||
@@ -510,7 +517,7 @@ PROCEDURE EditeazaDinRoafacturare
|
||||
|
||||
*-- 7) verificarile de dupa commit, comune ambelor puncte de intrare
|
||||
DO VerificaDupaEditare WITH tnIdVanzare, lcEtapa, lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, ;
|
||||
lnTotCtvaInainte, lnNrActiveInainte, lnActBaseline, lnRulBaseline, pnAn, pnLuna, tcLog
|
||||
lnTotCtvaInainte, lnNrActiveInainte, lnActBaseline, lnRulBaseline, lnNrRulBaseline, pnAn, pnLuna, tcLog
|
||||
ENDPROC
|
||||
|
||||
|
||||
@@ -523,7 +530,7 @@ PROCEDURE EditeazaDinRegistruJurnal
|
||||
PRIVATE pnAn, pnLuna, lnCod, lnIdFact, lnIdfactd, lnIdSet, pdDataOra
|
||||
LOCAL lcEtapa, lcSql, lnQ, lnSters, llSters, llGestInvantar, llRul, lnSucces, llBlocExecutat, llGasitTvanz
|
||||
LOCAL lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, lnTotCtvaInainte, lnNrActiveInainte
|
||||
LOCAL lnActBaseline, lnRulBaseline, llS4bBaselineOk
|
||||
LOCAL lnActBaseline, lnRulBaseline, lnNrRulBaseline, llS4bBaselineOk
|
||||
llBlocExecutat = .F.
|
||||
|
||||
lcEtapa = tcSursa + ' / intrare registru jurnal ROACONT (afisjurcom.do_modifica)'
|
||||
@@ -597,6 +604,7 @@ PROCEDURE EditeazaDinRegistruJurnal
|
||||
DO CalculeazaTotaluriS4b WITH lnCod, pnAn, pnLuna, lcEtapa + ' [inainte]', tcLog
|
||||
lnActBaseline = gnS4bAct
|
||||
lnRulBaseline = gnS4bRul
|
||||
lnNrRulBaseline = MAX(gnS4bRulReccount, 0)
|
||||
llS4bBaselineOk = glS4bOk
|
||||
DO asserteaza WITH lcEtapa + ': totalurile de control S4b (ACT/RUL) calculabile inainte de editare', llS4bBaselineOk, TRANSFORM(llS4bBaselineOk)
|
||||
|
||||
@@ -742,7 +750,7 @@ PROCEDURE EditeazaDinRegistruJurnal
|
||||
|
||||
*-- 8) verificarile de dupa commit, comune ambelor puncte de intrare
|
||||
DO VerificaDupaEditare WITH tnIdVanzare, lcEtapa, lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, ;
|
||||
lnTotCtvaInainte, lnNrActiveInainte, lnActBaseline, lnRulBaseline, pnAn, pnLuna, tcLog
|
||||
lnTotCtvaInainte, lnNrActiveInainte, lnActBaseline, lnRulBaseline, lnNrRulBaseline, pnAn, pnLuna, tcLog
|
||||
ENDPROC
|
||||
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ loForm.pgfArticole.ActivePage = 3
|
||||
DOEVENTS FORCE
|
||||
|
||||
loGrid = loForm.pgfArticole.Page3.grdArticoleFactura
|
||||
loBut = loForm.pgfArticole.Page3.cmdStergeArticol
|
||||
loBut = loForm.but_stergeR
|
||||
|
||||
*!* marcheaza linia 2 ca stearsa
|
||||
SELECT tvd
|
||||
|
||||
@@ -72,8 +72,7 @@ DOEVENTS FORCE
|
||||
|
||||
DO asserteaza WITH 'documentul e recunoscut ca trimis in eFactura (lArticoleReadOnly)', loForm.lArticoleReadOnly, TRANSFORM(loForm.lArticoleReadOnly)
|
||||
DO asserteaza WITH 'PAGE3 (articole) NU e suprimata - pgfArticole.PageCount = 3', loForm.pgfArticole.PageCount == 3, TRANSFORM(loForm.pgfArticole.PageCount)
|
||||
DO asserteaza WITH 'cmdAdaugaArticol.Enabled = .F.', !loForm.pgfArticole.PAGE3.cmdAdaugaArticol.Enabled, TRANSFORM(loForm.pgfArticole.PAGE3.cmdAdaugaArticol.Enabled)
|
||||
DO asserteaza WITH 'cmdStergeArticol.Enabled = .F.', !loForm.pgfArticole.PAGE3.cmdStergeArticol.Enabled, TRANSFORM(loForm.pgfArticole.PAGE3.cmdStergeArticol.Enabled)
|
||||
DO asserteaza WITH 'but_nouR.Enabled = .F.', !loForm.but_nouR.Enabled, TRANSFORM(loForm.but_nouR.Enabled)
|
||||
DO asserteaza WITH 'marcajul vizual (lblArticoleReadOnly) e vizibil si are text', ;
|
||||
loForm.pgfArticole.PAGE3.lblArticoleReadOnly.Visible AND !Empty(Alltrim(loForm.pgfArticole.PAGE3.lblArticoleReadOnly.Caption)), ;
|
||||
loForm.pgfArticole.PAGE3.lblArticoleReadOnly.Caption
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
* test_ui_sterge_linie.prg - verifica pe formular vizibil (nu headless) butonul nou
|
||||
* pgfArticole.PAGE3.cmdStergeArticol: comuta tvd.sters intre 0 si 1 pe linia curenta,
|
||||
* but_stergeR pe pagina de articole: comuta tvd.sters intre 0 si 1 pe linia curenta,
|
||||
* marcheaza lmodificat si grizeaza vizual randul (DynamicForeColor pe toate coloanele
|
||||
* grid-ului) fara sa-l scoata din cursor - stergerea ramane logica, nu fizica.
|
||||
* Document: cod=1139934/an=2021/luna=12 (id_vanzare=882, 2 linii, are si rulaje, altfel
|
||||
@@ -63,9 +63,9 @@ loForm.pgfArticole.ActivePage = 3
|
||||
DOEVENTS FORCE
|
||||
|
||||
loGrid = loForm.pgfArticole.Page3.grdArticoleFactura
|
||||
loBut = loForm.pgfArticole.Page3.cmdStergeArticol
|
||||
loBut = loForm.but_stergeR
|
||||
|
||||
DO asserteaza WITH 'butonul cmdStergeArticol exista', TYPE('loBut.Caption') = 'C', TYPE('loBut.Caption')
|
||||
DO asserteaza WITH 'butonul but_stergeR exista', TYPE('loBut.Caption') = 'C', TYPE('loBut.Caption')
|
||||
DO asserteaza WITH 'butonul e vizibil', loBut.Visible, TRANSFORM(loBut.Visible)
|
||||
|
||||
SELECT tvd
|
||||
|
||||
Reference in New Issue
Block a user