diff --git a/programe/ocautare.prg b/programe/ocautare.prg index 33585e0..acafaf4 100644 --- a/programe/ocautare.prg +++ b/programe/ocautare.prg @@ -49,11 +49,18 @@ *!* formularului, daca starea serviciului nu e cunoscuta, pleaca o sonda asincrona care stabileste *!* disponibilitatea fara sa blocheze interfata, iar randul curent asteapta rezultatul ei +*!* 27.07.2026 +*!* marius.mutu +*!* verificare ANAF: banda de stare arata si de cand e valabila starea de TVA (data de inceput, +*!* data de incetare sau data anularii din oficiu), doar cand starea difera de ROA, partenerul e +*!* inactiv sau perioada s-a incheiat deja; F4 arata intotdeauna perioada completa si mesajul +*!* primit de la ANAF + *!* #DEFINE CRLF CHR(13) + CHR(10) #INCLUDE COMUN\ROA.H Procedure ANAF_StarePartener - Lparameters tcCodFiscal, tdData, tlDoarCache, tlNecesitaApel, tlNegasit, tcClasaEsec + Lparameters tcCodFiscal, tdData, tlDoarCache, tlNecesitaApel, tlNegasit, tcClasaEsec, tnTipPersoana Local lcCodFiscal, lcCui, loRezANAF, lcCheieCache, lnI, llValid, loOut, ldData, llNegasit, lcStareServiciu @@ -79,7 +86,8 @@ Procedure ANAF_StarePartener Endif Endfor Endif - If m.llValid And Len(m.lcCui) = 13 + If m.llValid And Len(m.lcCui) = 13 And !(Vartype(m.tnTipPersoana) = 'N' And m.tnTipPersoana = 1) + tcClasaEsec = 'CNP' Return .Null. Endif If !m.llValid @@ -141,6 +149,10 @@ Procedure ANAF_StarePartener Addproperty(loOut, "lInactivANAF", loRezANAF.statusInactivi) Addproperty(loOut, "cDenumireANAF", Alltrim(Nvl(loRezANAF.denumire, ''))) Addproperty(loOut, "lDiscordanta", (loRezANAF.scpTVA <> loOut.lAreRO) Or loRezANAF.statusInactivi) + 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, {}), {})) + Addproperty(loOut, "cMesajScpTVA", Iif(Pemstatus(loRezANAF, 'cMesajScpTVA', 5), Alltrim(Nvl(loRezANAF.cMesajScpTVA, '')), '')) Addproperty(loOut, "dData", m.ldData) Return loOut Endproc && ANAF_StarePartener @@ -597,7 +609,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom This.oStare = .Null. This.cCui = '' This.lNegasit = .F. - This.cClasaEsec = '' + This.cClasaEsec = 'COD_INVALID' This.SeteazaLabel(m.lcCodInvalid + ' (F4 = detalii)', .T.) goLog.Log('Cod fiscal invalid: ' + m.lcCodInvalid + ' id_part=' + Transform(m.lnId), 'anaf_verif_cautare') Return .F. @@ -610,7 +622,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom lcClasaEsec = '' This.lVerificareInCurs = .T. Try - loStare = ANAF_StarePartener(m.lcCodFiscal, This.dDataDoc, !m.tlPermiteApel, @llNecesitaApel, @llNegasit, @lcClasaEsec) + loStare = ANAF_StarePartener(m.lcCodFiscal, This.dDataDoc, !m.tlPermiteApel, @llNecesitaApel, @llNegasit, @lcClasaEsec, m.lnTipPersoana) Finally This.lVerificareInCurs = .F. Endtry @@ -645,6 +657,9 @@ DEFINE CLASS anaf_verif_cautare AS Custom This.SeteazaLabel('Cod fiscal nenumeric - nu se poate verifica la ANAF', .F., .T.) goLog.Log('Cod fiscal nenumeric: ' + Alltrim(m.lcCodFiscal) + ' id_part=' + Transform(m.lnId), 'anaf_verif_cautare') Return .F. + Case Isnull(m.loStare) And m.lcClasaEsec == 'CNP' + This.SeteazaLabel('Persoana fizica - CNP corect', .F., .T.) + Return .F. Case Isnull(m.loStare) This.AfiseazaPrompt() Return .F. @@ -676,22 +691,61 @@ DEFINE CLASS anaf_verif_cautare AS Custom ENDPROC PROCEDURE TextStare + Lparameters toStare, tcPerioada + Return Iif(toStare.lPlatitorANAF, 'Platitor TVA', 'Neplatitor TVA') + Nvl(m.tcPerioada, '') + Iif(toStare.lInactivANAF, ', Inactiv', '') + ENDPROC + + PROCEDURE SufixPerioadaTVA Lparameters toStare - Return Iif(toStare.lPlatitorANAF, 'Platitor TVA', 'Neplatitor TVA') + Iif(toStare.lInactivANAF, ', Inactiv', '') + If !(toStare.lDiscordanta Or !Empty(toStare.dAnulareScpTVA) Or (!Empty(toStare.dSfarsitScpTVA) And toStare.dSfarsitScpTVA < Date())) + Return '' + Endif + Do Case + Case !Empty(toStare.dAnulareScpTVA) + Return ', anulat din ' + Dtoc(toStare.dAnulareScpTVA) + Case !Empty(toStare.dSfarsitScpTVA) And !Empty(toStare.dInceputScpTVA) + Return ' ' + Dtoc(toStare.dInceputScpTVA) + ' - ' + Dtoc(toStare.dSfarsitScpTVA) + Case !Empty(toStare.dInceputScpTVA) + Return ' din ' + Dtoc(toStare.dInceputScpTVA) + Endcase + Return '' ENDPROC PROCEDURE TextAnaf Lparameters toStare, tlCuVirgula, tnMaxLen - Local lcCodOk, lcDenANAF, lcDenFull + Local lcCodOk, lcDenANAF, lcDenFull, lcPerioada 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) + ' (' + ; + lcPerioada = This.SufixPerioadaTVA(toStare) + Return 'ANAF: ' + This.TextStare(toStare, m.lcPerioada) + ' (' + ; Iif(Empty(m.lcDenANAF), '', m.lcDenANAF + Iif(m.tlCuVirgula, ', ', ' ')) + m.lcCodOk + ')' + ; - ' la ' + Dtoc(toStare.dData) + Iif(Empty(m.lcPerioada), ' la ' + Dtoc(toStare.dData), '') + ENDPROC + + PROCEDURE TextPerioadaTVA + Lparameters toStare + Local lcTxt + lcTxt = '' + If !Empty(toStare.dInceputScpTVA) + lcTxt = m.lcTxt + 'Inceput inregistrare TVA: ' + Dtoc(toStare.dInceputScpTVA) + Chr(13) + Endif + If !Empty(toStare.dSfarsitScpTVA) + lcTxt = m.lcTxt + 'Sfarsit inregistrare TVA: ' + Dtoc(toStare.dSfarsitScpTVA) + Chr(13) + Endif + If !Empty(toStare.dAnulareScpTVA) + lcTxt = m.lcTxt + 'Anulare din oficiu: ' + Dtoc(toStare.dAnulareScpTVA) + Chr(13) + Endif + If !Empty(toStare.cMesajScpTVA) + lcTxt = m.lcTxt + 'Mesaj ANAF: ' + Alltrim(toStare.cMesajScpTVA) + Chr(13) + Endif + If !Empty(m.lcTxt) + lcTxt = m.lcTxt + Chr(13) + Endif + Return m.lcTxt ENDPROC PROCEDURE AntetDialog @@ -786,7 +840,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom PROCEDURE Detalii Local lcCursor, lcDenAles, lcCodAles, lcCodOk, lcLista, lcMesaj, lnCandidati, lnCandidat, lcDenPereche - Local lnRasp, lnAles, loAles, llEroare + Local lnRasp, lnAles, loAles, llEroare, lcPerioadaTVA If Vartype(This.oForm) <> 'O' Return Endif @@ -800,13 +854,17 @@ DEFINE CLASS anaf_verif_cautare AS Custom Amessagebox(This.AntetDialog(m.lcDenAles, m.lcCodAles) + ; Iif(This.lNegasit, 'Codul fiscal nu exista la ANAF.', ; Iif(This.cClasaEsec == 'COD_NENUMERIC', 'Codul fiscal nu este numeric - nu se poate verifica la ANAF.', ; - 'ANAF nu a raspuns - verificarea a fost sarita.')), ; + Iif(This.cClasaEsec == 'CNP', 'Persoana fizica - CNP corect.', ; + Iif(This.cClasaEsec == 'COD_INVALID', 'Cod fiscal invalid - nu s-a interogat ANAF. Corectati codul in fisa partenerului.', ; + 'ANAF nu a raspuns - verificarea a fost sarita.'))))), ; 0 + 64, 'Verificare partener ANAF') Return Endif + lcPerioadaTVA = This.TextPerioadaTVA(This.oStare) + If This.oStare.lAreRO = This.oStare.lPlatitorANAF - Amessagebox(This.AntetDialog(m.lcDenAles, m.lcCodAles) + ; + Amessagebox(This.AntetDialog(m.lcDenAles, m.lcCodAles) + m.lcPerioadaTVA + ; Iif(This.oStare.lInactivANAF, 'Nu exista alta varianta de partener de ales.', 'Codul fiscal corespunde.'), ; 0 + 64, 'Verificare partener ANAF') Return @@ -833,7 +891,7 @@ DEFINE CLASS anaf_verif_cautare AS Custom This.MarcheazaDocumente() lcLista = This.TextListaCandidati() - lcMesaj = This.AntetDialog(m.lcDenAles, m.lcCodAles) + 'Parteneri ROA cu CUI ' + m.lcCodOk + ':' + Chr(13) + m.lcLista + Chr(13) + ; + lcMesaj = This.AntetDialog(m.lcDenAles, m.lcCodAles) + m.lcPerioadaTVA + '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) + ; diff --git a/programe/validare.prg b/programe/validare.prg index f6214f4..558d45c 100644 --- a/programe/validare.prg +++ b/programe/validare.prg @@ -67,6 +67,12 @@ *!* sonda asincrona de disponibilitate (ANAF_SondaPorneste/AuSositRaspunsul/AReusit/Opreste) verifica in *!* fundal, la nevoie, daca serviciul ANAF a revenit, fara sa blocheze interfata +*!* 27.07.2026 +*!* marius.mutu +*!* ANAF_VerdictDinCursor expune si perioada de inregistrare in scopuri de TVA (inceput, sfarsit, +*!* anulare din oficiu) si mesajul ANAF integral (mesaj_ScpTVA), citite din cursorul deja parsat de +*!* ParseJsonANAFv8; parsarea esuata a datelor de perioada se logheaza + *!* 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 @@ -1673,6 +1679,10 @@ Function ANAF_VerdictDinCursor Addproperty(loResult, "statusInactivi", Nvl(statusInactivi, .F.)) Addproperty(loResult, "denumire", Nvl(denumire, "")) Addproperty(loResult, "mesaj", Nvl(mesaj, "")) + Addproperty(loResult, "dInceputScpTVA", Nvl(data_inceput_ScpTVA, {})) + Addproperty(loResult, "dSfarsitScpTVA", Nvl(data_sfarsit_ScpTVA, {})) + Addproperty(loResult, "dAnulareScpTVA", Nvl(data_anul_imp_ScpTVA, {})) + Addproperty(loResult, "cMesajScpTVA", Nvl(mesaj_ScpTVA, "")) Else If m.lnReccountTemp = 1 And Empty(denumire) And Nvl(cui, 0) = m.tnCuiCautat tlNegasit = .T. @@ -2062,13 +2072,22 @@ Define Class VerificareANAF As Custom loDate.scpTVA = loInregistrareTVA.scpTVA IF TYPE('loInregistrareTVA.perioade_tva',1) <> "U" - TRY + TRY loDate.data_inceput_ScpTVA = CTOD(loInregistrareTVA.perioade_tva[1].data_inceput_ScpTVA) loDate.data_sfarsit_ScpTVA = CTOD(loInregistrareTVA.perioade_tva[1].data_sfarsit_ScpTVA) loDate.data_anul_imp_ScpTVA = CTOD(loInregistrareTVA.perioade_tva[1].data_anul_imp_ScpTVA) loDate.mesaj_ScpTVA = loInregistrareTVA.perioade_tva[1].mesaj_ScpTVA + IF !Empty(loInregistrareTVA.perioade_tva[1].data_inceput_ScpTVA) And Empty(loDate.data_inceput_ScpTVA) + goLog.Log('ParseJsonANAFv8: data_inceput_ScpTVA neparsabila (' + loInregistrareTVA.perioade_tva[1].data_inceput_ScpTVA + ')', 'ParseJsonANAF') + ENDIF + IF !Empty(loInregistrareTVA.perioade_tva[1].data_sfarsit_ScpTVA) And Empty(loDate.data_sfarsit_ScpTVA) + goLog.Log('ParseJsonANAFv8: data_sfarsit_ScpTVA neparsabila (' + loInregistrareTVA.perioade_tva[1].data_sfarsit_ScpTVA + ')', 'ParseJsonANAF') + ENDIF + IF !Empty(loInregistrareTVA.perioade_tva[1].data_anul_imp_ScpTVA) And Empty(loDate.data_anul_imp_ScpTVA) + goLog.Log('ParseJsonANAFv8: data_anul_imp_ScpTVA neparsabila (' + loInregistrareTVA.perioade_tva[1].data_anul_imp_ScpTVA + ')', 'ParseJsonANAF') + ENDIF CATCH TO loEx - ENDTRY + ENDTRY ENDIF ENDIF