sync SVN r18216

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019WVojuH5cuQwzKfxdn94oM
This commit is contained in:
2026-09-28 15:51:11 +03:00
parent 88bd6627d5
commit 2519cac3dc

View File

@@ -282,6 +282,7 @@ Define Class ExtrasBanca As Custom
lCreeazaParteneri = .F. && creeaza parteneri daca nu exista (dupa cod fiscal) lCreeazaParteneri = .F. && creeaza parteneri daca nu exista (dupa cod fiscal)
lFactura = .F. lFactura = .F.
lComanda = .F. lComanda = .F.
lCurier = .F. && borderou de curier: rambursul se potriveste doar pe suma exacta, fara FIFO si avans
cFile = '' && fisierul de import cFile = '' && fisierul de import
@@ -634,6 +635,14 @@ Define Class ExtrasBanca As Custom
lcPartener = '' lcPartener = ''
ENDIF ENDIF
ENDIF ENDIF
* la curier: toate fisele cu aceeasi denumire, in orice ordine a cuvintelor, intra in grupul partenerului
IF This.lCurier And !EMPTY(m.lnIdPartener) And Empty(m.lcCodFiscal)
AdaugaGrupNume(m.lnIdPartener, m.lcDenumire)
* si denumirea din baza, cand partenerul a fost gasit prin normalizare
IF !(Upper(m.lcPartener) == m.lcDenumire)
AdaugaGrupNume(m.lnIdPartener, Upper(m.lcPartener))
ENDIF
ENDIF
ENDIF ENDIF
* Caut partener dupa IBAN * Caut partener dupa IBAN
@@ -881,13 +890,13 @@ Define Class ExtrasBanca As Custom
* Aloc facturile deschise ale partenerului pe suma randului: numar din text, suma exacta, FIFO, rest pe avans * Aloc facturile deschise ale partenerului pe suma randului: numar din text, suma exacta, FIFO, rest pe avans
llAlocatFacturi = .F. llAlocatFacturi = .F.
If This.lFactura And !Empty(m.lnIdPartener) And Inlist(m.lcContPartener, '401', '4111') And m.llMonedaNationala If This.lFactura And !Empty(m.lnIdPartener) And Inlist(m.lcContPartener, '401', '4111') And m.llMonedaNationala
llAlocatFacturi = AlocaFacturiRand(m.lcTip, m.lcContPartener, m.lnIdPartener, m.lcPartener) llAlocatFacturi = AlocaFacturiRand(m.lcTip, m.lcContPartener, m.lnIdPartener, m.lcPartener, This.lCurier)
Endif Endif
* Acum asociez doar UN SINGUR DOCUMENT, daca este completat in detaliile operatiei * Acum asociez doar UN SINGUR DOCUMENT, daca este completat in detaliile operatiei
* Incerc sa aflu documentul pereche dupa cont, partener, suma, numar document doar daca am un singur document!!! daca sunt mai multe se complica cazurile * Incerc sa aflu documentul pereche dupa cont, partener, suma, numar document doar daca am un singur document!!! daca sunt mai multe se complica cazurile
If This.lComanda And !m.llAlocatFacturi && daca este configurata optiunea sa se caute documentele pereche dupa comanda If This.lComanda And !m.llAlocatFacturi And !This.lCurier && daca este configurata optiunea sa se caute documentele pereche dupa comanda
lcDocumente = Alltrim(cActTemp.comenzi) lcDocumente = Alltrim(cActTemp.comenzi)
lnSuma = cActTemp.suma lnSuma = cActTemp.suma
lnDocumente = Getwordcount(m.lcDocumente, ",") lnDocumente = Getwordcount(m.lcDocumente, ",")
@@ -1108,9 +1117,10 @@ Enddefine && ExtrasBanca
* Aloca randul curent din cActTemp (SCAN activ in CreeazaNote) pe facturile deschise ale partenerului, din cSolduriFact: * Aloca randul curent din cActTemp (SCAN activ in CreeazaNote) pe facturile deschise ale partenerului, din cSolduriFact:
* N (numar din text) -> S (suma exacta unica) -> F (FIFO) -> A (rest pe avans 419/409, doar pe contul de baza 4111/401) * N (numar din text) -> S (suma exacta unica) -> F (FIFO) -> A (rest pe avans 419/409, doar pe contul de baza 4111/401)
* Scrie alocarile in cAlocTemp (nrec, npoz, id_fact, nract, cont, acont, suma, csursa); intoarce .T. daca a alocat ceva * Scrie alocarile in cAlocTemp (nrec, npoz, id_fact, nract, cont, acont, suma, csursa); intoarce .T. daca a alocat ceva
* La curier (tlCurier): S pe tot grupul de nume, fara F si A - fara potrivire unica randul ramane intreg
* -------------------------------------------------------------------- * --------------------------------------------------------------------
Function AlocaFacturiRand Function AlocaFacturiRand
Lparameters tcTip, tcContPartener, tnIdPartener, tcPartener Lparameters tcTip, tcContPartener, tnIdPartener, tcPartener, tlCurier
Local lnRest, lnSuma, lcNumere, lnNpoz, lcContAloc, lcContAvans, llAvansDeschis Local lnRest, lnSuma, lcNumere, lnNpoz, lcContAloc, lcContAvans, llAvansDeschis
Local lnIdPartCandidat, lcPartCandidat, lnRecCrt, lcSelect Local lnIdPartCandidat, lcPartCandidat, lnRecCrt, lcSelect
@@ -1152,6 +1162,15 @@ Function AlocaFacturiRand
Endif Endif
Endif Endif
* 2. S - suma exacta unica, doar daca pasul 1 n-a alocat nimic; la curier pe tot grupul de nume
If m.lnNpoz = 0
If m.tlCurier
AlocaSumaExactaGrup(m.tnIdPartener, m.tcContPartener, m.lnSuma, m.lnRecCrt, @lnRest, @lnNpoz, @lcContAloc, @lnIdPartCandidat, @lcPartCandidat)
Else
AlocaSumaExacta(m.lnIdPartCandidat, m.tcContPartener, m.lnSuma, m.lnRecCrt, @lnRest, @lnNpoz, @lcContAloc)
Endif
Endif
If m.lnNpoz > 0 And m.lnIdPartCandidat <> m.tnIdPartener If m.lnNpoz > 0 And m.lnIdPartCandidat <> m.tnIdPartener
Select cActTemp Select cActTemp
Go m.lnRecCrt Go m.lnRecCrt
@@ -1162,9 +1181,10 @@ Function AlocaFacturiRand
Endif Endif
Endif Endif
* 2. S - suma exacta unica, doar daca pasul 1 n-a alocat nimic * curier: un ramburs = o factura; fara potrivire unica randul ramane intreg, nealocat
If m.lnNpoz = 0 If m.tlCurier
AlocaSumaExacta(m.lnIdPartCandidat, m.tcContPartener, m.lnSuma, m.lnRecCrt, @lnRest, @lnNpoz, @lcContAloc) Select (m.lcSelect)
Return (m.lnNpoz > 0)
Endif Endif
llAvansDeschis = Used('cAvansExistent') And Seek(m.tnIdPartener, 'cAvansExistent') llAvansDeschis = Used('cAvansExistent') And Seek(m.tnIdPartener, 'cAvansExistent')
@@ -1324,6 +1344,82 @@ Procedure AlocaSumaExacta
Use In (Select('cCandRand')) Use In (Select('cCandRand'))
Endproc Endproc
* --------------------------------------------------------------------
* S la curier: exact un candidat cu ramasul egal cu suma, pe partenerul randului sau pe grupul lui (cGrupParteneriCui);
* il aloca integral si intoarce partenerul lui in tnIdPartCandidat / tcPartCandidat
* --------------------------------------------------------------------
Procedure AlocaSumaExactaGrup
Lparameters tnIdPart, tcCont, tnSuma, tnRecCrt, tnRest, tnNpoz, tcContAloc, tnIdPartCandidat, tcPartCandidat
Local lnCandidati, lnRecPotrivit, lnIdPotrivit, lcPartPotrivit
If Used('cGrupSuma')
Use In (Select('cGrupSuma'))
Endif
Create Cursor cGrupSuma (id_part N(10), denumire C(100))
Insert Into cGrupSuma (id_part, denumire) Values (m.tnIdPart, m.tcPartCandidat)
If Used('cGrupParteneriCui')
Select cGrupParteneriCui
Scan For id_part_ales = m.tnIdPart And id_part <> m.tnIdPart
Insert Into cGrupSuma (id_part, denumire) Values (cGrupParteneriCui.id_part, cGrupParteneriCui.denumire)
Select cGrupParteneriCui
Endscan
Endif
lnCandidati = 0
lnRecPotrivit = 0
lnIdPotrivit = 0
lcPartPotrivit = ''
Select cGrupSuma
Scan
DeschideCandidatiFactura(cGrupSuma.id_part, m.tcCont)
Select cCandRand
Scan
If RamasFactura(nrecsold) = m.tnSuma
lnCandidati = m.lnCandidati + 1
lnRecPotrivit = nrecsold
lnIdPotrivit = cGrupSuma.id_part
lcPartPotrivit = Alltrim(cGrupSuma.denumire)
Endif
Endscan
Use In (Select('cCandRand'))
Select cGrupSuma
Endscan
Use In (Select('cGrupSuma'))
If m.lnCandidati = 1
tnIdPartCandidat = m.lnIdPotrivit
tcPartCandidat = m.lcPartPotrivit
AplicaAlocareFactura(m.tnRecCrt, m.lnRecPotrivit, "S", @tnRest, @tnNpoz, @tcContAloc)
Endif
Endproc
* --------------------------------------------------------------------
* Adauga in cGrupParteneriCui, pentru partenerul ales, partenerii activi cu aceeasi denumire in orice ordine a cuvintelor
* --------------------------------------------------------------------
Procedure AdaugaGrupNume
Lparameters tnIdPartener, tcDenumire
Local lcVariante, lcLista, lnI, lcSql
lcVariante = m.tcDenumire + ';' + GetNamePermutations(m.tcDenumire, .T.)
lcLista = ''
For lnI = 1 To Getwordcount(m.lcVariante, ';')
lcLista = m.lcLista + Iif(Empty(m.lcLista), '', ',') + "'" + Strtran(Alltrim(Getwordnum(m.lcVariante, m.lnI, ';')), "'", "''") + "'"
Endfor
lcSql = [select id_part, denumire from nom_parteneri where sters = 0 and inactiv = 0 and trim(upper(denumire)) in (] + m.lcLista + [)]
If goExecutor.oExecuta(m.lcSql, 'cGrupNumeTemp')
Select cGrupNumeTemp
Scan For id_part <> m.tnIdPartener
Select cGrupParteneriCui
Locate For id_part_ales = m.tnIdPartener And id_part = cGrupNumeTemp.id_part
If !Found()
Insert Into cGrupParteneriCui (id_part_ales, id_part, denumire) Values (m.tnIdPartener, cGrupNumeTemp.id_part, Alltrim(Nvl(cGrupNumeTemp.denumire, '')))
Endif
Select cGrupNumeTemp
Endscan
Use In (Select('cGrupNumeTemp'))
Endif
Endproc
* -------------------------------------------------------------------- * --------------------------------------------------------------------
* F - aloca in ordine cronologica pana la epuizarea sumei (ultima factura poate ramane platita partial), doar pe contul randului * F - aloca in ordine cronologica pana la epuizarea sumei (ultima factura poate ramane platita partial), doar pe contul randului
* -------------------------------------------------------------------- * --------------------------------------------------------------------
@@ -3086,6 +3182,7 @@ Define Class ExtrasBanca_General As ExtrasBanca
IF EMPTY(this.cIBAN) IF EMPTY(this.cIBAN)
This.cIBAN = m.mtipimport This.cIBAN = m.mtipimport
ENDIF ENDIF
This.lCurier = Inlist(m.mtipimport, "GLS", "FAN", "Cargus", "SameDay")
Endfunc Endfunc
* *
Procedure csvFirstBank Procedure csvFirstBank