sync SVN r18238

This commit is contained in:
2026-09-30 22:27:28 +03:00
parent 1a24467667
commit 6f3e25d888
3 changed files with 420 additions and 9 deletions

View File

@@ -74,14 +74,21 @@
*!* verificarea ANAF se poate cere si la caut_partener (parametri optionali de verificare *!* 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 *!* 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) *!* #DEFINE CRLF CHR(13) + CHR(10)
#INCLUDE COMUN\ROA.H #INCLUDE COMUN\ROA.H
Procedure ANAF_StarePartener 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 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. tlNecesitaApel = .F.
tlNegasit = .F. tlNegasit = .F.
@@ -139,7 +146,7 @@ Procedure ANAF_StarePartener
If Select() <> m.lcSelectOrig And Used(m.lcSelectOrig) If Select() <> m.lcSelectOrig And Used(m.lcSelectOrig)
Select (m.lcSelectOrig) Select (m.lcSelectOrig)
Endif Endif
If m.lcOrdine == 'CACHE,ANAF' If m.lcOrdine == 'CACHE,ANAF' Or m.tlIstoricIntai
loRezANAF = ANAF_CitesteDinIstoric(m.lcCui, m.ldData, 'CACHE') loRezANAF = ANAF_CitesteDinIstoric(m.lcCui, m.ldData, 'CACHE')
Endif Endif
If Vartype(m.loRezANAF) <> 'O' If Vartype(m.loRezANAF) <> 'O'
@@ -186,13 +193,17 @@ Procedure ANAF_StarePartener
Return .Null. Return .Null.
Endif Endif
*** verdict *** 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") loOut = Createobject("Empty")
Addproperty(loOut, "cCui", m.lcCui) Addproperty(loOut, "cCui", m.lcCui)
Addproperty(loOut, "lAreRO", Left(Upper(Alltrim(m.lcCodFiscal)), 2) = 'RO') Addproperty(loOut, "lAreRO", Left(Upper(Alltrim(m.lcCodFiscal)), 2) = 'RO')
Addproperty(loOut, "lPlatitorANAF", loRezANAF.scpTVA) Addproperty(loOut, "lPlatitorANAF", loRezANAF.scpTVA)
Addproperty(loOut, "lInactivANAF", loRezANAF.statusInactivi) Addproperty(loOut, "lInactivANAF", loRezANAF.statusInactivi)
Addproperty(loOut, "cDenumireANAF", Alltrim(Nvl(loRezANAF.denumire, ''))) 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, "dInceputScpTVA", Iif(Pemstatus(loRezANAF, 'dInceputScpTVA', 5), Nvl(loRezANAF.dInceputScpTVA, {}), {}))
Addproperty(loOut, "dSfarsitScpTVA", Iif(Pemstatus(loRezANAF, 'dSfarsitScpTVA', 5), Nvl(loRezANAF.dSfarsitScpTVA, {}), {})) Addproperty(loOut, "dSfarsitScpTVA", Iif(Pemstatus(loRezANAF, 'dSfarsitScpTVA', 5), Nvl(loRezANAF.dSfarsitScpTVA, {}), {}))
Addproperty(loOut, "dAnulareScpTVA", Iif(Pemstatus(loRezANAF, 'dAnulareScpTVA', 5), Nvl(loRezANAF.dAnulareScpTVA, {}), {})) Addproperty(loOut, "dAnulareScpTVA", Iif(Pemstatus(loRezANAF, 'dAnulareScpTVA', 5), Nvl(loRezANAF.dAnulareScpTVA, {}), {}))
@@ -221,7 +232,7 @@ Procedure ANAF_CitesteDinIstoric
Try Try
Use In (Select(m.lcAliasCache)) Use In (Select(m.lcAliasCache))
loVerificareANAF = Createobject("VerificareANAF") 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 If Used(m.lcAliasCache) And Reccount(m.lcAliasCache) > 0
Select (m.lcAliasCache) Select (m.lcAliasCache)
Go Top Go Top
@@ -850,7 +861,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom
PROCEDURE TextStare PROCEDURE TextStare
Lparameters toStare, tcPerioada 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 ENDPROC
PROCEDURE SufixPerioadaTVA PROCEDURE SufixPerioadaTVA
@@ -1049,7 +1060,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom
If This.oStare.lAreRO = This.oStare.lPlatitorANAF If This.oStare.lAreRO = This.oStare.lPlatitorANAF
Amessagebox(This.AntetDialog(m.lcDenAles, m.lcCodAles) + m.lcPerioadaTVA + ; 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') 0 + 64, 'Verificare partener ANAF')
Return Return
Endif Endif

View File

@@ -11,8 +11,29 @@
*!* Ct_clb_gestiune_init, Ed_tx_simplu1) au trecut in containerul ct_contabilitate al formularului, deci *!* 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(). *!* 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 Define Class oAntetFacturare As Custom
lInVerificare = .F.
lVerificaLaActivare = .F.
cCheieVerificata = ''
cStare = 'NEUTRU'
cTooltip = 'Verificare'
oNegasit = .Null.
oTextAnaf = .Null.
lFormVechi = .F.
Function EsteAviz Function EsteAviz
Return poDate.nIdTipDoc = poDate.nIdTipDocAvizExpeditie Return poDate.nIdTipDoc = poDate.nIdTipDocAvizExpeditie
Endfunc Endfunc
@@ -150,6 +171,7 @@ Define Class oAntetFacturare As Custom
If !Empty(Nvl(loCauta.id_part,0)) And !Empty(loCauta.denumire) If !Empty(Nvl(loCauta.id_part,0)) And !Empty(loCauta.denumire)
poDate.id_client = loCauta.id_part poDate.id_client = loCauta.id_part
poDate.nume_client = loCauta.denumire 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 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,] + ; 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 ^ *!* modificare v 2.0.70 ^
toForm.ct_clb_nume_client.Refresh() toForm.ct_clb_nume_client.Refresh()
toForm.ct_contabilitate.ct_clb_lucrare.SetFocus() toForm.ct_contabilitate.ct_clb_lucrare.SetFocus()
This.VerificaANAFAutomat(m.toForm, .F.)
Else Else
Local loCauta Local loCauta
loHash = GetHash([cTitlu=>Clienti??cCont=>4111??lAdaugCorespondente=>1??lVerificaANAF=>1]) 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_contabilitate.ct_clb_lucrare.SetFocus()
toForm.ct_clb_nume_client.clb_TX_CAUTARE.text_SIMPLU1.ToolTipText = 'Id client: ' + TRANSFORM(poDate.id_client) toForm.ct_clb_nume_client.clb_TX_CAUTARE.text_SIMPLU1.ToolTipText = 'Id client: ' + TRANSFORM(poDate.id_client)
This.VerificaANAFAutomat(m.toForm, .F.)
Else Else
poDate.listaid = [] poDate.listaid = []
poDate.descriere = [] poDate.descriere = []
@@ -228,6 +252,7 @@ Define Class oAntetFacturare As Custom
toForm.nSoldLei = 0 toForm.nSoldLei = 0
toForm.nSoldValuta = 0 toForm.nSoldValuta = 0
toForm.txtSoldLei.Refresh() toForm.txtSoldLei.Refresh()
This.ReseteazaIndicator(m.toForm)
Endif Endif
*!* modificare v 2.0.70 *!* modificare v 2.0.70
If Type('toForm.ct_clb_altele.visible')<>'U' 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, "denumire", poDate.nume_client)
AddProperty(loDate, "cod_fiscal", poDate.cod_fiscal) 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") AddProperty(loDate, "tip_verificare", "ANAF_SERVICIU_WEB")
lnRaspuns = VerificaCodFiscal(loDate, @lnOptiune, @loPartener) lnRaspuns = VerificaCodFiscal(loDate, @lnOptiune, @loPartener)
This.AplicaRezultatButon(m.toForm, m.loPartener)
Endproc Endproc
Procedure valideaza_antet Procedure valideaza_antet
@@ -922,4 +949,366 @@ Define Class oAntetFacturare As Custom
Return .T. Return .T.
Endfunc 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 Enddefine

