Verificare ANAF la alegerea partenerului
ocautare.prg - miezul functionalitatii: - anaf_verif_cautare: verdictul ANAF pe randul curent din formularul de cautare (label sub grid), la data documentului; discordantele si codurile fiscale invalide cu rosu; F4 sau click deschide detaliile. - ANAF_StarePartener, cu cache pe sesiune, excludere parteneri externi si persoane fizice; ANAF_ValidareCod pentru CIF/CNP. - ANAF_NivelVerificare: cascada RC_ANAF_VERIF_SELECTIE (kill-switch settings.ini > optiuni utilizator > optiuni firma > implicit 1), cu cache invalidat la schimbarea firmei sau utilizatorului; ANAF_ComutaVerificare pentru punctul de meniu. - Detalii: alegerea variantei corecte de partener din perechea RO / fara RO, cu discriminator "are documente in perioada"; dupa Da sau Nu se inchide cautarea si se revine in formular cu partenerul ales (AplicaInlocuirePartenerANAF). - ANAF_CaData: data documentului poate veni si ca DateTime (tact.dataact). - Banda proprie sub grid pentru label: formularul creste cu 54, gridul isi pierde ancorarea de jos si primeste inaltimea din AjusteazaBanda, legata de Resize si Activate - formularul isi reaseaza gridul dupa Show, deci Activate e momentul util. validare.prg: ANAF_VerificaCuiSingle, wrapper single-CUI peste serviciul ANAF, cu data verificarii si o singura eroare logata pe sesiune. cauta_alfa.prg: hook generic - ataseaza poVerifAlegere pe formularul de cautare inainte de Show si il detaseaza dupa. Apelanti opt-in (lVerificaANAF): baza.vc2 (lookup-ul generic de partener din formularele actbaza/actbaza2007 lansate din meniuri), onote_contabile.vc2 (partener debit/credit), omodificari.vc2 (do_cauta din cele trei clase de modificare, cu data notei), ofacturare.vc2 (client, furnizor). Casa/banca ramane in afara: acolo partenerul se alege pentru imperecherea facturilor. cauta_alfa_forms.vc2: F4 deschide detaliile, iar terminarea cautarii trece prin VerificaAlegere. Teste: suita headless pentru fluxul de verificare (utile/Teste/partener_anaf/), cu mock pentru apelul ANAF si pentru dialoguri. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019H3r66sVojGhgaKq5niu1u
This commit is contained in:
@@ -207,8 +207,18 @@ ENDIF
|
||||
Endif
|
||||
.cIdColumn = lcIdColumn
|
||||
Endwith
|
||||
|
||||
If Type('poVerifAlegere') = 'O' And !Isnull(poVerifAlegere)
|
||||
AddProperty(oForm_cautare, 'oVerifAlegere', poVerifAlegere)
|
||||
poVerifAlegere.Activeaza(oForm_cautare)
|
||||
Endif
|
||||
|
||||
oForm_cautare.Show()
|
||||
|
||||
If Type('poVerifAlegere') = 'O' And !Isnull(poVerifAlegere)
|
||||
poVerifAlegere.Dezactiveaza()
|
||||
Endif
|
||||
|
||||
*!* modificare 30.11.2006
|
||||
If Type("lorec") = "O"
|
||||
poRec = lorec
|
||||
|
||||
@@ -39,9 +39,762 @@
|
||||
*!* marius.mutu
|
||||
*!* caut_client_contract_activ - nu se iau contracte active de pe clienti inactivi
|
||||
|
||||
*!* 26.07.2026
|
||||
*!* marius.mutu
|
||||
*!* verificare ANAF la alegerea partenerului: starea la data documentului si codul fiscal invalid pe randul curent
|
||||
*!* din formularul de cautare, detalii si alegerea variantei corecte cu F4, optiunea RC_ANAF_VERIF_SELECTIE
|
||||
|
||||
*!* #DEFINE CRLF CHR(13) + CHR(10)
|
||||
#INCLUDE COMUN\ROA.H
|
||||
|
||||
Procedure ANAF_StarePartener
|
||||
Lparameters tcCodFiscal, tdData
|
||||
|
||||
Local lcCodFiscal, lcCodTara, lcCui, loVerificareCod, loRezANAF, lcCheieCache, lnI, llValid, loOut, ldData
|
||||
|
||||
*** guard mediu partajat - ocautare.prg e inclus si de alte produse ROA fara validare.prg/goLog incarcate
|
||||
If !('VALIDARE' $ Upper(Set('Procedure'))) Or Type('goLog') <> 'O'
|
||||
Return .Null.
|
||||
Endif
|
||||
lcCodFiscal = Alltrim(Nvl(m.tcCodFiscal, ''))
|
||||
If Empty(m.lcCodFiscal)
|
||||
Return .Null.
|
||||
Endif
|
||||
*** excludere parteneri externi (COD_TARA <> RO)
|
||||
loVerificareCod = Createobject("VerificareCod")
|
||||
lcCodTara = loVerificareCod.GetCodTara(m.lcCodFiscal)
|
||||
If m.lcCodTara <> 'RO'
|
||||
Return .Null.
|
||||
Endif
|
||||
*** normalizare + excludere persoane fizice (CNP 13 cifre) / coduri nenumerice dupa eliminarea RO
|
||||
lcCui = NormalizeazaCUI(m.lcCodFiscal)
|
||||
llValid = !Empty(m.lcCui)
|
||||
If m.llValid
|
||||
For lnI = 1 To Len(m.lcCui)
|
||||
If !Isdigit(Substr(m.lcCui, lnI, 1))
|
||||
llValid = .F.
|
||||
Exit
|
||||
Endif
|
||||
Endfor
|
||||
Endif
|
||||
If !m.llValid Or Len(m.lcCui) = 13
|
||||
Return .Null.
|
||||
Endif
|
||||
ldData = ANAF_CaData(m.tdData)
|
||||
If Empty(m.ldData) And Type('poAct.dataact') $ 'DT'
|
||||
ldData = ANAF_CaData(poAct.dataact)
|
||||
Endif
|
||||
If Empty(m.ldData)
|
||||
ldData = Date()
|
||||
Endif
|
||||
*** cache pe sesiune (cheie = CUI normalizat + data verificarii) + apel ANAF (wrapper single-CUI, validare.prg), fara Wait Window
|
||||
If Type('goCacheANAF_Sesiune') <> 'O'
|
||||
Public goCacheANAF_Sesiune
|
||||
goCacheANAF_Sesiune = Createobject('Collection')
|
||||
Endif
|
||||
lcCheieCache = 'C' + m.lcCui + '_' + Dtos(m.ldData)
|
||||
If goCacheANAF_Sesiune.GetKey(m.lcCheieCache) = 0
|
||||
loRezANAF = ANAF_VerificaCuiSingle(m.lcCui, m.ldData)
|
||||
goCacheANAF_Sesiune.Add(Iif(Vartype(m.loRezANAF) = 'O', m.loRezANAF, .F.), m.lcCheieCache)
|
||||
Else
|
||||
loRezANAF = goCacheANAF_Sesiune.Item(m.lcCheieCache)
|
||||
Endif
|
||||
If Vartype(m.loRezANAF) <> 'O'
|
||||
Return .Null. && fara raspuns/CUI negasit -> degradare tacuta
|
||||
Endif
|
||||
*** verdict
|
||||
loOut = Createobject("Empty")
|
||||
Addproperty(loOut, "cCui", m.lcCui)
|
||||
Addproperty(loOut, "lAreRO", Left(Upper(Alltrim(m.lcCodFiscal)), 2) = 'RO')
|
||||
Addproperty(loOut, "lPlatitorANAF", loRezANAF.scpTVA)
|
||||
Addproperty(loOut, "lInactivANAF", loRezANAF.statusInactivi)
|
||||
Addproperty(loOut, "cDenumireANAF", Alltrim(Nvl(loRezANAF.denumire, '')))
|
||||
Addproperty(loOut, "lDiscordanta", (loRezANAF.scpTVA <> loOut.lAreRO) Or loRezANAF.statusInactivi)
|
||||
Addproperty(loOut, "dData", m.ldData)
|
||||
Return loOut
|
||||
Endproc && ANAF_StarePartener
|
||||
|
||||
Procedure ANAF_ValidareCod
|
||||
Lparameters tcCodFiscal, tnTipPersoana
|
||||
|
||||
Local lcCodFiscal, lcCui, loVerificareCod, lnTipPersoana, llCnp
|
||||
If !('VALIDARE' $ Upper(Set('Procedure')))
|
||||
Return ''
|
||||
Endif
|
||||
lcCodFiscal = Alltrim(Nvl(m.tcCodFiscal, ''))
|
||||
If Empty(m.lcCodFiscal)
|
||||
Return ''
|
||||
Endif
|
||||
loVerificareCod = Createobject("VerificareCod")
|
||||
If loVerificareCod.GetCodTara(m.lcCodFiscal) <> 'RO'
|
||||
Return ''
|
||||
Endif
|
||||
lcCui = NormalizeazaCUI(m.lcCodFiscal)
|
||||
lnTipPersoana = Nvl(m.tnTipPersoana, 0)
|
||||
llCnp = Iif(m.lnTipPersoana = 2, .T., Iif(m.lnTipPersoana = 1, .F., Len(m.lcCui) = 13))
|
||||
If m.llCnp
|
||||
Return Iif(loVerificareCod.VALIDARE_CNP(m.lcCui), '', 'CNP invalid (' + m.lcCui + ')')
|
||||
Endif
|
||||
Return Iif(loVerificareCod.VALIDARE_CIF(m.lcCui), '', 'CIF invalid (' + m.lcCui + ')')
|
||||
Endproc && ANAF_ValidareCod
|
||||
|
||||
Procedure ANAF_CaData
|
||||
*** data documentului poate veni si ca DateTime (ex. tact.dataact din note contabile)
|
||||
Lparameters tuValoare
|
||||
Do Case
|
||||
Case Vartype(m.tuValoare) = 'D'
|
||||
Return m.tuValoare
|
||||
Case Vartype(m.tuValoare) = 'T'
|
||||
Return Ttod(m.tuValoare)
|
||||
Otherwise
|
||||
Return {}
|
||||
Endcase
|
||||
Endproc && ANAF_CaData
|
||||
|
||||
Procedure ANAF_NivelVerificare
|
||||
*** cascada RC_ANAF_VERIF_SELECTIE: 0=oprit, 1=verdict pe rand (implicit), 2=rezervat (tratat ca 1), 3=verdict+confirmare
|
||||
Local lcSel, lcCheie, lnNivel, lcVal
|
||||
|
||||
*** kill-switch - doar valoarea explicita '0' opreste; absenta NU seteaza nivelul
|
||||
If Alltrim(Nvl(getini(gcGeneralIniFile, 'anaf', 'verificare_selectie'), '')) == '0'
|
||||
Return 0
|
||||
Endif
|
||||
|
||||
*** cache pe sesiune - cheia (schema + utilizator) invalideaza automat la schimbarea firmei/utilizatorului
|
||||
lcCheie = 'N' + Iif(Type('gcS') = 'C', gcS, '') + '_' + Iif(Type('gnIdUtil') = 'N', Transform(gnIdUtil), '')
|
||||
If Type('goCacheANAF_Nivel') <> 'O'
|
||||
Public goCacheANAF_Nivel
|
||||
goCacheANAF_Nivel = Createobject('Collection')
|
||||
Endif
|
||||
If goCacheANAF_Nivel.GetKey(m.lcCheie) <> 0
|
||||
Return goCacheANAF_Nivel.Item(m.lcCheie)
|
||||
Endif
|
||||
|
||||
lnNivel = 1
|
||||
lcSel = Select()
|
||||
If 'OINIT_OPTIUNI' $ Upper(Set('Procedure'))
|
||||
lcVal = Iif(Used('crsOptiuniUtilizator'), Alltrim(Nvl(citeste_optiune_utilizator('RC_ANAF_VERIF_SELECTIE'), '')), '')
|
||||
If Empty(m.lcVal) And Used('crsOptiuni')
|
||||
lcVal = Alltrim(Nvl(citeste_optiune('RC_ANAF_VERIF_SELECTIE'), ''))
|
||||
Endif
|
||||
If !Empty(m.lcVal)
|
||||
lnNivel = Int(Val(m.lcVal))
|
||||
Endif
|
||||
Endif
|
||||
Select (m.lcSel)
|
||||
|
||||
goCacheANAF_Nivel.Add(m.lnNivel, m.lcCheie)
|
||||
Return m.lnNivel
|
||||
Endproc && ANAF_NivelVerificare
|
||||
|
||||
Procedure ANAF_CautaPereche
|
||||
Lparameters tcCui, tcCursor
|
||||
|
||||
Local lcSelect, lnSucces
|
||||
lcSelect = [SELECT ID_PART, DENUMIRE, COD_FISCAL, INACTIV FROM NOM_PARTENERI ] + ;
|
||||
[WHERE STERS = 0 AND (UPPER(REPLACE(COD_FISCAL,' ','')) = '] + m.tcCui + [' ] + ;
|
||||
[OR UPPER(REPLACE(COD_FISCAL,' ','')) = 'RO] + m.tcCui + [') ORDER BY UPPER(DENUMIRE), ID_PART]
|
||||
If Used(m.tcCursor)
|
||||
Use In (m.tcCursor)
|
||||
Endif
|
||||
lnSucces = goExecutor.oExecute(m.lcSelect, m.tcCursor)
|
||||
If m.lnSucces < 0
|
||||
goLog.Log('ANAF_CautaPereche: ' + goExecutor.cEroare, 'ANAF_CautaPereche')
|
||||
If Used(m.tcCursor)
|
||||
Use In (m.tcCursor)
|
||||
Endif
|
||||
Return .F. && degradare tacuta
|
||||
Endif
|
||||
Return .T.
|
||||
Endproc && ANAF_CautaPereche
|
||||
|
||||
Procedure AplicaInlocuirePartenerANAF
|
||||
Lparameters toPartener, toInlocuire, tcTipuriParteneri
|
||||
|
||||
Local lnRecCnt
|
||||
If Vartype(m.toInlocuire) <> 'O' Or Isnull(m.toPartener) Or Type('toPartener.id_part') <> 'N'
|
||||
Return
|
||||
Endif
|
||||
toPartener.id_part = toInlocuire.nIdPart
|
||||
If Type('toPartener.denumire') = 'C'
|
||||
toPartener.denumire = toInlocuire.cDenumire
|
||||
Endif
|
||||
If Type('toPartener.nume') = 'C'
|
||||
toPartener.nume = toInlocuire.cDenumire
|
||||
Endif
|
||||
toPartener.cod_fiscal = toInlocuire.cCodFiscal
|
||||
*** recalculeaza tip pentru id-ul perechii, acelasi criteriu ca SELECT-ul gridului (coresp_tip_part)
|
||||
If Type('toPartener.tip') = 'N' And !Empty(Nvl(m.tcTipuriParteneri, ''))
|
||||
lnRecCnt = 0
|
||||
goExecutor.oSelect2Value([SELECT COUNT(*) AS NR FROM CORESP_TIP_PART WHERE ID_PART = ] + Transform(toInlocuire.nIdPart) + ;
|
||||
[ AND ID_TIP_PART IN (] + m.tcTipuriParteneri + [)], @lnRecCnt)
|
||||
toPartener.tip = Iif(Nvl(m.lnRecCnt, 0) > 0, 0, 1)
|
||||
Endif
|
||||
goLog.Log('ANAF: inlocuire partener -> id_part=' + Transform(toInlocuire.nIdPart), 'AplicaInlocuirePartenerANAF')
|
||||
Endproc && AplicaInlocuirePartenerANAF
|
||||
|
||||
Procedure ANAF_ComutaVerificare
|
||||
*** valori: 0 = oprit, 1 = starea pe randul curent, 3 = starea si confirmarea la partener discordant, 9 = oprit pe acest calculator
|
||||
Local lcSel, lcOptiune, lcEticheta, lcValIni, lcValUtil, lcValFirma, lcSursa, lnNivel, lnNou, lcMesaj
|
||||
|
||||
lcEticheta = 'Verificare ANAF la alegerea partenerului'
|
||||
lcOptiune = 'RC_ANAF_VERIF_SELECTIE'
|
||||
lcSel = Select()
|
||||
lcValIni = Alltrim(Nvl(getini(gcGeneralIniFile, 'anaf', 'verificare_selectie'), ''))
|
||||
lcValUtil = ''
|
||||
lcValFirma = ''
|
||||
If 'OINIT_OPTIUNI' $ Upper(Set('Procedure'))
|
||||
lcValUtil = Iif(Used('crsOptiuniUtilizator'), Alltrim(Nvl(citeste_optiune_utilizator(m.lcOptiune), '')), '')
|
||||
lcValFirma = Iif(Used('crsOptiuni'), Alltrim(Nvl(citeste_optiune(m.lcOptiune), '')), '')
|
||||
Endif
|
||||
Select (m.lcSel)
|
||||
|
||||
lnNivel = ANAF_NivelVerificare()
|
||||
Do Case
|
||||
Case m.lcValIni == '0'
|
||||
lcSursa = 'oprita pe acest calculator (settings.ini)'
|
||||
Case !Empty(m.lcValUtil)
|
||||
lcSursa = 'setata pentru utilizatorul curent'
|
||||
Case !Empty(m.lcValFirma)
|
||||
lcSursa = 'setata pentru firma'
|
||||
Otherwise
|
||||
lcSursa = 'implicita'
|
||||
Endcase
|
||||
|
||||
lcMesaj = 'Acum: ' + Transform(m.lnNivel) + ' - ' + ANAF_TextNivel(m.lnNivel) + Chr(13) + ;
|
||||
'(' + m.lcSursa + ')' + Chr(13) + Chr(13) + ;
|
||||
' 0 = ' + ANAF_TextNivel(0) + Chr(13) + ;
|
||||
' 1 = ' + ANAF_TextNivel(1) + Chr(13) + ;
|
||||
' 3 = ' + ANAF_TextNivel(3) + Chr(13) + ;
|
||||
' 9 = ' + ANAF_TextNivel(9) + Chr(13) + Chr(13) + ;
|
||||
'Valorile 0, 1 si 3 va urmaresc pe orice calculator.'
|
||||
Amessagebox(m.lcMesaj, 0 + 64, lcEticheta)
|
||||
lnNou = aInputBox('Valoarea noua (0, 1, 3 sau 9):', m.lcEticheta, m.lnNivel)
|
||||
If Vartype(m.lnNou) <> 'N' Or !Inlist(m.lnNou, 0, 1, 3, 9)
|
||||
Return
|
||||
Endif
|
||||
|
||||
If m.lnNou = 9
|
||||
setini(gcGeneralIniFile, 'anaf', 'verificare_selectie', '0')
|
||||
Else
|
||||
If m.lcValIni == '0'
|
||||
setini(gcGeneralIniFile, 'anaf', 'verificare_selectie', '1')
|
||||
Endif
|
||||
If !('OINIT_OPTIUNI' $ Upper(Set('Procedure'))) Or !Used('crsOptiuniUtilizator')
|
||||
Amessagebox('Optiunea nu poate fi salvata: lipseste lista de optiuni ale utilizatorului.', 0 + 48, lcEticheta)
|
||||
Return
|
||||
Endif
|
||||
lcSel = Select()
|
||||
scrie_optiune_utilizator(m.lcOptiune, Alltrim(Str(m.lnNou)), 'VERIFICARE ANAF LA ALEGEREA PARTENERULUI')
|
||||
Select (m.lcSel)
|
||||
Endif
|
||||
If Type('goCacheANAF_Nivel') = 'O'
|
||||
Release goCacheANAF_Nivel
|
||||
Endif
|
||||
Endproc && ANAF_ComutaVerificare
|
||||
|
||||
Procedure ANAF_TextNivel
|
||||
Lparameters tnNivel
|
||||
Do Case
|
||||
Case m.tnNivel = 0
|
||||
Return 'fara verificare'
|
||||
Case m.tnNivel = 9
|
||||
Return 'oprita pe acest calculator, pentru toti utilizatorii lui'
|
||||
Case m.tnNivel >= 3
|
||||
Return 'arata starea si intreaba la alegerea unui partener discordant'
|
||||
Otherwise
|
||||
Return 'arata starea partenerului la ANAF pe randul curent'
|
||||
Endcase
|
||||
Endproc && ANAF_TextNivel
|
||||
|
||||
DEFINE CLASS anaf_timer AS Timer
|
||||
oOwner = .Null.
|
||||
Interval = 400
|
||||
Enabled = .F.
|
||||
|
||||
PROCEDURE Timer
|
||||
This.Enabled = .F.
|
||||
If Vartype(This.oOwner) = 'O'
|
||||
This.oOwner.VerificaRand(.F.)
|
||||
Endif
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS anaf_label AS Label
|
||||
FontName = 'Arial'
|
||||
FontSize = 10
|
||||
BackStyle = 0
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS anaf_verif_cautare AS Custom
|
||||
oForm = .Null.
|
||||
oTimer = .Null.
|
||||
nIdPart = 0
|
||||
oStare = .Null.
|
||||
cCui = ''
|
||||
dDataDoc = {}
|
||||
oCandidati = .Null.
|
||||
nNivel = 1
|
||||
lDecis = .F. && 27.07.2026 claude - decizia a fost deja luata in Detalii
|
||||
|
||||
PROCEDURE Activeaza
|
||||
Lparameters toForm
|
||||
Local lcCursor, llCreat
|
||||
If Vartype(m.toForm) <> 'O' Or toForm.lAles
|
||||
Return
|
||||
Endif
|
||||
lcCursor = toForm.crs_cursor
|
||||
If !Used(m.lcCursor) Or Type(m.lcCursor + '.cod_fiscal') <> 'C' Or Type(m.lcCursor + '.id_part') <> 'N'
|
||||
Return
|
||||
Endif
|
||||
llCreat = .F.
|
||||
Try
|
||||
toForm.NewObject('lb_anaf', '_label', '_baza.vcx')
|
||||
llCreat = .T.
|
||||
Catch
|
||||
llCreat = .F.
|
||||
Endtry
|
||||
If !m.llCreat
|
||||
Try
|
||||
toForm.AddObject('lb_anaf', 'anaf_label')
|
||||
llCreat = .T.
|
||||
Catch
|
||||
llCreat = .F.
|
||||
Endtry
|
||||
Endif
|
||||
If !m.llCreat
|
||||
Return
|
||||
Endif
|
||||
This.oForm = toForm
|
||||
This.oTimer = Createobject('anaf_timer')
|
||||
This.oTimer.oOwner = This
|
||||
*!* 27.07.2026 claude - banda proprie sub grid, inalta cat doua linii de label
|
||||
If Type('toForm._GRID1') = 'O' And Bitand(toForm._GRID1.Anchor, 8) = 8
|
||||
toForm._GRID1.Anchor = toForm._GRID1.Anchor - 8 && inaltimea gridului o dau eu, in AjusteazaBanda
|
||||
Endif
|
||||
toForm.Height = toForm.Height + 54
|
||||
With toForm.lb_anaf
|
||||
.AutoSize = .F.
|
||||
.BackStyle = 0
|
||||
.WordWrap = .T.
|
||||
.MousePointer = 15
|
||||
.Left = 8
|
||||
.Width = toForm.Width - 20
|
||||
.Height = 46
|
||||
.Top = toForm.Height - 50
|
||||
.Caption = ''
|
||||
.Visible = .T.
|
||||
.Anchor = 14
|
||||
Endwith
|
||||
Bindevent(toForm.lb_anaf, 'Click', This, 'Detalii')
|
||||
Bindevent(toForm, 'Resize', This, 'AjusteazaBanda')
|
||||
Bindevent(toForm, 'Activate', This, 'AjusteazaBanda')
|
||||
This.AjusteazaBanda()
|
||||
Bindevent(toForm._GRID1, 'AfterRowColChange', This, 'DupaRand')
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AjusteazaBanda
|
||||
*** gridul ramane ancorat jos; il opresc doar sa intre peste banda labelului
|
||||
Local lnMax
|
||||
If Vartype(This.oForm) <> 'O' Or Type('This.oForm._GRID1') <> 'O'
|
||||
Return
|
||||
Endif
|
||||
If Bitand(This.oForm._GRID1.Anchor, 8) = 8
|
||||
This.oForm._GRID1.Anchor = This.oForm._GRID1.Anchor - 8
|
||||
Endif
|
||||
lnMax = This.oForm.Height - 58 - This.oForm._GRID1.Top
|
||||
If m.lnMax > 60
|
||||
This.oForm._GRID1.Height = m.lnMax
|
||||
Endif
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Dezactiveaza
|
||||
If Vartype(This.oTimer) = 'O'
|
||||
This.oTimer.Enabled = .F.
|
||||
This.oTimer.oOwner = .Null.
|
||||
This.oTimer = .Null.
|
||||
Endif
|
||||
If Vartype(This.oForm) = 'O'
|
||||
Try
|
||||
Unbindevents(This.oForm, 'Resize', This, 'AjusteazaBanda')
|
||||
Unbindevents(This.oForm, 'Activate', This, 'AjusteazaBanda')
|
||||
Catch
|
||||
Endtry
|
||||
If Type('This.oForm.lb_anaf') = 'O'
|
||||
Try
|
||||
Unbindevents(This.oForm.lb_anaf)
|
||||
Catch
|
||||
Endtry
|
||||
Endif
|
||||
If Type('This.oForm._GRID1') = 'O'
|
||||
Try
|
||||
Unbindevents(This.oForm._GRID1)
|
||||
Catch
|
||||
Endtry
|
||||
Endif
|
||||
Endif
|
||||
This.oForm = .Null.
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DupaRand
|
||||
Lparameters nColIndex
|
||||
If Vartype(This.oTimer) = 'O'
|
||||
This.oTimer.Enabled = .F.
|
||||
This.oTimer.Enabled = .T.
|
||||
Endif
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaRand
|
||||
Lparameters tlSincron
|
||||
Local lcCursor, lnId, lcCodFiscal, loStare, lnTipPersoana, lcCodInvalid
|
||||
If Vartype(This.oForm) <> 'O'
|
||||
Return .F.
|
||||
Endif
|
||||
If Vartype(This.oTimer) = 'O'
|
||||
This.oTimer.Enabled = .F.
|
||||
Endif
|
||||
lcCursor = This.oForm.crs_cursor
|
||||
If !Used(m.lcCursor) Or Reccount(m.lcCursor) = 0
|
||||
This.SeteazaLabel('', .F.)
|
||||
This.nIdPart = 0
|
||||
This.oStare = .Null.
|
||||
This.cCui = ''
|
||||
Return .F.
|
||||
Endif
|
||||
lnId = Nvl(Evaluate(m.lcCursor + '.id_part'), 0)
|
||||
lcCodFiscal = Alltrim(Nvl(Evaluate(m.lcCursor + '.cod_fiscal'), ''))
|
||||
If m.lnId = 0
|
||||
This.SeteazaLabel('', .F.)
|
||||
Return .F.
|
||||
Endif
|
||||
If m.lnId = This.nIdPart
|
||||
Return !Isnull(This.oStare)
|
||||
Endif
|
||||
lnTipPersoana = Iif(Type(m.lcCursor + '.tip_persoana') = 'N', Nvl(Evaluate(m.lcCursor + '.tip_persoana'), 0), 0)
|
||||
lcCodInvalid = ANAF_ValidareCod(m.lcCodFiscal, m.lnTipPersoana)
|
||||
If !Empty(m.lcCodInvalid)
|
||||
This.nIdPart = m.lnId
|
||||
This.oStare = .Null.
|
||||
This.cCui = ''
|
||||
This.SeteazaLabel(m.lcCodInvalid + ' (F4 = detalii)', .T.)
|
||||
goLog.Log('Cod fiscal invalid: ' + m.lcCodInvalid + ' id_part=' + Transform(m.lnId), 'anaf_verif_cautare')
|
||||
Return .F.
|
||||
Endif
|
||||
This.SeteazaLabel('Verificare ANAF...', .F.)
|
||||
loStare = ANAF_StarePartener(m.lcCodFiscal, This.dDataDoc)
|
||||
This.nIdPart = m.lnId
|
||||
This.oStare = m.loStare
|
||||
This.cCui = Iif(Isnull(m.loStare), '', loStare.cCui)
|
||||
Do Case
|
||||
Case Isnull(m.loStare)
|
||||
This.SeteazaLabel('', .F.)
|
||||
Return .F.
|
||||
Case !loStare.lDiscordanta
|
||||
This.SeteazaLabel(This.TextAnaf(m.loStare, .F., 24) + ' (F4 = detalii)', .F.)
|
||||
Otherwise
|
||||
This.SeteazaLabel(This.TextAnaf(m.loStare, .F., 24) + ' (F4 = detalii)', .T.)
|
||||
goLog.Log('Discordanta ANAF: CUI=' + loStare.cCui + ' id_part=' + Transform(m.lnId) + ;
|
||||
' scpTVA=' + Transform(loStare.lPlatitorANAF) + ' inactivANAF=' + Transform(loStare.lInactivANAF), 'anaf_verif_cautare')
|
||||
Endcase
|
||||
Return .T.
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE SeteazaLabel
|
||||
Lparameters tcText, tlAvertisment
|
||||
If Vartype(This.oForm) <> 'O'
|
||||
Return
|
||||
Endif
|
||||
With This.oForm.lb_anaf
|
||||
.Caption = m.tcText
|
||||
.ForeColor = Iif(m.tlAvertisment, Rgb(192, 0, 0), Rgb(0, 128, 0))
|
||||
.FontBold = m.tlAvertisment
|
||||
Endwith
|
||||
This.oForm.lb_anaf.Refresh()
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE TextStare
|
||||
Lparameters toStare
|
||||
Return Iif(toStare.lPlatitorANAF, 'Platitor TVA', 'Neplatitor TVA') + Iif(toStare.lInactivANAF, ' (inactiv la ANAF)', '')
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE TextAnaf
|
||||
Lparameters toStare, tlCuVirgula, tnMaxLen
|
||||
Local lcCodOk, lcDenANAF, lcDenFull
|
||||
lcCodOk = Iif(toStare.lPlatitorANAF, 'RO', '') + toStare.cCui
|
||||
lcDenFull = Alltrim(Nvl(toStare.cDenumireANAF, ''))
|
||||
lcDenANAF = lcDenFull
|
||||
If Vartype(m.tnMaxLen) = 'N' And m.tnMaxLen > 0 And Len(m.lcDenFull) > m.tnMaxLen
|
||||
lcDenANAF = Left(m.lcDenFull, m.tnMaxLen) + '...'
|
||||
Endif
|
||||
Return 'ANAF: ' + This.TextStare(toStare) + ' (' + ;
|
||||
Iif(Empty(m.lcDenANAF), '', m.lcDenANAF + Iif(m.tlCuVirgula, ', ', ' ')) + m.lcCodOk + ')' + ;
|
||||
' la ' + Dtoc(toStare.dData)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE AntetDialog
|
||||
Lparameters tcDenAles, tcCodAles
|
||||
Local lcAntet
|
||||
lcAntet = Alltrim(m.tcDenAles) + ' (CUI: ' + Alltrim(m.tcCodAles) + ', ID: ' + Transform(This.nIdPart) + ')' + Chr(13) + Chr(13)
|
||||
If !Isnull(This.oStare)
|
||||
lcAntet = m.lcAntet + This.TextAnaf(This.oStare, .T.) + Chr(13) + Chr(13)
|
||||
Endif
|
||||
Return m.lcAntet
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE ListaCorecti
|
||||
Lparameters tnCandidati, tnCandidat, tcDenPereche, tlEroare
|
||||
Local lcCursorP, lcLista, lcCodOk, loCandidat
|
||||
lcCodOk = Iif(This.oStare.lPlatitorANAF, 'RO', '') + This.cCui
|
||||
lcLista = ''
|
||||
tnCandidati = 0
|
||||
tnCandidat = 0
|
||||
tcDenPereche = ''
|
||||
tlEroare = .F.
|
||||
This.oCandidati = Createobject('Collection')
|
||||
lcCursorP = Sys(2015)
|
||||
If ANAF_CautaPereche(This.cCui, m.lcCursorP)
|
||||
Select (m.lcCursorP)
|
||||
Scan For Chrtran(Upper(Alltrim(Nvl(cod_fiscal, ''))), ' ', '') == Upper(m.lcCodOk) And id_part <> This.nIdPart
|
||||
tnCandidati = m.tnCandidati + 1
|
||||
lcLista = m.lcLista + ' ' + Transform(m.tnCandidati) + '. ' + Alltrim(Nvl(denumire, '')) + ;
|
||||
' (ID: ' + Transform(id_part) + ')' + Iif(Nvl(inactiv, 0) = 1, ' inactiv', '') + Chr(13)
|
||||
loCandidat = Createobject('Empty')
|
||||
Addproperty(loCandidat, 'nIdPart', id_part)
|
||||
Addproperty(loCandidat, 'cDenumire', Alltrim(Nvl(denumire, '')))
|
||||
Addproperty(loCandidat, 'lInactiv', Nvl(inactiv, 0) = 1)
|
||||
Addproperty(loCandidat, 'lAreDocumente', .F.)
|
||||
This.oCandidati.Add(loCandidat)
|
||||
If m.tnCandidati = 1
|
||||
tnCandidat = id_part
|
||||
tcDenPereche = Alltrim(Nvl(denumire, ''))
|
||||
Endif
|
||||
Endscan
|
||||
Use In (m.lcCursorP)
|
||||
Else
|
||||
tlEroare = .T.
|
||||
Endif
|
||||
Return m.lcLista
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE MarcheazaDocumente
|
||||
*** discriminator "are documente in perioada" - un singur SELECT, apelat doar din Detalii
|
||||
Local lcSirId, lcCursorD, lnI, loCand
|
||||
If Vartype(This.oCandidati) <> 'O' Or This.oCandidati.Count = 0 Or Type('gnAn') <> 'N' Or Type('gnLuna') <> 'N'
|
||||
Return
|
||||
Endif
|
||||
lcSirId = ''
|
||||
For lnI = 1 To This.oCandidati.Count
|
||||
lcSirId = m.lcSirId + Iif(Empty(m.lcSirId), '', ',') + Transform(This.oCandidati.Item(m.lnI).nIdPart)
|
||||
Endfor
|
||||
lcCursorD = Sys(2015)
|
||||
If goExecutor.oExecute([SELECT DISTINCT ID_PART FROM IREG_PARTENERI WHERE AN = ] + Transform(gnAn) + ;
|
||||
[ AND LUNA = ] + Transform(gnLuna) + [ AND ID_PART IN (] + m.lcSirId + [)], m.lcCursorD) < 0
|
||||
goLog.Log('MarcheazaDocumente: ' + goExecutor.cEroare, 'anaf_verif_cautare')
|
||||
If Used(m.lcCursorD)
|
||||
Use In (m.lcCursorD)
|
||||
Endif
|
||||
Return
|
||||
Endif
|
||||
Select (m.lcCursorD)
|
||||
Scan
|
||||
For lnI = 1 To This.oCandidati.Count
|
||||
loCand = This.oCandidati.Item(m.lnI)
|
||||
If loCand.nIdPart = id_part
|
||||
loCand.lAreDocumente = .T.
|
||||
Endif
|
||||
Endfor
|
||||
Endscan
|
||||
Use In (m.lcCursorD)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE TextListaCandidati
|
||||
Local lcLista, lnI, loCand
|
||||
lcLista = ''
|
||||
If Vartype(This.oCandidati) = 'O'
|
||||
For lnI = 1 To This.oCandidati.Count
|
||||
loCand = This.oCandidati.Item(m.lnI)
|
||||
lcLista = m.lcLista + ' ' + Transform(m.lnI) + '. ' + Alltrim(loCand.cDenumire) + ;
|
||||
' (ID: ' + Transform(loCand.nIdPart) + ')' + Iif(loCand.lInactiv, ' inactiv', '') + ;
|
||||
Iif(loCand.lAreDocumente, ' are documente in perioada', '') + Chr(13)
|
||||
Endfor
|
||||
Endif
|
||||
Return m.lcLista
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Detalii
|
||||
Local lcCursor, lcDenAles, lcCodAles, lcCodOk, lcLista, lcMesaj, lnCandidati, lnCandidat, lcDenPereche
|
||||
Local lnRasp, lnAles, loAles, llEroare
|
||||
If Vartype(This.oForm) <> 'O'
|
||||
Return
|
||||
Endif
|
||||
poANAFInlocuire = .Null.
|
||||
|
||||
lcCursor = This.oForm.crs_cursor
|
||||
lcDenAles = Alltrim(Nvl(Evaluate(m.lcCursor + '.denumire'), Nvl(Evaluate(m.lcCursor + '.nume'), '')))
|
||||
lcCodAles = Alltrim(Nvl(Evaluate(m.lcCursor + '.cod_fiscal'), ''))
|
||||
|
||||
If Isnull(This.oStare)
|
||||
Amessagebox(This.AntetDialog(m.lcDenAles, m.lcCodAles) + 'ANAF nu a raspuns - verificarea a fost sarita.', ;
|
||||
0 + 64, 'Verificare partener ANAF')
|
||||
Return
|
||||
Endif
|
||||
|
||||
lcCodOk = Iif(This.oStare.lPlatitorANAF, 'RO', '') + This.cCui
|
||||
lnCandidati = 0
|
||||
lnCandidat = 0
|
||||
lcDenPereche = ''
|
||||
llEroare = .F.
|
||||
This.ListaCorecti(@lnCandidati, @lnCandidat, @lcDenPereche, @llEroare)
|
||||
|
||||
If m.llEroare
|
||||
Amessagebox(This.AntetDialog(m.lcDenAles, m.lcCodAles) + 'Nu s-a putut citi lista de parteneri.', ;
|
||||
0 + 64, 'Verificare partener ANAF')
|
||||
Return
|
||||
Endif
|
||||
|
||||
If m.lnCandidati = 0
|
||||
Amessagebox(This.AntetDialog(m.lcDenAles, m.lcCodAles) + ;
|
||||
'Nu exista partener cu CUI ' + m.lcCodOk + ' (il puteti crea cu butonul Nou).', 0 + 64, 'Verificare partener ANAF')
|
||||
Return
|
||||
Endif
|
||||
|
||||
This.MarcheazaDocumente()
|
||||
lcLista = This.TextListaCandidati()
|
||||
lcMesaj = This.AntetDialog(m.lcDenAles, m.lcCodAles) + 'Parteneri ROA cu CUI ' + m.lcCodOk + ':' + Chr(13) + m.lcLista + Chr(13) + ;
|
||||
'Da = Pastreaza selectia' + Chr(13) + ;
|
||||
Iif(m.lnCandidati = 1, 'Nu = Alege 1 ' + m.lcDenPereche + ' (ID: ' + Transform(m.lnCandidat) + ')', ;
|
||||
'Nu = Alege din lista (1-' + Transform(m.lnCandidati) + ')') + Chr(13) + ;
|
||||
'Abandon = Renunta'
|
||||
Do While .T.
|
||||
lnRasp = Amessagebox(m.lcMesaj, 3 + 48, 'Verificare partener ANAF')
|
||||
Do Case
|
||||
Case m.lnRasp = 7 && Nu - alege alt partener din lista
|
||||
lnAles = 1
|
||||
If m.lnCandidati > 1
|
||||
lnAles = aInputBox('Numarul variantei (1-' + Transform(m.lnCandidati) + ')', 'Verificare ANAF', 1)
|
||||
If Vartype(m.lnAles) <> 'N' Or m.lnAles < 1 Or m.lnAles > m.lnCandidati
|
||||
Loop
|
||||
Endif
|
||||
Endif
|
||||
loAles = This.oCandidati.Item(m.lnAles)
|
||||
poANAFInlocuire = Createobject('Empty')
|
||||
Addproperty(poANAFInlocuire, 'nIdPart', loAles.nIdPart)
|
||||
Addproperty(poANAFInlocuire, 'cDenumire', loAles.cDenumire)
|
||||
Addproperty(poANAFInlocuire, 'cCodFiscal', m.lcCodOk)
|
||||
goLog.Log('Decizie ANAF (Detalii): ALEGE PERECHEA id_part=' + Transform(loAles.nIdPart), 'anaf_verif_cautare')
|
||||
This.lDecis = .T.
|
||||
Exit
|
||||
Case m.lnRasp = 6 && Da - pastreaza selectia curenta
|
||||
goLog.Log('Decizie ANAF (Detalii): CONTINUA CU ALEGEREA', 'anaf_verif_cautare')
|
||||
This.lDecis = .T.
|
||||
Exit
|
||||
Otherwise && Abandon - renunta la alegerea unei variante
|
||||
poANAFInlocuire = .Null.
|
||||
goLog.Log('Decizie ANAF (Detalii): RENUNTA', 'anaf_verif_cautare')
|
||||
Exit
|
||||
Endcase
|
||||
Enddo
|
||||
*!* 27.07.2026 claude - dupa Da/Nu se inchide cautarea, ca sa revina in formular cu partenerul ales
|
||||
If (m.lnRasp = 6 Or m.lnRasp = 7) And Pemstatus(This.oForm, 'do_termin', 5)
|
||||
This.oForm.do_termin()
|
||||
Endif
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaAlegere
|
||||
Lparameters toForm
|
||||
Local lcCursor, lcDenAles, lcCodAles, lcCodOk, lnCandidati, lnCandidat, lcDenPereche
|
||||
Local lcLista, lcMesaj, lnRasp, lnAles, loAles, llEroare, lnIdCurent
|
||||
|
||||
If Vartype(This.oForm) <> 'O'
|
||||
Return .T.
|
||||
Endif
|
||||
If This.lDecis
|
||||
Return .T.
|
||||
Endif
|
||||
|
||||
If This.nNivel < 3
|
||||
*** nivel 1/2: fara apel ANAF nou - se logheaza doar starea deja cunoscuta din navigarea prin grid
|
||||
lcCursor = This.oForm.crs_cursor
|
||||
If Used(m.lcCursor) And Reccount(m.lcCursor) > 0
|
||||
lnIdCurent = Nvl(Evaluate(m.lcCursor + '.id_part'), 0)
|
||||
If m.lnIdCurent = This.nIdPart And !Isnull(This.oStare) And This.oStare.lDiscordanta
|
||||
goLog.Log('Alegere partener discordant ANAF (fara confirmare): CUI=' + This.cCui + ' id_part=' + Transform(This.nIdPart) + ;
|
||||
' scpTVA=' + Transform(This.oStare.lPlatitorANAF) + ' inactivANAF=' + Transform(This.oStare.lInactivANAF), 'anaf_verif_cautare')
|
||||
Endif
|
||||
Endif
|
||||
Return .T.
|
||||
Endif
|
||||
|
||||
*** nivel 3: comportamentul de azi, neschimbat (verificare sincrona + confirmare)
|
||||
If !This.VerificaRand(.T.)
|
||||
Return .T.
|
||||
Endif
|
||||
If Isnull(This.oStare) Or !This.oStare.lDiscordanta
|
||||
Return .T.
|
||||
Endif
|
||||
|
||||
lcCursor = This.oForm.crs_cursor
|
||||
lcDenAles = Alltrim(Nvl(Evaluate(m.lcCursor + '.denumire'), Nvl(Evaluate(m.lcCursor + '.nume'), '')))
|
||||
lcCodAles = Alltrim(Nvl(Evaluate(m.lcCursor + '.cod_fiscal'), ''))
|
||||
lcCodOk = Iif(This.oStare.lPlatitorANAF, 'RO', '') + This.cCui
|
||||
|
||||
lnCandidati = 0
|
||||
lnCandidat = 0
|
||||
lcDenPereche = ''
|
||||
llEroare = .F.
|
||||
lcLista = This.ListaCorecti(@lnCandidati, @lnCandidat, @lcDenPereche, @llEroare)
|
||||
|
||||
lcMesaj = This.AntetDialog(m.lcDenAles, m.lcCodAles)
|
||||
If m.llEroare
|
||||
lcMesaj = m.lcMesaj + 'Nu s-a putut citi lista de parteneri.' + Chr(13) + Chr(13) + ;
|
||||
'De acord = Pastreaza selectia' + Chr(13) + ;
|
||||
'Abandon = Inapoi la cautare'
|
||||
lnRasp = Amessagebox(m.lcMesaj, 1 + 48, 'Verificare ANAF')
|
||||
goLog.Log('Decizie ANAF (lista indisponibila): rasp=' + Transform(m.lnRasp), 'anaf_verif_cautare')
|
||||
Return (m.lnRasp = 1)
|
||||
Endif
|
||||
If m.lnCandidati = 0
|
||||
lcMesaj = m.lcMesaj + 'Nu exista partener cu CUI ' + m.lcCodOk + ' (il puteti crea cu butonul Nou).' + Chr(13) + Chr(13) + ;
|
||||
'De acord = Pastreaza selectia' + Chr(13) + ;
|
||||
'Abandon = Inapoi la cautare'
|
||||
lnRasp = Amessagebox(m.lcMesaj, 1 + 48, 'Verificare ANAF')
|
||||
goLog.Log('Decizie ANAF (fara pereche): rasp=' + Transform(m.lnRasp), 'anaf_verif_cautare')
|
||||
Return (m.lnRasp = 1)
|
||||
Endif
|
||||
lcMesaj = m.lcMesaj + 'Parteneri ROA cu CUI ' + m.lcCodOk + ':' + Chr(13) + m.lcLista + Chr(13) + ;
|
||||
'Da = Pastreaza selectia' + Chr(13) + ;
|
||||
Iif(m.lnCandidati = 1, 'Nu = Alege 1 ' + m.lcDenPereche + ' (ID: ' + Transform(m.lnCandidat) + ')', ;
|
||||
'Nu = Alege din lista (1-' + Transform(m.lnCandidati) + ')') + Chr(13) + ;
|
||||
'Abandon = Inapoi la cautare'
|
||||
Do While .T.
|
||||
lnRasp = Amessagebox(m.lcMesaj, 3 + 48, 'Verificare ANAF')
|
||||
Do Case
|
||||
Case m.lnRasp = 7 && Nu - alternativa cu cod fiscal corect (numarul cerut daca sunt mai multe)
|
||||
lnAles = 1
|
||||
If m.lnCandidati > 1
|
||||
lnAles = aInputBox('Numarul variantei (1-' + Transform(m.lnCandidati) + ')', 'Verificare ANAF', 1)
|
||||
If Vartype(m.lnAles) <> 'N' Or m.lnAles < 1 Or m.lnAles > m.lnCandidati
|
||||
Loop
|
||||
Endif
|
||||
Endif
|
||||
loAles = This.oCandidati.Item(m.lnAles)
|
||||
poANAFInlocuire = Createobject('Empty')
|
||||
Addproperty(poANAFInlocuire, 'nIdPart', loAles.nIdPart)
|
||||
Addproperty(poANAFInlocuire, 'cDenumire', loAles.cDenumire)
|
||||
Addproperty(poANAFInlocuire, 'cCodFiscal', m.lcCodOk)
|
||||
goLog.Log('Decizie ANAF: ALEGE PERECHEA id_part=' + Transform(loAles.nIdPart), 'anaf_verif_cautare')
|
||||
Return .T.
|
||||
Case m.lnRasp = 6 && Da - continua cu selectia curenta
|
||||
goLog.Log('Decizie ANAF: CONTINUA CU ALEGEREA', 'anaf_verif_cautare')
|
||||
Return .T.
|
||||
Otherwise && Abandon - inapoi la cautare
|
||||
goLog.Log('Decizie ANAF: RAMAI IN CAUTARE', 'anaf_verif_cautare')
|
||||
Return .F.
|
||||
Endcase
|
||||
Enddo
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
************************************************************************************************************************
|
||||
* CautPartenerContabilitate(cTitlu, cTipuriParteneri)
|
||||
* Date : 04/10/2006
|
||||
@@ -63,6 +816,7 @@ Procedure CautPartenerContabilitate
|
||||
|
||||
|
||||
Local loHash As MyHash, lcSelect, lcTitlu, lcTipuriParteneri, lnSucces, llAllInList, lnPornire, lcFiltruOrig, lcNumeProcedura, llAdaugCorespondente
|
||||
Local lVerificaANAF, ldDataDoc, lnNivelANAF
|
||||
|
||||
*!* parametrii
|
||||
lcTitlu = toHash.GetValue("cTitlu")
|
||||
@@ -73,6 +827,8 @@ Procedure CautPartenerContabilitate
|
||||
lcFiltruOrig = toHash.GetValue("cFiltruOrig")
|
||||
llAllInList = toHash.GetValue("lAllInList")
|
||||
lnPornire = toHash.GetValue("nPornire")
|
||||
lVerificaANAF = toHash.GetValue("lVerificaANAF")
|
||||
ldDataDoc = toHash.GetValue("dDataDoc")
|
||||
|
||||
*!* parametrii
|
||||
|
||||
@@ -93,12 +849,12 @@ Procedure CautPartenerContabilitate
|
||||
If !Empty(lcTipuriParteneri)
|
||||
*!* selectia se face din corespondente tipuri partener
|
||||
lcSelect = [SELECT MIN(CASE WHEN A.ID_TIP_PART in (] + lcTipuriParteneri + [) THEN 0 ELSE 1 END) AS TIP,] + ;
|
||||
[B.ID_PART, B.DENUMIRE AS NUME, B.COD_FISCAL, B.DENUMIRE ] + ;
|
||||
[B.ID_PART, B.DENUMIRE AS NUME, B.COD_FISCAL, B.DENUMIRE, B.TIP_PERSOANA ] + ;
|
||||
[ FROM CORESP_TIP_PART A ] + ;
|
||||
[ LEFT JOIN NOM_PARTENERI B ON A.ID_PART = B.ID_PART ]
|
||||
Else
|
||||
*!* selectia se face din parteneri
|
||||
lcSelect = [SELECT 0 as TIP, B.ID_PART, B.DENUMIRE AS NUME, B.COD_FISCAL, B.DENUMIRE ] + ;
|
||||
lcSelect = [SELECT 0 as TIP, B.ID_PART, B.DENUMIRE AS NUME, B.COD_FISCAL, B.DENUMIRE, B.TIP_PERSOANA ] + ;
|
||||
[ FROM NOM_PARTENERI B ]
|
||||
Endif
|
||||
|
||||
@@ -108,7 +864,7 @@ Procedure CautPartenerContabilitate
|
||||
.SetValue("cFiltru", "1=2")
|
||||
.SetValue("cOrder", "1,NUME")
|
||||
If !Empty(Nvl(lcTipuriParteneri, ''))
|
||||
.SetValue("cGroup", "B.ID_PART, B.DENUMIRE, B.COD_FISCAL")
|
||||
.SetValue("cGroup", "B.ID_PART, B.DENUMIRE, B.COD_FISCAL, B.TIP_PERSOANA")
|
||||
Endif
|
||||
.SetValue("cColoana", "denumire,cod_fiscal,id_part")
|
||||
.SetValue("cTitlu", lcTitlu)
|
||||
@@ -142,8 +898,24 @@ Procedure CautPartenerContabilitate
|
||||
Endwith
|
||||
|
||||
|
||||
Private poVerifAlegere, poANAFInlocuire
|
||||
poVerifAlegere = .Null.
|
||||
poANAFInlocuire = .Null.
|
||||
If m.lVerificaANAF
|
||||
lnNivelANAF = ANAF_NivelVerificare()
|
||||
If m.lnNivelANAF > 0
|
||||
poVerifAlegere = Createobject('anaf_verif_cautare')
|
||||
poVerifAlegere.dDataDoc = ANAF_CaData(m.ldDataDoc)
|
||||
poVerifAlegere.nNivel = m.lnNivelANAF
|
||||
Endif
|
||||
Endif
|
||||
|
||||
loCauta = cauta_alfa_hash(loHash) && 11.07.2007
|
||||
|
||||
If Type('gnbuton') = 'N' And gnbuton = 1
|
||||
AplicaInlocuirePartenerANAF(loCauta, poANAFInlocuire, lcTipuriParteneri)
|
||||
Endif
|
||||
|
||||
*!* ADAUG TIPURI DE PARTENER - PARTENER DACA NU EXISTA
|
||||
If llAdaugCorespondente And !Isnull(loCauta) And Type('loCauta.id_part') = 'N' And loCauta.id_part <> 0 And !Empty(lcTipuriParteneri) And loCauta.tip = 1
|
||||
Do ADAUGA_CORESP_TIP_PART With loCauta.id_part, lcTipuriParteneri In oproceduri_parteneri.prg
|
||||
@@ -158,14 +930,14 @@ Endproc && CautPartenerContabilitate
|
||||
* Date : 04/11/2004, 14:01:21
|
||||
* author : lavinia.viziru
|
||||
******************************************* INCEPUT:caut_parteneri *******************************************
|
||||
Procedure caut_parteneri( tcCont, tcTitlu, tlToateIreg, tlNou, tlInactiv)
|
||||
Procedure caut_parteneri( tcCont, tcTitlu, tlToateIreg, tlNou, tlInactiv, tlVerificaANAF, tdDataDoc)
|
||||
Local lcCont, loCauta, lcFiltruOriginal
|
||||
Local lcTitlu, lcFiltru, lcSchema, lcOrder, lcNumeProc, lcTitluColoane
|
||||
Store "" To loCauta
|
||||
lcCont = tcCont
|
||||
llInactiv = m.tlInactiv && daca arat si partenerii inactivi (ex: la fisa de cont, cand un partener s-a unificat, partenerul vechi este inactiv)
|
||||
|
||||
lcSelect = [select distinct p.denumire, p.nume, p.cod_fiscal, p.id_part, p.inactiv FROM Vcoresp_tip_part p ] + ;
|
||||
lcSelect = [select distinct p.denumire, p.nume, p.cod_fiscal, p.id_part, p.inactiv, p.tip_persoana FROM Vcoresp_tip_part p ] + ;
|
||||
[ join vcoresp_tip_cont c on p.id_tip_part=c.id_tip_part ]
|
||||
lcFiltru = [1=2]
|
||||
lcSchema = []
|
||||
@@ -188,8 +960,26 @@ Procedure caut_parteneri( tcCont, tcTitlu, tlToateIreg, tlNou, tlInactiv)
|
||||
ENDIF
|
||||
|
||||
lcTitluColoane = [Denumire, Nume,Cod fiscal, Id, Inactiv]
|
||||
|
||||
Local lnNivelANAF
|
||||
Private poVerifAlegere, poANAFInlocuire
|
||||
poVerifAlegere = .Null.
|
||||
poANAFInlocuire = .Null.
|
||||
If m.tlVerificaANAF
|
||||
lnNivelANAF = ANAF_NivelVerificare()
|
||||
If m.lnNivelANAF > 0
|
||||
poVerifAlegere = Createobject('anaf_verif_cautare')
|
||||
poVerifAlegere.dDataDoc = ANAF_CaData(m.tdDataDoc)
|
||||
poVerifAlegere.nNivel = m.lnNivelANAF
|
||||
Endif
|
||||
Endif
|
||||
|
||||
loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruOriginal) && 11.07.2007
|
||||
|
||||
If Type('gnbuton') = 'N' And gnbuton = 1
|
||||
AplicaInlocuirePartenerANAF(loCauta, poANAFInlocuire)
|
||||
Endif
|
||||
|
||||
Return loCauta
|
||||
|
||||
Endproc
|
||||
|
||||
@@ -55,6 +55,10 @@
|
||||
*!* marius.mutu
|
||||
*!* ANAF_SincronWebService_PlatitorTva api v9
|
||||
|
||||
*!* 25.07.2026
|
||||
*!* marius.mutu
|
||||
*!* NormalizeazaCUI + ANAF_VerificaCuiSingle (verificare la alegerea partenerului, la data documentului)
|
||||
|
||||
*!* http://ec.europa.eu/taxation_customs/vies/viesquer.do
|
||||
*!* http://localhost/contafinupdate/verificarecod.aspx/verificarecod/verificare/CIF/1879855/MFIN
|
||||
*!* http://localhost/contafinupdate/verificarecod.aspx/verificarecod/verificare/CNP/1810228134187
|
||||
@@ -1546,6 +1550,123 @@ Define Class VerificareCod As Custom
|
||||
Endfunc && GetEmptyMfinObj
|
||||
Enddefine
|
||||
|
||||
*************************************
|
||||
*** Normalizeaza un cod fiscal: UPPER, fara spatii, fara prefixul RO daca restul e numeric
|
||||
*************************************
|
||||
Function NormalizeazaCUI
|
||||
Lparameters tcCui
|
||||
|
||||
Local lcCui, lcRest, lnI, llNumeric
|
||||
lcCui = Upper(Strtran(Alltrim(Nvl(m.tcCui, '')), ' ', ''))
|
||||
If Left(m.lcCui, 2) = 'RO'
|
||||
lcRest = Substr(m.lcCui, 3)
|
||||
llNumeric = !Empty(m.lcRest)
|
||||
For lnI = 1 To Len(m.lcRest)
|
||||
If !Isdigit(Substr(m.lcRest, lnI, 1))
|
||||
llNumeric = .F.
|
||||
Exit
|
||||
Endif
|
||||
Endfor
|
||||
If m.llNumeric
|
||||
lcCui = m.lcRest
|
||||
Endif
|
||||
Endif
|
||||
|
||||
Return m.lcCui
|
||||
Endfunc && NormalizeazaCUI
|
||||
|
||||
*************************************
|
||||
*** Wrapper single-CUI peste VerificareANAF: tdData = data documentului (lipsa -> data curenta), degradare tacuta (.NULL.)
|
||||
*************************************
|
||||
Function ANAF_VerificaCuiSingle
|
||||
Lparameters tcCui, tdData
|
||||
|
||||
Local lcCuiNormalizat, loHTTP, loEx As Exception, loResult, lcServer, lcSend, lcJsonString, lcDataFormatted, ldData
|
||||
Local loVerificareANAF As "VerificareANAF", loCol As "empty", laCoduri[1], lcAliasTemp, lnReccountTemp, lnI, llValid
|
||||
|
||||
If Type('gvANAF_EroareLogataSesiune') = 'U'
|
||||
Public gvANAF_EroareLogataSesiune
|
||||
gvANAF_EroareLogataSesiune = .F.
|
||||
Endif
|
||||
|
||||
lcCuiNormalizat = NormalizeazaCUI(m.tcCui)
|
||||
llValid = !Empty(m.lcCuiNormalizat)
|
||||
If m.llValid
|
||||
For lnI = 1 To Len(m.lcCuiNormalizat)
|
||||
If !Isdigit(Substr(m.lcCuiNormalizat, lnI, 1))
|
||||
llValid = .F.
|
||||
Exit
|
||||
Endif
|
||||
Endfor
|
||||
Endif
|
||||
If !m.llValid
|
||||
Return .Null.
|
||||
Endif
|
||||
|
||||
loResult = .Null.
|
||||
lcAliasTemp = "crsANAFSingleTemp"
|
||||
|
||||
Try
|
||||
loVerificareANAF = Createobject("VerificareANAF") && incarca nfjsonread/nfjsoncreate (Init)
|
||||
|
||||
Try
|
||||
loHTTP = Createobject('winHTTP.winHTTPrequest.5.1')
|
||||
If Pemstatus(m.loHTTP, 'SetTimeouts', 5)
|
||||
loHTTP.SetTimeouts(3000, 3000, 5000, 5000) && rezolvare/conectare 3s, trimitere/primire 5s - de revizuit dupa masuratori (Tema)
|
||||
Endif
|
||||
Catch To loEx
|
||||
loHTTP = Createobject('Microsoft.XMLHTTP')
|
||||
Endtry
|
||||
|
||||
ldData = Iif(Vartype(m.tdData) = 'D' And !Empty(m.tdData), m.tdData, Date())
|
||||
lcDataFormatted = Left(Dtos(m.ldData), 4) + "-" + Substr(Dtos(m.ldData), 5, 2) + "-" + Substr(Dtos(m.ldData), 7, 2)
|
||||
|
||||
loCol = Createobject("empty")
|
||||
Addproperty(loCol, "cui", Int(Val(m.lcCuiNormalizat)))
|
||||
Addproperty(loCol, "data", m.lcDataFormatted)
|
||||
laCoduri[1] = loCol
|
||||
lcSend = nfjsoncreate(@laCoduri)
|
||||
|
||||
lcServer = 'https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva'
|
||||
|
||||
lcJsonString = ''
|
||||
loHTTP.Open('POST', lcServer, .F.)
|
||||
loHTTP.setRequestHeader("Content-Type", "application/json;")
|
||||
loHTTP.Send(lcSend)
|
||||
If loHTTP.Status = 200
|
||||
lcJsonString = Alltrim(loHTTP.responseText)
|
||||
Endif
|
||||
|
||||
If !Empty(m.lcJsonString) And Left(m.lcJsonString, 1) = '{'
|
||||
Use In (Select(m.lcAliasTemp))
|
||||
loVerificareANAF.ParseJsonANAFv8(nfjsonread(m.lcJsonString), m.lcAliasTemp)
|
||||
If Used(m.lcAliasTemp)
|
||||
Select (m.lcAliasTemp)
|
||||
lnReccountTemp = Reccount()
|
||||
If m.lnReccountTemp = 1 And !Empty(denumire)
|
||||
loResult = Createobject("empty")
|
||||
Addproperty(loResult, "cui", cui)
|
||||
Addproperty(loResult, "scpTVA", Nvl(scpTVA, .F.))
|
||||
Addproperty(loResult, "statusInactivi", Nvl(statusInactivi, .F.))
|
||||
Addproperty(loResult, "denumire", Nvl(denumire, ""))
|
||||
Addproperty(loResult, "mesaj", Nvl(mesaj, ""))
|
||||
Endif
|
||||
Use In (Select(m.lcAliasTemp))
|
||||
Endif
|
||||
Endif
|
||||
Catch To loEx
|
||||
If !gvANAF_EroareLogataSesiune
|
||||
If Type('goLog') = 'O'
|
||||
goLog.Log('ANAF_VerificaCuiSingle: ' + loEx.Message, 'ANAF_VerificaCuiSingle')
|
||||
Endif
|
||||
gvANAF_EroareLogataSesiune = .T.
|
||||
Endif
|
||||
loResult = .Null.
|
||||
Endtry
|
||||
|
||||
Return m.loResult
|
||||
Endfunc && ANAF_VerificaCuiSingle
|
||||
|
||||
*********************************************
|
||||
*** Verificare coduri fiscale folosind serviciul web ANAF, cate 500 de coduri per interogare
|
||||
*********************************************
|
||||
@@ -1717,7 +1838,6 @@ Define Class VerificareANAF As Custom
|
||||
goLog.Log('lcJsonString: ' + m.lcJsonString, 'ANAF_SincronWebService_PlatitorTva')
|
||||
|
||||
*
|
||||
SET STEP ON
|
||||
If Not Empty(m.lcJsonString)
|
||||
TRY
|
||||
loJsonObject = nfjsonread(m.lcJsonString) && nfJson from http://vfpx.codeplex.com/
|
||||
|
||||
Reference in New Issue
Block a user