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)
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user