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
189 lines
8.8 KiB
Plaintext
189 lines
8.8 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 ==='
|
|
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
|