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

193 lines
9.4 KiB
Plaintext

* 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, ultimele 12 ==='
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
DO PrTest WITH 'RO20709900053983 -> 709900053983 (14 cifre, ultimele 12)', loCoada.NrActDinNumarAct('RO20709900053983') = 709900053983
DO PrTest WITH '017524993734246 -> 524993734246 (15 cifre, ultimele 12)', loCoada.NrActDinNumarAct('017524993734246') = 524993734246
DO PrTest WITH '1021024019453 -> 21024019453 (13 cifre, ultimele 12, zeroul din fata cade)', loCoada.NrActDinNumarAct('1021024019453') = 21024019453
DO PrTest WITH '259105268697 -> 259105268697 (12 cifre, neschimbat)', loCoada.NrActDinNumarAct('259105268697') = 259105268697
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