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:
@@ -282,6 +282,7 @@ Define Class ExtrasBanca As Custom
|
||||
lCreeazaParteneri = .F. && creeaza parteneri daca nu exista (dupa cod fiscal)
|
||||
lFactura = .F.
|
||||
lComanda = .F.
|
||||
lCurier = .F. && borderou de curier: rambursul se potriveste doar pe suma exacta, fara FIFO si avans
|
||||
|
||||
cFile = '' && fisierul de import
|
||||
|
||||
@@ -634,6 +635,14 @@ Define Class ExtrasBanca As Custom
|
||||
lcPartener = ''
|
||||
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
|
||||
|
||||
* 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
|
||||
llAlocatFacturi = .F.
|
||||
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
|
||||
|
||||
|
||||
* 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
|
||||
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)
|
||||
lnSuma = cActTemp.suma
|
||||
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:
|
||||
* 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
|
||||
* La curier (tlCurier): S pe tot grupul de nume, fara F si A - fara potrivire unica randul ramane intreg
|
||||
* --------------------------------------------------------------------
|
||||
Function AlocaFacturiRand
|
||||
Lparameters tcTip, tcContPartener, tnIdPartener, tcPartener
|
||||
Lparameters tcTip, tcContPartener, tnIdPartener, tcPartener, tlCurier
|
||||
Local lnRest, lnSuma, lcNumere, lnNpoz, lcContAloc, lcContAvans, llAvansDeschis
|
||||
Local lnIdPartCandidat, lcPartCandidat, lnRecCrt, lcSelect
|
||||
|
||||
@@ -1152,6 +1162,15 @@ Function AlocaFacturiRand
|
||||
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
|
||||
Select cActTemp
|
||||
Go m.lnRecCrt
|
||||
@@ -1162,9 +1181,10 @@ Function AlocaFacturiRand
|
||||
Endif
|
||||
Endif
|
||||
|
||||
* 2. S - suma exacta unica, doar daca pasul 1 n-a alocat nimic
|
||||
If m.lnNpoz = 0
|
||||
AlocaSumaExacta(m.lnIdPartCandidat, m.tcContPartener, m.lnSuma, m.lnRecCrt, @lnRest, @lnNpoz, @lcContAloc)
|
||||
* curier: un ramburs = o factura; fara potrivire unica randul ramane intreg, nealocat
|
||||
If m.tlCurier
|
||||
Select (m.lcSelect)
|
||||
Return (m.lnNpoz > 0)
|
||||
Endif
|
||||
|
||||
llAvansDeschis = Used('cAvansExistent') And Seek(m.tnIdPartener, 'cAvansExistent')
|
||||
@@ -1324,6 +1344,82 @@ Procedure AlocaSumaExacta
|
||||
Use In (Select('cCandRand'))
|
||||
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
|
||||
* --------------------------------------------------------------------
|
||||
@@ -3086,6 +3182,7 @@ Define Class ExtrasBanca_General As ExtrasBanca
|
||||
IF EMPTY(this.cIBAN)
|
||||
This.cIBAN = m.mtipimport
|
||||
ENDIF
|
||||
This.lCurier = Inlist(m.mtipimport, "GLS", "FAN", "Cargus", "SameDay")
|
||||
Endfunc
|
||||
*
|
||||
Procedure csvFirstBank
|
||||
|
||||
Reference in New Issue
Block a user