Compare commits
3 Commits
8857e8fedf
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| de23611b4d | |||
| 36b116c00d | |||
| 8c4a14deb1 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -103,3 +103,4 @@ _textcache/
|
||||
docs/diff_*.patch
|
||||
docs/local/
|
||||
.gstack/
|
||||
flora2roa.zip
|
||||
|
||||
87
Teste/test_parteneri_roa.prg
Normal file
87
Teste/test_parteneri_roa.prg
Normal file
@@ -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
|
||||
@@ -1,3 +1,13 @@
|
||||
<!--
|
||||
18/08/2026
|
||||
FLORA2ROA - 2.0.7
|
||||
|
||||
:eroare:
|
||||
Importul nu se mai opreste cand partenerul exista deja in ROA cu acelasi cod fiscal sau CNP:
|
||||
este folosit partenerul cel mai vechi cu acel cod.
|
||||
Partenerii al caror CNP a fost scris in campul de serie CI sunt acum regasiti corect, fara sa mai fie adaugati inca o data.
|
||||
-->
|
||||
|
||||
<!--
|
||||
02/08/2026
|
||||
FLORA2ROA - 2.0.6
|
||||
|
||||
@@ -39,6 +39,9 @@ Specific FLORA2ROA:
|
||||
- `test_conectare_roa.prg` - verifica drumul CU conectare la Oracle: fie se conecteaza si
|
||||
executa o interogare de proba, fie raporteaza esecul si iese controlat. NU e in suita
|
||||
implicita (depinde de reteaua/serverul Oracle).
|
||||
- `test_parteneri_roa.prg` - cautarea partenerului la import, pe datele reale din ROA:
|
||||
cautarea se face pe codul cu care partenerul se salveaza, iar cand mai multi parteneri au
|
||||
acelasi cod fiscal se ia cel mai vechi. Doar SELECT-uri, NU e in suita implicita (cere Oracle).
|
||||
|
||||
## Comenzi uzuale
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
2.0.6
|
||||
2.0.7
|
||||
129
frm_import.sc2
129
frm_import.sc2
@@ -47,6 +47,8 @@ DEFINE CLASS form1 AS form
|
||||
*m: disconnectmentor
|
||||
*m: disconnectroa
|
||||
*m: exportdate
|
||||
*m: getidpartener
|
||||
*m: getidpartenerroa
|
||||
*m: scrienote
|
||||
*m: sql_temp_insert
|
||||
*m: sterge_import
|
||||
@@ -73,6 +75,8 @@ DEFINE CLASS form1 AS form
|
||||
<memberdata name="nhandlementor" display="nHandleMentor"/>
|
||||
<memberdata name="disconnectmentor" display="DisconnectMentor"/>
|
||||
<memberdata name="completeazaparteneriroa" display="CompleteazaParteneriROA"/>
|
||||
<memberdata name="getidpartener" display="GetIdPartener"/>
|
||||
<memberdata name="getidpartenerroa" display="GetIdPartenerROA"/>
|
||||
</VFPData>
|
||||
*</PropValue>
|
||||
|
||||
@@ -278,7 +282,7 @@ DEFINE CLASS form1 AS form
|
||||
Local lcItem1, lcItem2, lcItem3, lcItem4, lcJudet, lcJudetBucuresti, lcLocalitate, lcNumar
|
||||
Local lcPrincipala, lcScara, lcSqlJudete, lcSqlLocalitati, lcSqlPart, lcStrada, lcTelefon1
|
||||
Local lcTelefon2, lcWeb, lnIdJudet, lnIdJudetBucuresti, lnIdLocalitateBucuresti, lnIdTaraRO, lnPos
|
||||
Local lnRecc
|
||||
Local lnRecc, lcCodBrut
|
||||
*:Global pcDenumire, pnIdAdresa, pnNrAdrese
|
||||
|
||||
*:Global pcCodFiscal, pnIdPart
|
||||
@@ -353,12 +357,8 @@ DEFINE CLASS form1 AS form
|
||||
lnRecc = RECCOUNT()
|
||||
Scan
|
||||
pnIdPart = 0
|
||||
pcCodFiscal = PADR(STRTRAN(cod_fiscal, ' ', ''),30, ' ')
|
||||
pcDenumire = PADR(Alltrim(Upper(denumire)), 100, ' ')
|
||||
lcAdresa = Strtran(Alltrim(Upper(Nvl(adresa, ''))), Chr(13), ' ')
|
||||
IF LEN(ALLTRIM(m.pcCodFiscal)) <= 3
|
||||
pcCodFiscal = PADL(ALLTRIM(cod), 10, '0')
|
||||
ENDIF
|
||||
|
||||
lcCod = cod
|
||||
IF MOD(RECNO(), 250) = 0
|
||||
@@ -375,23 +375,6 @@ DEFINE CLASS form1 AS form
|
||||
|
||||
|
||||
|
||||
SELECT cParteneri
|
||||
DO CASE
|
||||
CASE !Empty(m.pcCodFiscal)
|
||||
IF SEEK(m.pcCodFiscal, 'cParteneri', 'cod_fiscal')
|
||||
pnIdPart = cParteneri.id_part
|
||||
ENDIF
|
||||
OTHERWISE
|
||||
IF SEEK(m.pcDenumire, 'cParteneri', 'denumire')
|
||||
pnIdPart = cParteneri.id_part
|
||||
ENDIF
|
||||
ENDCASE
|
||||
If !Empty(Nvl(m.pnIdPart, 0))
|
||||
Replace id_part With m.pnIdPart In cClientiFurnizori
|
||||
*!* lcMesaj = 'Client existent ' + Alltrim(cParteneri.denumire) + ' CUI: ' + Alltrim(cParteneri.cod_fiscal) + ' ID: ' + Alltrim(Transform(cParteneri.id_part))
|
||||
*!* Thisform.trace(m.lcMesaj)
|
||||
Else
|
||||
* Adaugare clienti
|
||||
Select cClientiFurnizori
|
||||
lcDenumire = Nvl(Strtran(Alltrim(Upper(denumire)), ['], ['']), "")
|
||||
lcNume = Nvl(Strtran(Alltrim(Upper(denumire)), ['], ['']), "")
|
||||
@@ -399,22 +382,22 @@ DEFINE CLASS form1 AS form
|
||||
lcCod_fiscal = Upper(Alltrim(cod_fiscal))
|
||||
lcReg_comert = Nvl(Alltrim(Upper(reg_com)), "")
|
||||
***************************
|
||||
lcCod=Alltrim(Upper(Nvl(m.lcCod_fiscal,"")))
|
||||
lcCodBrut = Alltrim(Upper(Nvl(m.lcCod_fiscal,"")))
|
||||
lcTip_persoana = "2" && 1 = juridica, 2 = fizica
|
||||
* GetCodFiscalValid decide tipul de persoana din denumire, nr. registrul comertului si
|
||||
* forma codului, apoi curata DOAR CNP-urile invalide ale persoanelor fizice.
|
||||
* Codul unei persoane juridice nu se sterge niciodata: daca e gresit, vrem sa fim
|
||||
* atentionati la validarea declaratiei si sa il corectam in Fidelio, nu sa il ascundem.
|
||||
If !Empty(m.lcCod)
|
||||
If !Empty(m.lcCodBrut)
|
||||
lnTip_persoana = 0
|
||||
lcCodTara = Alltrim(Upper(Nvl(cod_tara, "")))
|
||||
lcCod_fiscal = GetCodFiscalValid(m.lcCod, @lnTip_persoana, m.lcDenumire, m.lcReg_comert, m.lcCodTara)
|
||||
lcCod_fiscal = GetCodFiscalValid(m.lcCodBrut, @lnTip_persoana, m.lcDenumire, m.lcReg_comert, m.lcCodTara)
|
||||
lcTip_persoana = Iif(m.lnTip_persoana = 1, "1", "2")
|
||||
|
||||
Do Case
|
||||
Case m.lcTip_persoana = "2" And Empty(m.lcCod_fiscal)
|
||||
* persoana fizica cu CNP invalid: se salveaza fara CNP (permis la D394/D406)
|
||||
Thisform.trace('CNP invalid, partenerul se salveaza fara CNP: [' + m.lcCod + '] ' + Alltrim(m.lcDenumire))
|
||||
Thisform.trace('CNP invalid, partenerul se salveaza fara CNP: [' + m.lcCodBrut + '] ' + Alltrim(m.lcDenumire))
|
||||
Case m.lcTip_persoana = "1" And !VerifCF(m.lcCod_fiscal)
|
||||
* persoana juridica cu cod fiscal care nu trece validarea romaneasca: poate fi
|
||||
* partener strain (cod valid la el in tara) sau o eroare de operare. Codul ramane,
|
||||
@@ -431,6 +414,24 @@ DEFINE CLASS form1 AS form
|
||||
ENDIF
|
||||
***************************
|
||||
|
||||
* Cautarea se face pe codul cu care partenerul se salveaza in ROA, nu pe cel din import:
|
||||
* GetCodFiscalValid poate lua CNP-ul din campul de serie CI / pasaport.
|
||||
pcCodFiscal = PADR(STRTRAN(m.lcCod_fiscal, ' ', ''), 30, ' ')
|
||||
IF LEN(ALLTRIM(m.pcCodFiscal)) <= 3
|
||||
pcCodFiscal = PADR(STRTRAN(m.lcCodBrut, ' ', ''), 30, ' ')
|
||||
ENDIF
|
||||
IF LEN(ALLTRIM(m.pcCodFiscal)) <= 3
|
||||
pcCodFiscal = PADL(ALLTRIM(cod), 10, '0')
|
||||
ENDIF
|
||||
|
||||
pnIdPart = Thisform.GetIdPartener(m.pcCodFiscal, m.pcDenumire)
|
||||
If !Empty(Nvl(m.pnIdPart, 0))
|
||||
Replace id_part With m.pnIdPart In cClientiFurnizori
|
||||
*!* lcMesaj = 'Client existent ' + Alltrim(cParteneri.denumire) + ' CUI: ' + Alltrim(cParteneri.cod_fiscal) + ' ID: ' + Alltrim(Transform(cParteneri.id_part))
|
||||
*!* Thisform.trace(m.lcMesaj)
|
||||
Else
|
||||
* Adaugare clienti
|
||||
|
||||
lcId_loc_inreg = 'NULL'
|
||||
lcId_categ_ent = 'NULL'
|
||||
lcPrefix = ""
|
||||
@@ -451,15 +452,25 @@ DEFINE CLASS form1 AS form
|
||||
lnSucces = goExecutor.oExecute(GetHash("cSql=>" + m.lcSqlInsert))
|
||||
If !Empty(Nvl(m.pnIdPart, 0))
|
||||
Replace id_part With m.pnIdPart In cClientiFurnizori
|
||||
Thisform.trace('Client nou ' + Alltrim(cClientiFurnizori.denumire) + ' CUI: ' + Alltrim(cClientiFurnizori.cod_fiscal) + ' ID: ' + Alltrim(Transform(cClientiFurnizori.id_part)))
|
||||
INSERT INTO cParteneri (id_part, denumire, cod_fiscal) VALUES (m.pnIdPart, cClientiFurnizori.denumire, cClientiFurnizori.cod_fiscal)
|
||||
Thisform.trace('Client nou ' + Alltrim(m.lcDenumire) + ' CUI: ' + Alltrim(m.lcCod_fiscal) + ' ID: ' + Alltrim(Transform(m.pnIdPart)))
|
||||
INSERT INTO cParteneri (id_part, denumire, cod_fiscal) VALUES (m.pnIdPart, m.pcDenumire, m.pcCodFiscal)
|
||||
Else
|
||||
lcMesaj = 'Eroare la adaugarea in clienti ROA ' + Alltrim(cParteneri.denumire) + ' CUI: ' + Alltrim(cParteneri.cod_fiscal) + Chr(13) + Chr(10) + goExecutor.oPrelucrareEroare()
|
||||
|
||||
* Codul fiscal exista deja in ROA, uneori pe mai multi parteneri: se preia cel mai vechi si
|
||||
* importul continua. Doar daca nici asa nu se gaseste partenerul, importul se opreste.
|
||||
lcMesaj = goExecutor.oPrelucrareEroare()
|
||||
pnIdPart = Thisform.GetIdPartenerROA(m.lcCod_fiscal)
|
||||
If !Empty(Nvl(m.pnIdPart, 0))
|
||||
Replace id_part With m.pnIdPart In cClientiFurnizori
|
||||
INSERT INTO cParteneri (id_part, denumire, cod_fiscal) VALUES (m.pnIdPart, m.pcDenumire, m.pcCodFiscal)
|
||||
Thisform.trace('Partener existent in ROA ' + Alltrim(m.lcDenumire) + ' CUI: ' + Alltrim(m.lcCod_fiscal) + ;
|
||||
' ID: ' + Alltrim(Transform(m.pnIdPart)) + ' (' + Alltrim(m.lcMesaj) + ')')
|
||||
Else
|
||||
lcMesaj = 'Eroare la adaugarea in clienti ROA ' + Alltrim(m.lcDenumire) + ' CUI: ' + ;
|
||||
Alltrim(m.lcCod_fiscal) + Chr(13) + Chr(10) + m.lcMesaj
|
||||
Thisform.trace(m.lcMesaj)
|
||||
aMessagebox(m.lcMesaj)
|
||||
SET STEP ON
|
||||
Exit
|
||||
Endif
|
||||
Endif && !Empty(Nvl(m.pnIdPart,0))
|
||||
Endif && !Empty(Nvl(m.pnIdPart,0))
|
||||
|
||||
@@ -1745,6 +1756,62 @@ DEFINE CLASS form1 AS form
|
||||
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE getidpartener
|
||||
* Cauta partenerul in cursorul cParteneri, intai dupa cod fiscal, apoi dupa denumire.
|
||||
* Cand mai multi parteneri au acelasi cod fiscal, il intoarce pe cel mai vechi (id_part minim).
|
||||
Lparameters tcCodFiscal, tcDenumire
|
||||
Local lcCheie, lnArie, lnIdPart
|
||||
|
||||
lnIdPart = 0
|
||||
lnArie = Select()
|
||||
If !Empty(m.tcCodFiscal)
|
||||
lcCheie = Padr(Strtran(Upper(Alltrim(m.tcCodFiscal)), ' ', ''), 30, ' ')
|
||||
Select cParteneri
|
||||
Set Order To Tag cod_fiscal
|
||||
If Seek(m.lcCheie, 'cParteneri', 'cod_fiscal')
|
||||
Scan Rest While Padr(Strtran(cod_fiscal, ' ', ''), 30, ' ') == m.lcCheie
|
||||
If m.lnIdPart = 0 Or cParteneri.id_part < m.lnIdPart
|
||||
lnIdPart = cParteneri.id_part
|
||||
Endif
|
||||
Endscan
|
||||
Endif
|
||||
Endif
|
||||
If Empty(m.tcCodFiscal) And !Empty(m.tcDenumire)
|
||||
Select cParteneri
|
||||
Set Order To Tag denumire
|
||||
If Seek(Padr(Alltrim(Upper(m.tcDenumire)), 100, ' '), 'cParteneri', 'denumire')
|
||||
lnIdPart = cParteneri.id_part
|
||||
Endif
|
||||
Endif
|
||||
Select (m.lnArie)
|
||||
|
||||
Return m.lnIdPart
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE getidpartenerroa
|
||||
* Intoarce cel mai vechi partener nesters din ROA cu acest cod fiscal (id_part minim), 0 daca nu exista.
|
||||
Lparameters tcCodFiscal
|
||||
Local lcCod, lcSql, lnArie, lnIdPart, lnSucces
|
||||
|
||||
lnIdPart = 0
|
||||
lcCod = Strtran(Upper(Alltrim(Nvl(m.tcCodFiscal, ''))), ' ', '')
|
||||
If Empty(m.lcCod)
|
||||
Return 0
|
||||
Endif
|
||||
|
||||
lnArie = Select()
|
||||
lcSql = [select min(id_part) as id_part from nom_parteneri where replace(upper(cod_fiscal), ' ', '') = '] + ;
|
||||
m.lcCod + [' and sters = 0]
|
||||
lnSucces = goExecutor.oExecute(GetHash("cSql=>" + m.lcSql + '??cCursor=>cPartExistent'))
|
||||
If m.lnSucces >= 0 And Used('cPartExistent')
|
||||
lnIdPart = Nvl(cPartExistent.id_part, 0)
|
||||
Use In (Select('cPartExistent'))
|
||||
Endif
|
||||
Select (m.lnArie)
|
||||
|
||||
Return m.lnIdPart
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Init
|
||||
Local ldData1, ldData2, ldLastDay, lnHeight, lnWidth
|
||||
|
||||
|
||||
Reference in New Issue
Block a user