Files
comun/utile/Teste/efactura_import/test_splitter_ef.prg
2026-09-29 16:36:56 +03:00

328 lines
17 KiB
Plaintext

* test_splitter_ef.prg
* Splitter sub grila de facturi la importul eFactura (frm_import_efactura, COMUN\clase\anaf_efactura.vc2):
* Sfsplitterv1 = sfsplitterv_panou (sfsplitter.vcx), T7 tragere simulata cu MouseMove.
* Sfsplitterv1 intre grdFacturi si _shape3, pozitia salvata in settings.ini [efactura] import_splitter_top.
* T1 fara cheie in ini: layout de design neschimbat. T2 MoveSplitterToPosition muta panoul si grila de
* linii, fara sa schimbe marginea de jos a grilei de linii. T3 clamp la limitele 100px/60px. T4 persistenta
* (Destroy scrie doar daca s-a schimbat, Show restaureaza, forma neschimbata nu rescrie fisierul). T5
* compatibilitate cu pozitioneazalistasubimport() dupa mutare. T6 calea REALA a meniului
* (CREATEOBJECT + Show(1) modal, ca in import_efactura.prg) - la deschidere, restaurarea rula in Show()
* inainte ca maximizarea sa aduca grdDetaliiFacturi la inaltimea reala, deci clamp-ul MoveSplitterToPosition
* o taia prematur; muta acum in Resize (o singura data, dupa maximizare).
* gcGeneralIniFile redirectat pe un .ini temporar - nu atinge settings.ini real.
*
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef.prg"
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef_log.txt
SET SAFETY OFF
SET TALK OFF
SET DELETED ON
SET EXACT ON
SET CENTURY ON
SET DATE DMY
SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcUILog, gnPass, gnFail, gcTempIni
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef_log.txt"
gcTempIni = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef_temp.ini"
gnPass = 0
gnFail = 0
IF FILE(gcTempIni)
DELETE FILE (gcTempIni)
ENDIF
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
TRY
SET PROCEDURE TO 'D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg' ADDITIVE
DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
IF gnHandle <= 0
DO PrLogLocal WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
QUIT
ENDIF
SET PROCEDURE TO import_efactura.prg ADDITIVE
SET PROCEDURE TO recunoastere_articol_ef.prg ADDITIVE
SET PROCEDURE TO coada_contabilizare_ef.prg ADDITIVE
gcGeneralIniFile = m.gcTempIni
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle) + ' gcGeneralIniFile=' + m.gcGeneralIniFile
*-- crsFacturi/crsDetaliiFacturi si cursoarele ajutatoare cerute de Init, copie din test_pozitie_lista_ef.prg
TEXT TO lcSchemaFacturi NOSHOW
ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), partener C(200), id_incarcare C(36), id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal C(30) null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4) null, descriere M null, detalii_plata M null, diferenta N(16,4) null, procesat N(1), SerieActRoa V(10) Null, NrActRoa N(14) Null, IdPartRoa N(10) Null, PartenerRoa V(100) null, codFiscalROA V(20), idValutaROA N(5) null,numeValutaROA V(5) null, cursROA N(16,6) null,Cont c(4) Null,ACont c(4) Null,TVAIncasare N(1),Fdoc V(20) null,Id_Fdoc N(5) Null,Nrord V(100) null,Id_Lucrare I Null,Contract V(100) Null,Id_Ctr I Null,Sectie V(100) null,Id_Sectie I Null,dst_chlt V(100) null, Id_venchelt I NUll, nresp V(100) null, Id_responsabil I NUll , completat N(1), completatdet N(1), creditnote N(1), explicatiaROA V(100) null, explicatia4ROA V(100) null, explicatia5ROA V(100) null, eligibil_lot N(1), motiv_lot V(120), eroare_lot N(1), de_completat V(80), gest c(1), part_inactiv N(1)
ENDTEXT
IF USED('crsFacturi')
USE IN crsFacturi
ENDIF
CREATE CURSOR crsFacturi (&lcSchemaFacturi)
INSERT INTO crsFacturi (ales, id, id_fact, data_act, numar_act, xfurnizor, partener, cod_fiscal, ;
total_cu_tva, nume_valuta, procesat, completat, completatdet, creditnote, detalii, ;
eligibil_lot, motiv_lot, eroare_lot, de_completat, gest) ;
VALUES (0, 1, 0, DATE(), 'TEST-SPL-1', 'FIXTURA SPLITTER 1', 'FIXTURA SPLITTER 1', 'RO99970001', ;
100, 'RON', 0, 0, 0, 0, 'x', 1, '', 0, '1 cont', '')
TEXT TO lcSchemaDetalii NOSHOW
distribuie N(1), id_tip N(10) null, id_articol N(20) null, id_gestiune N(20) null, cont C(4) null, acont C(4) null, sursa_cont V(10) null, id N(20), id_efactura N(20), nr N(5), articol V(250), descriere V(250), detalii M, cantitate N(18,6), um V(20), um_iso V(50), um_roa V(50), pret N(20,6), proctva N(7,2), tiptva V(2), valoarefaratva N(20,6), discountfaratva N(20,6), in_stoc N(1), articol_roa V(250), codmat_roa V(50), codbare V(50), codclient V(100), codfurnizor V(100), codcpv V(50), codnc8 V(50), nume_gestiune V(50), cgest V(20), tva N(20,6), pretv N(20,6), tvav N(20,6), pretvtva N(20,6), explicatia V(100), explicatia4 V(100), explicatia5 V(100)
ENDTEXT
IF USED('crsDetaliiFacturi')
USE IN crsDetaliiFacturi
ENDIF
CREATE CURSOR crsDetaliiFacturi (&lcSchemaDetalii)
* rand mut pe id_efactura=1, ca actualizeaza_grid2 sa gaseasca detaliile deja in cursor (fara poFacturiDetalii/Oracle)
INSERT INTO crsDetaliiFacturi (id, id_efactura, nr, articol) VALUES (100, 1, 1, 'FIXTURA')
CREATE CURSOR cTipArticoleP (id I, in_stoc N(1), tip V(50), cont V(4), ordine I)
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0)
SELECT cTipArticoleP
GO TOP IN cTipArticoleP
INDEX ON ordine TAG ordine
CREATE CURSOR cTipArticoleE (id I, in_stoc N(1), tip V(50), cont V(4), ordine I)
INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0)
SELECT cTipArticoleE
GO TOP IN cTipArticoleE
INDEX ON ordine TAG ordine
SELECT id, tip, cont, in_stoc, ordine FROM cTipArticoleP ORDER BY ordine INTO CURSOR cTip
SELECT cTip
INDEX ON id TAG id
goExecutor.oExecuta([select distinct nume_gestiune,cgest,id_gestiune,nr_pag,cont from vgest_gestiuni_util where inactiv = 0 and id_util = ] + ALLTRIM(STR(m.gnIdUtil)), 'cGestiuni')
SELECT cGestiuni
APPEND BLANK
INDEX ON id_gestiune TAG id_gest
SELECT CAST(ALLTRIM(nume_gestiune) + '-' + ALLTRIM(NVL(cgest, '')) AS V(50)) AS nume_gestiune, id_gestiune FROM cGestiuni ORDER BY nume_gestiune INTO CURSOR cGestiuni2
goExecutor.oExecuta("select cod_um_iso, um_iso from syn_vnom_um_iso", 'cUMISO')
SELECT cUMISO
INDEX ON cod_um_iso TAG cod_um_iso
goExecutor.oExecuta("select id, um, cod_um_iso, um_iso from vnom_um", 'cUM')
SELECT cUM
INDEX ON id TAG id
LOCAL loForm, lnTopInitial, lnTopMutat
SELECT crsFacturi
GO TOP
*=== T1: fara cheie in ini -> layout de design neschimbat dupa Show ===
loForm = CREATEOBJECT('frm_import_efactura', .T.)
loForm.WindowType = 0
DO PrTest WITH 'formular instantiat', TYPE('loForm') == 'O'
loForm.Show()
lnTopInitial = loForm.Sfsplitterv1.Top
DO PrTest WITH 'T1 grdFacturi.Height = 292 (design)', loForm.grdFacturi.Height = 292, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
DO PrTest WITH 'T1 _shape3.Top = 369 (design)', loForm._shape3.Top = 369, 'obtinut=' + TRANSFORM(loForm._shape3.Top)
DO PrTest WITH 'T1 splitter.Top = 364 (design)', lnTopInitial = 364, 'obtinut=' + TRANSFORM(lnTopInitial)
*=== T2: MoveSplitterToPosition(Top+100) -> muta panoul, pastreaza marginea de jos a grilei de linii ===
LOCAL lnShapeTop0, lnPartTop0, lnDetTop0, lnDetBottom0
lnShapeTop0 = loForm._shape3.Top
lnPartTop0 = loForm.txtPartener.Top
lnDetTop0 = loForm.grdDetaliiFacturi.Top
lnDetBottom0 = lnDetTop0 + loForm.grdDetaliiFacturi.Height
loForm.Sfsplitterv1.MoveSplitterToPosition(lnTopInitial + 100)
DO PrTest WITH 'T2 grdFacturi.Height +100', loForm.grdFacturi.Height = 392, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
DO PrTest WITH 'T2 _shape3.Top +100', loForm._shape3.Top = lnShapeTop0 + 100, 'obtinut=' + TRANSFORM(loForm._shape3.Top)
DO PrTest WITH 'T2 txtPartener.Top +100', loForm.txtPartener.Top = lnPartTop0 + 100, 'obtinut=' + TRANSFORM(loForm.txtPartener.Top)
DO PrTest WITH 'T2 grdDetaliiFacturi.Top +100', loForm.grdDetaliiFacturi.Top = lnDetTop0 + 100, 'obtinut=' + TRANSFORM(loForm.grdDetaliiFacturi.Top)
DO PrTest WITH 'T2 marginea de jos a grdDetaliiFacturi neschimbata', loForm.grdDetaliiFacturi.Top + loForm.grdDetaliiFacturi.Height = lnDetBottom0, 'obtinut=' + TRANSFORM(loForm.grdDetaliiFacturi.Top + loForm.grdDetaliiFacturi.Height)
*=== T7: tragere simulata cu MouseMove (coordonate relative la forma, ca in VFP), fara sa atinga Anchor ===
LOCAL lnAnchorSpl, lnTopSpl
lnAnchorSpl = loForm.Sfsplitterv1.Anchor
lnTopSpl = loForm.Sfsplitterv1.Top
loForm.Sfsplitterv1.MouseMove(1, 0, 50, m.lnTopSpl - 30)
DO PrTest WITH 'T7 MouseMove sus 30: splitter.Top -30', loForm.Sfsplitterv1.Top = m.lnTopSpl - 30, 'obtinut=' + TRANSFORM(loForm.Sfsplitterv1.Top)
DO PrTest WITH 'T7 grdFacturi.Height -30', loForm.grdFacturi.Height = 362, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
loForm.Sfsplitterv1.MouseMove(1, 0, 50, m.lnTopSpl)
DO PrTest WITH 'T7 MouseMove jos 30: revine', loForm.Sfsplitterv1.Top = m.lnTopSpl, 'obtinut=' + TRANSFORM(loForm.Sfsplitterv1.Top)
DO PrTest WITH 'T7 Anchor splitter neschimbat', loForm.Sfsplitterv1.Anchor = m.lnAnchorSpl
DO PrTest WITH 'T7 subclasa sfsplitterv_panou, nu override pe forma', LOWER(loForm.Sfsplitterv1.Class) == 'sfsplitterv_panou' AND !PEMSTATUS(loForm, 'lSplitterRestaurat', 5)
*=== T3: clamp la limite ===
loForm.Sfsplitterv1.MoveSplitterToPosition(9999)
DO PrTest WITH 'T3 clamp sus: grdDetaliiFacturi.Height = 60', loForm.grdDetaliiFacturi.Height = 60, 'obtinut=' + TRANSFORM(loForm.grdDetaliiFacturi.Height)
loForm.Sfsplitterv1.MoveSplitterToPosition(0)
DO PrTest WITH 'T3 clamp jos: grdFacturi.Height = 100', loForm.grdFacturi.Height = 100, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
*=== T5: pozitioneazalistasubimport() dupa mutare -> grdFacturi.Height revine la valoarea mutata ===
LOCAL lnHeightMutat
lnHeightMutat = loForm.grdFacturi.Height
loForm.pozitioneazalistasubimport()
DO PrTest WITH 'T5 grdFacturi.Height revine la valoarea mutata', loForm.grdFacturi.Height = lnHeightMutat, 'asteptat=' + TRANSFORM(lnHeightMutat) + ' obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
*=== T4: persistenta ===
lnTopMutat = loForm.Sfsplitterv1.Top
loForm.Release()
DO PrTest WITH 'T4 fisierul ini a fost creat la Release (pozitie schimbata)', FILE(gcTempIni)
LOCAL lnCitit
lnCitit = VAL(NVL(getini(m.gcTempIni, 'efactura', 'import_splitter_top'), ''))
DO PrTest WITH 'T4 cheia import_splitter_top scrisa cu pozitia mutata', m.lnCitit = m.lnTopMutat, 'asteptat=' + TRANSFORM(lnTopMutat) + ' citit=' + TRANSFORM(lnCitit)
SELECT crsFacturi
GO TOP
LOCAL loForm2
loForm2 = CREATEOBJECT('frm_import_efactura', .T.)
loForm2.WindowType = 0
loForm2.Show()
DO PrTest WITH 'T4 forma noua reia pozitia salvata', loForm2.Sfsplitterv1.Top = m.lnTopMutat, 'asteptat=' + TRANSFORM(lnTopMutat) + ' obtinut=' + TRANSFORM(loForm2.Sfsplitterv1.Top)
LOCAL lcIniDupaRestaurare
lcIniDupaRestaurare = FILETOSTR(m.gcTempIni)
loForm2.Release()
DO PrTest WITH 'T4 forma deschisa/inchisa fara mutare nu rescrie ini-ul', FILETOSTR(m.gcTempIni) == m.lcIniDupaRestaurare
*=== T6: calea reala (CREATEOBJECT + Show(1) modal) - pica pe codul vechi (clamp calculat pe inaltimea dinainte de maximizare) ===
LOCAL lnPozT6
lnPozT6 = 480
=setini(m.gcTempIni, "efactura", "import_splitter_top", TRANSFORM(m.lnPozT6))
PUBLIC goFormT6, gnPozCapturataT6
gnPozCapturataT6 = -1
SELECT crsFacturi
GO TOP
goFormT6 = CREATEOBJECT('frm_import_efactura', .T.)
LOCAL loTmrT6
loTmrT6 = CREATEOBJECT('tmrCaptureazaT6')
loTmrT6.Enabled = .T.
goFormT6.Show(1)
DO PrTest WITH 'T6 calea reala: Sfsplitterv1.Top restaurat dupa Show(1) modal', gnPozCapturataT6 = m.lnPozT6, 'asteptat=' + TRANSFORM(lnPozT6) + ' obtinut=' + TRANSFORM(gnPozCapturataT6)
RELEASE goFormT6, gnPozCapturataT6
*=== T8: dupa deschiderea maximizata cu pozitie salvata, grila de sus ajunge exact la splitter; mutare in sus pana aproape de minim nu da eroare ===
=setini(m.gcTempIni, "efactura", "import_splitter_top", "670")
PUBLIC goFormT8, gcRezT8
gcRezT8 = ""
SELECT crsFacturi
GO TOP
goFormT8 = CREATEOBJECT("frm_import_efactura", .T.)
LOCAL loTmrT8
loTmrT8 = CREATEOBJECT("tmrCaptureazaT8")
loTmrT8.Enabled = .T.
goFormT8.Show(1)
DO PrLogLocal WITH " T8 geometrie: " + gcRezT8
DO PrTest WITH "T8 grdFacturi.Top+Height = Sfsplitterv1.Top", LEFT(gcRezT8, 6) == "GAP=0 ", gcRezT8
DO PrTest WITH "T8 mutare in sus pana aproape de minim fara eroare", "ERR=0" $ gcRezT8, gcRezT8
RELEASE goFormT8, gcRezT8
IF USED('crsFacturi')
USE IN crsFacturi
ENDIF
IF USED('crsDetaliiFacturi')
USE IN crsDetaliiFacturi
ENDIF
IF FILE(gcTempIni)
DELETE FILE (gcTempIni)
ENDIF
DO PrTest WITH 'cleanup: crsFacturi/crsDetaliiFacturi inchise, ini temporar sters', !USED('crsFacturi') AND !USED('crsDetaliiFacturi') AND !FILE(gcTempIni)
LOCAL loFH, lnCol0, lnSty0
loFH = CREATEOBJECT('Form')
loFH.NewObject('splH', 'sfsplitterv_panou', 'D:\ROA\ROACONT\COMUN\clase\sfsplitter.vcx')
lnCol0 = loFH.splH.BackColor
lnSty0 = loFH.splH.BackStyle
DO PrTest WITH 'T9 stare initiala 200,215,230 si BackStyle 1', lnCol0 = RGB(200,215,230) AND lnSty0 = 1
loFH.splH.MouseEnter()
DO PrTest WITH 'T9 MouseEnter: BackColor albastru, BackStyle 1', loFH.splH.BackColor = RGB(0,120,215) AND loFH.splH.BackStyle = 1
loFH.splH.MouseLeave()
DO PrTest WITH 'T9 MouseLeave: valorile initiale', loFH.splH.BackColor = lnCol0 AND loFH.splH.BackStyle = lnSty0
loFH.Release()
DO PrLogLocal WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
CATCH TO loEx
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
TRY
IF USED('crsFacturi')
USE IN crsFacturi
ENDIF
IF USED('crsDetaliiFacturi')
USE IN crsDetaliiFacturi
ENDIF
IF FILE(gcTempIni)
DELETE FILE (gcTempIni)
ENDIF
CATCH
ENDTRY
ENDTRY
QUIT
**********************************************************
PROCEDURE PrTest
LPARAMETERS tcEticheta, tlOk, tcDetalii
IF tlOk
gnPass = gnPass + 1
ELSE
gnFail = gnFail + 1
ENDIF
DO PrLogLocal WITH ' ' + tcEticheta + ': ' + IIF(tlOk, 'OK', 'FAIL') + IIF(EMPTY(NVL(m.tcDetalii,'')), '', ' (' + m.tcDetalii + ')')
ENDPROC
**********************************************************
PROCEDURE PrLogLocal
LPARAMETERS tcMsg
LOCAL lcL
SET SAFETY OFF
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
ENDPROC
**********************************************************
* mock_amessagebox.prg cere HarnessLog (definit normal in ui_harness.prg, neincarcat aici)
PROCEDURE HarnessLog
LPARAMETERS tcMsg
DO PrLogLocal WITH tcMsg
ENDPROC
**********************************************************
PROCEDURE PrErrLocal
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
ENDPROC
**********************************************************
* T6: goFormT6.Show(1) e modal (blocheaza pana la Release) - captureaza Sfsplitterv1.Top dupa
* ce maximizarea reala s-a aplicat, apoi inchide forma ca testul sa poata continua.
DEFINE CLASS tmrCaptureazaT6 AS Timer
Interval = 300
Enabled = .F.
PROCEDURE Timer
This.Enabled = .F.
IF TYPE('goFormT6') = 'O'
gnPozCapturataT6 = goFormT6.Sfsplitterv1.Top
goFormT6.Release()
ENDIF
ENDPROC
ENDDEFINE
**********************************************************
* T8: captureaza geometria dupa maximizare si incearca o mutare in sus (MouseMove) pana aproape de minim
DEFINE CLASS tmrCaptureazaT8 AS Timer
Interval = 300
Enabled = .F.
PROCEDURE Timer
This.Enabled = .F.
LOCAL lnErr, lnGap, lnTop
IF TYPE('goFormT8') = 'O'
WITH goFormT8
lnGap = .Sfsplitterv1.Top - (.grdFacturi.Top + .grdFacturi.Height)
gcRezT8 = "GAP=" + TRANSFORM(lnGap) + " grdF.Top=" + TRANSFORM(.grdFacturi.Top) + " grdF.H=" + TRANSFORM(.grdFacturi.Height) + ;
" spl.Top=" + TRANSFORM(.Sfsplitterv1.Top) + " det.Top=" + TRANSFORM(.grdDetaliiFacturi.Top) + " det.H=" + TRANSFORM(.grdDetaliiFacturi.Height) + " "
lnErr = 0
TRY
lnTop = .grdFacturi.Top + 100 + 5
.Sfsplitterv1.MouseMove(1, 0, 50, lnTop)
CATCH
lnErr = 1
ENDTRY
gcRezT8 = gcRezT8 + "ERR=" + TRANSFORM(lnErr) + " spl.Top dupa=" + TRANSFORM(.Sfsplitterv1.Top) + " grdF.H dupa=" + TRANSFORM(.grdFacturi.Height)
.Release()
ENDWITH
ENDIF
ENDPROC
ENDDEFINE