* 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