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
|
||||
77
utile/Teste/optiuni_test.prg
Normal file
77
utile/Teste/optiuni_test.prg
Normal file
@@ -0,0 +1,77 @@
|
||||
* optiuni_test.prg
|
||||
* Salvarea si restaurarea randurilor din OPTIUNI atinse de teste. Testele scriu si sterg optiuni
|
||||
* reale pe schema de test; fara restaurare, schema ramane fara ele si aplicatia porneste dupa
|
||||
* comportamentul implicit.
|
||||
* SalveazaOptiuni('A,B') la inceputul testului, RestaureazaOptiuni() la final: optiunile care
|
||||
* existau isi recapata valoarea, tipul si descrierea; cele create de test se sterg.
|
||||
|
||||
PROCEDURE SalveazaOptiuni
|
||||
LPARAMETERS tcListaVarname
|
||||
|
||||
IF TYPE('gcOptiuniTestIn') <> 'C'
|
||||
PUBLIC gcOptiuniTestIn
|
||||
ENDIF
|
||||
gcOptiuniTestIn = "'" + STRTRAN(STRTRAN(UPPER(ALLTRIM(m.tcListaVarname)), ' ', ''), ',', "','") + "'"
|
||||
|
||||
IF USED('crsOptTestSalvate')
|
||||
USE IN (SELECT('crsOptTestSalvate'))
|
||||
ENDIF
|
||||
goExecutor.oExecuta("select varname, vartype, program, varvalue, vardesc from optiuni" + ;
|
||||
" where varname in (" + m.gcOptiuniTestIn + ")", 'crsOptTestBrut')
|
||||
IF !USED('crsOptTestBrut')
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT * FROM crsOptTestBrut INTO CURSOR crsOptTestSalvate READWRITE
|
||||
USE IN (SELECT('crsOptTestBrut'))
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE RestaureazaOptiuni
|
||||
LOCAL lnSel, lcNume, lcExistente, lnCount
|
||||
|
||||
IF TYPE('gcOptiuniTestIn') <> 'C' OR !USED('crsOptTestSalvate')
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
lnSel = SELECT()
|
||||
lcExistente = ''
|
||||
SELECT crsOptTestSalvate
|
||||
SCAN
|
||||
lcNume = UPPER(ALLTRIM(NVL(crsOptTestSalvate.varname, '')))
|
||||
IF EMPTY(m.lcNume)
|
||||
LOOP
|
||||
ENDIF
|
||||
lcExistente = m.lcExistente + IIF(EMPTY(m.lcExistente), '', ',') + "'" + m.lcNume + "'"
|
||||
lnCount = 0
|
||||
goExecutor.oSelecteaza2Value("select count(*) from optiuni where varname = '" + m.lcNume + "'", @lnCount)
|
||||
IF NVL(m.lnCount, 0) > 0
|
||||
goExecutor.oExecuta("update optiuni set vartype = " + SqlLit(crsOptTestSalvate.vartype) + ;
|
||||
", program = " + SqlLit(crsOptTestSalvate.program) + ;
|
||||
", varvalue = " + SqlLit(crsOptTestSalvate.varvalue) + ;
|
||||
", vardesc = " + SqlLit(crsOptTestSalvate.vardesc) + ;
|
||||
" where varname = '" + m.lcNume + "'")
|
||||
ELSE
|
||||
goExecutor.oExecuta("insert into optiuni (varname, vartype, program, varvalue, vardesc) values ('" + ;
|
||||
m.lcNume + "', " + SqlLit(crsOptTestSalvate.vartype) + ", " + SqlLit(crsOptTestSalvate.program) + ;
|
||||
", " + SqlLit(crsOptTestSalvate.varvalue) + ", " + SqlLit(crsOptTestSalvate.vardesc) + ")")
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
|
||||
* optiunile cerute care lipseau inainte de test au fost create de el
|
||||
goExecutor.oExecuta("delete from optiuni where varname in (" + m.gcOptiuniTestIn + ")" + ;
|
||||
IIF(EMPTY(m.lcExistente), '', " and varname not in (" + m.lcExistente + ")"))
|
||||
goExecutor.oExecuta('COMMIT')
|
||||
|
||||
SELECT (m.lnSel)
|
||||
actualizeaza_optiuni()
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
FUNCTION SqlLit
|
||||
LPARAMETERS tuValoare
|
||||
|
||||
IF ISNULL(m.tuValoare) OR EMPTY(NVL(m.tuValoare, ''))
|
||||
RETURN 'null'
|
||||
ENDIF
|
||||
RETURN "'" + STRTRAN(ALLTRIM(m.tuValoare), "'", "''") + "'"
|
||||
ENDFUNC
|
||||
421
utile/Teste/test_anulare_lot_ef.prg
Normal file
421
utile/Teste/test_anulare_lot_ef.prg
Normal file
@@ -0,0 +1,421 @@
|
||||
* test_anulare_lot_ef.prg
|
||||
* Teste AnulareLotEF (COMUN\programe\anulare_lot_ef.prg) si ResetEFacturaIdFact
|
||||
* (COMUN\programe\import_efactura.prg), banda C din docs\plan_efactura_23_24.md.
|
||||
* Fixtura proprie (partener RO9999888801, cod fiscal furnizor de test, ACT coduri 96000xx,
|
||||
* ANAF_EFACTURA cu xnumar_act LIKE 'TEST-%'), creata si stearsa in aceasta rulare, pe schema
|
||||
* MARIUSM_AUTO@ROA_CENTRAL.
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\test_anulare_lot_ef.prg"
|
||||
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\test_anulare_lot_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
|
||||
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\test_anulare_lot_ef_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
|
||||
SET PROCEDURE TO oscrie_in_fisiere ADDITIVE
|
||||
SET PROCEDURE TO import_efactura ADDITIVE
|
||||
SET PROCEDURE TO anulare_lot_ef ADDITIVE
|
||||
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle) + ' gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna) + ' gnIdUtil=' + TRANSFORM(gnIdUtil)
|
||||
|
||||
DO StergeFixturaAnulare
|
||||
|
||||
LOCAL lnIdP
|
||||
lnIdP = InsPartenerA('RO9999888801')
|
||||
|
||||
*-- coduri ACT alocate prin SEQ_COD.NEXTVAL (ca la orice document real) - un cod hardcodat
|
||||
*-- poate coincide cu un document existent pe schema si ar atinge date reale neasteptat
|
||||
LOCAL lnCodA, lnCodC, lnCodCRef, lnCodH, lnCodG, lnCodI, lnCodJ, lnCodK
|
||||
lnCodA = NextCod()
|
||||
lnCodC = NextCod()
|
||||
lnCodCRef = NextCod()
|
||||
lnCodH = NextCod()
|
||||
lnCodG = NextCod()
|
||||
lnCodI = NextCod()
|
||||
lnCodJ = NextCod()
|
||||
lnCodK = NextCod()
|
||||
|
||||
*-- FA: document curat, intr-o perioada DIFERITA de gnAn/gnLuna al sesiunii - dovada ca
|
||||
*-- sterge_document(cod,an,luna,idUtil) foloseste an/luna documentului, nu ale sesiunii
|
||||
LOCAL lnIdFA, lnEfFA
|
||||
lnIdFA = 88800001
|
||||
DO InsActDoc WITH lnCodA, 2019, 6, {^2019-06-15}, lnIdP, lnIdFA, '628'
|
||||
lnEfFA = InsFactura('TEST-A-CROSS', lnIdFA, 'RO9999888801')
|
||||
|
||||
*-- FD: fara id_fact (niciodata importata)
|
||||
LOCAL lnEfFD
|
||||
lnEfFD = InsFactura('TEST-D-NOIDFACT', 0, 'RO9999888801')
|
||||
|
||||
*-- FC: document cu plata atasata (ACT separat cu id_factd = id_fact-ul lui FC)
|
||||
LOCAL lnIdFC, lnEfFC
|
||||
lnIdFC = 88800010
|
||||
DO InsActDoc WITH lnCodC, gnAn, gnLuna, DATE(), lnIdP, lnIdFC, '628'
|
||||
DO InsActReferinta WITH lnCodCRef, gnAn, gnLuna, DATE(), lnIdP, lnIdFC
|
||||
lnEfFC = InsFactura('TEST-C-REFINTE', lnIdFC, 'RO9999888801')
|
||||
|
||||
*-- FH: document curat, aceeasi perioada ca sesiunea - pereche cu FC in lotul mixt
|
||||
LOCAL lnIdFH, lnEfFH
|
||||
lnIdFH = 88800030
|
||||
DO InsActDoc WITH lnCodH, gnAn, gnLuna, DATE(), lnIdP, lnIdFH, '628'
|
||||
lnEfFH = InsFactura('TEST-H-CLEAN', lnIdFH, 'RO9999888801')
|
||||
|
||||
*-- FG: document curat, folosit doar la testul de esec la mijlocul lotului (ramane intact daca ROLLBACK)
|
||||
LOCAL lnIdFG, lnEfFG
|
||||
lnIdFG = 88800020
|
||||
DO InsActDoc WITH lnCodG, gnAn, gnLuna, DATE(), lnIdP, lnIdFG, '628'
|
||||
lnEfFG = InsFactura('TEST-G-CLEAN', lnIdFG, 'RO9999888801')
|
||||
|
||||
*-- FR: doar pentru testul punctual ResetEFacturaIdFact, fara ACT
|
||||
LOCAL lnIdFR, lnEfFR
|
||||
lnIdFR = 88800099
|
||||
lnEfFR = InsFactura('TEST-R-RESET', lnIdFR, 'RO9999888801')
|
||||
|
||||
*-- FI: document curat, folosit doar la testul de eroare VFP (cursor cu camp lipsa) - ramane
|
||||
*-- intact daca tranzactia face ROLLBACK
|
||||
LOCAL lnIdFI, lnEfFI
|
||||
lnIdFI = 88800040
|
||||
DO InsActDoc WITH lnCodI, gnAn, gnLuna, DATE(), lnIdP, lnIdFI, '628'
|
||||
lnEfFI = InsFactura('TEST-I-BADCURSOR', lnIdFI, 'RO9999888801')
|
||||
|
||||
*-- FJ/FK: doua documente curate, in doua perioade DIFERITE intre ele (si de sesiune), in
|
||||
*-- acelasi lot - dovada ca init_scriere_act_rul_local (o singura data pentru tot lotul) nu
|
||||
*-- influenteaza stergerea per document
|
||||
LOCAL lnIdFJ, lnEfFJ, lnIdFK, lnEfFK
|
||||
lnIdFJ = 88800050
|
||||
DO InsActDoc WITH lnCodJ, 2019, 6, {^2019-06-20}, lnIdP, lnIdFJ, '628'
|
||||
lnEfFJ = InsFactura('TEST-J-PERIOD1', lnIdFJ, 'RO9999888801')
|
||||
|
||||
lnIdFK = 88800060
|
||||
DO InsActDoc WITH lnCodK, 2021, 11, {^2021-11-05}, lnIdP, lnIdFK, '628'
|
||||
lnEfFK = InsFactura('TEST-K-PERIOD2', lnIdFK, 'RO9999888801')
|
||||
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitFixtura')
|
||||
DO PrLogLocal WITH 'fixtura creata: efFA=' + TRANSFORM(lnEfFA) + ' efFD=' + TRANSFORM(lnEfFD) + ' efFC=' + TRANSFORM(lnEfFC) + ' efFH=' + TRANSFORM(lnEfFH) + ' efFG=' + TRANSFORM(lnEfFG) + ' efFR=' + TRANSFORM(lnEfFR) + ' efFI=' + TRANSFORM(lnEfFI) + ' efFJ=' + TRANSFORM(lnEfFJ) + ' efFK=' + TRANSFORM(lnEfFK)
|
||||
|
||||
LOCAL loAnul
|
||||
loAnul = CREATEOBJECT('AnulareLotEF')
|
||||
DO PrLogLocal WITH 'cAvertismentRisc=[' + loAnul.cAvertismentRisc + ']'
|
||||
|
||||
*=========================================================================
|
||||
DO PrLogLocal WITH '=== TEST 6: ResetEFacturaIdFact cu valoare gresita -> nu reseteaza ==='
|
||||
LOCAL llRet, lnIdFactCitit
|
||||
llRet = ResetEFacturaIdFact(lnEfFR, 999999)
|
||||
lnIdFactCitit = -1
|
||||
goExecutor.oSelect2Value("SELECT NVL(id_fact,-1) FROM ANAF_EFACTURA WHERE id = " + TRANSFORM(lnEfFR), @lnIdFactCitit)
|
||||
DO PrLogLocal WITH ' ResetEFacturaIdFact(valoare gresita) retur=' + TRANSFORM(llRet) + ' id_fact dupa=' + TRANSFORM(lnIdFactCitit) + ' (asteptat ' + TRANSFORM(lnIdFR) + ', neschimbat) ' + IIF(lnIdFactCitit = lnIdFR, 'OK', 'FAIL')
|
||||
|
||||
llRet = ResetEFacturaIdFact(lnEfFR, lnIdFR)
|
||||
lnIdFactCitit = -1
|
||||
goExecutor.oSelect2Value("SELECT NVL(id_fact,-1) FROM ANAF_EFACTURA WHERE id = " + TRANSFORM(lnEfFR), @lnIdFactCitit)
|
||||
DO PrLogLocal WITH ' ResetEFacturaIdFact(valoare corecta) retur=' + TRANSFORM(llRet) + ' id_fact dupa=' + TRANSFORM(lnIdFactCitit) + ' (asteptat -1/NULL) ' + IIF(lnIdFactCitit = -1, 'OK', 'FAIL')
|
||||
|
||||
*=========================================================================
|
||||
DO PrLogLocal WITH '=== TEST 4: factura fara id_fact -> refuzata (in lot cu FA) ==='
|
||||
LOCAL llOk4
|
||||
llOk4 = loAnul.Verifica(TRANSFORM(lnEfFA) + ',' + TRANSFORM(lnEfFD))
|
||||
DO PrLogLocal WITH ' Verifica retur=' + TRANSFORM(llOk4) + ' cEroare=[' + loAnul.cEroare + ']' + ;
|
||||
' acceptate=' + TRANSFORM(RECCOUNT('crsAcceptate')) + ' refuzate=' + TRANSFORM(RECCOUNT('crsRefuzate'))
|
||||
DO PrCursor WITH 'crsAcceptate'
|
||||
DO PrCursor WITH 'crsRefuzate'
|
||||
SELECT crsRefuzate
|
||||
LOCATE FOR id_efactura = lnEfFD
|
||||
DO PrLogLocal WITH ' FD in refuzate=' + TRANSFORM(FOUND()) + ' motiv=[' + IIF(FOUND(), ALLTRIM(motiv), '?') + '] ' + IIF(FOUND() AND 'id_fact' $ LOWER(motiv), 'OK', 'FAIL')
|
||||
SELECT crsAcceptate
|
||||
LOCATE FOR id_efactura = lnEfFA
|
||||
DO PrLogLocal WITH ' FA in acceptate=' + TRANSFORM(FOUND()) + ' ' + IIF(FOUND(), 'OK', 'FAIL')
|
||||
|
||||
*=========================================================================
|
||||
DO PrLogLocal WITH '=== TEST 1: document curat (alta perioada decat sesiunea) -> se sterge si id_fact se reseteaza ==='
|
||||
LOCAL llOk1, lnSterse1
|
||||
llOk1 = loAnul.Verifica(TRANSFORM(lnEfFA))
|
||||
DO PrLogLocal WITH ' Verifica retur=' + TRANSFORM(llOk1) + ' acceptate=' + TRANSFORM(RECCOUNT('crsAcceptate')) + ' refuzate=' + TRANSFORM(RECCOUNT('crsRefuzate'))
|
||||
lnSterse1 = loAnul.Executa('crsAcceptate', 'crsRefuzate')
|
||||
DO PrLogLocal WITH ' Executa retur(sterse)=' + TRANSFORM(lnSterse1) + ' cEroare=[' + loAnul.cEroare + '] (asteptat 1) ' + IIF(lnSterse1 = 1, 'OK', 'FAIL')
|
||||
|
||||
LOCAL lnStersAct, lnIdFactDupa1
|
||||
lnStersAct = -1
|
||||
goExecutor.oSelect2Value("SELECT MIN(sters) FROM ACT WHERE id_fact = " + TRANSFORM(lnIdFA), @lnStersAct)
|
||||
DO PrLogLocal WITH ' ACT id_fact=' + TRANSFORM(lnIdFA) + '(FA, alta perioada) sters=' + TRANSFORM(lnStersAct) + ' (asteptat 1) ' + IIF(lnStersAct = 1, 'OK', 'FAIL')
|
||||
lnIdFactDupa1 = -1
|
||||
goExecutor.oSelect2Value("SELECT NVL(id_fact,-1) FROM ANAF_EFACTURA WHERE id = " + TRANSFORM(lnEfFA), @lnIdFactDupa1)
|
||||
DO PrLogLocal WITH ' anaf_efactura(FA).id_fact dupa stergere=' + TRANSFORM(lnIdFactDupa1) + ' (asteptat -1/NULL) ' + IIF(lnIdFactDupa1 = -1, 'OK', 'FAIL')
|
||||
|
||||
*=========================================================================
|
||||
DO PrLogLocal WITH '=== TEST 3: luna inchisa -> refuzat tot lotul ==='
|
||||
glLunaInchisa = .T.
|
||||
LOCAL llOk3
|
||||
llOk3 = loAnul.Verifica(TRANSFORM(lnEfFC) + ',' + TRANSFORM(lnEfFH) + ',' + TRANSFORM(lnEfFD))
|
||||
DO PrLogLocal WITH ' Verifica retur=' + TRANSFORM(llOk3) + ' acceptate=' + TRANSFORM(RECCOUNT('crsAcceptate')) + ' (asteptat 0) ' + IIF(RECCOUNT('crsAcceptate') = 0, 'OK', 'FAIL')
|
||||
DO PrCursor WITH 'crsRefuzate'
|
||||
SELECT crsRefuzate
|
||||
LOCATE FOR id_efactura = lnEfFC
|
||||
DO PrLogLocal WITH ' FC motiv=[' + IIF(FOUND(), ALLTRIM(motiv), '?') + '] (asteptat luna inchisa) ' + IIF(FOUND() AND 'luna' $ LOWER(motiv), 'OK', 'FAIL')
|
||||
SELECT crsRefuzate
|
||||
LOCATE FOR id_efactura = lnEfFD
|
||||
DO PrLogLocal WITH ' FD motiv=[' + IIF(FOUND(), ALLTRIM(motiv), '?') + '] (asteptat id_fact - are precedenta pe luna inchisa) ' + IIF(FOUND() AND 'id_fact' $ LOWER(motiv), 'OK', 'FAIL')
|
||||
glLunaInchisa = .F.
|
||||
|
||||
*=========================================================================
|
||||
DO PrLogLocal WITH '=== TEST 5: esec la mijlocul lotului (FG curat + FC cu referinte) -> ROLLBACK, nimic sters ==='
|
||||
IF USED('crsAcceptateManual')
|
||||
USE IN (SELECT('crsAcceptateManual'))
|
||||
ENDIF
|
||||
CREATE CURSOR crsAcceptateManual (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))
|
||||
INSERT INTO crsAcceptateManual VALUES (lnEfFG, lnIdFG, lnCodG, gnAn, gnLuna, 'TEST-G-CLEAN', 'FIXTURA ANULARE', 100)
|
||||
INSERT INTO crsAcceptateManual VALUES (lnEfFC, lnIdFC, lnCodC, gnAn, gnLuna, 'TEST-C-REFINTE', 'FIXTURA ANULARE', 100)
|
||||
|
||||
LOCAL lnSterse5
|
||||
lnSterse5 = loAnul.Executa('crsAcceptateManual')
|
||||
DO PrLogLocal WITH ' Executa retur(sterse)=' + TRANSFORM(lnSterse5) + ' cEroare=[' + loAnul.cEroare + '] (asteptat 0) ' + IIF(lnSterse5 = 0, 'OK', 'FAIL')
|
||||
|
||||
LOCAL lnStersActG
|
||||
lnStersActG = -1
|
||||
goExecutor.oSelect2Value("SELECT MIN(sters) FROM ACT WHERE id_fact = " + TRANSFORM(lnIdFG), @lnStersActG)
|
||||
DO PrLogLocal WITH ' ACT id_fact=' + TRANSFORM(lnIdFG) + '(FG) sters dupa ROLLBACK=' + TRANSFORM(lnStersActG) + ' (asteptat 0, ramane intact) ' + IIF(lnStersActG = 0, 'OK', 'FAIL')
|
||||
LOCAL lnIdFactDupa5
|
||||
lnIdFactDupa5 = -1
|
||||
goExecutor.oSelect2Value("SELECT NVL(id_fact,-1) FROM ANAF_EFACTURA WHERE id = " + TRANSFORM(lnEfFG), @lnIdFactDupa5)
|
||||
DO PrLogLocal WITH ' anaf_efactura(FG).id_fact dupa ROLLBACK=' + TRANSFORM(lnIdFactDupa5) + ' (asteptat ' + TRANSFORM(lnIdFG) + ', neschimbat) ' + IIF(lnIdFactDupa5 = lnIdFG, 'OK', 'FAIL')
|
||||
|
||||
*=========================================================================
|
||||
DO PrLogLocal WITH '=== TEST 2: document cu plata atasata -> refuzat, restul lotului (FH) se sterge oricum ==='
|
||||
LOCAL llOk2, lnSterse2
|
||||
llOk2 = loAnul.Verifica(TRANSFORM(lnEfFC) + ',' + TRANSFORM(lnEfFH))
|
||||
DO PrLogLocal WITH ' Verifica retur=' + TRANSFORM(llOk2) + ' acceptate=' + TRANSFORM(RECCOUNT('crsAcceptate')) + ' refuzate=' + TRANSFORM(RECCOUNT('crsRefuzate'))
|
||||
DO PrCursor WITH 'crsAcceptate'
|
||||
DO PrCursor WITH 'crsRefuzate'
|
||||
SELECT crsRefuzate
|
||||
LOCATE FOR id_efactura = lnEfFC
|
||||
DO PrLogLocal WITH ' FC in refuzate=' + TRANSFORM(FOUND()) + ' motiv=[' + IIF(FOUND(), ALLTRIM(motiv), '?') + '] ' + IIF(FOUND() AND 'incasari' $ LOWER(motiv), 'OK', 'FAIL')
|
||||
SELECT crsAcceptate
|
||||
LOCATE FOR id_efactura = lnEfFH
|
||||
DO PrLogLocal WITH ' FH in acceptate=' + TRANSFORM(FOUND()) + ' ' + IIF(FOUND(), 'OK', 'FAIL')
|
||||
|
||||
lnSterse2 = loAnul.Executa('crsAcceptate', 'crsRefuzate')
|
||||
DO PrLogLocal WITH ' Executa retur(sterse)=' + TRANSFORM(lnSterse2) + ' cEroare=[' + loAnul.cEroare + '] (asteptat 1) ' + IIF(lnSterse2 = 1, 'OK', 'FAIL')
|
||||
|
||||
LOCAL lnStersActH, lnStersActC
|
||||
lnStersActH = -1
|
||||
goExecutor.oSelect2Value("SELECT MIN(sters) FROM ACT WHERE id_fact = " + TRANSFORM(lnIdFH), @lnStersActH)
|
||||
DO PrLogLocal WITH ' ACT id_fact=' + TRANSFORM(lnIdFH) + '(FH) sters=' + TRANSFORM(lnStersActH) + ' (asteptat 1) ' + IIF(lnStersActH = 1, 'OK', 'FAIL')
|
||||
lnStersActC = -1
|
||||
goExecutor.oSelect2Value("SELECT MIN(sters) FROM ACT WHERE id_fact = " + TRANSFORM(lnIdFC), @lnStersActC)
|
||||
DO PrLogLocal WITH ' ACT id_fact=' + TRANSFORM(lnIdFC) + '(FC, refuzat) sters=' + TRANSFORM(lnStersActC) + ' (asteptat 0, netins) ' + IIF(lnStersActC = 0, 'OK', 'FAIL')
|
||||
|
||||
*=========================================================================
|
||||
DO PrLogLocal WITH '=== TEST 7: eroare VFP (camp lipsa in cursor) la mijlocul buclei -> ROLLBACK, tranzactia revine la automat ==='
|
||||
IF USED('crsAcceptateFaraLuna')
|
||||
USE IN (SELECT('crsAcceptateFaraLuna'))
|
||||
ENDIF
|
||||
*-- cursor fara coloana LUNA - forteaza o eroare VFP genuina (variabila nu exista), nu una de SQL
|
||||
CREATE CURSOR crsAcceptateFaraLuna (id_efactura N(20), id_fact N(20), cod N(15), an N(4), numar_act C(30), furnizor C(250), suma N(20,4))
|
||||
INSERT INTO crsAcceptateFaraLuna VALUES (lnEfFI, lnIdFI, lnCodI, gnAn, 'TEST-I-BADCURSOR', 'FIXTURA ANULARE', 100)
|
||||
|
||||
LOCAL lnTranzInainte, lnTranzDupa, lnSterse7
|
||||
lnTranzInainte = SQLGETPROP(gnHandle, 'Transactions')
|
||||
lnSterse7 = loAnul.Executa('crsAcceptateFaraLuna')
|
||||
lnTranzDupa = SQLGETPROP(gnHandle, 'Transactions')
|
||||
DO PrLogLocal WITH ' Executa retur(sterse)=' + TRANSFORM(lnSterse7) + ' cEroare=[' + loAnul.cEroare + '] (asteptat 0, eroare ne-goala) ' + IIF(lnSterse7 = 0 AND !EMPTY(loAnul.cEroare), 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' SQLGetprop(Transactions) inainte=' + TRANSFORM(lnTranzInainte) + ' dupa=' + TRANSFORM(lnTranzDupa) + ' (asteptat 1/automat) ' + IIF(lnTranzDupa = 1, 'OK', 'FAIL')
|
||||
|
||||
LOCAL lnStersActI
|
||||
lnStersActI = -1
|
||||
goExecutor.oSelect2Value("SELECT MIN(sters) FROM ACT WHERE id_fact = " + TRANSFORM(lnIdFI), @lnStersActI)
|
||||
DO PrLogLocal WITH ' ACT id_fact=' + TRANSFORM(lnIdFI) + '(FI) sters dupa eroare VFP=' + TRANSFORM(lnStersActI) + ' (asteptat 0, netins) ' + IIF(lnStersActI = 0, 'OK', 'FAIL')
|
||||
|
||||
*-- dovada ca a doua tranzactie manuala se poate porni normal - conexiunea nu a ramas blocata
|
||||
LOCAL lnSetPropTest
|
||||
lnSetPropTest = SQLSETPROP(gnHandle, 'Transactions', 2)
|
||||
DO PrLogLocal WITH ' SQLSetprop(Transactions,2) dupa incident retur=' + TRANSFORM(lnSetPropTest) + ' (asteptat 1, conexiunea raspunde normal) ' + IIF(lnSetPropTest = 1, 'OK', 'FAIL')
|
||||
SQLSETPROP(gnHandle, 'Transactions', 1)
|
||||
|
||||
IF USED('crsAcceptateFaraLuna')
|
||||
USE IN (SELECT('crsAcceptateFaraLuna'))
|
||||
ENDIF
|
||||
|
||||
*=========================================================================
|
||||
DO PrLogLocal WITH '=== TEST 8: lot cu doua documente din perioade diferite -> ambele se sterg si id_fact se reseteaza pentru amandoua ==='
|
||||
LOCAL llOk8, lnSterse8
|
||||
llOk8 = loAnul.Verifica(TRANSFORM(lnEfFJ) + ',' + TRANSFORM(lnEfFK))
|
||||
DO PrLogLocal WITH ' Verifica retur=' + TRANSFORM(llOk8) + ' acceptate=' + TRANSFORM(RECCOUNT('crsAcceptate')) + ' refuzate=' + TRANSFORM(RECCOUNT('crsRefuzate')) + ' (asteptat 2 acceptate, 0 refuzate) ' + IIF(RECCOUNT('crsAcceptate') = 2 AND RECCOUNT('crsRefuzate') = 0, 'OK', 'FAIL')
|
||||
DO PrCursor WITH 'crsAcceptate'
|
||||
|
||||
lnSterse8 = loAnul.Executa('crsAcceptate', 'crsRefuzate')
|
||||
DO PrLogLocal WITH ' Executa retur(sterse)=' + TRANSFORM(lnSterse8) + ' cEroare=[' + loAnul.cEroare + '] (asteptat 2) ' + IIF(lnSterse8 = 2, 'OK', 'FAIL')
|
||||
|
||||
LOCAL lnStersActJ, lnStersActK, lnIdFactDupaJ, lnIdFactDupaK
|
||||
lnStersActJ = -1
|
||||
goExecutor.oSelect2Value("SELECT MIN(sters) FROM ACT WHERE id_fact = " + TRANSFORM(lnIdFJ), @lnStersActJ)
|
||||
DO PrLogLocal WITH ' ACT id_fact=' + TRANSFORM(lnIdFJ) + '(FJ, 2019/6) sters=' + TRANSFORM(lnStersActJ) + ' (asteptat 1) ' + IIF(lnStersActJ = 1, 'OK', 'FAIL')
|
||||
lnStersActK = -1
|
||||
goExecutor.oSelect2Value("SELECT MIN(sters) FROM ACT WHERE id_fact = " + TRANSFORM(lnIdFK), @lnStersActK)
|
||||
DO PrLogLocal WITH ' ACT id_fact=' + TRANSFORM(lnIdFK) + '(FK, 2021/11) sters=' + TRANSFORM(lnStersActK) + ' (asteptat 1) ' + IIF(lnStersActK = 1, 'OK', 'FAIL')
|
||||
|
||||
lnIdFactDupaJ = -1
|
||||
goExecutor.oSelect2Value("SELECT NVL(id_fact,-1) FROM ANAF_EFACTURA WHERE id = " + TRANSFORM(lnEfFJ), @lnIdFactDupaJ)
|
||||
DO PrLogLocal WITH ' anaf_efactura(FJ).id_fact dupa stergere=' + TRANSFORM(lnIdFactDupaJ) + ' (asteptat -1/NULL) ' + IIF(lnIdFactDupaJ = -1, 'OK', 'FAIL')
|
||||
lnIdFactDupaK = -1
|
||||
goExecutor.oSelect2Value("SELECT NVL(id_fact,-1) FROM ANAF_EFACTURA WHERE id = " + TRANSFORM(lnEfFK), @lnIdFactDupaK)
|
||||
DO PrLogLocal WITH ' anaf_efactura(FK).id_fact dupa stergere=' + TRANSFORM(lnIdFactDupaK) + ' (asteptat -1/NULL) ' + IIF(lnIdFactDupaK = -1, 'OK', 'FAIL')
|
||||
|
||||
IF USED('crsAcceptateManual')
|
||||
USE IN (SELECT('crsAcceptateManual'))
|
||||
ENDIF
|
||||
IF USED('crsAcceptate')
|
||||
USE IN (SELECT('crsAcceptate'))
|
||||
ENDIF
|
||||
IF USED('crsRefuzate')
|
||||
USE IN (SELECT('crsRefuzate'))
|
||||
ENDIF
|
||||
|
||||
DO StergeFixturaAnulare
|
||||
DO VerificaStareInitiala
|
||||
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('crsAcceptateManual')
|
||||
USE IN (SELECT('crsAcceptateManual'))
|
||||
ENDIF
|
||||
IF USED('crsAcceptate')
|
||||
USE IN (SELECT('crsAcceptate'))
|
||||
ENDIF
|
||||
IF USED('crsRefuzate')
|
||||
USE IN (SELECT('crsRefuzate'))
|
||||
ENDIF
|
||||
SQLSETPROP(gnHandle, 'Transactions', 1)
|
||||
DO StergeFixturaAnulare
|
||||
CATCH
|
||||
ENDTRY
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrCursor
|
||||
LPARAMETERS tcCursor
|
||||
IF !USED(tcCursor)
|
||||
DO PrLogLocal WITH ' [' + tcCursor + '] neincarcat'
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT (tcCursor)
|
||||
SCAN
|
||||
IF TYPE(tcCursor + '.motiv') = 'C'
|
||||
DO PrLogLocal WITH ' [' + tcCursor + '] id_efactura=' + TRANSFORM(id_efactura) + ' cod=' + TRANSFORM(NVL(cod,0)) + ' motiv=[' + ALLTRIM(NVL(motiv,'')) + ']'
|
||||
ELSE
|
||||
DO PrLogLocal WITH ' [' + tcCursor + '] id_efactura=' + TRANSFORM(id_efactura) + ' id_fact=' + TRANSFORM(id_fact) + ' cod=' + TRANSFORM(NVL(cod,0))
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
* aloca un cod ACT prin aceeasi secventa folosita de pack_contafin.SET_COD, ca sa nu coincida
|
||||
* cu vreun document real de pe schema
|
||||
PROCEDURE NextCod
|
||||
LOCAL lnCod
|
||||
lnCod = 0
|
||||
goExecutor.oSelect2Value("SELECT SEQ_COD.NEXTVAL FROM DUAL", @lnCod)
|
||||
RETURN lnCod
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE InsPartenerA
|
||||
LPARAMETERS tcCodFiscal
|
||||
LOCAL lnId
|
||||
goExecutor.oExecute("INSERT INTO NOM_PARTENERI (cod_fiscal, denumire) VALUES ('" + tcCodFiscal + "', 'FIXTURA ANULARE EF')", 'crsInsPartA')
|
||||
lnId = 0
|
||||
goExecutor.oSelect2Value("SELECT SEQ_NOM_PARTENERI.CURRVAL FROM DUAL", @lnId)
|
||||
RETURN lnId
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
* document contabil de 2 randuri (credit 401 + debit tcContDebit), cu an/luna/id_fact explicite
|
||||
PROCEDURE InsActDoc
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tdData, tnIdPartener, tnIdFact, tcContDebit
|
||||
LOCAL lcData
|
||||
lcData = "TO_DATE('" + DTOS(tdData) + "','YYYYMMDD')"
|
||||
goExecutor.oExecute("INSERT INTO ACT (cod, an, luna, dataact, scc, id_partc, suma, id_fact, sters) VALUES (" + ;
|
||||
TRANSFORM(tnCod) + ", " + TRANSFORM(tnAn) + ", " + TRANSFORM(tnLuna) + ", " + lcData + ", '401', " + ;
|
||||
TRANSFORM(tnIdPartener) + ", 100, " + TRANSFORM(tnIdFact) + ", 0)", 'crsInsActC')
|
||||
goExecutor.oExecute("INSERT INTO ACT (cod, an, luna, dataact, scd, suma, id_fact, sters) VALUES (" + ;
|
||||
TRANSFORM(tnCod) + ", " + TRANSFORM(tnAn) + ", " + TRANSFORM(tnLuna) + ", " + lcData + ", '" + tcContDebit + "', 100, " + ;
|
||||
TRANSFORM(tnIdFact) + ", 0)", 'crsInsActD')
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
* document de "plata" - o singura linie ACT cu id_factd = id_fact-ul facturii referite
|
||||
PROCEDURE InsActReferinta
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tdData, tnIdPartener, tnIdFactd
|
||||
LOCAL lcData
|
||||
lcData = "TO_DATE('" + DTOS(tdData) + "','YYYYMMDD')"
|
||||
goExecutor.oExecute("INSERT INTO ACT (cod, an, luna, dataact, scd, scc, id_partc, suma, id_factd, sters) VALUES (" + ;
|
||||
TRANSFORM(tnCod) + ", " + TRANSFORM(tnAn) + ", " + TRANSFORM(tnLuna) + ", " + lcData + ", '512', '401', " + ;
|
||||
TRANSFORM(tnIdPartener) + ", 100, " + TRANSFORM(tnIdFactd) + ", 0)", 'crsInsActRef')
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE InsFactura
|
||||
LPARAMETERS tcNumarAct, tnIdFact, tcCodFiscal
|
||||
LOCAL lnId, lcIdFact
|
||||
lcIdFact = IIF(EMPTY(tnIdFact), 'NULL', TRANSFORM(tnIdFact))
|
||||
goExecutor.oExecute("INSERT INTO ANAF_EFACTURA (id_fact, xnumar_act, xfurnizor, xtotal_cu_tva, cod_fiscal_emitent, factura_emisa) VALUES (" + ;
|
||||
lcIdFact + ", '" + tcNumarAct + "', 'FIXTURA ANULARE', 100, '" + tcCodFiscal + "', 0)", 'crsInsFact')
|
||||
lnId = 0
|
||||
goExecutor.oSelect2Value("SELECT SEQ_ANAF_EFACTURA.CURRVAL FROM DUAL", @lnId)
|
||||
RETURN lnId
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE StergeFixturaAnulare
|
||||
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA WHERE xnumar_act LIKE 'TEST-%'", 'crsDelFact')
|
||||
goExecutor.oExecute("DELETE FROM ACT WHERE id_fact IN (88800001,88800010,88800020,88800030,88800040,88800050,88800060) OR id_factd = 88800010", 'crsDelAct')
|
||||
goExecutor.oExecute("DELETE FROM CORESP_TIP_PART WHERE id_part IN (SELECT id_part FROM NOM_PARTENERI WHERE cod_fiscal = 'RO9999888801')", 'crsDelCorespTip')
|
||||
goExecutor.oExecute("DELETE FROM NOM_PARTENERI WHERE cod_fiscal = 'RO9999888801'", 'crsDelPart')
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitDel')
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE VerificaStareInitiala
|
||||
LOCAL lnRest
|
||||
lnRest = -1
|
||||
goExecutor.oSelect2Value("SELECT COUNT(*) FROM ACT WHERE id_fact IN (88800001,88800010,88800020,88800030,88800040,88800050,88800060) OR id_factd = 88800010", @lnRest)
|
||||
DO PrLogLocal WITH 'stare finala: ACT randuri fixtura ramase=' + TRANSFORM(lnRest) + ' (asteptat 0) ' + IIF(lnRest = 0, 'OK', 'FAIL')
|
||||
lnRest = -1
|
||||
goExecutor.oSelect2Value("SELECT COUNT(*) FROM ANAF_EFACTURA WHERE xnumar_act LIKE 'TEST-%'", @lnRest)
|
||||
DO PrLogLocal WITH 'stare finala: ANAF_EFACTURA randuri fixtura ramase=' + TRANSFORM(lnRest) + ' (asteptat 0) ' + IIF(lnRest = 0, 'OK', 'FAIL')
|
||||
lnRest = -1
|
||||
goExecutor.oSelect2Value("SELECT COUNT(*) FROM NOM_PARTENERI WHERE cod_fiscal = 'RO9999888801'", @lnRest)
|
||||
DO PrLogLocal WITH 'stare finala: NOM_PARTENERI fixtura ramas=' + TRANSFORM(lnRest) + ' (asteptat 0) ' + IIF(lnRest = 0, '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
|
||||
780
utile/Teste/test_c1_echivalenta_lot.prg
Normal file
780
utile/Teste/test_c1_echivalenta_lot.prg
Normal file
@@ -0,0 +1,780 @@
|
||||
* test_c1_echivalenta_lot.prg
|
||||
* C1 ("testul de vineri la 2 noaptea"): lotul (coada ghidata) scrie in ACT exact ce scrie calea
|
||||
* de un singur document. Ruleaza pe schema de test MARIUSM_AUTO@ROA_CENTRAL (scriere aprobata),
|
||||
* aceeasi schema in doua rulari succesive cu anulare intre ele (varianta de rezerva din plan -
|
||||
* C4 devine premisa lui C1, vezi docs\plan_efactura_23_24.md, sectiunea "Riscuri de instabilitate
|
||||
* a testelor").
|
||||
*
|
||||
* RUN 1 (calea de un singur document): pentru fiecare din cele 10 facturi, pozitioneaza randul in
|
||||
* crsFacturi si ruleaza EXACT secventa pe care grdFacturi.AfterRowColChange o ruleaza la navigare
|
||||
* (CompleteazaFactura/actualizeaza_grid2/CompleteazaDetaliiFactura, anaf_efactura.vc2:14557-14564),
|
||||
* apoi Thisform.do_executa(lnRuta) o singura data - fara bucla, fara CoadaContabilizareEF in
|
||||
* mijloc. Ruta se calculeaza cu CoadaContabilizareEF().Ruta() (cod real, neschimbat) ca sa fie
|
||||
* IDENTICA cu ce ar calcula coada - singura diferenta fata de operatorul real e ca acesta ar primi
|
||||
* intrebarea xmenu('Import contabilitate;Import gestiune'); ruta e transmisa direct ca sa nu
|
||||
* blocheze headless-ul, exact cum face si coada (do_coada -> Thisform.do_executa(m.lnRuta),
|
||||
* anaf_efactura.vc2:12377) - deci comparatia ramane pe ImportGeneral/introducere_compacta, nu pe
|
||||
* mecanismul de intrebare. Toate cele 10 facturi sunt fara linii gestionabile (in_stoc=0), deci
|
||||
* Ruta() = 1 (ImportGeneral) in ambele rulari - ImportModifica/frm_modific2024 nu e acoperit de
|
||||
* acest test (blocheaza pe dialog nativ Windows in mediu headless, vezi
|
||||
* editare_factura\test_writeback_buton1.prg, antet).
|
||||
*
|
||||
* C4 (anulare + revenire la starea initiala) devine aici premisa lui C1: dupa RUN 1, AnulareLotEF
|
||||
* sterge lotul si reseteaza id_fact - verificat separat ca ACT revine la 0 randuri active pe acele
|
||||
* documente si legatura eFactura se reseteaza.
|
||||
*
|
||||
* RUN 2 (coada): dupa anulare, cursoarele crsFacturi/crsDetaliiFacturi se reconstruiesc din Oracle
|
||||
* (stare curata, id_fact=0), se bifeaza toate cele 10 si se cheama Thisform.do_coada() REAL,
|
||||
* neschimbat.
|
||||
*
|
||||
* Comparatie: pentru fiecare din cele 10 facturi, ACT (WHERE id_fact = <id_fact din run> AND
|
||||
* sters=0), toate coloanele EXCLUS ID_ACT/DATAORA (cerute explicit de sarcina) plus COD si ID_FACT
|
||||
* (numar de document / legatura, generate din nou la fiecare rulare - includerea lor ar da FAIL
|
||||
* garantat, nelegat de corectitudine). Randurile se ordoneaza deterministic (SCD/SCC/ASCD/ASCC/
|
||||
* PROC_TVA/ID_JTVA_COLOANA/SUMA) inainte de comparatie.
|
||||
*
|
||||
* Modaluri ocolite (documentat in raport, nu doar aici):
|
||||
* - frm_introd_compact2007.Show(1) (pmenu.prg:introducere_compacta) - blocheaza headless-ul;
|
||||
* un Timer independent (tmrC1Deblocare, la finalul fisierului) cauta formularul in
|
||||
* _SCREEN.Forms si ii apasa REAL butonul Terminat1.Command1 (verificare() + la_iesire() +
|
||||
* Release, cod neschimbat) - exact tiparul din todo21\test_todo21_e2e_verificare.prg
|
||||
* (tmrE2EDeblocare). Acelasi bypass in AMBELE rulari, deci comparatia ramane valida.
|
||||
* - AMESSAGEBOX mockuit (mock_amessagebox.prg, raspunde 6/Da) - pentru confirmarea lotului din
|
||||
* do_coada si orice avertisment neasteptat; nu e nevoie sa raspunda la nimic pe setul ales
|
||||
* (facturi fara duplicate, cu partener identificat).
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File test_c1_echivalenta_lot.ps1
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcLog, gnC1Diferente, gcMockUltimMesaj, gnMockUltimTip
|
||||
gcLog = 'D:\ROA\ROACONT\COMUN\utile\Teste\test_c1_echivalenta_lot_log.txt'
|
||||
gnC1Diferente = 0
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
||||
|
||||
PUBLIC gnEsecuri
|
||||
gnEsecuri = 0
|
||||
|
||||
ON ERROR DO PrErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
PUBLIC goTmrC1, gnC1Ticks, gnC1TicksSameForm, glC1UltimulClick
|
||||
gnC1Ticks = 0
|
||||
gnC1TicksSameForm = 0
|
||||
glC1UltimulClick = .F.
|
||||
|
||||
* lista fixa de 10 facturi eFactura primite, necontabilizate, cu partener identificat (cod fiscal
|
||||
* gaseste id_part activ in nom_parteneri), fara linii gestionabile (in_stoc=0), furnizori distincti
|
||||
* (evita ambiguitatea MIN(id_fact) pe cheia naturala an/luna/nract/dataact/partener - verificat
|
||||
* manual, fiecare din cele 10 are alt id_part) - gasite prin interogare pe MARIUSM_AUTO@ROA_CENTRAL
|
||||
LOCAL ARRAY laIdFacturi(10)
|
||||
laIdFacturi(1) = 3998 && Vodafone Romania S.A.
|
||||
laIdFacturi(2) = 3990 && Digi Romania S.A.
|
||||
laIdFacturi(3) = 3959 && FIVE-HOLDING S.A.
|
||||
laIdFacturi(4) = 2422 && STERA INDUSTRY SRL
|
||||
laIdFacturi(5) = 1311 && RAJA S.A. CONSTANTA
|
||||
laIdFacturi(6) = 3795 && DANTE INTERNATIONAL SA
|
||||
laIdFacturi(7) = 3562 && DEDEMAN SRL
|
||||
laIdFacturi(8) = 3499 && REFLEQT EDUCATION S.R.L.
|
||||
laIdFacturi(9) = 3064 && SC FAN COURIER EXPRESS SRL
|
||||
laIdFacturi(10) = 2549 && Rompetrol Rafinare S.A.
|
||||
|
||||
LOCAL lcListaId, lnI
|
||||
lcListaId = ''
|
||||
FOR lnI = 1 TO 10
|
||||
lcListaId = lcListaId + IIF(EMPTY(lcListaId), '', ',') + TRANSFORM(laIdFacturi(lnI))
|
||||
ENDFOR
|
||||
DO PrLog WITH 'set de test: ' + lcListaId
|
||||
|
||||
TRY
|
||||
*=====================================================================
|
||||
* mediu + mock-uri (mock PRIMUL, castiga fisierul cautat primul - testare-ui-vfp.md capcana g)
|
||||
*=====================================================================
|
||||
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 PrLog WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
|
||||
DO PrFinal
|
||||
QUIT
|
||||
ENDIF
|
||||
DO PrLog WITH 'mediu OK, schema=' + gcS + ' gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna) + ' glLunaInchisa=' + TRANSFORM(glLunaInchisa)
|
||||
|
||||
IF glLunaInchisa
|
||||
DO PrLog WITH 'BLOCAT: luna curenta e inchisa pe schema de test - nici lotul, nici do_executa nu pot scrie'
|
||||
DO PrFinal
|
||||
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
|
||||
SET PROCEDURE TO anulare_lot_ef.prg ADDITIVE
|
||||
SET PROCEDURE TO pmenu.prg ADDITIVE
|
||||
SET PROCEDURE TO oscrie_in_fisiere.prg ADDITIVE
|
||||
DO PrLog WITH 'proceduri incarcate'
|
||||
|
||||
* coada ghidata activa pe schema de test (valoarea initiala revine la finalul testului)
|
||||
SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\optiuni_test.prg') ADDITIVE
|
||||
SalveazaOptiuni('EFACTURA_LOT_ACTIV')
|
||||
scrie_optiune('EFACTURA_LOT_ACTIV', '1', 'test C1 - coada ghidata activa')
|
||||
DO PrLog WITH 'EFACTURA_LOT_ACTIV=1 setat pe ' + gcS
|
||||
|
||||
*=====================================================================
|
||||
* fixtura: cont sintetic pe liniile a 3 din cele 10 facturi, ca echivalenta lot vs document unic
|
||||
* sa aiba ce compara in ACT (fara cont pe nicio linie, do_executa nu scrie nimic si testul ramane
|
||||
* PARTIAL 0/10 - vezi anaf_vefactura_detalii.cont in BuildCursoare, mai jos). Numarul de document
|
||||
* (xnumar_act) al acelorasi 3 facturi e rescris pe o valoare sintetica fara coliziune in
|
||||
* IREG_PARTENERI (schema de test are 30+ randuri ACT vechi pe numerele originale ale acestor
|
||||
* furnizori) - fara asta facturi_duplicate() refuza do_executa pe toate cele 3, indiferent de cont.
|
||||
*=====================================================================
|
||||
goExecutor.oExecute("update anaf_efactura_detalii set cont = '628', acont = null where id_efactura in (3998,3990,3959)", '')
|
||||
goExecutor.oExecute("update anaf_efactura set xnumar_act = 'ZZTC1-90000001' where id = 3998", '')
|
||||
goExecutor.oExecute("update anaf_efactura set xnumar_act = 'ZZTC1-90000002' where id = 3990", '')
|
||||
goExecutor.oExecute("update anaf_efactura set xnumar_act = 'ZZTC1-90000003' where id = 3959", '')
|
||||
SQLCOMMIT(gnHandle)
|
||||
DO PrLog WITH 'fixtura: cont=628 si numar_act sintetic scrise pe facturile 3998/3990/3959'
|
||||
|
||||
*=====================================================================
|
||||
* RUN 1: calea de un singur document, o factura pe rand
|
||||
*=====================================================================
|
||||
DO BuildCursoare WITH lcListaId
|
||||
DO PrLog WITH 'cursoare construite: crsFacturi reccount=' + TRANSFORM(RECCOUNT('crsFacturi')) + ' crsDetaliiFacturi reccount=' + TRANSFORM(RECCOUNT('crsDetaliiFacturi'))
|
||||
IF RECCOUNT('crsFacturi') <> 10
|
||||
DO PrLog WITH 'FAIL: crsFacturi nu are cele 10 facturi asteptate'
|
||||
DO PrFinal
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO BuildCursoareHelper
|
||||
DO PrLog WITH 'cursoare helper construite (cTipArticoleP/E, cTip, cGestiuni, cGestiuni2, cUMISO, cUM)'
|
||||
|
||||
SELECT crsFacturi
|
||||
LOCAL loForm
|
||||
loForm = CREATEOBJECT('frm_import_efactura', .T.)
|
||||
DO PrLog WITH 'frm_import_efactura instantiat, lLotActiv=' + TRANSFORM(loForm.lLotActiv)
|
||||
IF !loForm.lLotActiv
|
||||
DO PrLog WITH 'BLOCAT: This.lLotActiv=.F. dupa Init - EFACTURA_LOT_ACTIV nu a fost citit ca 1'
|
||||
DO PrFinal
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
goTmrC1 = CREATEOBJECT('tmrC1Deblocare')
|
||||
goTmrC1.Enabled = .T.
|
||||
|
||||
LOCAL loCoadaR, lnRuta, lnIdEF, lnRecnoF, lnIdFactDupa
|
||||
LOCAL ARRAY laRun1IdFact(10)
|
||||
loCoadaR = CREATEOBJECT('CoadaContabilizareEF')
|
||||
|
||||
FOR lnI = 1 TO 10
|
||||
lnIdEF = laIdFacturi(lnI)
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = lnIdEF
|
||||
IF !FOUND()
|
||||
DO PrLog WITH 'FAIL RUN1[' + TRANSFORM(lnI) + '] id=' + TRANSFORM(lnIdEF) + ' nu e in crsFacturi'
|
||||
laRun1IdFact(lnI) = 0
|
||||
LOOP
|
||||
ENDIF
|
||||
lnRecnoF = RECNO('crsFacturi')
|
||||
|
||||
DO PrLog WITH ' RUN1[' + TRANSFORM(lnI) + '] inainte CompleteazaFactura'
|
||||
GO lnRecnoF IN crsFacturi
|
||||
loForm.CompleteazaFactura()
|
||||
DO PrLog WITH ' RUN1[' + TRANSFORM(lnI) + '] inainte actualizeaza_grid2'
|
||||
GO lnRecnoF IN crsFacturi
|
||||
loForm.actualizeaza_grid2()
|
||||
DO PrLog WITH ' RUN1[' + TRANSFORM(lnI) + '] inainte CompleteazaDetaliiFactura'
|
||||
GO lnRecnoF IN crsFacturi
|
||||
loForm.CompleteazaDetaliiFactura()
|
||||
GO lnRecnoF IN crsFacturi
|
||||
|
||||
lnRuta = loCoadaR.Ruta('crsDetaliiFacturi')
|
||||
IF lnRuta = 2
|
||||
* linii gestionabile (in_stoc=1) - ImportModifica/frm_modific2024 blocheaza pe dialog nativ
|
||||
* Windows in mediu headless (in afara domeniului acestui test, vezi antetul .prg); starea
|
||||
* poate deriva intre rulari repetate (scrierea de id_articol schimba in_stoc pe viitor)
|
||||
DO PrLog WITH ' RUN1[' + TRANSFORM(lnI) + '] SKIP: ruta=2 (linii gestionabile, in afara domeniului acestui test)'
|
||||
laRun1IdFact(lnI) = 0
|
||||
SELECT crsFacturi
|
||||
LOOP
|
||||
ENDIF
|
||||
DO PrLog WITH ' RUN1[' + TRANSFORM(lnI) + '] inainte do_executa ruta=' + TRANSFORM(lnRuta)
|
||||
gnC1TicksSameForm = 0
|
||||
glC1UltimulClick = .F.
|
||||
gcMockUltimMesaj = ''
|
||||
TRY
|
||||
loForm.do_executa(lnRuta)
|
||||
CATCH TO loExEx
|
||||
DO PrLog WITH ' EXCEPTIE do_executa RUN1[' + TRANSFORM(lnI) + ']: ' + loExEx.Message
|
||||
ENDTRY
|
||||
|
||||
lnIdFactDupa = 0
|
||||
goExecutor.oSelecteaza2Value('select id_fact from anaf_efactura where id = ' + TRANSFORM(lnIdEF), @lnIdFactDupa)
|
||||
laRun1IdFact(lnI) = NVL(lnIdFactDupa, 0)
|
||||
DO PrLog WITH ' RUN1[' + TRANSFORM(lnI) + '] id_efactura=' + TRANSFORM(lnIdEF) + ' ruta=' + TRANSFORM(lnRuta) + ;
|
||||
' id_fact=' + TRANSFORM(laRun1IdFact(lnI)) + ' click_formular=' + TRANSFORM(glC1UltimulClick) + ;
|
||||
IIF(!EMPTY(gcMockUltimMesaj), ' mesaj_amessagebox=[' + gcMockUltimMesaj + ']', '')
|
||||
|
||||
SELECT crsFacturi
|
||||
ENDFOR
|
||||
|
||||
goTmrC1.Enabled = .F.
|
||||
|
||||
LOCAL lnOKRun1
|
||||
lnOKRun1 = 0
|
||||
FOR lnI = 1 TO 10
|
||||
IF laRun1IdFact(lnI) <> 0
|
||||
lnOKRun1 = lnOKRun1 + 1
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO PrLog WITH 'RUN1 terminat: ' + TRANSFORM(lnOKRun1) + '/10 documente create'
|
||||
|
||||
IF lnOKRun1 = 0
|
||||
DO PrLog WITH 'FAIL C1: niciun document creat in RUN1 - nimic de comparat'
|
||||
DO PrFinal
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
*=====================================================================
|
||||
* fotografiaza ACT-ul lui RUN1 INAINTE de anulare (C4 le sterge imediat dupa - o interogare
|
||||
* vie pe id_fact-urile lui RUN1 dupa C4 ar intoarce 0 randuri necondiitonat, nelegat de
|
||||
* corectitudinea coezii). RUN1_SEQ leaga fotografia inapoi de indexul facturii (1..10).
|
||||
*=====================================================================
|
||||
LOCAL lcCaseSeq, lcListaIdFact1, lcSqlSnap
|
||||
lcCaseSeq = ''
|
||||
lcListaIdFact1 = ''
|
||||
FOR lnI = 1 TO 10
|
||||
IF laRun1IdFact(lnI) = 0
|
||||
LOOP
|
||||
ENDIF
|
||||
lcCaseSeq = lcCaseSeq + 'WHEN ' + TRANSFORM(laRun1IdFact(lnI)) + ' THEN ' + TRANSFORM(lnI) + ' '
|
||||
lcListaIdFact1 = lcListaIdFact1 + IIF(EMPTY(lcListaIdFact1), '', ',') + TRANSFORM(laRun1IdFact(lnI))
|
||||
ENDFOR
|
||||
IF USED('crsRun1Snapshot')
|
||||
USE IN crsRun1Snapshot
|
||||
ENDIF
|
||||
lcSqlSnap = [select t.*, case id_fact ] + lcCaseSeq + [end as run1_seq from act t where id_fact in (] + lcListaIdFact1 + [) and sters = 0]
|
||||
goExecutor.oExecute(lcSqlSnap, 'crsRun1Snapshot')
|
||||
DO PrLog WITH 'RUN1 snapshot ACT inainte de anulare: ' + TRANSFORM(RECCOUNT('crsRun1Snapshot')) + ' randuri'
|
||||
|
||||
*=====================================================================
|
||||
* C4: anulare in bloc, verificare revenire la starea initiala
|
||||
*=====================================================================
|
||||
LOCAL loAnul, lnStersE
|
||||
loAnul = CREATEOBJECT('AnulareLotEF')
|
||||
loAnul.Verifica(lcListaId)
|
||||
DO PrLog WITH 'AnulareLotEF.Verifica: acceptate=' + TRANSFORM(RECCOUNT('crsAcceptate')) + ' refuzate=' + TRANSFORM(RECCOUNT('crsRefuzate'))
|
||||
IF RECCOUNT('crsRefuzate') > 0
|
||||
SELECT crsRefuzate
|
||||
SCAN
|
||||
DO PrLog WITH ' REFUZAT id_efactura=' + TRANSFORM(id_efactura) + ' motiv=' + ALLTRIM(NVL(motiv,''))
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
|
||||
lnStersE = loAnul.Executa()
|
||||
DO PrLog WITH 'AnulareLotEF.Executa: sterse=' + TRANSFORM(lnStersE) + ' cEroare=[' + ALLTRIM(NVL(loAnul.cEroare,'')) + ']'
|
||||
|
||||
LOCAL llC4OK, lnActRamase, lnIdFactRamas
|
||||
llC4OK = (lnStersE = lnOKRun1)
|
||||
FOR lnI = 1 TO 10
|
||||
IF laRun1IdFact(lnI) = 0
|
||||
LOOP
|
||||
ENDIF
|
||||
lnActRamase = 0
|
||||
goExecutor.oSelecteaza2Value('select count(*) from act where id_fact = ' + TRANSFORM(laRun1IdFact(lnI)) + ' and sters = 0', @lnActRamase)
|
||||
IF NVL(lnActRamase,0) <> 0
|
||||
llC4OK = .F.
|
||||
DO PrLog WITH ' C4 FAIL: id_fact=' + TRANSFORM(laRun1IdFact(lnI)) + ' mai are ' + TRANSFORM(lnActRamase) + ' randuri active in ACT'
|
||||
ENDIF
|
||||
lnIdFactRamas = -1
|
||||
goExecutor.oSelecteaza2Value('select nvl(id_fact,0) from anaf_efactura where id = ' + TRANSFORM(laIdFacturi(lnI)), @lnIdFactRamas)
|
||||
IF NVL(lnIdFactRamas,-1) <> 0
|
||||
llC4OK = .F.
|
||||
DO PrLog WITH ' C4 FAIL: anaf_efactura.id=' + TRANSFORM(laIdFacturi(lnI)) + ' id_fact nu s-a resetat (=' + TRANSFORM(lnIdFactRamas) + ')'
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO PrLog WITH 'VERDICT C4: ' + IIF(llC4OK, 'PASS', 'FAIL')
|
||||
|
||||
*=====================================================================
|
||||
* AnulareLotEF/pack_contafin.sterge_document lasa uneori (nu mereu) un rand IREG_PARTENERI legat
|
||||
* de documentul tocmai sters - garda facturi_duplicate() refuza atunci reimportul urmator cu
|
||||
* acelasi numar (bug real, in afara acestui fisier). Testul isi curata singur urmele proprii
|
||||
* (serie_act sintetica ZZTC1, unica acestui test) ca sa fie rulabil de mai multe ori la rand.
|
||||
*=====================================================================
|
||||
LOCAL lnOrfaniIreg
|
||||
lnOrfaniIreg = 0
|
||||
goExecutor.oSelecteaza2Value([select count(*) from ireg_parteneri ip where ip.serie_act = 'ZZTC1' and not exists (select 1 from act a where a.id_fact = ip.id_fact and a.sters = 0)], @lnOrfaniIreg)
|
||||
IF NVL(lnOrfaniIreg, 0) > 0
|
||||
goExecutor.oExecute([delete from ireg_parteneri ip where ip.serie_act = 'ZZTC1' and not exists (select 1 from act a where a.id_fact = ip.id_fact and a.sters = 0)], '')
|
||||
SQLCOMMIT(gnHandle)
|
||||
ENDIF
|
||||
DO PrLog WITH 'curatenie orfani IREG_PARTENERI (serie_act=ZZTC1): ' + TRANSFORM(NVL(lnOrfaniIreg, 0)) + ' sterse'
|
||||
|
||||
*=====================================================================
|
||||
* RUN 2: coada reala, UN singur apel do_coada() peste tot lotul bifat - exact ce ar face
|
||||
* operatorul. INKEY(0.01,'H') dintre documente (anaf_efactura.vc2:12406) e poll, nu asteptare
|
||||
* nelimitata, deci plafonul, confirmarea si raportul final sunt exercitate real.
|
||||
*=====================================================================
|
||||
DO BuildCursoare WITH lcListaId
|
||||
DO PrLog WITH 'RUN2: cursoare reconstruite dupa anulare, crsFacturi reccount=' + TRANSFORM(RECCOUNT('crsFacturi'))
|
||||
|
||||
LOCAL loCoadaR2
|
||||
loCoadaR2 = CREATEOBJECT('CoadaContabilizareEF')
|
||||
loCoadaR2.MarcheazaEligibilitate('crsFacturi', glLunaInchisa)
|
||||
|
||||
SELECT crsFacturi
|
||||
REPLACE ALL ales WITH 0
|
||||
LOCAL lnEligibile
|
||||
SELECT COUNT(*) FROM crsFacturi WHERE eligibil_lot = 1 INTO ARRAY laEligibile
|
||||
lnEligibile = laEligibile(1)
|
||||
DO PrLog WITH 'RUN2: facturi eligibile=' + TRANSFORM(lnEligibile) + ' din 10'
|
||||
IF lnEligibile < lnOKRun1
|
||||
SELECT crsFacturi
|
||||
SCAN FOR eligibil_lot = 0
|
||||
DO PrLog WITH ' RUN2 neeligibila: id=' + TRANSFORM(id) + ' motiv=' + ALLTRIM(NVL(motiv_lot,''))
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
|
||||
* bifeaza toate facturile eligibile si fara linii gestionabile (ruta=2 - acelasi motiv de
|
||||
* excludere ca in RUN1, ImportModifica/frm_modific2024 blocheaza pe dialog nativ Windows headless)
|
||||
LOCAL lnBifate
|
||||
lnBifate = 0
|
||||
FOR lnI = 1 TO 10
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = laIdFacturi(lnI)
|
||||
IF !FOUND()
|
||||
DO PrLog WITH ' RUN2[' + TRANSFORM(lnI) + '] FAIL: id=' + TRANSFORM(laIdFacturi(lnI)) + ' nu e in crsFacturi'
|
||||
LOOP
|
||||
ENDIF
|
||||
IF eligibil_lot <> 1
|
||||
DO PrLog WITH ' RUN2[' + TRANSFORM(lnI) + '] SKIP: neeligibila (' + ALLTRIM(NVL(motiv_lot,'')) + ')'
|
||||
LOOP
|
||||
ENDIF
|
||||
|
||||
LOCAL lnGestionabile
|
||||
LOCAL ARRAY laGest(1)
|
||||
SELECT COUNT(*) FROM crsDetaliiFacturi WHERE id_efactura = laIdFacturi(lnI) AND NVL(in_stoc,0) = 1 INTO ARRAY laGest
|
||||
lnGestionabile = laGest(1)
|
||||
IF lnGestionabile > 0
|
||||
DO PrLog WITH ' RUN2[' + TRANSFORM(lnI) + '] SKIP: ruta=2 (linii gestionabile, in afara domeniului acestui test)'
|
||||
LOOP
|
||||
ENDIF
|
||||
|
||||
SELECT crsFacturi
|
||||
REPLACE ales WITH 1 FOR id = laIdFacturi(lnI)
|
||||
lnBifate = lnBifate + 1
|
||||
ENDFOR
|
||||
DO PrLog WITH 'RUN2: ' + TRANSFORM(lnBifate) + ' facturi bifate pentru un singur apel do_coada()'
|
||||
|
||||
goTmrC1.Enabled = .T.
|
||||
gnC1TicksSameForm = 0
|
||||
gcMockUltimMesaj = ''
|
||||
TRY
|
||||
loForm.do_coada()
|
||||
CATCH TO loExCoada
|
||||
DO PrLog WITH ' EXCEPTIE do_coada RUN2: ' + loExCoada.Message
|
||||
ENDTRY
|
||||
goTmrC1.Enabled = .F.
|
||||
DO PrLog WITH 'RUN2: do_coada() terminat, ultim mesaj amessagebox=[' + gcMockUltimMesaj + ']'
|
||||
|
||||
IF USED('crsCoadaRaport')
|
||||
SELECT crsCoadaRaport
|
||||
SCAN
|
||||
DO PrLog WITH ' raport coada: id_efactura=' + TRANSFORM(id_efactura) + ' numar_act=' + ALLTRIM(numar_act) + ' stare=' + ALLTRIM(stare) + ' motiv=' + ALLTRIM(motiv)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
|
||||
LOCAL ARRAY laRun2IdFact(10)
|
||||
FOR lnI = 1 TO 10
|
||||
laRun2IdFact(lnI) = 0
|
||||
lnIdFactDupa = 0
|
||||
goExecutor.oSelecteaza2Value('select nvl(id_fact,0) from anaf_efactura where id = ' + TRANSFORM(laIdFacturi(lnI)), @lnIdFactDupa)
|
||||
laRun2IdFact(lnI) = NVL(lnIdFactDupa, 0)
|
||||
DO PrLog WITH ' RUN2[' + TRANSFORM(lnI) + '] id_efactura=' + TRANSFORM(laIdFacturi(lnI)) + ' id_fact=' + TRANSFORM(laRun2IdFact(lnI))
|
||||
ENDFOR
|
||||
|
||||
*=====================================================================
|
||||
* comparatie ACT, factura cu factura (RUN1 din fotografie, RUN2 din interogare vie)
|
||||
*=====================================================================
|
||||
LOCAL lnTotalDif, lnComparate, lcVerdict
|
||||
lnTotalDif = 0
|
||||
lnComparate = 0
|
||||
FOR lnI = 1 TO 10
|
||||
IF laRun1IdFact(lnI) = 0 OR laRun2IdFact(lnI) = 0
|
||||
DO PrLog WITH 'SKIP compara[' + TRANSFORM(lnI) + '] id_efactura=' + TRANSFORM(laIdFacturi(lnI)) + ;
|
||||
' - lipseste documentul pe una din cai (run1=' + TRANSFORM(laRun1IdFact(lnI)) + ' run2=' + TRANSFORM(laRun2IdFact(lnI)) + ')'
|
||||
LOOP
|
||||
ENDIF
|
||||
lnComparate = lnComparate + 1
|
||||
lnTotalDif = lnTotalDif + CompareInvoiceSnap(lnI, laRun2IdFact(lnI), 'id_efactura=' + TRANSFORM(laIdFacturi(lnI)))
|
||||
ENDFOR
|
||||
|
||||
DO PrLog WITH 'facturi comparate=' + TRANSFORM(lnComparate) + '/10, diferente totale=' + TRANSFORM(lnTotalDif)
|
||||
* restul din 10 sunt SARIT de do_coada pe lipsuri reale (regula runda 18) - nu sunt parte din
|
||||
* echivalenta lot vs. document unic; pragul minim de comparatii evita un PASS fals pe 0 facturi
|
||||
DO CASE
|
||||
CASE lnTotalDif > 0
|
||||
lcVerdict = 'FAIL - ' + TRANSFORM(lnTotalDif) + ' diferente'
|
||||
CASE lnComparate >= 2
|
||||
lcVerdict = 'PASS (' + TRANSFORM(lnComparate) + '/10 comparate)'
|
||||
OTHERWISE
|
||||
lcVerdict = 'PARTIAL (' + TRANSFORM(lnComparate) + '/10 comparate) - sub pragul minim de 2, vezi SKIP mai sus'
|
||||
ENDCASE
|
||||
DO PrLog WITH 'VERDICT C1: ' + lcVerdict
|
||||
|
||||
* curatenie optiune (documentele NU se sterg - aprobat explicit de Marius)
|
||||
RestaureazaOptiuni()
|
||||
DO PrLog WITH 'optiune EFACTURA_LOT_ACTIV restaurata'
|
||||
|
||||
CATCH TO loExMain
|
||||
DO PrLog WITH 'EXCEPTIE NEASTEPTATA: ' + loExMain.Message + ' (' + TRANSFORM(loExMain.LineNo) + ') ' + loExMain.Procedure
|
||||
ENDTRY
|
||||
|
||||
DO PrFinal
|
||||
QUIT
|
||||
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE BuildCursoare
|
||||
LPARAMETERS tcListaId
|
||||
* construieste crsFacturi/crsDetaliiFacturi pentru exact facturile din tcListaId, copie
|
||||
* fidela din efactura_import\test_import_efactura_smoke.prg (schema + select), cu filtru pe id
|
||||
* in loc de interval de date - la a doua chemare (dupa anulare) reflecta starea curenta din
|
||||
* Oracle (id_fact resetat, completat/completatdet reveniti la 0)
|
||||
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 (grid-urile le leaga la CREATEOBJECT,
|
||||
* nu doar la Show()): fara ele, VFP incearca sa rezolve alias-urile lipsa (cTip/cGestiuni/cUMISO/cUM)
|
||||
* prin dialogul nativ "locate file", ~1 minut per alias lipsa - de-aici blocajul de peste 4 minute.
|
||||
* Copie fidela din test_import_efactura_smoke.prg
|
||||
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
|
||||
|
||||
|
||||
**********************************************************
|
||||
* fotografiaza + compara ACT: RUN1 din crsRun1Snapshot (fotografiat inainte de anulare - dupa C4
|
||||
* id_fact-urile lui RUN1 nu mai au randuri active in ACT, o interogare vie ar da FAIL garantat),
|
||||
* RUN2 din interogare vie. Comparatie CA MULTIME (fiecare rand din run1 cauta o pereche
|
||||
* neconsumata in run2 cu toate coloanele egale), nu pozitionala - ordinea fizica de scriere in
|
||||
* ACT nu e parte din contractul de echivalenta, si SQL local (INDEX ON) vs ORDER BY Oracle pot
|
||||
* desparti altfel randurile egale la cheia de sortare. Exclus ID_ACT/DATAORA (cerute de sarcina)
|
||||
* + COD/ID_FACT (generate din nou la fiecare rulare) + RUN1_SEQ (doar cheia fotografiei).
|
||||
* Loghez fiecare diferenta gasita; intoarce numarul de diferente
|
||||
PROCEDURE CompareInvoiceSnap
|
||||
LPARAMETERS tnSeq, tnIdFact2, tcEticheta
|
||||
|
||||
LOCAL lcSql, lnQ2, lnDif, lnJ, lnK, lnNCol, lcCol, llGasit, llMatch, lnTotR1
|
||||
LOCAL ARRAY laFld(1)
|
||||
lnDif = 0
|
||||
|
||||
IF USED('crsC1R1')
|
||||
USE IN crsC1R1
|
||||
ENDIF
|
||||
SELECT * FROM crsRun1Snapshot WHERE run1_seq = m.tnSeq INTO CURSOR crsC1R1 READWRITE
|
||||
|
||||
lcSql = [select * from act where id_fact = ] + TRANSFORM(m.tnIdFact2) + [ and sters = 0]
|
||||
lnQ2 = goExecutor.oExecute(m.lcSql, 'crsC1R2')
|
||||
|
||||
IF RECCOUNT('crsC1R1') <= 0 OR m.lnQ2 <= 0
|
||||
DO PrLog WITH ' ' + m.tcEticheta + ': FAIL interogare ACT (run1(fotografie)=' + TRANSFORM(RECCOUNT('crsC1R1')) + ' run2=' + TRANSFORM(m.lnQ2) + ')'
|
||||
USE IN (SELECT('crsC1R1'))
|
||||
IF USED('crsC1R2')
|
||||
USE IN (SELECT('crsC1R2'))
|
||||
ENDIF
|
||||
RETURN 1
|
||||
ENDIF
|
||||
|
||||
IF RECCOUNT('crsC1R1') <> RECCOUNT('crsC1R2')
|
||||
DO PrLog WITH ' ' + m.tcEticheta + ': FAIL numar randuri ACT diferit - run1(fotografie)=' + ;
|
||||
TRANSFORM(RECCOUNT('crsC1R1')) + ' run2(id_fact=' + TRANSFORM(m.tnIdFact2) + ')=' + TRANSFORM(RECCOUNT('crsC1R2'))
|
||||
USE IN (SELECT('crsC1R1'))
|
||||
USE IN (SELECT('crsC1R2'))
|
||||
RETURN 1
|
||||
ENDIF
|
||||
|
||||
lnNCol = AFIELDS(laFld, 'crsC1R1')
|
||||
lnTotR1 = RECCOUNT('crsC1R1')
|
||||
LOCAL ARRAY laConsumat(MAX(RECCOUNT('crsC1R2'),1))
|
||||
FOR lnK = 1 TO RECCOUNT('crsC1R2')
|
||||
laConsumat(lnK) = .F.
|
||||
ENDFOR
|
||||
|
||||
SELECT crsC1R1
|
||||
GO TOP
|
||||
FOR lnJ = 1 TO lnTotR1
|
||||
llGasit = .F.
|
||||
SELECT crsC1R2
|
||||
GO TOP
|
||||
FOR lnK = 1 TO RECCOUNT('crsC1R2')
|
||||
GO lnK IN crsC1R2
|
||||
IF !laConsumat(lnK)
|
||||
llMatch = .T.
|
||||
FOR lnI = 1 TO lnNCol
|
||||
lcCol = UPPER(laFld(lnI,1))
|
||||
IF INLIST(m.lcCol, 'ID_ACT', 'DATAORA', 'COD', 'ID_FACT', 'RUN1_SEQ')
|
||||
LOOP
|
||||
ENDIF
|
||||
IF !(EVALUATE('crsC1R1.' + m.lcCol) == EVALUATE('crsC1R2.' + m.lcCol))
|
||||
llMatch = .F.
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDFOR
|
||||
IF llMatch
|
||||
laConsumat(lnK) = .T.
|
||||
llGasit = .T.
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDFOR
|
||||
IF !llGasit
|
||||
lnDif = lnDif + 1
|
||||
DO PrLog WITH ' ' + m.tcEticheta + ': DIFERENTA rand run1 fara pereche in run2 - scd=' + TRANSFORM(crsC1R1.scd) + ;
|
||||
' scc=' + TRANSFORM(crsC1R1.scc) + ' suma=' + TRANSFORM(crsC1R1.suma) + ' proc_tva=' + TRANSFORM(NVL(crsC1R1.proc_tva,-1)) + ;
|
||||
' id_jtva_coloana=' + TRANSFORM(NVL(crsC1R1.id_jtva_coloana,-1)) + ;
|
||||
' | coloane diferite fata de cel mai apropiat rand run2: ' + ColoaneDiferite()
|
||||
ENDIF
|
||||
SELECT crsC1R1
|
||||
SKIP
|
||||
ENDFOR
|
||||
|
||||
FOR lnK = 1 TO RECCOUNT('crsC1R2')
|
||||
IF !laConsumat(lnK)
|
||||
GO lnK IN crsC1R2
|
||||
lnDif = lnDif + 1
|
||||
DO PrLog WITH ' ' + m.tcEticheta + ': DIFERENTA rand run2 fara pereche in run1 - scd=' + TRANSFORM(crsC1R2.scd) + ;
|
||||
' scc=' + TRANSFORM(crsC1R2.scc) + ' suma=' + TRANSFORM(crsC1R2.suma) + ' proc_tva=' + TRANSFORM(NVL(crsC1R2.proc_tva,-1)) + ;
|
||||
' id_jtva_coloana=' + TRANSFORM(NVL(crsC1R2.id_jtva_coloana,-1))
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
IF lnDif = 0
|
||||
DO PrLog WITH ' ' + m.tcEticheta + ': OK (' + TRANSFORM(lnTotR1) + ' randuri ACT identice ca multime)'
|
||||
ENDIF
|
||||
|
||||
USE IN (SELECT('crsC1R1'))
|
||||
USE IN (SELECT('crsC1R2'))
|
||||
RETURN m.lnDif
|
||||
ENDPROC
|
||||
|
||||
|
||||
**********************************************************
|
||||
* Pentru randul curent din crsC1R1, cauta in crsC1R2 randul cu acelasi scd/scc/suma si intoarce
|
||||
* coloanele in care difera (aceleasi excluderi ca la comparatie). Lasa ambele cursoare pe pozitia
|
||||
* de la intrare
|
||||
FUNCTION ColoaneDiferite
|
||||
|
||||
LOCAL lnR1, lnR2, lnI, lnNC, lcCol, lcRez
|
||||
LOCAL ARRAY laFldD(1)
|
||||
|
||||
lnR1 = RECNO('crsC1R1')
|
||||
lnR2 = RECNO('crsC1R2')
|
||||
lnNC = AFIELDS(laFldD, 'crsC1R1')
|
||||
lcRez = ''
|
||||
|
||||
SELECT crsC1R2
|
||||
LOCATE FOR scd == crsC1R1.scd AND scc == crsC1R1.scc AND suma = crsC1R1.suma
|
||||
IF FOUND()
|
||||
FOR lnI = 1 TO m.lnNC
|
||||
lcCol = UPPER(laFldD(m.lnI,1))
|
||||
IF INLIST(m.lcCol, 'ID_ACT', 'DATAORA', 'COD', 'ID_FACT', 'RUN1_SEQ')
|
||||
LOOP
|
||||
ENDIF
|
||||
IF !(EVALUATE('crsC1R1.' + m.lcCol) == EVALUATE('crsC1R2.' + m.lcCol))
|
||||
lcRez = m.lcRez + IIF(EMPTY(m.lcRez), '', ', ') + m.lcCol + '=[' + ;
|
||||
ALLTRIM(TRANSFORM(EVALUATE('crsC1R1.' + m.lcCol))) + '] vs [' + ;
|
||||
ALLTRIM(TRANSFORM(EVALUATE('crsC1R2.' + m.lcCol))) + ']'
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ELSE
|
||||
lcRez = '(niciun rand run2 cu acelasi scd/scc/suma)'
|
||||
ENDIF
|
||||
|
||||
IF m.lnR2 > 0
|
||||
GO m.lnR2 IN crsC1R2
|
||||
ENDIF
|
||||
SELECT crsC1R1
|
||||
IF m.lnR1 > 0
|
||||
GO m.lnR1 IN crsC1R1
|
||||
ENDIF
|
||||
|
||||
RETURN LEFT(IIF(EMPTY(m.lcRez), '(niciuna)', m.lcRez), 400)
|
||||
ENDFUNC
|
||||
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrLog
|
||||
LPARAMETERS tcMsg
|
||||
LOCAL lcL
|
||||
SET SAFETY OFF
|
||||
lcL = IIF(FILE(gcLog), FILETOSTR(gcLog), '')
|
||||
STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcLog)
|
||||
ENDPROC
|
||||
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO PrLog WITH 'EROARE ' + TRANSFORM(tnErr) + ': ' + TRANSFORM(tcMsg) + ' in ' + TRANSFORM(tcProg) + ' linia ' + TRANSFORM(tnLine)
|
||||
ENDPROC
|
||||
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrFinal
|
||||
DO PrLog WITH 'DONE ' + TTOC(DATETIME())
|
||||
ENDPROC
|
||||
|
||||
|
||||
**********************************************************
|
||||
* deblocarea Show(1) a lui frm_introd_compact2007 (introducere_compacta, pmenu.prg): apasa REAL
|
||||
* butonul Terminat1.Command1 (verificare() + la_iesire() + Release, cod neschimbat) de indata ce
|
||||
* formularul apare in _SCREEN.Forms. Daca acelasi formular ramane deschis peste ~5s (validare
|
||||
* interna esuata - verificare() a intors .F.), il elibereaza fortat ca sa nu agate testul; acel
|
||||
* document ramane fara id_fact si testul il raporteaza SKIP/FAIL, nu PASS fals.
|
||||
**********************************************************
|
||||
DEFINE CLASS tmrC1Deblocare AS Timer
|
||||
Interval = 250
|
||||
Enabled = .F.
|
||||
|
||||
PROCEDURE Timer
|
||||
LOCAL lnI, loF, llGasit
|
||||
gnC1Ticks = gnC1Ticks + 1
|
||||
llGasit = .F.
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
loF = _SCREEN.Forms(lnI)
|
||||
IF UPPER(TRANSFORM(loF.Name)) == 'FRM_INTROD_COMPACT2007'
|
||||
llGasit = .T.
|
||||
gnC1TicksSameForm = gnC1TicksSameForm + 1
|
||||
IF gnC1TicksSameForm > 20
|
||||
DO PrLog WITH ' tmrC1Deblocare: force release dupa ' + TRANSFORM(gnC1TicksSameForm) + ' ticks (verificare() a esuat probabil)'
|
||||
TRY
|
||||
loF.Release()
|
||||
CATCH
|
||||
ENDTRY
|
||||
ELSE
|
||||
TRY
|
||||
loF.Terminat1.Command1.Click()
|
||||
glC1UltimulClick = .T.
|
||||
CATCH TO loErrClick
|
||||
DO PrLog WITH ' tmrC1Deblocare: EXCEPTIE la Click: ' + loErrClick.Message
|
||||
ENDTRY
|
||||
ENDIF
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDFOR
|
||||
IF !llGasit
|
||||
gnC1TicksSameForm = 0
|
||||
ENDIF
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
20
utile/Teste/test_c1_echivalenta_lot.ps1
Normal file
20
utile/Teste/test_c1_echivalenta_lot.ps1
Normal file
@@ -0,0 +1,20 @@
|
||||
# test_c1_echivalenta_lot.ps1 - rulare headless a testului C1 (echivalenta lot vs. document unic)
|
||||
# Scrie in schema de test MARIUSM_AUTO@ROA_CENTRAL - vezi antetul .prg pentru detalii.
|
||||
# Rulare: powershell -ExecutionPolicy Bypass -File test_c1_echivalenta_lot.ps1
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
$Prg = Join-Path $Teste 'test_c1_echivalenta_lot.prg'
|
||||
$Fxp = [IO.Path]::ChangeExtension($Prg, '.fxp')
|
||||
$Err = [IO.Path]::ChangeExtension($Prg, '.err')
|
||||
$Log = Join-Path $Teste 'test_c1_echivalenta_lot_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: testul 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
|
||||
389
utile/Teste/test_coada_contabilizare_ef.prg
Normal file
389
utile/Teste/test_coada_contabilizare_ef.prg
Normal file
@@ -0,0 +1,389 @@
|
||||
* test_coada_contabilizare_ef.prg
|
||||
* Teste CoadaContabilizareEF (COMUN\programe\coada_contabilizare_ef.prg), fara Oracle si fara UI:
|
||||
* EligibilRand, Ruta, AntetProgres, CreeazaRaport/AdaugaRaport, nPlafon, MesajPlafon,
|
||||
* MesajConfirmare, MesajOprire.
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\test_coada_contabilizare_ef.prg"
|
||||
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\test_coada_contabilizare_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
|
||||
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\test_coada_contabilizare_ef_log.txt"
|
||||
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\programe\coada_contabilizare_ef.prg" ADDITIVE
|
||||
LOCAL loCoada
|
||||
loCoada = CREATEOBJECT('CoadaContabilizareEF')
|
||||
DO PrLogLocal WITH 'obiect creat'
|
||||
|
||||
DO PrLogLocal WITH '=== EligibilRand ==='
|
||||
DO PrVerificaMotiv WITH loCoada, 'luna inchisa', 0, '1234567', 1, 0, .T., 'F1', 'luna este inchisa'
|
||||
DO PrVerificaMotiv WITH loCoada, 'id_fact completat', 55, '1234567', 1, 0, .F., 'F1', 'factura este deja importata in contabilitate'
|
||||
DO PrVerificaMotiv WITH loCoada, 'cod fiscal gol', 0, '', 1, 0, .F., 'F1', 'eFactura nu are cod fiscal, nu se poate identifica partenerul'
|
||||
DO PrVerificaMotiv WITH loCoada, 'CIF ambiguu', 0, '1234567', 2, 0, .F., 'F1', 'CIF ambiguu in ROA, alegeti partenerul manual'
|
||||
DO PrVerificaMotiv WITH loCoada, 'numar fara cifre', 0, '1234567', 1, 0, .F., 'FACTURA', 'numarul documentului nu se poate deduce din FACTURA, completati-l manual'
|
||||
DO PrVerificaMotiv WITH loCoada, 'eligibil', 0, '1234567', 1, 0, .F., 'ZZT-A1-C', ''
|
||||
|
||||
DO PrLogLocal WITH '=== Ruta ==='
|
||||
IF USED('crsRutaTest')
|
||||
USE IN crsRutaTest
|
||||
ENDIF
|
||||
CREATE CURSOR crsRutaTest (in_stoc N(1))
|
||||
INSERT INTO crsRutaTest (in_stoc) VALUES (0)
|
||||
INSERT INTO crsRutaTest (in_stoc) VALUES (0)
|
||||
DO PrVerificaRuta WITH loCoada, 'fara linii in_stoc=1', 'crsRutaTest', 1
|
||||
INSERT INTO crsRutaTest (in_stoc) VALUES (1)
|
||||
DO PrVerificaRuta WITH loCoada, 'cu o linie in_stoc=1', 'crsRutaTest', 2
|
||||
SELECT crsRutaTest
|
||||
GO 2
|
||||
loCoada.Ruta('crsRutaTest')
|
||||
DO PrLogLocal WITH ' Ruta nu muta pozitia: RECNO=' + TRANSFORM(RECNO('crsRutaTest')) + ' EOF=' + TRANSFORM(EOF('crsRutaTest')) + ' asteptat RECNO=2 EOF=.F. ' + ;
|
||||
IIF(RECNO('crsRutaTest') = 2 AND !EOF('crsRutaTest'), 'OK', 'FAIL')
|
||||
USE IN crsRutaTest
|
||||
|
||||
DO PrLogLocal WITH '=== AntetProgres ==='
|
||||
LOCAL lcAntet, lcAsteptat
|
||||
lcAntet = loCoada.AntetProgres(3, 10, 'FURNIZOR TEST SRL', 'FF 123/2026', 1234.5)
|
||||
lcAsteptat = 'Factura 3 din 10 - FURNIZOR TEST SRL - FF 123/2026 - 1,234.50 lei (ESC opreste coada dupa documentul curent)'
|
||||
DO PrLogLocal WITH ' obtinut =[' + m.lcAntet + ']'
|
||||
DO PrLogLocal WITH ' asteptat=[' + m.lcAsteptat + '] ' + IIF(m.lcAntet == m.lcAsteptat, 'OK', 'FAIL')
|
||||
|
||||
DO PrLogLocal WITH '=== nPlafon (implicit) ==='
|
||||
DO PrLogLocal WITH ' nPlafon=' + TRANSFORM(loCoada.nPlafon) + ' asteptat=50 ' + IIF(loCoada.nPlafon = 50, 'OK', 'FAIL')
|
||||
|
||||
DO PrLogLocal WITH '=== MesajPlafon ==='
|
||||
LOCAL lcMesaj
|
||||
lcMesaj = loCoada.MesajPlafon(75)
|
||||
DO PrLogLocal WITH ' obtinut=[' + m.lcMesaj + ']'
|
||||
DO PrLogLocal WITH ' contine "75" ' + IIF('75' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' contine plafonul "50" ' + IIF('50' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
|
||||
DO PrLogLocal WITH '=== MesajConfirmare ==='
|
||||
lcMesaj = loCoada.MesajConfirmare(12)
|
||||
DO PrLogLocal WITH ' obtinut=[' + m.lcMesaj + ']'
|
||||
DO PrLogLocal WITH ' contine "12" ' + IIF('12' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' contine "ESC" ' + IIF('ESC' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
|
||||
DO PrLogLocal WITH '=== MesajOprire ==='
|
||||
lcMesaj = loCoada.MesajOprire(7)
|
||||
DO PrLogLocal WITH ' obtinut=[' + m.lcMesaj + ']'
|
||||
DO PrLogLocal WITH ' contine "7" ' + IIF('7' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' contine "ESC" ' + IIF('ESC' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
|
||||
DO PrLogLocal WITH '=== MesajOprire cu cauza ==='
|
||||
lcMesaj = loCoada.MesajOprire(4, 'dupa un document nereusit')
|
||||
DO PrLogLocal WITH ' obtinut=[' + m.lcMesaj + ']'
|
||||
DO PrLogLocal WITH ' contine cauza ' + IIF('dupa un document nereusit' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' nu mai spune ESC ' + IIF(!('ESC' $ m.lcMesaj), 'OK', 'FAIL')
|
||||
|
||||
DO PrLogLocal WITH '=== MesajContinuare ==='
|
||||
lcMesaj = loCoada.MesajContinuare('numar document lipsa', 4)
|
||||
DO PrLogLocal WITH ' obtinut=[' + m.lcMesaj + ']'
|
||||
DO PrLogLocal WITH ' contine motivul ' + IIF('numar document lipsa' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' contine cate raman ' + IIF('4' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
|
||||
DO PrLogLocal WITH '=== decizie plafon (sub/peste prag) ==='
|
||||
DO PrLogLocal WITH ' 49 <= nPlafon(50) ' + IIF(49 <= loCoada.nPlafon, 'OK (nu se refuza)', 'FAIL')
|
||||
DO PrLogLocal WITH ' 50 <= nPlafon(50) ' + IIF(50 <= loCoada.nPlafon, 'OK (nu se refuza, plafon inclusiv)', 'FAIL')
|
||||
DO PrLogLocal WITH ' 51 > nPlafon(50) ' + IIF(51 > loCoada.nPlafon, 'OK (se refuza)', 'FAIL')
|
||||
|
||||
DO PrLogLocal WITH '=== CreeazaRaport / AdaugaRaport ==='
|
||||
loCoada.CreeazaRaport()
|
||||
DO PrLogLocal WITH ' dupa CreeazaRaport: used=' + TRANSFORM(USED('crsCoadaRaport')) + ' reccount=' + TRANSFORM(RECCOUNT('crsCoadaRaport'))
|
||||
loCoada.AdaugaRaport(101, 'FF 001', 'FURNIZOR UNU', 'OK', '')
|
||||
loCoada.AdaugaRaport(102, 'FF 002', 'FURNIZOR DOI', 'EROARE', 'motiv test')
|
||||
DO PrLogLocal WITH ' dupa 2x AdaugaRaport: reccount=' + TRANSFORM(RECCOUNT('crsCoadaRaport')) + ;
|
||||
' asteptat=2 ' + IIF(RECCOUNT('crsCoadaRaport') = 2, 'OK', 'FAIL')
|
||||
SELECT crsCoadaRaport
|
||||
GO 1
|
||||
DO PrLogLocal WITH ' rand1: id_efactura=' + TRANSFORM(id_efactura) + ' numar_act=[' + TRANSFORM(numar_act) + ']' + ;
|
||||
' furnizor=[' + TRANSFORM(furnizor) + '] stare=[' + TRANSFORM(stare) + '] motiv=[' + TRANSFORM(motiv) + ']'
|
||||
DO PrLogLocal WITH ' rand1 ' + IIF(id_efactura = 101 AND ALLTRIM(numar_act) == 'FF 001' AND ALLTRIM(stare) == 'OK', 'OK', 'FAIL')
|
||||
GO 2
|
||||
DO PrLogLocal WITH ' rand2: id_efactura=' + TRANSFORM(id_efactura) + ' numar_act=[' + TRANSFORM(numar_act) + ']' + ;
|
||||
' furnizor=[' + TRANSFORM(furnizor) + '] stare=[' + TRANSFORM(stare) + '] motiv=[' + TRANSFORM(motiv) + ']'
|
||||
DO PrLogLocal WITH ' rand2 ' + IIF(id_efactura = 102 AND ALLTRIM(numar_act) == 'FF 002' AND ALLTRIM(stare) == 'EROARE' AND ALLTRIM(motiv) == 'motiv test', 'OK', 'FAIL')
|
||||
USE IN crsCoadaRaport
|
||||
|
||||
DO PrLogLocal WITH '=== TextDeCompletat (cont/gestiune/analitic) ==='
|
||||
DO PrVerificaText WITH loCoada, 'toate trei', 2, 1, 3, '2 cont 1 gest. 3 analitic'
|
||||
DO PrVerificaText WITH loCoada, 'doar analitic', 0, 0, 5, '5 analitic'
|
||||
DO PrVerificaText WITH loCoada, 'cont + analitic, fara gestiune', 1, 0, 2, '1 cont 2 analitic'
|
||||
DO PrVerificaText WITH loCoada, 'niciuna', 0, 0, 0, ''
|
||||
|
||||
DO PrLogLocal WITH '=== AplicaLipsuriLista + ContorBifate (nGata/nTotal) ==='
|
||||
DO TestAplicaLipsuriLista WITH loCoada
|
||||
DO TestContorGata WITH loCoada
|
||||
|
||||
DO PrLogLocal WITH '=== MesajRaport ==='
|
||||
DO TestMesajRaport WITH loCoada
|
||||
|
||||
DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
|
||||
CATCH TO loEx
|
||||
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrVerificaMotiv
|
||||
LPARAMETERS toCoada, tcEticheta, tnIdFact, tcCodFiscal, tnActivi, tnInactivi, tlLunaInchisa, tcNumarAct, tcAsteptat
|
||||
LOCAL lcMotiv
|
||||
lcMotiv = toCoada.EligibilRand(m.tnIdFact, m.tcCodFiscal, m.tnActivi, m.tnInactivi, m.tlLunaInchisa, m.tcNumarAct)
|
||||
DO PrLogLocal WITH ' ' + tcEticheta + ': obtinut=[' + m.lcMotiv + '] asteptat=[' + m.tcAsteptat + '] ' + ;
|
||||
IIF(m.lcMotiv == m.tcAsteptat, 'OK', 'FAIL')
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrVerificaText
|
||||
LPARAMETERS toCoada, tcEticheta, tnArticole, tnGestiuni, tnAnalitic, tcAsteptat
|
||||
LOCAL lcText
|
||||
lcText = toCoada.TextDeCompletat(m.tnArticole, m.tnGestiuni, m.tnAnalitic)
|
||||
DO PrLogLocal WITH ' ' + tcEticheta + ': obtinut=[' + m.lcText + '] asteptat=[' + m.tcAsteptat + '] ' + ;
|
||||
IIF(m.lcText == m.tcAsteptat, 'OK', 'FAIL')
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrVerificaRuta
|
||||
LPARAMETERS toCoada, tcEticheta, tcAliasDetalii, tnAsteptat
|
||||
LOCAL lnRuta
|
||||
lnRuta = toCoada.Ruta(m.tcAliasDetalii)
|
||||
DO PrLogLocal WITH ' ' + tcEticheta + ': obtinut=' + TRANSFORM(m.lnRuta) + ' asteptat=' + TRANSFORM(m.tnAsteptat) + ' ' + ;
|
||||
IIF(m.lnRuta = m.tnAsteptat, 'OK', 'FAIL')
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
* AplicaLipsuriLista: cont implicit / gestiune implicita / optiuni de completare stinse / rand
|
||||
* deja blocat de MarcheazaEligibilitate (motiv nu se suprascrie) - fiecare caz pe cursorul lui,
|
||||
* cu propriul set de parametri (AplicaLipsuriLista ruleaza cu un singur set de optiuni per apel)
|
||||
PROCEDURE TestAplicaLipsuriLista
|
||||
LPARAMETERS toCoada
|
||||
|
||||
IF USED('crsAF')
|
||||
USE IN crsAF
|
||||
ENDIF
|
||||
IF USED('crsAL')
|
||||
USE IN crsAL
|
||||
ENDIF
|
||||
|
||||
* A: cont implicit configurat - lnArticole devine 0 indiferent de tlCompleteazaCont; fara_analitic
|
||||
* se aplica neconditionat (nu e zerouit de tcContImplicit)
|
||||
CREATE CURSOR crsAF (id N(20), ales N(1), eligibil_lot N(1), motiv_lot V(120), de_completat V(200), gest C(1))
|
||||
INSERT INTO crsAF (id, ales, eligibil_lot, motiv_lot, de_completat, gest) VALUES (1, 1, 1, '', '', '')
|
||||
CREATE CURSOR crsAL (id_efactura N(20), fara_cont_catalog N(6), fara_cont_orice N(6), stoc_fara_gestiune N(6), stoc_total N(6), fara_analitic N(6))
|
||||
INSERT INTO crsAL (id_efactura, fara_cont_catalog, fara_cont_orice, stoc_fara_gestiune, stoc_total, fara_analitic) VALUES (1, 3, 1, 0, 2, 4)
|
||||
SELECT crsAL
|
||||
INDEX ON id_efactura TAG idefact
|
||||
toCoada.AplicaLipsuriLista('crsAF', 'crsAL', '401', 0, .F., .F.)
|
||||
SELECT crsAF
|
||||
LOCATE FOR id = 1
|
||||
DO PrLogLocal WITH ' A cont implicit: de_completat=[' + ALLTRIM(de_completat) + '] asteptat=[2 gest. 4 analitic] ' + ;
|
||||
IIF(ALLTRIM(de_completat) == '2 gest. 4 analitic' AND eligibil_lot = 0 AND ales = 0, 'OK', 'FAIL')
|
||||
USE IN crsAF
|
||||
USE IN crsAL
|
||||
|
||||
* B: gestiune implicita configurata - lnGestiuni devine 0 indiferent de tlCompleteazaGestiune;
|
||||
* fara_analitic 0 - textul ramane gol
|
||||
CREATE CURSOR crsAF (id N(20), ales N(1), eligibil_lot N(1), motiv_lot V(120), de_completat V(200), gest C(1))
|
||||
INSERT INTO crsAF (id, ales, eligibil_lot, motiv_lot, de_completat, gest) VALUES (2, 0, 1, '', '', '')
|
||||
CREATE CURSOR crsAL (id_efactura N(20), fara_cont_catalog N(6), fara_cont_orice N(6), stoc_fara_gestiune N(6), stoc_total N(6), fara_analitic N(6))
|
||||
INSERT INTO crsAL (id_efactura, fara_cont_catalog, fara_cont_orice, stoc_fara_gestiune, stoc_total, fara_analitic) VALUES (2, 1, 0, 4, 6, 0)
|
||||
SELECT crsAL
|
||||
INDEX ON id_efactura TAG idefact
|
||||
toCoada.AplicaLipsuriLista('crsAF', 'crsAL', '', 55, .T., .T.)
|
||||
SELECT crsAF
|
||||
LOCATE FOR id = 2
|
||||
DO PrLogLocal WITH ' B gestiune implicita: de_completat=[' + ALLTRIM(de_completat) + '] asteptat=[] ' + ;
|
||||
IIF(EMPTY(ALLTRIM(de_completat)) AND eligibil_lot = 1, 'OK', 'FAIL')
|
||||
USE IN crsAF
|
||||
USE IN crsAL
|
||||
|
||||
* C: optiunile de completare stinse, fara implicite - conturi=fara_cont_catalog, gestiuni=stoc_total,
|
||||
* analitic=fara_analitic, toate trei in text
|
||||
CREATE CURSOR crsAF (id N(20), ales N(1), eligibil_lot N(1), motiv_lot V(120), de_completat V(200), gest C(1))
|
||||
INSERT INTO crsAF (id, ales, eligibil_lot, motiv_lot, de_completat, gest) VALUES (3, 1, 1, '', '', '')
|
||||
CREATE CURSOR crsAL (id_efactura N(20), fara_cont_catalog N(6), fara_cont_orice N(6), stoc_fara_gestiune N(6), stoc_total N(6), fara_analitic N(6))
|
||||
INSERT INTO crsAL (id_efactura, fara_cont_catalog, fara_cont_orice, stoc_fara_gestiune, stoc_total, fara_analitic) VALUES (3, 2, 0, 1, 5, 7)
|
||||
SELECT crsAL
|
||||
INDEX ON id_efactura TAG idefact
|
||||
toCoada.AplicaLipsuriLista('crsAF', 'crsAL', '', 0, .F., .F.)
|
||||
SELECT crsAF
|
||||
LOCATE FOR id = 3
|
||||
DO PrLogLocal WITH ' C optiuni stinse: de_completat=[' + ALLTRIM(de_completat) + '] asteptat=[2 cont 5 gest. 7 analitic] ' + ;
|
||||
IIF(ALLTRIM(de_completat) == '2 cont 5 gest. 7 analitic' AND eligibil_lot = 0, 'OK', 'FAIL')
|
||||
USE IN crsAF
|
||||
USE IN crsAL
|
||||
|
||||
* D: rand deja blocat de MarcheazaEligibilitate (CIF ambiguu) - motiv nu se suprascrie, chiar cu
|
||||
* lipsuri nevide; rand blocat DIN lipsuri se redeschide cand lipsurile dispar; factura fara linii
|
||||
* (fara rand in crsAL) nu are nimic de completat
|
||||
CREATE CURSOR crsAF (id N(20), ales N(1), eligibil_lot N(1), motiv_lot V(120), de_completat V(200), gest C(1))
|
||||
INSERT INTO crsAF (id, ales, eligibil_lot, motiv_lot, de_completat, gest) VALUES (4, 0, 0, 'CIF ambiguu in ROA, alegeti partenerul manual', '', '')
|
||||
INSERT INTO crsAF (id, ales, eligibil_lot, motiv_lot, de_completat, gest) VALUES (5, 0, 0, 'de completat: 1 cont', '', '')
|
||||
INSERT INTO crsAF (id, ales, eligibil_lot, motiv_lot, de_completat, gest) VALUES (6, 1, 1, '', '', '')
|
||||
CREATE CURSOR crsAL (id_efactura N(20), fara_cont_catalog N(6), fara_cont_orice N(6), stoc_fara_gestiune N(6), stoc_total N(6), fara_analitic N(6))
|
||||
INSERT INTO crsAL (id_efactura, fara_cont_catalog, fara_cont_orice, stoc_fara_gestiune, stoc_total, fara_analitic) VALUES (4, 1, 1, 0, 0, 0)
|
||||
INSERT INTO crsAL (id_efactura, fara_cont_catalog, fara_cont_orice, stoc_fara_gestiune, stoc_total, fara_analitic) VALUES (5, 0, 0, 0, 0, 0)
|
||||
SELECT crsAL
|
||||
INDEX ON id_efactura TAG idefact
|
||||
toCoada.AplicaLipsuriLista('crsAF', 'crsAL', '', 0, .T., .T.)
|
||||
SELECT crsAF
|
||||
LOCATE FOR id = 4
|
||||
DO PrLogLocal WITH ' D CIF ambiguu, lipsuri nevide: motiv_lot=[' + ALLTRIM(motiv_lot) + '] de_completat=[' + ALLTRIM(de_completat) + '] ' + ;
|
||||
IIF(ALLTRIM(motiv_lot) == 'CIF ambiguu in ROA, alegeti partenerul manual' AND eligibil_lot = 0 AND !EMPTY(ALLTRIM(de_completat)), 'OK - motiv pastrat', 'FAIL')
|
||||
LOCATE FOR id = 5
|
||||
DO PrLogLocal WITH ' D redeschidere, lipsuri disparute: eligibil_lot=' + TRANSFORM(eligibil_lot) + ' motiv_lot=[' + ALLTRIM(motiv_lot) + '] ' + ;
|
||||
IIF(eligibil_lot = 1 AND EMPTY(ALLTRIM(motiv_lot)), 'OK', 'FAIL')
|
||||
LOCATE FOR id = 6
|
||||
DO PrLogLocal WITH ' D factura fara linii (fara rand in crsAL): de_completat=[' + ALLTRIM(de_completat) + '] ' + ;
|
||||
IIF(EMPTY(ALLTRIM(de_completat)) AND eligibil_lot = 1, 'OK', 'FAIL')
|
||||
USE IN crsAF
|
||||
USE IN crsAL
|
||||
|
||||
* E: populare gest - 'G' cand stoc_total > 0 in crsAL, '' cand stoc_total = 0, '' cand factura
|
||||
* nu e gasita in crsAL
|
||||
CREATE CURSOR crsAF (id N(20), ales N(1), eligibil_lot N(1), motiv_lot V(120), de_completat V(200), gest C(1))
|
||||
INSERT INTO crsAF (id, ales, eligibil_lot, motiv_lot, de_completat, gest) VALUES (7, 1, 1, '', '', '')
|
||||
INSERT INTO crsAF (id, ales, eligibil_lot, motiv_lot, de_completat, gest) VALUES (8, 1, 1, '', '', '')
|
||||
INSERT INTO crsAF (id, ales, eligibil_lot, motiv_lot, de_completat, gest) VALUES (9, 1, 1, '', '', '')
|
||||
CREATE CURSOR crsAL (id_efactura N(20), fara_cont_catalog N(6), fara_cont_orice N(6), stoc_fara_gestiune N(6), stoc_total N(6), fara_analitic N(6))
|
||||
INSERT INTO crsAL (id_efactura, fara_cont_catalog, fara_cont_orice, stoc_fara_gestiune, stoc_total, fara_analitic) VALUES (7, 0, 0, 0, 3, 0)
|
||||
INSERT INTO crsAL (id_efactura, fara_cont_catalog, fara_cont_orice, stoc_fara_gestiune, stoc_total, fara_analitic) VALUES (8, 0, 0, 0, 0, 0)
|
||||
SELECT crsAL
|
||||
INDEX ON id_efactura TAG idefact
|
||||
toCoada.AplicaLipsuriLista('crsAF', 'crsAL', '', 0, .F., .F.)
|
||||
SELECT crsAF
|
||||
LOCATE FOR id = 7
|
||||
DO PrLogLocal WITH ' E gest cu stoc_total>0: gest=[' + ALLTRIM(gest) + '] ' + IIF(ALLTRIM(gest) == 'G', 'OK', 'FAIL')
|
||||
LOCATE FOR id = 8
|
||||
DO PrLogLocal WITH ' E gest cu stoc_total=0: gest=[' + ALLTRIM(gest) + '] ' + IIF(EMPTY(ALLTRIM(gest)), 'OK', 'FAIL')
|
||||
LOCATE FOR id = 9
|
||||
DO PrLogLocal WITH ' E gest factura fara rand in crsAL: gest=[' + ALLTRIM(gest) + '] ' + IIF(EMPTY(ALLTRIM(gest)), 'OK', 'FAIL')
|
||||
USE IN crsAF
|
||||
USE IN crsAL
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
* ContorBifate: nGata (eligibile si neimportate) / nTotal (tot cursorul), indiferent de bifa;
|
||||
* nGestiune numara randurile cu gest nevid
|
||||
PROCEDURE TestContorGata
|
||||
LPARAMETERS toCoada
|
||||
|
||||
IF USED('crsCG')
|
||||
USE IN crsCG
|
||||
ENDIF
|
||||
CREATE CURSOR crsCG (id N(20), ales N(1), eligibil_lot N(1), id_fact N(20), total_cu_tva N(16,2), gest C(1))
|
||||
INSERT INTO crsCG (id, ales, eligibil_lot, id_fact, total_cu_tva, gest) VALUES (1, 0, 1, 0, 100, '')
|
||||
INSERT INTO crsCG (id, ales, eligibil_lot, id_fact, total_cu_tva, gest) VALUES (2, 1, 1, 0, 200, '')
|
||||
INSERT INTO crsCG (id, ales, eligibil_lot, id_fact, total_cu_tva, gest) VALUES (3, 0, 0, 0, 300, '')
|
||||
INSERT INTO crsCG (id, ales, eligibil_lot, id_fact, total_cu_tva, gest) VALUES (4, 1, 1, 100, 400, '')
|
||||
INSERT INTO crsCG (id, ales, eligibil_lot, id_fact, total_cu_tva, gest) VALUES (5, 1, 0, 0, 500, '')
|
||||
LOCAL loContor
|
||||
loContor = toCoada.ContorBifate('crsCG')
|
||||
DO PrLogLocal WITH ' nTotal=' + TRANSFORM(loContor.nTotal) + ' asteptat=5 ' + IIF(loContor.nTotal = 5, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' nGata=' + TRANSFORM(loContor.nGata) + ' asteptat=2 ' + IIF(loContor.nGata = 2, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' nBifate=' + TRANSFORM(loContor.nBifate) + ' asteptat=3 ' + IIF(loContor.nBifate = 3, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' nGestiune (gest gol)=' + TRANSFORM(loContor.nGestiune) + ' asteptat=0 ' + IIF(loContor.nGestiune = 0, 'OK', 'FAIL')
|
||||
USE IN crsCG
|
||||
|
||||
IF USED('crsCG2')
|
||||
USE IN crsCG2
|
||||
ENDIF
|
||||
CREATE CURSOR crsCG2 (id N(20), ales N(1), eligibil_lot N(1), id_fact N(20), total_cu_tva N(16,2), gest C(1))
|
||||
INSERT INTO crsCG2 (id, ales, eligibil_lot, id_fact, total_cu_tva, gest) VALUES (1, 0, 1, 0, 100, 'G')
|
||||
INSERT INTO crsCG2 (id, ales, eligibil_lot, id_fact, total_cu_tva, gest) VALUES (2, 1, 1, 0, 200, '')
|
||||
INSERT INTO crsCG2 (id, ales, eligibil_lot, id_fact, total_cu_tva, gest) VALUES (3, 0, 0, 0, 300, 'G')
|
||||
loContor = toCoada.ContorBifate('crsCG2')
|
||||
DO PrLogLocal WITH ' nGestiune (cu coloana gest)=' + TRANSFORM(loContor.nGestiune) + ' asteptat=2 ' + IIF(loContor.nGestiune = 2, 'OK', 'FAIL')
|
||||
USE IN crsCG2
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
* MesajRaport: cursor gol, toate OK, combinatie OK/SARIT/ESEC, plafon de 15 documente listate,
|
||||
* rand OPRIT
|
||||
PROCEDURE TestMesajRaport
|
||||
LPARAMETERS toCoada
|
||||
|
||||
LOCAL lcMesaj, lnI
|
||||
|
||||
toCoada.CreeazaRaport()
|
||||
lcMesaj = toCoada.MesajRaport()
|
||||
DO PrLogLocal WITH ' gol: obtinut=[' + m.lcMesaj + ']'
|
||||
DO PrLogLocal WITH ' gol: "0 facturi" ' + IIF('0 facturi' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' gol: fara bloc probleme ' + IIF(!('Nu s-au contabilizat' $ m.lcMesaj), 'OK', 'FAIL')
|
||||
USE IN crsCoadaRaport
|
||||
|
||||
toCoada.CreeazaRaport()
|
||||
toCoada.AdaugaRaport(1, 'FF 1', 'ALFA SRL', 'OK', '')
|
||||
toCoada.AdaugaRaport(2, 'FF 2', 'BETA SRL', 'OK', '')
|
||||
toCoada.AdaugaRaport(3, 'FF 3', 'GAMA SRL', 'OK', '')
|
||||
lcMesaj = toCoada.MesajRaport()
|
||||
DO PrLogLocal WITH ' toate OK: obtinut=[' + m.lcMesaj + ']'
|
||||
DO PrLogLocal WITH ' toate OK: "3 facturi" ' + IIF('3 facturi' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' toate OK: "Contabilizate : 3" ' + IIF('Contabilizate : 3' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' toate OK: fara bloc probleme ' + IIF(!('Nu s-au contabilizat' $ m.lcMesaj), 'OK', 'FAIL')
|
||||
USE IN crsCoadaRaport
|
||||
|
||||
toCoada.CreeazaRaport()
|
||||
toCoada.AdaugaRaport(1234, 'FDI 1234', 'ALFA SRL', 'OK', '')
|
||||
toCoada.AdaugaRaport(4455, '4455', 'BETA SRL', 'SARIT', 'CIF ambiguu in ROA')
|
||||
toCoada.AdaugaRaport(77, 'FF 77', 'GAMA SRL', 'ESEC', 'eroare: contul 628.01 nu exista')
|
||||
lcMesaj = toCoada.MesajRaport()
|
||||
DO PrLogLocal WITH ' combinatie: obtinut=[' + m.lcMesaj + ']'
|
||||
DO PrLogLocal WITH ' combinatie: "3 facturi" ' + IIF('3 facturi' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' combinatie: "Contabilizate : 1" ' + IIF('Contabilizate : 1' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' combinatie: "Sarite : 1" ' + IIF('Sarite : 1' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' combinatie: "Nereusite : 1" ' + IIF('Nereusite : 1' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' combinatie: linia BETA ' + IIF('4455 / BETA SRL' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' combinatie: motiv BETA ' + IIF('CIF ambiguu in ROA' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' combinatie: motiv GAMA ' + IIF('eroare: contul 628.01 nu exista' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' combinatie: fara ALFA in bloc probleme ' + IIF(!('FDI 1234' $ m.lcMesaj), 'OK', 'FAIL')
|
||||
USE IN crsCoadaRaport
|
||||
|
||||
toCoada.CreeazaRaport()
|
||||
FOR lnI = 1 TO 20
|
||||
toCoada.AdaugaRaport(m.lnI, 'FF ' + TRANSFORM(m.lnI), 'FURNIZOR ' + TRANSFORM(m.lnI), 'SARIT', 'de completat: 1 cont')
|
||||
ENDFOR
|
||||
lcMesaj = toCoada.MesajRaport()
|
||||
DO PrLogLocal WITH ' plafon: "si inca 5" ' + IIF('si inca 5.' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' plafon: contine FF 15 ' + IIF('FF 15' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' plafon: nu contine FF 16 ' + IIF(!('FF 16 ' $ m.lcMesaj), 'OK', 'FAIL')
|
||||
USE IN crsCoadaRaport
|
||||
|
||||
toCoada.CreeazaRaport()
|
||||
toCoada.AdaugaRaport(1, 'FF 1', 'ALFA SRL', 'OK', '')
|
||||
toCoada.AdaugaRaport(2, 'FF 2', 'BETA SRL', 'SARIT', 'de completat: 1 cont')
|
||||
toCoada.AdaugaRaport(0, '', '', 'OPRIT', 'operatorul a oprit coada cu ESC - 3 facturi bifate raman neprocesate')
|
||||
lcMesaj = toCoada.MesajRaport()
|
||||
DO PrLogLocal WITH ' oprit: obtinut=[' + m.lcMesaj + ']'
|
||||
DO PrLogLocal WITH ' oprit: "2 facturi" (fara randul OPRIT) ' + IIF('2 facturi' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
DO PrLogLocal WITH ' oprit: motivul apare ' + IIF('operatorul a oprit coada cu ESC - 3 facturi bifate raman neprocesate' $ m.lcMesaj, 'OK', 'FAIL')
|
||||
USE IN crsCoadaRaport
|
||||
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
|
||||
@@ -32,7 +32,7 @@ SET NULLDISPLAY TO ''
|
||||
|
||||
PUBLIC CT_SUCCES, CT_INSUCCES, crlf, gnAn, gnLuna, gnIdUtil, glEMama, gnIdFirma, gcCondSucursala, ;
|
||||
gnIdSucursala, gcS, gcFirma, gcUserName, gcNumeProgram, gcAppName, glLunaInchisa, ;
|
||||
buton, gnButon, pnButon, gl406, gcAcces
|
||||
buton, gnButon, pnButon, gl406, gcAcces, pcAn, pcNl
|
||||
CT_SUCCES = 1
|
||||
CT_INSUCCES = -1
|
||||
crlf = CHR(13) + CHR(10)
|
||||
@@ -279,6 +279,10 @@ IF m.llSucces
|
||||
ENDIF
|
||||
USE IN (SELECT('cCalendar'))
|
||||
|
||||
* pcAn/pcNl (formula din oinit_optiuni.prg) - PUBLIC, cerute de introducere_compacta (pmenu.prg)
|
||||
pcAn = ALLTRIM(STR(gnAn))
|
||||
pcNl = PADL(ALLTRIM(STR(gnLuna)), 2, '0')
|
||||
|
||||
CREATE CURSOR dual (dummy c(10))
|
||||
INSERT INTO dual (dummy) VALUES ("")
|
||||
|
||||
|
||||
54
utile/Teste/test_inkey_poll.prg
Normal file
54
utile/Teste/test_inkey_poll.prg
Normal file
@@ -0,0 +1,54 @@
|
||||
* test_inkey_poll.prg
|
||||
* Dovada fix INKEY(0,'H') -> INKEY(0.01,'H') in anaf_efactura.vc2::do_coada:
|
||||
* 1) fara tasta apasata, INKEY(0.01,'H') revine imediat (nu asteapta nelimitat)
|
||||
* 2) cu '{ESC}' in buffer, INKEY(0.01,'H') intoarce 27
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\test_inkey_poll.prg"
|
||||
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\test_inkey_poll_log.txt
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcUILog
|
||||
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\test_inkey_poll_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 PrLogLocal WITH '=== INKEY(0.01,H) fara tasta - trebuie sa revina imediat ==='
|
||||
CLEAR TYPEAHEAD
|
||||
LOCAL lnStart, lnStop, lnDurata, lnI, lnCod
|
||||
lnStart = SECONDS()
|
||||
FOR lnI = 1 TO 10
|
||||
lnCod = INKEY(0.01, 'H')
|
||||
ENDFOR
|
||||
lnStop = SECONDS()
|
||||
lnDurata = lnStop - lnStart
|
||||
DO PrLogLocal WITH ' 10 apeluri INKEY(0.01,H) fara tasta, durata=' + TRANSFORM(m.lnDurata) + ' sec, ultimul cod=' + TRANSFORM(m.lnCod)
|
||||
DO PrLogLocal WITH ' ' + IIF(m.lnDurata < 1, 'OK - sub 1 sec, deci polling, nu asteptare nelimitata', 'FAIL - a durat prea mult')
|
||||
|
||||
DO PrLogLocal WITH '=== INKEY(0.01,H) cu {ESC} in buffer - trebuie sa intoarca 27 ==='
|
||||
CLEAR TYPEAHEAD
|
||||
KEYBOARD '{ESC}'
|
||||
lnCod = INKEY(0.01, 'H')
|
||||
DO PrLogLocal WITH ' cod obtinut=' + TRANSFORM(m.lnCod) + ' asteptat=27 ' + IIF(m.lnCod = 27, 'OK', 'FAIL')
|
||||
|
||||
DO PrLogLocal WITH '=== TERMINAT ==='
|
||||
CATCH TO loEx
|
||||
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
PROCEDURE PrLogLocal
|
||||
LPARAMETERS tcMesaj
|
||||
STRTOFILE(m.tcMesaj + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE PrErrLocal
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO PrLogLocal WITH 'EROARE ' + TRANSFORM(m.tnErr) + ': ' + m.tcMsg + ' in ' + m.tcProg + ' linia ' + TRANSFORM(m.tnLine)
|
||||
ENDPROC
|
||||
298
utile/Teste/test_lipsuri_lista_echivalenta.prg
Normal file
298
utile/Teste/test_lipsuri_lista_echivalenta.prg
Normal file
@@ -0,0 +1,298 @@
|
||||
* test_lipsuri_lista_echivalenta.prg
|
||||
* Echivalenta runda 22: pentru fiecare factura ZZTEST din luna, de_completat calculat prin
|
||||
* LipsuriLista+AplicaLipsuriLista (o interogare pe toata lista) trebuie sa fie IDENTIC cu ce da
|
||||
* azi calea per-document (PotrivesteFactura + completare implicite + ActualizeazaLipsuriRandCurent,
|
||||
* rulate pe formularul real frm_import_efactura, fara Show() - metode de date, nu UI).
|
||||
* Ruleaza pe fixtura ZZTEST semanata de seed_test_import_efactura.prg (MARIUSM_AUTO@ROA_CENTRAL, 09/2026).
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\test_lipsuri_lista_echivalenta.prg"
|
||||
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\test_lipsuri_lista_echivalenta_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\test_lipsuri_lista_echivalenta_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 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 BuildCursoare
|
||||
DO PrLogLocal WITH 'crsFacturi reccount=' + TRANSFORM(RECCOUNT('crsFacturi'))
|
||||
IF RECCOUNT('crsFacturi') = 0
|
||||
DO PrLogLocal WITH 'FAIL: nicio factura ZZTEST gasita - a rulat seed_test_import_efactura.prg?'
|
||||
DO PrFinal
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO BuildCursoareHelper
|
||||
DO PrLogLocal WITH 'cursoare helper construite'
|
||||
|
||||
LOCAL loForm
|
||||
SELECT crsFacturi
|
||||
loForm = CREATEOBJECT('frm_import_efactura', .T.)
|
||||
DO PrLogLocal WITH 'frm_import_efactura instantiat'
|
||||
|
||||
*=====================================================================
|
||||
* calea per-document, o factura pe rand - captureaza de_completat in tabloul crsPerDoc
|
||||
*=====================================================================
|
||||
IF USED('crsPerDoc')
|
||||
USE IN crsPerDoc
|
||||
ENDIF
|
||||
CREATE CURSOR crsPerDoc (id_efactura N(20), de_completat V(200))
|
||||
SELECT crsFacturi
|
||||
SCAN
|
||||
LOCAL lnRecnoF, lnIdEF
|
||||
lnIdEF = id
|
||||
lnRecnoF = RECNO()
|
||||
GO lnRecnoF IN crsFacturi
|
||||
loForm.CompleteazaFactura()
|
||||
GO lnRecnoF IN crsFacturi
|
||||
loForm.actualizeaza_grid2()
|
||||
GO lnRecnoF IN crsFacturi
|
||||
loForm.CompleteazaDetaliiFactura()
|
||||
GO lnRecnoF IN crsFacturi
|
||||
loForm.ActualizeazaLipsuriRandCurent()
|
||||
GO lnRecnoF IN crsFacturi
|
||||
INSERT INTO crsPerDoc (id_efactura, de_completat) VALUES (lnIdEF, ALLTRIM(NVL(crsFacturi.de_completat,'')))
|
||||
SELECT crsFacturi
|
||||
ENDSCAN
|
||||
DO PrLogLocal WITH 'calea per-document terminata, crsPerDoc reccount=' + TRANSFORM(RECCOUNT('crsPerDoc'))
|
||||
|
||||
*=====================================================================
|
||||
* calea de lot: o interogare pe toata lista + AplicaLipsuriLista, cu aceleasi optiuni citite
|
||||
* de completeazadetaliifactura (globale actualizate de actualizeaza_optiuni() la pornirea mediului)
|
||||
*=====================================================================
|
||||
LOCAL loRec, loCoada, llSuccesLista
|
||||
loRec = CREATEOBJECT('RecunoastereArticolEF')
|
||||
loCoada = CREATEOBJECT('CoadaContabilizareEF')
|
||||
llSuccesLista = loRec.LipsuriLista('crsFacturi', .T.)
|
||||
DO PrLogLocal WITH 'LipsuriLista: retur=' + TRANSFORM(llSuccesLista) + ' crsLipsuriLista reccount=' + TRANSFORM(IIF(USED('crsLipsuriLista'), RECCOUNT('crsLipsuriLista'), -1))
|
||||
IF !llSuccesLista
|
||||
DO PrLogLocal WITH 'FAIL: LipsuriLista a esuat'
|
||||
DO PrFinal
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SELECT crsFacturi
|
||||
REPLACE ALL de_completat WITH '', eligibil_lot WITH 1, motiv_lot WITH ''
|
||||
loCoada.AplicaLipsuriLista('crsFacturi', 'crsLipsuriLista', m.gcEFACTURA_CONT_ART_P, m.gnEFACTURA_ID_GESTIUNE_P, ;
|
||||
(m.gnEFACTURA_CONT_ART_PF = 1), (m.gnEFACTURA_GEST_ART_PF = 1))
|
||||
DO PrLogLocal WITH 'AplicaLipsuriLista terminat (tcContImplicit=[' + ALLTRIM(NVL(m.gcEFACTURA_CONT_ART_P,'')) + ;
|
||||
'] tnGestiuneImplicita=' + TRANSFORM(NVL(m.gnEFACTURA_ID_GESTIUNE_P,0)) + ;
|
||||
' tlCompleteazaCont=' + TRANSFORM(m.gnEFACTURA_CONT_ART_PF = 1) + ' tlCompleteazaGestiune=' + TRANSFORM(m.gnEFACTURA_GEST_ART_PF = 1) + ')'
|
||||
|
||||
*=====================================================================
|
||||
* comparatie, factura cu factura
|
||||
*=====================================================================
|
||||
LOCAL lnDif, lnComparate, lcPerDoc, lcLot
|
||||
lnDif = 0
|
||||
lnComparate = 0
|
||||
SELECT crsPerDoc
|
||||
SCAN
|
||||
LOCAL lnIdC
|
||||
lnIdC = id_efactura
|
||||
lcPerDoc = ALLTRIM(de_completat)
|
||||
lcLot = ''
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = lnIdC
|
||||
IF FOUND()
|
||||
lcLot = ALLTRIM(NVL(de_completat,''))
|
||||
ENDIF
|
||||
lnComparate = lnComparate + 1
|
||||
IF lcPerDoc == lcLot
|
||||
DO PrTest WITH 'id_efactura=' + TRANSFORM(lnIdC), .T., 'per-doc=[' + lcPerDoc + '] lot=[' + lcLot + ']'
|
||||
ELSE
|
||||
DO PrTest WITH 'id_efactura=' + TRANSFORM(lnIdC), .F., 'per-doc=[' + lcPerDoc + '] lot=[' + lcLot + '] DIFERENTA'
|
||||
ENDIF
|
||||
SELECT crsPerDoc
|
||||
ENDSCAN
|
||||
DO PrLogLocal WITH 'comparate=' + TRANSFORM(lnComparate)
|
||||
DO PrLogLocal WITH ''
|
||||
DO PrLogLocal WITH '=== REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail) + ' ==='
|
||||
|
||||
IF USED('crsLipsuriLista')
|
||||
USE IN (SELECT('crsLipsuriLista'))
|
||||
ENDIF
|
||||
IF USED('crsPerDoc')
|
||||
USE IN (SELECT('crsPerDoc'))
|
||||
ENDIF
|
||||
|
||||
DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
|
||||
CATCH TO loEx
|
||||
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
|
||||
ENDTRY
|
||||
|
||||
DO PrFinal
|
||||
QUIT
|
||||
|
||||
**********************************************************
|
||||
* crsFacturi/crsDetaliiFacturi pentru toate facturile ZZTEST 'curente' (xnumar_act terminat in -C,
|
||||
* cod_fiscal_emitent 9999700%) - copie de schema din test_c1_echivalenta_lot.prg::BuildCursoare
|
||||
PROCEDURE BuildCursoare
|
||||
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), 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 = [cod_fiscal_emitent LIKE '9999700%' AND numar_act LIKE '%-C']
|
||||
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 (select id from anaf_efactura where cod_fiscal_emitent LIKE '9999700%' and xnumar_act LIKE '%-C')]
|
||||
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
|
||||
|
||||
**********************************************************
|
||||
* 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)
|
||||
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (15, 'Marfuri','371', 1, 15)
|
||||
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
|
||||
|
||||
**********************************************************
|
||||
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
|
||||
|
||||
**********************************************************
|
||||
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
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrFinal
|
||||
DO PrLogLocal WITH 'DONE ' + TTOC(DATETIME())
|
||||
ENDPROC
|
||||
109
utile/Teste/test_oselecteaza2object.prg
Normal file
109
utile/Teste/test_oselecteaza2object.prg
Normal file
@@ -0,0 +1,109 @@
|
||||
* test_oselecteaza2object.prg
|
||||
* Stabileste experimental comportamentul goExecutor.oSelecteaza2Object
|
||||
* (oproceduri_comune.prg:597) pe 0/1/2+ randuri, pentru cascada din
|
||||
* docs\plan_efactura_23_24.md (banda A).
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\test_oselecteaza2object.prg"
|
||||
* Verdict in D:\ROA\ROACONT\COMUN\utile\Teste\test_oselecteaza2object_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
|
||||
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\test_oselecteaza2object_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)
|
||||
|
||||
*-- test izolat, fara Oracle: comportamentul SCATTER NAME ... MEMO pe cursor cu 0 randuri
|
||||
DO PrLogLocal WITH '=== SCATTER NAME direct pe cursor VFP cu 0 randuri (fara Oracle) ==='
|
||||
LOCAL loScatterGol
|
||||
CREATE CURSOR crsScatterGol (id N(10), denumire C(20))
|
||||
SELECT crsScatterGol
|
||||
DO PrLogLocal WITH ' RECCOUNT=' + TRANSFORM(RECCOUNT('crsScatterGol')) + ' EOF=' + TRANSFORM(EOF()) + ' BOF=' + TRANSFORM(BOF())
|
||||
SCATTER NAME loScatterGol MEMO
|
||||
DO PrLogLocal WITH ' dupa SCATTER: TYPE(loScatterGol)=' + TYPE('loScatterGol')
|
||||
IF TYPE('loScatterGol') = 'O'
|
||||
DO PrLogLocal WITH ' loScatterGol.id=[' + TRANSFORM(loScatterGol.id) + '] TYPE=' + TYPE('loScatterGol.id') + ' ISNULL=' + TRANSFORM(ISNULL(loScatterGol.id))
|
||||
DO PrLogLocal WITH ' loScatterGol.denumire=[' + TRANSFORM(loScatterGol.denumire) + '] TYPE=' + TYPE('loScatterGol.denumire') + ' ISNULL=' + TRANSFORM(ISNULL(loScatterGol.denumire))
|
||||
ENDIF
|
||||
USE IN (SELECT('crsScatterGol'))
|
||||
|
||||
*-- cele trei cazuri reale, prin goExecutor.oSelecteaza2Object, pe Oracle (dual)
|
||||
DO PrCaz WITH 'CAZ 1: 0 randuri', "select 1 id, 'X' denumire from dual where 1=0"
|
||||
DO PrCaz WITH 'CAZ 2: 1 rand', "select 1 id, 'X' denumire from dual"
|
||||
DO PrCaz WITH 'CAZ 3: 2 randuri', "select 1 id, 'X' denumire from dual union all select 2 id, 'Y' denumire from dual"
|
||||
|
||||
DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
|
||||
CATCH TO loEx
|
||||
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ')'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrCaz
|
||||
LPARAMETERS tcEticheta, tcSql
|
||||
|
||||
LOCAL loObj, llSucces, lcValId, lcValDen
|
||||
|
||||
DO PrLogLocal WITH '=== ' + tcEticheta + ' ==='
|
||||
DO PrLogLocal WITH ' sql: ' + tcSql
|
||||
|
||||
llSucces = goExecutor.oSelecteaza2Object(tcSql, @loObj)
|
||||
|
||||
DO PrLogLocal WITH ' llSucces (retur functie) = ' + TRANSFORM(llSucces)
|
||||
DO PrLogLocal WITH ' TYPE(loObj) = ' + TYPE('loObj')
|
||||
DO PrLogLocal WITH ' goExecutor.nSucces = ' + TRANSFORM(goExecutor.nSucces)
|
||||
DO PrLogLocal WITH ' goExecutor.cEroare = [' + TRANSFORM(goExecutor.cEroare) + ']'
|
||||
|
||||
IF TYPE('loObj') = 'O'
|
||||
DO PrLogLocal WITH ' PEMSTATUS(loObj,"id",5) = ' + TRANSFORM(PEMSTATUS(loObj, 'id', 5))
|
||||
DO PrLogLocal WITH ' TYPE(loObj.id) = ' + TYPE('loObj.id')
|
||||
IF TYPE('loObj.id') = 'N' OR TYPE('loObj.id') = 'C'
|
||||
lcValId = IIF(ISNULL(loObj.id), '<NULL>', TRANSFORM(loObj.id))
|
||||
ELSE
|
||||
lcValId = '<neevaluabil, TYPE=' + TYPE('loObj.id') + '>'
|
||||
ENDIF
|
||||
DO PrLogLocal WITH ' ISNULL(loObj.id) = ' + TRANSFORM(ISNULL(loObj.id)) + ' valoare = [' + lcValId + ']'
|
||||
|
||||
DO PrLogLocal WITH ' PEMSTATUS(loObj,"denumire",5) = ' + TRANSFORM(PEMSTATUS(loObj, 'denumire', 5))
|
||||
DO PrLogLocal WITH ' TYPE(loObj.denumire) = ' + TYPE('loObj.denumire')
|
||||
IF TYPE('loObj.denumire') = 'C'
|
||||
lcValDen = IIF(ISNULL(loObj.denumire), '<NULL>', '[' + TRANSFORM(loObj.denumire) + ']')
|
||||
ELSE
|
||||
lcValDen = '<neevaluabil, TYPE=' + TYPE('loObj.denumire') + '>'
|
||||
ENDIF
|
||||
DO PrLogLocal WITH ' ISNULL(loObj.denumire) = ' + TRANSFORM(ISNULL(loObj.denumire)) + ' valoare = ' + lcValDen
|
||||
ENDIF
|
||||
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
|
||||
508
utile/Teste/test_recunoastere_articol.prg
Normal file
508
utile/Teste/test_recunoastere_articol.prg
Normal file
@@ -0,0 +1,508 @@
|
||||
* test_recunoastere_articol.prg
|
||||
* Teste RecunoastereArticolEF (COMUN\programe\recunoastere_articol_ef.prg) si invelisul
|
||||
* GetArticolEFByPartDenumire (oproceduri_comune.prg), banda A din docs\plan_efactura_23_24.md.
|
||||
* Foloseste date construite direct prin INSERT, cod fiscal TESTCASCADA01/02/03 (cascada text) si
|
||||
* TESTISTORIC01-04 (treapta cont sintetic din istoric), pe schema MARIUSM_AUTO@ROA_CENTRAL.
|
||||
* Fixtura TESTISTORIC se creeaza si se sterge in aceasta rulare. Optiunile
|
||||
* EFACTURA_ART_NORMALIZAT/PREFIX/ISTORIC sunt manipulate direct in tabela OPTIUNI si readuse la
|
||||
* final la valoarea de dinainte de test.
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\test_recunoastere_articol.prg"
|
||||
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\test_recunoastere_articol_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
|
||||
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\test_recunoastere_articol_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
|
||||
SET PROCEDURE TO recunoastere_articol_ef ADDITIVE
|
||||
SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\optiuni_test.prg') ADDITIVE
|
||||
SalveazaOptiuni('EFACTURA_ART_NORMALIZAT,EFACTURA_ART_PREFIX,EFACTURA_ART_ISTORIC')
|
||||
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle)
|
||||
|
||||
* fara optiunile EFACTURA_ART_* setate, cascada ruleaza pe implicit 1/12
|
||||
LOCAL loRec
|
||||
loRec = CREATEOBJECT('RecunoastereArticolEF')
|
||||
DO PrLogLocal WITH '=== Optiuni implicite (fara migrare) ==='
|
||||
DO PrLogLocal WITH ' nNormalizat=' + TRANSFORM(loRec.nNormalizat) + ' (asteptat 1)'
|
||||
DO PrLogLocal WITH ' nPrefix=' + TRANSFORM(loRec.nPrefix) + ' (asteptat 12)'
|
||||
|
||||
DO PrLogLocal WITH '=== CheieSql ==='
|
||||
DO PrLogLocal WITH ' ' + loRec.CheieSql('d.articol')
|
||||
|
||||
*-- pas 1: text exact + id_articol not null (comportamentul de azi, calea principala)
|
||||
DO PrCazArticol WITH loRec, 'A0 - pas1 (text exact, id_articol)', 'TESTCASCADA01', .T., 'ABONAMENT INTERNET 08/2026', 999999
|
||||
|
||||
*-- excluderea facturii curente pe pas1 (azi exista doar pe ramura de rezerva) - trebuie sa NU gaseasca propria factura
|
||||
DO PrCazArticol WITH loRec, 'A1 - excludere factura curenta pe pas1 (asteptat: nimic gasit)', 'TESTCASCADA01', .T., 'ABONAMENT INTERNET 08/2026', 4103
|
||||
|
||||
*-- Scenariul A: pas 3, cheie normalizata + id_articol not null
|
||||
DO PrCazArticol WITH loRec, 'A - pas3 (normalizat, id_articol)', 'TESTCASCADA01', .T., 'ABONAMENT INTERNET 09/2026', 4104
|
||||
|
||||
*-- Scenariul B: pas 2, text exact fara id_articol
|
||||
DO PrCazArticol WITH loRec, 'B - pas2 (text exact, fara id_articol)', 'TESTCASCADA02', .T., 'SERVICIU CONSULTANTA', 4106
|
||||
|
||||
*-- Scenariul C: garda de cheie scurta - articol numeric, nu trebuie sa gaseasca nimic
|
||||
DO PrCazArticol WITH loRec, 'C - garda cheie scurta (articol numeric)', 'TESTCASCADA03', .T., '8000070025552', 4108
|
||||
|
||||
*-- PotrivesteFactura: aceleasi 3 scenarii, o singura interogare per factura
|
||||
DO PrCazFactura WITH loRec, 'A (factura)', 4104, 'TESTCASCADA01', .T.
|
||||
DO PrCazFactura WITH loRec, 'B (factura)', 4106, 'TESTCASCADA02', .T.
|
||||
DO PrCazFactura WITH loRec, 'C (factura)', 4108, 'TESTCASCADA03', .T.
|
||||
|
||||
*-- Wrapper GetArticolEFByPartDenumire: apel VECHI (5 parametri, fara tcSursa) - nu trebuie sa dea eroare
|
||||
DO PrLogLocal WITH '=== Wrapper GetArticolEFByPartDenumire, apel vechi (5 parametri) ==='
|
||||
LOCAL loArtWrap
|
||||
loArtWrap = GetArticolEFByPartDenumire('TESTCASCADA01', .T., 'ABONAMENT INTERNET 09/2026', .F., 4104)
|
||||
DO PrLogLocal WITH ' TYPE(loArtWrap)=' + TYPE('loArtWrap') + ' id_articol=' + TRANSFORM(NVL(loArtWrap.id_articol,-1)) + ' cont=[' + TRANSFORM(NVL(loArtWrap.cont,'?')) + ']'
|
||||
|
||||
*-- Wrapper: apel NOU cu @tcSursa
|
||||
DO PrLogLocal WITH '=== Wrapper GetArticolEFByPartDenumire, apel nou cu tcSursa ==='
|
||||
LOCAL lcSursaWrap
|
||||
loArtWrap = GetArticolEFByPartDenumire('TESTCASCADA02', .T., 'SERVICIU CONSULTANTA', .F., 4106, @lcSursaWrap)
|
||||
DO PrLogLocal WITH ' cont=[' + TRANSFORM(NVL(loArtWrap.cont,'?')) + '] tcSursa=[' + TRANSFORM(m.lcSursaWrap) + ']'
|
||||
|
||||
*-- Wrapper: cazul "nimic gasit" - trebuie sa intoarca obiect cu valori implicite, nu NULL (compat apelant vechi)
|
||||
DO PrLogLocal WITH '=== Wrapper GetArticolEFByPartDenumire, nimic gasit (compat obiect gol) ==='
|
||||
loArtWrap = GetArticolEFByPartDenumire('TESTCASCADA03', .T., '8000070025552', .F., 4108, @lcSursaWrap)
|
||||
DO PrLogLocal WITH ' TYPE(loArtWrap)=' + TYPE('loArtWrap') + ' ISNULL=' + TRANSFORM(ISNULL(loArtWrap)) + ' id_articol=' + TRANSFORM(NVL(loArtWrap.id_articol,-1)) + ' tcSursa=[' + TRANSFORM(m.lcSursaWrap) + ']'
|
||||
LOCAL lnIdWrap
|
||||
lnIdWrap = GetArticolEFByPartDenumire('TESTCASCADA03', .T., '8000070025552', .T., 4108)
|
||||
DO PrLogLocal WITH ' tlReturnId=.T. -> ' + TRANSFORM(m.lnIdWrap) + ' (asteptat 0)'
|
||||
|
||||
*-- Comutatorul EFACTURA_ART_NORMALIZAT=0: trebuie sa revina exact la comportamentul de azi (doar pas1+2)
|
||||
DO PrLogLocal WITH '=== Comutator EFACTURA_ART_NORMALIZAT=0 ==='
|
||||
DO SetOptiune WITH 'EFACTURA_ART_NORMALIZAT', '0'
|
||||
loRec = CREATEOBJECT('RecunoastereArticolEF')
|
||||
DO PrLogLocal WITH ' nNormalizat=' + TRANSFORM(loRec.nNormalizat) + ' (asteptat 0)'
|
||||
DO PrCazArticol WITH loRec, 'A cu comutator OPRIT (asteptat: nimic gasit)', 'TESTCASCADA01', .T., 'ABONAMENT INTERNET 09/2026', 4104
|
||||
DO DeleteOptiune WITH 'EFACTURA_ART_NORMALIZAT'
|
||||
loRec = CREATEOBJECT('RecunoastereArticolEF')
|
||||
DO PrLogLocal WITH ' dupa stergere optiune, nNormalizat=' + TRANSFORM(loRec.nNormalizat) + ' (asteptat 1, revenire la implicit)'
|
||||
DO PrCazArticol WITH loRec, 'A dupa revenire (asteptat din nou APROX)', 'TESTCASCADA01', .T., 'ABONAMENT INTERNET 09/2026', 4104
|
||||
|
||||
*-- Prefixul e fix la 12 (indexul functional e creat pe aceasta lungime) - optiunea nu se mai citeste
|
||||
DO PrLogLocal WITH '=== EFACTURA_ART_PREFIX - fix la 12, optiunea nu mai are efect ==='
|
||||
DO SetOptiune WITH 'EFACTURA_ART_PREFIX', '20'
|
||||
loRec = CREATEOBJECT('RecunoastereArticolEF')
|
||||
DO PrLogLocal WITH ' optiune "20" -> nPrefix=' + TRANSFORM(loRec.nPrefix) + ' (asteptat 12, fix)'
|
||||
DO DeleteOptiune WITH 'EFACTURA_ART_PREFIX'
|
||||
|
||||
*-- Regresie: variabilele de lucru din PotrivesteArticol/PotrivesteFactura nu trebuie sa scurga in domeniul apelantului
|
||||
DO PrLogLocal WITH '=== Regresie: Private pe pcDenumire/pcCodFiscal/pnIdEfactura ==='
|
||||
DO TestScurgereVariabile WITH loRec
|
||||
|
||||
*-- Treapta 5 (ISTORIC): fixtura proprie TESTISTORIC01-04, stearsa la final
|
||||
DO PrLogLocal WITH '=== Treapta 5 (ISTORIC): fixtura ==='
|
||||
DO StergeFixturaIstoric
|
||||
LOCAL lnFI1, lnCI1, lnFI2, lnCI2, lnFI3, lnCI3, lnFI4, lnCI4
|
||||
|
||||
*-- (a) ultimele 5 linii contate ale furnizorului, acelasi cont sintetic -> propunere ISTORIC, acont gol
|
||||
lnFI1 = InsFactIstoric('TESTISTORIC01')
|
||||
InsLinieIstoric(lnFI1, 'PRODUS ISTORIC UNU', '628')
|
||||
InsLinieIstoric(lnFI1, 'PRODUS ISTORIC DOI', '628')
|
||||
InsLinieIstoric(lnFI1, 'PRODUS ISTORIC TREI', '628')
|
||||
InsLinieIstoric(lnFI1, 'PRODUS ISTORIC PATRU', '628')
|
||||
InsLinieIstoric(lnFI1, 'PRODUS ISTORIC CINCI', '628')
|
||||
lnCI1 = InsFactIstoric('TESTISTORIC01')
|
||||
InsLinieIstoric(lnCI1, 'DIVERS NEGASIT ALFA', '')
|
||||
DO PrCazArticol WITH loRec, 'ISTORIC a - 5 linii cu acelasi cont sintetic', 'TESTISTORIC01', .T., 'DIVERS NEGASIT ALFA', lnCI1
|
||||
|
||||
*-- (b) ultimele 5 linii ale furnizorului, conturi diferite -> nicio propunere
|
||||
lnFI2 = InsFactIstoric('TESTISTORIC02')
|
||||
InsLinieIstoric(lnFI2, 'MATERIAL DOI UNU', '628')
|
||||
InsLinieIstoric(lnFI2, 'MATERIAL DOI DOI', '628')
|
||||
InsLinieIstoric(lnFI2, 'MATERIAL DOI TREI', '301')
|
||||
InsLinieIstoric(lnFI2, 'MATERIAL DOI PATRU', '628')
|
||||
InsLinieIstoric(lnFI2, 'MATERIAL DOI CINCI', '628')
|
||||
lnCI2 = InsFactIstoric('TESTISTORIC02')
|
||||
InsLinieIstoric(lnCI2, 'DIVERS NEGASIT BETA', '')
|
||||
DO PrCazArticol WITH loRec, 'ISTORIC b - 5 linii pe conturi diferite (asteptat: nimic)', 'TESTISTORIC02', .T., 'DIVERS NEGASIT BETA', lnCI2
|
||||
|
||||
*-- (c) furnizor cu mai putin de 5 linii contate -> nicio propunere
|
||||
lnFI3 = InsFactIstoric('TESTISTORIC03')
|
||||
InsLinieIstoric(lnFI3, 'MARFA TREI UNU', '628')
|
||||
InsLinieIstoric(lnFI3, 'MARFA TREI DOI', '628')
|
||||
InsLinieIstoric(lnFI3, 'MARFA TREI TREI', '628')
|
||||
lnCI3 = InsFactIstoric('TESTISTORIC03')
|
||||
InsLinieIstoric(lnCI3, 'DIVERS NEGASIT GAMA', '')
|
||||
DO PrCazArticol WITH loRec, 'ISTORIC c - doar 3 linii contate (asteptat: nimic)', 'TESTISTORIC03', .T., 'DIVERS NEGASIT GAMA', lnCI3
|
||||
|
||||
*-- (e) pasul 2 gaseste deja pe text exact -> treapta 5 nu se declanseaza, desi istoricul ar propune alt cont
|
||||
lnFI4 = InsFactIstoric('TESTISTORIC04')
|
||||
InsLinieIstoric(lnFI4, 'ARTICOL EXACT PATRU', '607')
|
||||
InsLinieIstoric(lnFI4, 'ALT PRODUS UNU', '999')
|
||||
InsLinieIstoric(lnFI4, 'ALT PRODUS DOI', '999')
|
||||
InsLinieIstoric(lnFI4, 'ALT PRODUS TREI', '999')
|
||||
InsLinieIstoric(lnFI4, 'ALT PRODUS PATRU', '999')
|
||||
InsLinieIstoric(lnFI4, 'ALT PRODUS CINCI', '999')
|
||||
lnCI4 = InsFactIstoric('TESTISTORIC04')
|
||||
InsLinieIstoric(lnCI4, 'ARTICOL EXACT PATRU', '')
|
||||
DO PrCazArticol WITH loRec, 'ISTORIC e - pas2 gaseste deja (asteptat: EXACT 607, nu ISTORIC 999)', 'TESTISTORIC04', .T., 'ARTICOL EXACT PATRU', lnCI4
|
||||
|
||||
*-- (d) comutator EFACTURA_ART_ISTORIC=0 - treapta 5 nu se executa, chiar daca poarta e satisfacuta (cazul a)
|
||||
DO PrLogLocal WITH '=== Comutator EFACTURA_ART_ISTORIC=0 ==='
|
||||
DO SetOptiune WITH 'EFACTURA_ART_ISTORIC', '0'
|
||||
loRec = CREATEOBJECT('RecunoastereArticolEF')
|
||||
DO PrLogLocal WITH ' nIstoric=' + TRANSFORM(loRec.nIstoric) + ' (asteptat 0)'
|
||||
DO PrCazArticol WITH loRec, 'ISTORIC d - comutator OPRIT pe cazul a (asteptat: nimic)', 'TESTISTORIC01', .T., 'DIVERS NEGASIT ALFA', lnCI1
|
||||
DO DeleteOptiune WITH 'EFACTURA_ART_ISTORIC'
|
||||
loRec = CREATEOBJECT('RecunoastereArticolEF')
|
||||
DO PrLogLocal WITH ' dupa stergere optiune, nIstoric=' + TRANSFORM(loRec.nIstoric) + ' (asteptat 1, revenire la implicit)'
|
||||
DO PrCazArticol WITH loRec, 'ISTORIC a dupa revenire (asteptat din nou ISTORIC)', 'TESTISTORIC01', .T., 'DIVERS NEGASIT ALFA', lnCI1
|
||||
|
||||
*-- (g) cele doua comutatoare sunt independente: cu normalizarea OPRITA, treapta 5 tot merge,
|
||||
*-- si cele doua metode trebuie sa dea acelasi rezultat
|
||||
DO PrLogLocal WITH '=== Independenta comutatoarelor: NORMALIZAT=0, ISTORIC=1 ==='
|
||||
DO SetOptiune WITH 'EFACTURA_ART_NORMALIZAT', '0'
|
||||
loRec = CREATEOBJECT('RecunoastereArticolEF')
|
||||
DO PrLogLocal WITH ' nNormalizat=' + TRANSFORM(loRec.nNormalizat) + ' nIstoric=' + TRANSFORM(loRec.nIstoric) + ' (asteptat 0 / 1)'
|
||||
DO PrCazArticol WITH loRec, 'ISTORIC g - normalizare OPRITA (asteptat tot ISTORIC)', 'TESTISTORIC01', .T., 'DIVERS NEGASIT ALFA', lnCI1
|
||||
DO PrCazFactura WITH loRec, 'ISTORIC g (factura, normalizare OPRITA)', lnCI1, 'TESTISTORIC01', .T.
|
||||
DO DeleteOptiune WITH 'EFACTURA_ART_NORMALIZAT'
|
||||
loRec = CREATEOBJECT('RecunoastereArticolEF')
|
||||
|
||||
*-- (f) PotrivesteFactura da acelasi rezultat ca PotrivesteArticol pe cazul a
|
||||
DO PrCazFactura WITH loRec, 'ISTORIC a (factura, paritate cu PotrivesteArticol)', lnCI1, 'TESTISTORIC01', .T.
|
||||
|
||||
*-- Treapta CATALOG: fixtura proprie, distincta de TESTCASCADA/TESTISTORIC
|
||||
DO PrLogLocal WITH '=== Treapta CATALOG: fixtura ==='
|
||||
DO StergeFixturaCascadaNoua
|
||||
LOCAL lnArtCatalog, lnFactCatHist, lnFactCatCur
|
||||
lnArtCatalog = InsArticolCatalog('TESTCATALOG ARTICOL UNU', '6588')
|
||||
lnFactCatHist = InsFactIstoric('9999881001')
|
||||
InsLinieIstoric(lnFactCatHist, 'TESTCATALOG ARTICOL UNU', '628')
|
||||
lnFactCatCur = InsFactIstoric('9999881001')
|
||||
InsLinieIstoric(lnFactCatCur, 'TESTCATALOG ARTICOL UNU', '')
|
||||
DO PrCazFactura WITH loRec, 'CATALOG - prioritate peste EXACT (asteptat CATALOG, cont=6588, nu EXACT/628)', lnFactCatCur, '9999881001', .T.
|
||||
|
||||
*-- Treapta ARTICOL (S2) si FURNIZOR (S1): S2 (articol contat oriunde in firma) are prioritate
|
||||
*-- peste S1 (contul dominant al furnizorului din ACT), demonstrat pe aceeasi linie
|
||||
DO PrLogLocal WITH '=== Treapta ARTICOL (S2) si FURNIZOR (S1): fixtura ==='
|
||||
LOCAL lnFactAltaFirma, lnPartS1, lnFactS2S1, lnFactS1Singur
|
||||
lnFactAltaFirma = InsFactIstoric('9999884004')
|
||||
InsLinieIstoric(lnFactAltaFirma, 'ZQXWVKPT ARTICOL TESTS2', '704')
|
||||
lnPartS1 = InsPartenerCascada('9999882002', 'TEST FURNIZOR S1 S2')
|
||||
InsActCascada(96600001, '628', lnPartS1)
|
||||
InsActCascada(96600002, '628', lnPartS1)
|
||||
InsActCascada(96600003, '628', lnPartS1)
|
||||
lnFactS2S1 = InsFactIstoric('9999882002')
|
||||
InsLinieIstoric(lnFactS2S1, 'ZQXWVKPT ARTICOL TESTS2', '')
|
||||
DO PrCazFactura WITH loRec, 'ARTICOL(S2) - prioritate peste FURNIZOR(S1) (asteptat ARTICOL, cont=704, nu FURNIZOR/628)', lnFactS2S1, '9999882002', .T.
|
||||
lnFactS1Singur = InsFactIstoric('9999882002')
|
||||
InsLinieIstoric(lnFactS1Singur, 'DIVERS FURNIZOR S1 FARA ISTORIC PROPRIU', '')
|
||||
DO PrCazFactura WITH loRec, 'FURNIZOR(S1) - fara concurent S2 (asteptat FURNIZOR, cont=628)', lnFactS1Singur, '9999882002', .T.
|
||||
|
||||
*-- Treapta FACTURA (S3): linia nerezolvata de nicio alta sursa ia contul majoritar al celorlalte linii
|
||||
DO PrLogLocal WITH '=== Treapta FACTURA (S3): fixtura ==='
|
||||
LOCAL lnArtFactura, lnFactS3
|
||||
lnArtFactura = InsArticolCatalog('TESTFACTURA CATALOG ART', '628')
|
||||
lnFactS3 = InsFactIstoric('9999883003')
|
||||
InsLinieIstoric(lnFactS3, 'TESTFACTURA CATALOG ART', '')
|
||||
InsLinieIstoric(lnFactS3, 'TESTFACTURA CATALOG ART', '')
|
||||
InsLinieIstoric(lnFactS3, 'QWKJZXVP NEIDENTIFICAT NICAIERI', '')
|
||||
DO PrCazFactura WITH loRec, 'FACTURA(S3) - linie nerezolvata ia contul majoritar (asteptat: liniile 1/2 CATALOG/628, linia 3 FACTURA/628)', lnFactS3, '9999883003', .T.
|
||||
|
||||
*-- LipsuriLista: aceleasi 8 facturi (fixturile ISTORIC + CATALOG/ARTICOL/FURNIZOR/FACTURA de mai
|
||||
*-- sus, inca vii), o singura interogare pe lista intreaga - contoarele trebuie sa reflecte exact
|
||||
*-- ce a aratat PotrivesteFactura per factura mai sus (nicio linie gestionabila in fixtura, deci
|
||||
*-- stoc_fara_gestiune/stoc_total = 0 peste tot; fara_analitic = 1 doar pe liniile rezolvate la
|
||||
*-- conturile 607/704, care au coduri active in vplcont_ANALITIC pe anul curent)
|
||||
DO PrLogLocal WITH '=== LipsuriLista (lista intreaga) ==='
|
||||
IF USED('crsLLFacturi')
|
||||
USE IN crsLLFacturi
|
||||
ENDIF
|
||||
CREATE CURSOR crsLLFacturi (id N(20))
|
||||
INSERT INTO crsLLFacturi (id) VALUES (lnCI1)
|
||||
INSERT INTO crsLLFacturi (id) VALUES (lnCI2)
|
||||
INSERT INTO crsLLFacturi (id) VALUES (lnCI3)
|
||||
INSERT INTO crsLLFacturi (id) VALUES (lnCI4)
|
||||
INSERT INTO crsLLFacturi (id) VALUES (lnFactCatCur)
|
||||
INSERT INTO crsLLFacturi (id) VALUES (lnFactS2S1)
|
||||
INSERT INTO crsLLFacturi (id) VALUES (lnFactS1Singur)
|
||||
INSERT INTO crsLLFacturi (id) VALUES (lnFactS3)
|
||||
LOCAL llSuccesLL
|
||||
llSuccesLL = loRec.LipsuriLista('crsLLFacturi', .T.)
|
||||
DO PrLogLocal WITH ' retur=' + TRANSFORM(llSuccesLL) + ' reccount=' + TRANSFORM(IIF(USED('crsLipsuriLista'), RECCOUNT('crsLipsuriLista'), -1))
|
||||
DO PrVerifLL WITH 'ISTORIC a (lnCI1)', lnCI1, 1, 1, 0, 0, 0, 0
|
||||
DO PrVerifLL WITH 'ISTORIC b nimic (lnCI2)', lnCI2, 1, 1, 1, 0, 0, 0
|
||||
DO PrVerifLL WITH 'ISTORIC c nimic (lnCI3)', lnCI3, 1, 1, 1, 0, 0, 0
|
||||
DO PrVerifLL WITH 'ISTORIC e EXACT, cont 607 cere analitic (lnCI4)', lnCI4, 1, 1, 0, 0, 0, 1
|
||||
DO PrVerifLL WITH 'CATALOG (lnFactCatCur)', lnFactCatCur, 1, 0, 0, 0, 0, 0
|
||||
DO PrVerifLL WITH 'ARTICOL S2, cont 704 cere analitic (lnFactS2S1)', lnFactS2S1, 1, 1, 0, 0, 0, 1
|
||||
DO PrVerifLL WITH 'FURNIZOR S1 (lnFactS1Singur)', lnFactS1Singur, 1, 1, 0, 0, 0, 0
|
||||
DO PrVerifLL WITH 'FACTURA S3 (lnFactS3)', lnFactS3, 3, 1, 0, 0, 0, 0
|
||||
IF USED('crsLipsuriLista')
|
||||
USE IN (SELECT('crsLipsuriLista'))
|
||||
ENDIF
|
||||
USE IN crsLLFacturi
|
||||
|
||||
*-- lista goala - crsLipsuriLista trebuie sa iasa cu structura corecta, fara randuri
|
||||
IF USED('crsLLGoala')
|
||||
USE IN crsLLGoala
|
||||
ENDIF
|
||||
CREATE CURSOR crsLLGoala (id N(20))
|
||||
llSuccesLL = loRec.LipsuriLista('crsLLGoala', .T.)
|
||||
DO PrLogLocal WITH ' lista goala: retur=' + TRANSFORM(llSuccesLL) + ' reccount=' + TRANSFORM(IIF(USED('crsLipsuriLista'), RECCOUNT('crsLipsuriLista'), -1)) + ' (asteptat .T. / 0)'
|
||||
IF USED('crsLipsuriLista')
|
||||
USE IN (SELECT('crsLipsuriLista'))
|
||||
ENDIF
|
||||
USE IN crsLLGoala
|
||||
|
||||
DO StergeFixturaCascadaNoua
|
||||
|
||||
*-- Regula noua: valorile salvate pe linie (cont/acont/id_gestiune/in_stoc) au prioritate peste
|
||||
*-- cascada, chiar daca aceasta nu gaseste nimic - linia nu trebuie sa mai apara ca lipsa
|
||||
DO PrLogLocal WITH '=== Valori proprii salvate pe linie: prioritate peste cascada ==='
|
||||
DO StergeFixturaValoriProprii
|
||||
LOCAL lnArtValoriProprii, lnFactValoriProprii
|
||||
lnArtValoriProprii = 0
|
||||
goExecutor.oExecute("INSERT INTO NOM_ARTICOLE (denumire, cont, in_stoc) VALUES ('TESTVALORI ARTICOL LEGAT', '999', 1)", 'crsInsArtValori')
|
||||
goExecutor.oSelect2Value("SELECT SEQ_NOM_ARTICOLE.CURRVAL FROM DUAL", @lnArtValoriProprii)
|
||||
lnFactValoriProprii = InsFactIstoric('TESTVALORI01')
|
||||
goExecutor.oExecute("INSERT INTO ANAF_EFACTURA_DETALII (id_efactura, nr, articol, cont, acont, id_gestiune, id_articol) VALUES (" + ;
|
||||
TRANSFORM(lnFactValoriProprii) + ", 1, 'ZZZLINIE VALORI PROPRII UNU NEPOTRIVITA NICAIERI', '371', '9', 27, " + TRANSFORM(lnArtValoriProprii) + ")", 'crsInsLinieValori')
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitValori')
|
||||
IF USED('crsLLValoriProprii')
|
||||
USE IN crsLLValoriProprii
|
||||
ENDIF
|
||||
CREATE CURSOR crsLLValoriProprii (id N(20))
|
||||
INSERT INTO crsLLValoriProprii (id) VALUES (lnFactValoriProprii)
|
||||
llSuccesLL = loRec.LipsuriLista('crsLLValoriProprii', .T.)
|
||||
DO PrLogLocal WITH ' retur=' + TRANSFORM(llSuccesLL)
|
||||
DO PrVerifLL WITH 'valori proprii pe linie (cascada nu gaseste nimic)', lnFactValoriProprii, 1, 0, 0, 0, 1, 0
|
||||
IF USED('crsLipsuriLista')
|
||||
USE IN (SELECT('crsLipsuriLista'))
|
||||
ENDIF
|
||||
USE IN crsLLValoriProprii
|
||||
DO StergeFixturaValoriProprii
|
||||
|
||||
DO StergeFixturaIstoric
|
||||
RestaureazaOptiuni()
|
||||
|
||||
DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
|
||||
CATCH TO loEx
|
||||
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE TestScurgereVariabile
|
||||
LPARAMETERS toRec
|
||||
|
||||
PRIVATE pcDenumire, pcCodFiscal, pnIdEfactura
|
||||
pcDenumire = 'GARDA_DENUMIRE'
|
||||
pcCodFiscal = 'GARDA_CODFISCAL'
|
||||
pnIdEfactura = -999
|
||||
LOCAL loArtWrap2
|
||||
loArtWrap2 = GetArticolEFByPartDenumire('TESTCASCADA01', .T., 'ABONAMENT INTERNET 09/2026', .F., 4104)
|
||||
DO PrLogLocal WITH ' dupa GetArticolEFByPartDenumire: pcDenumire=[' + TRANSFORM(m.pcDenumire) + '] (asteptat GARDA_DENUMIRE) ' + IIF(m.pcDenumire == 'GARDA_DENUMIRE', 'OK', 'FAIL - suprascris')
|
||||
DO PrLogLocal WITH ' dupa GetArticolEFByPartDenumire: pcCodFiscal=[' + TRANSFORM(m.pcCodFiscal) + '] (asteptat GARDA_CODFISCAL) ' + IIF(m.pcCodFiscal == 'GARDA_CODFISCAL', 'OK', 'FAIL - suprascris')
|
||||
DO PrLogLocal WITH ' dupa GetArticolEFByPartDenumire: pnIdEfactura=[' + TRANSFORM(m.pnIdEfactura) + '] (asteptat -999) ' + IIF(m.pnIdEfactura == -999, 'OK', 'FAIL - suprascris')
|
||||
|
||||
pcCodFiscal = 'GARDA_CODFISCAL2'
|
||||
pnIdEfactura = -998
|
||||
LOCAL llSuccesFact
|
||||
llSuccesFact = toRec.PotrivesteFactura(4104, 'TESTCASCADA01', .T.)
|
||||
DO PrLogLocal WITH ' dupa PotrivesteFactura: pcCodFiscal=[' + TRANSFORM(m.pcCodFiscal) + '] (asteptat GARDA_CODFISCAL2) ' + IIF(m.pcCodFiscal == 'GARDA_CODFISCAL2', 'OK', 'FAIL - suprascris')
|
||||
DO PrLogLocal WITH ' dupa PotrivesteFactura: pnIdEfactura=[' + TRANSFORM(m.pnIdEfactura) + '] (asteptat -998) ' + IIF(m.pnIdEfactura == -998, 'OK', 'FAIL - suprascris')
|
||||
IF USED('crsPotrivireLinii')
|
||||
USE IN (SELECT('crsPotrivireLinii'))
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrCazArticol
|
||||
LPARAMETERS toRec, tcEticheta, tcCodFiscal, tlPrimite, tcDenumire, tnIdEfactura
|
||||
|
||||
LOCAL loArt, lcSursa
|
||||
DO PrLogLocal WITH '=== PotrivesteArticol: ' + tcEticheta + ' ==='
|
||||
loArt = toRec.PotrivesteArticol(tcCodFiscal, tlPrimite, tcDenumire, tnIdEfactura, @lcSursa)
|
||||
IF ISNULL(m.loArt)
|
||||
DO PrLogLocal WITH ' rezultat = NULL, sursa=[' + TRANSFORM(m.lcSursa) + ']'
|
||||
ELSE
|
||||
DO PrLogLocal WITH ' id_articol=' + TRANSFORM(NVL(loArt.id_articol,-1)) + ' cont=[' + TRANSFORM(NVL(loArt.cont,'?')) + '] acont=[' + TRANSFORM(NVL(loArt.acont,'?')) + '] sursa=[' + TRANSFORM(m.lcSursa) + ']'
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrCazFactura
|
||||
LPARAMETERS toRec, tcEticheta, tnIdEfactura, tcCodFiscal, tlPrimite
|
||||
|
||||
LOCAL llSucces
|
||||
DO PrLogLocal WITH '=== PotrivesteFactura: ' + tcEticheta + ' (id_efactura=' + TRANSFORM(tnIdEfactura) + ') ==='
|
||||
llSucces = toRec.PotrivesteFactura(tnIdEfactura, tcCodFiscal, tlPrimite)
|
||||
DO PrLogLocal WITH ' retur=' + TRANSFORM(llSucces) + ' reccount=' + TRANSFORM(IIF(USED('crsPotrivireLinii'), RECCOUNT('crsPotrivireLinii'), -1))
|
||||
IF m.llSucces AND USED('crsPotrivireLinii') AND RECCOUNT('crsPotrivireLinii') > 0
|
||||
SELECT crsPotrivireLinii
|
||||
SCAN
|
||||
DO PrLogLocal WITH ' nr=' + TRANSFORM(nr) + ' cont=[' + TRANSFORM(NVL(cont,'?')) + '] acont=[' + TRANSFORM(NVL(acont,'?')) + '] sursa_cont=[' + TRANSFORM(NVL(sursa_cont,'?')) + ']' + ;
|
||||
' id_articol=' + TRANSFORM(NVL(id_articol,-1)) + ' articol_roa=[' + TRANSFORM(NVL(articol_roa,'?')) + '] codmat_roa=[' + TRANSFORM(NVL(codmat_roa,'?')) + '] in_stoc=' + TRANSFORM(NVL(in_stoc,-1)) + ' id_gestiune=' + TRANSFORM(NVL(id_gestiune,-1))
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
IF USED('crsPotrivireLinii')
|
||||
USE IN (SELECT('crsPotrivireLinii'))
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrVerifLL
|
||||
LPARAMETERS tcEticheta, tnIdEfactura, tnLinii, tnFaraCatalog, tnFaraOrice, tnStocFaraGest, tnStocTotal, tnFaraAnalitic
|
||||
|
||||
LOCAL llOk, lcDetaliu
|
||||
llOk = .F.
|
||||
lcDetaliu = 'negasit in crsLipsuriLista'
|
||||
IF USED('crsLipsuriLista') AND SEEK(m.tnIdEfactura, 'crsLipsuriLista', 'idefact')
|
||||
llOk = (crsLipsuriLista.linii = m.tnLinii) AND (crsLipsuriLista.fara_cont_catalog = m.tnFaraCatalog) ;
|
||||
AND (crsLipsuriLista.fara_cont_orice = m.tnFaraOrice) AND (crsLipsuriLista.stoc_fara_gestiune = m.tnStocFaraGest) ;
|
||||
AND (crsLipsuriLista.stoc_total = m.tnStocTotal) AND (crsLipsuriLista.fara_analitic = m.tnFaraAnalitic)
|
||||
lcDetaliu = 'linii=' + TRANSFORM(crsLipsuriLista.linii) + ' fara_cont_catalog=' + TRANSFORM(crsLipsuriLista.fara_cont_catalog) + ;
|
||||
' fara_cont_orice=' + TRANSFORM(crsLipsuriLista.fara_cont_orice) + ' stoc_fara_gestiune=' + TRANSFORM(crsLipsuriLista.stoc_fara_gestiune) + ;
|
||||
' stoc_total=' + TRANSFORM(crsLipsuriLista.stoc_total) + ' fara_analitic=' + TRANSFORM(crsLipsuriLista.fara_analitic)
|
||||
ENDIF
|
||||
DO PrLogLocal WITH ' ' + tcEticheta + ': ' + lcDetaliu + ' ' + IIF(llOk, 'OK', 'FAIL - asteptat linii=' + TRANSFORM(m.tnLinii) + ;
|
||||
' fara_cont_catalog=' + TRANSFORM(m.tnFaraCatalog) + ' fara_cont_orice=' + TRANSFORM(m.tnFaraOrice) + ;
|
||||
' stoc_fara_gestiune=' + TRANSFORM(m.tnStocFaraGest) + ' stoc_total=' + TRANSFORM(m.tnStocTotal) + ;
|
||||
' fara_analitic=' + TRANSFORM(m.tnFaraAnalitic))
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE SetOptiune
|
||||
LPARAMETERS tcVarname, tcValoare
|
||||
LOCAL lcSql, lnSucces, lnExista, lnCount
|
||||
lnCount = 0
|
||||
lnSucces = goExecutor.oSelect2Value("SELECT COUNT(*) FROM OPTIUNI WHERE VARNAME = '" + tcVarname + "'", @lnCount)
|
||||
IF NVL(lnCount, 0) > 0
|
||||
lcSql = "UPDATE OPTIUNI SET VARVALUE = '" + tcValoare + "' WHERE VARNAME = '" + tcVarname + "'"
|
||||
ELSE
|
||||
lcSql = "INSERT INTO OPTIUNI (VARNAME, VARTYPE, PROGRAM, VARVALUE, VARDESC) VALUES ('" + tcVarname + "', 'NUMERIC', 'ROACONT', '" + tcValoare + "', 'test')"
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'crsSetOptiune')
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitOptiune')
|
||||
actualizeaza_optiuni()
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE DeleteOptiune
|
||||
LPARAMETERS tcVarname
|
||||
goExecutor.oExecute("DELETE FROM OPTIUNI WHERE VARNAME = '" + tcVarname + "'", 'crsDelOptiune')
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitOptiune')
|
||||
actualizeaza_optiuni()
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
* Fixtura treapta 5 (ISTORIC): ID-urile ANAF_EFACTURA/ANAF_EFACTURA_DETALII sunt impuse de
|
||||
* trigger-e (secventa), de aceea INSERT fara ID si citire cu CURRVAL dupa fiecare insert.
|
||||
PROCEDURE InsFactIstoric
|
||||
LPARAMETERS tcCodFiscal
|
||||
LOCAL lnId
|
||||
goExecutor.oExecute("INSERT INTO ANAF_EFACTURA (cod_fiscal_emitent, xdata_act) VALUES ('" + tcCodFiscal + "', SYSDATE)", 'crsInsFact')
|
||||
lnId = 0
|
||||
goExecutor.oSelect2Value("SELECT SEQ_ANAF_EFACTURA.CURRVAL FROM DUAL", @lnId)
|
||||
RETURN lnId
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE InsLinieIstoric
|
||||
LPARAMETERS tnIdEfactura, tcArticol, tcCont
|
||||
LOCAL lnId, lcCont, lnNr
|
||||
lcCont = IIF(EMPTY(tcCont), 'NULL', "'" + tcCont + "'")
|
||||
lnNr = 0
|
||||
goExecutor.oSelect2Value("SELECT NVL(MAX(nr),0)+1 FROM ANAF_EFACTURA_DETALII WHERE id_efactura = " + TRANSFORM(tnIdEfactura), @lnNr)
|
||||
goExecutor.oExecute("INSERT INTO ANAF_EFACTURA_DETALII (id_efactura, nr, articol, cont) VALUES (" + ;
|
||||
TRANSFORM(tnIdEfactura) + ", " + TRANSFORM(lnNr) + ", '" + tcArticol + "', " + lcCont + ")", 'crsInsLinie')
|
||||
lnId = 0
|
||||
goExecutor.oSelect2Value("SELECT SEQ_ANAF_EFACT_DETALII.CURRVAL FROM DUAL", @lnId)
|
||||
RETURN lnId
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE StergeFixturaIstoric
|
||||
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA_DETALII WHERE id_efactura IN (SELECT id FROM ANAF_EFACTURA WHERE cod_fiscal_emitent LIKE 'TESTISTORIC%')", 'crsDelLiniiIst')
|
||||
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA WHERE cod_fiscal_emitent LIKE 'TESTISTORIC%'", 'crsDelFactIst')
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitDelIst')
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
* Fixtura treptelor CATALOG/ARTICOL(S2)/FURNIZOR(S1)/FACTURA(S3): cod fiscal 9999881001-9999884004,
|
||||
* articole NOM_ARTICOLE 'TESTCATALOG*'/'TESTFACTURA*', ACT cod 96600001-96600003
|
||||
PROCEDURE InsArticolCatalog
|
||||
LPARAMETERS tcDenumire, tcCont
|
||||
LOCAL lnId
|
||||
goExecutor.oExecute("INSERT INTO NOM_ARTICOLE (denumire, cont, in_stoc) VALUES ('" + tcDenumire + "', '" + tcCont + "', 0)", 'crsInsArtCasc')
|
||||
lnId = 0
|
||||
goExecutor.oSelect2Value("SELECT SEQ_NOM_ARTICOLE.CURRVAL FROM DUAL", @lnId)
|
||||
RETURN lnId
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE InsPartenerCascada
|
||||
LPARAMETERS tcCodFiscal, tcDenumire
|
||||
LOCAL lnId
|
||||
goExecutor.oExecute("INSERT INTO NOM_PARTENERI (cod_fiscal, denumire) VALUES ('" + tcCodFiscal + "', '" + tcDenumire + "')", 'crsInsPartCasc')
|
||||
lnId = 0
|
||||
goExecutor.oSelect2Value("SELECT SEQ_NOM_PARTENERI.CURRVAL FROM DUAL", @lnId)
|
||||
RETURN lnId
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
* document contabil de 2 linii (credit 401 pe furnizor + debit tcContDebit), datat inainte de
|
||||
* facturile din fixtura, pentru sursa FURNIZOR (S1)
|
||||
PROCEDURE InsActCascada
|
||||
LPARAMETERS tnCod, tcContDebit, tnIdPartener
|
||||
goExecutor.oExecute("INSERT INTO ACT (cod, dataact, scc, id_partc, suma) VALUES (" + ;
|
||||
TRANSFORM(tnCod) + ", SYSDATE - 10, '401', " + TRANSFORM(tnIdPartener) + ", 100)", 'crsInsActCCasc')
|
||||
goExecutor.oExecute("INSERT INTO ACT (cod, dataact, scd, suma) VALUES (" + ;
|
||||
TRANSFORM(tnCod) + ", SYSDATE - 10, '" + tcContDebit + "', 100)", 'crsInsActDCasc')
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE StergeFixturaCascadaNoua
|
||||
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA_DETALII WHERE id_efactura IN (SELECT id FROM ANAF_EFACTURA WHERE cod_fiscal_emitent IN ('9999881001','9999882002','9999883003','9999884004'))", 'crsDelLiniiCasc')
|
||||
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA WHERE cod_fiscal_emitent IN ('9999881001','9999882002','9999883003','9999884004')", 'crsDelFactCasc')
|
||||
goExecutor.oExecute("DELETE FROM ACT WHERE cod BETWEEN 96600000 AND 96600099", 'crsDelActCasc')
|
||||
goExecutor.oExecute("DELETE FROM NOM_PARTENERI WHERE cod_fiscal = '9999882002'", 'crsDelPartCasc')
|
||||
goExecutor.oExecute("DELETE FROM NOM_ARTICOLE WHERE denumire IN ('TESTCATALOG ARTICOL UNU','TESTFACTURA CATALOG ART')", 'crsDelArtCasc')
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitDelCasc')
|
||||
ENDPROC
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE StergeFixturaValoriProprii
|
||||
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA_DETALII WHERE id_efactura IN (SELECT id FROM ANAF_EFACTURA WHERE cod_fiscal_emitent = 'TESTVALORI01')", 'crsDelLiniiValori')
|
||||
goExecutor.oExecute("DELETE FROM ANAF_EFACTURA WHERE cod_fiscal_emitent = 'TESTVALORI01'", 'crsDelFactValori')
|
||||
goExecutor.oExecute("DELETE FROM NOM_ARTICOLE WHERE denumire = 'TESTVALORI ARTICOL LEGAT'", 'crsDelArtValori')
|
||||
goExecutor.oExecute('COMMIT', 'crsCommitDelValori')
|
||||
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
|
||||
605
utile/Teste/test_repro_lipsuri_ui.prg
Normal file
605
utile/Teste/test_repro_lipsuri_ui.prg
Normal file
@@ -0,0 +1,605 @@
|
||||
* test_repro_lipsuri_ui.prg
|
||||
* Repro pe formularul real frm_import_efactura: coloana "De completat" nu se umple la cautare (D1),
|
||||
* nu se actualizeaza dupa alegerea gestiunii pe linie (D2), completarea manuala e suprascrisa de o
|
||||
* cautare ulterioara (M1), lista e goala la deschidere pana la prima cautare (M2), avertismentul
|
||||
* de partener inactiv nu mai blocheaza definitiv un rand cu lipsuri completate ulterior (T1), si
|
||||
* filtrul local "De completat" + contorul lui nu se lasa pacalite de propriul filtru (T2).
|
||||
* Ruleaza pe fixtura ZZTEST semanata de seed_test_import_efactura.prg (MARIUSM_AUTO@ROA_CENTRAL, 09/2026).
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\test_repro_lipsuri_ui.prg"
|
||||
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\test_repro_lipsuri_ui_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\test_repro_lipsuri_ui_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
|
||||
|
||||
PRIVATE poFacturi, poFacturiDetalii
|
||||
poFacturi = NULL
|
||||
poFacturiDetalii = NULL
|
||||
|
||||
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 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 BuildCursoare
|
||||
DO PrLogLocal WITH 'crsFacturi reccount=' + TRANSFORM(RECCOUNT('crsFacturi')) + ' dupa BuildCursoare, TYPE(poFacturi)=' + TYPE('poFacturi')
|
||||
IF RECCOUNT('crsFacturi') = 0
|
||||
DO PrLogLocal WITH 'FAIL: nicio factura ZZTEST gasita - a rulat seed_test_import_efactura.prg?'
|
||||
DO PrFinal
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO BuildCursoareHelper
|
||||
DO PrLogLocal WITH 'cursoare helper construite, TYPE(poFacturi)=' + TYPE('poFacturi') + ' cGestiuni reccount=' + TRANSFORM(RECCOUNT('cGestiuni')) + ' cGestiuni2 reccount=' + TRANSFORM(RECCOUNT('cGestiuni2')) + ' gnIdUtil=' + TRANSFORM(gnIdUtil)
|
||||
|
||||
* gnIdUtil=-3 (utilizatorul de test) nu are gestiuni configurate in vgest_gestiuni_util -
|
||||
* cGestiuni2 (RowSource-ul real al combobox-ului) ramane doar cu randul gol; completez cu o
|
||||
* gestiune reala a schemei, direct din NOM_GESTIUNI, ca D2 sa poata alege o valoare valida
|
||||
SELECT cGestiuni2
|
||||
LOCATE FOR NVL(id_gestiune,0) # 0
|
||||
IF !FOUND()
|
||||
LOCAL loGestFallback
|
||||
goExecutor.oExecuta("select id_gestiune, nume_gestiune from NOM_GESTIUNI where sters = 0 and inactiv = 0 and rownum = 1 order by id_gestiune", 'cGestFallback')
|
||||
IF USED('cGestFallback') AND RECCOUNT('cGestFallback') > 0
|
||||
SELECT cGestFallback
|
||||
loGestFallback = NULL
|
||||
SCATTER NAME loGestFallback
|
||||
USE IN (SELECT('cGestFallback'))
|
||||
* cGestiuni2 (din SELECT ... INTO CURSOR, fara READWRITE) nu accepta INSERT - o refac READWRITE
|
||||
SELECT nume_gestiune, id_gestiune FROM cGestiuni2 INTO CURSOR cGestiuni2Nou READWRITE
|
||||
USE IN (SELECT('cGestiuni2'))
|
||||
INSERT INTO cGestiuni2Nou (nume_gestiune, id_gestiune) VALUES (ALLTRIM(loGestFallback.nume_gestiune), loGestFallback.id_gestiune)
|
||||
SELECT * FROM cGestiuni2Nou INTO CURSOR cGestiuni2 READWRITE
|
||||
USE IN (SELECT('cGestiuni2Nou'))
|
||||
DO PrLogLocal WITH 'fallback cGestiuni2: adaugat id_gestiune=' + TRANSFORM(loGestFallback.id_gestiune) + ' (' + ALLTRIM(loGestFallback.nume_gestiune) + ') - gnIdUtil=-3 nu are gestiuni proprii pe schema de test'
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
LOCAL loForm
|
||||
SELECT crsFacturi
|
||||
DO PrLogLocal WITH 'inainte de CREATEOBJECT, TYPE(poFacturi)=' + TYPE('poFacturi')
|
||||
loForm = CREATEOBJECT('frm_import_efactura', .T.)
|
||||
DO PrLogLocal WITH 'frm_import_efactura instantiat, lLotActiv=' + TRANSFORM(loForm.lLotActiv) + ' TYPE(poFacturi)=' + TYPE('poFacturi')
|
||||
|
||||
*=====================================================================
|
||||
* D1: do_cauta pe filtrul facturilor ZZTEST curente, FARA sa ating grila
|
||||
*=====================================================================
|
||||
DO PrLogLocal WITH ''
|
||||
DO PrLogLocal WITH '=== D1: do_cauta ==='
|
||||
loForm.filtru_pretty = "cod_fiscal_emitent LIKE '9999700%' AND numar_act LIKE '%-C'"
|
||||
loForm.do_cauta()
|
||||
DO PrLogLocal WITH 'do_cauta terminat, crsFacturi reccount=' + TRANSFORM(RECCOUNT('crsFacturi'))
|
||||
|
||||
LOCAL lnCuDeCompletat, lnTotalD1
|
||||
lnCuDeCompletat = 0
|
||||
lnTotalD1 = 0
|
||||
SELECT crsFacturi
|
||||
SCAN
|
||||
lnTotalD1 = lnTotalD1 + 1
|
||||
IF !EMPTY(ALLTRIM(NVL(de_completat,'')))
|
||||
lnCuDeCompletat = lnCuDeCompletat + 1
|
||||
DO PrLogLocal WITH ' id=' + TRANSFORM(id) + ' de_completat=[' + ALLTRIM(NVL(de_completat,'')) + ']'
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
DO PrLogLocal WITH 'D1: total=' + TRANSFORM(lnTotalD1) + ' cu de_completat nevid=' + TRANSFORM(lnCuDeCompletat)
|
||||
|
||||
IF lnCuDeCompletat = 0
|
||||
DO PrTest WITH 'D1 do_cauta umple de_completat pe lista', .F., 'GOL PESTE TOT dupa do_cauta - cauza (a) probabila: TRY/CATCH tacut a inghitit o eroare'
|
||||
DO PrLogLocal WITH '--- apel direct RecunoastereArticolEF.LipsuriLista in afara TRY, ca sa vedem eroarea reala ---'
|
||||
LOCAL loRecDirect, llSuccesDirect
|
||||
TRY
|
||||
loRecDirect = CREATEOBJECT('RecunoastereArticolEF')
|
||||
llSuccesDirect = loRecDirect.LipsuriLista('crsFacturi', .T.)
|
||||
DO PrLogLocal WITH 'LipsuriLista direct: retur=' + TRANSFORM(llSuccesDirect) + ' crsLipsuriLista reccount=' + TRANSFORM(IIF(USED('crsLipsuriLista'), RECCOUNT('crsLipsuriLista'), -1))
|
||||
CATCH TO loExDirect
|
||||
DO PrLogLocal WITH 'LipsuriLista direct: EXCEPTIE ' + loExDirect.Message + ' (' + TRANSFORM(loExDirect.LineNo) + ') ' + loExDirect.Procedure
|
||||
ENDTRY
|
||||
ELSE
|
||||
DO PrTest WITH 'D1 do_cauta umple de_completat pe lista', .T., 'umplut pe ' + TRANSFORM(lnCuDeCompletat) + '/' + TRANSFORM(lnTotalD1) + ' facturi - daca ecranul real arata gol, cauza (b): lipseste grdFacturi.Refresh()'
|
||||
ENDIF
|
||||
|
||||
*=====================================================================
|
||||
* D2: alegere gestiune pe linie prin combobox-ul real din grid
|
||||
*=====================================================================
|
||||
DO PrLogLocal WITH ''
|
||||
DO PrLogLocal WITH '=== D2: cGestiune._combobox1.InteractiveChange ==='
|
||||
|
||||
* gasesc factura + linia cu id_gestiune gol, articol stocabil, cont deja completat -
|
||||
* calea per-document (identica cu test_lipsuri_lista_echivalenta.prg), ca sa stiu ce factura are
|
||||
* cu adevarat "gest." de completat, indiferent de rezultatul D1 de mai sus
|
||||
LOCAL lnIdFacturaTinta, lnRecnoFacturaTinta, lcDeCompletatDinainte
|
||||
LOCAL lnIdFacturaTintaM1, lnRecnoFacturaTintaM1, lcDeCompletatDinainteM1
|
||||
lnIdFacturaTinta = 0
|
||||
lnIdFacturaTintaM1 = 0
|
||||
SELECT crsFacturi
|
||||
SCAN
|
||||
LOCAL lnRecnoF, lnIdEF
|
||||
lnIdEF = id
|
||||
lnRecnoF = RECNO()
|
||||
GO lnRecnoF IN crsFacturi
|
||||
loForm.CompleteazaFactura()
|
||||
GO lnRecnoF IN crsFacturi
|
||||
loForm.actualizeaza_grid2()
|
||||
GO lnRecnoF IN crsFacturi
|
||||
loForm.CompleteazaDetaliiFactura()
|
||||
GO lnRecnoF IN crsFacturi
|
||||
loForm.ActualizeazaLipsuriRandCurent()
|
||||
GO lnRecnoF IN crsFacturi
|
||||
IF lnIdFacturaTinta = 0 AND 'gest.' $ ALLTRIM(NVL(crsFacturi.de_completat,''))
|
||||
lnIdFacturaTinta = lnIdEF
|
||||
lnRecnoFacturaTinta = lnRecnoF
|
||||
lcDeCompletatDinainte = ALLTRIM(NVL(crsFacturi.de_completat,''))
|
||||
ENDIF
|
||||
IF lnIdFacturaTintaM1 = 0 AND !EMPTY(ALLTRIM(NVL(crsFacturi.de_completat,'')))
|
||||
lnIdFacturaTintaM1 = lnIdEF
|
||||
lnRecnoFacturaTintaM1 = lnRecnoF
|
||||
lcDeCompletatDinainteM1 = ALLTRIM(NVL(crsFacturi.de_completat,''))
|
||||
ENDIF
|
||||
SELECT crsFacturi
|
||||
ENDSCAN
|
||||
|
||||
IF lnIdFacturaTinta = 0
|
||||
DO PrLogLocal WITH 'D2: nicio factura din fixtura nu are linie stocabila fara gestiune dupa completare - nu se poate reproduce pe acest set'
|
||||
ELSE
|
||||
DO PrLogLocal WITH 'D2: factura tinta id=' + TRANSFORM(lnIdFacturaTinta) + ' de_completat inainte=[' + lcDeCompletatDinainte + ']'
|
||||
|
||||
GO lnRecnoFacturaTinta IN crsFacturi
|
||||
loForm.actualizeaza_grid2()
|
||||
GO lnRecnoFacturaTinta IN crsFacturi
|
||||
|
||||
LOCAL lnRecnoLinieTinta, lnIdGestiuneVechi
|
||||
lnRecnoLinieTinta = 0
|
||||
SELECT crsDetaliiFacturi
|
||||
SCAN
|
||||
IF NVL(in_stoc,0) = 1 AND EMPTY(NVL(id_gestiune,0))
|
||||
lnRecnoLinieTinta = RECNO()
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
|
||||
IF lnRecnoLinieTinta = 0
|
||||
DO PrLogLocal WITH 'D2: FAIL structural - de_completat mentioneaza gest. dar nicio linie din crsDetaliiFacturi nu se potriveste (in_stoc=1 si id_gestiune gol)'
|
||||
ELSE
|
||||
GO lnRecnoLinieTinta IN crsDetaliiFacturi
|
||||
lnIdGestiuneVechi = NVL(crsDetaliiFacturi.id_gestiune, 0)
|
||||
DO PrLogLocal WITH 'D2: linie tinta recno=' + TRANSFORM(lnRecnoLinieTinta) + ' id_gestiune inainte=' + TRANSFORM(lnIdGestiuneVechi)
|
||||
|
||||
LOCAL lnIdGestiuneNou
|
||||
lnIdGestiuneNou = 0
|
||||
SELECT cGestiuni2
|
||||
LOCATE FOR NVL(id_gestiune,0) # 0
|
||||
IF FOUND()
|
||||
lnIdGestiuneNou = id_gestiune
|
||||
ENDIF
|
||||
SELECT crsDetaliiFacturi
|
||||
|
||||
IF lnIdGestiuneNou = 0
|
||||
DO PrLogLocal WITH 'D2: FAIL structural - cGestiuni2 nu are nicio gestiune valida pe schema de test'
|
||||
ELSE
|
||||
DO PrLogLocal WITH 'D2: aleg id_gestiune=' + TRANSFORM(lnIdGestiuneNou) + ' din cGestiuni2'
|
||||
|
||||
loForm.grdDetaliiFacturi.cGestiune._combobox1.Value = m.lnIdGestiuneNou
|
||||
DO PrLogLocal WITH 'D2: dupa setarea .Value, crsDetaliiFacturi.id_gestiune=' + TRANSFORM(NVL(crsDetaliiFacturi.id_gestiune,0)) + ' (arata daca simpla asignare de .Value scrie deja in ControlSource)'
|
||||
|
||||
loForm.grdDetaliiFacturi.cGestiune._combobox1.InteractiveChange()
|
||||
|
||||
SELECT crsDetaliiFacturi
|
||||
GO lnRecnoLinieTinta
|
||||
DO PrLogLocal WITH 'D2: dupa InteractiveChange, crsDetaliiFacturi.id_gestiune=' + TRANSFORM(NVL(id_gestiune,0))
|
||||
|
||||
SELECT crsFacturi
|
||||
GO lnRecnoFacturaTinta
|
||||
LOCAL lcDeCompletatDupa
|
||||
lcDeCompletatDupa = ALLTRIM(NVL(de_completat,''))
|
||||
DO PrLogLocal WITH 'D2: de_completat dupa InteractiveChange=[' + lcDeCompletatDupa + ']'
|
||||
|
||||
IF NVL(crsDetaliiFacturi.id_gestiune,0) # m.lnIdGestiuneNou
|
||||
DO PrLogLocal WITH 'D2: NEREPRODUS pe aceasta cale - setarea programatica a .Value nu a scris in ControlSource (crsDetaliiFacturi.id_gestiune a ramas neschimbat), deci InteractiveChange nu a avut ce sa citeasca diferit'
|
||||
DO PrTest WITH 'D2 de_completat/contor se actualizeaza dupa alegerea gestiunii', .F., 'neconcludent - .Value programatic nu a scris in ControlSource, vezi log pentru dovada structurala'
|
||||
ELSE
|
||||
IF 'gest.' $ lcDeCompletatDupa
|
||||
DO PrTest WITH 'D2 de_completat/contor se actualizeaza dupa alegerea gestiunii', .F., 'de_completat inca arata [' + lcDeCompletatDupa + '] desi id_gestiune a fost scris - ActualizeazaLipsuriRandCurent a recalculat pe valoarea veche'
|
||||
ELSE
|
||||
DO PrTest WITH 'D2 de_completat/contor se actualizeaza dupa alegerea gestiunii', .T., 'de_completat=[' + lcDeCompletatDupa + '] dupa alegere'
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
*=====================================================================
|
||||
* M1: completare locala (cont/gestiune/acont) supravietuieste unei cautari ulterioare
|
||||
*=====================================================================
|
||||
DO PrLogLocal WITH ''
|
||||
DO PrLogLocal WITH '=== M1: completarea locala nu e suprascrisa de do_cauta ==='
|
||||
|
||||
IF lnIdFacturaTintaM1 = 0
|
||||
DO PrLogLocal WITH 'M1: nicio factura din fixtura nu are ceva de completat dupa vizitare - nu se poate reproduce pe acest set'
|
||||
ELSE
|
||||
DO PrLogLocal WITH 'M1: factura tinta id=' + TRANSFORM(lnIdFacturaTintaM1) + ' de_completat inainte=[' + lcDeCompletatDinainteM1 + ']'
|
||||
|
||||
GO lnRecnoFacturaTintaM1 IN crsFacturi
|
||||
loForm.actualizeaza_grid2()
|
||||
GO lnRecnoFacturaTintaM1 IN crsFacturi
|
||||
|
||||
LOCAL lnGestiuneM1
|
||||
lnGestiuneM1 = 0
|
||||
SELECT cGestiuni2
|
||||
LOCATE FOR NVL(id_gestiune,0) # 0
|
||||
IF FOUND()
|
||||
lnGestiuneM1 = id_gestiune
|
||||
ENDIF
|
||||
|
||||
* completez tot ce lipseste (cont/gestiune/acont) pe liniile facturii, doar in cursorul local
|
||||
SELECT crsDetaliiFacturi
|
||||
REPLACE cont WITH IIF(EMPTY(NVL(cont,'')), '628', cont) ALL
|
||||
REPLACE id_gestiune WITH IIF(NVL(in_stoc,0) = 1 AND EMPTY(NVL(id_gestiune,0)), m.lnGestiuneM1, id_gestiune) ALL
|
||||
REPLACE acont WITH IIF(!EMPTY(NVL(cont,'')) AND EMPTY(NVL(acont,'')), '01', acont) ALL
|
||||
|
||||
GO lnRecnoFacturaTintaM1 IN crsFacturi
|
||||
loForm.ActualizeazaLipsuriRandCurent()
|
||||
GO lnRecnoFacturaTintaM1 IN crsFacturi
|
||||
LOCAL lcDeCompletatLocalM1
|
||||
lcDeCompletatLocalM1 = ALLTRIM(NVL(crsFacturi.de_completat,''))
|
||||
DO PrLogLocal WITH 'M1: de_completat dupa completarea locala (inainte de do_cauta)=[' + lcDeCompletatLocalM1 + ']'
|
||||
|
||||
IF !EMPTY(m.lcDeCompletatLocalM1)
|
||||
DO PrTest WITH 'M1 completarea locala supravietuieste lui do_cauta', .F., 'neconcludent - completarea locala nu a golit de_completat, vezi log'
|
||||
ELSE
|
||||
loForm.filtru_pretty = "cod_fiscal_emitent LIKE '9999700%' AND numar_act LIKE '%-C'"
|
||||
loForm.do_cauta()
|
||||
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR id = m.lnIdFacturaTintaM1
|
||||
IF !FOUND()
|
||||
DO PrTest WITH 'M1 completarea locala supravietuieste lui do_cauta', .F., 'factura tinta nu mai e in crsFacturi dupa do_cauta'
|
||||
ELSE
|
||||
LOCAL lcDeCompletatDupaM1
|
||||
lcDeCompletatDupaM1 = ALLTRIM(NVL(de_completat,''))
|
||||
DO PrTest WITH 'M1 completarea locala supravietuieste lui do_cauta', EMPTY(m.lcDeCompletatDupaM1), 'de_completat dupa do_cauta=[' + m.lcDeCompletatDupaM1 + ']'
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
*=====================================================================
|
||||
* M2: la deschidere (fara cautare) lista trebuie sa aiba de_completat pe toata lista
|
||||
*=====================================================================
|
||||
DO PrLogLocal WITH ''
|
||||
DO PrLogLocal WITH '=== M2: ActualizeazaLipsuriLista pe cursor proaspat, fara do_cauta ==='
|
||||
|
||||
DO BuildCursoare
|
||||
DO PrLogLocal WITH 'M2: crsFacturi reccount=' + TRANSFORM(RECCOUNT('crsFacturi')) + ' dupa reconstructie'
|
||||
|
||||
LOCAL loForm2, lnCuDeCompletatM2, lnTotalM2
|
||||
loForm2 = CREATEOBJECT('frm_import_efactura', .T.)
|
||||
*!* Show() nu ruleaza headless (maximizeaza fereastra) - se cheama direct metoda pe care Show() o cheama
|
||||
loForm2.ActualizeazaLipsuriLista()
|
||||
|
||||
lnCuDeCompletatM2 = 0
|
||||
lnTotalM2 = 0
|
||||
SELECT crsFacturi
|
||||
SCAN
|
||||
lnTotalM2 = lnTotalM2 + 1
|
||||
IF !EMPTY(ALLTRIM(NVL(de_completat,'')))
|
||||
lnCuDeCompletatM2 = lnCuDeCompletatM2 + 1
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
DO PrLogLocal WITH 'M2: total=' + TRANSFORM(lnTotalM2) + ' cu de_completat nevid=' + TRANSFORM(lnCuDeCompletatM2) + ' (D1 avea ' + TRANSFORM(lnCuDeCompletat) + ')'
|
||||
|
||||
DO PrTest WITH 'M2 lista completata fara cautare, direct dupa apelul pe care Show() il face', lnCuDeCompletatM2 = lnCuDeCompletat, 'nevid=' + TRANSFORM(lnCuDeCompletatM2) + ' vs. D1=' + TRANSFORM(lnCuDeCompletat)
|
||||
|
||||
*=====================================================================
|
||||
* T1: rand cu lipsuri (cont gol) SI cu avertisment de partener inactiv (ZZT-C2-C) - dupa
|
||||
* completarea contului pe cursorul local, eligibil_lot trebuie sa devina 1, motiv_lot gol
|
||||
*=====================================================================
|
||||
DO PrLogLocal WITH ''
|
||||
DO PrLogLocal WITH '=== T1: lipsuri + avertisment partener inactiv (ZZT-C2-C) ==='
|
||||
|
||||
loForm.filtru_pretty = "cod_fiscal_emitent LIKE '9999700%' AND numar_act LIKE '%-C'"
|
||||
loForm.do_cauta()
|
||||
|
||||
SELECT crsFacturi
|
||||
LOCATE FOR ALLTRIM(NVL(numar_act,'')) == 'ZZT-C2-C'
|
||||
IF !FOUND()
|
||||
DO PrTest WITH 'T1 eligibil_lot=1 si motiv_lot gol dupa completarea contului (lipsuri + partener inactiv)', .F., 'factura ZZT-C2-C nu e in fixtura - a rulat seed_test_import_efactura.prg?'
|
||||
ELSE
|
||||
LOCAL lnRecnoT1
|
||||
lnRecnoT1 = RECNO()
|
||||
|
||||
loForm.CompleteazaFactura()
|
||||
GO lnRecnoT1 IN crsFacturi
|
||||
loForm.actualizeaza_grid2()
|
||||
GO lnRecnoT1 IN crsFacturi
|
||||
loForm.CompleteazaDetaliiFactura()
|
||||
GO lnRecnoT1 IN crsFacturi
|
||||
loForm.ActualizeazaLipsuriRandCurent()
|
||||
GO lnRecnoT1 IN crsFacturi
|
||||
|
||||
DO PrLogLocal WITH 'T1: dupa vizitarea randului - part_inactiv=' + TRANSFORM(NVL(crsFacturi.part_inactiv,0)) + ' eligibil_lot=' + TRANSFORM(NVL(crsFacturi.eligibil_lot,1)) + ' motiv_lot=[' + ALLTRIM(NVL(crsFacturi.motiv_lot,'')) + ']'
|
||||
|
||||
SELECT crsDetaliiFacturi
|
||||
REPLACE cont WITH '628' ALL
|
||||
SELECT crsFacturi
|
||||
GO lnRecnoT1 IN crsFacturi
|
||||
loForm.ActualizeazaLipsuriRandCurent()
|
||||
GO lnRecnoT1 IN crsFacturi
|
||||
|
||||
LOCAL llEligibilT1, lcMotivT1
|
||||
llEligibilT1 = (NVL(crsFacturi.eligibil_lot,0) = 1)
|
||||
lcMotivT1 = ALLTRIM(NVL(crsFacturi.motiv_lot,''))
|
||||
DO PrTest WITH 'T1 eligibil_lot=1 si motiv_lot gol dupa completarea contului (lipsuri + partener inactiv)', llEligibilT1 AND EMPTY(lcMotivT1), 'eligibil_lot=' + TRANSFORM(NVL(crsFacturi.eligibil_lot,0)) + ' motiv_lot=[' + lcMotivT1 + ']'
|
||||
ENDIF
|
||||
|
||||
*=====================================================================
|
||||
* T2: bifa "De completat" - filtru local pe crsFacturi (ascunde randurile gata) + contorul
|
||||
* din caption trebuie sa numere TOATE randurile din ActualizeazaContoare/ContorBifate, nu doar
|
||||
* cele vizibile prin filtru (bug prins la code-review, guard SET FILTER TO/AplicaFiltruDeCompletat)
|
||||
*=====================================================================
|
||||
DO PrLogLocal WITH ''
|
||||
DO PrLogLocal WITH '=== T2: chkDeCompletat - filtru local + contor pe toate randurile ==='
|
||||
|
||||
loForm.filtru_pretty = "cod_fiscal_emitent LIKE '9999700%' AND numar_act LIKE '%-C'"
|
||||
loForm.do_cauta()
|
||||
|
||||
* baseline dinamic: alte sectiuni (T1) pot fi lasat deja o factura "gata" pe acelasi cursor
|
||||
* persistent - nu presupun un total fix, masor delta inainte/dupa completarea lui C1
|
||||
SELECT crsFacturi
|
||||
SET FILTER TO
|
||||
LOCAL lnTotalNefiltratT2, lnGataInainteT2, lnGataDupaT2
|
||||
lnTotalNefiltratT2 = RECCOUNT('crsFacturi')
|
||||
lnGataInainteT2 = 0
|
||||
COUNT FOR EMPTY(ALLTRIM(NVL(de_completat,''))) TO lnGataInainteT2
|
||||
|
||||
LOCATE FOR ALLTRIM(NVL(numar_act,'')) == 'ZZT-C1-C'
|
||||
IF !FOUND()
|
||||
DO PrTest WITH 'T2 filtrul local + contorul vad toate randurile', .F., 'factura ZZT-C1-C nu e in fixtura'
|
||||
ELSE
|
||||
LOCAL lnRecnoT2
|
||||
lnRecnoT2 = RECNO()
|
||||
|
||||
loForm.CompleteazaFactura()
|
||||
GO lnRecnoT2 IN crsFacturi
|
||||
loForm.actualizeaza_grid2()
|
||||
GO lnRecnoT2 IN crsFacturi
|
||||
loForm.CompleteazaDetaliiFactura()
|
||||
GO lnRecnoT2 IN crsFacturi
|
||||
loForm.ActualizeazaLipsuriRandCurent()
|
||||
GO lnRecnoT2 IN crsFacturi
|
||||
|
||||
* completez tot ce lipseste, doar in cursorul local (ca la M1), ca sa devina "gata"
|
||||
SELECT crsDetaliiFacturi
|
||||
REPLACE cont WITH IIF(EMPTY(NVL(cont,'')), '628', cont) ALL
|
||||
REPLACE acont WITH IIF(!EMPTY(NVL(cont,'')) AND EMPTY(NVL(acont,'')), '01', acont) ALL
|
||||
SELECT crsFacturi
|
||||
GO lnRecnoT2 IN crsFacturi
|
||||
loForm.ActualizeazaLipsuriRandCurent()
|
||||
GO lnRecnoT2 IN crsFacturi
|
||||
|
||||
LOCAL lcDeCompletatT2Gata
|
||||
lcDeCompletatT2Gata = ALLTRIM(NVL(crsFacturi.de_completat,''))
|
||||
DO PrLogLocal WITH 'T2: factura ZZT-C1-C dupa completare - de_completat=[' + lcDeCompletatT2Gata + '] eligibil_lot=' + TRANSFORM(NVL(crsFacturi.eligibil_lot,0))
|
||||
|
||||
IF !EMPTY(lcDeCompletatT2Gata)
|
||||
DO PrTest WITH 'T2 filtrul local + contorul vad toate randurile', .F., 'neconcludent - factura tinta nu a devenit gata dupa completare, vezi log'
|
||||
ELSE
|
||||
SELECT crsFacturi
|
||||
lnGataDupaT2 = 0
|
||||
COUNT FOR EMPTY(ALLTRIM(NVL(de_completat,''))) TO lnGataDupaT2
|
||||
LOCAL lnAsteptatVizibileT2
|
||||
lnAsteptatVizibileT2 = lnTotalNefiltratT2 - lnGataDupaT2
|
||||
|
||||
loForm.chkDeCompletat.Value = .T.
|
||||
loForm.AplicaFiltruDeCompletat()
|
||||
|
||||
SELECT crsFacturi
|
||||
LOCAL lnVizibileT2
|
||||
lnVizibileT2 = 0
|
||||
COUNT TO lnVizibileT2
|
||||
LOCATE FOR ALLTRIM(NVL(numar_act,'')) == 'ZZT-C1-C'
|
||||
LOCAL llGasitaSubFiltruT2
|
||||
llGasitaSubFiltruT2 = FOUND()
|
||||
|
||||
loForm.ActualizeazaContoare()
|
||||
LOCAL lcCaptionT2, lnParStart, lnParEnd, lnNT2
|
||||
lcCaptionT2 = loForm.chkDeCompletat.Caption
|
||||
lnParStart = AT('(', lcCaptionT2)
|
||||
lnParEnd = AT(')', lcCaptionT2)
|
||||
lnNT2 = IIF(lnParStart > 0 AND lnParEnd > lnParStart, VAL(SUBSTR(lcCaptionT2, lnParStart + 1, lnParEnd - lnParStart - 1)), -1)
|
||||
|
||||
DO PrLogLocal WITH 'T2: gata inainte=' + TRANSFORM(lnGataInainteT2) + ' dupa=' + TRANSFORM(lnGataDupaT2) + ' din total=' + TRANSFORM(lnTotalNefiltratT2) + ' - cu filtrul pus vizibile=' + TRANSFORM(lnVizibileT2) + ' gasita sub filtru=' + TRANSFORM(llGasitaSubFiltruT2) + ' chkDeCompletat.Caption=[' + lcCaptionT2 + '] N=' + TRANSFORM(lnNT2)
|
||||
|
||||
DO PrTest WITH 'T2 filtrul ascunde factura completata, restul raman vizibile', lnGataDupaT2 = lnGataInainteT2 + 1 AND lnVizibileT2 = lnAsteptatVizibileT2 AND !llGasitaSubFiltruT2, 'vizibile=' + TRANSFORM(lnVizibileT2) + '/' + TRANSFORM(lnAsteptatVizibileT2) + ' gasita sub filtru=' + TRANSFORM(llGasitaSubFiltruT2)
|
||||
|
||||
DO PrTest WITH 'T2 ActualizeazaContoare numara TOATE randurile, nu doar cele vizibile prin filtru', lnNT2 = lnAsteptatVizibileT2, 'N=' + TRANSFORM(lnNT2) + ' asteptat=' + TRANSFORM(lnAsteptatVizibileT2) + ' (daca N=' + TRANSFORM(lnTotalNefiltratT2) + ' inseamna ca numaratoarea a fost pacalita de filtru)'
|
||||
|
||||
loForm.chkDeCompletat.Value = .F.
|
||||
loForm.AplicaFiltruDeCompletat()
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
DO PrLogLocal WITH ''
|
||||
DO PrLogLocal WITH '=== REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail) + ' ==='
|
||||
|
||||
IF USED('crsLipsuriLista')
|
||||
USE IN (SELECT('crsLipsuriLista'))
|
||||
ENDIF
|
||||
|
||||
DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
|
||||
CATCH TO loEx
|
||||
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
|
||||
ENDTRY
|
||||
|
||||
DO PrFinal
|
||||
QUIT
|
||||
|
||||
**********************************************************
|
||||
* crsFacturi/crsDetaliiFacturi pentru toate facturile ZZTEST 'curente' - copie de schema din
|
||||
* test_lipsuri_lista_echivalenta.prg::BuildCursoare, cu PRIVATE poFacturi/poFacturiDetalii mutat
|
||||
* la nivelul testului (do_cauta -> actualizeaza_grid1 le foloseste nedeclarate, prin lantul de apel)
|
||||
PROCEDURE BuildCursoare
|
||||
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), 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 = [cod_fiscal_emitent LIKE '9999700%' AND numar_act LIKE '%-C']
|
||||
lcFiltruOriginal = []
|
||||
llModParam = .T.
|
||||
llAfiseaza = .F.
|
||||
|
||||
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 (select id from anaf_efactura where cod_fiscal_emitent LIKE '9999700%' and xnumar_act LIKE '%-C')]
|
||||
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
|
||||
|
||||
**********************************************************
|
||||
* copie fidela din test_lipsuri_lista_echivalenta.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)
|
||||
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (15, 'Marfuri','371', 1, 15)
|
||||
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
|
||||
|
||||
**********************************************************
|
||||
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
|
||||
|
||||
**********************************************************
|
||||
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
|
||||
|
||||
**********************************************************
|
||||
PROCEDURE PrFinal
|
||||
DO PrLogLocal WITH 'DONE ' + TTOC(DATETIME())
|
||||
ENDPROC
|
||||
Reference in New Issue
Block a user