Import parteneri: se curata doar CNP-urile invalide, codul persoanelor juridice ramane neatins
This commit is contained in:
133
Teste/test_cod_fiscal_real.prg
Normal file
133
Teste/test_cod_fiscal_real.prg
Normal file
@@ -0,0 +1,133 @@
|
||||
* test_cod_fiscal_real.prg - ruleaza GetCodFiscalValid pe TOATE codurile din XML-urile Fidelio
|
||||
* si scrie un raport, ca sa vedem efectul real inainte de import.
|
||||
*
|
||||
* Verifica invariantii care conteaza pentru declaratii:
|
||||
* - nicio persoana JURIDICA nu ramane fara cod din cauza noastra (codul nu se sterge)
|
||||
* - se sterge cod DOAR la persoane fizice si DOAR cand CNP-ul chiar este invalid
|
||||
* - niciun CNP valid nu se pierde
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\PROIECTE\FLORA\FLORA2ROA\Teste\test_cod_fiscal_real.prg"
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir, gnTestFail, gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnTestFail = 0
|
||||
gnMockRaspuns = 6
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
|
||||
LOCAL lcTestDir
|
||||
lcTestDir = ADDBS(JUSTPATH(SYS(16, 0)))
|
||||
gcUILog = lcTestDir + 'test_cod_fiscal_real_log.txt'
|
||||
gcSyncDir = lcTestDir + 'uisync\'
|
||||
IF !DIRECTORY(gcSyncDir)
|
||||
MD (gcSyncDir)
|
||||
ENDIF
|
||||
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
DO (lcTestDir + 'test_init_env_auto.prg') WITH .F.
|
||||
SET PROCEDURE TO (lcTestDir + 'ui_harness.prg') ADDITIVE
|
||||
SET PROCEDURE TO (lcTestDir + 'mock_amessagebox.prg') ADDITIVE
|
||||
|
||||
DO HarnessInit
|
||||
|
||||
LOCAL lcCale, lcFisier, lnFisiere, lcRaport
|
||||
lcCale = ADDBS(ALLTRIM(goApp.oSettings.cale_import_fidelio))
|
||||
HarnessLog('Citesc XML-urile din: ' + m.lcCale)
|
||||
|
||||
CREATE CURSOR cTot (denumire C(200), cod C(50), reg_com C(50))
|
||||
|
||||
lnFisiere = 0
|
||||
lnSarite = 0
|
||||
lcFisier = SYS(2000, m.lcCale + 'bts_detalii_facturi_rep_*.xml')
|
||||
DO WHILE !EMPTY(m.lcFisier)
|
||||
lnRanduri = 0
|
||||
* fisierele goale sau fara coloanele asteptate se sar controlat
|
||||
TRY
|
||||
lnRanduri = XMLTOCURSOR(m.lcCale + m.lcFisier, 'cUnul', 512)
|
||||
CATCH
|
||||
lnRanduri = 0
|
||||
ENDTRY
|
||||
|
||||
IF m.lnRanduri > 0 AND USED('cUnul') AND ;
|
||||
TYPE('cUnul.codfiscal_cnp') = 'C' AND TYPE('cUnul.cumparator') = 'C'
|
||||
SELECT DISTINCT CAST(ALLTRIM(cumparator) AS C(200)) AS denumire, ;
|
||||
CAST(ALLTRIM(codfiscal_cnp) AS C(50)) AS cod, ;
|
||||
CAST(ALLTRIM(regcomert_ci_pass) AS C(50)) AS reg_com ;
|
||||
FROM cUnul WHERE !EMPTY(NVL(codfiscal_cnp, '')) INTO CURSOR cTemp
|
||||
SELECT cTot
|
||||
APPEND FROM DBF('cTemp')
|
||||
USE IN (SELECT('cTemp'))
|
||||
lnFisiere = m.lnFisiere + 1
|
||||
ELSE
|
||||
lnSarite = m.lnSarite + 1
|
||||
ENDIF
|
||||
|
||||
USE IN (SELECT('cUnul'))
|
||||
lcFisier = SYS(2000, m.lcCale + 'bts_detalii_facturi_rep_*.xml', 1)
|
||||
ENDDO
|
||||
|
||||
HarnessLog('Fisiere citite: ' + TRANSFORM(m.lnFisiere) + ', sarite (goale/fara coloane): ' + TRANSFORM(m.lnSarite))
|
||||
TestAssert(m.lnFisiere > 0, 'exista fisiere XML de analizat')
|
||||
|
||||
SELECT DISTINCT denumire, cod, reg_com FROM cTot INTO CURSOR cUnic
|
||||
HarnessLog('Combinatii distincte nume+cod+regcom: ' + TRANSFORM(RECCOUNT('cUnic')))
|
||||
|
||||
LOCAL lnPF, lnPJ, lnSters, lnPJNevalidat, lnCnpPierdut, lnPJFaraCod
|
||||
LOCAL lnTip, lcRez, lcCifre, lcCod
|
||||
STORE 0 TO lnPF, lnPJ, lnSters, lnPJNevalidat, lnCnpPierdut, lnPJFaraCod
|
||||
lcRaport = 'denumire;cod_import;reg_com;tip;cod_salvat' + CHR(13) + CHR(10)
|
||||
|
||||
SELECT cUnic
|
||||
SCAN
|
||||
lcCod = ALLTRIM(cUnic.cod)
|
||||
lnTip = 0
|
||||
lcRez = GetCodFiscalValid(m.lcCod, @lnTip, cUnic.denumire, cUnic.reg_com)
|
||||
|
||||
IF m.lnTip = 1
|
||||
lnPJ = m.lnPJ + 1
|
||||
* invariant 1: la persoana juridica NU stergem niciodata codul
|
||||
IF EMPTY(m.lcRez) AND !EMPTY(m.lcCod)
|
||||
lnPJFaraCod = m.lnPJFaraCod + 1
|
||||
HarnessLog('EROARE invariant: PJ ramasa fara cod: ' + ALLTRIM(cUnic.denumire) + ' [' + m.lcCod + ']')
|
||||
ENDIF
|
||||
IF !VerifCF(m.lcRez)
|
||||
lnPJNevalidat = m.lnPJNevalidat + 1
|
||||
ENDIF
|
||||
ELSE
|
||||
lnPF = m.lnPF + 1
|
||||
IF EMPTY(m.lcRez)
|
||||
lnSters = m.lnSters + 1
|
||||
* invariant 2: nu stergem CNP-uri VALIDE
|
||||
lcCifre = CHRTRAN(m.lcCod, CHRTRAN(m.lcCod, '0123456789', ''), '')
|
||||
IF LEN(m.lcCifre) = 13 AND cValidCNP(m.lcCifre)
|
||||
lnCnpPierdut = m.lnCnpPierdut + 1
|
||||
HarnessLog('EROARE invariant: CNP valid pierdut: ' + ALLTRIM(cUnic.denumire) + ' [' + m.lcCod + ']')
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
lcRaport = m.lcRaport + ALLTRIM(cUnic.denumire) + ';' + m.lcCod + ';' + ALLTRIM(cUnic.reg_com) + ';' + ;
|
||||
IIF(m.lnTip = 1, 'PJ', 'PF') + ';' + m.lcRez + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
|
||||
STRTOFILE(m.lcRaport, m.lcTestDir + 'raport_cod_fiscal_real.csv', .F.)
|
||||
|
||||
HarnessLog('persoane fizice : ' + TRANSFORM(m.lnPF))
|
||||
HarnessLog('persoane juridice : ' + TRANSFORM(m.lnPJ))
|
||||
HarnessLog('PF cu CNP sters : ' + TRANSFORM(m.lnSters))
|
||||
HarnessLog('PJ cu cod nevalidat RO : ' + TRANSFORM(m.lnPJNevalidat) + ' (raman cu cod, atentioneaza declaratia)')
|
||||
|
||||
TestAssertEqual(0, m.lnPJFaraCod, 'nicio persoana juridica nu ramane fara cod')
|
||||
TestAssertEqual(0, m.lnCnpPierdut, 'niciun CNP valid nu se pierde')
|
||||
TestAssert(m.lnPF + m.lnPJ > 1000, 's-au analizat toti partenerii din exemple')
|
||||
TestAssert(m.lnSters > 0, 'exista CNP-uri invalide care se curata')
|
||||
TestAssert(m.lnPJ > 0, 'exista si persoane juridice detectate')
|
||||
|
||||
DO HarnessStep WITH 0, 'analiza pe date reale'
|
||||
|
||||
HarnessLog('REZULTAT: ' + TestRezultat())
|
||||
DO HarnessDone WITH TestRezultat()
|
||||
|
||||
QUIT
|
||||
Reference in New Issue
Block a user