* 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