Files
comun/utile/Teste/editare_factura/test_ui_efactura_readonly.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

157 lines
6.3 KiB
Plaintext

* test_ui_efactura_readonly.prg - verificare UI (formular vizibil, nu headless - coloanele
* gridului NU se materializeaza sub -A -T) a editabilitatii gridului de articole cand documentul
* a fost trimis in eFactura: cantitate/pret/pret_achizitie/checkbox pret_cu_tva NU primesc focus
* (When()=.F.) pe TOATE liniile, nu doar pe liniile de set. Verificarile de editabilitate se fac
* prin apel DIRECT al metodei .When() a controlului (echivalentul programatic al "celula
* primeste focus"), nu prin navigare cu input real (masina partajata - fara SendInput/click real).
* Document real: id_vanzare=1013 (cod=1140509/an=2025/luna=8), efectiv trimis in eFactura
* (VANZARI.ID_FACT=8008013, prezent in ANAF_EFACTURA). Controlul negativ (grid editabil cand NU e
* in eFactura) e deja acoperit headless, cu apel direct pe .When(), in test_efactura_readonly.prg -
* aici doar cazul SINTETIC de revenire (lArticoleReadOnly comutat inapoi pe acelasi document real,
* fara sa mai caute alt document), ca sa confirme ca gating-ul e chiar pe flag, nu o coincidenta.
* Nu scrie in Oracle. QUIT la final.
SET SAFETY OFF
SET TALK OFF
PUBLIC gcUILog, gcSyncDir
gcSyncDir = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\uisync_efactura\'
gcUILog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_ui_efactura_readonly_log.txt'
STRTOFILE('start' + CHR(13) + CHR(10), gcUILog)
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
PUBLIC gnPass, gnFail
gnPass = 0
gnFail = 0
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg ADDITIVE
DO HarnessInit
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), gcUILog, 1)
DO HarnessDone WITH 'error'
QUIT
ENDIF
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
*!* test_init_env_auto incarca intai copia omodificari din ROACONT - o eliberam si o reincarcam pe cea de sub test
RELEASE CLASSLIB omodificari
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
LOCAL llOk, lnIdSet, loForm, loGrid
llOk = IncarcaCursoareModificareNota(1140509, 2025, 8, .F.)
IF !llOk OR !Used('tact') OR Reccount('tact') = 0
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat pe cod=1140509' + CHR(13) + CHR(10), gcUILog, 1)
DO HarnessDone WITH 'error'
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
*!* articolele pregatite INAINTE de Createobject, ca Load() sa lege grid-ul o singura data pe
*!* tvd deja plin - fara asta, fallback-ul din Show() recreeaza tvd prin SQL dupa constructie,
*!* iar gridul (legat la construire pe cursorul initial) ramane cu ColumnCount=0
IncarcaArticoleFactura(1013, 'crsArticoleFactura')
Select tact
loForm = Createobject([frm_modific2024], lnIdSet)
loForm.WindowType = 0
loForm.Show()
loForm.pgfArticole.ActivePage = 3
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 '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
loGrid = loForm.pgfArticole.Page3.grdArticoleFactura
DO asserteaza WITH 'gridul are 15 coloane (neregresat)', loGrid.ColumnCount == 15, TRANSFORM(loGrid.ColumnCount)
DO asserteaza WITH 'documentul are cel putin o linie reala', Reccount('tvd') >= 1, TRANSFORM(Reccount('tvd'))
IF Reccount('tvd') >= 1
SELECT tvd
GO TOP
DO asserteaza WITH 'eFactura: cantitate NU primeste focus pe linie normala (nu doar pe linie de set)', loGrid.cCantitateArt.Text1.When() == .F., ''
DO asserteaza WITH 'eFactura: pret NU primeste focus', loGrid.cPretArt.Text1.When() == .F., ''
DO asserteaza WITH 'eFactura: pret_achizitie NU primeste focus', loGrid.cPretAchizitieArt.Text1.When() == .F., ''
DO asserteaza WITH 'eFactura: checkbox pret_cu_tva NU primeste focus', loGrid.cPretCuTvaArt._checkbox1.When() == .F., ''
*!* --- CAZ SINTETIC: acelasi document, flagul comutat manual pe .F. - gating-ul e pe flag, nu pe alta cauza ---
loForm.lArticoleReadOnly = .F.
DO asserteaza WITH 'CAZ SINTETIC flag=.F.: cantitate PRIMESTE focus (gating e pe lArticoleReadOnly)', loGrid.cCantitateArt.Text1.When() == .T., ''
DO asserteaza WITH 'CAZ SINTETIC flag=.F.: pret PRIMESTE focus', loGrid.cPretArt.Text1.When() == .T., ''
DO asserteaza WITH 'CAZ SINTETIC flag=.F.: checkbox pret_cu_tva PRIMESTE focus', loGrid.cPretCuTvaArt._checkbox1.When() == .T., ''
loForm.lArticoleReadOnly = .T.
ENDIF
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcUILog, 1)
DO HarnessStep WITH 0, 'pagina3 articole - document trimis in eFactura, grid needitabil, marcaj vizual afisat', 15
loForm.Release()
IF Used('crsArticoleFactura')
Use In crsArticoleFactura
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
IF Used('tvanz')
Use In tvanz
ENDIF
IF Used('tvd')
Use In tvd
ENDIF
DO HarnessDone WITH 'done'
QUIT
PROCEDURE asserteaza
LPARAMETERS tcNume, tlConditie, tcValoare
IF m.tlConditie
gnPass = gnPass + 1
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcUILog, 1)
ELSE
gnFail = gnFail + 1
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + m.tcValoare + ')' + CHR(13) + CHR(10), gcUILog, 1)
ENDIF
ENDPROC
PROCEDURE test_error_handler
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcUILog, 1)
ENDPROC