Import eFactura in lot: borderou cu ce lipseste, coada de contabilizare, alegerea contului
Borderoul tine per factura ce mai are de completat si daca are articole de gestiune (camp gest, coloana si filtru), coada contabilizeaza in serie facturile bifate si incheie cu un rezumat, iar contul de furnizor/client se alege din planul de conturi. Cheia normalizata de articol, rezolvarea automata a partenerului si anularea in bloc intra tot aici. Pozitia in lista se pastreaza peste reaplicarea filtrului. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Aroafxp4z8bmM5oVECZRXY
This commit is contained in:
114
utile/Teste/efactura_import/fixtura_zip_din_baza.prg
Normal file
114
utile/Teste/efactura_import/fixtura_zip_din_baza.prg
Normal file
@@ -0,0 +1,114 @@
|
||||
* fixtura_zip_din_baza.prg
|
||||
* Ajutor comun de fixtura pentru cele trei teste efactura_import (test_import_zip_efactura,
|
||||
* test_import_efactura_smoke, test_sursa_cont_cursor): extrage arhiva DETALII_ZIP a unei
|
||||
* facturi alese determinist din ANAF_EFACTURA (nu de pe disc), ca sa nu mai depinda de un
|
||||
* fisier .zip nurmarit langa proiect.
|
||||
*
|
||||
* Criteriu determinist: cea mai mica (alfabetic) id_incarcare dintre facturile primite, cu
|
||||
* arhiva zip salvata in baza si fara document contabil legat inca (id_fact null) - stabil intre
|
||||
* rulari chiar daca test_import_zip_efactura sterge si reimporta acelasi id_incarcare cu un id
|
||||
* nou (secventa), pentru ca alegerea se face pe id_incarcare, nu pe id.
|
||||
*
|
||||
* Necesita mediul deja initializat (test_init_env_auto.prg, goExecutor conectat).
|
||||
|
||||
***********************
|
||||
FUNCTION FixturaIdIncarcareEFactura
|
||||
LOCAL lcId
|
||||
lcId = ''
|
||||
goExecutor.oSelecteaza2Value("select min(id_incarcare) from anaf_efactura" + ;
|
||||
" where detalii_zip is not null and tip_mesaj_raspuns = 'FACTURA PRIMITA' and id_fact is null", @lcId)
|
||||
RETURN ALLTRIM(NVL(lcId, ''))
|
||||
ENDFUNC
|
||||
|
||||
***********************
|
||||
* id-ul curent (poate sa difere intre rulari, dupa reimport) al randului anaf_efactura cu
|
||||
* id_incarcare = FixturaIdIncarcareEFactura() - pentru testele care doar citesc randul deja
|
||||
* importat de test_import_zip_efactura. Intoarce 0 daca fixtura nu exista inca.
|
||||
FUNCTION FixturaIdEFactura
|
||||
LOCAL lcIdInc, lnId
|
||||
lcIdInc = FixturaIdIncarcareEFactura()
|
||||
lnId = 0
|
||||
IF !EMPTY(m.lcIdInc)
|
||||
goExecutor.oSelecteaza2Value("select id from anaf_efactura where id_incarcare = '" + m.lcIdInc + "'", @lnId)
|
||||
ENDIF
|
||||
RETURN NVL(lnId, 0)
|
||||
ENDFUNC
|
||||
|
||||
***********************
|
||||
* seteaza gnAn/gnLuna (si sesiunea Oracle, pack_sesiune) pe luna facturii fixtura, ca
|
||||
* filtrele de perioada din cursoarele borderoului eFactura sa o gaseasca indiferent de data
|
||||
* reala la care a fost emisa. Intoarce .F. daca fixtura nu exista.
|
||||
FUNCTION FixturaSincronizeazaPerioada
|
||||
LOCAL lnId, ldData
|
||||
lnId = FixturaIdEFactura()
|
||||
IF m.lnId = 0
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
ldData = {}
|
||||
goExecutor.oSelecteaza2Value("select xdata_act from anaf_efactura where id = " + TRANSFORM(m.lnId), @ldData)
|
||||
IF EMPTY(m.ldData)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
gnAn = YEAR(m.ldData)
|
||||
gnLuna = MONTH(m.ldData)
|
||||
goExecutor.oExecuta("begin pack_sesiune.setluna(?gnLuna); pack_sesiune.setan(?gnAn); end;")
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
|
||||
***********************
|
||||
* Extrage DETALII_ZIP al facturii fixtura intr-un fisier temporar (SYS(2023), in afara
|
||||
* proiectului - nu ramane nimic nurmarit dupa test) si intoarce calea lui ('' daca fixtura nu
|
||||
* exista in baza). Lasa deschis cursorul cFixturaEFactura cu datele sursa (dinaintea oricarei
|
||||
* stergeri facute de apelant), pentru recalculul asertiunilor dupa reimport.
|
||||
FUNCTION FixturaZipEFactura
|
||||
LOCAL lcIdInc, lcFile, lcSchema, lcSelect, lcOrder, lcgroup, lcFiltru, lcFiltruOriginal, llModParam, llAfiseaza
|
||||
PRIVATE poFixturaZip
|
||||
poFixturaZip = NULL
|
||||
|
||||
lcIdInc = FixturaIdIncarcareEFactura()
|
||||
IF EMPTY(m.lcIdInc)
|
||||
RETURN ''
|
||||
ENDIF
|
||||
|
||||
* date sursa pentru asertiuni, inainte de orice stergere facuta de apelant
|
||||
IF USED('cFixturaEFactura')
|
||||
USE IN (SELECT('cFixturaEFactura'))
|
||||
ENDIF
|
||||
goExecutor.oExecuta("select id, id_incarcare, xnumar_act, xdata_act, xdata_scad, xtotal_fara_tva, xtotal_tva," + ;
|
||||
" xtotal_cu_tva, xnume_valuta, tip_mesaj_raspuns, factura_emisa, cod_fiscal_emitent, cod_fiscal_beneficiar," + ;
|
||||
" nvl(length(detalii),0) as len_detalii," + ;
|
||||
" (select count(*) from anaf_efactura_detalii d where d.id_efactura = anaf_efactura.id) as nr_linii" + ;
|
||||
" from anaf_efactura where id_incarcare = '" + m.lcIdInc + "'", 'cFixturaEFactura')
|
||||
IF !USED('cFixturaEFactura') OR RECCOUNT('cFixturaEFactura') <> 1
|
||||
RETURN ''
|
||||
ENDIF
|
||||
|
||||
* arhiva zip, acelasi tipar ca AnafeFacturaServer.DownloadDetaliiZip (anaf_efactura.prg)
|
||||
lcSchema = [id_incarcare V(36), fisier W]
|
||||
lcSelect = [select id_incarcare, detalii_zip from anaf_efactura where id_incarcare = '] + m.lcIdInc + [']
|
||||
lcOrder = []
|
||||
lcgroup = []
|
||||
lcFiltru = []
|
||||
lcFiltruOriginal = []
|
||||
llModParam = .T.
|
||||
llAfiseaza = .F.
|
||||
|
||||
gencursor('poFixturaZip', 'cRegFixturaZip', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
|
||||
poFixturaZip.ca_baza1.afisare()
|
||||
|
||||
lcFile = ''
|
||||
IF USED('cRegFixturaZip') AND RECCOUNT('cRegFixturaZip') = 1
|
||||
SELECT cRegFixturaZip
|
||||
GO TOP
|
||||
lcFile = ADDBS(SYS(2023)) + 'fixtura_zip_efactura_' + m.lcIdInc + '.zip'
|
||||
STRTOFILE(fisier, m.lcFile)
|
||||
ENDIF
|
||||
IF USED('cRegFixturaZip')
|
||||
USE IN (SELECT('cRegFixturaZip'))
|
||||
ENDIF
|
||||
|
||||
IF EMPTY(m.lcFile) OR !FILE(m.lcFile)
|
||||
RETURN ''
|
||||
ENDIF
|
||||
RETURN m.lcFile
|
||||
ENDFUNC
|
||||
17
utile/Teste/efactura_import/mock_facturi_duplicate.prg
Normal file
17
utile/Teste/efactura_import/mock_facturi_duplicate.prg
Normal file
@@ -0,0 +1,17 @@
|
||||
* mock_facturi_duplicate.prg - inlocuieste FUNCTION facturi_duplicate (oproceduri_comune.prg) in
|
||||
* testele eFactura, ca verificarea de facturi duplicate sa fie determinista, fara sa depinda de
|
||||
* date reale din IREG_PARTENERI. Acelasi tipar ca mock_amessagebox.prg: SET PROCEDURE ADDITIVE
|
||||
* PRIMA, inainte de fisierele aplicatiei. Raspunde cu gcMockDuplicat (PUBLIC, declarat de test)
|
||||
* daca exista, altfel sir gol (nicio factura duplicata). Lasa in mod deliberat alta zona de lucru
|
||||
* selectata la iesire (ca originalul, care nu isi salveaza/restaureaza SELECT()), ca apelantul sa
|
||||
* fie testat pe acelasi comportament.
|
||||
PROCEDURE facturi_duplicate
|
||||
LPARAMETERS tcCont, tnIdPart, tcSerieAct, tnNract, tcMesajReturn
|
||||
LOCAL lcRezultat
|
||||
lcRezultat = IIF(TYPE('gcMockDuplicat') = 'C', gcMockDuplicat, '')
|
||||
IF !USED('cMockFactDbl')
|
||||
CREATE CURSOR cMockFactDbl (nr_ireg N(5))
|
||||
ENDIF
|
||||
SELECT cMockFactDbl
|
||||
RETURN m.lcRezultat
|
||||
ENDPROC
|
||||
398
utile/Teste/efactura_import/seed_test_import_efactura.prg
Normal file
398
utile/Teste/efactura_import/seed_test_import_efactura.prg
Normal file
@@ -0,0 +1,398 @@
|
||||
* seed_test_import_efactura.prg
|
||||
* Semanare + verificare prin rulare a setului de test manual pentru ecranul de import eFactura
|
||||
* (frm_import_efactura): cascada de recunoastere a contului (RecunoastereArticolEF) si
|
||||
* eligibilitatea cozii ghidate (CoadaContabilizareEF).
|
||||
* Toate facturile semanate au cod_fiscal_emitent '9999700xxx' fara prefix RO si xfurnizor cu
|
||||
* prefix 'ZZTEST'; codul fiscal din NOM_PARTENERI e amestecat cu si fara RO, ca in productie.
|
||||
* Schema MARIUSM_AUTO@ROA_CENTRAL, perioada 09/2026 (istoricul necesar cascadei
|
||||
* e datat 08/2026). Idempotent: sterge propriile randuri (StergeFixturaImport) inainte de a
|
||||
* insera. Nu sterge la final - datele raman pentru testarea manuala din VFP IDE (vezi
|
||||
* docs\ghid_test_manual_efactura.md); stergerea e in sterge_test_import_efactura.prg.
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File seed_test_import_efactura.ps1
|
||||
* Iesire in seed_test_import_efactura_log.txt (id-uri reale + rezultatul fiecarei verificari)
|
||||
|
||||
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
|
||||
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\seed_test_import_efactura_log.txt"
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 9
|
||||
IF gnHandle <= 0
|
||||
DO PrLogLocal WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
|
||||
QUIT
|
||||
ENDIF
|
||||
SET PROCEDURE TO recunoastere_articol_ef ADDITIVE
|
||||
SET PROCEDURE TO coada_contabilizare_ef ADDITIVE
|
||||
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle) + ' gnAn/gnLuna=' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna)
|
||||
|
||||
DO PrLogLocal WITH '=== curatenie preventiva (rulare idempotenta) ==='
|
||||
DO StergeFixturaImport
|
||||
|
||||
DO PrLogLocal WITH '=== activare EFACTURA_LOT_ACTIV=1 (coada/anulare vizibile) ==='
|
||||
scrie_optiune('EFACTURA_LOT_ACTIV', '1', 'COADA/ANULARE IN BLOC EFACTURA ACTIVE')
|
||||
actualizeaza_optiuni()
|
||||
|
||||
LOCAL lnArtNestocat, lnArtGestionabil
|
||||
lnArtNestocat = 4294507217 && CHELTUIELI TRANSPORT, in_stoc=0 (VNOM_ARTICOLE)
|
||||
lnArtGestionabil = 2910202427 && ULEI COMPRESOR AC, in_stoc=1 (VNOM_ARTICOLE)
|
||||
|
||||
LOCAL ldIstoric, ldCurent
|
||||
ldIstoric = {^2026-08-05}
|
||||
ldCurent = {^2026-09-02}
|
||||
|
||||
*=========================================================================
|
||||
* SECTIUNEA A - cascada de recunoastere a contului (7 cazuri)
|
||||
*=========================================================================
|
||||
LOCAL lnA1h, lnA1, lnA2h, lnA2, lnA3h, lnA3, lnA4h, lnA4, lnA5h, lnA5, lnA6, lnA7h, lnA7
|
||||
|
||||
DO PrLogLocal WITH '=== A1: EXACT cu id_articol (treapta 1) ==='
|
||||
lnA1h = InsFactura('9999700001', 'ZZTEST A1 EXACT CU ID ARTICOL', ldIstoric, 'ZZT-A1-H', 100, 19, 119)
|
||||
DO InsLinie WITH lnA1h, 1, 'SERVICIU MENTENANTA IT', '628', '', lnArtNestocat, 100
|
||||
lnA1 = InsFactura('9999700001', 'ZZTEST A1 EXACT CU ID ARTICOL', ldCurent, 'ZZT-A1-C', 100, 19, 119)
|
||||
DO InsLinie WITH lnA1, 1, 'SERVICIU MENTENANTA IT', '', '', 0, 100
|
||||
DO PrLogLocal WITH ' id_efactura istoric=' + TRANSFORM(lnA1h) + ' curent=' + TRANSFORM(lnA1)
|
||||
|
||||
DO PrLogLocal WITH '=== A2: EXACT fara id_articol (treapta 2) ==='
|
||||
lnA2h = InsFactura('9999700002', 'ZZTEST A2 EXACT FARA ID ARTICOL', ldIstoric, 'ZZT-A2-H', 100, 19, 119)
|
||||
DO InsLinie WITH lnA2h, 1, 'CONSULTANTA FISCALA LUNARA', '628', '', 0, 100
|
||||
lnA2 = InsFactura('9999700002', 'ZZTEST A2 EXACT FARA ID ARTICOL', ldCurent, 'ZZT-A2-C', 100, 19, 119)
|
||||
DO InsLinie WITH lnA2, 1, 'CONSULTANTA FISCALA LUNARA', '', '', 0, 100
|
||||
DO PrLogLocal WITH ' id_efactura istoric=' + TRANSFORM(lnA2h) + ' curent=' + TRANSFORM(lnA2)
|
||||
|
||||
DO PrLogLocal WITH '=== A3: APROX (cheie normalizata) cu id_articol (treapta 3) ==='
|
||||
lnA3h = InsFactura('9999700003', 'ZZTEST A3 APROX CU ID ARTICOL', ldIstoric, 'ZZT-A3-H', 100, 19, 119)
|
||||
DO InsLinie WITH lnA3h, 1, 'ABONAMENT MENTENANTA SOFTWARE 08/2026', '628', '', lnArtNestocat, 100
|
||||
lnA3 = InsFactura('9999700003', 'ZZTEST A3 APROX CU ID ARTICOL', ldCurent, 'ZZT-A3-C', 100, 19, 119)
|
||||
DO InsLinie WITH lnA3, 1, 'ABONAMENT MENTENANTA SOFTWARE 09/2026', '', '', 0, 100
|
||||
DO PrLogLocal WITH ' id_efactura istoric=' + TRANSFORM(lnA3h) + ' curent=' + TRANSFORM(lnA3)
|
||||
|
||||
DO PrLogLocal WITH '=== A4: APROX (cheie normalizata) fara id_articol (treapta 4) ==='
|
||||
lnA4h = InsFactura('9999700004', 'ZZTEST A4 APROX FARA ID ARTICOL', ldIstoric, 'ZZT-A4-H', 100, 19, 119)
|
||||
DO InsLinie WITH lnA4h, 1, 'REVIZIE TEHNICA ANUALA 08/2026', '628', '', 0, 100
|
||||
lnA4 = InsFactura('9999700004', 'ZZTEST A4 APROX FARA ID ARTICOL', ldCurent, 'ZZT-A4-C', 100, 19, 119)
|
||||
DO InsLinie WITH lnA4, 1, 'REVIZIE TEHNICA ANUALA 09/2026', '', '', 0, 100
|
||||
DO PrLogLocal WITH ' id_efactura istoric=' + TRANSFORM(lnA4h) + ' curent=' + TRANSFORM(lnA4)
|
||||
|
||||
DO PrLogLocal WITH '=== A5: ISTORIC - ultimele 5 linii contate pe acelasi cont sintetic (treapta 5) ==='
|
||||
lnA5h = InsFactura('9999700005', 'ZZTEST A5 ISTORIC CONT SINTETIC', ldIstoric, 'ZZT-A5-H', 500, 95, 595)
|
||||
DO InsLinie WITH lnA5h, 1, 'PRODUS ISTORIC A5 UNU', '628', '', 0, 100
|
||||
DO InsLinie WITH lnA5h, 2, 'PRODUS ISTORIC A5 DOI', '628', '', 0, 100
|
||||
DO InsLinie WITH lnA5h, 3, 'PRODUS ISTORIC A5 TREI', '628', '', 0, 100
|
||||
DO InsLinie WITH lnA5h, 4, 'PRODUS ISTORIC A5 PATRU', '628', '', 0, 100
|
||||
DO InsLinie WITH lnA5h, 5, 'PRODUS ISTORIC A5 CINCI', '628', '', 0, 100
|
||||
lnA5 = InsFactura('9999700005', 'ZZTEST A5 ISTORIC CONT SINTETIC', ldCurent, 'ZZT-A5-C', 100, 19, 119)
|
||||
DO InsLinie WITH lnA5, 1, 'MARFA NOUA NEASEMANATOARE A5', '', '', 0, 100
|
||||
DO PrLogLocal WITH ' id_efactura istoric=' + TRANSFORM(lnA5h) + ' curent=' + TRANSFORM(lnA5)
|
||||
|
||||
DO PrLogLocal WITH '=== A6: fara propunere (furnizor fara niciun precedent contat) ==='
|
||||
lnA6 = InsFactura('9999700006', 'ZZTEST A6 FARA PROPUNERE', ldCurent, 'ZZT-A6-C', 100, 19, 119)
|
||||
DO InsLinie WITH lnA6, 1, 'SERVICIU UNIC FARA ISTORIC A6', '', '', 0, 100
|
||||
DO PrLogLocal WITH ' id_efactura curent=' + TRANSFORM(lnA6)
|
||||
|
||||
DO PrLogLocal WITH '=== A7: garda de cheie scurta - articol numeric (nu trebuie sa se potriveasca) ==='
|
||||
lnA7h = InsFactura('9999700007', 'ZZTEST A7 GARDA CHEIE SCURTA', ldIstoric, 'ZZT-A7-H', 200, 38, 238)
|
||||
DO InsLinie WITH lnA7h, 1, '8000070024441', '628', '', 0, 100
|
||||
DO InsLinie WITH lnA7h, 2, '8000070024442', '301', '', 0, 100
|
||||
lnA7 = InsFactura('9999700007', 'ZZTEST A7 GARDA CHEIE SCURTA', ldCurent, 'ZZT-A7-C', 100, 19, 119)
|
||||
DO InsLinie WITH lnA7, 1, '8000070024443', '', '', 0, 100
|
||||
DO PrLogLocal WITH ' id_efactura istoric=' + TRANSFORM(lnA7h) + ' curent=' + TRANSFORM(lnA7)
|
||||
|
||||
*=========================================================================
|
||||
* SECTIUNEA B - istoric ACT (partener cu istoric de cont stabil / instabil / fara istoric)
|
||||
*=========================================================================
|
||||
LOCAL lnB1p, lnB1h, lnB1, lnB2p, lnB2h, lnB2, lnB3
|
||||
|
||||
DO PrLogLocal WITH '=== B1: istoric ACT stabil + toate liniile recunoscute ==='
|
||||
lnB1p = InsPartener('RO9999700008', 'ZZTEST B1 SEMAFOR VERDE', 0)
|
||||
DO InsDocAct WITH 96500001, {^2026-08-05}, lnB1p, '628'
|
||||
DO InsDocAct WITH 96500002, {^2026-08-06}, lnB1p, '628'
|
||||
DO InsDocAct WITH 96500003, {^2026-08-07}, lnB1p, '628'
|
||||
DO InsDocAct WITH 96500004, {^2026-08-08}, lnB1p, '628'
|
||||
DO InsDocAct WITH 96500005, {^2026-08-09}, lnB1p, '628'
|
||||
lnB1h = InsFactura('9999700008', 'ZZTEST B1 SEMAFOR VERDE', ldIstoric, 'ZZT-B1-H', 200, 38, 238)
|
||||
DO InsLinie WITH lnB1h, 1, 'PRODUS B1 UNU', '628', '', lnArtNestocat, 100
|
||||
DO InsLinie WITH lnB1h, 2, 'PRODUS B1 DOI', '628', '', lnArtNestocat, 100
|
||||
lnB1 = InsFactura('9999700008', 'ZZTEST B1 SEMAFOR VERDE', ldCurent, 'ZZT-B1-C', 200, 38, 238)
|
||||
DO InsLinie WITH lnB1, 1, 'PRODUS B1 UNU', '', '', 0, 100
|
||||
DO InsLinie WITH lnB1, 2, 'PRODUS B1 DOI', '', '', 0, 100
|
||||
DO PrLogLocal WITH ' id_partener=' + TRANSFORM(lnB1p) + ' id_efactura istoric=' + TRANSFORM(lnB1h) + ' curent=' + TRANSFORM(lnB1)
|
||||
|
||||
DO PrLogLocal WITH '=== B2: istoric ACT stabil, dar o linie fara corespondent ==='
|
||||
lnB2p = InsPartener('9999700009', 'ZZTEST B2 SEMAFOR GALBEN', 0)
|
||||
DO InsDocAct WITH 96500011, {^2026-08-05}, lnB2p, '628'
|
||||
DO InsDocAct WITH 96500012, {^2026-08-06}, lnB2p, '628'
|
||||
DO InsDocAct WITH 96500013, {^2026-08-07}, lnB2p, '628'
|
||||
DO InsDocAct WITH 96500014, {^2026-08-08}, lnB2p, '628'
|
||||
DO InsDocAct WITH 96500015, {^2026-08-09}, lnB2p, '628'
|
||||
lnB2h = InsFactura('9999700009', 'ZZTEST B2 SEMAFOR GALBEN', ldIstoric, 'ZZT-B2-H', 100, 19, 119)
|
||||
DO InsLinie WITH lnB2h, 1, 'PRODUS B2 CUNOSCUT', '628', '', lnArtNestocat, 100
|
||||
lnB2 = InsFactura('9999700009', 'ZZTEST B2 SEMAFOR GALBEN', ldCurent, 'ZZT-B2-C', 200, 38, 238)
|
||||
DO InsLinie WITH lnB2, 1, 'PRODUS B2 CUNOSCUT', '', '', 0, 100
|
||||
DO InsLinie WITH lnB2, 2, 'PRODUS B2 NECUNOSCUT XYZ', '', '', 0, 100
|
||||
DO PrLogLocal WITH ' id_partener=' + TRANSFORM(lnB2p) + ' id_efactura istoric=' + TRANSFORM(lnB2h) + ' curent=' + TRANSFORM(lnB2)
|
||||
|
||||
DO PrLogLocal WITH '=== B3: furnizor fara niciun document ACT ==='
|
||||
lnB3 = InsFactura('9999700010', 'ZZTEST B3 SEMAFOR GRI', ldCurent, 'ZZT-B3-C', 100, 19, 119)
|
||||
DO InsLinie WITH lnB3, 1, 'PRODUS B3 NECUNOSCUT', '', '', 0, 100
|
||||
DO PrLogLocal WITH ' id_efactura curent=' + TRANSFORM(lnB3)
|
||||
|
||||
*=========================================================================
|
||||
* SECTIUNEA C - coada ghidata (eligibilitate + ruta)
|
||||
*=========================================================================
|
||||
LOCAL lnC1p, lnC1, lnC2p, lnC2, lnC3p, lnC3, lnC4p, lnC4
|
||||
|
||||
DO PrLogLocal WITH '=== C1: eligibila (partener identificat, necontabilizata) ==='
|
||||
lnC1p = InsPartener('RO9999700011', 'ZZTEST C1 COADA ELIGIBILA', 0)
|
||||
lnC1 = InsFactura('9999700011', 'ZZTEST C1 COADA ELIGIBILA', ldCurent, 'ZZT-C1-C', 100, 19, 119)
|
||||
DO InsLinie WITH lnC1, 1, 'MARFA GENERALA C1', '', '', 0, 100
|
||||
DO PrLogLocal WITH ' id_partener=' + TRANSFORM(lnC1p) + ' id_efactura=' + TRANSFORM(lnC1)
|
||||
|
||||
DO PrLogLocal WITH '=== C2: eligibila cu avertisment - partener exista, dar inactiv ==='
|
||||
lnC2p = InsPartener('9999700012', 'ZZTEST C2 FARA PARTENER', 1)
|
||||
lnC2 = InsFactura('9999700012', 'ZZTEST C2 FARA PARTENER', ldCurent, 'ZZT-C2-C', 100, 19, 119)
|
||||
DO InsLinie WITH lnC2, 1, 'MARFA GENERALA C2', '', '', 0, 100
|
||||
DO PrLogLocal WITH ' id_partener(inactiv)=' + TRANSFORM(lnC2p) + ' id_efactura=' + TRANSFORM(lnC2)
|
||||
|
||||
DO PrLogLocal WITH '=== C3: neeligibila - deja contabilizata (id_fact populat) ==='
|
||||
lnC3p = InsPartener('RO9999700013', 'ZZTEST C3 DEJA CONTABILIZATA', 0)
|
||||
lnC3 = InsFactura('9999700013', 'ZZTEST C3 DEJA CONTABILIZATA', ldCurent, 'ZZT-C3-C', 100, 19, 119)
|
||||
DO InsLinie WITH lnC3, 1, 'MARFA GENERALA C3', '', '', 0, 100
|
||||
goExecutor.oExecute('UPDATE ANAF_EFACTURA SET ID_FACT = 999999999 WHERE ID = ' + TRANSFORM(lnC3), 'crsMarcC3')
|
||||
DO PrLogLocal WITH ' id_partener=' + TRANSFORM(lnC3p) + ' id_efactura=' + TRANSFORM(lnC3) + ' (id_fact fortat 999999999)'
|
||||
|
||||
DO PrLogLocal WITH '=== C4: linie gestionabila (in_stoc=1) - Ruta() trebuie sa dea 2 (Import gestiune) ==='
|
||||
lnC4p = InsPartener('9999700014', 'ZZTEST C4 IMPORT GESTIUNE', 0)
|
||||
lnC4 = InsFactura('9999700014', 'ZZTEST C4 IMPORT GESTIUNE', ldCurent, 'ZZT-C4-C', 100, 19, 119)
|
||||
DO InsLinie WITH lnC4, 1, 'ULEI COMPRESOR AC', '', '', lnArtGestionabil, 100
|
||||
DO PrLogLocal WITH ' id_partener=' + TRANSFORM(lnC4p) + ' id_efactura=' + TRANSFORM(lnC4)
|
||||
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitSeed')
|
||||
DO PrLogLocal WITH '=== semanare terminata, COMMIT facut ==='
|
||||
|
||||
*=========================================================================
|
||||
* VERIFICARE PRIN RULARE - cascada de recunoastere (Sectiunea A)
|
||||
*=========================================================================
|
||||
DO PrLogLocal WITH ''
|
||||
DO PrLogLocal WITH '########## VERIFICARE A - RecunoastereArticolEF ##########'
|
||||
LOCAL loRec
|
||||
loRec = CREATEOBJECT('RecunoastereArticolEF')
|
||||
|
||||
DO VerifCascada WITH loRec, 'A1 (EXACT cu id_articol, treapta 1)', '9999700001', 'SERVICIU MENTENANTA IT', lnA1, .F., 'EXACT', '628', ''
|
||||
DO VerifCascada WITH loRec, 'A2 (EXACT fara id_articol, treapta 2)', '9999700002', 'CONSULTANTA FISCALA LUNARA', lnA2, .F., 'EXACT', '628', ''
|
||||
DO VerifCascada WITH loRec, 'A3 (APROX cu id_articol, treapta 3)', '9999700003', 'ABONAMENT MENTENANTA SOFTWARE 09/2026', lnA3, .F., 'APROX', '628', ''
|
||||
DO VerifCascada WITH loRec, 'A4 (APROX fara id_articol, treapta 4)', '9999700004', 'REVIZIE TEHNICA ANUALA 09/2026', lnA4, .F., 'APROX', '628', ''
|
||||
DO VerifCascada WITH loRec, 'A5 (ISTORIC cont sintetic, treapta 5)', '9999700005', 'MARFA NOUA NEASEMANATOARE A5', lnA5, .F., 'ISTORIC', '628', ''
|
||||
DO VerifCascada WITH loRec, 'A6 (fara propunere)', '9999700006', 'SERVICIU UNIC FARA ISTORIC A6', lnA6, .T., '', '', ''
|
||||
DO VerifCascada WITH loRec, 'A7 (garda cheie scurta, articol numeric)', '9999700007', '8000070024443', lnA7, .T., '', '', ''
|
||||
|
||||
*=========================================================================
|
||||
* VERIFICARE PRIN RULARE - coada ghidata (Sectiunea C)
|
||||
*=========================================================================
|
||||
DO PrLogLocal WITH ''
|
||||
DO PrLogLocal WITH '########## VERIFICARE C - CoadaContabilizareEF ##########'
|
||||
LOCAL loCoada
|
||||
loCoada = CREATEOBJECT('CoadaContabilizareEF')
|
||||
|
||||
LOCAL lcIdsC
|
||||
lcIdsC = TRANSFORM(lnC1) + ',' + TRANSFORM(lnC2) + ',' + TRANSFORM(lnC3) + ',' + TRANSFORM(lnC4)
|
||||
goExecutor.oExecute("SELECT id, NVL(id_fact,0) AS id_fact, NVL(cod_fiscal_emitent,'') AS cod_fiscal, xfurnizor, NVL(xnumar_act,'') AS numar_act" + ;
|
||||
" FROM ANAF_EFACTURA WHERE id IN (" + lcIdsC + ") ORDER BY id", 'crsCTestRaw')
|
||||
SELECT id, id_fact, cod_fiscal, 0 AS idpartroa, 0 AS eligibil_lot, SPACE(120) AS motiv_lot, 0 AS ales, xfurnizor, numar_act ;
|
||||
FROM crsCTestRaw INTO CURSOR crsCTest READWRITE
|
||||
USE IN (SELECT('crsCTestRaw'))
|
||||
|
||||
loCoada.MarcheazaEligibilitate('crsCTest', .F.)
|
||||
|
||||
DO PrVerificaEligibil WITH 'C1 (eligibila)', lnC1, .T., ''
|
||||
DO PrVerificaEligibil WITH 'C2 (eligibila, avertisment partener inactiv)', lnC2, .T., 'partenerul gasit este inactiv in ROA'
|
||||
DO PrVerificaEligibil WITH 'C3 (neeligibila - deja contabilizata)', lnC3, .F., 'factura este deja importata in contabilitate'
|
||||
DO PrVerificaEligibil WITH 'C4 (eligibila, linie gestionabila)', lnC4, .T., ''
|
||||
|
||||
IF USED('crsCTest')
|
||||
USE IN (SELECT('crsCTest'))
|
||||
ENDIF
|
||||
|
||||
* Ruta(): fetch direct din view-ul de productie ANAF_VEFACTURA_DETALII, ca la coada reala
|
||||
DO PrVerificaRuta WITH 'C1 (Ruta asteptata 1 - Import contabilitate)', lnC1, loCoada, 1
|
||||
DO PrVerificaRuta WITH 'C4 (Ruta asteptata 2 - Import gestiune)', lnC4, loCoada, 2
|
||||
|
||||
DO PrLogLocal WITH ''
|
||||
DO PrLogLocal WITH '=== REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail) + ' ==='
|
||||
DO PrLogLocal WITH 'TOTAL: semanare + verificare terminate fara exceptie'
|
||||
CATCH TO loEx
|
||||
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE VerifCascada
|
||||
LPARAMETERS toRec, tcEticheta, tcCodFiscal, tcDenumire, tnIdEfacturaCurent, tlAsteaptaGol, tcSursaAsteptata, tcContAsteptat, tcAcontAsteptat
|
||||
|
||||
LOCAL loArt, lcSursa, llOk, lcDetaliu
|
||||
loArt = toRec.PotrivesteArticol(tcCodFiscal, .T., tcDenumire, tnIdEfacturaCurent, @lcSursa)
|
||||
|
||||
IF m.tlAsteaptaGol
|
||||
llOk = ISNULL(m.loArt) AND EMPTY(m.lcSursa)
|
||||
lcDetaliu = 'gasit=' + TRANSFORM(!ISNULL(m.loArt)) + ' sursa=[' + TRANSFORM(m.lcSursa) + ']'
|
||||
ELSE
|
||||
llOk = !ISNULL(m.loArt) AND UPPER(ALLTRIM(NVL(m.lcSursa,''))) == m.tcSursaAsteptata ;
|
||||
AND ALLTRIM(NVL(m.loArt.cont,'')) == m.tcContAsteptat AND ALLTRIM(NVL(m.loArt.acont,'')) == m.tcAcontAsteptat
|
||||
lcDetaliu = 'sursa=[' + TRANSFORM(m.lcSursa) + '] cont=[' + TRANSFORM(NVL(m.loArt.cont,'')) + '] acont=[' + TRANSFORM(NVL(m.loArt.acont,'')) + ']'
|
||||
ENDIF
|
||||
DO PrTest WITH tcEticheta, m.llOk, m.lcDetaliu
|
||||
|
||||
* paritate PotrivesteFactura pe aceeasi factura curenta
|
||||
LOCAL llSuccesFact, lcContFact, lcSursaFact
|
||||
llSuccesFact = toRec.PotrivesteFactura(m.tnIdEfacturaCurent, m.tcCodFiscal, .T.)
|
||||
lcContFact = ''
|
||||
lcSursaFact = ''
|
||||
IF m.llSuccesFact AND USED('crsPotrivireLinii') AND RECCOUNT('crsPotrivireLinii') > 0
|
||||
SELECT crsPotrivireLinii
|
||||
GO TOP
|
||||
lcContFact = ALLTRIM(NVL(cont,''))
|
||||
lcSursaFact = ALLTRIM(NVL(sursa_cont,''))
|
||||
ENDIF
|
||||
IF USED('crsPotrivireLinii')
|
||||
USE IN (SELECT('crsPotrivireLinii'))
|
||||
ENDIF
|
||||
DO PrLogLocal WITH ' PotrivesteFactura (paritate): cont=[' + m.lcContFact + '] sursa_cont=[' + m.lcSursaFact + ']'
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrVerificaEligibil
|
||||
LPARAMETERS tcEticheta, tnIdEfactura, tlEligibilAsteptat, tcMotivAsteptatConfirma
|
||||
LOCAL llOk, lnElig, lcMotiv
|
||||
lnElig = -1
|
||||
lcMotiv = '?'
|
||||
IF USED('crsCTest')
|
||||
SELECT crsCTest
|
||||
LOCATE FOR id = m.tnIdEfactura
|
||||
IF FOUND()
|
||||
lnElig = eligibil_lot
|
||||
lcMotiv = ALLTRIM(motiv_lot)
|
||||
ENDIF
|
||||
ENDIF
|
||||
llOk = (m.lnElig = IIF(m.tlEligibilAsteptat, 1, 0))
|
||||
IF !EMPTY(m.tcMotivAsteptatConfirma)
|
||||
llOk = m.llOk AND (m.lcMotiv == m.tcMotivAsteptatConfirma)
|
||||
ENDIF
|
||||
DO PrTest WITH tcEticheta, m.llOk, 'eligibil_lot=' + TRANSFORM(m.lnElig) + ' motiv_lot=[' + m.lcMotiv + ']'
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrVerificaRuta
|
||||
LPARAMETERS tcEticheta, tnIdEfactura, toCoada, tnRutaAsteptata
|
||||
LOCAL lnRuta
|
||||
IF USED('crsRutaTest')
|
||||
USE IN (SELECT('crsRutaTest'))
|
||||
ENDIF
|
||||
goExecutor.oExecute('SELECT id, id_efactura, nr, articol, cont, acont, sursa_cont, id_articol, in_stoc' + ;
|
||||
' FROM ANAF_VEFACTURA_DETALII WHERE id_efactura = ' + TRANSFORM(m.tnIdEfactura), 'crsRutaTest')
|
||||
lnRuta = toCoada.Ruta('crsRutaTest')
|
||||
DO PrTest WITH tcEticheta, (m.lnRuta = m.tnRutaAsteptata), 'Ruta()=' + TRANSFORM(m.lnRuta)
|
||||
IF USED('crsRutaTest')
|
||||
USE IN (SELECT('crsRutaTest'))
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrTest
|
||||
LPARAMETERS tcEticheta, tlOk, tcDetaliu
|
||||
IF tlOk
|
||||
gnPass = gnPass + 1
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
ENDIF
|
||||
DO PrLogLocal WITH ' ' + IIF(tlOk, 'PASS', 'FAIL') + ' ' + tcEticheta + ': ' + TRANSFORM(tcDetaliu)
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
* factura eFactura primita (achizitie), factura_emisa=0
|
||||
PROCEDURE InsFactura
|
||||
LPARAMETERS tcCif, tcFurnizor, tdData, tcNumar, tnFaraTva, tnTva, tnCuTva
|
||||
LOCAL lnId, lcData
|
||||
lcData = "TO_DATE('" + DTOS(tdData) + "','YYYYMMDD')"
|
||||
goExecutor.oExecute("INSERT INTO ANAF_EFACTURA (cod_fiscal_emitent, xdata_act, factura_emisa, xfurnizor, xnumar_act, xtotal_fara_tva, xtotal_tva, xtotal_cu_tva, xnume_valuta) VALUES ('" + ;
|
||||
tcCif + "', " + lcData + ", 0, '" + tcFurnizor + "', '" + tcNumar + "', " + TRANSFORM(m.tnFaraTva) + ", " + TRANSFORM(m.tnTva) + ", " + TRANSFORM(m.tnCuTva) + ", 'RON')", 'crsInsFact')
|
||||
lnId = 0
|
||||
goExecutor.oSelect2Value("SELECT SEQ_ANAF_EFACTURA.CURRVAL FROM DUAL", @lnId)
|
||||
RETURN lnId
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE InsLinie
|
||||
LPARAMETERS tnIdEfactura, tnNr, tcArticol, tcCont, tcAcont, tnIdArticol, tnFaraTva
|
||||
LOCAL lcCont, lcAcont, lcIdArt
|
||||
lcCont = IIF(EMPTY(m.tcCont), 'NULL', "'" + m.tcCont + "'")
|
||||
lcAcont = IIF(EMPTY(m.tcAcont), 'NULL', "'" + m.tcAcont + "'")
|
||||
lcIdArt = IIF(EMPTY(NVL(m.tnIdArticol,0)), 'NULL', TRANSFORM(m.tnIdArticol))
|
||||
goExecutor.oExecute("INSERT INTO ANAF_EFACTURA_DETALII (id_efactura, nr, articol, cantitate, um, pret, proctva, valoarefaratva, cont, acont, id_articol) VALUES (" + ;
|
||||
TRANSFORM(m.tnIdEfactura) + ", " + TRANSFORM(m.tnNr) + ", '" + m.tcArticol + "', 1, 'BUC', " + TRANSFORM(m.tnFaraTva) + ", 19, " + TRANSFORM(m.tnFaraTva) + ", " + m.lcCont + ", " + m.lcAcont + ", " + m.lcIdArt + ")", 'crsInsLinie')
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE InsPartener
|
||||
LPARAMETERS tcCodFiscal, tcDenumire, tnInactiv
|
||||
LOCAL lnId
|
||||
goExecutor.oExecute("INSERT INTO NOM_PARTENERI (cod_fiscal, denumire, inactiv) VALUES ('" + ;
|
||||
m.tcCodFiscal + "', '" + m.tcDenumire + "', " + TRANSFORM(m.tnInactiv) + ")", 'crsInsPart')
|
||||
lnId = 0
|
||||
goExecutor.oSelect2Value("SELECT SEQ_NOM_PARTENERI.CURRVAL FROM DUAL", @lnId)
|
||||
RETURN lnId
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
* document contabil de 2 linii: credit 401 (catre partenerul dat) + debit tcContDebit
|
||||
PROCEDURE InsDocAct
|
||||
LPARAMETERS tnCod, tdData, tnIdPartener, tcContDebit
|
||||
LOCAL lcData
|
||||
lcData = "TO_DATE('" + DTOS(m.tdData) + "','YYYYMMDD')"
|
||||
goExecutor.oExecute("INSERT INTO ACT (cod, dataact, scc, id_partc, suma, sters) VALUES (" + ;
|
||||
TRANSFORM(m.tnCod) + ", " + m.lcData + ", '401', " + TRANSFORM(m.tnIdPartener) + ", 100, 0)", 'crsInsActC')
|
||||
goExecutor.oExecute("INSERT INTO ACT (cod, dataact, scd, suma, sters) VALUES (" + ;
|
||||
TRANSFORM(m.tnCod) + ", " + m.lcData + ", '" + m.tcContDebit + "', 100, 0)", 'crsInsActD')
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
* idempotenta: sterge tot ce a semanat acest script (marcaj cod_fiscal_emitent LIKE '9999700%'
|
||||
* / xfurnizor LIKE 'ZZTEST%', ACT cod 96500001-96500099, NOM_PARTENERI cod_fiscal LIKE '%9999700%')
|
||||
PROCEDURE StergeFixturaImport
|
||||
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA_DETALII WHERE id_efactura IN (SELECT id FROM ANAF_EFACTURA WHERE cod_fiscal_emitent LIKE '9999700%' OR xfurnizor LIKE 'ZZTEST%')", 'crsDelLinii')
|
||||
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA WHERE cod_fiscal_emitent LIKE '9999700%' OR xfurnizor LIKE 'ZZTEST%'", 'crsDelFact')
|
||||
goExecutor.oExecute("DELETE FROM ACT WHERE cod BETWEEN 96500000 AND 96500099", 'crsDelAct')
|
||||
goExecutor.oExecute("DELETE FROM CORESP_TIP_PART WHERE id_part IN (SELECT id_part FROM NOM_PARTENERI WHERE cod_fiscal LIKE '%9999700%')", 'crsDelCorespTip')
|
||||
goExecutor.oExecute("DELETE FROM ADRESE_PARTENERI WHERE id_part IN (SELECT id_part FROM NOM_PARTENERI WHERE cod_fiscal LIKE '%9999700%')", 'crsDelAdrese')
|
||||
goExecutor.oExecute("DELETE FROM NOM_PARTENERI WHERE cod_fiscal LIKE '%9999700%'", 'crsDelPart')
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitDel')
|
||||
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
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrErrLocal
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
|
||||
ENDPROC
|
||||
20
utile/Teste/efactura_import/seed_test_import_efactura.ps1
Normal file
20
utile/Teste/efactura_import/seed_test_import_efactura.ps1
Normal file
@@ -0,0 +1,20 @@
|
||||
# seed_test_import_efactura.ps1 - semanare + verificare headless a setului de test manual pentru
|
||||
# ecranul de import eFactura. Scrie in schema de test MARIUSM_AUTO@ROA_CENTRAL - vezi antetul .prg.
|
||||
# Rulare: powershell -ExecutionPolicy Bypass -File seed_test_import_efactura.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
$Prg = Join-Path $Teste 'seed_test_import_efactura.prg'
|
||||
$Fxp = [IO.Path]::ChangeExtension($Prg, '.fxp')
|
||||
$Err = [IO.Path]::ChangeExtension($Prg, '.err')
|
||||
$Log = Join-Path $Teste 'seed_test_import_efactura_log.txt'
|
||||
$Vfp = 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe'
|
||||
|
||||
Remove-Item $Fxp, $Err, $Log -ErrorAction SilentlyContinue
|
||||
$p = Start-Process -FilePath $Vfp -ArgumentList '-A', '-T', "`"$Prg`"" -PassThru
|
||||
if (-not $p.WaitForExit(300000)) {
|
||||
$p.Kill()
|
||||
throw 'TIMEOUT: semanarea nu s-a terminat in 300s'
|
||||
}
|
||||
if (Test-Path $Err) { throw "Eroare de compilare: $(Get-Content $Err -Raw)" }
|
||||
if (-not (Test-Path $Log)) { throw "Lipseste logul $Log" }
|
||||
Get-Content $Log
|
||||
86
utile/Teste/efactura_import/sterge_test_import_efactura.prg
Normal file
86
utile/Teste/efactura_import/sterge_test_import_efactura.prg
Normal file
@@ -0,0 +1,86 @@
|
||||
* sterge_test_import_efactura.prg
|
||||
* Sterge setul de test semanat de seed_test_import_efactura.prg (schema MARIUSM_AUTO@ROA_CENTRAL).
|
||||
* Acelasi marcaj: ANAF_EFACTURA cu cod_fiscal_emitent LIKE 'RO9999700%' sau xfurnizor LIKE
|
||||
* 'ZZTEST%', ACT cod 96500001-96500099 (istoricul de cont B1/B2), NOM_PARTENERI cod_fiscal
|
||||
* LIKE 'RO9999700%'. Nu atinge EFACTURA_LOT_ACTIV (ramane activ pentru testarea manuala curenta).
|
||||
*
|
||||
* Daca facturile C1/C4 au fost importate manual din ecran (id_fact populat, document ACT scris),
|
||||
* stergerea de mai jos elimina oricum randurile ANAF_EFACTURA/ANAF_EFACTURA_DETALII - documentul
|
||||
* ACT ramane in contabilitate, dar isi pierde legatura cu eFactura. Testeaza intai anularea in
|
||||
* ecran daca vrei sa verifici acel flux, apoi ruleaza stergerea.
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File sterge_test_import_efactura.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog
|
||||
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\sterge_test_import_efactura_log.txt"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
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
|
||||
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle)
|
||||
|
||||
LOCAL lnLinii, lnFact, lnAct, lnPart
|
||||
lnLinii = 0
|
||||
lnFact = 0
|
||||
lnAct = 0
|
||||
lnPart = 0
|
||||
|
||||
goExecutor.oSelect2Value("SELECT COUNT(*) FROM ANAF_EFACTURA_DETALII WHERE id_efactura IN (SELECT id FROM ANAF_EFACTURA WHERE cod_fiscal_emitent LIKE 'RO9999700%' OR xfurnizor LIKE 'ZZTEST%')", @lnLinii)
|
||||
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA_DETALII WHERE id_efactura IN (SELECT id FROM ANAF_EFACTURA WHERE cod_fiscal_emitent LIKE 'RO9999700%' OR xfurnizor LIKE 'ZZTEST%')", 'crsDelLinii')
|
||||
DO PrLogLocal WITH 'sterse ' + TRANSFORM(lnLinii) + ' linii ANAF_EFACTURA_DETALII'
|
||||
|
||||
goExecutor.oSelect2Value("SELECT COUNT(*) FROM ANAF_EFACTURA WHERE cod_fiscal_emitent LIKE 'RO9999700%' OR xfurnizor LIKE 'ZZTEST%'", @lnFact)
|
||||
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA WHERE cod_fiscal_emitent LIKE 'RO9999700%' OR xfurnizor LIKE 'ZZTEST%'", 'crsDelFact')
|
||||
DO PrLogLocal WITH 'sterse ' + TRANSFORM(lnFact) + ' facturi ANAF_EFACTURA'
|
||||
|
||||
goExecutor.oSelect2Value("SELECT COUNT(*) FROM ACT WHERE cod BETWEEN 96500000 AND 96500099", @lnAct)
|
||||
goExecutor.oExecute("DELETE FROM ACT WHERE cod BETWEEN 96500000 AND 96500099", 'crsDelAct')
|
||||
DO PrLogLocal WITH 'sterse ' + TRANSFORM(lnAct) + ' randuri ACT (istoric de cont B1/B2)'
|
||||
|
||||
goExecutor.oExecute("DELETE FROM CORESP_TIP_PART WHERE id_part IN (SELECT id_part FROM NOM_PARTENERI WHERE cod_fiscal LIKE 'RO9999700%')", 'crsDelCorespTip')
|
||||
|
||||
TRY
|
||||
goExecutor.oSelect2Value("SELECT COUNT(*) FROM NOM_PARTENERI WHERE cod_fiscal LIKE 'RO9999700%'", @lnPart)
|
||||
goExecutor.oExecute("DELETE FROM NOM_PARTENERI WHERE cod_fiscal LIKE 'RO9999700%'", 'crsDelPart')
|
||||
DO PrLogLocal WITH 'sterse ' + TRANSFORM(lnPart) + ' NOM_PARTENERI'
|
||||
CATCH TO loExPart
|
||||
DO PrLogLocal WITH 'ATENTIE: NOM_PARTENERI nu s-a putut sterge complet (probabil referit de un document real, importat manual in timpul testarii): ' + loExPart.Message
|
||||
ENDTRY
|
||||
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitSterge')
|
||||
DO PrLogLocal WITH 'TOTAL: stergere terminata, COMMIT facut'
|
||||
CATCH TO loEx
|
||||
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
|
||||
TRY
|
||||
goExecutor.oExecute('ROLLBACK', 'crsRollbackSterge')
|
||||
CATCH
|
||||
ENDTRY
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
**********************************************************
|
||||
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
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrErrLocal
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
|
||||
ENDPROC
|
||||
20
utile/Teste/efactura_import/sterge_test_import_efactura.ps1
Normal file
20
utile/Teste/efactura_import/sterge_test_import_efactura.ps1
Normal file
@@ -0,0 +1,20 @@
|
||||
# sterge_test_import_efactura.ps1 - sterge headless setul de test semanat de
|
||||
# seed_test_import_efactura.prg, pe schema MARIUSM_AUTO@ROA_CENTRAL.
|
||||
# Rulare: powershell -ExecutionPolicy Bypass -File sterge_test_import_efactura.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
$Prg = Join-Path $Teste 'sterge_test_import_efactura.prg'
|
||||
$Fxp = [IO.Path]::ChangeExtension($Prg, '.fxp')
|
||||
$Err = [IO.Path]::ChangeExtension($Prg, '.err')
|
||||
$Log = Join-Path $Teste 'sterge_test_import_efactura_log.txt'
|
||||
$Vfp = 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe'
|
||||
|
||||
Remove-Item $Fxp, $Err, $Log -ErrorAction SilentlyContinue
|
||||
$p = Start-Process -FilePath $Vfp -ArgumentList '-A', '-T', "`"$Prg`"" -PassThru
|
||||
if (-not $p.WaitForExit(300000)) {
|
||||
$p.Kill()
|
||||
throw 'TIMEOUT: stergerea nu s-a terminat in 300s'
|
||||
}
|
||||
if (Test-Path $Err) { throw "Eroare de compilare: $(Get-Content $Err -Raw)" }
|
||||
if (-not (Test-Path $Log)) { throw "Lipseste logul $Log" }
|
||||
Get-Content $Log
|
||||
142
utile/Teste/efactura_import/test_anulare_lot_ui.prg
Normal file
142
utile/Teste/efactura_import/test_anulare_lot_ui.prg
Normal file
@@ -0,0 +1,142 @@
|
||||
* test_anulare_lot_ui.prg
|
||||
* Verifica ecranul de confirmare a anularii in bloc (frm_anulare_lot_efactura,
|
||||
* COMUN\clase\anaf_efactura.vc2): gridurile crsAcceptate/crsRefuzate se leaga, avertismentul
|
||||
* de risc e vizibil, butonul de confirmare e dezactivat cand lista de acceptate e goala, si
|
||||
* decizia (gnButon) se intoarce corect pentru ambele butoane. Fara Show(1) (modal): formularul
|
||||
* e creat cu WindowType=0 si butoanele sunt actionate direct (.Click()).
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_anulare_lot_ui.prg"
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcUILog
|
||||
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_anulare_lot_ui_log.txt"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
PUBLIC gnPass, gnFail
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
TRY
|
||||
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 anulare_lot_ef ADDITIVE
|
||||
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle)
|
||||
|
||||
*=========================================================================
|
||||
DO PrLogLocal WITH '=== TEST 1: lista de acceptate goala -> griduri legate, avertisment vizibil, buton confirma dezactivat, Renunta intoarce gnButon=2 ==='
|
||||
DO CreeazaCursoareFixtura WITH .F.
|
||||
|
||||
LOCAL loForm1
|
||||
loForm1 = CREATEOBJECT('frm_anulare_lot_efactura')
|
||||
loForm1.WindowType = 0
|
||||
|
||||
DO TVerdict WITH TYPE('loForm1.grdAcceptate') = 'O', 'T1.1 grdAcceptate exista pe formular', TYPE('loForm1.grdAcceptate')
|
||||
DO TVerdict WITH TYPE('loForm1.grdRefuzate') = 'O', 'T1.2 grdRefuzate exista pe formular', TYPE('loForm1.grdRefuzate')
|
||||
DO TVerdict WITH UPPER(loForm1.grdAcceptate.RecordSource) == 'CRSACCEPTATE', 'T1.3 grdAcceptate legat pe crsAcceptate', loForm1.grdAcceptate.RecordSource
|
||||
DO TVerdict WITH UPPER(loForm1.grdRefuzate.RecordSource) == 'CRSREFUZATE', 'T1.4 grdRefuzate legat pe crsRefuzate', loForm1.grdRefuzate.RecordSource
|
||||
DO TVerdict WITH RECCOUNT('crsAcceptate') = 0, 'T1.5 crsAcceptate e gol (fixtura test)', TRANSFORM(RECCOUNT('crsAcceptate'))
|
||||
DO TVerdict WITH RECCOUNT('crsRefuzate') = 2, 'T1.6 crsRefuzate are cele 2 randuri fixtura', TRANSFORM(RECCOUNT('crsRefuzate'))
|
||||
DO TVerdict WITH !EMPTY(loForm1.lblAvertisment.Caption), 'T1.7 avertismentul de risc e vizibil (Caption ne-gol)', '[' + loForm1.lblAvertisment.Caption + ']'
|
||||
DO TVerdict WITH ('MODIFICATA' $ UPPER(loForm1.lblAvertisment.Caption)) AND ('DEPUS' $ UPPER(loForm1.lblAvertisment.Caption)), 'T1.8 avertismentul mentioneaza cele doua cazuri neverificabile automat', '[' + loForm1.lblAvertisment.Caption + ']'
|
||||
DO TVerdict WITH loForm1.lblAvertisment.Visible, 'T1.9 lblAvertisment.Visible = .T.', TRANSFORM(loForm1.lblAvertisment.Visible)
|
||||
DO TVerdict WITH !loForm1.cmdConfirma.Enabled, 'T1.10 butonul de confirmare e dezactivat (lista de acceptate goala)', TRANSFORM(loForm1.cmdConfirma.Enabled)
|
||||
|
||||
gnButon = 0
|
||||
loForm1.But_renunt1.Click()
|
||||
DO TVerdict WITH gnButon = 2, 'T1.11 click pe Renunta intoarce gnButon=2', TRANSFORM(gnButon)
|
||||
* But_renunt1.Click() a rulat deja do_renunt -> This.Release: formularul nu mai exista, nu se mai elibereaza inca o data
|
||||
|
||||
*=========================================================================
|
||||
DO PrLogLocal WITH '=== TEST 2: lista de acceptate cu randuri -> buton confirma activ, Confirma anularea intoarce gnButon=1 ==='
|
||||
DO CreeazaCursoareFixtura WITH .T.
|
||||
|
||||
LOCAL loForm2
|
||||
loForm2 = CREATEOBJECT('frm_anulare_lot_efactura')
|
||||
loForm2.WindowType = 0
|
||||
|
||||
DO TVerdict WITH RECCOUNT('crsAcceptate') = 2, 'T2.1 crsAcceptate are cele 2 randuri fixtura', TRANSFORM(RECCOUNT('crsAcceptate'))
|
||||
DO TVerdict WITH loForm2.cmdConfirma.Enabled, 'T2.2 butonul de confirmare e activ (lista de acceptate nu e goala)', TRANSFORM(loForm2.cmdConfirma.Enabled)
|
||||
|
||||
gnButon = 0
|
||||
loForm2.cmdConfirma.Click()
|
||||
DO TVerdict WITH gnButon = 1, 'T2.3 click pe Confirma anularea intoarce gnButon=1', TRANSFORM(gnButon)
|
||||
* cmdConfirma.Click() a rulat deja do_termin -> This.Release: formularul nu mai exista, nu se mai elibereaza inca o data
|
||||
|
||||
IF USED('crsAcceptate')
|
||||
USE IN (SELECT('crsAcceptate'))
|
||||
ENDIF
|
||||
IF USED('crsRefuzate')
|
||||
USE IN (SELECT('crsRefuzate'))
|
||||
ENDIF
|
||||
|
||||
DO PrLogLocal WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
||||
DO PrLogLocal WITH IIF(gnFail = 0, 'TOTAL: test terminat OK', 'TOTAL: test terminat CU ESECURI')
|
||||
CATCH TO loEx
|
||||
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
**********************************************************
|
||||
* creeaza crsAcceptate/crsRefuzate cu structura AnulareLotEF.CreeazaCursoareGoale, umplute cu
|
||||
* randuri fabricate (fara Oracle) - tlCuAcceptate=.T. adauga 2 randuri in crsAcceptate
|
||||
PROCEDURE CreeazaCursoareFixtura
|
||||
LPARAMETERS tlCuAcceptate
|
||||
|
||||
IF USED('crsAcceptate')
|
||||
USE IN (SELECT('crsAcceptate'))
|
||||
ENDIF
|
||||
CREATE CURSOR crsAcceptate (id_efactura N(20), id_fact N(20), cod N(15), an N(4), luna N(2), numar_act C(30), furnizor C(250), suma N(20,4))
|
||||
IF tlCuAcceptate
|
||||
INSERT INTO crsAcceptate VALUES (1001, 5001, 96001, 2026, 9, 'TEST-FIX-1', 'FIXTURA UI ANULARE 1', 119.00)
|
||||
INSERT INTO crsAcceptate VALUES (1002, 5002, 96002, 2026, 9, 'TEST-FIX-2', 'FIXTURA UI ANULARE 2', 238.00)
|
||||
ENDIF
|
||||
|
||||
IF USED('crsRefuzate')
|
||||
USE IN (SELECT('crsRefuzate'))
|
||||
ENDIF
|
||||
CREATE CURSOR crsRefuzate (id_efactura N(20), id_fact N(20), cod N(15), an N(4), luna N(2), numar_act C(30), furnizor C(250), suma N(20,4), motiv C(200))
|
||||
INSERT INTO crsRefuzate VALUES (1003, 0, 0, 0, 0, 'TEST-FIX-3', 'FIXTURA UI ANULARE 3', 50.00, 'factura nu e importata in contabilitate (id_fact lipseste)')
|
||||
INSERT INTO crsRefuzate VALUES (1004, 5004, 96004, 2026, 9, 'TEST-FIX-4', 'FIXTURA UI ANULARE 4', 75.00, 'documentul are incasari/plati atasate - anuleaza manual nota 96004 din registrul jurnal')
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE TVerdict
|
||||
LPARAMETERS tlOk, tcNume, tcDetalii
|
||||
IF tlOk
|
||||
gnPass = gnPass + 1
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
ENDIF
|
||||
DO PrLogLocal WITH IIF(tlOk, 'PASS ', 'FAIL ') + tcNume + ' | ' + TRANSFORM(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
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrErrLocal
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
|
||||
ENDPROC
|
||||
341
utile/Teste/efactura_import/test_cablare_partener_ef.prg
Normal file
341
utile/Teste/efactura_import/test_cablare_partener_ef.prg
Normal file
@@ -0,0 +1,341 @@
|
||||
* test_cablare_partener_ef.prg
|
||||
* Verifica prin formularul real (frm_import_efactura, COMUN\clase\anaf_efactura.vc2) cele patru
|
||||
* ramuri ale rezolvarii partenerului asa cum le foloseste Thisform.CompleteazaFactura(): un
|
||||
* singur activ, doar inactiv, niciunul (creare automata), doi+ activi (ambiguu, nu alege automat).
|
||||
* Pentru ramura ambigua verifica si MarcheazaEligibilitate (CoadaContabilizareEF) - randul ramane
|
||||
* neeligibil/nebifat - si alegerea manuala (replica logica din cauta_partener, anaf_efactura.vc2
|
||||
* linia 11977) care recalculeaza eligibilitatea. Verifica separat garda din do_executa: cu
|
||||
* IdPartROA gol, do_executa(1) (apel numeric, ca din coada) se intoarce fara AMESSAGEBOX.
|
||||
* Verifica si garda de facturi duplicate din do_executa (mock_facturi_duplicate.prg): in lot
|
||||
* refuza fara AMESSAGEBOX si scrie motivul in motiv_lot, interactiv intrebarea ramane neschimbata.
|
||||
* Fixtura proprie NOM_PARTENERI (CIF 9995000x) si crsFacturi construit manual (nu prin
|
||||
* gencursor/Oracle), ca sa poata injecta CIF-uri ambigue/inexistente. Pe schema
|
||||
* MARIUSM_AUTO@ROA_CENTRAL.
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_cablare_partener_ef.prg"
|
||||
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_cablare_partener_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
|
||||
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_cablare_partener_ef_log.txt"
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
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
|
||||
SET PROCEDURE TO 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\mock_facturi_duplicate.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
|
||||
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle)
|
||||
|
||||
DO StergeFixtura
|
||||
|
||||
*-- ramura 1: un singur partener activ (RO99950001)
|
||||
goExecutor.oExecute("INSERT INTO NOM_PARTENERI (cod_fiscal, denumire, inactiv) VALUES ('RO99950001', 'FIXTURA CABLARE T1', 0)", 'crsInsCB1')
|
||||
*-- ramura 2: doar un partener inactiv (99950002)
|
||||
goExecutor.oExecute("INSERT INTO NOM_PARTENERI (cod_fiscal, denumire, inactiv) VALUES ('99950002', 'FIXTURA CABLARE T2', 1)", 'crsInsCB2')
|
||||
*-- ramura 4: doi parteneri activi pe acelasi CIF (99950003), unul cu RO si unul fara
|
||||
goExecutor.oExecute("INSERT INTO NOM_PARTENERI (cod_fiscal, denumire, inactiv) VALUES ('RO99950003', 'FIXTURA CABLARE T3 RO', 0)", 'crsInsCB3a')
|
||||
goExecutor.oExecute("INSERT INTO NOM_PARTENERI (cod_fiscal, denumire, inactiv) VALUES ('99950003', 'FIXTURA CABLARE T3 FARA RO', 0)", 'crsInsCB3b')
|
||||
*-- ramura 3 (99950004): niciun partener - se creeaza automat de CompleteazaFactura
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitFixtura')
|
||||
|
||||
LOCAL lnIdPart1, lnIdPart2, lnIdPart3a
|
||||
goExecutor.oSelecteaza2Value("select id_part from nom_parteneri where cod_fiscal = 'RO99950001'", @lnIdPart1)
|
||||
goExecutor.oSelecteaza2Value("select id_part from nom_parteneri where cod_fiscal = '99950002'", @lnIdPart2)
|
||||
goExecutor.oSelecteaza2Value("select id_part from nom_parteneri where cod_fiscal = 'RO99950003'", @lnIdPart3a)
|
||||
DO PrLogLocal WITH 'id partener fixtura: T1=' + TRANSFORM(m.lnIdPart1) + ' T2=' + TRANSFORM(m.lnIdPart2) + ' T3RO=' + TRANSFORM(m.lnIdPart3a)
|
||||
|
||||
*-- crsFacturi/crsDetaliiFacturi si cursoarele ajutatoare cerute de Init, copie din import_efactura.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, 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) ;
|
||||
VALUES (0, 999500001, 0, DATE(), 'TEST-CAB-1', 'FIXTURA CABLARE T1', 'FIXTURA CABLARE T1', 'RO99950001', ;
|
||||
100, 'RON', 0, 0, 0, 0, 'x', 1, '', 0)
|
||||
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) ;
|
||||
VALUES (0, 999500002, 0, DATE(), 'TEST-CAB-2', 'FIXTURA CABLARE T2', 'FIXTURA CABLARE T2', '99950002', ;
|
||||
100, 'RON', 0, 0, 0, 0, 'x', 1, '', 0)
|
||||
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) ;
|
||||
VALUES (0, 999500003, 0, DATE(), 'TEST-CAB-3', 'FIXTURA CABLARE T3 NOU', 'FIXTURA CABLARE T3 NOU', '99950004', ;
|
||||
100, 'RON', 0, 0, 0, 0, 'x', 1, '', 0)
|
||||
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) ;
|
||||
VALUES (0, 999500004, 0, DATE(), 'TEST-CAB-4', 'FIXTURA CABLARE T4 AMBIGUU', 'FIXTURA CABLARE T4 AMBIGUU', '99950003', ;
|
||||
100, 'RON', 0, 0, 0, 0, 'x', 1, '', 0)
|
||||
|
||||
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)
|
||||
ENDTEXT
|
||||
IF USED('crsDetaliiFacturi')
|
||||
USE IN crsDetaliiFacturi
|
||||
ENDIF
|
||||
CREATE CURSOR crsDetaliiFacturi (&lcSchemaDetalii)
|
||||
|
||||
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)
|
||||
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (12, 'Terti','628', 0, 12)
|
||||
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)
|
||||
INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (34, 'Servicii vandute','704', 0, 6)
|
||||
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
|
||||
SELECT crsFacturi
|
||||
loForm = CREATEOBJECT('frm_import_efactura', .T.)
|
||||
loForm.WindowType = 0
|
||||
DO PrTest WITH 'formular instantiat', TYPE('loForm') == 'O'
|
||||
|
||||
*=== ramura 1: un singur partener activ -> IdPartROA corect, motiv_lot ramane gol ===
|
||||
LOCAL lnRecno1
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = 999500001
|
||||
lnRecno1 = RECNO()
|
||||
TRY
|
||||
GO m.lnRecno1
|
||||
CATCH
|
||||
GO TOP
|
||||
ENDTRY
|
||||
loForm.CompleteazaFactura()
|
||||
DO PrTest WITH 'ramura1 IdPartROA = partener activ', NVL(crsFacturi.IdPartROA, 0) = m.lnIdPart1
|
||||
DO PrTest WITH 'ramura1 motiv_lot ramane gol (fara zgomot)', EMPTY(NVL(crsFacturi.motiv_lot, ''))
|
||||
|
||||
*=== ramura 2: doar inactiv -> IdPartROA pe cel inactiv, motiv_lot atentioneaza ===
|
||||
LOCAL lnRecno2
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = 999500002
|
||||
lnRecno2 = RECNO()
|
||||
TRY
|
||||
GO m.lnRecno2
|
||||
CATCH
|
||||
GO TOP
|
||||
ENDTRY
|
||||
loForm.CompleteazaFactura()
|
||||
DO PrTest WITH 'ramura2 IdPartROA = partener inactiv', NVL(crsFacturi.IdPartROA, 0) = m.lnIdPart2
|
||||
DO PrTest WITH 'ramura2 motiv_lot atentioneaza', !EMPTY(NVL(crsFacturi.motiv_lot, ''))
|
||||
|
||||
*=== ramura 3: niciun partener -> se creeaza in NOM_PARTENERI, IdPartROA pe noul id ===
|
||||
LOCAL lnRecno3, lnIdNouCreat
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = 999500003
|
||||
lnRecno3 = RECNO()
|
||||
TRY
|
||||
GO m.lnRecno3
|
||||
CATCH
|
||||
GO TOP
|
||||
ENDTRY
|
||||
loForm.CompleteazaFactura()
|
||||
lnIdNouCreat = NVL(crsFacturi.IdPartROA, 0)
|
||||
DO PrTest WITH 'ramura3 IdPartROA > 0 (partener creat)', m.lnIdNouCreat > 0
|
||||
DO PrTest WITH 'ramura3 motiv_lot atentioneaza', !EMPTY(NVL(crsFacturi.motiv_lot, ''))
|
||||
IF m.lnIdNouCreat > 0
|
||||
LOCAL llGasitNou
|
||||
llGasitNou = goExecutor.oExecuta("select id_part, cod_fiscal from nom_parteneri where id_part = " + TRANSFORM(m.lnIdNouCreat), 'cVerifCB3')
|
||||
IF m.llGasitNou
|
||||
DO PrTest WITH 'ramura3 scris in Oracle cu CIF exact 99950004', RECCOUNT('cVerifCB3') = 1 AND ALLTRIM(cVerifCB3.cod_fiscal) == '99950004'
|
||||
USE IN (SELECT('cVerifCB3'))
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
*=== ramura 4: doi+ activi -> CompleteazaFactura NU seteaza IdPartROA ===
|
||||
LOCAL lnRecno4
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = 999500004
|
||||
lnRecno4 = RECNO()
|
||||
TRY
|
||||
GO m.lnRecno4
|
||||
CATCH
|
||||
GO TOP
|
||||
ENDTRY
|
||||
loForm.CompleteazaFactura()
|
||||
DO PrTest WITH 'ramura4 IdPartROA ramane gol (ambiguu, nu alege automat)', EMPTY(NVL(crsFacturi.IdPartROA, 0))
|
||||
|
||||
*=== ramura 4: MarcheazaEligibilitate lasa randul neeligibil si nebifat ===
|
||||
LOCAL loCoada
|
||||
loCoada = CREATEOBJECT('CoadaContabilizareEF')
|
||||
loCoada.MarcheazaEligibilitate('crsFacturi', .F.)
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = 999500004
|
||||
DO PrTest WITH 'ramura4 dupa MarcheazaEligibilitate: eligibil_lot=0', eligibil_lot = 0
|
||||
DO PrTest WITH 'ramura4 dupa MarcheazaEligibilitate: ales=0 (nu intra in lot)', ales = 0
|
||||
|
||||
*=== garda do_executa: cu IdPartROA gol, apel numeric (ca din coada) se intoarce fara AMESSAGEBOX ===
|
||||
TRY
|
||||
GO m.lnRecno4
|
||||
CATCH
|
||||
GO TOP
|
||||
ENDTRY
|
||||
DO PrLogLocal WITH 'inainte de do_executa(1) pe randul ambiguu (IdPartROA gol)'
|
||||
loForm.do_executa(1)
|
||||
DO PrTest WITH 'do_executa(1) revine fara sa blocheze (nicio deschidere de AMESSAGEBOX)', .T.
|
||||
|
||||
*=== garda do_executa: factura duplicata - in lot refuza fara AMESSAGEBOX, motiv in motiv_lot ===
|
||||
PUBLIC gcMockDuplicat, gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns
|
||||
gcMockDuplicat = 'Factura TEST-DUP, 100.00 lei, mai exista inregistrata in perioada test.'
|
||||
LOCAL lnRecnoDup
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = 999500001
|
||||
lnRecnoDup = RECNO()
|
||||
TRY
|
||||
GO m.lnRecnoDup
|
||||
CATCH
|
||||
GO TOP
|
||||
ENDTRY
|
||||
REPLACE cont WITH '401' IN crsFacturi
|
||||
GO m.lnRecnoDup
|
||||
gcMockUltimMesaj = ''
|
||||
loForm.do_executa(1)
|
||||
DO PrTest WITH 'duplicat in lot: nu deschide AMESSAGEBOX', EMPTY(m.gcMockUltimMesaj)
|
||||
DO PrTest WITH 'duplicat in lot: motiv_lot primeste textul de duplicate', ALLTRIM(NVL(crsFacturi.motiv_lot, '')) == ALLTRIM(m.gcMockDuplicat)
|
||||
|
||||
*=== garda do_executa: aceeasi factura duplicata, interactiv - intrebarea ramane neschimbata ===
|
||||
GO m.lnRecnoDup
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockRaspuns = 7
|
||||
loForm.do_executa()
|
||||
DO PrTest WITH 'duplicat interactiv: AMESSAGEBOX intrebat cu textul de duplicate', 'Doriti sa continuati?' $ m.gcMockUltimMesaj AND m.gcMockDuplicat $ m.gcMockUltimMesaj
|
||||
gnMockRaspuns = 6
|
||||
|
||||
*=== ramura 4: alegere manuala (replica cauta_partener, anaf_efactura.vc2:11985-11991) ===
|
||||
TRY
|
||||
GO m.lnRecno4
|
||||
CATCH
|
||||
GO TOP
|
||||
ENDTRY
|
||||
REPLACE PartenerROA WITH 'FIXTURA CABLARE T3 RO', IdPartROA WITH m.lnIdPart3a, codfiscalROA WITH 'RO99950003' IN crsFacturi
|
||||
LOCAL loCoadaElig, lcMotivLot
|
||||
loCoadaElig = CREATEOBJECT('CoadaContabilizareEF')
|
||||
lcMotivLot = loCoadaElig.EligibilRand(crsFacturi.id_fact, crsFacturi.cod_fiscal, 1, 0, .F., crsFacturi.numar_act)
|
||||
REPLACE eligibil_lot WITH IIF(EMPTY(m.lcMotivLot), 1, 0), motiv_lot WITH m.lcMotivLot IN crsFacturi
|
||||
loForm.grdFacturi.Refresh()
|
||||
loForm.ActualizeazaContoare()
|
||||
DO PrTest WITH 'ramura4 dupa alegere manuala: eligibil_lot=1', crsFacturi.eligibil_lot = 1
|
||||
|
||||
loForm.Release()
|
||||
IF USED('crsFacturi')
|
||||
USE IN crsFacturi
|
||||
ENDIF
|
||||
IF USED('crsDetaliiFacturi')
|
||||
USE IN crsDetaliiFacturi
|
||||
ENDIF
|
||||
IF USED('cMockFactDbl')
|
||||
USE IN cMockFactDbl
|
||||
ENDIF
|
||||
|
||||
DO StergeFixtura
|
||||
LOCAL lnLeftover
|
||||
goExecutor.oSelecteaza2Value("select count(*) from nom_parteneri where cod_fiscal in ('RO99950001','99950002','RO99950003','99950003','99950004') or id_part = " + TRANSFORM(m.lnIdNouCreat), @lnLeftover)
|
||||
DO PrTest WITH 'cleanup: 0 leftover in NOM_PARTENERI', NVL(m.lnLeftover, -1) = 0
|
||||
|
||||
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
|
||||
DO StergeFixtura
|
||||
CATCH
|
||||
ENDTRY
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE StergeFixtura
|
||||
goExecutor.oExecute("DELETE FROM CORESP_TIP_PART WHERE id_part IN (SELECT id_part FROM NOM_PARTENERI WHERE cod_fiscal IN ('RO99950001','99950002','RO99950003','99950003','99950004'))", 'crsDelCorespTipCB')
|
||||
goExecutor.oExecute("DELETE FROM NOM_PARTENERI WHERE cod_fiscal IN ('RO99950001','99950002','RO99950003','99950003','99950004')", 'crsDelPartCB')
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitDelCB')
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrTest
|
||||
LPARAMETERS tcEticheta, tlOk
|
||||
IF tlOk
|
||||
gnPass = gnPass + 1
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
ENDIF
|
||||
DO PrLogLocal WITH ' ' + tcEticheta + ': ' + IIF(tlOk, 'OK', 'FAIL')
|
||||
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
|
||||
693
utile/Teste/efactura_import/test_import_efactura_smoke.prg
Normal file
693
utile/Teste/efactura_import/test_import_efactura_smoke.prg
Normal file
@@ -0,0 +1,693 @@
|
||||
* test_import_efactura_smoke.prg
|
||||
* Test de fumat pe frm_import_efactura (COMUN\clase\anaf_efactura.vc2), coada ghidata de
|
||||
* contabilizare: instantiere fara exceptie in ambele configuratii EFACTURA_LOT_ACTIV (0/1),
|
||||
* vizibilitate Cmd_Anulare1 si evaluarea EFECTIVA a expresiilor dinamice
|
||||
* (DynamicBackColor/DynamicForeColor pe grdFacturi.cAles/cNr si grdDetaliiFacturi.cCont/cAcont,
|
||||
* metoda When pe cAles) - nu doar atribuirea lor ca text.
|
||||
* Fixtura de cursoare (crsFacturi/crsDetaliiFacturi + cursoare helper) copiata din
|
||||
* test_sursa_cont_ui.prg, cu schema actualizata (eligibil_lot/motiv_lot/eroare_lot pe
|
||||
* crsFacturi). Foloseste factura fixture deja importata de test_import_zip_efactura
|
||||
* (fixtura_zip_din_baza.prg); randurile sintetice pentru culori sunt doar in cursor, in memorie.
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File test_import_efactura_smoke.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcUILog, gnPass, gnFail
|
||||
gcUILog = 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_import_efactura_smoke_log.txt'
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO TErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
* mock ADDITIV inaintea test_init_env_auto: la nume duplicat de procedura VFP foloseste fisierul cautat PRIMUL
|
||||
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', 2026, 1
|
||||
SET PROCEDURE TO import_efactura.prg ADDITIVE
|
||||
SET PROCEDURE TO recunoastere_articol_ef.prg ADDITIVE
|
||||
SET PROCEDURE TO coada_contabilizare_ef.prg ADDITIVE
|
||||
SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\fixtura_zip_din_baza.prg') ADDITIVE
|
||||
SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\optiuni_test.prg') ADDITIVE
|
||||
SalveazaOptiuni('EFACTURA_LOT_ACTIV')
|
||||
|
||||
DO TLog WITH 'INIT gnHandle=' + TRANSFORM(gnHandle) + ' gcS=' + TRANSFORM(gcS)
|
||||
|
||||
* factura fixture deja existenta (importata de test_import_zip_efactura.prg) - acelasi criteriu
|
||||
* determinist ca in test_import_zip_efactura (fixtura_zip_din_baza.prg); perioada se sincronizeaza
|
||||
* pe data reala a facturii, ca filtrul crsFacturi de mai jos sa o gaseasca
|
||||
lnFixtIdEF = FixturaIdEFactura()
|
||||
DO TLog WITH 'id_efactura fixture=' + TRANSFORM(lnFixtIdEF)
|
||||
IF NVL(lnFixtIdEF,0) = 0
|
||||
DO TVerdict WITH .F., 'PRECONDITIE fixture', 'lipseste anaf_efactura - ruleaza intai test_import_zip_efactura.prg'
|
||||
DO TLog WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
||||
QUIT
|
||||
ENDIF
|
||||
FixturaSincronizeazaPerioada()
|
||||
|
||||
* ---------- cursoare, copie fidela din vizImportEFactura (import_efactura.prg), cu schema
|
||||
* curenta (eligibil_lot/motiv_lot/eroare_lot pe crsFacturi, sursa_cont pe crsDetaliiFacturi) ----------
|
||||
lcData1 = '01' + Padl(Int(m.gnLuna),2,'0') + Alltrim(Str(m.gnAn))
|
||||
ldData1 = GOMONTH(DATE(m.gnAn, m.gnLuna, 1), 1)
|
||||
lcData2 = '01' + PADL(MONTH(m.ldData1),2,'0') + ALLTRIM(STR(YEAR(m.ldData1)))
|
||||
TEXT To lcSchema 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, eligibil_lot N(1), motiv_lot V(120), eroare_lot N(1), de_completat V(200), gest c(1), part_inactiv N(1)
|
||||
ENDTEXT
|
||||
TEXT To lcSelect TEXTMERGE Noshow
|
||||
SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, partener, id_incarcare, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, case when jtotctva is null then null when NVL(nume_valuta,'RON') <> 'RON' then null else decode(creditnote,0,1,-1) * NVL(total_cu_tva,0.00) - (NVL(jtotctva,0.00) - NVL(jtva_ti,0.00)) end as diferenta, procesat,
|
||||
'' as SerieActRoa, CAST(null as Number(14)) as NrActRoa, CAST(null as Number(20)) as idPartRoa, '' as PartenerRoa, '' as codFiscalROA, CAST(null as Number(10)) as idValutaROA, '' as numeValutaROA, CAST(null as Number(16,6)) as cursROA,
|
||||
'' as Cont, '' as acont, 0 as TVAIncasare, '' as Fdoc, CAST(0 as Number(5)) as Id_Fdoc, '' as Nrord, CAST(0 as Number(10)) as id_Lucrare, '' as Contract, CAST(null as Number(10)) as id_ctr,
|
||||
'' Sectie, CAST(0 as Number(10)) as id_Sectie, '' as dst_chlt, CAST(0 as Number(10)) as id_Venchelt, '' as nresp, CAST(0 as Number(10)) as id_responsabil, 0 as completat, 0 as completatdet, creditnote, '' as explicatiaROA, 1 as eligibil_lot, '' as motiv_lot, 0 as eroare_lot, '' as de_completat, '' as gest, 0 as part_inactiv
|
||||
FROM anaf_vefactura_primit
|
||||
ENDTEXT
|
||||
lcOrder = [data_act,numar_act,data_raspuns]
|
||||
lcgroup = []
|
||||
lcFiltru = [(data_act >= to_date('] + m.lcData1 + [','ddmmyyyy') and data_act < to_date('] + m.lcData2 + [','ddmmyyyy')) or (data_act is null and data_raspuns >= to_date('] + m.lcData1 + [','ddmmyyyy'))]
|
||||
lcFiltruOriginal = []
|
||||
llModParam = .T.
|
||||
llAfiseaza = .F.
|
||||
|
||||
PRIVATE poFacturi, poFacturiDetalii
|
||||
poFacturi = Null
|
||||
poFacturiDetalii = Null
|
||||
|
||||
gencursor('poFacturi', 'crsFacturi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
|
||||
poFacturi.ca_baza1.afisare()
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = m.lnFixtIdEF
|
||||
DO TVerdict WITH FOUND(), 'setup: factura fixtura gasita in crsFacturi', 'FOUND=' + TRANSFORM(FOUND()) + ' din ' + TRANSFORM(RECCOUNT('crsFacturi')) + ' randuri'
|
||||
IF !FOUND()
|
||||
DO TLog WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
||||
QUIT
|
||||
ENDIF
|
||||
lnRecnoFixt = RECNO('crsFacturi')
|
||||
|
||||
TEXT To lcSchema 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)
|
||||
ENDTEXT
|
||||
TEXT To lcSelect Noshow
|
||||
select 0 as distribuie, CAST(0 as number(10)) as id_tip, id_articol, id_gestiune, cont, acont, sursa_cont, id, id_efactura, nr, articol, descriere, detalii, cantitate, um, um_iso, um_roa, pret, proctva, tiptva, valoarefaratva, discountfaratva, in_stoc, articol_roa, codmat_roa, codbare, codclient, codfurnizor, codcpv, codnc8, nume_gestiune, cgest, 0 as tva, 0 as pretv, 0 as tvav, 0 as pretvtva from anaf_vefactura_detalii
|
||||
ENDTEXT
|
||||
lcOrder = [nr]
|
||||
lcgroup = []
|
||||
lcFiltru = [id_efactura=] + ALLTRIM(STR(m.lnFixtIdEF))
|
||||
lcFiltruOriginal = []
|
||||
llModParam = .T.
|
||||
llAfiseaza = .F.
|
||||
|
||||
gencursor('poFacturiDetalii', 'crsDetaliiFacturiTemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
|
||||
poFacturiDetalii.ca_baza1.afisare()
|
||||
SELECT * FROM crsDetaliiFacturiTemp INTO CURSOR crsDetaliiFacturi READWRITE
|
||||
|
||||
* trei randuri sintetice, doar in cursor (fara scriere in Oracle), pentru cele trei culori sursa_cont
|
||||
SELECT crsDetaliiFacturi
|
||||
APPEND BLANK
|
||||
REPLACE id_efactura WITH m.lnFixtIdEF, nr WITH 991, articol WITH 'TEST SMOKE FARA PROPUNERE', cont WITH '628', acont WITH '4426', sursa_cont WITH '' IN crsDetaliiFacturi
|
||||
lnRecFara = RECNO('crsDetaliiFacturi')
|
||||
APPEND BLANK
|
||||
REPLACE id_efactura WITH m.lnFixtIdEF, nr WITH 992, articol WITH 'TEST SMOKE APROX', cont WITH '628', acont WITH '4426', sursa_cont WITH 'APROX' IN crsDetaliiFacturi
|
||||
lnRecAprox = RECNO('crsDetaliiFacturi')
|
||||
APPEND BLANK
|
||||
REPLACE id_efactura WITH m.lnFixtIdEF, nr WITH 993, articol WITH 'TEST SMOKE ISTORIC', cont WITH '628', acont WITH '4426', sursa_cont WITH 'ISTORIC' IN crsDetaliiFacturi
|
||||
lnRecIstoric = RECNO('crsDetaliiFacturi')
|
||||
DO TVerdict WITH RECCOUNT('crsDetaliiFacturi') >= 3, 'setup: crsDetaliiFacturi are cele 3 randuri sintetice', TRANSFORM(RECCOUNT('crsDetaliiFacturi')) + ' randuri'
|
||||
|
||||
* cursoare helper cerute de Init-ul formularului (copie din vizImportEFactura)
|
||||
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)
|
||||
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (12, 'Terti','628', 0, 12)
|
||||
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)
|
||||
INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (34, 'Servicii vandute','704', 0, 6)
|
||||
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
|
||||
|
||||
llSucces = 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
|
||||
|
||||
llSucces = 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
|
||||
|
||||
llSucces = goExecutor.oExecuta("select id, um, cod_um_iso, um_iso from vnom_um", 'cUM')
|
||||
SELECT cUM
|
||||
INDEX on id TAG id
|
||||
|
||||
DO TLog WITH 'setup: fixtura completa (crsFacturi/crsDetaliiFacturi/cursoare helper)'
|
||||
|
||||
* ================= CONFIG A: EFACTURA_LOT_ACTIV = 0 (implicit, coada stinsa) =================
|
||||
goExecutor.oExecuta("delete from optiuni where varname = 'EFACTURA_LOT_ACTIV'")
|
||||
actualizeaza_optiuni()
|
||||
|
||||
loFormA = Null
|
||||
TRY
|
||||
SELECT crsFacturi
|
||||
loFormA = Createobject("frm_import_efactura", .T.)
|
||||
loFormA.WindowType = 0
|
||||
DO TVerdict WITH TYPE('loFormA') = 'O', 'A1 frm_import_efactura instantiat fara exceptie (LOT_ACTIV=0)', TYPE('loFormA')
|
||||
CATCH TO loErrA
|
||||
DO TLog WITH 'EXCEPTIE A1: ' + loErrA.Message + ' | ' + loErrA.Procedure + ' linia ' + TRANSFORM(loErrA.LineNo)
|
||||
DO TVerdict WITH .F., 'A1 EXCEPTIE la instantiere (LOT_ACTIV=0)', loErrA.Message
|
||||
ENDTRY
|
||||
|
||||
IF TYPE('loFormA') = 'O'
|
||||
DO TVerdict WITH loFormA.lLotActiv = .F., 'A2 lLotActiv = .F. (optiune lipsa/0)', TRANSFORM(loFormA.lLotActiv)
|
||||
DO TVerdict WITH loFormA.Cmd_Anulare1.Visible = .F., 'A4 Cmd_Anulare1.Visible = .F.', TRANSFORM(loFormA.Cmd_Anulare1.Visible)
|
||||
|
||||
* ---------- evaluarea EFECTIVA a expresiilor dinamice, nu doar atribuirea lor ca text ----------
|
||||
* When e metoda compilata (nu proprietate-text ca DynamicBackColor) - se apeleaza direct
|
||||
TRY
|
||||
SELECT crsFacturi
|
||||
GO m.lnRecnoFixt
|
||||
REPLACE eligibil_lot WITH 1 IN crsFacturi
|
||||
llWhen1 = loFormA.grdFacturi.cAles._checkbox1.When()
|
||||
DO TVerdict WITH llWhen1 = .T., 'B1 cAles.When() = .T. pe rand eligibil_lot=1', TRANSFORM(llWhen1)
|
||||
|
||||
REPLACE eligibil_lot WITH 0 IN crsFacturi
|
||||
llWhen0 = loFormA.grdFacturi.cAles._checkbox1.When()
|
||||
DO TVerdict WITH llWhen0 = .F., 'B2 cAles.When() = .F. pe rand eligibil_lot=0', TRANSFORM(llWhen0)
|
||||
|
||||
lnColor0 = EVALUATE(loFormA.grdFacturi.cAles.DynamicBackColor)
|
||||
DO TVerdict WITH lnColor0 = RGB(220,220,220), 'B3 cAles.DynamicBackColor gri pe eligibil_lot=0', TRANSFORM(lnColor0)
|
||||
|
||||
REPLACE eligibil_lot WITH 1 IN crsFacturi
|
||||
lnColor1 = EVALUATE(loFormA.grdFacturi.cAles.DynamicBackColor)
|
||||
DO TVerdict WITH VARTYPE(lnColor1) = 'N', 'B4 cAles.DynamicBackColor evalueaza fara exceptie pe eligibil_lot=1', 'VARTYPE=' + VARTYPE(lnColor1) + ' val=' + TRANSFORM(lnColor1)
|
||||
CATCH TO loErrB
|
||||
DO TLog WITH 'EXCEPTIE B (cAles): ' + loErrB.Message + ' | ' + loErrB.Procedure + ' linia ' + TRANSFORM(loErrB.LineNo)
|
||||
DO TVerdict WITH .F., 'B EXCEPTIE la evaluarea cAles.When/DynamicBackColor', loErrB.Message
|
||||
ENDTRY
|
||||
|
||||
TRY
|
||||
SELECT crsFacturi
|
||||
lcExprBack = loFormA.grdFacturi.cNr.DynamicBackColor
|
||||
lcExprFore = loFormA.grdFacturi.cNr.DynamicForeColor
|
||||
DO TVerdict WITH !EMPTY(m.lcExprBack) AND !EMPTY(m.lcExprFore), 'C1 SetAll a pus DynamicBackColor/DynamicForeColor pe coloanele grdFacturi (cNr)', 'Back=[' + m.lcExprBack + '] Fore=[' + m.lcExprFore + ']'
|
||||
lnBack = EVALUATE(m.lcExprBack)
|
||||
lnFore = EVALUATE(m.lcExprFore)
|
||||
DO TVerdict WITH VARTYPE(lnBack) = 'N' AND VARTYPE(lnFore) = 'N', 'C2 expresiile puse prin SetAll (grdFacturi) evalueaza fara exceptie', 'Back=' + VARTYPE(lnBack) + ' Fore=' + VARTYPE(lnFore)
|
||||
CATCH TO loErrC
|
||||
DO TLog WITH 'EXCEPTIE C (SetAll grdFacturi): ' + loErrC.Message + ' | ' + loErrC.Procedure + ' linia ' + TRANSFORM(loErrC.LineNo)
|
||||
DO TVerdict WITH .F., 'C EXCEPTIE la EVALUATE pe SetAll grdFacturi', loErrC.Message
|
||||
ENDTRY
|
||||
|
||||
TRY
|
||||
SELECT crsDetaliiFacturi
|
||||
GO m.lnRecFara
|
||||
lnColorContFara = EVALUATE(loFormA.grdDetaliiFacturi.cCont.DynamicBackColor)
|
||||
lnColorAcontFara = EVALUATE(loFormA.grdDetaliiFacturi.cAcont.DynamicBackColor)
|
||||
GO m.lnRecAprox
|
||||
lnColorContAprox = EVALUATE(loFormA.grdDetaliiFacturi.cCont.DynamicBackColor)
|
||||
lnColorAcontAprox = EVALUATE(loFormA.grdDetaliiFacturi.cAcont.DynamicBackColor)
|
||||
GO m.lnRecIstoric
|
||||
lnColorContIstoric = EVALUATE(loFormA.grdDetaliiFacturi.cCont.DynamicBackColor)
|
||||
lnColorAcontIstoric = EVALUATE(loFormA.grdDetaliiFacturi.cAcont.DynamicBackColor)
|
||||
|
||||
DO TVerdict WITH lnColorContFara = RGB(255,255,255) AND lnColorAcontFara = RGB(255,255,255), 'D1 cCont/cAcont culoare alba pe sursa_cont=""', 'cCont=' + TRANSFORM(lnColorContFara) + ' cAcont=' + TRANSFORM(lnColorAcontFara)
|
||||
DO TVerdict WITH lnColorContAprox = RGB(255,255,240) AND lnColorAcontAprox = RGB(255,255,240), 'D2 cCont/cAcont culoare galben deschis pe sursa_cont=APROX', 'cCont=' + TRANSFORM(lnColorContAprox) + ' cAcont=' + TRANSFORM(lnColorAcontAprox)
|
||||
DO TVerdict WITH lnColorContIstoric = RGB(255,228,196) AND lnColorAcontIstoric = RGB(255,228,196), 'D3 cCont/cAcont culoare somon pe sursa_cont=ISTORIC', 'cCont=' + TRANSFORM(lnColorContIstoric) + ' cAcont=' + TRANSFORM(lnColorAcontIstoric)
|
||||
DO TVerdict WITH lnColorContFara <> lnColorContAprox AND lnColorContAprox <> lnColorContIstoric AND lnColorContFara <> lnColorContIstoric, 'D4 cele trei culori (cCont) sunt distincte intre ele', TRANSFORM(lnColorContFara) + '/' + TRANSFORM(lnColorContAprox) + '/' + TRANSFORM(lnColorContIstoric)
|
||||
CATCH TO loErrD
|
||||
DO TLog WITH 'EXCEPTIE D (cCont/cAcont): ' + loErrD.Message + ' | ' + loErrD.Procedure + ' linia ' + TRANSFORM(loErrD.LineNo)
|
||||
DO TVerdict WITH .F., 'D EXCEPTIE la EVALUATE pe cCont/cAcont', loErrD.Message
|
||||
ENDTRY
|
||||
|
||||
* ---------- obiectele referite in cod exista ----------
|
||||
DO TVerdict WITH TYPE('loFormA.lblCoadaAntet') = 'O', 'E1 lblCoadaAntet exista', TYPE('loFormA.lblCoadaAntet')
|
||||
DO TVerdict WITH TYPE('loFormA.Cmd_Anulare1') = 'O', 'E3 Cmd_Anulare1 exista', TYPE('loFormA.Cmd_Anulare1')
|
||||
DO TVerdict WITH TYPE('loFormA.grdFacturi.cAles') = 'O', 'E4 grdFacturi.cAles exista', TYPE('loFormA.grdFacturi.cAles')
|
||||
|
||||
* ordinea din design se reface integral cand preferintele salvate nu acopera grila
|
||||
lcOrdine = TRANSFORM(loFormA.grdFacturi.cAles.ColumnOrder) + '/' + ;
|
||||
TRANSFORM(loFormA.grdFacturi.cDeCompletat.ColumnOrder) + '/' + TRANSFORM(loFormA.grdFacturi.cGest.ColumnOrder) + '/' + ;
|
||||
TRANSFORM(loFormA.grdFacturi.cNr.ColumnOrder) + '/' + TRANSFORM(loFormA.grdFacturi.cData.ColumnOrder)
|
||||
DO TVerdict WITH lcOrdine == '1/2/3/4/5', 'E8 ordinea coloanelor ales/decompletat/gest/nr/data = 1/2/3/4/5', lcOrdine
|
||||
DO TVerdict WITH PEMSTATUS(loFormA, 'do_coada', 5), 'E5 metoda do_coada exista', TRANSFORM(PEMSTATUS(loFormA, 'do_coada', 5))
|
||||
DO TVerdict WITH PEMSTATUS(loFormA, 'do_anulare_lot', 5), 'E6 metoda do_anulare_lot exista', TRANSFORM(PEMSTATUS(loFormA, 'do_anulare_lot', 5))
|
||||
|
||||
* ---------- semaforul de contabilizare a fost scos: nici clasa, nici metoda, nici coloana nu mai exista ----------
|
||||
TRY
|
||||
loDeadClass = CREATEOBJECT('SemaforContabilizareEF')
|
||||
DO TVerdict WITH .F., 'E7 SemaforContabilizareEF nu mai exista', 'CREATEOBJECT a reusit neasteptat'
|
||||
CATCH
|
||||
DO TVerdict WITH .T., 'E7 SemaforContabilizareEF nu mai exista', 'CREATEOBJECT esueaza, cum e asteptat'
|
||||
ENDTRY
|
||||
DO TVerdict WITH !PEMSTATUS(loFormA, 'do_semafor', 5), 'H1 metoda do_semafor nu mai exista', TRANSFORM(PEMSTATUS(loFormA, 'do_semafor', 5))
|
||||
DO TVerdict WITH TYPE('loFormA.grdFacturi.cSemafor') # 'O', 'H2 grdFacturi.cSemafor nu mai exista', TYPE('loFormA.grdFacturi.cSemafor')
|
||||
|
||||
* ---------- cai de iesire imediata, fara scriere in baza ----------
|
||||
TRY
|
||||
loFormA.do_coada()
|
||||
DO TVerdict WITH .T., 'F1 do_coada() se intoarce fara exceptie cand lLotActiv=.F.', 'ok'
|
||||
DO TVerdict WITH loFormA.lblCoadaAntet.Visible = .F., 'F2 do_coada() nu a pornit procesarea (lblCoadaAntet.Visible ramane .F.)', TRANSFORM(loFormA.lblCoadaAntet.Visible)
|
||||
CATCH TO loErrF
|
||||
DO TLog WITH 'EXCEPTIE F (do_coada): ' + loErrF.Message + ' | ' + loErrF.Procedure + ' linia ' + TRANSFORM(loErrF.LineNo)
|
||||
DO TVerdict WITH .F., 'F EXCEPTIE la do_coada() cu lLotActiv=.F.', loErrF.Message
|
||||
ENDTRY
|
||||
|
||||
lcLunaInchisaOriginal = glLunaInchisa
|
||||
glLunaInchisa = .T.
|
||||
TRY
|
||||
loFormA.do_anulare_lot()
|
||||
DO TVerdict WITH .T., 'F3 do_anulare_lot() se intoarce fara exceptie cand glLunaInchisa=.T.', 'ok'
|
||||
CATCH TO loErrF2
|
||||
DO TLog WITH 'EXCEPTIE F3 (do_anulare_lot): ' + loErrF2.Message + ' | ' + loErrF2.Procedure + ' linia ' + TRANSFORM(loErrF2.LineNo)
|
||||
DO TVerdict WITH .F., 'F3 EXCEPTIE la do_anulare_lot() cu glLunaInchisa=.T.', loErrF2.Message
|
||||
ENDTRY
|
||||
glLunaInchisa = m.lcLunaInchisaOriginal
|
||||
|
||||
loFormA.Release()
|
||||
ENDIF
|
||||
|
||||
* ================= CONFIG B: EFACTURA_LOT_ACTIV = 1 (coada aprinsa) =================
|
||||
scrie_optiune('EFACTURA_LOT_ACTIV', '1', 'COADA GHIDATA DE CONTABILIZARE EFACTURA ACTIVA')
|
||||
actualizeaza_optiuni()
|
||||
|
||||
loFormB = Null
|
||||
TRY
|
||||
SELECT crsFacturi
|
||||
loFormB = Createobject("frm_import_efactura", .T.)
|
||||
loFormB.WindowType = 0
|
||||
DO TVerdict WITH TYPE('loFormB') = 'O', 'G1 frm_import_efactura instantiat fara exceptie (LOT_ACTIV=1)', TYPE('loFormB')
|
||||
CATCH TO loErrG
|
||||
DO TLog WITH 'EXCEPTIE G1: ' + loErrG.Message + ' | ' + loErrG.Procedure + ' linia ' + TRANSFORM(loErrG.LineNo)
|
||||
DO TVerdict WITH .F., 'G1 EXCEPTIE la instantiere (LOT_ACTIV=1)', loErrG.Message
|
||||
ENDTRY
|
||||
|
||||
IF TYPE('loFormB') = 'O'
|
||||
DO TVerdict WITH loFormB.lLotActiv = .T., 'G2 lLotActiv = .T. (optiune=1)', TRANSFORM(loFormB.lLotActiv)
|
||||
DO TVerdict WITH loFormB.Cmd_Anulare1.Visible = .T., 'G4 Cmd_Anulare1.Visible = .T.', TRANSFORM(loFormB.Cmd_Anulare1.Visible)
|
||||
|
||||
* ---------- I: contorul de bifate, care alege calea din do_import (0 bifate = factura curenta, 1+ = coada) ----------
|
||||
TRY
|
||||
SELECT crsFacturi
|
||||
REPLACE ales WITH 0 ALL
|
||||
loCoadaI = CREATEOBJECT('CoadaContabilizareEF')
|
||||
loContorI0 = loCoadaI.ContorBifate('crsFacturi')
|
||||
DO TVerdict WITH loContorI0.nBifate = 0, 'I1 ContorBifate.nBifate = 0 fara nicio bifa (do_import merge pe factura curenta)', TRANSFORM(loContorI0.nBifate)
|
||||
|
||||
GO m.lnRecnoFixt
|
||||
REPLACE eligibil_lot WITH 1, id_fact WITH 0, ales WITH 1 IN crsFacturi
|
||||
loContorI1 = loCoadaI.ContorBifate('crsFacturi')
|
||||
DO TVerdict WITH loContorI1.nBifate = 1, 'I2 ContorBifate.nBifate = 1 cu o singura bifa (do_import merge pe coada)', TRANSFORM(loContorI1.nBifate)
|
||||
CATCH TO loErrI
|
||||
DO TLog WITH 'EXCEPTIE I (ContorBifate): ' + loErrI.Message + ' | ' + loErrI.Procedure + ' linia ' + TRANSFORM(loErrI.LineNo)
|
||||
DO TVerdict WITH .F., 'I EXCEPTIE la ContorBifate 0/1 bifate', loErrI.Message
|
||||
ENDTRY
|
||||
|
||||
* ---------- J: do_bifeazatot bifeaza cand nimic nu e bifat, debifeaza cand exista bifate ----------
|
||||
TRY
|
||||
SELECT crsFacturi
|
||||
REPLACE ales WITH 0 ALL
|
||||
loCoadaJ = CREATEOBJECT('CoadaContabilizareEF')
|
||||
loFormB.do_bifeazatot()
|
||||
loContorJ1 = loCoadaJ.ContorBifate('crsFacturi')
|
||||
DO TVerdict WITH loContorJ1.nBifate > 0, 'J1 do_bifeazatot() bifeaza cand nimic nu era bifat', TRANSFORM(loContorJ1.nBifate)
|
||||
|
||||
loFormB.do_bifeazatot()
|
||||
loContorJ2 = loCoadaJ.ContorBifate('crsFacturi')
|
||||
DO TVerdict WITH loContorJ2.nBifate = 0, 'J2 al doilea apel do_bifeazatot() debifeaza tot', TRANSFORM(loContorJ2.nBifate)
|
||||
CATCH TO loErrJ
|
||||
DO TLog WITH 'EXCEPTIE J (do_bifeazatot): ' + loErrJ.Message + ' | ' + loErrJ.Procedure + ' linia ' + TRANSFORM(loErrJ.LineNo)
|
||||
DO TVerdict WITH .F., 'J EXCEPTIE la do_bifeazatot() dual', loErrJ.Message
|
||||
ENDTRY
|
||||
|
||||
* ---------- K: captionul Cmd_executa1/Cmd_BifeazaTot1 urmareste contorul de bifate ----------
|
||||
TRY
|
||||
SELECT crsFacturi
|
||||
REPLACE ales WITH 0 ALL
|
||||
APPEND BLANK
|
||||
REPLACE ales WITH 1, id WITH -101, id_fact WITH 0, eligibil_lot WITH 1, total_cu_tva WITH 0 IN crsFacturi
|
||||
APPEND BLANK
|
||||
REPLACE ales WITH 1, id WITH -102, id_fact WITH 0, eligibil_lot WITH 1, total_cu_tva WITH 0 IN crsFacturi
|
||||
loFormB.ActualizeazaContoare()
|
||||
DO TVerdict WITH loFormB.Cmd_executa1.Caption == '\<Import 2 bifate', 'K1 caption Cmd_executa1 = Import 2 bifate cu 2+ bifate eligibile', loFormB.Cmd_executa1.Caption
|
||||
DO TVerdict WITH loFormB.Cmd_BifeazaTot1.Caption == '\<Deselecteaza toate', 'K2 caption Cmd_BifeazaTot1 = Deselecteaza toate cu bifate', loFormB.Cmd_BifeazaTot1.Caption
|
||||
|
||||
SELECT crsFacturi
|
||||
REPLACE ales WITH 0 ALL
|
||||
loFormB.ActualizeazaContoare()
|
||||
DO TVerdict WITH loFormB.Cmd_executa1.Caption == '\<Import factura', 'K3 caption Cmd_executa1 = Import factura cu 0 bifate', loFormB.Cmd_executa1.Caption
|
||||
DO TVerdict WITH loFormB.Cmd_BifeazaTot1.Caption == '\<Selecteaza toate', 'K4 caption Cmd_BifeazaTot1 = Selecteaza toate cu 0 bifate', loFormB.Cmd_BifeazaTot1.Caption
|
||||
CATCH TO loErrK
|
||||
DO TLog WITH 'EXCEPTIE K (captions): ' + loErrK.Message + ' | ' + loErrK.Procedure + ' linia ' + TRANSFORM(loErrK.LineNo)
|
||||
DO TVerdict WITH .F., 'K EXCEPTIE la captionul Cmd_executa1/Cmd_BifeazaTot1', loErrK.Message
|
||||
ENDTRY
|
||||
|
||||
* ---------- L: LipsuriDetalii - text local "de completat", fara Oracle ----------
|
||||
TRY
|
||||
LOCAL loCoadaL, lcLipsuriL
|
||||
loCoadaL = CREATEOBJECT('CoadaContabilizareEF')
|
||||
IF USED('crsLipsuriTest')
|
||||
USE IN crsLipsuriTest
|
||||
ENDIF
|
||||
CREATE CURSOR crsLipsuriTest (cont C(4), in_stoc N(1), id_gestiune N(20))
|
||||
|
||||
INSERT INTO crsLipsuriTest (cont, in_stoc, id_gestiune) VALUES ('', 0, 0)
|
||||
lcLipsuriL = loCoadaL.LipsuriDetalii('crsLipsuriTest', 0)
|
||||
DO TVerdict WITH lcLipsuriL == '1 cont', 'L1 LipsuriDetalii: linie fara cont da "1 cont"', '[' + lcLipsuriL + ']'
|
||||
|
||||
SELECT crsLipsuriTest
|
||||
ZAP
|
||||
INSERT INTO crsLipsuriTest (cont, in_stoc, id_gestiune) VALUES ('628', 1, 0)
|
||||
lcLipsuriL = loCoadaL.LipsuriDetalii('crsLipsuriTest', 0)
|
||||
DO TVerdict WITH lcLipsuriL == '1 gest.', 'L2 LipsuriDetalii: linie stocabila fara gestiune da "1 gest."', '[' + lcLipsuriL + ']'
|
||||
|
||||
lcLipsuriL = loCoadaL.LipsuriDetalii('crsLipsuriTest', 100)
|
||||
DO TVerdict WITH lcLipsuriL == '', 'L3 LipsuriDetalii: gestiunea implicita acopera linia stocabila fara gestiune', '[' + lcLipsuriL + ']'
|
||||
|
||||
SELECT crsLipsuriTest
|
||||
ZAP
|
||||
INSERT INTO crsLipsuriTest (cont, in_stoc, id_gestiune) VALUES ('', 1, 0)
|
||||
lcLipsuriL = loCoadaL.LipsuriDetalii('crsLipsuriTest', 0)
|
||||
DO TVerdict WITH lcLipsuriL == '1 cont 1 gest.', 'L4 LipsuriDetalii: cont si gestiune lipsa combinate', '[' + lcLipsuriL + ']'
|
||||
|
||||
SELECT crsLipsuriTest
|
||||
ZAP
|
||||
INSERT INTO crsLipsuriTest (cont, in_stoc, id_gestiune) VALUES ('628', 1, 55)
|
||||
lcLipsuriL = loCoadaL.LipsuriDetalii('crsLipsuriTest', 0)
|
||||
DO TVerdict WITH lcLipsuriL == '', 'L5 LipsuriDetalii: linie completa da text gol', '[' + lcLipsuriL + ']'
|
||||
|
||||
USE IN crsLipsuriTest
|
||||
CATCH TO loErrL
|
||||
DO TLog WITH 'EXCEPTIE L (LipsuriDetalii): ' + loErrL.Message + ' | ' + loErrL.Procedure + ' linia ' + TRANSFORM(loErrL.LineNo)
|
||||
DO TVerdict WITH .F., 'L EXCEPTIE la LipsuriDetalii', loErrL.Message
|
||||
ENDTRY
|
||||
|
||||
* ---------- M: actualizeazalipsurirandcurent blocheaza lotul cu lipsuri si redeblocheaza dupa completare (scenariul "ZZT-C4-C, 1 gestiune") ----------
|
||||
TRY
|
||||
SELECT crsFacturi
|
||||
APPEND BLANK
|
||||
REPLACE id WITH -201, id_fact WITH 0, eligibil_lot WITH 1, ales WITH 1, motiv_lot WITH '', de_completat WITH '', total_cu_tva WITH 0 IN crsFacturi
|
||||
lnRecnoM = RECNO('crsFacturi')
|
||||
|
||||
SELECT crsDetaliiFacturi
|
||||
SET FILTER TO id_efactura = -201
|
||||
APPEND BLANK
|
||||
REPLACE id_efactura WITH -201, nr WITH 1, articol WITH 'TEST M GESTIONABIL', cont WITH '628', in_stoc WITH 1, id_gestiune WITH 0 IN crsDetaliiFacturi
|
||||
|
||||
SELECT crsFacturi
|
||||
GO m.lnRecnoM
|
||||
loFormB.actualizeazalipsurirandcurent()
|
||||
DO TVerdict WITH ALLTRIM(NVL(crsFacturi.de_completat,'')) == '1 gest.', 'M1 de_completat = "1 gest." pe linie stocabila fara gestiune (ca ZZT-C4-C)', '[' + ALLTRIM(NVL(crsFacturi.de_completat,'')) + ']'
|
||||
DO TVerdict WITH crsFacturi.eligibil_lot = 0, 'M2 eligibil_lot = 0 (blocat pentru lot)', TRANSFORM(crsFacturi.eligibil_lot)
|
||||
DO TVerdict WITH crsFacturi.ales = 0, 'M3 ales = 0 (debifat automat)', TRANSFORM(crsFacturi.ales)
|
||||
DO TVerdict WITH ALLTRIM(crsFacturi.motiv_lot) == 'de completat: 1 gest.', 'M4 motiv_lot = "de completat: 1 gest."', '[' + ALLTRIM(crsFacturi.motiv_lot) + ']'
|
||||
|
||||
* operatorul completeaza gestiunea pe linie - randul trebuie sa redevina eligibil
|
||||
SELECT crsDetaliiFacturi
|
||||
LOCATE FOR id_efactura = -201
|
||||
REPLACE id_gestiune WITH 100 IN crsDetaliiFacturi
|
||||
|
||||
SELECT crsFacturi
|
||||
GO m.lnRecnoM
|
||||
loFormB.actualizeazalipsurirandcurent()
|
||||
DO TVerdict WITH EMPTY(NVL(crsFacturi.de_completat,'')), 'M5 de_completat gol dupa completarea gestiunii', '[' + ALLTRIM(NVL(crsFacturi.de_completat,'')) + ']'
|
||||
DO TVerdict WITH crsFacturi.eligibil_lot = 1, 'M6 eligibil_lot = 1 (redevine eligibil pentru lot)', TRANSFORM(crsFacturi.eligibil_lot)
|
||||
DO TVerdict WITH EMPTY(NVL(crsFacturi.motiv_lot,'')), 'M7 motiv_lot golit', '[' + ALLTRIM(NVL(crsFacturi.motiv_lot,'')) + ']'
|
||||
|
||||
SELECT crsDetaliiFacturi
|
||||
SET FILTER TO
|
||||
CATCH TO loErrM
|
||||
DO TLog WITH 'EXCEPTIE M (actualizeazalipsurirandcurent blocare/deblocare): ' + loErrM.Message + ' | ' + loErrM.Procedure + ' linia ' + TRANSFORM(loErrM.LineNo)
|
||||
DO TVerdict WITH .F., 'M EXCEPTIE la actualizeazalipsurirandcurent (blocare/deblocare)', loErrM.Message
|
||||
ENDTRY
|
||||
|
||||
* ---------- N: un rand blocat pentru CIF ambiguu NU se deblocheaza prin actualizeazalipsurirandcurent ----------
|
||||
TRY
|
||||
SELECT crsFacturi
|
||||
APPEND BLANK
|
||||
REPLACE id WITH -202, id_fact WITH 0, eligibil_lot WITH 0, ales WITH 0, ;
|
||||
motiv_lot WITH 'CIF ambiguu in ROA, alegeti partenerul manual', de_completat WITH '', total_cu_tva WITH 0 IN crsFacturi
|
||||
lnRecnoN = RECNO('crsFacturi')
|
||||
|
||||
SELECT crsDetaliiFacturi
|
||||
SET FILTER TO id_efactura = -202
|
||||
APPEND BLANK
|
||||
REPLACE id_efactura WITH -202, nr WITH 1, articol WITH 'TEST N COMPLET', cont WITH '628', in_stoc WITH 0 IN crsDetaliiFacturi
|
||||
|
||||
SELECT crsFacturi
|
||||
GO m.lnRecnoN
|
||||
loFormB.actualizeazalipsurirandcurent()
|
||||
DO TVerdict WITH crsFacturi.eligibil_lot = 0, 'N1 eligibil_lot ramane 0 (CIF ambiguu, nu se deblocheaza)', TRANSFORM(crsFacturi.eligibil_lot)
|
||||
DO TVerdict WITH ALLTRIM(crsFacturi.motiv_lot) == 'CIF ambiguu in ROA, alegeti partenerul manual', 'N2 motiv_lot ramane cel de CIF ambiguu (nu e suprascris)', '[' + ALLTRIM(crsFacturi.motiv_lot) + ']'
|
||||
|
||||
SELECT crsDetaliiFacturi
|
||||
SET FILTER TO
|
||||
CATCH TO loErrN
|
||||
DO TLog WITH 'EXCEPTIE N (CIF ambiguu nu se deblocheaza): ' + loErrN.Message + ' | ' + loErrN.Procedure + ' linia ' + TRANSFORM(loErrN.LineNo)
|
||||
DO TVerdict WITH .F., 'N EXCEPTIE la testul de CIF ambiguu', loErrN.Message
|
||||
ENDTRY
|
||||
|
||||
* ---------- O: do_coada sare o factura cu lipsuri, fara sa scrie in baza (completat/completatdet=1
|
||||
* ca sa nu porneasca rezolvarea de partener/articol reala pe randul sintetic) ----------
|
||||
TRY
|
||||
SELECT crsFacturi
|
||||
REPLACE ales WITH 0 ALL
|
||||
APPEND BLANK
|
||||
REPLACE id WITH -203, id_fact WITH 0, eligibil_lot WITH 1, ales WITH 1, motiv_lot WITH '', de_completat WITH '', ;
|
||||
numar_act WITH 'ZZT-O1-C', xfurnizor WITH 'TEST O FURNIZOR', cod_fiscal WITH 'RO9992000001', ;
|
||||
total_cu_tva WITH 0, completat WITH 1, completatdet WITH 1, detalii WITH 'x' IN crsFacturi
|
||||
lnRecnoO = RECNO('crsFacturi')
|
||||
|
||||
SELECT crsDetaliiFacturi
|
||||
SET FILTER TO id_efactura = -203
|
||||
APPEND BLANK
|
||||
REPLACE id_efactura WITH -203, nr WITH 1, articol WITH 'TEST O FARA CONT', cont WITH '', in_stoc WITH 0 IN crsDetaliiFacturi
|
||||
SELECT crsDetaliiFacturi
|
||||
SET FILTER TO
|
||||
|
||||
SELECT crsFacturi
|
||||
GO m.lnRecnoO
|
||||
loFormB.do_coada()
|
||||
DO TVerdict WITH .T., 'O1 do_coada() se intoarce fara exceptie cu o factura cu lipsuri', 'ok'
|
||||
|
||||
SELECT crsFacturi
|
||||
GO m.lnRecnoO
|
||||
DO TVerdict WITH crsFacturi.eligibil_lot = 0, 'O2 do_coada sare factura cu lipsuri: eligibil_lot = 0', TRANSFORM(crsFacturi.eligibil_lot)
|
||||
DO TVerdict WITH crsFacturi.ales = 0, 'O3 do_coada sare factura cu lipsuri: ales = 0 (debifata)', TRANSFORM(crsFacturi.ales)
|
||||
DO TVerdict WITH crsFacturi.id_fact = 0, 'O4 do_coada sare factura cu lipsuri: id_fact ramane 0 (nu s-a scris in baza)', TRANSFORM(crsFacturi.id_fact)
|
||||
DO TVerdict WITH 'de completat' $ crsFacturi.motiv_lot, 'O5 motiv_lot explica lipsa (nu alt motiv)', '[' + ALLTRIM(crsFacturi.motiv_lot) + ']'
|
||||
|
||||
SELECT crsDetaliiFacturi
|
||||
SET FILTER TO
|
||||
CATCH TO loErrO
|
||||
DO TLog WITH 'EXCEPTIE O (do_coada sare lipsuri): ' + loErrO.Message + ' | ' + loErrO.Procedure + ' linia ' + TRANSFORM(loErrO.LineNo)
|
||||
DO TVerdict WITH .F., 'O EXCEPTIE la do_coada sare factura cu lipsuri', loErrO.Message
|
||||
ENDTRY
|
||||
|
||||
* ---------- P: completeazadetaliifactura pe o singura interogare (PotrivesteFactura) - linia primeste cont din cascada, crsPotrivireLinii nu ramane deschis ----------
|
||||
TRY
|
||||
SELECT crsDetaliiFacturi
|
||||
LOCATE FOR id_efactura = m.lnFixtIdEF AND nr < 900
|
||||
IF !FOUND()
|
||||
DO TLog WITH 'P SARIT: fixtura nu are linii reale (nr < 900) pentru id_efactura=' + TRANSFORM(m.lnFixtIdEF)
|
||||
ELSE
|
||||
lnRecnoP = RECNO('crsDetaliiFacturi')
|
||||
lcArticolP = ALLTRIM(articol)
|
||||
REPLACE id_articol WITH 0, articol_roa WITH '', codmat_roa WITH '', in_stoc WITH 0, cont WITH '', acont WITH '', id_gestiune WITH 0 IN crsDetaliiFacturi
|
||||
|
||||
SELECT crsFacturi
|
||||
GO m.lnRecnoFixt
|
||||
lcCodFiscalP = UPPER(ALLTRIM(NVL(crsFacturi.cod_fiscal, '')))
|
||||
|
||||
lnIdFactP = 0
|
||||
goExecutor.oExecute("INSERT INTO ANAF_EFACTURA (cod_fiscal_emitent, xdata_act) VALUES ('" + m.lcCodFiscalP + "', SYSDATE)", 'crsInsFactP')
|
||||
goExecutor.oSelect2Value("SELECT SEQ_ANAF_EFACTURA.CURRVAL FROM DUAL", @lnIdFactP)
|
||||
goExecutor.oExecute("INSERT INTO ANAF_EFACTURA_DETALII (id_efactura, articol, cont) VALUES (" + TRANSFORM(m.lnIdFactP) + ", '" + STRTRAN(m.lcArticolP, "'", "''") + "', '999')", 'crsInsLinieP')
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitInsP')
|
||||
|
||||
SELECT crsFacturi
|
||||
GO m.lnRecnoFixt
|
||||
loFormB.completeazadetaliifactura()
|
||||
|
||||
DO TVerdict WITH !USED('crsPotrivireLinii'), 'P1 crsPotrivireLinii nu ramane deschis dupa completeazadetaliifactura', 'USED=' + TRANSFORM(USED('crsPotrivireLinii'))
|
||||
|
||||
lcCont0P = ALLTRIM(NVL(gcEFACTURA_CONT_ART_P, ''))
|
||||
SELECT crsDetaliiFacturi
|
||||
GO m.lnRecnoP
|
||||
DO TVerdict WITH !EMPTY(NVL(crsDetaliiFacturi.cont,'')) AND ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) != m.lcCont0P, 'P2 linia primeste cont din cascada, nu ramane pe implicitul din optiuni', '[' + ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) + '] implicit=[' + m.lcCont0P + ']'
|
||||
|
||||
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA_DETALII WHERE id_efactura = " + TRANSFORM(m.lnIdFactP), 'crsDelLinieP')
|
||||
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA WHERE id = " + TRANSFORM(m.lnIdFactP), 'crsDelFactP')
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitDelP')
|
||||
ENDIF
|
||||
CATCH TO loErrP
|
||||
DO TLog WITH 'EXCEPTIE P (completeazadetaliifactura cascada): ' + loErrP.Message + ' | ' + loErrP.Procedure + ' linia ' + TRANSFORM(loErrP.LineNo)
|
||||
DO TVerdict WITH .F., 'P EXCEPTIE la completeazadetaliifactura cascada', loErrP.Message
|
||||
ENDTRY
|
||||
|
||||
* ---------- Q: do_import cu facturi bifate cere direct confirmarea cozii, fara dialogul Da/Nu/Renunt ----------
|
||||
TRY
|
||||
PUBLIC gnMockRaspuns
|
||||
gnMockRaspuns = 7
|
||||
|
||||
SELECT crsFacturi
|
||||
REPLACE ales WITH 0 ALL
|
||||
APPEND BLANK
|
||||
REPLACE id WITH -204, id_fact WITH 0, eligibil_lot WITH 1, ales WITH 1, motiv_lot WITH '', de_completat WITH '', ;
|
||||
numar_act WITH 'ZZT-Q1-C', xfurnizor WITH 'TEST Q FURNIZOR', cod_fiscal WITH 'RO9992000001', ;
|
||||
total_cu_tva WITH 0, completat WITH 1, completatdet WITH 1, detalii WITH 'x' IN crsFacturi
|
||||
|
||||
lnLogQ = LEN(FILETOSTR(gcUILog))
|
||||
loFormB.do_import()
|
||||
lcDialoguriQ = SUBSTR(FILETOSTR(gcUILog), m.lnLogQ + 1)
|
||||
|
||||
DO TVerdict WITH 'Se vor contabiliza' $ m.lcDialoguriQ, 'Q1 do_import cu bifate cere direct confirmarea cozii', '[' + LEFT(STRTRAN(STRTRAN(m.lcDialoguriQ, CHR(13), ' '), CHR(10), ' '), 200) + ']'
|
||||
DO TVerdict WITH !('Se pot importa' $ m.lcDialoguriQ), 'Q2 dialogul Import toate / Import curenta / Renunt nu mai apare', '[' + LEFT(STRTRAN(STRTRAN(m.lcDialoguriQ, CHR(13), ' '), CHR(10), ' '), 200) + ']'
|
||||
|
||||
gnMockRaspuns = 6
|
||||
CATCH TO loErrQ
|
||||
gnMockRaspuns = 6
|
||||
DO TLog WITH 'EXCEPTIE Q (do_import): ' + loErrQ.Message + ' | ' + loErrQ.Procedure + ' linia ' + TRANSFORM(loErrQ.LineNo)
|
||||
DO TVerdict WITH .F., 'Q EXCEPTIE la do_import cu facturi bifate', loErrQ.Message
|
||||
ENDTRY
|
||||
|
||||
* ---------- R: culoarea randului - ActualizeazaRandImportat completeaza jtotctva/diferenta si culoarea (gri->alb) pe o factura deja contabilizata in Registrul TVA ----------
|
||||
TRY
|
||||
LOCAL lnPickR, lcSqlPickR, lnRecnoR, lnColorR0, lnColorR1, llR2
|
||||
lnPickR = 0
|
||||
TEXT TO lcSqlPickR NOSHOW
|
||||
select id from (select id, decode(creditnote,0,1,-1) * NVL(total_cu_tva,0.00) - (NVL(jtotctva,0.00) - NVL(jtva_ti,0.00)) as dif from anaf_vefactura_primit where jtotctva is not null and xfurnizor not like 'ZZTEST%' order by id desc) where abs(dif) <= 0.15 and rownum = 1
|
||||
ENDTEXT
|
||||
goExecutor.oSelecteaza2Value(m.lcSqlPickR, @lnPickR)
|
||||
IF NVL(m.lnPickR,0) = 0
|
||||
DO TLog WITH 'R SARIT: nicio factura deja contabilizata cu diferenta mica gasita in Registrul TVA'
|
||||
ELSE
|
||||
SELECT crsFacturi
|
||||
APPEND BLANK
|
||||
REPLACE id WITH m.lnPickR, id_fact WITH 0, jtotctva WITH NULL, diferenta WITH NULL, eroare_lot WITH 0, eligibil_lot WITH 1, ales WITH 0, numar_act WITH 'ZZT-R1', xfurnizor WITH 'TEST R FACTURA CONTABILIZATA' IN crsFacturi
|
||||
lnRecnoR = RECNO('crsFacturi')
|
||||
|
||||
lnColorR0 = EVALUATE(loFormB.grdFacturi.cNr.DynamicBackColor)
|
||||
DO TVerdict WITH lnColorR0 = RGB(225,225,225), 'R1 randul e gri cat timp jtotctva e null (cache neactualizat)', TRANSFORM(lnColorR0)
|
||||
|
||||
llR2 = loFormB.ActualizeazaRandImportat(m.lnPickR)
|
||||
SELECT crsFacturi
|
||||
GO m.lnRecnoR
|
||||
lnColorR1 = EVALUATE(loFormB.grdFacturi.cNr.DynamicBackColor)
|
||||
DO TVerdict WITH llR2 = .T. AND !ISNULL(crsFacturi.jtotctva), 'R2 ActualizeazaRandImportat completeaza jtotctva din Registrul TVA', TRANSFORM(llR2) + ' jtotctva=' + TRANSFORM(NVL(crsFacturi.jtotctva,-99999))
|
||||
DO TVerdict WITH lnColorR1 = RGB(255,255,255), 'R3 randul devine alb dupa actualizare (diferenta mica)', TRANSFORM(lnColorR1)
|
||||
ENDIF
|
||||
CATCH TO loErrR
|
||||
DO TLog WITH 'EXCEPTIE R (ActualizeazaRandImportat culoare): ' + loErrR.Message + ' | ' + loErrR.Procedure + ' linia ' + TRANSFORM(loErrR.LineNo)
|
||||
DO TVerdict WITH .F., 'R EXCEPTIE la testul de culoare ActualizeazaRandImportat', loErrR.Message
|
||||
ENDTRY
|
||||
|
||||
* ---------- S: cAntetLot/_screen.Caption revin curate dupa do_coada, inclusiv pe calea de sarit o factura cu lipsuri (fara sa scrie in baza) ----------
|
||||
TRY
|
||||
LOCAL lcCaptionOriginalS, lnRecnoS
|
||||
lcCaptionOriginalS = _screen.Caption
|
||||
SELECT crsFacturi
|
||||
REPLACE ales WITH 0 ALL
|
||||
APPEND BLANK
|
||||
REPLACE id WITH -301, id_fact WITH 0, eligibil_lot WITH 1, ales WITH 1, motiv_lot WITH '', de_completat WITH '', ;
|
||||
numar_act WITH 'ZZT-S1-C', xfurnizor WITH 'TEST S FURNIZOR', cod_fiscal WITH 'RO9992000001', ;
|
||||
total_cu_tva WITH 0, completat WITH 1, completatdet WITH 1, detalii WITH 'x' IN crsFacturi
|
||||
lnRecnoS = RECNO('crsFacturi')
|
||||
|
||||
SELECT crsDetaliiFacturi
|
||||
SET FILTER TO id_efactura = -301
|
||||
APPEND BLANK
|
||||
REPLACE id_efactura WITH -301, nr WITH 1, articol WITH 'TEST S FARA CONT', cont WITH '', in_stoc WITH 0 IN crsDetaliiFacturi
|
||||
SELECT crsDetaliiFacturi
|
||||
SET FILTER TO
|
||||
|
||||
SELECT crsFacturi
|
||||
GO m.lnRecnoS
|
||||
loFormB.do_coada()
|
||||
DO TVerdict WITH .T., 'S1 do_coada() se intoarce fara exceptie (factura cu lipsuri, sarita)', 'ok'
|
||||
DO TVerdict WITH loFormB.cAntetLot == '', 'S2 cAntetLot revine gol dupa do_coada()', '[' + loFormB.cAntetLot + ']'
|
||||
DO TVerdict WITH _screen.Caption == m.lcCaptionOriginalS, 'S3 _screen.Caption revine la valoarea initiala dupa do_coada()', '[' + _screen.Caption + ']'
|
||||
CATCH TO loErrS
|
||||
DO TLog WITH 'EXCEPTIE S (cAntetLot/_screen.Caption dupa do_coada): ' + loErrS.Message + ' | ' + loErrS.Procedure + ' linia ' + TRANSFORM(loErrS.LineNo)
|
||||
DO TVerdict WITH .F., 'S EXCEPTIE la reset cAntetLot/_screen.Caption', loErrS.Message
|
||||
ENDTRY
|
||||
|
||||
* ---------- T: ActualizeazaRandImportat - garzi (id gol/inexistent/factura curenta diferita de parametru) ----------
|
||||
TRY
|
||||
LOCAL llT1, llT2, llT3, lnIdT, lnJT
|
||||
SELECT crsFacturi
|
||||
GO m.lnRecnoFixt
|
||||
llT1 = loFormB.ActualizeazaRandImportat(0)
|
||||
DO TVerdict WITH llT1 = .F., 'T1 ActualizeazaRandImportat(0) = .F. fara exceptie', TRANSFORM(llT1)
|
||||
|
||||
llT2 = loFormB.ActualizeazaRandImportat(999999999)
|
||||
DO TVerdict WITH llT2 = .F., 'T2 ActualizeazaRandImportat(id inexistent) = .F.', TRANSFORM(llT2)
|
||||
|
||||
SELECT crsFacturi
|
||||
GO m.lnRecnoFixt
|
||||
lnIdT = Nvl(crsFacturi.id,0)
|
||||
lnJT = Nvl(crsFacturi.jtotctva,-99999)
|
||||
llT3 = loFormB.ActualizeazaRandImportat(m.lnIdT + 1)
|
||||
DO TVerdict WITH llT3 = .F., 'T3 ActualizeazaRandImportat pe alta factura decat cea curenta = .F.', TRANSFORM(llT3)
|
||||
SELECT crsFacturi
|
||||
DO TVerdict WITH crsFacturi.id = m.lnIdT AND Nvl(crsFacturi.jtotctva,-99999) = m.lnJT, 'T4 randul curent neatins de apelul cu alt id', 'id=' + TRANSFORM(crsFacturi.id)
|
||||
CATCH TO loErrT
|
||||
DO TLog WITH 'EXCEPTIE T (ActualizeazaRandImportat garzi): ' + loErrT.Message + ' | ' + loErrT.Procedure + ' linia ' + TRANSFORM(loErrT.LineNo)
|
||||
DO TVerdict WITH .F., 'T EXCEPTIE la garzile ActualizeazaRandImportat', loErrT.Message
|
||||
ENDTRY
|
||||
|
||||
loFormB.Release()
|
||||
ENDIF
|
||||
|
||||
* curatenie: optiunea revine la valoarea de dinainte de test, cursoare
|
||||
RestaureazaOptiuni()
|
||||
IF USED('crsFacturi')
|
||||
USE IN crsFacturi
|
||||
ENDIF
|
||||
IF USED('crsDetaliiFacturi')
|
||||
USE IN crsDetaliiFacturi
|
||||
ENDIF
|
||||
IF USED('crsDetaliiFacturiTemp')
|
||||
USE IN crsDetaliiFacturiTemp
|
||||
ENDIF
|
||||
DO TLog WITH 'CURATENIE finala facuta'
|
||||
|
||||
DO TLog WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
||||
QUIT
|
||||
|
||||
***********************
|
||||
PROCEDURE TLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(TTOC(DATETIME()) + ' ' + tcMsg + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDPROC
|
||||
|
||||
***********************
|
||||
* mock_amessagebox.prg cere HarnessLog (definit normal in ui_harness.prg, neincarcat aici - test fara Show())
|
||||
PROCEDURE HarnessLog
|
||||
LPARAMETERS tcMsg
|
||||
DO TLog WITH tcMsg
|
||||
ENDPROC
|
||||
|
||||
***********************
|
||||
PROCEDURE TVerdict
|
||||
LPARAMETERS tlOk, tcNume, tcDetalii
|
||||
IF tlOk
|
||||
gnPass = gnPass + 1
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
ENDIF
|
||||
DO TLog WITH IIF(tlOk, 'PASS ', 'FAIL ') + tcNume + ' | ' + TRANSFORM(tcDetalii)
|
||||
ENDPROC
|
||||
|
||||
***********************
|
||||
PROCEDURE TErr
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLine
|
||||
DO TLog WITH 'EROARE ' + TRANSFORM(tnError) + ' [' + TRANSFORM(tcMessage) + '] in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLine)
|
||||
ENDPROC
|
||||
21
utile/Teste/efactura_import/test_import_efactura_smoke.ps1
Normal file
21
utile/Teste/efactura_import/test_import_efactura_smoke.ps1
Normal file
@@ -0,0 +1,21 @@
|
||||
# test_import_efactura_smoke.ps1 - rulare headless (fara harness/screenshots) a testului de
|
||||
# fumat pentru frm_import_efactura (instantiere + evaluare expresii dinamice, ambele
|
||||
# configuratii EFACTURA_LOT_ACTIV).
|
||||
# Rulare: powershell -ExecutionPolicy Bypass -File test_import_efactura_smoke.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
$Prg = Join-Path $Teste 'test_import_efactura_smoke.prg'
|
||||
$Fxp = [IO.Path]::ChangeExtension($Prg, '.fxp')
|
||||
$Err = [IO.Path]::ChangeExtension($Prg, '.err')
|
||||
$Log = Join-Path $Teste 'test_import_efactura_smoke_log.txt'
|
||||
$Vfp = 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe'
|
||||
|
||||
Remove-Item $Fxp, $Err, $Log -ErrorAction SilentlyContinue
|
||||
$p = Start-Process -FilePath $Vfp -ArgumentList '-A', '-T', "`"$Prg`"" -PassThru
|
||||
if (-not $p.WaitForExit(240000)) {
|
||||
$p.Kill()
|
||||
throw 'TIMEOUT: testul nu s-a terminat in 240s'
|
||||
}
|
||||
if (Test-Path $Err) { throw "Eroare de compilare: $(Get-Content $Err -Raw)" }
|
||||
if (-not (Test-Path $Log)) { throw "Lipseste logul $Log" }
|
||||
Get-Content $Log
|
||||
@@ -1,7 +1,8 @@
|
||||
* test_import_zip_efactura.prg
|
||||
* Test UI pentru importul manual al unei arhive zip eFactura in borderou
|
||||
* (COMUN\clase\anaf_efactura.vcx > clasa anaf_efactura + AnafeFacturaServer.ImportZipLocal).
|
||||
* Mediu: CENTRAL / MARIUSM_AUTO, perioada ianuarie 2026 (data facturii din xml).
|
||||
* Mediu: CENTRAL / MARIUSM_AUTO. Arhiva si perioada vin dintr-o factura aleasa determinist din
|
||||
* ANAF_EFACTURA (fixtura_zip_din_baza.prg), nu dintr-un fisier de pe disc.
|
||||
*
|
||||
* Ce acopera:
|
||||
* T1 - garda pe cod fiscal: arhiva nu apartine firmei de test => import respins, 0 randuri
|
||||
@@ -15,7 +16,7 @@
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir, gnMockRaspuns, gcTestDir, gcZipFile, gcIdInc, gcCifBenef
|
||||
PUBLIC gcUILog, gcSyncDir, gnMockRaspuns, gcTestDir, gcZipFile, gcIdInc, gcCifBenef, loFixtura
|
||||
PUBLIC poFacturiEmise, poFacturiPrimite, poFacturiTrimise, poFacturiDetalii
|
||||
PUBLIC loAnaf, loForm, gnPass, gnFail
|
||||
PUBLIC gcTesteDir
|
||||
@@ -27,9 +28,6 @@ gcTestDir = ADDBS(JUSTPATH(SYS(16)))
|
||||
gcTesteDir = ADDBS(JUSTPATH(JUSTPATH(SYS(16))))
|
||||
gcUILog = gcTestDir + 'test_import_zip_efactura_log.txt'
|
||||
gcSyncDir = gcTestDir + 'uisync_importzip\'
|
||||
gcZipFile = 'D:\ROA\Efactura\2026_01\MARIUSM_AUTO\PRIMITE\5967557693_5967557693.zip'
|
||||
gcIdInc = '5967557693'
|
||||
gcCifBenef = '29923675'
|
||||
gnMockRaspuns = 6
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
@@ -44,11 +42,30 @@ ON SHUTDOWN QUIT
|
||||
SET PROCEDURE TO (gcTesteDir + 'mock_amessagebox.prg') ADDITIVE
|
||||
SET PROCEDURE TO (gcTesteDir + 'ui_harness.prg') ADDITIVE
|
||||
|
||||
DO (gcTesteDir + 'test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 1
|
||||
DO (gcTesteDir + 'test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 1
|
||||
SET PROCEDURE TO (gcTestDir + 'fixtura_zip_din_baza.prg') ADDITIVE
|
||||
|
||||
DO HarnessLog WITH 'INIT gnHandle=' + TRANSFORM(gnHandle) + ' gcS=' + TRANSFORM(gcS) + ' perioada=' + TRANSFORM(gnLuna) + '/' + TRANSFORM(gnAn)
|
||||
DO HarnessLog WITH 'FIRMA=' + TRANSFORM(gcFirma) + ' cod fiscal=' + TRANSFORM(goFirma.codfiscalfro)
|
||||
|
||||
* Fixtura: arhiva + datele sursa (pentru recalculul asertiunilor T2), extrase din baza
|
||||
* INAINTE de curatenie/reimport - vezi fixtura_zip_din_baza.prg pentru criteriul de alegere
|
||||
gcZipFile = FixturaZipEFactura()
|
||||
DO TVerdict WITH !EMPTY(gcZipFile) AND USED('cFixturaEFactura'), 'PRECONDITIE fixtura din baza', 'zip=[' + TRANSFORM(gcZipFile) + ']'
|
||||
IF EMPTY(gcZipFile) OR !USED('cFixturaEFactura')
|
||||
DO HarnessLog WITH 'EROARE: nu exista in ANAF_EFACTURA nicio factura primita cu arhiva zip si fara document contabil legat'
|
||||
DO HarnessLog WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
||||
DO HarnessDone WITH 'done CU ESECURI'
|
||||
QUIT
|
||||
ENDIF
|
||||
SELECT cFixturaEFactura
|
||||
SCATTER NAME loFixtura MEMO
|
||||
USE IN (SELECT('cFixturaEFactura'))
|
||||
gcIdInc = ALLTRIM(loFixtura.id_incarcare)
|
||||
gcCifBenef = ALLTRIM(NVL(loFixtura.cod_fiscal_beneficiar, ''))
|
||||
FixturaSincronizeazaPerioada()
|
||||
DO HarnessLog WITH 'FIXTURA: id_incarcare=' + gcIdInc + ' numar=[' + TRANSFORM(loFixtura.xnumar_act) + '] data=' + TRANSFORM(loFixtura.xdata_act) + ' perioada sincronizata=' + TRANSFORM(gnLuna) + '/' + TRANSFORM(gnAn)
|
||||
|
||||
* Curatenie: sterg importul unei rulari anterioare, ca testul sa fie repetabil
|
||||
goExecutor.oExecuta("delete from anaf_efactura_detalii where id_efactura in (select id from anaf_efactura where id_incarcare = '" + gcIdInc + "')")
|
||||
goExecutor.oExecuta("delete from anaf_efactura where id_incarcare = '" + gcIdInc + "'")
|
||||
@@ -144,7 +161,10 @@ loForm.WindowState = 2
|
||||
DO HarnessLog WITH 'BORDEROU deschis: [' + TRANSFORM(loForm.Caption) + ']'
|
||||
DO HarnessStep WITH 0, 'borderou_deschis'
|
||||
|
||||
* ---------- T1: garda pe cod fiscal (firma de test nu e nici emitent, nici beneficiar) ----------
|
||||
* ---------- T1: garda pe cod fiscal (cCodFiscal fortat pe o valoare care nu apartine
|
||||
* nici emitentului, nici beneficiarului - fixtura fiind chiar factura primita a firmei de
|
||||
* test, cCodFiscal implicit ar coincide oricum cu beneficiarul) ----------
|
||||
loForm.oAnaf.AnafeFacturaServer.cCodFiscal = '00000000'
|
||||
llRezultat = loForm.oAnaf.AnafeFacturaServer.ImportZipLocal(gcZipFile)
|
||||
lnRanduri = 0
|
||||
goExecutor.oSelecteaza2Value("select count(*) from anaf_efactura where id_incarcare = '" + gcIdInc + "'", @lnRanduri)
|
||||
@@ -177,18 +197,18 @@ IF USED('cVerif') AND RECCOUNT('cVerif') = 1
|
||||
DO HarnessLog WITH ' descarcat=' + TRANSFORM(cVerif.descarcat) + ' procesat=' + TRANSFORM(cVerif.procesat) + ' creditnote=' + TRANSFORM(cVerif.creditnote) + ' len(detalii)=' + TRANSFORM(cVerif.len_detalii) + ' len(zip)=' + TRANSFORM(cVerif.len_zip)
|
||||
DO HarnessLog WITH ' filepath=[' + TRANSFORM(cVerif.filepath) + '] exista pe disc=' + TRANSFORM(FILE(ALLTRIM(NVL(cVerif.filepath, ''))))
|
||||
|
||||
DO TVerdict WITH ALLTRIM(NVL(cVerif.xnumar_act, '')) == 'SRC/0000809', 'T2.1 numar factura', TRANSFORM(cVerif.xnumar_act)
|
||||
DO TVerdict WITH cVerif.xdata_act = {^2026-01-28}, 'T2.2 data factura', TRANSFORM(cVerif.xdata_act)
|
||||
DO TVerdict WITH ROUND(NVL(cVerif.xtotal_cu_tva, 0), 2) = -5166.63, 'T2.3 total cu tva', TRANSFORM(cVerif.xtotal_cu_tva)
|
||||
DO TVerdict WITH ROUND(NVL(cVerif.xtotal_fara_tva, 0), 2) = -4269.94, 'T2.4 total fara tva', TRANSFORM(cVerif.xtotal_fara_tva)
|
||||
DO TVerdict WITH ALLTRIM(UPPER(NVL(cVerif.tip_mesaj_raspuns, ''))) == 'FACTURA PRIMITA' AND NVL(cVerif.factura_emisa, -1) = 0, 'T2.5 tip factura primita', TRANSFORM(cVerif.tip_mesaj_raspuns)
|
||||
DO TVerdict WITH ALLTRIM(NVL(cVerif.cod_fiscal_emitent, '')) == '17043227' AND ALLTRIM(NVL(cVerif.cod_fiscal_beneficiar, '')) == gcCifBenef, 'T2.6 coduri fiscale', TRANSFORM(cVerif.cod_fiscal_emitent) + '/' + TRANSFORM(cVerif.cod_fiscal_beneficiar)
|
||||
DO TVerdict WITH NVL(cVerif.len_detalii, 0) > 4000, 'T2.7 xml salvat in detalii', TRANSFORM(cVerif.len_detalii) + ' caractere'
|
||||
DO TVerdict WITH ALLTRIM(NVL(cVerif.xnumar_act, '')) == ALLTRIM(loFixtura.xnumar_act), 'T2.1 numar factura', TRANSFORM(cVerif.xnumar_act)
|
||||
DO TVerdict WITH cVerif.xdata_act = loFixtura.xdata_act, 'T2.2 data factura', TRANSFORM(cVerif.xdata_act)
|
||||
DO TVerdict WITH ROUND(NVL(cVerif.xtotal_cu_tva, 0), 2) = ROUND(NVL(loFixtura.xtotal_cu_tva, 0), 2), 'T2.3 total cu tva', TRANSFORM(cVerif.xtotal_cu_tva)
|
||||
DO TVerdict WITH ROUND(NVL(cVerif.xtotal_fara_tva, 0), 2) = ROUND(NVL(loFixtura.xtotal_fara_tva, 0), 2), 'T2.4 total fara tva', TRANSFORM(cVerif.xtotal_fara_tva)
|
||||
DO TVerdict WITH ALLTRIM(UPPER(NVL(cVerif.tip_mesaj_raspuns, ''))) == ALLTRIM(UPPER(loFixtura.tip_mesaj_raspuns)) AND NVL(cVerif.factura_emisa, -1) = NVL(loFixtura.factura_emisa, -1), 'T2.5 tip factura primita', TRANSFORM(cVerif.tip_mesaj_raspuns)
|
||||
DO TVerdict WITH ALLTRIM(NVL(cVerif.cod_fiscal_emitent, '')) == ALLTRIM(loFixtura.cod_fiscal_emitent) AND ALLTRIM(NVL(cVerif.cod_fiscal_beneficiar, '')) == gcCifBenef, 'T2.6 coduri fiscale', TRANSFORM(cVerif.cod_fiscal_emitent) + '/' + TRANSFORM(cVerif.cod_fiscal_beneficiar)
|
||||
DO TVerdict WITH NVL(cVerif.len_detalii, 0) = NVL(loFixtura.len_detalii, 0), 'T2.7 xml salvat in detalii', TRANSFORM(cVerif.len_detalii) + ' caractere'
|
||||
DO TVerdict WITH FILE(ALLTRIM(NVL(cVerif.filepath, ''))), 'T2.8 arhiva copiata local', TRANSFORM(cVerif.filepath)
|
||||
|
||||
lnDetalii = 0
|
||||
goExecutor.oSelecteaza2Value("select count(*) from anaf_efactura_detalii where id_efactura = " + ALLTRIM(STR(cVerif.id)), @lnDetalii)
|
||||
DO TVerdict WITH NVL(lnDetalii, 0) > 0, 'T2.9 linii in anaf_efactura_detalii', TRANSFORM(lnDetalii) + ' linii'
|
||||
DO TVerdict WITH NVL(lnDetalii, 0) = NVL(loFixtura.nr_linii, 0), 'T2.9 linii in anaf_efactura_detalii', TRANSFORM(lnDetalii) + ' linii'
|
||||
|
||||
goExecutor.oExecuta("select nr, articol, cantitate, um, pret, proctva, valoarefaratva from anaf_efactura_detalii where id_efactura = " + ALLTRIM(STR(cVerif.id)) + " order by nr", 'cLinii')
|
||||
IF USED('cLinii')
|
||||
@@ -213,7 +233,7 @@ loForm.Refresh()
|
||||
lnGasit = 0
|
||||
IF USED('crsFacturiPrimite')
|
||||
SELECT crsFacturiPrimite
|
||||
COUNT FOR ALLTRIM(NVL(numar_act, '')) == 'SRC/0000809' TO lnGasit
|
||||
COUNT FOR ALLTRIM(NVL(numar_act, '')) == ALLTRIM(loFixtura.xnumar_act) TO lnGasit
|
||||
DO HarnessLog WITH 'crsFacturiPrimite: ' + TRANSFORM(RECCOUNT('crsFacturiPrimite')) + ' randuri, din care factura importata: ' + TRANSFORM(lnGasit)
|
||||
ENDIF
|
||||
DO TVerdict WITH lnGasit = 1, 'T3 factura vizibila in grila Facturi primite', TRANSFORM(lnGasit) + ' randuri gasite'
|
||||
|
||||
213
utile/Teste/efactura_import/test_pozitie_lista_ef.prg
Normal file
213
utile/Teste/efactura_import/test_pozitie_lista_ef.prg
Normal file
@@ -0,0 +1,213 @@
|
||||
* test_pozitie_lista_ef.prg
|
||||
* Repro pe formularul real (frm_import_efactura, COMUN\clase\anaf_efactura.vc2): pozitia curenta
|
||||
* din crsFacturi trebuie pastrata dupa aplicafiltrudecompletat (GO TOP necinditionat muta focusul
|
||||
* pe primul rand, chiar cand randul curent ramane vizibil sub filtru) - simptom raportat: pozitionat
|
||||
* pe ultima factura, butonul de Import sau bifarea facturii sar pe primul rand. Acopera 3 cazuri:
|
||||
* T1 pozitionat pe ultima factura -> ActualizeazaContoare() nu muta pozitia; T2 bifarea ultimei
|
||||
* facturi pe drumul real (REPLACE ales + ActualizeazaContoare) -> bifa pusa SI pozitia pastrata;
|
||||
* T3 randul curent iese din filtrul chkDeCompletat -> GO TOP (comportamentul vechi ramane acolo
|
||||
* unde e corect); T4 randul curent ramane vizibil sub acelasi filtru -> pozitia se pastreaza.
|
||||
* Fixtura crsFacturi construita manual (nu din Oracle), cursoarele ajutatoare cerute de Init
|
||||
* copiate din import_efactura.prg (fara scriere in Oracle - nimic de sters la final).
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_pozitie_lista_ef.prg"
|
||||
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_pozitie_lista_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
|
||||
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_pozitie_lista_ef_log.txt"
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
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
|
||||
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle)
|
||||
|
||||
*-- crsFacturi/crsDetaliiFacturi si cursoarele ajutatoare cerute de Init, copie din import_efactura.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, 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)
|
||||
|
||||
* 4 facturi, ordine naturala id 1..4; id 2 si 4 fara de_completat (nu trec filtrul chkDeCompletat)
|
||||
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-POZ-1', 'FIXTURA POZITIE 1', 'FIXTURA POZITIE 1', 'RO99960001', ;
|
||||
100, 'RON', 0, 0, 0, 0, 'x', 1, '', 0, '1 cont', '')
|
||||
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, 2, 0, DATE(), 'TEST-POZ-2', 'FIXTURA POZITIE 2', 'FIXTURA POZITIE 2', 'RO99960002', ;
|
||||
100, 'RON', 0, 0, 0, 0, 'x', 1, '', 0, '', '')
|
||||
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, 3, 0, DATE(), 'TEST-POZ-3', 'FIXTURA POZITIE 3', 'FIXTURA POZITIE 3', 'RO99960003', ;
|
||||
100, 'RON', 0, 0, 0, 0, 'x', 1, '', 0, '1 cont', '')
|
||||
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, 4, 0, DATE(), 'TEST-POZ-4', 'FIXTURA POZITIE 4 ULTIMA', 'FIXTURA POZITIE 4 ULTIMA', 'RO99960004', ;
|
||||
100, 'RON', 0, 0, 0, 0, 'x', 1, '', 0, '', '')
|
||||
|
||||
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)
|
||||
ENDTEXT
|
||||
IF USED('crsDetaliiFacturi')
|
||||
USE IN crsDetaliiFacturi
|
||||
ENDIF
|
||||
CREATE CURSOR crsDetaliiFacturi (&lcSchemaDetalii)
|
||||
|
||||
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)
|
||||
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (12, 'Terti','628', 0, 12)
|
||||
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)
|
||||
INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (34, 'Servicii vandute','704', 0, 6)
|
||||
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
|
||||
SELECT crsFacturi
|
||||
loForm = CREATEOBJECT('frm_import_efactura', .T.)
|
||||
loForm.WindowType = 0
|
||||
DO PrTest WITH 'formular instantiat', TYPE('loForm') == 'O'
|
||||
loForm.lLotActiv = .T.
|
||||
|
||||
*=== T1: pozitionat pe ULTIMA factura (id=4) -> ActualizeazaContoare() nu muta pozitia ===
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = 4
|
||||
loForm.ActualizeazaContoare()
|
||||
DO PrTest WITH 'T1 pozitia ramane pe ultima factura (id=4) dupa ActualizeazaContoare', crsFacturi.id = 4, 'id obtinut=' + TRANSFORM(crsFacturi.id)
|
||||
|
||||
*=== T2: bifarea ultimei facturi pe drumul real (REPLACE ales + ActualizeazaContoare) ===
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = 4
|
||||
REPLACE ales WITH 1 IN crsFacturi
|
||||
loForm.ActualizeazaContoare()
|
||||
DO PrTest WITH 'T2 bifa pusa pe ultima factura', crsFacturi.id = 4 AND crsFacturi.ales = 1, 'id=' + TRANSFORM(crsFacturi.id) + ' ales=' + TRANSFORM(crsFacturi.ales)
|
||||
DO PrTest WITH 'T2 pozitia ramane pe ultima factura (id=4) dupa bifare', crsFacturi.id = 4, 'id obtinut=' + TRANSFORM(crsFacturi.id)
|
||||
|
||||
*=== T3: randul curent (id=2, de_completat gol) iese din filtrul chkDeCompletat -> GO TOP ===
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = 2
|
||||
loForm.chkDeCompletat.Value = .T.
|
||||
loForm.AplicaFiltruDeCompletat()
|
||||
DO PrTest WITH 'T3 randul iesit din filtru declanseaza GO TOP (nu mai e pe id=2)', crsFacturi.id <> 2, 'id obtinut=' + TRANSFORM(crsFacturi.id)
|
||||
DO PrTest WITH 'T3 GO TOP aterizeaza pe primul rand vizibil (id=1, are de_completat)', crsFacturi.id = 1, 'id obtinut=' + TRANSFORM(crsFacturi.id)
|
||||
|
||||
*=== T4: randul curent (id=3, are de_completat) ramane vizibil sub acelasi filtru -> pozitia se pastreaza ===
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = 3
|
||||
loForm.AplicaFiltruDeCompletat()
|
||||
DO PrTest WITH 'T4 randul vizibil sub filtru isi pastreaza pozitia (id=3)', crsFacturi.id = 3, 'id obtinut=' + TRANSFORM(crsFacturi.id)
|
||||
|
||||
loForm.chkDeCompletat.Value = .F.
|
||||
loForm.AplicaFiltruDeCompletat()
|
||||
|
||||
loForm.Release()
|
||||
IF USED('crsFacturi')
|
||||
USE IN crsFacturi
|
||||
ENDIF
|
||||
IF USED('crsDetaliiFacturi')
|
||||
USE IN crsDetaliiFacturi
|
||||
ENDIF
|
||||
DO PrTest WITH 'cleanup: crsFacturi/crsDetaliiFacturi inchise, 0 leftover (nimic scris in Oracle)', !USED('crsFacturi') AND !USED('crsDetaliiFacturi')
|
||||
|
||||
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
|
||||
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
|
||||
485
utile/Teste/efactura_import/test_progres_lot_ui.prg
Normal file
485
utile/Teste/efactura_import/test_progres_lot_ui.prg
Normal file
@@ -0,0 +1,485 @@
|
||||
* test_progres_lot_ui.prg
|
||||
* Verificare vizuala runda 31 (progres vizibil la importul in lot eFactura), COMUN\clase\
|
||||
* anaf_efactura.vc2 + omodificari.vc2: (a) grdFacturi deruleaza la factura curenta cand randul
|
||||
* e sub fereastra vizibila, (b) frm_modific2024 apare coborat sub banda de progres a lotului,
|
||||
* (c) titlurile de import (ambele rute) si _screen.Caption arata prefixul de lot.
|
||||
*
|
||||
* Lot de 10 facturi ZZTEST (fixturi seed_test_import_efactura.ps1), ordonate determinist prin
|
||||
* suprascrierea locala a datei (crsFacturi e cursor local, neinscris in Oracle) astfel incat
|
||||
* pozitia 6 din coada (mijlocul lotului) sa fie si C4 (5256, ruta Import gestiune - singura care deschide
|
||||
* frm_modific2024). Se adauga randuri sintetice ("filler", completat=1/completatdet=1, ales=0,
|
||||
* fara cod fiscal - deci neeligibile) inaintea celor 10 reale, in numar calculat din
|
||||
* grdFacturi.Height/RowHeight, ca pozitia fizica a randului 10 sa cada sub zona vizibila a
|
||||
* gridului la deschidere (WindowState=2) - fara ele, 10 randuri reale incap oricum pe ecran.
|
||||
*
|
||||
* Ambele dialoguri modale hardcodate (frm_introd_compact2007.Show(1) din pmenu.introducere_compacta,
|
||||
* frm_modific2024.Show(1,...) din ImportModifica) sunt conduse de un Timer pe _SCREEN (situatia B,
|
||||
* testare-ui-vfp.md): captureaza titlul/pozitia, apoi apasa RENUNTARE (nu Terminare) - niciun
|
||||
* document contabil nu se creeaza, deci nu e nevoie de AnulareLotEF la final (verificat oricum,
|
||||
* id_fact ramane 0 pe ambele facturi folosite pentru capturi).
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File test_progres_lot_ui.ps1
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_progres_lot_ui_log.txt'
|
||||
gcSyncDir = 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\uisync_progreslot\'
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO TErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
SET PROCEDURE TO 'D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg' ADDITIVE
|
||||
SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\ui_harness.prg') ADDITIVE
|
||||
|
||||
PUBLIC gnPass, gnFail, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
|
||||
DO ('D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 9
|
||||
IF gnHandle <= 0
|
||||
DO TVerdict WITH .F., 'PRECONDITIE conectare Oracle', 'gnHandle=' + TRANSFORM(gnHandle)
|
||||
DO HarnessDone WITH 'done PRECONDITIE LIPSA'
|
||||
QUIT
|
||||
ENDIF
|
||||
IF glLunaInchisa
|
||||
DO TVerdict WITH .F., 'PRECONDITIE luna deschisa', 'glLunaInchisa=.T. pe schema de test'
|
||||
DO HarnessDone WITH 'done PRECONDITIE LIPSA'
|
||||
QUIT
|
||||
ENDIF
|
||||
DO HarnessLog WITH 'mediu OK, schema=' + gcS + ' gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna)
|
||||
|
||||
SET PROCEDURE TO import_efactura.prg ADDITIVE
|
||||
SET PROCEDURE TO recunoastere_articol_ef.prg ADDITIVE
|
||||
SET PROCEDURE TO coada_contabilizare_ef.prg ADDITIVE
|
||||
SET PROCEDURE TO anulare_lot_ef.prg ADDITIVE
|
||||
SET PROCEDURE TO pmenu.prg ADDITIVE
|
||||
SET PROCEDURE TO oscrie_in_fisiere.prg ADDITIVE
|
||||
DO HarnessLog WITH 'proceduri incarcate'
|
||||
|
||||
* cele 10 facturi ZZTEST folosite in lot, in ordinea dorita in coada (C4 pe pozitia 6, din mijlocul
|
||||
* lotului - singura cu articol gestionabil - ruta 2, frm_modific2024)
|
||||
LOCAL ARRAY laIdLot(10)
|
||||
laIdLot(1) = 7360 && A1-C
|
||||
laIdLot(2) = 7364 && A2-C
|
||||
laIdLot(3) = 7368 && A3-C
|
||||
laIdLot(4) = 7372 && A4-C
|
||||
laIdLot(5) = 7380 && A5-C
|
||||
laIdLot(6) = 7408 && C4-C - Import gestiune
|
||||
laIdLot(7) = 7387 && A7-C
|
||||
laIdLot(8) = 7392 && B1-C
|
||||
laIdLot(9) = 7402 && C1-C
|
||||
laIdLot(10) = 7382 && A6-C
|
||||
|
||||
LOCAL lcListaId, lnI
|
||||
lcListaId = ''
|
||||
FOR lnI = 1 TO 10
|
||||
lcListaId = lcListaId + IIF(EMPTY(lcListaId), '', ',') + TRANSFORM(laIdLot(lnI))
|
||||
ENDFOR
|
||||
DO HarnessLog WITH 'lot: ' + lcListaId
|
||||
|
||||
TRY
|
||||
DO BuildCursoare WITH lcListaId
|
||||
DO HarnessLog WITH 'crsFacturi reccount=' + TRANSFORM(RECCOUNT('crsFacturi'))
|
||||
DO TVerdict WITH RECCOUNT('crsFacturi') = 10, 'setup: cele 10 facturi ZZTEST in crsFacturi', TRANSFORM(RECCOUNT('crsFacturi'))
|
||||
|
||||
DO BuildCursoareHelper
|
||||
DO HarnessLog WITH 'cursoare helper construite'
|
||||
|
||||
* gestiune implicita pentru facturi primite (optiunea EFACTURA_ID_GESTIUNE_P, citita normal
|
||||
* de frm_configurare_efactura) - fara ea, orice linie gestionabila (C4) ramane "de completat"
|
||||
* si e sarita de coada inainte sa ajunga la ImportModifica
|
||||
PUBLIC gnEFACTURA_ID_GESTIUNE_P
|
||||
gnEFACTURA_ID_GESTIUNE_P = 6
|
||||
|
||||
* analitic completat manual pe linia C4 (contul 371 cere analitic) - ca un operator care a
|
||||
* completat deja linia inainte s-o bifeze in coada
|
||||
SELECT crsDetaliiFacturi
|
||||
REPLACE acont WITH '4' FOR id_efactura = laIdLot(6)
|
||||
|
||||
* ordine determinista a cozii: 01..10 sept 2026, id-ul din laIdLot(n) pe ziua n
|
||||
SELECT crsFacturi
|
||||
FOR lnI = 1 TO 10
|
||||
REPLACE data_act WITH DATE(2026, 9, lnI) FOR id = laIdLot(lnI)
|
||||
ENDFOR
|
||||
|
||||
SELECT crsFacturi
|
||||
LOCAL loForm
|
||||
loForm = CREATEOBJECT('frm_import_efactura', .T.)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
loForm.WindowState = 2
|
||||
DO HarnessLog WITH 'FORM deschis, lLotActiv=' + TRANSFORM(loForm.lLotActiv) + ' ClassLibrary=' + TRANSFORM(loForm.ClassLibrary)
|
||||
DO TVerdict WITH loForm.lLotActiv, 'setup: EFACTURA_LOT_ACTIV citit ca activ (seed)', TRANSFORM(loForm.lLotActiv)
|
||||
|
||||
* Init/Load-ul formularului isi are propria logica de (re)selectie a randurilor (preferinta
|
||||
* utilizator) - bifez lotul DUPA deschidere, ca ales=1 sa nu fie suprascris
|
||||
SELECT crsFacturi
|
||||
REPLACE ALL ales WITH 0
|
||||
REPLACE ales WITH 1 FOR INLIST(id, laIdLot(1), laIdLot(2), laIdLot(3), laIdLot(4), laIdLot(5), laIdLot(6), laIdLot(7), laIdLot(8), laIdLot(9), laIdLot(10))
|
||||
|
||||
* cate randuri incap vizibil in grdFacturi la WindowState=2 - randurile filler impinse
|
||||
* inaintea celor 10 reale trebuie sa treaca de acest numar, altfel C4 (pozitia 6) ar fi
|
||||
* oricum vizibila fara nicio derulare si testul (a) n-ar dovedi nimic
|
||||
LOCAL lnRowH, lnVizibile, lnFillere
|
||||
lnRowH = loForm.grdFacturi.RowHeight
|
||||
IF lnRowH <= 0
|
||||
lnRowH = 17
|
||||
ENDIF
|
||||
lnVizibile = INT(loForm.grdFacturi.Height / lnRowH)
|
||||
lnFillere = lnVizibile + 5
|
||||
DO HarnessLog WITH 'grdFacturi.Height=' + TRANSFORM(loForm.grdFacturi.Height) + ' RowHeight=' + TRANSFORM(lnRowH) + ' vizibile~=' + TRANSFORM(lnVizibile) + ' fillere adaugate=' + TRANSFORM(lnFillere)
|
||||
|
||||
SELECT crsFacturi
|
||||
FOR lnI = 1 TO lnFillere
|
||||
APPEND BLANK
|
||||
REPLACE id WITH -1000 - lnI, ales WITH 0, id_fact WITH 0, ;
|
||||
data_act WITH DATE(2026, 8, 1), numar_act WITH 'ZZFILLER-' + TRANSFORM(lnI), ;
|
||||
xfurnizor WITH 'ZZTEST FILLER ' + TRANSFORM(lnI), xclient WITH '', partener WITH '', ;
|
||||
cod_fiscal WITH '', cod_fiscal_emitent WITH '', total_fara_tva WITH 0, total_tva WITH 0, ;
|
||||
total_tva_ron WITH 0, total_cu_tva WITH 0, discount_fara_tva WITH 0, taxe_fara_tva WITH 0, ;
|
||||
valoare_fara_tva WITH 0, total_de_plata WITH 0, nume_valuta WITH 'RON', test WITH 0, ;
|
||||
procesat WITH 0, TVAIncasare WITH 0, completat WITH 1, completatdet WITH 1, ;
|
||||
creditnote WITH 0, eligibil_lot WITH 0, motiv_lot WITH '', eroare_lot WITH 0, ;
|
||||
de_completat WITH '', part_inactiv WITH 0
|
||||
ENDFOR
|
||||
|
||||
* ordinea fizica de insertie (fillere APPEND-uite dupa cele 10 reale) nu e ordinea de afisare/
|
||||
* scanare a gridului - activez explicit un ordine pe data_act, ca fillerele (datate august)
|
||||
* sa preceada efectiv cele 10 facturi reale (septembrie) in grid si in coada
|
||||
INDEX ON DTOS(data_act) + numar_act TAG lottest
|
||||
SET ORDER TO lottest
|
||||
loForm.grdFacturi.Refresh()
|
||||
|
||||
* pozitia LOGICA (in ordinea curenta a gridului, nu RECNO() fizic) a lui C4 - GO TOP la
|
||||
* final, ca do_coada (care nu face GO TOP inainte de MarcheazaEligibilitate) sa porneasca
|
||||
* de la primul rand
|
||||
LOCAL lnPozC4
|
||||
lnPozC4 = 0
|
||||
SELECT crsFacturi
|
||||
GO TOP
|
||||
SCAN
|
||||
lnPozC4 = lnPozC4 + 1
|
||||
IF id = laIdLot(6)
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
DO TVerdict WITH lnPozC4 > lnVizibile, 'setup: C4 (poz.6) e la un rand logic peste zona vizibila', 'pozitie logica=' + TRANSFORM(lnPozC4) + ' vizibile~=' + TRANSFORM(lnVizibile)
|
||||
GO TOP
|
||||
|
||||
loForm.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
* --- driver pentru dialogurile modale hardcodate (situatia B, testare-ui-vfp.md) ---
|
||||
PUBLIC glCapC1, glCapB, glCapA
|
||||
glCapC1 = .F.
|
||||
glCapB = .F.
|
||||
glCapA = .F.
|
||||
|
||||
PUBLIC goLotForm
|
||||
goLotForm = loForm
|
||||
|
||||
* CompleteazaFactura() ruleaza chiar dupa cele doua Refresh-uri de pozitionare din do_coada
|
||||
* (BINDEVENT pe grdFacturi.Refresh nu merge: handler-ul e chemat INAINTE ca metoda nativa sa
|
||||
* deruleze efectiv grila, deci captura ar prinde starea veche, nederulata)
|
||||
LOCAL loGridWatch, loTmr
|
||||
loGridWatch = CREATEOBJECT('oGridWatchLot')
|
||||
BINDEVENT(loForm, 'CompleteazaFactura', loGridWatch, 'OnBeforeCompleteaza')
|
||||
|
||||
loTmr = CREATEOBJECT('tmrProgresLot')
|
||||
loTmr.Enabled = .T.
|
||||
|
||||
LOCAL loDiagCoada
|
||||
loDiagCoada = CREATEOBJECT('CoadaContabilizareEF')
|
||||
loDiagCoada.MarcheazaEligibilitate('crsFacturi', glLunaInchisa)
|
||||
SELECT crsFacturi
|
||||
FOR lnI = 1 TO 10
|
||||
LOCATE FOR id = laIdLot(lnI)
|
||||
DO HarnessLog WITH ' DIAGNOSTIC[' + TRANSFORM(lnI) + '] id=' + TRANSFORM(laIdLot(lnI)) + ' ales=' + TRANSFORM(ales) + ' eligibil_lot=' + TRANSFORM(eligibil_lot) + ' motiv_lot=[' + ALLTRIM(NVL(motiv_lot,'')) + ']'
|
||||
ENDFOR
|
||||
SELECT crsFacturi
|
||||
GO TOP
|
||||
|
||||
DO HarnessLog WITH 'pornesc do_coada()'
|
||||
TRY
|
||||
loForm.do_coada()
|
||||
CATCH TO loExCoada
|
||||
DO HarnessLog WITH 'EXCEPTIE do_coada: ' + loExCoada.Message
|
||||
ENDTRY
|
||||
loTmr.Enabled = .F.
|
||||
DO HarnessLog WITH 'do_coada() terminat'
|
||||
|
||||
* C4 poate ramane SARIT de gate-ul "de completat" al coach (cont 371 cere analitic pe gestiune,
|
||||
* motiv real de afaceri, nelegat de progresul vizual testat aici - vezi raportul coada mai jos).
|
||||
* Daca s-a intamplat asta, conduc manual EXACT liniile de progres pe care do_coada le-ar seta
|
||||
* pentru pozitia 6/10 (copie fidela din anaf_efactura.vc2:do_coada), apoi apelul REAL
|
||||
* do_executa(2) - acelasi cod de aplicatie, doar fara pre-verificarea "de completat" a cozii.
|
||||
IF !glCapB
|
||||
DO HarnessLog WITH 'FALLBACK (b/c2): do_coada a sarit C4 (de completat) - conduc manual do_executa(2)'
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = laIdLot(6)
|
||||
loForm.lblCoadaAntet.Visible = .T.
|
||||
loForm.cAntetLot = '[6/10] ' + ALLTRIM(NVL(xfurnizor,'')) + ' ' + ALLTRIM(NVL(numar_act,'')) + ' - '
|
||||
_screen.Caption = _screen.Caption + ' - ' + Alltrim(loForm.lblCoadaAntet.Caption)
|
||||
loForm.grdFacturi.Refresh()
|
||||
loForm.CompleteazaFactura()
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = laIdLot(6)
|
||||
loForm.actualizeaza_grid2()
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = laIdLot(6)
|
||||
loForm.CompleteazaDetaliiFactura()
|
||||
SELECT crsDetaliiFacturi
|
||||
REPLACE acont WITH '4' FOR id_efactura = laIdLot(6)
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = laIdLot(6)
|
||||
loTmr.Enabled = .T.
|
||||
TRY
|
||||
loForm.do_executa(2)
|
||||
CATCH TO loExFallback
|
||||
DO HarnessLog WITH 'EXCEPTIE FALLBACK do_executa(2): ' + loExFallback.Message
|
||||
ENDTRY
|
||||
loTmr.Enabled = .F.
|
||||
loForm.cAntetLot = ''
|
||||
ENDIF
|
||||
|
||||
DO TVerdict WITH glCapC1, 'captura (c1) facuta - frm_introd_compact2007 detectat', TRANSFORM(glCapC1)
|
||||
DO TVerdict WITH glCapA, 'captura (a) facuta - grdFacturi.Refresh() pe pozitia 6', TRANSFORM(glCapA)
|
||||
DO TVerdict WITH glCapB, 'captura (b/c2) facuta - frm_modific2024 detectat', TRANSFORM(glCapB)
|
||||
|
||||
IF USED('crsCoadaRaport')
|
||||
SELECT crsCoadaRaport
|
||||
SCAN
|
||||
DO HarnessLog WITH ' raport coada: id_efactura=' + TRANSFORM(id_efactura) + ' numar_act=' + ALLTRIM(NVL(numar_act,'')) + ' stare=' + ALLTRIM(NVL(stare,'')) + ' motiv=' + ALLTRIM(NVL(motiv,''))
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
|
||||
* verificare: renuntarea la ambele dialoguri (c1/A1 si b-c2/C4) nu a scris niciun document real
|
||||
LOCAL lnIdFactA1, lnIdFactC4
|
||||
lnIdFactA1 = -1
|
||||
lnIdFactC4 = -1
|
||||
goExecutor.oSelecteaza2Value('select nvl(id_fact,0) from anaf_efactura where id = ' + TRANSFORM(laIdLot(1)), @lnIdFactA1)
|
||||
goExecutor.oSelecteaza2Value('select nvl(id_fact,0) from anaf_efactura where id = ' + TRANSFORM(laIdLot(6)), @lnIdFactC4)
|
||||
DO TVerdict WITH NVL(lnIdFactA1,-1) = 0, 'curatenie: A1 (5208) fara document contabil (renuntat)', TRANSFORM(lnIdFactA1)
|
||||
DO TVerdict WITH NVL(lnIdFactC4,-1) = 0, 'curatenie: C4 (5256) fara document contabil (renuntat)', TRANSFORM(lnIdFactC4)
|
||||
|
||||
DO HarnessLog WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
||||
DO HarnessDone WITH IIF(gnFail = 0, 'done OK', 'done CU ESECURI')
|
||||
|
||||
IF TYPE('loForm') = 'O'
|
||||
loForm.Release()
|
||||
ENDIF
|
||||
CATCH TO loExMain
|
||||
DO HarnessLog WITH 'EXCEPTIE MAIN: ' + loExMain.Message + ' linia ' + TRANSFORM(loExMain.LineNo)
|
||||
DO HarnessDone WITH 'done EXCEPTIE'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
***********************
|
||||
PROCEDURE TVerdict
|
||||
LPARAMETERS tlOk, tcNume, tcDetalii
|
||||
IF tlOk
|
||||
gnPass = gnPass + 1
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
ENDIF
|
||||
DO HarnessLog WITH IIF(tlOk, 'PASS ', 'FAIL ') + tcNume + ' | ' + TRANSFORM(tcDetalii)
|
||||
ENDPROC
|
||||
|
||||
***********************
|
||||
PROCEDURE TErr
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLine
|
||||
DO HarnessLog WITH 'EROARE ' + TRANSFORM(tnError) + ' [' + TRANSFORM(tcMessage) + '] in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLine)
|
||||
ENDPROC
|
||||
|
||||
***********************
|
||||
* crsFacturi/crsDetaliiFacturi pentru exact facturile din tcListaId - copie fidela din
|
||||
* test_c1_echivalenta_lot.prg (BuildCursoare)
|
||||
PROCEDURE BuildCursoare
|
||||
LPARAMETERS tcListaId
|
||||
LOCAL lcSchema, lcSelect, lcOrder, lcGroup, lcFiltru, lcFiltruOriginal, llModParam, llAfiseaza
|
||||
|
||||
IF USED('crsFacturi')
|
||||
USE IN crsFacturi
|
||||
ENDIF
|
||||
IF USED('crsDetaliiFacturi')
|
||||
USE IN crsDetaliiFacturi
|
||||
ENDIF
|
||||
IF USED('crsDetaliiFacturiTemp')
|
||||
USE IN crsDetaliiFacturiTemp
|
||||
ENDIF
|
||||
|
||||
TEXT TO lcSchema 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, eligibil_lot N(1), motiv_lot V(120), eroare_lot N(1), de_completat V(200), part_inactiv N(1)
|
||||
ENDTEXT
|
||||
TEXT TO lcSelect TEXTMERGE NOSHOW
|
||||
SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, partener, id_incarcare, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, case when jtotctva is null then null when NVL(nume_valuta,'RON') <> 'RON' then null else decode(creditnote,0,1,-1) * NVL(total_cu_tva,0.00) - (NVL(jtotctva,0.00) - NVL(jtva_ti,0.00)) end as diferenta, procesat,
|
||||
'' as SerieActRoa, CAST(null as Number(14)) as NrActRoa, CAST(null as Number(20)) as idPartRoa, '' as PartenerRoa, '' as codFiscalROA, CAST(null as Number(10)) as idValutaROA, '' as numeValutaROA, CAST(null as Number(16,6)) as cursROA,
|
||||
'' as Cont, '' as acont, 0 as TVAIncasare, '' as Fdoc, CAST(0 as Number(5)) as Id_Fdoc, '' as Nrord, CAST(0 as Number(10)) as id_Lucrare, '' as Contract, CAST(null as Number(10)) as id_ctr,
|
||||
'' Sectie, CAST(0 as Number(10)) as id_Sectie, '' as dst_chlt, CAST(0 as Number(10)) as id_Venchelt, '' as nresp, CAST(0 as Number(10)) as id_responsabil, 0 as completat, 0 as completatdet, creditnote, '' as explicatiaROA, 1 as eligibil_lot, '' as motiv_lot, 0 as eroare_lot, '' as de_completat, 0 as part_inactiv
|
||||
FROM anaf_vefactura_primit
|
||||
ENDTEXT
|
||||
lcOrder = [data_act,numar_act,data_raspuns]
|
||||
lcGroup = []
|
||||
lcFiltru = [id in (] + m.tcListaId + [)]
|
||||
lcFiltruOriginal = []
|
||||
llModParam = .T.
|
||||
llAfiseaza = .F.
|
||||
|
||||
PRIVATE poFacturi, poFacturiDetalii
|
||||
poFacturi = NULL
|
||||
poFacturiDetalii = NULL
|
||||
|
||||
gencursor('poFacturi', 'crsFacturi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal)
|
||||
poFacturi.ca_baza1.afisare()
|
||||
|
||||
TEXT TO lcSchema 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)
|
||||
ENDTEXT
|
||||
TEXT TO lcSelect NOSHOW
|
||||
select 0 as distribuie, CAST(0 as number(10)) as id_tip, id_articol, id_gestiune, cont, acont, sursa_cont, id, id_efactura, nr, articol, descriere, detalii, cantitate, um, um_iso, um_roa, pret, proctva, tiptva, valoarefaratva, discountfaratva, in_stoc, articol_roa, codmat_roa, codbare, codclient, codfurnizor, codcpv, codnc8, nume_gestiune, cgest, 0 as tva, 0 as pretv, 0 as tvav, 0 as pretvtva from anaf_vefactura_detalii
|
||||
ENDTEXT
|
||||
lcOrder = [id_efactura,nr]
|
||||
lcGroup = []
|
||||
lcFiltru = [id_efactura in (] + m.tcListaId + [)]
|
||||
lcFiltruOriginal = []
|
||||
llModParam = .T.
|
||||
llAfiseaza = .F.
|
||||
|
||||
gencursor('poFacturiDetalii', 'crsDetaliiFacturiTemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal)
|
||||
poFacturiDetalii.ca_baza1.afisare()
|
||||
SELECT * FROM crsDetaliiFacturiTemp INTO CURSOR crsDetaliiFacturi READWRITE
|
||||
USE IN (SELECT('crsDetaliiFacturiTemp'))
|
||||
ENDPROC
|
||||
|
||||
***********************
|
||||
* cursoare helper cerute la instantierea frm_import_efactura - copie fidela din
|
||||
* test_c1_echivalenta_lot.prg (BuildCursoareHelper)
|
||||
PROCEDURE BuildCursoareHelper
|
||||
LOCAL llSucces
|
||||
|
||||
IF USED('cTipArticoleP')
|
||||
USE IN cTipArticoleP
|
||||
ENDIF
|
||||
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)
|
||||
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (12, 'Terti','628', 0, 12)
|
||||
SELECT cTipArticoleP
|
||||
GO TOP IN cTipArticoleP
|
||||
INDEX on ordine TAG ordine
|
||||
|
||||
IF USED('cTipArticoleE')
|
||||
USE IN cTipArticoleE
|
||||
ENDIF
|
||||
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)
|
||||
INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (34, 'Servicii vandute','704', 0, 6)
|
||||
SELECT cTipArticoleE
|
||||
GO TOP IN cTipArticoleE
|
||||
INDEX on ordine TAG ordine
|
||||
|
||||
IF USED('cTip')
|
||||
USE IN cTip
|
||||
ENDIF
|
||||
SELECT id, tip, cont, in_stoc, ordine FROM cTipArticoleP ORDER BY ordine INTO CURSOR cTip
|
||||
SELECT cTip
|
||||
INDEX on id TAG id
|
||||
|
||||
IF USED('cGestiuni')
|
||||
USE IN cGestiuni
|
||||
ENDIF
|
||||
llSucces = 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
|
||||
|
||||
IF USED('cGestiuni2')
|
||||
USE IN cGestiuni2
|
||||
ENDIF
|
||||
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
|
||||
|
||||
IF USED('cUMISO')
|
||||
USE IN cUMISO
|
||||
ENDIF
|
||||
llSucces = 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
|
||||
|
||||
IF USED('cUM')
|
||||
USE IN cUM
|
||||
ENDIF
|
||||
llSucces = goExecutor.oExecuta("select id, um, cod_um_iso, um_iso from vnom_um", 'cUM')
|
||||
SELECT cUM
|
||||
INDEX on id TAG id
|
||||
ENDPROC
|
||||
|
||||
***********************
|
||||
* deblocarea celor doua dialoguri modale hardcodate din fluxul lotului (situatia B,
|
||||
* testare-ui-vfp.md): apasa RENUNTARE de indata ce fiecare formular apare in _SCREEN.Forms -
|
||||
* nu se creeaza niciun document contabil, doar se captureaza starea vizuala inainte de renuntare.
|
||||
DEFINE CLASS tmrProgresLot AS Timer
|
||||
Interval = 200
|
||||
Enabled = .F.
|
||||
|
||||
PROCEDURE Timer
|
||||
LOCAL lnI, loFrm
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
loFrm = _SCREEN.Forms(lnI)
|
||||
IF UPPER(TRANSFORM(loFrm.Name)) == 'FRM_INTROD_COMPACT2007'
|
||||
* mai multe facturi din lot pot trece prin ruta "Import contabilitate" - captura
|
||||
* (c1) se face o singura data (prima aparitie), dar RENUNTAREA se face de fiecare
|
||||
* data, altfel lotul ramane blocat pe modalele urmatoare
|
||||
IF !glCapC1
|
||||
glCapC1 = .T.
|
||||
DO HarnessLog WITH 'CAPTURA (c1): titlufrumos1=[' + TRANSFORM(loFrm.titlufrumos1.Caption) + '] screenCaption=[' + TRANSFORM(_screen.Caption) + ']'
|
||||
This.Enabled = .F.
|
||||
DO HarnessStep WITH 0, 'c1_import_contabilitate_titlu'
|
||||
This.Enabled = .T.
|
||||
ENDIF
|
||||
TRY
|
||||
loFrm.Renunt1.Command1.Click()
|
||||
CATCH TO loErr1
|
||||
DO HarnessLog WITH 'EXCEPTIE Renunt1.Click: ' + loErr1.Message
|
||||
ENDTRY
|
||||
EXIT
|
||||
ENDIF
|
||||
IF !glCapB AND UPPER(TRANSFORM(loFrm.Name)) == 'FRM_MODIFIC2024'
|
||||
glCapB = .T.
|
||||
DO HarnessLog WITH 'CAPTURA (b/c2): Lb_titlu_alb_b121=[' + TRANSFORM(loFrm.Lb_titlu_alb_b121.Caption) + '] screenCaption=[' + TRANSFORM(_screen.Caption) + '] Top=' + TRANSFORM(loFrm.Top) + ' WindowState=' + TRANSFORM(loFrm.WindowState)
|
||||
This.Enabled = .F.
|
||||
DO HarnessStep WITH 2, 'b_c2_import_gestiune_lot_coborat'
|
||||
This.Enabled = .T.
|
||||
TRY
|
||||
loFrm.But_renunt1.Click()
|
||||
CATCH TO loErr2
|
||||
DO HarnessLog WITH 'EXCEPTIE But_renunt1.Click: ' + loErr2.Message
|
||||
ENDTRY
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
***********************
|
||||
* checkpoint (a): CompleteazaFactura() ruleaza in do_coada imediat dupa cele doua Refresh-uri de
|
||||
* pozitionare a randului curent (pozitia 6/10 in lot, identificata prin cAntetLot) - la acest
|
||||
* punct grila a fost deja derulata efectiv (spre deosebire de un BINDEVENT direct pe
|
||||
* grdFacturi.Refresh, chemat INAINTE ca metoda nativa sa deruleze grila)
|
||||
DEFINE CLASS oGridWatchLot AS Custom
|
||||
PROCEDURE OnBeforeCompleteaza
|
||||
IF glCapA OR TYPE('goLotForm') <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
IF '[6/10]' $ goLotForm.cAntetLot
|
||||
glCapA = .T.
|
||||
DO HarnessLog WITH 'CAPTURA (a): cAntetLot=[' + goLotForm.cAntetLot + '] RelativeRow=' + TRANSFORM(goLotForm.grdFacturi.RelativeRow) + ' ActiveRow=' + TRANSFORM(goLotForm.grdFacturi.ActiveRow)
|
||||
DO HarnessStep WITH 1, 'a_grid_deruleaza'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
12
utile/Teste/efactura_import/test_progres_lot_ui.ps1
Normal file
12
utile/Teste/efactura_import/test_progres_lot_ui.ps1
Normal file
@@ -0,0 +1,12 @@
|
||||
# test_progres_lot_ui.ps1 - wrapper peste harness-ul generic pentru verificarea vizuala a
|
||||
# progresului de lot la importul eFactura (runda 31).
|
||||
# Rulare: powershell -ExecutionPolicy Bypass -File test_progres_lot_ui.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_progres_lot_ui.prg') `
|
||||
-Steps @('c1_import_contabilitate_titlu','a_grid_deruleaza','b_c2_import_gestiune_lot_coborat') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_progreslot') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_progreslot') `
|
||||
-ReadyTimeoutSec 300 `
|
||||
-StepTimeoutSec 180
|
||||
154
utile/Teste/efactura_import/test_repro_gridprefs_cales.prg
Normal file
154
utile/Teste/efactura_import/test_repro_gridprefs_cales.prg
Normal file
@@ -0,0 +1,154 @@
|
||||
* test_repro_gridprefs_cales.prg
|
||||
* Reproducere IZOLATA (fara Oracle, fara formularul real - instanta ROA_CENTRAL plina, vezi
|
||||
* COMUN\docs\progres.md) a capcanei GridExtras (COMUN\utile\GridExtras\gridextras.vc2,
|
||||
* restoregridpreferences ~1051-1080) pe grdFacturi din frm_import_efactura
|
||||
* (COMUN\clase\anaf_efactura.vc2): un grid de test cu 5 coloane in ACELEASI pozitii relative ca
|
||||
* in clasa reala (cAles=Columns(1), cSemafor=Columns(ColumnCount), la fel ca in grdFacturi -
|
||||
* vezi COMUN\clase\anaf_efactura.vc2:10600 si :10814) + un gridprefs.tmp vechi (3 coloane,
|
||||
* salvat inainte ca ultimele doua sa existe). Corpul lui restoregridpreferences si blocul de
|
||||
* garda de azi (Init, anaf_efactura.vc2:13904-13916) sunt copiate LITERAL aici (nu reimplementate),
|
||||
* aplicate pe grid-ul de test in loc de pe formularul real, ca sa masoare mecanismul fara sa
|
||||
* atinga Oracle.
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File test_repro_gridprefs_cales.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
CLOSE DATABASES ALL
|
||||
|
||||
PUBLIC gcUILog, gnPass, gnFail
|
||||
gcUILog = 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_repro_gridprefs_cales_log.txt'
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO TErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
* cursor local, fara Oracle - grid-ul de test nu are nevoie de campuri reale (coloanele sunt
|
||||
* ADD OBJECT/redenumite manual, ca in clasa reala)
|
||||
CREATE CURSOR crsTest (id I)
|
||||
|
||||
loForm = CREATEOBJECT('Form')
|
||||
loForm.AddObject('grd1', 'grid')
|
||||
loForm.grd1.RecordSourceType = 1
|
||||
loForm.grd1.RecordSource = 'crsTest'
|
||||
loForm.grd1.ColumnCount = 5
|
||||
loForm.grd1.Columns(1).Name = 'cAles'
|
||||
loForm.grd1.Columns(2).Name = 'cB'
|
||||
loForm.grd1.Columns(3).Name = 'cC'
|
||||
loForm.grd1.Columns(4).Name = 'cD'
|
||||
loForm.grd1.Columns(5).Name = 'cSemafor'
|
||||
* latimea implicita din clasa reala pentru cAles (COMUN\clase\anaf_efactura.vc2:10603) - 26
|
||||
loForm.grd1.cAles.Width = 26
|
||||
|
||||
DO TLog WITH 'BASELINE ColumnOrder inainte de restore: cAles=' + TRANSFORM(loForm.grd1.cAles.ColumnOrder) + ' cB=' + TRANSFORM(loForm.grd1.cB.ColumnOrder) + ' cC=' + TRANSFORM(loForm.grd1.cC.ColumnOrder) + ' cD=' + TRANSFORM(loForm.grd1.cD.ColumnOrder) + ' cSemafor=' + TRANSFORM(loForm.grd1.cSemafor.ColumnOrder)
|
||||
|
||||
lcPrefFile = ADDBS(SYS(2023)) + 'test_repro_gridprefs_cales_prefs.tmp'
|
||||
IF FILE(m.lcPrefFile)
|
||||
DELETE FILE (m.lcPrefFile)
|
||||
ENDIF
|
||||
lcKey = SYS(1272, loForm.grd1)
|
||||
DO TLog WITH 'lcKey=' + m.lcKey
|
||||
|
||||
* ---------- gridprefs.tmp vechi: 3 coloane, salvate inainte ca ultimele doua (cD/cSemafor)
|
||||
* sa existe. Pozitia 1 = cAles (ColumnOrder=1, Width=26 - identic cu azi, cAles a existat
|
||||
* dintotdeauna primul in grdFacturi) ----------
|
||||
lcOldPrefs = '1,26,2,90,3,60,'
|
||||
STRTOFILE(m.lcKey + '(' + m.lcOldPrefs + ')' + CHR(13) + CHR(10), m.lcPrefFile, 0)
|
||||
DO TLog WITH 'gridprefs vechi (3 coloane): ' + m.lcOldPrefs
|
||||
|
||||
* ---------- restoregridpreferences, copiat LITERAL din gridextras.vc2:1058-1077 ----------
|
||||
Local lcPrefFileContents, lcGridHierarchy, lcPrefs, lcBeginPrefs, lcEndPrefs, loColumn, lnCounter, lnMax, loExc as Exception
|
||||
Local Array laPrefs(1)
|
||||
m.lcPrefFileContents = ""
|
||||
If File(m.lcPrefFile)
|
||||
Try
|
||||
m.lcPrefFileContents = Filetostr(m.lcPrefFile)
|
||||
m.lcGridHierarchy = Sys(1272, loForm.grd1)
|
||||
m.lcBeginPrefs = m.lcGridHierarchy + "("
|
||||
m.lcEndPrefs = ")"
|
||||
m.lcPrefs = Strextract(m.lcPrefFileContents,m.lcBeginPrefs,m.lcEndPrefs,1,1)
|
||||
If !Empty(m.lcPrefs)
|
||||
=Alines(laPrefs, m.lcPrefs, 7, ",")
|
||||
m.lnMax = Min(loForm.grd1.ColumnCount * 2, Alen(laPrefs))
|
||||
For m.lnCounter = 1 To m.lnMax Step 2
|
||||
m.loColumn = loForm.grd1.Columns((m.lnCounter + 1)/2)
|
||||
If Type("m.loColumn.columnorder") = "N"
|
||||
m.loColumn.ColumnOrder = Val(laPrefs(m.lnCounter))
|
||||
m.loColumn.Width = Val(laPrefs(m.lnCounter + 1))
|
||||
Endif
|
||||
Endfor
|
||||
Endif
|
||||
CATCH TO m.loExc
|
||||
DO TLog WITH 'EXCEPTIE restoregridpreferences: ' + m.loExc.Message + ' | lnMax=' + TRANSFORM(m.lnMax) + ' Alen(laPrefs)=' + TRANSFORM(Alen(laPrefs)) + ' lnCounter=' + TRANSFORM(m.lnCounter)
|
||||
Endtry
|
||||
ENDIF
|
||||
DO TLog WITH 'DUPA restoregridpreferences (toate): cAles=' + TRANSFORM(loForm.grd1.cAles.ColumnOrder) + '/' + TRANSFORM(loForm.grd1.cAles.Width) + ' cB=' + TRANSFORM(loForm.grd1.cB.ColumnOrder) + '/' + TRANSFORM(loForm.grd1.cB.Width) + ' cC=' + TRANSFORM(loForm.grd1.cC.ColumnOrder) + '/' + TRANSFORM(loForm.grd1.cC.Width) + ' cD=' + TRANSFORM(loForm.grd1.cD.ColumnOrder) + '/' + TRANSFORM(loForm.grd1.cD.Width) + ' cSemafor=' + TRANSFORM(loForm.grd1.cSemafor.ColumnOrder) + '/' + TRANSFORM(loForm.grd1.cSemafor.Width)
|
||||
|
||||
* ---------- blocul de garda EXISTENT azi in Init (anaf_efactura.vc2:13904-13916), copiat
|
||||
* literal, aplicat pe grid-ul de test ----------
|
||||
Local lcPrefFileContentsSem, lcKeySem, lcPrefsSem
|
||||
Local Array laPrefsSem(1)
|
||||
lcPrefFileContentsSem = ""
|
||||
If File(m.lcPrefFile)
|
||||
lcPrefFileContentsSem = Filetostr(m.lcPrefFile)
|
||||
Endif
|
||||
lcKeySem = Sys(1272, loForm.grd1) + "("
|
||||
lcPrefsSem = Strextract(m.lcPrefFileContentsSem, m.lcKeySem, ")", 1, 1)
|
||||
IF Empty(m.lcPrefsSem) Or Alines(laPrefsSem, m.lcPrefsSem, 7, ",") < loForm.grd1.ColumnCount * 2
|
||||
loForm.grd1.cSemafor.ColumnOrder = 1
|
||||
ENDIF
|
||||
DO TLog WITH 'DUPA garda (toate coloanele): cAles=' + TRANSFORM(loForm.grd1.cAles.ColumnOrder) + ' cB=' + TRANSFORM(loForm.grd1.cB.ColumnOrder) + ' cC=' + TRANSFORM(loForm.grd1.cC.ColumnOrder) + ' cD=' + TRANSFORM(loForm.grd1.cD.ColumnOrder) + ' cSemafor=' + TRANSFORM(loForm.grd1.cSemafor.ColumnOrder)
|
||||
|
||||
lnOrdAles = loForm.grd1.cAles.ColumnOrder
|
||||
lnWidAles = loForm.grd1.cAles.Width
|
||||
lnOrdSem = loForm.grd1.cSemafor.ColumnOrder
|
||||
lnWidSem = loForm.grd1.cSemafor.Width
|
||||
DO TLog WITH 'MASURAT dupa garda EXISTENTA (doar cSemafor tratat): cAles.ColumnOrder=' + TRANSFORM(lnOrdAles) + ' cAles.Width=' + TRANSFORM(lnWidAles) + ' | cSemafor.ColumnOrder=' + TRANSFORM(lnOrdSem) + ' cSemafor.Width=' + TRANSFORM(lnWidSem)
|
||||
|
||||
DO TVerdict WITH lnWidAles > 0, 'A1 cAles.Width > 0 (coloana nu e latime 0)', TRANSFORM(lnWidAles)
|
||||
DO TVerdict WITH lnOrdSem = 1, 'A2 cSemafor.ColumnOrder = 1 (garda existenta)', TRANSFORM(lnOrdSem)
|
||||
DO TVerdict WITH lnOrdAles = loForm.grd1.ColumnCount, 'A3 BUG: cAles ajunge ULTIMA coloana (ColumnOrder=ColumnCount) - ColumnOrder e swap, nu set brut: cSemafor.ColumnOrder=1 ii ia locul lui cAles si il trimite la coada', 'cAles=' + TRANSFORM(lnOrdAles) + ' ColumnCount=' + TRANSFORM(loForm.grd1.ColumnCount)
|
||||
|
||||
* ---------- CAZ B: reparare - aceeasi garda, plus o linie care repozitioneaza cAles pe 2 ----------
|
||||
loForm.grd1.cAles.ColumnOrder = 2
|
||||
lnOrdAlesFix = loForm.grd1.cAles.ColumnOrder
|
||||
lnOrdSemFix = loForm.grd1.cSemafor.ColumnOrder
|
||||
DO TLog WITH 'CAZ B (dupa reparare, +cAles.ColumnOrder=2): cAles=' + TRANSFORM(lnOrdAlesFix) + ' cSemafor=' + TRANSFORM(lnOrdSemFix)
|
||||
DO TVerdict WITH lnOrdSemFix = 1, 'B1 cSemafor.ColumnOrder = 1 dupa reparare', TRANSFORM(lnOrdSemFix)
|
||||
DO TVerdict WITH lnOrdAlesFix = 2, 'B2 cAles.ColumnOrder = 2 dupa reparare', TRANSFORM(lnOrdAlesFix)
|
||||
|
||||
loForm.Release()
|
||||
IF FILE(m.lcPrefFile)
|
||||
DELETE FILE (m.lcPrefFile)
|
||||
ENDIF
|
||||
IF USED('crsTest')
|
||||
USE IN crsTest
|
||||
ENDIF
|
||||
|
||||
DO TLog WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
||||
QUIT
|
||||
|
||||
***********************
|
||||
PROCEDURE TLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(TTOC(DATETIME()) + ' ' + tcMsg + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDPROC
|
||||
|
||||
***********************
|
||||
PROCEDURE TVerdict
|
||||
LPARAMETERS tlOk, tcNume, tcDetalii
|
||||
IF tlOk
|
||||
gnPass = gnPass + 1
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
ENDIF
|
||||
DO TLog WITH IIF(tlOk, 'PASS ', 'FAIL ') + tcNume + ' | ' + TRANSFORM(tcDetalii)
|
||||
ENDPROC
|
||||
|
||||
***********************
|
||||
PROCEDURE TErr
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLine
|
||||
DO TLog WITH 'EROARE ' + TRANSFORM(tnError) + ' [' + TRANSFORM(tcMessage) + '] in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLine)
|
||||
ENDPROC
|
||||
20
utile/Teste/efactura_import/test_repro_gridprefs_cales.ps1
Normal file
20
utile/Teste/efactura_import/test_repro_gridprefs_cales.ps1
Normal file
@@ -0,0 +1,20 @@
|
||||
# test_repro_gridprefs_cales.ps1 - rulare headless a repro-ului gridprefs.tmp vechi
|
||||
# (cAles/cSemafor pe grdFacturi, frm_import_efactura).
|
||||
# Rulare: powershell -ExecutionPolicy Bypass -File test_repro_gridprefs_cales.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
$Prg = Join-Path $Teste 'test_repro_gridprefs_cales.prg'
|
||||
$Fxp = [IO.Path]::ChangeExtension($Prg, '.fxp')
|
||||
$Err = [IO.Path]::ChangeExtension($Prg, '.err')
|
||||
$Log = Join-Path $Teste 'test_repro_gridprefs_cales_log.txt'
|
||||
$Vfp = 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe'
|
||||
|
||||
Remove-Item $Fxp, $Err, $Log -ErrorAction SilentlyContinue
|
||||
$p = Start-Process -FilePath $Vfp -ArgumentList '-A', '-T', "`"$Prg`"" -PassThru
|
||||
if (-not $p.WaitForExit(240000)) {
|
||||
$p.Kill()
|
||||
throw 'TIMEOUT: testul nu s-a terminat in 240s'
|
||||
}
|
||||
if (Test-Path $Err) { throw "Eroare de compilare: $(Get-Content $Err -Raw)" }
|
||||
if (-not (Test-Path $Log)) { throw "Lipseste logul $Log" }
|
||||
Get-Content $Log
|
||||
218
utile/Teste/efactura_import/test_repro_visible_null.prg
Normal file
218
utile/Teste/efactura_import/test_repro_visible_null.prg
Normal file
@@ -0,0 +1,218 @@
|
||||
* test_repro_visible_null.prg
|
||||
* frm_import_efactura.completeazaFactura pe o factura primita fara discount/taxe globale:
|
||||
* anaf_vefactura_primit intoarce discount_fara_tva/taxe_fara_tva NULL, iar expresia
|
||||
* (camp <> 0) da .NULL., care nu se poate atribui pe chkDistribuieDiscount.Visible
|
||||
* ("Data type is invalid for this property"). Testul verifica atat expresia izolata, cat si
|
||||
* apelul real al metodei din binarul livrat.
|
||||
*
|
||||
* Mediu: CENTRAL / MARIUSM_AUTO, perioada 09/2026, facturile semanate ZZTEST.
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File test_repro_visible_null.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcUILog, gnPass, gnFail
|
||||
gcUILog = 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_repro_visible_null_log.txt'
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO TErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
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', 2026, 9
|
||||
SET PROCEDURE TO import_efactura.prg ADDITIVE
|
||||
SET PROCEDURE TO recunoastere_articol_ef.prg ADDITIVE
|
||||
SET PROCEDURE TO coada_contabilizare_ef.prg ADDITIVE
|
||||
|
||||
DO TLog WITH 'INIT gnHandle=' + TRANSFORM(gnHandle) + ' gcS=' + TRANSFORM(gcS)
|
||||
|
||||
* ---------- T1: datele reale chiar au NULL pe discount/taxe ----------
|
||||
lcSql = "select id, numar_act, discount_fara_tva, taxe_fara_tva from anaf_vefactura_primit " + ;
|
||||
"where xfurnizor like 'ZZTEST%' order by numar_act"
|
||||
IF !goExecutor.oExecuta(m.lcSql, 'crsRepro')
|
||||
DO TVerdict WITH .F., 'T1 interogare anaf_vefactura_primit', 'oExecuta a esuat'
|
||||
DO TFinal
|
||||
ENDIF
|
||||
lnNule = 0
|
||||
SELECT crsRepro
|
||||
SCAN
|
||||
IF ISNULL(crsRepro.discount_fara_tva) OR ISNULL(crsRepro.taxe_fara_tva)
|
||||
lnNule = m.lnNule + 1
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
DO TLog WITH 'randuri ZZTEST=' + TRANSFORM(RECCOUNT('crsRepro')) + ' cu NULL=' + TRANSFORM(m.lnNule)
|
||||
DO TVerdict WITH (m.lnNule > 0), 'T1 exista facturi cu discount/taxe NULL', 'niciuna'
|
||||
|
||||
SELECT crsRepro
|
||||
LOCATE FOR ISNULL(discount_fara_tva) OR ISNULL(taxe_fara_tva)
|
||||
lnIdEF = crsRepro.id
|
||||
SCATTER NAME loRand MEMO
|
||||
|
||||
* ---------- T2: expresia neprotejata pica, cea cu NVL nu ----------
|
||||
loChk = CREATEOBJECT('checkbox')
|
||||
llEroare = .F.
|
||||
lcMesaj = ''
|
||||
TRY
|
||||
loChk.Visible = (loRand.discount_fara_tva <> 0 or loRand.taxe_fara_tva <> 0)
|
||||
CATCH TO loEx
|
||||
llEroare = .T.
|
||||
lcMesaj = loEx.Message
|
||||
ENDTRY
|
||||
DO TVerdict WITH m.llEroare, 'T2a expresia fara NVL da eroare pe NULL', '[' + m.lcMesaj + ']'
|
||||
|
||||
llEroare = .F.
|
||||
lcMesaj = ''
|
||||
TRY
|
||||
loChk.Visible = (NVL(loRand.discount_fara_tva, 0) <> 0 or NVL(loRand.taxe_fara_tva, 0) <> 0)
|
||||
CATCH TO loEx
|
||||
llEroare = .T.
|
||||
lcMesaj = loEx.Message
|
||||
ENDTRY
|
||||
DO TVerdict WITH !m.llEroare, 'T2b expresia cu NVL trece', m.lcMesaj
|
||||
|
||||
* ---------- T3: apelul real al metodei din binar, pe cursorul real ----------
|
||||
lcData1 = '01' + Padl(Int(m.gnLuna),2,'0') + Alltrim(Str(m.gnAn))
|
||||
ldData1 = GOMONTH(DATE(m.gnAn, m.gnLuna, 1), 1)
|
||||
lcData2 = '01' + PADL(MONTH(m.ldData1),2,'0') + ALLTRIM(STR(YEAR(m.ldData1)))
|
||||
TEXT To lcSchema 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, eligibil_lot N(1), motiv_lot V(120), eroare_lot N(1)
|
||||
ENDTEXT
|
||||
TEXT To lcSelect TEXTMERGE Noshow
|
||||
SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, partener, id_incarcare, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, case when jtotctva is null then null when NVL(nume_valuta,'RON') <> 'RON' then null else decode(creditnote,0,1,-1) * NVL(total_cu_tva,0.00) - (NVL(jtotctva,0.00) - NVL(jtva_ti,0.00)) end as diferenta, procesat,
|
||||
'' as SerieActRoa, CAST(null as Number(14)) as NrActRoa, CAST(null as Number(20)) as idPartRoa, '' as PartenerRoa, '' as codFiscalROA, CAST(null as Number(10)) as idValutaROA, '' as numeValutaROA, CAST(null as Number(16,6)) as cursROA,
|
||||
'' as Cont, '' as acont, 0 as TVAIncasare, '' as Fdoc, CAST(0 as Number(5)) as Id_Fdoc, '' as Nrord, CAST(0 as Number(10)) as id_Lucrare, '' as Contract, CAST(null as Number(10)) as id_ctr,
|
||||
'' Sectie, CAST(0 as Number(10)) as id_Sectie, '' as dst_chlt, CAST(0 as Number(10)) as id_Venchelt, '' as nresp, CAST(0 as Number(10)) as id_responsabil, 0 as completat, 0 as completatdet, creditnote, '' as explicatiaROA, 1 as eligibil_lot, '' as motiv_lot, 0 as eroare_lot
|
||||
FROM anaf_vefactura_primit
|
||||
ENDTEXT
|
||||
lcOrder = [data_act,numar_act,data_raspuns]
|
||||
lcgroup = []
|
||||
lcFiltru = [(data_act >= to_date('] + m.lcData1 + [','ddmmyyyy') and data_act < to_date('] + m.lcData2 + [','ddmmyyyy')) or (data_act is null and data_raspuns >= to_date('] + m.lcData1 + [','ddmmyyyy'))]
|
||||
lcFiltruOriginal = []
|
||||
llModParam = .T.
|
||||
llAfiseaza = .F.
|
||||
|
||||
PRIVATE poFacturi, poFacturiDetalii
|
||||
poFacturi = Null
|
||||
poFacturiDetalii = Null
|
||||
gencursor('poFacturi', 'crsFacturi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
|
||||
poFacturi.ca_baza1.afisare()
|
||||
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR ISNULL(discount_fara_tva) OR ISNULL(taxe_fara_tva)
|
||||
DO TVerdict WITH FOUND(), 'T3 setup: rand cu NULL in crsFacturi', TRANSFORM(RECCOUNT('crsFacturi')) + ' randuri'
|
||||
IF !FOUND()
|
||||
DO TFinal
|
||||
ENDIF
|
||||
DO TLog WITH 'rand testat: id=' + TRANSFORM(crsFacturi.id) + ' numar_act=' + ALLTRIM(NVL(crsFacturi.numar_act,''))
|
||||
|
||||
* cursoare cerute de Init-ul formularului (copie din vizImportEFactura)
|
||||
lnIdEF = crsFacturi.id
|
||||
TEXT To lcSchema 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)
|
||||
ENDTEXT
|
||||
TEXT To lcSelect Noshow
|
||||
select 0 as distribuie, CAST(0 as number(10)) as id_tip, id_articol, id_gestiune, cont, acont, sursa_cont, id, id_efactura, nr, articol, descriere, detalii, cantitate, um, um_iso, um_roa, pret, proctva, tiptva, valoarefaratva, discountfaratva, in_stoc, articol_roa, codmat_roa, codbare, codclient, codfurnizor, codcpv, codnc8, nume_gestiune, cgest, 0 as tva, 0 as pretv, 0 as tvav, 0 as pretvtva from anaf_vefactura_detalii
|
||||
ENDTEXT
|
||||
lcOrder = [nr]
|
||||
lcgroup = []
|
||||
lcFiltru = [id_efactura=] + ALLTRIM(STR(m.lnIdEF))
|
||||
lcFiltruOriginal = []
|
||||
llModParam = .T.
|
||||
llAfiseaza = .F.
|
||||
gencursor('poFacturiDetalii', 'crsDetaliiFacturiTemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
|
||||
poFacturiDetalii.ca_baza1.afisare()
|
||||
SELECT * FROM crsDetaliiFacturiTemp INTO CURSOR crsDetaliiFacturi READWRITE
|
||||
|
||||
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)
|
||||
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (12, 'Terti','628', 0, 12)
|
||||
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)
|
||||
INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (34, 'Servicii vandute','704', 0, 6)
|
||||
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
|
||||
|
||||
llSucces = 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
|
||||
|
||||
llSucces = 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
|
||||
|
||||
llSucces = goExecutor.oExecuta("select id, um, cod_um_iso, um_iso from vnom_um", 'cUM')
|
||||
SELECT cUM
|
||||
INDEX on id TAG id
|
||||
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR ISNULL(discount_fara_tva) OR ISNULL(taxe_fara_tva)
|
||||
|
||||
loForm = Null
|
||||
TRY
|
||||
loForm = CREATEOBJECT("frm_import_efactura", .T.)
|
||||
loForm.WindowType = 0
|
||||
CATCH TO loEx
|
||||
DO TVerdict WITH .F., 'T3 instantiere frm_import_efactura', loEx.Message
|
||||
DO TFinal
|
||||
ENDTRY
|
||||
|
||||
llEroare = .F.
|
||||
lcMesaj = ''
|
||||
TRY
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR ISNULL(discount_fara_tva) OR ISNULL(taxe_fara_tva)
|
||||
DO TLog WITH 'inainte de apel: found=' + TRANSFORM(FOUND()) + ' recno=' + TRANSFORM(RECNO()) + ' id=' + TRANSFORM(NVL(crsFacturi.id,0))
|
||||
loForm.completeazaFactura()
|
||||
CATCH TO loEx
|
||||
llEroare = .T.
|
||||
lcMesaj = loEx.Message + ' | ' + loEx.Procedure + ' linia ' + TRANSFORM(loEx.LineNo)
|
||||
ENDTRY
|
||||
DO TVerdict WITH !m.llEroare, 'T3 completeazaFactura pe rand cu NULL', m.lcMesaj
|
||||
IF !m.llEroare
|
||||
DO TLog WITH 'chkDistribuieDiscount Visible=' + TRANSFORM(loForm.chkDistribuieDiscount.Visible) + ' Value=' + TRANSFORM(loForm.chkDistribuieDiscount.Value)
|
||||
DO TVerdict WITH loForm.chkDistribuieDiscount.Visible = .F., 'T3 bifa ascunsa cand nu exista discount global', TRANSFORM(loForm.chkDistribuieDiscount.Visible)
|
||||
ENDIF
|
||||
|
||||
DO TFinal
|
||||
|
||||
PROCEDURE TLog
|
||||
LPARAMETERS tcText
|
||||
STRTOFILE(m.tcText + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE TVerdict
|
||||
LPARAMETERS tlOk, tcNume, tcDetaliu
|
||||
IF m.tlOk
|
||||
gnPass = m.gnPass + 1
|
||||
DO TLog WITH 'PASS ' + m.tcNume
|
||||
ELSE
|
||||
gnFail = m.gnFail + 1
|
||||
DO TLog WITH 'FAIL ' + m.tcNume + ' : ' + NVL(m.tcDetaliu, '')
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE TErr
|
||||
LPARAMETERS tnEroare, tcMesaj, tcProgram, tnLinie
|
||||
DO TLog WITH 'EROARE ' + TRANSFORM(m.tnEroare) + ' ' + m.tcMesaj + ' in ' + m.tcProgram + ':' + TRANSFORM(m.tnLinie)
|
||||
gnFail = m.gnFail + 1
|
||||
DO TFinal
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE TFinal
|
||||
DO TLog WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
||||
QUIT
|
||||
ENDPROC
|
||||
14
utile/Teste/efactura_import/test_repro_visible_null.ps1
Normal file
14
utile/Teste/efactura_import/test_repro_visible_null.ps1
Normal file
@@ -0,0 +1,14 @@
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
$Prg = Join-Path $Teste 'test_repro_visible_null.prg'
|
||||
$Fxp = [IO.Path]::ChangeExtension($Prg, '.fxp')
|
||||
$Err = [IO.Path]::ChangeExtension($Prg, '.err')
|
||||
$Log = Join-Path $Teste 'test_repro_visible_null_log.txt'
|
||||
$Vfp = 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe'
|
||||
|
||||
Remove-Item $Fxp, $Err, $Log -ErrorAction SilentlyContinue
|
||||
$p = Start-Process -FilePath $Vfp -ArgumentList '-A', '-T', "`"$Prg`"" -PassThru
|
||||
if (-not $p.WaitForExit(240000)) { $p.Kill(); throw 'TIMEOUT' }
|
||||
if (Test-Path $Err) { throw "Eroare de compilare: $(Get-Content $Err -Raw)" }
|
||||
if (-not (Test-Path $Log)) { throw "Lipseste logul $Log" }
|
||||
Get-Content $Log
|
||||
188
utile/Teste/efactura_import/test_rezolvare_partener_ef.prg
Normal file
188
utile/Teste/efactura_import/test_rezolvare_partener_ef.prg
Normal file
@@ -0,0 +1,188 @@
|
||||
* test_rezolvare_partener_ef.prg
|
||||
* RezolvarePartenerEF.Rezolva: cele patru ramuri (un activ / doar inactiv / 2+ activi ambigui,
|
||||
* pe ambele variante RO / niciunul - creare automata), plus regresie pe MarcheazaEligibilitate/
|
||||
* EligibilRand din coada_contabilizare_ef.prg (nu mai blocheaza pe partener negasit sau inactiv,
|
||||
* blocheaza doar pe CIF ambiguu). Fixtura proprie (CIF 9996000x), creata si stearsa in aceasta
|
||||
* rulare, pe schema MARIUSM_AUTO@ROA_CENTRAL.
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_rezolvare_partener_ef.prg"
|
||||
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_rezolvare_partener_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
|
||||
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_rezolvare_partener_ef_log.txt"
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
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 rezolvare_partener_ef ADDITIVE
|
||||
SET PROCEDURE TO coada_contabilizare_ef ADDITIVE
|
||||
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle)
|
||||
|
||||
DO StergeFixtura
|
||||
|
||||
*-- T1: un singur partener activ, CIF cu RO, interogat tot cu RO
|
||||
goExecutor.oExecute("INSERT INTO NOM_PARTENERI (cod_fiscal, denumire, inactiv) VALUES ('RO99960001', 'FIXTURA REZOLVARE T1', 0)", 'crsInsT1')
|
||||
|
||||
*-- T2: un singur partener, stocat FARA RO, inactiv - interogat cu RO (variante incrucisate)
|
||||
goExecutor.oExecute("INSERT INTO NOM_PARTENERI (cod_fiscal, denumire, inactiv) VALUES ('99960002', 'FIXTURA REZOLVARE T2', 1)", 'crsInsT2')
|
||||
|
||||
*-- T3: doi parteneri activi pe acelasi CIF, unul cu RO si unul fara - interogat fara RO
|
||||
goExecutor.oExecute("INSERT INTO NOM_PARTENERI (cod_fiscal, denumire, inactiv) VALUES ('RO99960003', 'FIXTURA REZOLVARE T3 RO', 0)", 'crsInsT3a')
|
||||
goExecutor.oExecute("INSERT INTO NOM_PARTENERI (cod_fiscal, denumire, inactiv) VALUES ('99960003', 'FIXTURA REZOLVARE T3 FARA RO', 0)", 'crsInsT3b')
|
||||
|
||||
*-- T4: niciun partener pe acest CIF - se creeaza automat
|
||||
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitFixtura')
|
||||
|
||||
LOCAL loRez, loR
|
||||
loRez = CREATEOBJECT('RezolvarePartenerEF')
|
||||
|
||||
DO PrLogLocal WITH '=== T1: un partener activ ==='
|
||||
loR = loRez.Rezolva('RO99960001', 'FURNIZOR T1', .T.)
|
||||
DO PrTest WITH 'T1 stare=gasit', loR.cStare == 'gasit'
|
||||
DO PrTest WITH 'T1 nIdPartener > 0', loR.nIdPartener > 0
|
||||
DO PrTest WITH 'T1 fara atentionare', EMPTY(loR.cAtentionare)
|
||||
|
||||
DO PrLogLocal WITH '=== T2: doar inactiv, cautat cu varianta incrucisata (RO peste CIF stocat fara RO) ==='
|
||||
loR = loRez.Rezolva('RO99960002', 'FURNIZOR T2', .T.)
|
||||
DO PrTest WITH 'T2 stare=gasit_inactiv', loR.cStare == 'gasit_inactiv'
|
||||
DO PrTest WITH 'T2 nIdPartener > 0', loR.nIdPartener > 0
|
||||
DO PrTest WITH 'T2 atentionare nevida', !EMPTY(loR.cAtentionare)
|
||||
|
||||
DO PrLogLocal WITH '=== T3: doi activi (RO + fara RO), cautat fara RO ==='
|
||||
loR = loRez.Rezolva('99960003', 'FURNIZOR T3', .T.)
|
||||
DO PrTest WITH 'T3 stare=mai_multi', loR.cStare == 'mai_multi'
|
||||
DO PrTest WITH 'T3 nIdPartener = 0 (nu alege automat)', loR.nIdPartener = 0
|
||||
DO PrTest WITH 'T3 2 candidati', loR.nCandidati = 2
|
||||
DO PrTest WITH 'T3 atentionare nevida', !EMPTY(loR.cAtentionare)
|
||||
|
||||
DO PrLogLocal WITH '=== T4: niciun partener - creare automata ==='
|
||||
loR = loRez.Rezolva('99960004', 'FIXTURA REZOLVARE T4 NOU', .T.)
|
||||
DO PrTest WITH 'T4 stare=creat', loR.cStare == 'creat'
|
||||
DO PrTest WITH 'T4 nIdPartener > 0', loR.nIdPartener > 0
|
||||
DO PrTest WITH 'T4 atentionare nevida', !EMPTY(loR.cAtentionare)
|
||||
LOCAL lnIdT4
|
||||
lnIdT4 = NVL(loR.nIdPartener, 0)
|
||||
IF m.lnIdT4 > 0
|
||||
LOCAL llGasitOra, llGasitTip
|
||||
llGasitOra = goExecutor.oExecuta("select id_part, denumire, cod_fiscal from nom_parteneri where id_part = " + TRANSFORM(m.lnIdT4), 'cVerifT4')
|
||||
IF m.llGasitOra
|
||||
SELECT cVerifT4
|
||||
DO PrTest WITH 'T4 scris in Oracle cu CIF exact 99960004 (fara RO)', RECCOUNT() = 1 AND ALLTRIM(cod_fiscal) == '99960004'
|
||||
USE IN (SELECT('cVerifT4'))
|
||||
ENDIF
|
||||
llGasitTip = goExecutor.oExecuta("select id_part from coresp_tip_part where id_part = " + TRANSFORM(m.lnIdT4) + " and id_tip_part = 17", 'cVerifTip')
|
||||
IF m.llGasitTip
|
||||
DO PrTest WITH 'T4 legat in CORESP_TIP_PART ca furnizor (17)', RECCOUNT('cVerifTip') = 1
|
||||
USE IN (SELECT('cVerifTip'))
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
DO PrLogLocal WITH '=== CIF gol: nu blocheaza cu eroare, stare inexistent ==='
|
||||
loR = loRez.Rezolva('', 'FARA CIF', .T.)
|
||||
DO PrTest WITH 'CIF gol: stare=inexistent, nIdPartener=0', loR.cStare == 'inexistent' AND loR.nIdPartener = 0
|
||||
|
||||
*=== Regresie: MarcheazaEligibilitate / EligibilRand (coada_contabilizare_ef.prg) ===
|
||||
DO PrLogLocal WITH '=== MarcheazaEligibilitate: negasit/inactiv nu mai blocheaza, ambiguu blocheaza ==='
|
||||
IF USED('crsFactTest')
|
||||
USE IN crsFactTest
|
||||
ENDIF
|
||||
CREATE CURSOR crsFactTest (id I, id_fact I, cod_fiscal C(20), numar_act C(30), eligibil_lot I, motiv_lot C(200), ales I)
|
||||
INSERT INTO crsFactTest (id, id_fact, cod_fiscal, numar_act, eligibil_lot, motiv_lot, ales) VALUES (1, 0, 'RO99960001', 'F001', 0, '', 1)
|
||||
INSERT INTO crsFactTest (id, id_fact, cod_fiscal, numar_act, eligibil_lot, motiv_lot, ales) VALUES (2, 0, 'RO99960002', 'F002', 0, '', 1)
|
||||
INSERT INTO crsFactTest (id, id_fact, cod_fiscal, numar_act, eligibil_lot, motiv_lot, ales) VALUES (3, 0, '99960003', 'F003', 0, '', 1)
|
||||
INSERT INTO crsFactTest (id, id_fact, cod_fiscal, numar_act, eligibil_lot, motiv_lot, ales) VALUES (4, 0, '99960099', 'F004', 0, '', 1)
|
||||
INSERT INTO crsFactTest (id, id_fact, cod_fiscal, numar_act, eligibil_lot, motiv_lot, ales) VALUES (5, 0, 'RO99960001', 'FACTURA', 0, '', 1)
|
||||
|
||||
LOCAL loCoada
|
||||
loCoada = CREATEOBJECT('CoadaContabilizareEF')
|
||||
loCoada.MarcheazaEligibilitate('crsFactTest', .F.)
|
||||
|
||||
SELECT crsFactTest
|
||||
LOCATE FOR id = 1
|
||||
DO PrTest WITH 'randul 1 (gasit activ) eligibil, fara motiv blocant', eligibil_lot = 1 AND ales = 1
|
||||
LOCATE FOR id = 2
|
||||
DO PrTest WITH 'randul 2 (gasit doar inactiv) eligibil, cu atentionare in motiv_lot', eligibil_lot = 1 AND ales = 1 AND !EMPTY(motiv_lot)
|
||||
LOCATE FOR id = 3
|
||||
DO PrTest WITH 'randul 3 (CIF ambiguu) BLOCAT', eligibil_lot = 0 AND ales = 0 AND !EMPTY(motiv_lot)
|
||||
LOCATE FOR id = 4
|
||||
DO PrTest WITH 'randul 4 (negasit deloc) eligibil, cu atentionare de creare', eligibil_lot = 1 AND ales = 1 AND !EMPTY(motiv_lot)
|
||||
LOCATE FOR id = 5
|
||||
DO PrTest WITH 'randul 5 (numar fara cifre) BLOCAT', eligibil_lot = 0 AND ales = 0 AND 'numarul documentului' $ motiv_lot
|
||||
|
||||
DO PrLogLocal WITH '=== NrActDinNumarAct: primul grup de cifre de la dreapta ==='
|
||||
DO PrTest WITH 'ZZT-A1-C -> 1', loCoada.NrActDinNumarAct('ZZT-A1-C') = 1
|
||||
DO PrTest WITH 'ZZT-A10-C -> 10', loCoada.NrActDinNumarAct('ZZT-A10-C') = 10
|
||||
DO PrTest WITH 'F1234 -> 1234 (neschimbat fata de regula veche)', loCoada.NrActDinNumarAct('F1234') = 1234
|
||||
DO PrTest WITH '2026-000123 -> 123 (neschimbat)', loCoada.NrActDinNumarAct('2026-000123') = 123
|
||||
DO PrTest WITH 'FACTURA (fara cifre) -> 0', loCoada.NrActDinNumarAct('FACTURA') = 0
|
||||
DO PrTest WITH 'gol -> 0', loCoada.NrActDinNumarAct('') = 0
|
||||
|
||||
USE IN crsFactTest
|
||||
|
||||
DO StergeFixtura
|
||||
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('crsFactTest')
|
||||
USE IN crsFactTest
|
||||
ENDIF
|
||||
DO StergeFixtura
|
||||
CATCH
|
||||
ENDTRY
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE StergeFixtura
|
||||
goExecutor.oExecute("DELETE FROM CORESP_TIP_PART WHERE id_part IN (SELECT id_part FROM NOM_PARTENERI WHERE cod_fiscal IN ('RO99960001','99960002','RO99960003','99960003','99960004'))", 'crsDelCorespTip')
|
||||
goExecutor.oExecute("DELETE FROM NOM_PARTENERI WHERE cod_fiscal IN ('RO99960001','99960002','RO99960003','99960003','99960004')", 'crsDelPart')
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitDel')
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrTest
|
||||
LPARAMETERS tcEticheta, tlOk
|
||||
IF tlOk
|
||||
gnPass = gnPass + 1
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
ENDIF
|
||||
DO PrLogLocal WITH ' ' + tcEticheta + ': ' + IIF(tlOk, 'OK', 'FAIL')
|
||||
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
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrErrLocal
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
|
||||
ENDPROC
|
||||
156
utile/Teste/efactura_import/test_sursa_cont_cursor.prg
Normal file
156
utile/Teste/efactura_import/test_sursa_cont_cursor.prg
Normal file
@@ -0,0 +1,156 @@
|
||||
* test_sursa_cont_cursor.prg
|
||||
* Verifica runda "sursa_cont" (COMUN\programe\import_efactura.prg):
|
||||
* T1 - cursorul crsDetaliiFacturi (CursorAdapter, pereche lcSchema/lcSelect din
|
||||
* vizImportEFactura) contine coloana sursa_cont si o umple din Oracle
|
||||
* T2 - UpdateEFacturaArticolROA scrie sursa_cont in anaf_efactura_detalii
|
||||
* Foloseste factura fixture deja importata de test_import_zip_efactura (acelasi criteriu
|
||||
* determinist, fixtura_zip_din_baza.prg), pe o linie de test creata si stearsa in acest script.
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T test_sursa_cont_cursor.prg
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcUILog, gnPass, gnFail
|
||||
gcUILog = 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_sursa_cont_cursor_log.txt'
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO TErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 1
|
||||
SET PROCEDURE TO import_efactura.prg ADDITIVE
|
||||
SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\fixtura_zip_din_baza.prg') ADDITIVE
|
||||
|
||||
DO TLog WITH 'INIT gnHandle=' + TRANSFORM(gnHandle) + ' gcS=' + TRANSFORM(gcS)
|
||||
|
||||
* factura fixture deja existenta (importata de test_import_zip_efactura.prg)
|
||||
lnIdEfactura = FixturaIdEFactura()
|
||||
DO TLog WITH 'id_efactura fixture=' + TRANSFORM(lnIdEfactura)
|
||||
IF NVL(lnIdEfactura,0) = 0
|
||||
DO TLog WITH 'EROARE: nu exista factura fixture - ruleaza intai test_import_zip_efactura.prg'
|
||||
DO TVerdict WITH .F., 'PRECONDITIE fixture', 'lipseste anaf_efactura'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
* curatenie preventiva: linii de fixtura ramase de la o rulare anterioara intrerupta
|
||||
goExecutor.oExecuta("delete from anaf_efactura_detalii where id_efactura = " + TRANSFORM(m.lnIdEfactura) + " and nr = 999 and articol = 'TEST SURSA_CONT FIXTURE'")
|
||||
|
||||
* linie de fixtura proprie, cu sursa_cont deja setat direct in Oracle, ca sa verific
|
||||
* ca CursorAdapter-ul o citeste corect (simuleaza ce ar scrie logica de recunoastere)
|
||||
* ID e alocat de Oracle (secventa/trigger) - nu se calculeaza pe client, se citeste dupa insert
|
||||
lcSqlIns = "insert into anaf_efactura_detalii (id_efactura, nr, articol, cantitate, um, pret, proctva, " + ;
|
||||
"valoarefaratva, discountfaratva, cont, acont, sursa_cont) values (" + ;
|
||||
TRANSFORM(lnIdEfactura) + ", 999, 'TEST SURSA_CONT FIXTURE', 1, 'BUC', 10, 19, 10, 0, '628', '', 'ISTORIC')"
|
||||
llIns = goExecutor.oExecuta(lcSqlIns)
|
||||
lnIdLinieFixtura = 0
|
||||
goExecutor.oSelecteaza2Value("select id from anaf_efactura_detalii where id_efactura = " + TRANSFORM(m.lnIdEfactura) + " and nr = 999 and articol = 'TEST SURSA_CONT FIXTURE'", @lnIdLinieFixtura)
|
||||
DO TVerdict WITH llIns AND NVL(lnIdLinieFixtura,0) > 0, 'setup: insert linie fixtura', 'id=' + TRANSFORM(lnIdLinieFixtura)
|
||||
|
||||
TRY
|
||||
* ---------- T1: cursorul crsDetaliiFacturi, copie EXACTA a perechii lcSchema/lcSelect ----------
|
||||
* (COMUN\programe\import_efactura.prg, PROCEDURE vizImportEFactura, liniile 65-85)
|
||||
PRIVATE poFacturiDetalii
|
||||
poFacturiDetalii = Null
|
||||
TEXT To lcSchema 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)
|
||||
ENDTEXT
|
||||
TEXT To lcSelect Noshow
|
||||
select 0 as distribuie, CAST(0 as number(10)) as id_tip, id_articol, id_gestiune, cont, acont, sursa_cont, id, id_efactura, nr, articol, descriere, detalii, cantitate, um, um_iso, um_roa, pret, proctva, tiptva, valoarefaratva, discountfaratva, in_stoc, articol_roa, codmat_roa, codbare, codclient, codfurnizor, codcpv, codnc8, nume_gestiune, cgest, 0 as tva, 0 as pretv, 0 as tvav, 0 as pretvtva from anaf_vefactura_detalii
|
||||
ENDTEXT
|
||||
lcOrder = [nr]
|
||||
lcgroup = []
|
||||
lcFiltru = [id_efactura=] + ALLTRIM(STR(m.lnIdEfactura))
|
||||
lcFiltruOriginal = []
|
||||
llModParam = .T.
|
||||
llAfiseaza = .F.
|
||||
|
||||
gencursor('poFacturiDetalii', 'crsDetaliiFacturiTemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
|
||||
poFacturiDetalii.ca_baza1.afisare()
|
||||
|
||||
DO TVerdict WITH USED('crsDetaliiFacturiTemp'), 'T1.1 CursorAdapter fill nu a picat', 'USED=' + TRANSFORM(USED('crsDetaliiFacturiTemp'))
|
||||
|
||||
IF USED('crsDetaliiFacturiTemp')
|
||||
DO TVerdict WITH TYPE('crsDetaliiFacturiTemp.sursa_cont') = 'C', 'T1.2 camp sursa_cont exista in cursor', 'TYPE=' + TRANSFORM(TYPE('crsDetaliiFacturiTemp.sursa_cont'))
|
||||
DO TVerdict WITH RECCOUNT('crsDetaliiFacturiTemp') > 0, 'T1.3 cursorul s-a umplut', TRANSFORM(RECCOUNT('crsDetaliiFacturiTemp')) + ' randuri'
|
||||
|
||||
SELECT * FROM crsDetaliiFacturiTemp INTO CURSOR crsDetaliiFacturi READWRITE
|
||||
SELECT crsDetaliiFacturi
|
||||
SCAN
|
||||
DO TLog WITH ' rand: id=' + TRANSFORM(crsDetaliiFacturi.id) + ' nr=' + TRANSFORM(crsDetaliiFacturi.nr) + ' articol=[' + TRANSFORM(crsDetaliiFacturi.articol) + '] sursa_cont=[' + TRANSFORM(crsDetaliiFacturi.sursa_cont) + ']'
|
||||
ENDSCAN
|
||||
LOCATE FOR id = m.lnIdLinieFixtura
|
||||
DO TVerdict WITH FOUND(), 'T1.4 linia fixtura e in crsDetaliiFacturi', 'FOUND=' + TRANSFORM(FOUND())
|
||||
IF FOUND()
|
||||
DO TVerdict WITH ALLTRIM(UPPER(NVL(crsDetaliiFacturi.sursa_cont,''))) == 'ISTORIC', 'T1.5 sursa_cont citit corect din Oracle', '[' + TRANSFORM(crsDetaliiFacturi.sursa_cont) + ']'
|
||||
DO TVerdict WITH ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) == '628', 'T1.6 alte campuri din aceeasi pereche nu s-au dezaliniat (cont)', '[' + TRANSFORM(crsDetaliiFacturi.cont) + ']'
|
||||
DO TVerdict WITH ALLTRIM(NVL(crsDetaliiFacturi.articol,'')) == 'TEST SURSA_CONT FIXTURE', 'T1.7 campurile de dupa sursa_cont nu s-au dezaliniat (articol)', '[' + TRANSFORM(crsDetaliiFacturi.articol) + ']'
|
||||
|
||||
ENDIF
|
||||
ENDIF
|
||||
CATCH TO loErr
|
||||
DO TLog WITH 'EXCEPTIE T1: ' + loErr.Message + ' | ' + loErr.Procedure + ' linia ' + TRANSFORM(loErr.LineNo)
|
||||
DO TVerdict WITH .F., 'T1 EXCEPTIE', loErr.Message
|
||||
ENDTRY
|
||||
|
||||
TRY
|
||||
IF USED('crsDetaliiFacturi')
|
||||
SELECT crsDetaliiFacturi
|
||||
LOCATE FOR id = m.lnIdLinieFixtura
|
||||
IF FOUND()
|
||||
REPLACE sursa_cont WITH 'EXACT' IN crsDetaliiFacturi
|
||||
llUpd = UpdateEFacturaArticolROA(m.lnIdEfactura)
|
||||
DO TVerdict WITH llUpd, 'T2.1 UpdateEFacturaArticolROA a returnat succes', 'llUpd=' + TRANSFORM(llUpd)
|
||||
|
||||
lcSursaDb = ''
|
||||
goExecutor.oSelecteaza2Value("select nvl(sursa_cont,'(null)') from anaf_efactura_detalii where id = " + TRANSFORM(m.lnIdLinieFixtura), @lcSursaDb)
|
||||
DO TVerdict WITH ALLTRIM(UPPER(NVL(lcSursaDb,''))) == 'EXACT', 'T2.2 sursa_cont scris in Oracle', '[' + TRANSFORM(lcSursaDb) + ']'
|
||||
ELSE
|
||||
DO TVerdict WITH .F., 'T2 PRECONDITIE', 'linia fixtura nu a fost gasita in crsDetaliiFacturi'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO TVerdict WITH .F., 'T2 PRECONDITIE', 'crsDetaliiFacturi nu exista (T1 a picat inainte)'
|
||||
ENDIF
|
||||
CATCH TO loErr2
|
||||
DO TLog WITH 'EXCEPTIE T2: ' + loErr2.Message + ' | ' + loErr2.Procedure + ' linia ' + TRANSFORM(loErr2.LineNo)
|
||||
DO TVerdict WITH .F., 'T2 EXCEPTIE', loErr2.Message
|
||||
ENDTRY
|
||||
|
||||
* curatenie: sterg linia de fixtura
|
||||
IF USED('crsDetaliiFacturiTemp')
|
||||
USE IN crsDetaliiFacturiTemp
|
||||
ENDIF
|
||||
IF USED('crsDetaliiFacturi')
|
||||
USE IN crsDetaliiFacturi
|
||||
ENDIF
|
||||
goExecutor.oExecuta("delete from anaf_efactura_detalii where id = " + TRANSFORM(m.lnIdLinieFixtura))
|
||||
DO TLog WITH 'CURATENIE: linie fixtura ' + TRANSFORM(m.lnIdLinieFixtura) + ' stearsa'
|
||||
|
||||
DO TLog WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
||||
QUIT
|
||||
|
||||
***********************
|
||||
PROCEDURE TLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(TTOC(DATETIME()) + ' ' + tcMsg + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDPROC
|
||||
|
||||
***********************
|
||||
PROCEDURE TVerdict
|
||||
LPARAMETERS tlOk, tcNume, tcDetalii
|
||||
IF tlOk
|
||||
gnPass = gnPass + 1
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
ENDIF
|
||||
DO TLog WITH IIF(tlOk, 'PASS ', 'FAIL ') + tcNume + ' | ' + TRANSFORM(tcDetalii)
|
||||
ENDPROC
|
||||
|
||||
***********************
|
||||
PROCEDURE TErr
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLine
|
||||
DO TLog WITH 'EROARE ' + TRANSFORM(tnError) + ' [' + TRANSFORM(tcMessage) + '] in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLine)
|
||||
ENDPROC
|
||||
373
utile/Teste/efactura_import/test_sursa_cont_ui.prg
Normal file
373
utile/Teste/efactura_import/test_sursa_cont_ui.prg
Normal file
@@ -0,0 +1,373 @@
|
||||
* test_sursa_cont_ui.prg
|
||||
* Verifica vizual runda "sursa_cont" (COMUN\clase\anaf_efactura.vc2):
|
||||
* T1 - grila detalii facturii (frm_import_efactura), cu 4 linii de fixtura EXACT/APROX/
|
||||
* ISTORIC/fara propunere - culorile pe celulele cCont/cAcont (captura de ecran)
|
||||
* T2 - formularul frm_configurare_efactura: controalele noi vizibile/aliniate, citire/
|
||||
* scriere optiuni EFACTURA_ART_NORMALIZAT/PREFIX/ISTORIC, garda pe valoare invalida
|
||||
* Foloseste factura fixture deja importata de test_import_zip_efactura (acelasi criteriu
|
||||
* determinist, fixtura_zip_din_baza.prg); liniile de detaliu adaugate pentru colorare sunt
|
||||
* sterse la final.
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File test_sursa_cont_ui.ps1
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcUILog = 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_sursa_cont_ui_log.txt'
|
||||
gcSyncDir = 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\uisync_sursacont\'
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO TErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\ui_harness.prg') ADDITIVE
|
||||
|
||||
DO ('D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 1
|
||||
SET PROCEDURE TO import_efactura.prg ADDITIVE
|
||||
SET PROCEDURE TO recunoastere_articol_ef.prg ADDITIVE
|
||||
SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\fixtura_zip_din_baza.prg') ADDITIVE
|
||||
|
||||
PUBLIC gnPass, gnFail
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
DO HarnessLog WITH 'INIT gnHandle=' + TRANSFORM(gnHandle) + ' gcS=' + TRANSFORM(gcS)
|
||||
|
||||
lnFixtIdEF = FixturaIdEFactura()
|
||||
DO HarnessLog WITH 'id_efactura fixture=' + TRANSFORM(lnFixtIdEF)
|
||||
IF NVL(lnFixtIdEF,0) = 0
|
||||
DO TVerdict WITH .F., 'PRECONDITIE fixture', 'lipseste anaf_efactura - ruleaza intai test_import_zip_efactura.prg'
|
||||
DO HarnessDone WITH 'done PRECONDITIE LIPSA'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
* curatenie preventiva + 4 linii de fixtura: EXACT / APROX / ISTORIC / fara propunere (NULL)
|
||||
goExecutor.oExecuta("delete from anaf_efactura_detalii where id_efactura = " + TRANSFORM(m.lnFixtIdEF) + " and nr >= 900")
|
||||
lcInsBase = "insert into anaf_efactura_detalii (id_efactura, nr, articol, cantitate, um, pret, proctva, valoarefaratva, discountfaratva, cont, acont, sursa_cont) values (" + TRANSFORM(m.lnFixtIdEF) + ", "
|
||||
goExecutor.oExecuta(lcInsBase + "901, 'TEST FIXTURA EXACT', 1, 'BUC', 100, 19, 100, 0, '628', '4426', 'EXACT')")
|
||||
goExecutor.oExecuta(lcInsBase + "902, 'TEST FIXTURA APROX', 1, 'BUC', 100, 19, 100, 0, '628', '4426', 'APROX')")
|
||||
goExecutor.oExecuta(lcInsBase + "903, 'TEST FIXTURA ISTORIC', 1, 'BUC', 100, 19, 100, 0, '628', '4426', 'ISTORIC')")
|
||||
goExecutor.oExecuta(lcInsBase + "904, 'TEST FIXTURA FARA PROPUNERE', 1, 'BUC', 100, 19, 100, 0, '', '', null)")
|
||||
DO HarnessLog WITH 'setup: 4 linii fixtura EXACT/APROX/ISTORIC/fara propunere inserate'
|
||||
|
||||
* ---------- cursoare, copie fidela din vizImportEFactura (import_efactura.prg) ----------
|
||||
lcData1 = '01' + Padl(Int(m.gnLuna),2,'0') + Alltrim(Str(m.gnAn))
|
||||
ldData1 = GOMONTH(DATE(m.gnAn, m.gnLuna, 1), 1)
|
||||
lcData2 = '01' + PADL(MONTH(m.ldData1),2,'0') + ALLTRIM(STR(YEAR(m.ldData1)))
|
||||
TEXT To lcSchema 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
|
||||
ENDTEXT
|
||||
TEXT To lcSelect TEXTMERGE Noshow
|
||||
SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, partener, id_incarcare, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, case when jtotctva is null then null when NVL(nume_valuta,'RON') <> 'RON' then null else decode(creditnote,0,1,-1) * NVL(total_cu_tva,0.00) - (NVL(jtotctva,0.00) - NVL(jtva_ti,0.00)) end as diferenta, procesat,
|
||||
'' as SerieActRoa, CAST(null as Number(14)) as NrActRoa, CAST(null as Number(20)) as idPartRoa, '' as PartenerRoa, '' as codFiscalROA, CAST(null as Number(10)) as idValutaROA, '' as numeValutaROA, CAST(null as Number(16,6)) as cursROA,
|
||||
'' as Cont, '' as acont, 0 as TVAIncasare, '' as Fdoc, CAST(0 as Number(5)) as Id_Fdoc, '' as Nrord, CAST(0 as Number(10)) as id_Lucrare, '' as Contract, CAST(null as Number(10)) as id_ctr,
|
||||
'' Sectie, CAST(0 as Number(10)) as id_Sectie, '' as dst_chlt, CAST(0 as Number(10)) as id_Venchelt, '' as nresp, CAST(0 as Number(10)) as id_responsabil, 0 as completat, 0 as completatdet, creditnote, '' as explicatiaROA
|
||||
FROM anaf_vefactura_primit
|
||||
ENDTEXT
|
||||
lcOrder = [data_act,numar_act,data_raspuns]
|
||||
lcgroup = []
|
||||
lcFiltru = [(data_act >= to_date('] + m.lcData1 + [','ddmmyyyy') and data_act < to_date('] + m.lcData2 + [','ddmmyyyy')) or (data_act is null and data_raspuns >= to_date('] + m.lcData1 + [','ddmmyyyy'))]
|
||||
lcFiltruOriginal = []
|
||||
llModParam = .T.
|
||||
llAfiseaza = .F.
|
||||
|
||||
PRIVATE poFacturi, poFacturiDetalii
|
||||
poFacturi = Null
|
||||
poFacturiDetalii = Null
|
||||
|
||||
gencursor('poFacturi', 'crsFacturi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
|
||||
poFacturi.ca_baza1.afisare()
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = m.lnFixtIdEF
|
||||
DO TVerdict WITH FOUND(), 'setup: factura fixtura vizibila in crsFacturi', 'FOUND=' + TRANSFORM(FOUND()) + ' din ' + TRANSFORM(RECCOUNT('crsFacturi')) + ' randuri'
|
||||
|
||||
TEXT To lcSchema 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)
|
||||
ENDTEXT
|
||||
TEXT To lcSelect Noshow
|
||||
select 0 as distribuie, CAST(0 as number(10)) as id_tip, id_articol, id_gestiune, cont, acont, sursa_cont, id, id_efactura, nr, articol, descriere, detalii, cantitate, um, um_iso, um_roa, pret, proctva, tiptva, valoarefaratva, discountfaratva, in_stoc, articol_roa, codmat_roa, codbare, codclient, codfurnizor, codcpv, codnc8, nume_gestiune, cgest, 0 as tva, 0 as pretv, 0 as tvav, 0 as pretvtva from anaf_vefactura_detalii
|
||||
ENDTEXT
|
||||
lcOrder = [nr]
|
||||
lcgroup = []
|
||||
lcFiltru = [id_efactura=] + ALLTRIM(STR(m.lnFixtIdEF))
|
||||
lcFiltruOriginal = []
|
||||
llModParam = .T.
|
||||
llAfiseaza = .F.
|
||||
|
||||
gencursor('poFacturiDetalii', 'crsDetaliiFacturiTemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
|
||||
poFacturiDetalii.ca_baza1.afisare()
|
||||
SELECT * FROM crsDetaliiFacturiTemp INTO CURSOR crsDetaliiFacturi READWRITE
|
||||
DO TVerdict WITH RECCOUNT('crsDetaliiFacturi') >= 4, 'setup: crsDetaliiFacturi are cele 4 linii fixtura', TRANSFORM(RECCOUNT('crsDetaliiFacturi')) + ' randuri'
|
||||
|
||||
* cursoare helper cerute de Init-ul formularului (copie din vizImportEFactura)
|
||||
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)
|
||||
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (12, 'Terti','628', 0, 12)
|
||||
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)
|
||||
INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (34, 'Servicii vandute','704', 0, 6)
|
||||
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
|
||||
|
||||
llSucces = 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
|
||||
|
||||
llSucces = 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
|
||||
|
||||
llSucces = goExecutor.oExecuta("select id, um, cod_um_iso, um_iso from vnom_um", 'cUM')
|
||||
SELECT cUM
|
||||
INDEX on id TAG id
|
||||
|
||||
* ---------- T1: frm_import_efactura, cu grila reala (Show(1) e hardcodat in vizImportEFactura,
|
||||
* aici instantiez formularul direct, ca in test_import_zip_efactura.prg) ----------
|
||||
SELECT crsFacturi
|
||||
loForm = Createobject("frm_import_efactura", .T.)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
loForm.WindowState = 2
|
||||
DO HarnessLog WITH 'FORM deschis: [' + TRANSFORM(loForm.Caption) + ']'
|
||||
DO HarnessLog WITH 'ClassLibrary=' + TRANSFORM(loForm.ClassLibrary)
|
||||
|
||||
DO TVerdict WITH TYPE('loForm.grdDetaliiFacturi') = 'O', 'T1.0 grid grdDetaliiFacturi exista pe formular', TYPE('loForm.grdDetaliiFacturi')
|
||||
|
||||
* Formularul isi repozitioneaza singur grila de facturi la deschidere (preferinta
|
||||
* utilizator/ultima factura vazuta), care resincronizeaza crsDetaliiFacturi pe ALTA factura
|
||||
* prin actualizeaza_grid2() (SET FILTER + fetch daca lipsesc randurile). Pentru verificarea
|
||||
* de culori pe cele 4 surse, filtrez direct pe factura fixtura - filtrul e acelasi mecanism
|
||||
* (id_efactura=...) folosit de actualizeaza_grid2, doar aplicat direct, fara sa (re)declansez
|
||||
* recunoasterea automata de articol pe randul selectat anterior.
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = m.lnFixtIdEF
|
||||
DO TVerdict WITH FOUND(), 'T1.1 factura fixtura localizata dupa deschiderea formularului', 'FOUND=' + TRANSFORM(FOUND()) + ' RECNO=' + TRANSFORM(RECNO('crsFacturi'))
|
||||
|
||||
SELECT crsDetaliiFacturi
|
||||
SET FILTER TO
|
||||
* elimin liniile altei facturi (auto-selectate de formular la deschidere - preferinta
|
||||
* utilizator/ultima factura vazuta), ca grila sa arate strict cele 4 linii fixtura
|
||||
DELETE FOR id_efactura <> m.lnFixtIdEF
|
||||
* SET DELETED ON e activ (test_init_env_auto) - randurile marse raman ascunse fara PACK
|
||||
* (PACK pe acest cursor da eroarea 1115 "Invalid operation for the cursor")
|
||||
DO HarnessLog WITH 'DIAGNOSTIC SET(DELETED)=[' + SET('DELETED') + ']'
|
||||
SET DELETED OFF
|
||||
GO TOP
|
||||
SCAN
|
||||
DO HarnessLog WITH ' recno=' + TRANSFORM(RECNO()) + ' deleted=' + TRANSFORM(DELETED()) + ' id_efactura=' + TRANSFORM(id_efactura) + ' articol=[' + TRANSFORM(articol) + ']'
|
||||
ENDSCAN
|
||||
SET DELETED ON
|
||||
GO TOP
|
||||
LOCATE FOR ALLTRIM(NVL(articol,'')) == 'TEST FIXTURA ISTORIC'
|
||||
DO TVerdict WITH FOUND(), 'T1.2 dupa curatarea altei facturi, grila are liniile fixtura corecte', 'FOUND=' + TRANSFORM(FOUND()) + ' din ' + TRANSFORM(RECCOUNT('crsDetaliiFacturi')) + ' randuri'
|
||||
GO TOP IN crsDetaliiFacturi
|
||||
loForm.grdDetaliiFacturi.Refresh()
|
||||
|
||||
loForm.Refresh()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 0, 'grid_4_culori'
|
||||
|
||||
* ---------- T2: frm_configurare_efactura, standalone (WindowType=0, situatia A) ----------
|
||||
lcSql = "select cont, explicatie, tip_sold from vplcont_used where an=?gnAn and tip_cont = 0 order by cont"
|
||||
llSucces = goExecutor.oExecuta(m.lcSql, "crsPlCont")
|
||||
Select Cont, explicatie, tip_sold From crsPlCont Into Cursor cPlContP Order By Cont
|
||||
Select Cont, explicatie, tip_sold From crsPlCont Into Cursor cPlContE Order By Cont
|
||||
|
||||
lcSql = "select id_gestiune, nume_gestiune, cont, acont, cgest, nume_tip from vnom_gestiuni where inactiv = 0 order by nume_gestiune"
|
||||
llSucces = goExecutor.oExecuta(m.lcSql, "crsGestiuni2Cfg")
|
||||
SELECT crsGestiuni2Cfg
|
||||
APPEND BLANK
|
||||
Select id_gestiune, nume_gestiune, Cont From crsGestiuni2Cfg Order By nume_gestiune Into Cursor cGestiuniP NOFILTER
|
||||
Select id_gestiune, nume_gestiune, Cont From crsGestiuni2Cfg Order By nume_gestiune Into Cursor cGestiuniE NOFILTER
|
||||
|
||||
lcSql = "select id_sectie, sectie from vnom_sectii where inactiv = 0 order by sectie"
|
||||
llSucces = goExecutor.oExecuta(m.lcSql, "crsSectii")
|
||||
SELECT crsSectii
|
||||
APPEND BLANK
|
||||
Select id_sectie, sectie From crsSectii Into Cursor cSectiiP Order By sectie
|
||||
Select id_sectie, sectie From crsSectii Into Cursor cSectiiE Order By sectie
|
||||
|
||||
lcSql = "select id_venchelt, explicatie as venchelt, decode(tip_venchelt, 1, 'VENIT', 'CHELTUIALA') as tip from vnom_venchel where inactiv = 0 order by explicatie"
|
||||
llSucces = goExecutor.oExecuta(m.lcSql, "crsVenChel")
|
||||
SELECT crsVenChel
|
||||
APPEND BLANK
|
||||
Select id_venchelt, venchelt, tip From crsVenChel Into Cursor cVenChelP Order By venchelt
|
||||
Select id_venchelt, venchelt, tip From crsVenChel Into Cursor cVenChelE Order By venchelt
|
||||
|
||||
PUBLIC gcEFACTURA_CONT_ART_E, gcEFACTURA_CONT_ART_P, gnEFACTURA_ID_SECTIE_E, gnEFACTURA_ID_SECTIE_P, ;
|
||||
gnEFACTURA_ID_GESTIUNE_E, gnEFACTURA_ID_GESTIUNE_P, gnEFACTURA_ID_VENCHELT_E, gnEFACTURA_ID_VENCHELT_P, ;
|
||||
gnEFACTURA_ID_TIPART_E, gnEFACTURA_ID_TIPART_P, gnEFACTURA_CONT_ART_EF, gnEFACTURA_CONT_ART_PF, ;
|
||||
gnEFACTURA_GEST_ART_EF, gnEFACTURA_GEST_ART_PF
|
||||
gcEFACTURA_CONT_ART_E = ''
|
||||
gcEFACTURA_CONT_ART_P = ''
|
||||
gnEFACTURA_ID_SECTIE_E = 0
|
||||
gnEFACTURA_ID_SECTIE_P = 0
|
||||
gnEFACTURA_ID_GESTIUNE_E = 0
|
||||
gnEFACTURA_ID_GESTIUNE_P = 0
|
||||
gnEFACTURA_ID_VENCHELT_E = 0
|
||||
gnEFACTURA_ID_VENCHELT_P = 0
|
||||
gnEFACTURA_ID_TIPART_E = 0
|
||||
gnEFACTURA_ID_TIPART_P = 0
|
||||
gnEFACTURA_CONT_ART_EF = 0
|
||||
gnEFACTURA_CONT_ART_PF = 0
|
||||
gnEFACTURA_GEST_ART_EF = 0
|
||||
gnEFACTURA_GEST_ART_PF = 0
|
||||
|
||||
SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\optiuni_test.prg') ADDITIVE
|
||||
SalveazaOptiuni('EFACTURA_ART_NORMALIZAT,EFACTURA_ART_PREFIX,EFACTURA_ART_ISTORIC')
|
||||
|
||||
* curatenie optiuni ramase de la o rulare intrerupta anterior (test repetabil)
|
||||
goExecutor.oExecuta("delete from optiuni where varname in ('EFACTURA_ART_NORMALIZAT','EFACTURA_ART_PREFIX','EFACTURA_ART_ISTORIC')")
|
||||
actualizeaza_optiuni()
|
||||
|
||||
* ---------- citire optiuni, copie fidela din Cmd_executa2.Click (anaf_efactura.vc2) ----------
|
||||
PUBLIC gnEFACTURA_ART_NORMALIZAT, gnEFACTURA_ART_PREFIX, gnEFACTURA_ART_ISTORIC
|
||||
gnEFACTURA_ART_NORMALIZAT = 1
|
||||
gnEFACTURA_ART_PREFIX = 12
|
||||
gnEFACTURA_ART_ISTORIC = 1
|
||||
Try
|
||||
lcValArt = citeste_optiune('EFACTURA_ART_NORMALIZAT')
|
||||
If Type('lcValArt') = 'C' And !Empty(Alltrim(m.lcValArt))
|
||||
gnEFACTURA_ART_NORMALIZAT = Int(Val(m.lcValArt))
|
||||
Endif
|
||||
lcValArt = citeste_optiune('EFACTURA_ART_PREFIX')
|
||||
If Type('lcValArt') = 'C' And !Empty(Alltrim(m.lcValArt))
|
||||
gnEFACTURA_ART_PREFIX = Int(Val(m.lcValArt))
|
||||
Endif
|
||||
lcValArt = citeste_optiune('EFACTURA_ART_ISTORIC')
|
||||
If Type('lcValArt') = 'C' And !Empty(Alltrim(m.lcValArt))
|
||||
gnEFACTURA_ART_ISTORIC = Int(Val(m.lcValArt))
|
||||
Endif
|
||||
Catch
|
||||
Endtry
|
||||
If gnEFACTURA_ART_PREFIX < 4 Or gnEFACTURA_ART_PREFIX > 40
|
||||
gnEFACTURA_ART_PREFIX = 12
|
||||
Endif
|
||||
DO TVerdict WITH gnEFACTURA_ART_NORMALIZAT = 1 AND gnEFACTURA_ART_PREFIX = 12 AND gnEFACTURA_ART_ISTORIC = 1, 'T2.1 valori implicite (optiuni inca lipsa)', TRANSFORM(gnEFACTURA_ART_NORMALIZAT) + '/' + TRANSFORM(gnEFACTURA_ART_PREFIX) + '/' + TRANSFORM(gnEFACTURA_ART_ISTORIC)
|
||||
|
||||
* ATENTIE: comun.vcx are si el o clasa numita frm_configurare_efactura (alt formular, orfan -
|
||||
* nimeni nu il instantiaza), incarcata INAINTEA anaf_efactura.vcx in SET CLASSLIB ADDITIVE.
|
||||
* Createobject neambiguu ("frm_configurare_efactura") rezolva la comun.vcx, nu la clasa
|
||||
* patch-uita din anaf_efactura.vcx - se dezambiguizeaza explicit cu modulul.
|
||||
loConfAmbiguu = Createobject("frm_configurare_efactura")
|
||||
DO HarnessLog WITH 'DIAGNOSTIC ambiguitate clasa: Createobject fara modul => ClassLibrary=' + TRANSFORM(loConfAmbiguu.ClassLibrary)
|
||||
DO TVerdict WITH 'COMUN.VCX' $ UPPER(loConfAmbiguu.ClassLibrary), 'T2.0 REPRO ambiguitate: Createobject neambiguu rezolva la comun.vcx (BUG)', TRANSFORM(loConfAmbiguu.ClassLibrary)
|
||||
loConfAmbiguu.Release()
|
||||
|
||||
loConf = Newobject("frm_configurare_efactura", "anaf_efactura.vcx")
|
||||
loConf.WindowType = 0
|
||||
loConf.Show()
|
||||
DO HarnessLog WITH 'CONFIG deschis: [' + TRANSFORM(loConf.Caption) + '] ClassLibrary=' + TRANSFORM(loConf.ClassLibrary)
|
||||
|
||||
DO TVerdict WITH TYPE('loConf.chkArtNormalizatP') = 'O', 'T2.2 chkArtNormalizatP exista', TYPE('loConf.chkArtNormalizatP')
|
||||
DO TVerdict WITH TYPE('loConf.spnArtPrefixP') = 'O', 'T2.3 spnArtPrefixP exista', TYPE('loConf.spnArtPrefixP')
|
||||
DO TVerdict WITH TYPE('loConf.chkArtIstoricP') = 'O', 'T2.4 chkArtIstoricP exista', TYPE('loConf.chkArtIstoricP')
|
||||
DO TVerdict WITH TYPE('loConf.lblArtPrefixP') = 'O', 'T2.5 lblArtPrefixP exista', TYPE('loConf.lblArtPrefixP')
|
||||
|
||||
IF TYPE('loConf.chkArtNormalizatP') = 'O'
|
||||
DO HarnessLog WITH ' chkArtNormalizatP: Left=' + TRANSFORM(loConf.chkArtNormalizatP.Left) + ' Top=' + TRANSFORM(loConf.chkArtNormalizatP.Top) + ' Value=' + TRANSFORM(loConf.chkArtNormalizatP.Value) + ' Visible=' + TRANSFORM(loConf.chkArtNormalizatP.Visible)
|
||||
DO HarnessLog WITH ' spnArtPrefixP: Left=' + TRANSFORM(loConf.spnArtPrefixP.Left) + ' Top=' + TRANSFORM(loConf.spnArtPrefixP.Top) + ' Value=' + TRANSFORM(loConf.spnArtPrefixP.Value) + ' Visible=' + TRANSFORM(loConf.spnArtPrefixP.Visible)
|
||||
DO HarnessLog WITH ' chkArtIstoricP: Left=' + TRANSFORM(loConf.chkArtIstoricP.Left) + ' Top=' + TRANSFORM(loConf.chkArtIstoricP.Top) + ' Value=' + TRANSFORM(loConf.chkArtIstoricP.Value) + ' Visible=' + TRANSFORM(loConf.chkArtIstoricP.Visible)
|
||||
DO HarnessLog WITH ' lblArtPrefixP: Left=' + TRANSFORM(loConf.lblArtPrefixP.Left) + ' Top=' + TRANSFORM(loConf.lblArtPrefixP.Top) + ' Visible=' + TRANSFORM(loConf.lblArtPrefixP.Visible)
|
||||
DO HarnessLog WITH ' form: Height=' + TRANSFORM(loConf.Height) + ' Width=' + TRANSFORM(loConf.Width)
|
||||
|
||||
DO TVerdict WITH loConf.chkArtNormalizatP.Value = 1 AND loConf.chkArtIstoricP.Value = 1, 'T2.6 checkbox-urile reflecta optiunile citite (1/1)', TRANSFORM(loConf.chkArtNormalizatP.Value) + '/' + TRANSFORM(loConf.chkArtIstoricP.Value)
|
||||
DO TVerdict WITH loConf.spnArtPrefixP.Value = 12, 'T2.7 spinner reflecta optiunea citita (12)', TRANSFORM(loConf.spnArtPrefixP.Value)
|
||||
DO TVerdict WITH (loConf.chkArtIstoricP.Top + loConf.chkArtIstoricP.Height) <= loConf.Height AND loConf.chkArtIstoricP.Top >= 0, 'T2.8 chkArtIstoricP in interiorul formularului', 'Top=' + TRANSFORM(loConf.chkArtIstoricP.Top) + ' Height form=' + TRANSFORM(loConf.Height)
|
||||
ENDIF
|
||||
|
||||
loConf.Refresh()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 1, 'config_deschis'
|
||||
|
||||
* simulez modificarea din UI si Terminarea (gnButon=1)
|
||||
IF TYPE('loConf.chkArtNormalizatP') = 'O'
|
||||
loConf.chkArtNormalizatP.Value = 0
|
||||
loConf.spnArtPrefixP.Value = 20
|
||||
loConf.chkArtIstoricP.Value = 0
|
||||
DOEVENTS FORCE
|
||||
DO TVerdict WITH gnEFACTURA_ART_NORMALIZAT = 0 AND gnEFACTURA_ART_PREFIX = 20 AND gnEFACTURA_ART_ISTORIC = 0, 'T2.9 modificarea din UI actualizeaza memvarii (ControlSource)', TRANSFORM(gnEFACTURA_ART_NORMALIZAT) + '/' + TRANSFORM(gnEFACTURA_ART_PREFIX) + '/' + TRANSFORM(gnEFACTURA_ART_ISTORIC)
|
||||
ENDIF
|
||||
loConf.Refresh()
|
||||
DOEVENTS FORCE
|
||||
DO HarnessStep WITH 2, 'config_modificat'
|
||||
|
||||
gnButon = 0
|
||||
loConf.do_termin()
|
||||
DOEVENTS FORCE
|
||||
DO TVerdict WITH gnButon = 1, 'T2.10 do_termin seteaza gnButon=1', TRANSFORM(gnButon)
|
||||
|
||||
IF gnButon = 1
|
||||
scrie_optiune('EFACTURA_ART_NORMALIZAT', ALLTRIM(STR(INT(m.gnEFACTURA_ART_NORMALIZAT))), 'RECUNOASTERE CONT DUPA CHEIE NORMALIZATA ARTICOL EFACTURA')
|
||||
scrie_optiune('EFACTURA_ART_PREFIX', ALLTRIM(STR(INT(m.gnEFACTURA_ART_PREFIX))), 'LUNGIME CHEIE NORMALIZATA ARTICOL EFACTURA')
|
||||
scrie_optiune('EFACTURA_ART_ISTORIC', ALLTRIM(STR(INT(m.gnEFACTURA_ART_ISTORIC))), 'RECUNOASTERE CONT DIN ISTORICUL FURNIZORULUI EFACTURA')
|
||||
ENDIF
|
||||
|
||||
lcVerifDb = ''
|
||||
goExecutor.oSelecteaza2Value("select varvalue from optiuni where varname = 'EFACTURA_ART_PREFIX'", @lcVerifDb)
|
||||
DO TVerdict WITH ALLTRIM(NVL(lcVerifDb,'')) == '20', 'T2.11 optiune scrisa in Oracle (EFACTURA_ART_PREFIX=20)', '[' + TRANSFORM(lcVerifDb) + ']'
|
||||
|
||||
* ---------- T3: garda pe valoare invalida la citire (scriu direct 999, verific reset la 12) ----------
|
||||
scrie_optiune('EFACTURA_ART_PREFIX', '999', 'LUNGIME CHEIE NORMALIZATA ARTICOL EFACTURA')
|
||||
gnEFACTURA_ART_PREFIX = 12
|
||||
Try
|
||||
lcValArt = citeste_optiune('EFACTURA_ART_PREFIX')
|
||||
If Type('lcValArt') = 'C' And !Empty(Alltrim(m.lcValArt))
|
||||
gnEFACTURA_ART_PREFIX = Int(Val(m.lcValArt))
|
||||
Endif
|
||||
Catch
|
||||
Endtry
|
||||
lnCitit999 = gnEFACTURA_ART_PREFIX
|
||||
If gnEFACTURA_ART_PREFIX < 4 Or gnEFACTURA_ART_PREFIX > 40
|
||||
gnEFACTURA_ART_PREFIX = 12
|
||||
Endif
|
||||
DO TVerdict WITH lnCitit999 = 999, 'T3.1 valoarea invalida chiar a fost citita din optiuni (999)', TRANSFORM(lnCitit999)
|
||||
DO TVerdict WITH gnEFACTURA_ART_PREFIX = 12, 'T3.2 garda reseteaza la 12 cand valoarea e in afara [4,40]', TRANSFORM(gnEFACTURA_ART_PREFIX)
|
||||
|
||||
DO HarnessStep WITH 3, 'config_invalid_ok'
|
||||
|
||||
DO HarnessLog WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
||||
DO HarnessDone WITH IIF(gnFail = 0, 'done OK', 'done CU ESECURI')
|
||||
|
||||
* curatenie
|
||||
IF TYPE('loConf') = 'O'
|
||||
loConf.Release()
|
||||
ENDIF
|
||||
IF TYPE('loForm') = 'O'
|
||||
loForm.Release()
|
||||
ENDIF
|
||||
goExecutor.oExecuta("delete from anaf_efactura_detalii where id_efactura = " + TRANSFORM(m.lnFixtIdEF) + " and nr >= 900")
|
||||
RestaureazaOptiuni()
|
||||
DO HarnessLog WITH 'CURATENIE finala facuta'
|
||||
|
||||
QUIT
|
||||
|
||||
***********************
|
||||
PROCEDURE TVerdict
|
||||
LPARAMETERS tlOk, tcNume, tcDetalii
|
||||
IF tlOk
|
||||
gnPass = gnPass + 1
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
ENDIF
|
||||
DO HarnessLog WITH IIF(tlOk, 'PASS ', 'FAIL ') + tcNume + ' | ' + TRANSFORM(tcDetalii)
|
||||
ENDPROC
|
||||
|
||||
***********************
|
||||
PROCEDURE TErr
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLine
|
||||
DO HarnessLog WITH 'EROARE ' + TRANSFORM(tnError) + ' [' + TRANSFORM(tcMessage) + '] in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLine)
|
||||
ENDPROC
|
||||
12
utile/Teste/efactura_import/test_sursa_cont_ui.ps1
Normal file
12
utile/Teste/efactura_import/test_sursa_cont_ui.ps1
Normal file
@@ -0,0 +1,12 @@
|
||||
# test_sursa_cont_ui.ps1 - wrapper peste harness-ul generic pentru verificarea vizuala a
|
||||
# rundei "sursa_cont" (grid cu 4 culori + formular de configurare).
|
||||
# Rulare: powershell -ExecutionPolicy Bypass -File test_sursa_cont_ui.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_sursa_cont_ui.prg') `
|
||||
-Steps @('grid_4_culori','config_deschis','config_modificat','config_invalid_ok') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_sursacont') `
|
||||
-SyncDir (Join-Path $Teste 'uisync_sursacont') `
|
||||
-ReadyTimeoutSec 300 `
|
||||
-StepTimeoutSec 180
|
||||
Reference in New Issue
Block a user