sync SVN r18238
This commit is contained in:
@@ -74,14 +74,21 @@
|
||||
*!* verificarea ANAF se poate cere si la caut_partener (parametri optionali de verificare
|
||||
*!* si de data a documentului), pentru achizitia de import si pentru schimbarea furnizorului pe rulaj
|
||||
|
||||
*!* 29.09.2026
|
||||
*!* marius.mutu
|
||||
*!* ANAF_CitesteDinIstoric transmite sursa (CACHE / CACHE_INDISP) la CitesteIstoricPentruCoduri, care aplica
|
||||
*!* filtrul de data doar pe CACHE; ANAF_StarePartener: parametru optional tlIstoricIntai (istoricul se citeste
|
||||
*!* intai, indiferent de ordinea configurata) si lRadiatANAF / dRadiereANAF (partener radiat la data ceruta, doar
|
||||
*!* din verificarea ANAF live) inclus in lDiscordanta si afisat ', Radiat' in banda de stare
|
||||
|
||||
*!* #DEFINE CRLF CHR(13) + CHR(10)
|
||||
#INCLUDE COMUN\ROA.H
|
||||
|
||||
Procedure ANAF_StarePartener
|
||||
Lparameters tcCodFiscal, tdData, tlDoarCache, tlNecesitaApel, tlNegasit, tcClasaEsec, tnTipPersoana
|
||||
Lparameters tcCodFiscal, tdData, tlDoarCache, tlNecesitaApel, tlNegasit, tcClasaEsec, tnTipPersoana, tlIstoricIntai
|
||||
|
||||
Local lcCodFiscal, lcCui, loRezANAF, lcCheieCache, lnI, llValid, loOut, ldData, llNegasit, lcStareServiciu
|
||||
Local lcOrdine, loVerificareANAF As "VerificareANAF", lcSelectOrig
|
||||
Local lcOrdine, loVerificareANAF As "VerificareANAF", lcSelectOrig, ldRadiere, llRadiat
|
||||
|
||||
tlNecesitaApel = .F.
|
||||
tlNegasit = .F.
|
||||
@@ -139,7 +146,7 @@ Procedure ANAF_StarePartener
|
||||
If Select() <> m.lcSelectOrig And Used(m.lcSelectOrig)
|
||||
Select (m.lcSelectOrig)
|
||||
Endif
|
||||
If m.lcOrdine == 'CACHE,ANAF'
|
||||
If m.lcOrdine == 'CACHE,ANAF' Or m.tlIstoricIntai
|
||||
loRezANAF = ANAF_CitesteDinIstoric(m.lcCui, m.ldData, 'CACHE')
|
||||
Endif
|
||||
If Vartype(m.loRezANAF) <> 'O'
|
||||
@@ -186,13 +193,17 @@ Procedure ANAF_StarePartener
|
||||
Return .Null.
|
||||
Endif
|
||||
*** verdict
|
||||
ldRadiere = Iif(!Pemstatus(loRezANAF, 'cSursa', 5) And Pemstatus(loRezANAF, 'dataRadiere', 5), Nvl(loRezANAF.dataRadiere, {}), {})
|
||||
llRadiat = !Empty(m.ldRadiere) And m.ldRadiere <= m.ldData
|
||||
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, "lRadiatANAF", m.llRadiat)
|
||||
Addproperty(loOut, "dRadiereANAF", m.ldRadiere)
|
||||
Addproperty(loOut, "lDiscordanta", (loRezANAF.scpTVA <> loOut.lAreRO) Or loRezANAF.statusInactivi Or m.llRadiat)
|
||||
Addproperty(loOut, "dInceputScpTVA", Iif(Pemstatus(loRezANAF, 'dInceputScpTVA', 5), Nvl(loRezANAF.dInceputScpTVA, {}), {}))
|
||||
Addproperty(loOut, "dSfarsitScpTVA", Iif(Pemstatus(loRezANAF, 'dSfarsitScpTVA', 5), Nvl(loRezANAF.dSfarsitScpTVA, {}), {}))
|
||||
Addproperty(loOut, "dAnulareScpTVA", Iif(Pemstatus(loRezANAF, 'dAnulareScpTVA', 5), Nvl(loRezANAF.dAnulareScpTVA, {}), {}))
|
||||
@@ -221,7 +232,7 @@ Procedure ANAF_CitesteDinIstoric
|
||||
Try
|
||||
Use In (Select(m.lcAliasCache))
|
||||
loVerificareANAF = Createobject("VerificareANAF")
|
||||
loVerificareANAF.CitesteIstoricPentruCoduri(m.tcCui, m.tdData, m.lcAliasCache)
|
||||
loVerificareANAF.CitesteIstoricPentruCoduri(m.tcCui, m.tdData, m.lcAliasCache, m.tcSursa)
|
||||
If Used(m.lcAliasCache) And Reccount(m.lcAliasCache) > 0
|
||||
Select (m.lcAliasCache)
|
||||
Go Top
|
||||
@@ -850,7 +861,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
||||
|
||||
PROCEDURE TextStare
|
||||
Lparameters toStare, tcPerioada
|
||||
Return Iif(toStare.lPlatitorANAF, 'Platitor TVA', 'Neplatitor TVA') + Nvl(m.tcPerioada, '') + Iif(toStare.lInactivANAF, ', Inactiv', '') + Iif(toStare.lTvaIncasareANAF, ', TVA la incasare', '')
|
||||
Return Iif(toStare.lPlatitorANAF, 'Platitor TVA', 'Neplatitor TVA') + Nvl(m.tcPerioada, '') + Iif(toStare.lInactivANAF, ', Inactiv', '') + Iif(toStare.lRadiatANAF, ', Radiat', '') + Iif(toStare.lTvaIncasareANAF, ', TVA la incasare', '')
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE SufixPerioadaTVA
|
||||
@@ -1049,7 +1060,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom
|
||||
|
||||
If This.oStare.lAreRO = This.oStare.lPlatitorANAF
|
||||
Amessagebox(This.AntetDialog(m.lcDenAles, m.lcCodAles) + m.lcPerioadaTVA + ;
|
||||
Iif(This.oStare.lInactivANAF, 'Nu exista alta varianta de partener de ales.', 'Codul fiscal corespunde.'), ;
|
||||
Iif(This.oStare.lInactivANAF Or This.oStare.lRadiatANAF, 'Nu exista alta varianta de partener de ales.', 'Codul fiscal corespunde.'), ;
|
||||
0 + 64, 'Verificare partener ANAF')
|
||||
Return
|
||||
Endif
|
||||
|
||||
@@ -11,8 +11,29 @@
|
||||
*!* Ct_clb_gestiune_init, Ed_tx_simplu1) au trecut in containerul ct_contabilitate al formularului, deci
|
||||
*!* referintele lor din acest fisier sunt prefixate cu containerul, inclusiv in expresiile Type().
|
||||
|
||||
*!* 29.09.2026
|
||||
*!* marius.mutu
|
||||
*!* verificare automata ANAF a clientului de pe factura: VerificaANAFAutomat clasifica verdictul (ClasificaRezultat) si il arata pe
|
||||
*!* butonul But_verifica1 (AplicaIndicatorANAF: OK / ATENTIE / NECUNOSCUT / NEUTRU): textul casetei txtCodFiscal da verdictul (verde OK, rosu ATENTIE, original
|
||||
*!* altfel), iconita "!!" da sursa (verde/rosu = ANAF sau istoric valabil pentru data facturii, gri = ANAF indisponibil si verdict doar din istoric mai vechi sau fara istoric,
|
||||
*!* albastra originala = nimic de verificat); cod fiscal romanesc invalid (nenumeric, lungime in afara 2..10, cifra de control gresita) sau CNP invalid = ATENTIE fara apel ANAF;
|
||||
*!* istoric mai vechi decat factura cu discordanta = ATENTIE cu iconita gri; la deschidere
|
||||
*!* se citeste intai istoricul, la schimbarea clientului si a datei se interogheaza ANAF; butonul manual verifica la data
|
||||
*!* facturii si actualizeaza indicatorul din rezultatul lui, fara alte intrebari.
|
||||
*!* Acelasi indicator si aceiasi declansatori pe dialogul frm_date_factura (lFormVechi);
|
||||
*!* cautarea inchisa fara alegere pastreaza indicatorul cat timp clientul ramane afisat (NEUTRU doar fara client).
|
||||
|
||||
Define Class oAntetFacturare As Custom
|
||||
|
||||
lInVerificare = .F.
|
||||
lVerificaLaActivare = .F.
|
||||
cCheieVerificata = ''
|
||||
cStare = 'NEUTRU'
|
||||
cTooltip = 'Verificare'
|
||||
oNegasit = .Null.
|
||||
oTextAnaf = .Null.
|
||||
lFormVechi = .F.
|
||||
|
||||
Function EsteAviz
|
||||
Return poDate.nIdTipDoc = poDate.nIdTipDocAvizExpeditie
|
||||
Endfunc
|
||||
@@ -150,6 +171,7 @@ Define Class oAntetFacturare As Custom
|
||||
If !Empty(Nvl(loCauta.id_part,0)) And !Empty(loCauta.denumire)
|
||||
poDate.id_client = loCauta.id_part
|
||||
poDate.nume_client = loCauta.denumire
|
||||
poDate.cod_fiscal = Nvl(loCauta.cod_fiscal, '')
|
||||
|
||||
If Inlist(poDate.tip,21,28,42,47) && modificare v 2.0.93 : am adaugat 47
|
||||
lcSql = [begin ] + gcS + [.pack_facturare.cauta_date_comanda(?poDate.id_client,?gnIdSucursala,] + ;
|
||||
@@ -175,6 +197,7 @@ Define Class oAntetFacturare As Custom
|
||||
*!* modificare v 2.0.70 ^
|
||||
toForm.ct_clb_nume_client.Refresh()
|
||||
toForm.ct_contabilitate.ct_clb_lucrare.SetFocus()
|
||||
This.VerificaANAFAutomat(m.toForm, .F.)
|
||||
Else
|
||||
Local loCauta
|
||||
loHash = GetHash([cTitlu=>Clienti??cCont=>4111??lAdaugCorespondente=>1??lVerificaANAF=>1])
|
||||
@@ -218,6 +241,7 @@ Define Class oAntetFacturare As Custom
|
||||
toForm.ct_contabilitate.ct_clb_lucrare.SetFocus()
|
||||
|
||||
toForm.ct_clb_nume_client.clb_TX_CAUTARE.text_SIMPLU1.ToolTipText = 'Id client: ' + TRANSFORM(poDate.id_client)
|
||||
This.VerificaANAFAutomat(m.toForm, .F.)
|
||||
Else
|
||||
poDate.listaid = []
|
||||
poDate.descriere = []
|
||||
@@ -228,6 +252,7 @@ Define Class oAntetFacturare As Custom
|
||||
toForm.nSoldLei = 0
|
||||
toForm.nSoldValuta = 0
|
||||
toForm.txtSoldLei.Refresh()
|
||||
This.ReseteazaIndicator(m.toForm)
|
||||
Endif
|
||||
*!* modificare v 2.0.70
|
||||
If Type('toForm.ct_clb_altele.visible')<>'U'
|
||||
@@ -754,9 +779,11 @@ Define Class oAntetFacturare As Custom
|
||||
|
||||
AddProperty(loDate, "denumire", poDate.nume_client)
|
||||
AddProperty(loDate, "cod_fiscal", poDate.cod_fiscal)
|
||||
AddProperty(loDate, "data", ANAF_CaData(Iif(Type('poDate.dataact') $ 'DT', poDate.dataact, {})))
|
||||
AddProperty(loDate, "tip_verificare", "ANAF_SERVICIU_WEB")
|
||||
|
||||
lnRaspuns = VerificaCodFiscal(loDate, @lnOptiune, @loPartener)
|
||||
This.AplicaRezultatButon(m.toForm, m.loPartener)
|
||||
Endproc
|
||||
|
||||
Procedure valideaza_antet
|
||||
@@ -922,4 +949,366 @@ Define Class oAntetFacturare As Custom
|
||||
Return .T.
|
||||
Endfunc
|
||||
|
||||
Procedure VerificaANAFAutomat
|
||||
Lparameters toForm, tlIstoricIntai
|
||||
Local lcCod, ldData, lcMotiv, lcCheie, loRez, loEx
|
||||
If This.lInVerificare
|
||||
Return
|
||||
Endif
|
||||
This.lVerificaLaActivare = .F.
|
||||
This.lInVerificare = .T.
|
||||
Try
|
||||
lcCod = This.CodFiscalClient()
|
||||
ldData = ANAF_CaData(Iif(Type('poDate.dataact') $ 'DT', poDate.dataact, {}))
|
||||
lcMotiv = This.MotivNeutru(m.lcCod, m.ldData)
|
||||
lcCheie = Upper(Chrtran(m.lcCod, ' ', '')) + '_' + Dtos(m.ldData)
|
||||
Do Case
|
||||
Case !Empty(m.lcMotiv)
|
||||
This.cCheieVerificata = ''
|
||||
This.AplicaIndicatorANAF(m.toForm, 'NEUTRU', m.lcMotiv)
|
||||
Case This.CodInvalid(m.lcCod)
|
||||
This.cCheieVerificata = ''
|
||||
This.AplicaIndicatorANAF(m.toForm, 'ATENTIE', 'Cod fiscal invalid: ' + m.lcCod)
|
||||
Case m.lcCheie == This.cCheieVerificata
|
||||
&& indicatorul e deja la zi pentru cod si data
|
||||
Otherwise
|
||||
This.cCheieVerificata = ''
|
||||
loRez = This.CalculeazaStare(m.toForm, m.lcCod, m.ldData, m.lcCheie, m.tlIstoricIntai)
|
||||
This.AplicaIndicatorANAF(m.toForm, loRez.cStare, loRez.cTooltip, loRez.lGri)
|
||||
This.cCheieVerificata = Iif(loRez.cStare == 'NEUTRU', '', m.lcCheie)
|
||||
Endcase
|
||||
Catch To loEx
|
||||
This.cCheieVerificata = ''
|
||||
This.AplicaIndicatorANAF(m.toForm, 'NEUTRU', 'Verificare ANAF esuata - apasati pentru verificare manuala')
|
||||
This.Logheaza('eroare: ' + loEx.Message + ' linia ' + Transform(loEx.LineNo))
|
||||
Finally
|
||||
This.lInVerificare = .F.
|
||||
This.SeteazaCursor(m.toForm, 0)
|
||||
Endtry
|
||||
Endproc
|
||||
|
||||
Procedure LaSchimbareData
|
||||
Lparameters toForm
|
||||
If !This.lVerificaLaActivare
|
||||
This.VerificaANAFAutomat(m.toForm, .F.)
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure ReseteazaIndicator
|
||||
Lparameters toForm
|
||||
If Type('poDate.id_client') = 'N' And !Empty(Nvl(poDate.id_client, 0))
|
||||
Return
|
||||
Endif
|
||||
This.cCheieVerificata = ''
|
||||
This.AplicaIndicatorANAF(m.toForm, 'NEUTRU', 'Verificare')
|
||||
Endproc
|
||||
|
||||
Procedure MarcheazaVerificareLaActivare
|
||||
If Type('poDate.tip') = 'N' And !Inlist(poDate.tip, 23, 25, 41) And Type('poDate.cod_fiscal') $ 'CX'
|
||||
poDate.cod_fiscal = This.CodFiscalClient()
|
||||
Endif
|
||||
This.lVerificaLaActivare = .T.
|
||||
Endproc
|
||||
|
||||
Function AplicaRezultatButon
|
||||
Lparameters toForm, toPartener
|
||||
Local lcCod, ldData, lcCheie, lcCheieSes, loStare, loRez, lcRO
|
||||
lcCod = This.CodFiscalClient()
|
||||
ldData = ANAF_CaData(Iif(Type('poDate.dataact') $ 'DT', poDate.dataact, {}))
|
||||
If !Empty(This.MotivNeutru(m.lcCod, m.ldData)) Or Vartype(m.toPartener) <> 'O' Or !Pemstatus(m.toPartener, 'platitortvamfin', 5) Or !Empty(Nvl(toPartener.eroare, ''))
|
||||
Return ''
|
||||
Endif
|
||||
lcCheie = Upper(Chrtran(m.lcCod, ' ', '')) + '_' + Dtos(m.ldData)
|
||||
If Empty(Alltrim(Nvl(toPartener.firma, '')))
|
||||
lcCheieSes = 'C' + NormalizeazaCUI(m.lcCod) + '_' + Dtos(m.ldData)
|
||||
If Type('goCacheANAF_Sesiune') = 'O' And goCacheANAF_Sesiune.GetKey(m.lcCheieSes) > 0
|
||||
goCacheANAF_Sesiune.Remove(m.lcCheieSes)
|
||||
Endif
|
||||
This.cCheieVerificata = ''
|
||||
This.VerificaANAFAutomat(m.toForm, .F.)
|
||||
Return This.cStare
|
||||
Endif
|
||||
lcRO = Left(Upper(Alltrim(m.lcCod)), 2) == 'RO'
|
||||
loStare = Createobject('Empty')
|
||||
Addproperty(loStare, 'cCui', NormalizeazaCUI(m.lcCod))
|
||||
Addproperty(loStare, 'lAreRO', m.lcRO)
|
||||
Addproperty(loStare, 'lPlatitorANAF', toPartener.platitortvamfin)
|
||||
Addproperty(loStare, 'lInactivANAF', toPartener.inactiv)
|
||||
Addproperty(loStare, 'cDenumireANAF', Alltrim(toPartener.firma))
|
||||
Addproperty(loStare, 'lRadiatANAF', .F.)
|
||||
Addproperty(loStare, 'dRadiereANAF', {})
|
||||
Addproperty(loStare, 'lDiscordanta', (toPartener.platitortvamfin <> m.lcRO) Or toPartener.inactiv)
|
||||
Addproperty(loStare, 'dInceputScpTVA', Nvl(toPartener.data_inceput_scptva, {}))
|
||||
Addproperty(loStare, 'dSfarsitScpTVA', Nvl(toPartener.data_sfarsit_scptva, {}))
|
||||
Addproperty(loStare, 'dAnulareScpTVA', Nvl(toPartener.data_anul_imp_scptva, {}))
|
||||
Addproperty(loStare, 'cMesajScpTVA', Alltrim(Nvl(toPartener.stare, '')))
|
||||
Addproperty(loStare, 'lTvaIncasareANAF', Nvl(toPartener.tvaincasare, .F.))
|
||||
Addproperty(loStare, 'dInceputTvaInc', Nvl(toPartener.data_inceput_tvainc, {}))
|
||||
Addproperty(loStare, 'dSfarsitTvaInc', Nvl(toPartener.data_sfarsit_tvainc, {}))
|
||||
Addproperty(loStare, 'dData', m.ldData)
|
||||
Addproperty(loStare, 'cSursa', Iif(Empty(Alltrim(Nvl(toPartener.sursa, ''))), 'ANAF', Alltrim(toPartener.sursa)))
|
||||
Addproperty(loStare, 'dDataSursa', Nvl(toPartener.data_sursa, {}))
|
||||
loRez = This.ClasificaRezultat(m.loStare, .F., '', m.lcCod, m.ldData)
|
||||
This.AplicaIndicatorANAF(m.toForm, loRez.cStare, loRez.cTooltip, loRez.lGri)
|
||||
This.cCheieVerificata = m.lcCheie
|
||||
Return loRez.cStare
|
||||
Endfunc
|
||||
|
||||
Procedure PuneFiltruCui
|
||||
Lparameters toHash, tcCui
|
||||
Local lcFiltru, lnNr
|
||||
If Empty(m.tcCui) Or !Empty(Chrtran(m.tcCui, '0123456789', ''))
|
||||
Return
|
||||
Endif
|
||||
lcFiltru = "LTRIM(UPPER(B.COD_FISCAL), 'RO ') = '" + m.tcCui + "'"
|
||||
lnNr = 0
|
||||
goExecutor.oSelect2Value('select count(*) from nom_parteneri b where b.sters = 0 and b.inactiv = 0 and ' + m.lcFiltru, @lnNr)
|
||||
If Nvl(m.lnNr, 0) > 1
|
||||
toHash.SetValue('cFiltruOrig', m.lcFiltru)
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Function CalculeazaStare
|
||||
Lparameters toForm, tcCod, tdData, tcCheie, tlIstoricIntai
|
||||
Local loStare, llNecesita, llNegasit, lcClasa, loRez, lnT0
|
||||
If Isnull(This.oNegasit)
|
||||
This.oNegasit = Createobject('Collection')
|
||||
Endif
|
||||
If This.oNegasit.GetKey(m.tcCheie) > 0
|
||||
Return This.oNegasit.Item(m.tcCheie)
|
||||
Endif
|
||||
This.AplicaIndicatorANAF(m.toForm, 'NEUTRU', 'Se verifica la ANAF...')
|
||||
This.SeteazaCursor(m.toForm, 11)
|
||||
lnT0 = Seconds()
|
||||
Store .F. To llNecesita, llNegasit
|
||||
lcClasa = ''
|
||||
loStare = ANAF_StarePartener(m.tcCod, m.tdData, .F., @llNecesita, @llNegasit, @lcClasa, 0, m.tlIstoricIntai)
|
||||
loRez = This.ClasificaRezultat(m.loStare, m.llNegasit, m.lcClasa, m.tcCod, m.tdData)
|
||||
If m.llNegasit
|
||||
This.oNegasit.Add(m.loRez, m.tcCheie)
|
||||
Endif
|
||||
This.Logheaza('stare=' + loRez.cStare + ' cod=' + m.tcCod + ' data=' + Dtoc(m.tdData) + ;
|
||||
' sursa=' + Iif(Isnull(m.loStare), '-', loStare.cSursa) + ' data_sursa=' + Iif(Isnull(m.loStare), '-', Dtoc(loStare.dDataSursa)) + ;
|
||||
' ms=' + Transform(Int((Seconds() - m.lnT0) * 1000)))
|
||||
Return m.loRez
|
||||
Endfunc
|
||||
|
||||
Function ClasificaRezultat
|
||||
Lparameters toStare, tlNegasit, tcClasaEsec, tcCod, tdData
|
||||
Local lcStare, lcTip, llGri, loRez
|
||||
lcStare = 'NEUTRU'
|
||||
llGri = .F.
|
||||
lcTip = 'Verificare'
|
||||
Do Case
|
||||
Case Isnull(m.toStare) And m.tlNegasit
|
||||
lcStare = 'ATENTIE'
|
||||
lcTip = 'ATENTIE: cod fiscal inexistent la ANAF (' + Alltrim(Iif(Left(Upper(Alltrim(m.tcCod)), 2) == 'RO', Substr(Alltrim(m.tcCod), 3), m.tcCod)) + ') - verificati daca e client strain. Click/Enter = detalii'
|
||||
Case Isnull(m.toStare)
|
||||
Do Case
|
||||
Case Inlist(m.tcClasaEsec, 'FARA_RASPUNS', 'RASPUNS_NEINTELES')
|
||||
lcStare = 'NECUNOSCUT'
|
||||
llGri = .T.
|
||||
lcTip = 'ANAF indisponibil, fara istoric - verificati manual'
|
||||
Case m.tcClasaEsec == 'CNP'
|
||||
lcTip = 'Persoana fizica (CNP) - fara verificare ANAF'
|
||||
Case m.tcClasaEsec == 'COD_NENUMERIC'
|
||||
lcTip = 'Cod fiscal nenumeric - nu se poate verifica la ANAF'
|
||||
Case m.tcClasaEsec == 'SE_TESTEAZA'
|
||||
lcTip = 'Verificarea ANAF se testeaza - reincercati'
|
||||
Endcase
|
||||
Case m.toStare.cSursa == 'CACHE_INDISP' And !Empty(m.toStare.dDataSursa) And m.toStare.dDataSursa < m.tdData
|
||||
llGri = .T.
|
||||
If m.toStare.lDiscordanta
|
||||
lcStare = 'ATENTIE'
|
||||
lcTip = 'ATENTIE: ANAF indisponibil; ultima verificare din ' + Dtoc(m.toStare.dDataSursa) + ', anterioara facturii: ' + ;
|
||||
This.MotiveDiscordanta(m.toStare) + '. Click/Enter = detalii'
|
||||
Else
|
||||
lcStare = 'NECUNOSCUT'
|
||||
lcTip = 'ANAF indisponibil; ultima verificare din ' + Dtoc(m.toStare.dDataSursa) + ', anterioara facturii: ' + ;
|
||||
Iif(m.toStare.lPlatitorANAF, 'Platitor TVA', 'Neplatitor TVA')
|
||||
Endif
|
||||
Case m.toStare.lDiscordanta
|
||||
lcStare = 'ATENTIE'
|
||||
lcTip = 'ATENTIE: ' + This.MotiveDiscordanta(m.toStare) + '. ' + This.TextAnafStare(m.toStare) + ' Click/Enter = detalii'
|
||||
Otherwise
|
||||
lcStare = 'OK'
|
||||
lcTip = 'OK - ' + This.TextAnafStare(m.toStare) + Iif(m.toStare.cSursa == 'ANAF', '', ' Radierea nu se verifica din istoric.')
|
||||
Endcase
|
||||
loRez = Createobject('Empty')
|
||||
Addproperty(loRez, 'cStare', m.lcStare)
|
||||
Addproperty(loRez, 'cTooltip', m.lcTip)
|
||||
Addproperty(loRez, 'lGri', m.llGri)
|
||||
Return m.loRez
|
||||
Endfunc
|
||||
|
||||
Function MotiveDiscordanta
|
||||
Lparameters toStare
|
||||
Local lcMotiv
|
||||
lcMotiv = ''
|
||||
If m.toStare.lAreRO And !m.toStare.lPlatitorANAF
|
||||
lcMotiv = 'cod cu RO, dar ANAF il da neplatitor TVA la data facturii'
|
||||
Endif
|
||||
If !m.toStare.lAreRO And m.toStare.lPlatitorANAF
|
||||
lcMotiv = 'cod fara RO, dar ANAF il da platitor TVA la data facturii'
|
||||
Endif
|
||||
If m.toStare.lInactivANAF
|
||||
lcMotiv = m.lcMotiv + Iif(Empty(m.lcMotiv), '', '; ') + 'client inactiv la ANAF'
|
||||
Endif
|
||||
If m.toStare.lRadiatANAF
|
||||
lcMotiv = m.lcMotiv + Iif(Empty(m.lcMotiv), '', '; ') + 'client radiat la ANAF din ' + Dtoc(m.toStare.dRadiereANAF)
|
||||
Endif
|
||||
Return m.lcMotiv
|
||||
Endfunc
|
||||
|
||||
Procedure AplicaIndicatorANAF
|
||||
Lparameters toForm, tcStare, tcTooltip, tlGri
|
||||
Local loBtn, lcTip, lcUp, lcDown, lcPic
|
||||
lcTip = Left(m.tcTooltip, 255)
|
||||
This.cStare = m.tcStare
|
||||
This.cTooltip = m.lcTip
|
||||
This.ColoreazaCodFiscal(m.toForm, m.tcStare)
|
||||
If Vartype(m.toForm) <> 'O' Or !Pemstatus(m.toForm, 'But_verifica1', 5)
|
||||
Return
|
||||
Endif
|
||||
loBtn = toForm.But_verifica1
|
||||
If !Pemstatus(m.loBtn, 'cPicOrig', 5)
|
||||
Addproperty(m.loBtn, 'cPicOrig', m.loBtn.Picture)
|
||||
Addproperty(m.loBtn, 'cUpOrig', m.loBtn.cpictureup)
|
||||
Addproperty(m.loBtn, 'cDownOrig', m.loBtn.cpicturedown)
|
||||
Endif
|
||||
Do Case
|
||||
Case m.tcStare == 'NECUNOSCUT' Or (Vartype(m.tlGri) = 'L' And m.tlGri)
|
||||
lcUp = 'verificare1_gri.bmp'
|
||||
lcDown = 'verificare2_gri.bmp'
|
||||
lcPic = m.lcUp
|
||||
Case m.tcStare == 'OK'
|
||||
lcUp = 'verificare1_verde.bmp'
|
||||
lcDown = 'verificare2_verde.bmp'
|
||||
lcPic = m.lcUp
|
||||
Case m.tcStare == 'ATENTIE'
|
||||
lcUp = 'verificare1_rosu.bmp'
|
||||
lcDown = 'verificare2_rosu.bmp'
|
||||
lcPic = m.lcUp
|
||||
Otherwise
|
||||
lcUp = m.loBtn.cUpOrig
|
||||
lcDown = m.loBtn.cDownOrig
|
||||
lcPic = m.loBtn.cPicOrig
|
||||
Endcase
|
||||
This.PuneProprietate(m.loBtn, 'cpictureup', m.lcUp)
|
||||
This.PuneProprietate(m.loBtn, 'cpicturedown', m.lcDown)
|
||||
This.PuneProprietate(m.loBtn, 'Picture', m.lcPic)
|
||||
This.PuneProprietate(m.loBtn, 'ToolTipText', m.lcTip)
|
||||
This.PuneProprietate(m.loBtn, 'StatusBarText', m.lcTip)
|
||||
If Pemstatus(m.loBtn, 'Refresh', 5)
|
||||
loBtn.Refresh()
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure ColoreazaCodFiscal
|
||||
Lparameters toForm, tcStare
|
||||
Local loTxt, lnCuloare
|
||||
If Vartype(m.toForm) <> 'O' Or !Pemstatus(m.toForm, 'txtCodFiscal', 5)
|
||||
Return
|
||||
Endif
|
||||
loTxt = toForm.txtCodFiscal
|
||||
If !Pemstatus(m.loTxt, 'ForeColor', 5) Or !Pemstatus(m.loTxt, 'DisabledForeColor', 5)
|
||||
Return
|
||||
Endif
|
||||
If !Pemstatus(m.loTxt, 'nForeOrig', 5)
|
||||
Addproperty(m.loTxt, 'nForeOrig', m.loTxt.ForeColor)
|
||||
Addproperty(m.loTxt, 'nDisOrig', m.loTxt.DisabledForeColor)
|
||||
Endif
|
||||
Do Case
|
||||
Case m.tcStare == 'OK'
|
||||
loTxt.ForeColor = Rgb(0, 110, 0)
|
||||
loTxt.DisabledForeColor = Rgb(0, 110, 0)
|
||||
Case m.tcStare == 'ATENTIE'
|
||||
loTxt.ForeColor = Rgb(192, 0, 0)
|
||||
loTxt.DisabledForeColor = Rgb(192, 0, 0)
|
||||
Otherwise
|
||||
loTxt.ForeColor = m.loTxt.nForeOrig
|
||||
loTxt.DisabledForeColor = m.loTxt.nDisOrig
|
||||
Endcase
|
||||
Endproc
|
||||
|
||||
Procedure PuneProprietate
|
||||
Lparameters toObj, tcNume, tuValoare
|
||||
If Pemstatus(m.toObj, m.tcNume, 5)
|
||||
toObj.&tcNume = m.tuValoare
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure SeteazaCursor
|
||||
Lparameters toForm, tnCursor
|
||||
If Vartype(m.toForm) = 'O' And Pemstatus(m.toForm, 'MousePointer', 5)
|
||||
toForm.MousePointer = m.tnCursor
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Procedure Logheaza
|
||||
Lparameters tcText
|
||||
If Type('goLog') = 'O'
|
||||
goLog.Log(m.tcText, 'anaf_verif_factura')
|
||||
Endif
|
||||
Endproc
|
||||
|
||||
Function MotivNeutru
|
||||
Lparameters tcCod, tdData
|
||||
Do Case
|
||||
Case !('OCAUTARE' $ Upper(Set('Procedure'))) Or ANAF_NivelVerificare() = 0
|
||||
Return 'Verificare'
|
||||
Case Type('poDate.lEditare') = 'L' And poDate.lEditare
|
||||
Return 'Verificare'
|
||||
Case Type('poDate.tip') = 'N' And Inlist(poDate.tip, 23, 25, 41)
|
||||
Return 'Gestiune - fara verificare ANAF'
|
||||
Case Empty(m.tcCod)
|
||||
Return 'Verificare'
|
||||
Case Empty(m.tdData)
|
||||
Return 'Completati data facturii'
|
||||
Endcase
|
||||
Return ''
|
||||
Endfunc
|
||||
|
||||
Function CodInvalid
|
||||
Lparameters tcCod
|
||||
Local lcCui
|
||||
lcCui = NormalizeazaCUI(m.tcCod)
|
||||
If Empty(m.lcCui)
|
||||
Return .F.
|
||||
Endif
|
||||
If Len(m.lcCui) = 13 And Empty(Chrtran(m.lcCui, '0123456789', ''))
|
||||
Return !Empty(ANAF_ValidareCod(m.tcCod, 2))
|
||||
Endif
|
||||
Return !Empty(ANAF_ValidareCod(m.tcCod, 1)) Or (Len(m.lcCui) < 2 And Empty(Chrtran(m.lcCui, '0123456789', '')))
|
||||
Endfunc
|
||||
|
||||
Function TextAnafStare
|
||||
Lparameters toStare
|
||||
If Isnull(This.oTextAnaf)
|
||||
This.oTextAnaf = Createobject('anaf_verif_cautare')
|
||||
Endif
|
||||
Return This.oTextAnaf.TextAnaf(m.toStare, .F., 24)
|
||||
Endfunc
|
||||
|
||||
Function CodFiscalClient
|
||||
Local lcCod, lnSelect
|
||||
Private pnIdClientAnaf
|
||||
lcCod = Iif(Type('poDate.cod_fiscal') $ 'CX', Alltrim(Nvl(poDate.cod_fiscal, '')), '')
|
||||
If Empty(m.lcCod) And Type('poDate.id_client') = 'N' And Type('goExecutor') = 'O'
|
||||
pnIdClientAnaf = poDate.id_client
|
||||
If !Empty(pnIdClientAnaf)
|
||||
lnSelect = Select()
|
||||
Use In (Select('crsCodFiscalAnaf'))
|
||||
If goExecutor.oExecute('select cod_fiscal from nom_parteneri where id_part = ?pnIdClientAnaf', 'crsCodFiscalAnaf') >= 0 And Used('crsCodFiscalAnaf')
|
||||
lcCod = Alltrim(Nvl(crsCodFiscalAnaf.cod_fiscal, ''))
|
||||
Endif
|
||||
Use In (Select('crsCodFiscalAnaf'))
|
||||
If Used(m.lnSelect)
|
||||
Select (m.lnSelect)
|
||||
Endif
|
||||
Endif
|
||||
Endif
|
||||
Return m.lcCod
|
||||
Endfunc
|
||||
|
||||
Enddefine
|
||||
|
||||
@@ -109,6 +109,12 @@
|
||||
*!* elemente "in (...)" da ORA-01795); plasa de siguranta din VerificaListaCIF aduna codurile ramase
|
||||
*!* fara raspuns si cere istoricul intr-un singur apel, in loc de un apel Oracle per cod
|
||||
|
||||
*!* 29.09.2026
|
||||
*!* marius.mutu
|
||||
*!* CitesteIstoricPentruCoduri: pe sursa CACHE randul din istoric se accepta doar daca verificarea ANAF e din
|
||||
*!* ziua datei cerute sau ulterioara (pentru date viitoare, din azi); CACHE_INDISP accepta si verificari mai vechi
|
||||
*!* ANAF_VerdictDinCursor: obiectul single-CUI poarta si dataRadiere
|
||||
|
||||
*!* 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
|
||||
@@ -1790,6 +1796,7 @@ Function ANAF_VerdictDinCursor
|
||||
Addproperty(loResult, "cui", cui)
|
||||
Addproperty(loResult, "scpTVA", Nvl(scpTVA, .F.))
|
||||
Addproperty(loResult, "statusInactivi", Nvl(statusInactivi, .F.))
|
||||
Addproperty(loResult, "dataRadiere", Nvl(dataRadiere, {}))
|
||||
Addproperty(loResult, "denumire", Nvl(denumire, ""))
|
||||
Addproperty(loResult, "mesaj", Nvl(mesaj, ""))
|
||||
Addproperty(loResult, "dInceputScpTVA", Nvl(data_inceput_ScpTVA, {}))
|
||||
@@ -2908,6 +2915,7 @@ Define Class VerificareANAF As Custom
|
||||
*** in SQL, la tdData, verdictele din intervale (platitor TVA, TVA la incasare, split TVA, inactiv)
|
||||
*** Adauga randurile in tcAlias (cursor in forma crsANAF + sursa/data_sursa), creandu-l daca lipseste
|
||||
*** tcSursa (optional, implicit 'CACHE') eticheteaza randurile inserate - 'CACHE' sau 'CACHE_INDISP'
|
||||
*** Cu 'CACHE' se accepta doar verificari din ziua tdData sau ulterioare (pentru tdData viitoare, din azi); 'CACHE_INDISP' accepta si verificari mai vechi
|
||||
*** Un rand NU se intoarce cand tdData e inainte de inceputul unui interval cunoscut (scpTVA/TVAINC/
|
||||
*** inactivare) - ANAF intoarce o singura perioada, nu istoricul complet, deci pentru o data anterioara
|
||||
*** primei perioade memorate cache-ul nu poate afirma "nu era" - codul ramane netratat, merge la ANAF
|
||||
@@ -2916,7 +2924,7 @@ Define Class VerificareANAF As Custom
|
||||
Function CitesteIstoricPentruCoduri
|
||||
Lparameters tcListaCoduriN, tdData, tcAlias, tcSursa
|
||||
|
||||
Local lcAlias, lcCursorIstoric, lcSql, ldData, lnZileCache, lcSelect, lcSursa, lcCondCod, lnTotalCod, lnTranse, lnTransa, lnI, lcTransa
|
||||
Local lcAlias, lcCursorIstoric, lcSql, ldData, lnZileCache, lcSelect, lcSursa, lcCondCod, lnTotalCod, lnTranse, lnTransa, lnI, lcTransa, lcCondCache
|
||||
*!* 30.07.2026 marius.mutu: pdDataCache/pnZileCache Private, nu Local, ca sa fie vizibile in goExecutor.oExecuta la bind
|
||||
Private pdDataCache, pnZileCache
|
||||
lcAlias = Iif(!Empty(m.tcAlias) And Type('tcAlias') = "C", m.tcAlias, "crsANAF")
|
||||
@@ -2960,6 +2968,9 @@ Define Class VerificareANAF As Custom
|
||||
lcCondCod = '(' + m.lcCondCod + ')'
|
||||
Endif
|
||||
|
||||
*!* CACHE: verificarea trebuie sa fie din ziua ceruta sau ulterioara
|
||||
lcCondCache = Iif(m.lcSursa == 'CACHE', ' and trunc(dataorav_anaf) >= least(?pdDataCache, trunc(sysdate))', '')
|
||||
|
||||
*!* 01.08.2026 marius.mutu: v_tvainc - margine exclusiva (data_sfarsit_tvainc - 1), aliniata cu pack_roartvai; ground truth rtvai_istoric confirma [inceput,sfarsit)
|
||||
*!* 02.08.2026 marius.mutu: randul curent se alege pe dataorav_anaf desc - dupa fuziunea istoricelor, ID-ul nu mai urmeaza ordinea cronologica
|
||||
TEXT To lcSql TEXTMERGE Noshow
|
||||
@@ -2975,7 +2986,7 @@ select cod_fiscal_n, firma, adresa, judet, regcom, dataorav_anaf,
|
||||
from istoric_coduri_fiscale i
|
||||
where <<m.lcCondCod>>
|
||||
and dataorav_anaf is not null
|
||||
and sysdate - dataorav_anaf <= ?pnZileCache)
|
||||
and sysdate - dataorav_anaf <= ?pnZileCache<<m.lcCondCache>>)
|
||||
where rn = 1
|
||||
and (data_inceput_scptva is null or ?pdDataCache >= data_inceput_scptva)
|
||||
and (data_inceput_tvainc is null or ?pdDataCache >= data_inceput_tvainc)
|
||||
|
||||
Reference in New Issue
Block a user