From de23611b4d818d6b5597c05407fd91af24e961f6 Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Tue, 18 Aug 2026 13:34:53 +0300 Subject: [PATCH] Import parteneri: cautare pe codul salvat si preluarea partenerului cel mai vechi Importul cauta partenerul dupa codul brut din XML, dar il salva pe cel intors de GetCodFiscalValid, care la persoana fizica poate lua CNP-ul din campul de serie CI / pasaport. Cand cele doua difera, partenerul nu era gasit niciodata si pack_def.adauga_partener respingea inserarea ("Mai exista un partener cu acest CNP"), oprind tot importul. - cautarea se face acum pe codul cu care partenerul chiar se salveaza, cu revenire pe codul brut si pe cheia externa a importului; - GetIdPartener() intoarce partenerul cel mai vechi cand mai multi au acelasi cod fiscal; - GetIdPartenerROA() preia partenerul existent din ROA dupa refuzul procedurii, ca importul sa continue; se opreste doar daca nici acolo nu exista; - lcCod nu mai e suprascris cu codul fiscal, deci in coresp_parteneri se scrie iar cheia externa, nu codul fiscal. Verificat pe baza reala cu Teste\test_parteneri_roa.prg (doar SELECT, in afara suitei implicite); suita implicita ramane PASS. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01PTZNiJg2pZk1rky1rpw94u --- Teste/test_parteneri_roa.prg | 87 +++++++++++++ changelog_flora2roa.txt | 10 ++ docs/depanare_testare_flora2roa.md | 3 + flora2roa.txt | 2 +- frm_import.sc2 | 191 +++++++++++++++++++---------- 5 files changed, 230 insertions(+), 63 deletions(-) create mode 100644 Teste/test_parteneri_roa.prg diff --git a/Teste/test_parteneri_roa.prg b/Teste/test_parteneri_roa.prg new file mode 100644 index 0000000..e415a23 --- /dev/null +++ b/Teste/test_parteneri_roa.prg @@ -0,0 +1,87 @@ +* test_parteneri_roa.prg - cautarea partenerului la import, pe datele reale din ROA. +* +* Reguli verificate: +* - cautarea se face pe codul cu care partenerul se salveaza (GetCodFiscalValid), nu pe cel brut +* - cand mai multi parteneri au acelasi cod fiscal, se ia cel mai vechi (id_part minim) +* +* Testul e READ ONLY (doar SELECT) si NU face parte din suita implicita: cere Oracle. +* vfp9.exe -A -T "D:\PROIECTE\FLORA\FLORA2ROA\Teste\test_parteneri_roa.prg" + +#INCLUDE "comun.h" + +SET SAFETY OFF +SET TALK OFF + +PUBLIC gcUILog, gcSyncDir, gnTestFail, gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip +gnTestFail = 0 +gnMockRaspuns = 6 +gcMockUltimMesaj = '' +gnMockUltimTip = 0 + +LOCAL lcTestDir, lcSqlPart, lnSucces, lnTip, lcCodSalvat, lnIdVechi, lnIdGasit +lcTestDir = ADDBS(JUSTPATH(SYS(16, 0))) +gcUILog = lcTestDir + 'test_parteneri_roa_log.txt' +gcSyncDir = lcTestDir + 'uisync\' +IF !DIRECTORY(gcSyncDir) + MD (gcSyncDir) +ENDIF +STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog) + +SQLSETPROP(0, 'DispLogin', 3) +DO (lcTestDir + 'test_init_env_auto.prg') WITH .T. +SET PROCEDURE TO (lcTestDir + 'ui_harness.prg') ADDITIVE +SET PROCEDURE TO (lcTestDir + 'mock_amessagebox.prg') ADDITIVE +DO HarnessInit + +IF TYPE('gnHandle') <> 'N' OR gnHandle <= 0 + HarnessLog('Fara conexiune la ROA (' + ALLTRIM(goApp.oSettings.host) + '), testul iese controlat.') + DO HarnessDone WITH 'SKIP' + QUIT +ENDIF + +DO FORM (gcAppPath + 'frm_import') NAME goImportFrm NOSHOW +goImportFrm.WindowType = 0 + +* un CNP care in ROA e pe mai multi parteneri: se ia cel mai vechi +LOCAL lcCnpDublat +lcCnpDublat = '1951113297313' +lnSucces = goExecutor.oExecute(GetHash("cSql=>select min(id_part) as id_part, count(*) as nr from nom_parteneri " + ; + "where replace(upper(cod_fiscal), ' ', '') = '" + m.lcCnpDublat + "' and sters = 0??cCursor=>cAsteptat")) +TestAssertEqual(CT_SUCCES, m.lnSucces, 'interogare de control executata') +lnIdVechi = NVL(cAsteptat.id_part, 0) +HarnessLog('CNP ' + m.lcCnpDublat + ': ' + TRANSFORM(cAsteptat.nr) + ' parteneri, cel mai vechi ' + TRANSFORM(m.lnIdVechi)) +TestAssert(m.lnIdVechi > 0, 'CNP-ul de test exista in ROA') + +* cursorul de cautare, ca in CompleteazaParteneriROA +CREATE CURSOR cParteneri (id_part N(10), cod_fiscal C(30) null, denumire C(100) null) +lcSqlPart = [select id_part, cod_fiscal, denumire from nom_parteneri where sters = 0 and inactiv = 0] +lnSucces = goExecutor.oExecute(GetHash("cSql=>" + m.lcSqlPart + '??cCursor=>cParteneriTemp')) +TestAssertEqual(CT_SUCCES, m.lnSucces, 'parteneri ROA cititi') +SELECT cParteneri +APPEND FROM DBF('cParteneriTemp') +INDEX on denumire TAG denumire +INDEX on PADR(STRTRAN(cod_fiscal, ' ', ''),30, ' ') TAG cod_fiscal +USE IN (SELECT('cParteneriTemp')) + +* randul din Fidelio cu campurile inversate: CNP in 'serie CI / pasaport' +lnTip = 0 +lcCodSalvat = GetCodFiscalValid('PX920016', @lnTip, 'STRATON ADRIAN FLORIN', m.lcCnpDublat, '') +TestAssertEqual(m.lcCnpDublat, m.lcCodSalvat, 'CNP-ul din serie CI este codul care se salveaza') + +lnIdGasit = goImportFrm.GetIdPartener(PADR('PX920016', 30, ' '), PADR('STRATON ADRIAN FLORIN', 100, ' ')) +TestAssertEqual(0, m.lnIdGasit, 'codul brut din import nu gaseste partenerul') + +lnIdGasit = goImportFrm.GetIdPartener(PADR(m.lcCodSalvat, 30, ' '), PADR('STRATON ADRIAN FLORIN', 100, ' ')) +TestAssertEqual(m.lnIdVechi, m.lnIdGasit, 'codul salvat gaseste partenerul cel mai vechi') + +lnIdGasit = goImportFrm.GetIdPartenerROA(m.lcCodSalvat) +TestAssertEqual(m.lnIdVechi, m.lnIdGasit, 'cautarea in ROA da tot partenerul cel mai vechi') + +TestAssertEqual(0, goImportFrm.GetIdPartenerROA(''), 'cod fiscal gol: nu se cauta in ROA') + +goImportFrm.Release() +goConn.Disconnect() + +HarnessLog('REZULTAT: ' + TestRezultat()) +DO HarnessDone WITH TestRezultat() +QUIT diff --git a/changelog_flora2roa.txt b/changelog_flora2roa.txt index 206f48c..bfeca33 100644 --- a/changelog_flora2roa.txt +++ b/changelog_flora2roa.txt @@ -1,3 +1,13 @@ + +