View File

@@ -109,6 +109,12 @@
*!* elemente "in (...)" da ORA-01795); plasa de siguranta din VerificaListaCIF aduna codurile ramase *!* 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 *!* 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://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/CIF/1879855/MFIN
*!* http://localhost/contafinupdate/verificarecod.aspx/verificarecod/verificare/CNP/1810228134187 *!* http://localhost/contafinupdate/verificarecod.aspx/verificarecod/verificare/CNP/1810228134187
@@ -1790,6 +1796,7 @@ Function ANAF_VerdictDinCursor
Addproperty(loResult, "cui", cui) Addproperty(loResult, "cui", cui)
Addproperty(loResult, "scpTVA", Nvl(scpTVA, .F.)) Addproperty(loResult, "scpTVA", Nvl(scpTVA, .F.))
Addproperty(loResult, "statusInactivi", Nvl(statusInactivi, .F.)) Addproperty(loResult, "statusInactivi", Nvl(statusInactivi, .F.))
Addproperty(loResult, "dataRadiere", Nvl(dataRadiere, {}))
Addproperty(loResult, "denumire", Nvl(denumire, "")) Addproperty(loResult, "denumire", Nvl(denumire, ""))
Addproperty(loResult, "mesaj", Nvl(mesaj, "")) Addproperty(loResult, "mesaj", Nvl(mesaj, ""))
Addproperty(loResult, "dInceputScpTVA", Nvl(data_inceput_ScpTVA, {})) 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) *** 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 *** 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' *** 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/ *** 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 *** 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 *** 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 Function CitesteIstoricPentruCoduri
Lparameters tcListaCoduriN, tdData, tcAlias, tcSursa 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 *!* 30.07.2026 marius.mutu: pdDataCache/pnZileCache Private, nu Local, ca sa fie vizibile in goExecutor.oExecuta la bind
Private pdDataCache, pnZileCache Private pdDataCache, pnZileCache
lcAlias = Iif(!Empty(m.tcAlias) And Type('tcAlias') = "C", m.tcAlias, "crsANAF") lcAlias = Iif(!Empty(m.tcAlias) And Type('tcAlias') = "C", m.tcAlias, "crsANAF")
@@ -2960,6 +2968,9 @@ Define Class VerificareANAF As Custom
lcCondCod = '(' + m.lcCondCod + ')' lcCondCod = '(' + m.lcCondCod + ')'
Endif 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) *!* 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 *!* 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 TEXT To lcSql TEXTMERGE Noshow
@@ -2975,7 +2986,7 @@ select cod_fiscal_n, firma, adresa, judet, regcom, dataorav_anaf,
from istoric_coduri_fiscale i from istoric_coduri_fiscale i
where <<m.lcCondCod>> where <<m.lcCondCod>>
and dataorav_anaf is not null and dataorav_anaf is not null
and sysdate - dataorav_anaf <= ?pnZileCache) and sysdate - dataorav_anaf <= ?pnZileCache<<m.lcCondCache>>)
where rn = 1 where rn = 1
and (data_inceput_scptva is null or ?pdDataCache >= data_inceput_scptva) and (data_inceput_scptva is null or ?pdDataCache >= data_inceput_scptva)
and (data_inceput_tvainc is null or ?pdDataCache >= data_inceput_tvainc) and (data_inceput_tvainc is null or ?pdDataCache >= data_inceput_tvainc)