#6 editare factura emisa: articolele nu se mai editeaza pe facturi trimise in eFactura
Cand documentul e deja trimis in eFactura, pagina de articole ramane vizibila, dar needitabila: cantitate, pret, pret achizitie, flagul pret cu TVA, discountul de antet, plus adaugarea si stergerea de linii. Alegerea e "vizibil, dar blocat", nu "pagina ascunsa" - contabilul trebuie sa vada ce contine factura trimisa. - omodificari.vc2: flag lArticoleReadOnly calculat in frm_modific2024.Show, impins peste .When-urile de celula, peste Enabled si peste garda din Click-ul butoanelor, si peste txtDiscountArt.ReadOnly. Eticheta lblArticoleReadOnly explica motivul. - ofacturare_editare.prg: id_fact adus pe tvanz, in IncarcaVanzareNota si in CreeazaCursorTvanzGol. EsteInEFactura interogheaza anaf_efactura dupa id_fact, nu dupa id_vanzare - fara asta garda nu s-ar fi declansat niciodata pe date reale. - teste: test_efactura_readonly (headless, garda in ambele sensuri), test_ui_efactura_readonly (formular vizibil - coloanele gridului nu se materializeaza sub -A -T), test_s7_rotunjire, si test_s8_matrice_surse pentru matricea S8 pe tipuri de sursa. S8 rulat pe cate un document din fiecare tip de sursa (lista de preturi, contract, aviz, factura din aviz), fiecare editat din ambele puncte de intrare: notele vechi raman STERS=1, id_fact nu se schimba, totalurile si liniile raman coerente. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
This commit is contained in:
248
utile/Teste/editare_factura/test_efactura_readonly.prg
Normal file
248
utile/Teste/editare_factura/test_efactura_readonly.prg
Normal file
@@ -0,0 +1,248 @@
|
||||
* test_efactura_readonly.prg
|
||||
* Verifica frm_modific2024 (omodificari.vc2) cand documentul de vanzare a fost trimis in eFactura:
|
||||
* articolele raman VIZIBILE pe pgfArticole.PAGE3 (pagina se pregateste normal, PageCount=3, tvd plin),
|
||||
* dar editarea lor se opreste - grid needitabil (.When pe fiecare coloana), butoanele de adaugare/
|
||||
* stergere linie dezactivate, marcaj vizual afisat. Verifica de asemenea ca notele/rulajele nu sunt
|
||||
* afectate si ca documentele NEtrimise in eFactura raman complet editabile (regresie).
|
||||
* Conditia se determina prin EsteInEFactura(tvanz.id_fact) - id_fact e distinct de id_vanzare
|
||||
* (VANZARI.ID_FACT), acelasi camp folosit deja de ofacturare_comun.vc2:3764.
|
||||
* Documente reale, gasite prin interogare (nu inventate): un document deja trimis in eFactura
|
||||
* (VANZARI.ID_FACT populat, prezent in ANAF_EFACTURA) si un document obisnuit, descoperit prin
|
||||
* proprietate (descopera_caz_test.prg). Nu scrie in Oracle - doar SELECT-uri si cursoare in
|
||||
* memorie (tvd/tvanz/tact raman locale, Show() nu salveaza). QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_efactura_readonly_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
|
||||
|
||||
*!* --- control direct pe functia EsteInEFactura, fara formular ---
|
||||
DO asserteaza WITH 'EsteInEFactura(0) = .F. (niciun id_fact real e 0)', !EsteInEFactura(0), ''
|
||||
|
||||
LOCAL lnEfactCnt
|
||||
lnEfactCnt = 0
|
||||
=goExecutor.oSelecteaza2Value([select count(*) as c from anaf_efactura where id_fact = 8008013], @lnEfactCnt)
|
||||
IF Nvl(m.lnEfactCnt,0) > 0
|
||||
DO asserteaza WITH 'EsteInEFactura(8008013) = .T. (document real, cunoscut ca trimis)', EsteInEFactura(8008013), ''
|
||||
ELSE
|
||||
STRTOFILE('AVERTISMENT: documentul id_fact=8008013 nu mai e in anaf_efactura, sarit controlul direct' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
*!* ===================== CAZ A: document trimis in eFactura (id_vanzare=1013, id_fact=8008013) =====================
|
||||
LOCAL llOkA, loFormA
|
||||
llOkA = IncarcaCursoareModificareNota(1140509, 2025, 8, .F.)
|
||||
IF !llOkA OR !Used('tact') OR Reccount('tact') = 0
|
||||
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat pe cazul A (cod=1140509)' + 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
|
||||
LOCAL lnIdSetA
|
||||
lnIdSetA = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
|
||||
Select tact
|
||||
loFormA = Createobject([frm_modific2024], lnIdSetA)
|
||||
loFormA.WindowType = 0
|
||||
loFormA.Show()
|
||||
|
||||
DO asserteaza WITH 'caz A: formularul are articole (lAreArticoleVanzari)', loFormA.lAreArticoleVanzari, TRANSFORM(loFormA.lAreArticoleVanzari)
|
||||
DO asserteaza WITH 'caz A: nIdVanzare = 1013 (descoperit prin IncarcaVanzareDinNota)', loFormA.nIdVanzare == 1013, TRANSFORM(loFormA.nIdVanzare)
|
||||
DO asserteaza WITH 'caz A: tvanz.id_fact = 8008013 (coloana noua incarcata de IncarcaVanzareNota)', Used('tvanz') AND Reccount('tvanz') = 1 AND tvanz.id_fact == 8008013, IIF(Used('tvanz') AND Reccount('tvanz')=1, TRANSFORM(tvanz.id_fact), 'tvanz lipsa')
|
||||
DO asserteaza WITH 'caz A: lArticoleReadOnly = .T. (documentul e in eFactura)', loFormA.lArticoleReadOnly, TRANSFORM(loFormA.lArticoleReadOnly)
|
||||
|
||||
*!* --- articolele raman VIZIBILE: pagina se pregateste normal, nu se suprima ---
|
||||
DO asserteaza WITH 'caz A: PAGE3 (articole) NU e suprimata - pgfArticole.PageCount = 3', loFormA.pgfArticole.PageCount == 3, TRANSFORM(loFormA.pgfArticole.PageCount)
|
||||
DO asserteaza WITH 'caz A: gridul ramane legat pe tvd (RecordSource neschimbat)', loFormA.pgfArticole.PAGE3.grdArticoleFactura.RecordSource == 'tvd', loFormA.pgfArticole.PAGE3.grdArticoleFactura.RecordSource
|
||||
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: 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)
|
||||
|
||||
*!* coloanele gridului nu se materializeaza sub -A -T (ColumnCount=0) - editabilitatea celulei
|
||||
*!* (.When pe cCantitateArt/cPretArt/cPretAchizitieArt/cPretCuTvaArt) se verifica separat, cu
|
||||
*!* harnessul UI vizibil, in test_ui_efactura_readonly.prg
|
||||
|
||||
*!* --- 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))
|
||||
|
||||
*!* --- 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)
|
||||
|
||||
loFormA.Release()
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('tact')
|
||||
Use In tact
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('trul')
|
||||
Use In trul
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
IF Used('trul_obinv')
|
||||
Use In trul_obinv
|
||||
ENDIF
|
||||
|
||||
*!* ===================== CAZ B: document obisnuit, NEtrimis in eFactura (regresie) =====================
|
||||
LOCAL llCazB
|
||||
llCazB = DescoperaCazTest('FACTURA_ARTICOLE', 'crscaz_b')
|
||||
IF !llCazB
|
||||
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 B: cod=' + TRANSFORM(crscaz_b.cod) + ' an=' + TRANSFORM(crscaz_b.an) + ' luna=' + TRANSFORM(crscaz_b.luna) + ;
|
||||
' id_vanzare=' + TRANSFORM(crscaz_b.id_vanzare) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL llOkB, loFormB
|
||||
llOkB = IncarcaCursoareModificareNota(crscaz_b.cod, crscaz_b.an, crscaz_b.luna, .F.)
|
||||
IF !llOkB OR !Used('tact') OR Reccount('tact') = 0
|
||||
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat pe cazul B' + 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
|
||||
LOCAL lnIdSetB
|
||||
lnIdSetB = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
|
||||
Select tact
|
||||
loFormB = Createobject([frm_modific2024], lnIdSetB)
|
||||
loFormB.WindowType = 0
|
||||
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: 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)
|
||||
|
||||
*!* editabilitatea celulei (.When) se verifica separat, cu harnessul UI vizibil - vezi
|
||||
*!* test_ui_efactura_readonly.prg
|
||||
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))
|
||||
*!* restaureaza starea locala a cursorului (memorie, nesalvat in Oracle)
|
||||
REPLACE sters WITH m.lnStersInainteB IN tvd
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
loFormB.Release()
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('tact')
|
||||
Use In tact
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('trul')
|
||||
Use In trul
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
IF Used('trul_obinv')
|
||||
Use In trul_obinv
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
IF Used('crscaz_b')
|
||||
Use In crscaz_b
|
||||
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
|
||||
Reference in New Issue
Block a user