Files
comun/utile/Teste/efactura_import/test_cablare_partener_ef.prg
2026-09-11 16:44:00 +03:00

342 lines
16 KiB
Plaintext

* 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, explicatia4ROA V(100) null, explicatia5ROA 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), explicatia V(100), explicatia4 V(100), explicatia5 V(100)
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