sync SVN r18186

This commit is contained in:
2026-09-19 22:11:33 +03:00
parent 4040cff4f1
commit d0c1174829
2 changed files with 59 additions and 42 deletions

View File

@@ -5887,8 +5887,8 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx"
LOCAL lnId, lcXmlOriginal, lcMesaj, lnRecno, lcNumarOriginal, ldDataOriginal
LOCAL lcClient, lcMoneda, lnTotal, lnTestRand, lcCifFirma, lcTempXml, loDom
LOCAL lcCifXml, loNod, lcIssueDateStr, ldIssueDate, lcCustomerCif, llB2C, loNoduri, lnI
LOCAL lcNumarNou, lcNumarNouSafe, lcFisierStorno, lcNotaIni, llSucces
LOCAL laModificari[1], lcAvertizare, laDubl[1], laProcesate[1], loForma
LOCAL lcNumarNou, lcNumarNouSafe, lcClientSafe, lcFisierStorno, lcNotaIni, llSucces
LOCAL laModificari[1], lcAvertizare, laDubl[1], loForma
IF AMESSAGEBOX('Se genereaza XML-ul de stornare al facturii selectate (aceleasi linii, valori negative).' + CHR(13) + CHR(13) + ;
'Nu se trimite nimic la ANAF pana nu verificati XML-ul in fereastra urmatoare si apasati "Trimite la ANAF".', 1+64, _screen.Caption) <> 1
RETURN
@@ -5973,8 +5973,12 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx"
llB2C = (Len(m.lcCustomerCif) = 13)
lcNumarNou = m.lcNumarOriginal + '-S'
lcNumarNouSafe = WindowsSpecialCharacters(m.lcNumarNou)
lcFisierStorno = GetPdfPath('EFACTURA','TRIMISE') + 'storno_' + m.lcNumarNouSafe + '_' + m.lcCifFirma + '.xml'
lcNumarNouSafe = WindowsSpecialCharacters(ALLTRIM(m.lcNumarNou), '_')
lcNumarNouSafe = Strtran(Alltrim(m.lcNumarNouSafe), [ ], [_], 1, 100, 1)
lcClientSafe = WindowsSpecialCharacters(Nvl(m.lcClient, ''), '_')
lcClientSafe = Strtran(Alltrim(m.lcClientSafe), [ ], [_], 1, 100, 1)
lcClientSafe = Alltrim(Left(WindowsSpecialCharacters(m.lcClientSafe, '_'), 70))
lcFisierStorno = GetPdfPath('EFACTURA') + 'efactura_' + Dtos(m.ldIssueDate) + '_' + m.lcNumarNouSafe + '_' + m.lcClientSafe + '.xml'
lcNotaIni = 'Stornare factura ' + m.lcNumarOriginal + ' din data ' + Dtoc(m.ldIssueDate)
llSucces = StornoEFacturaXML(m.lcXmlOriginal, m.lcNumarNou, m.lcNotaIni, m.lcFisierStorno, @laModificari, @lcMesaj)
@@ -5993,9 +5997,6 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx"
lcAvertizare = m.lcAvertizare + 'Exista deja un document ' + m.lcNumarNou + ' in Trimise - posibila stornare dubla.' + Chr(13) + Chr(10)
ENDIF
USE IN (SELECT('cVerifDubl'))
IF !Empty(Adir(laProcesate, GetPdfPath('EFACTURA','TRIMISE') + 'procesat\*_storno_' + m.lcNumarNouSafe + '_' + m.lcCifFirma + '*.xml'))
lcAvertizare = m.lcAvertizare + 'Un storno cu acest numar a fost deja trimis de pe acest calculator.' + Chr(13) + Chr(10)
ENDIF
IF loDom.documentElement.baseName == 'CreditNote' OR m.lnTotal < 0
lcAvertizare = m.lcAvertizare + 'Documentul original e nota de credit / are total negativ - stornarea va produce valori pozitive.' + Chr(13) + Chr(10)
ENDIF
@@ -15507,7 +15508,6 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx"
*< CLASSDATA: Baseclass="form" Timestamp="" Scale="Pixels" Uniqueid="" />
*-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder
*< OBJECTDATA: ObjPath="But_renunt1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="lblClient" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="lblNumar" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="txtNumar" UniqueID="" Timestamp="" />
@@ -15527,6 +15527,7 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx"
*< OBJECTDATA: ObjPath="cmdTrimite" UniqueID="" Timestamp="" />
*<DefinedPropArrayMethod>
*m: calculeazafisierstorno
*m: enablebutoane
*m: regenereazaxml
*m: setstare
@@ -15607,18 +15608,13 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx"
Lb_titlu_alb_b121.Anchor = 3
Lb_titlu_alb_b121.Caption = "Stornare eFactura"
Lb_titlu_alb_b121.Name = "Lb_titlu_alb_b121"
BUT_TERMIN1.Anchor = 8
BUT_TERMIN1.Left = 727
BUT_TERMIN1.Name = "BUT_TERMIN1"
BUT_TERMIN1.Visible = .F.
BUT_TERMIN1.Top = 2
Gridsort1.Name = "Gridsort1"
*</PropValue>
ADD OBJECT 'But_renunt1' AS but_renunt WITH ;
Anchor = 8, ;
Left = 701, ;
Name = "But_renunt1", ;
Top = 2
*< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" />
ADD OBJECT 'cmdGenereaza' AS cmd_executa WITH ;
Anchor = 6, ;
Caption = "\<Genereaza XML", ;
@@ -15787,7 +15783,6 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx"
Anchor = 14, ;
AutoSize = .F., ;
Caption = "Nevalidat", ;
FontBold = .T., ;
ForeColor = 96,96,96, ;
Height = 34, ;
Left = 12, ;
@@ -15822,6 +15817,17 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx"
Width = 150
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="textbox" />
PROCEDURE CalculeazaFisierStorno
LPARAMETERS tcNumarNou
LOCAL lcNumarSafe, lcClientSafe
lcNumarSafe = WindowsSpecialCharacters(ALLTRIM(m.tcNumarNou), '_')
lcNumarSafe = Strtran(Alltrim(m.lcNumarSafe), [ ], [_], 1, 100, 1)
lcClientSafe = WindowsSpecialCharacters(Nvl(This.pcClient, ''), '_')
lcClientSafe = Strtran(Alltrim(m.lcClientSafe), [ ], [_], 1, 100, 1)
lcClientSafe = Alltrim(Left(WindowsSpecialCharacters(m.lcClientSafe, '_'), 70))
RETURN GetPdfPath('EFACTURA') + 'efactura_' + Dtos(This.pdDataOriginal) + '_' + m.lcNumarSafe + '_' + m.lcClientSafe + '.xml'
ENDPROC
PROCEDURE EnableButoane
LPARAMETERS tlEnable
This.cmdGenereaza.Enabled = m.tlEnable
@@ -15856,6 +15862,11 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx"
This.Lb_titlu_alb_b121.Caption = This.Caption
This.lblClient.Caption = 'Client: ' + m.tcClient + ' CIF: ' + m.tcCifFirma + ' Moneda: ' + m.tcMoneda
This.lblAvertisment.Caption = m.tcAvertizare
IF Empty(m.tcAvertizare)
This.lblAvertisment.Visible = .F.
This.grdModificari.Height = This.grdModificari.Height + (This.grdModificari.Top - This.lblAvertisment.Top)
This.grdModificari.Top = This.lblAvertisment.Top
ENDIF
This.grdModificari.SetAll("DynamicFontBold", "tip = 2", "Column")
@@ -15872,6 +15883,7 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx"
ENDIF
lcNotaFinal = 'Stornare factura ' + This.pcNumarOriginal + ' din data ' + Dtoc(This.pdDataOriginal) + IIF(Empty(m.lcMotiv), '', '. ' + m.lcMotiv)
This.pcFisierStorno = This.CalculeazaFisierStorno(m.lcNumarNou)
llSucces = StornoEFacturaXML(This.pcXmlOriginal, m.lcNumarNou, m.lcNotaFinal, This.pcFisierStorno, @laModif, @lcMesaj)
IF !m.llSucces
This.SetStare(0, 'Eroare la regenerare: ' + m.lcMesaj)
@@ -15923,6 +15935,7 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx"
INSERT INTO crsStornoDetalii (element, original, nou, tip) VALUES ;
(taModificari[m.lnI,1], Transform(taModificari[m.lnI,2]), Transform(taModificari[m.lnI,3]), taModificari[m.lnI,4])
ENDFOR
GO TOP
SELECT (m.lcSelect)
This.grdModificari.Refresh()
ENDPROC
@@ -15944,39 +15957,47 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx"
IF m.llValid
This.SetStare(1)
ELSE
This.SetStare(0, IIF(Empty(m.lcMesajValid), 'Validare indisponibila - verificati tokenul/reteaua.', 'Invalid: ' + m.lcMesajValid))
This.SetStare(0, IIF(Empty(m.lcMesajValid), 'Validarea ANAF nu a raspuns - verificati tokenul/reteaua.', 'ANAF a gasit erori in XML (validare): ' + m.lcMesajValid))
ENDIF
RETURN m.llValid
ENDPROC
PROCEDURE cmdGenereaza.Click
IF Thisform.RegenereazaXml()
Thisform.SetStare(0, 'XML regenerat.')
LOCAL lcRun
Thisform.Valideaza()
Thisform.SetStare(Thisform.pnStare, STREXTRACT(Thisform.lblStare.Caption + '. Fisier:', '', '. Fisier:') + '. Fisier: ' + Thisform.pcFisierStorno)
IF FILE(Thisform.pcFisierStorno)
lcRun = [RUN /N7 explorer.exe /select,"] + Thisform.pcFisierStorno + ["]
&lcRun
ENDIF
ENDPROC
PROCEDURE cmdPdf.Click
LOCAL lcXmlCurent, lcFisierPdf
LOCAL lcXmlCurent, lcFisierPdf, lcRun
lcXmlCurent = Filetostr(Thisform.pcFisierStorno)
lcFisierPdf = GetPdfPath('EFACTURA','TRIMISE') + 'storno_' + WindowsSpecialCharacters(ALLTRIM(Thisform.pcNumarNou)) + '.pdf'
lcFisierPdf = Forceext(Thisform.pcFisierStorno, 'pdf')
lcFisierPdf = Thisform.poAnaf.Xml2PdfAnaf(m.lcXmlCurent, m.lcFisierPdf, .T.)
IF !Empty(m.lcFisierPdf) AND File(m.lcFisierPdf)
Thisform.SetStare(Thisform.pnStare, STREXTRACT(Thisform.lblStare.Caption + '. Fisier:', '', '. Fisier:') + '. Fisier: ' + m.lcFisierPdf)
open_default_app(m.lcFisierPdf)
lcRun = [RUN /N7 explorer.exe /select,"] + m.lcFisierPdf + ["]
&lcRun
ENDIF
ENDPROC
PROCEDURE cmdTrimite.Click
LOCAL lcMesajConf, loReturn, lcDirProcesat, lcFisierProcesat, lnOptiune
LOCAL lcMesajConf, loReturn, lnOptiune, lcMesajEroare
IF Thisform.pnStare = 2
RETURN
ENDIF
lnOptiune = xmenu('\<Valideaza online si Trimite la ANAF;\<Trimite la ANAF fara validare;\<Doar valideaza online')
DO CASE
CASE m.lnOptiune = 1
CASE m.lnOptiune = 1 AND !Thisform.plTest
IF !Thisform.Valideaza()
RETURN
ENDIF
CASE m.lnOptiune = 2
*!* pe TEST, validarea /prod/ urmata de upload /test/ da ANAF "Cod: 1814" - se trimite fara validare
CASE INLIST(m.lnOptiune, 1, 2)
IF !Thisform.RegenereazaXml()
RETURN
ENDIF
@@ -15988,7 +16009,7 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx"
ENDCASE
lcMesajConf = 'Trimiteti la ANAF (' + IIF(Thisform.plTest,'TEST','PRODUCTIE') + ') stornarea facturii ' + Thisform.pcNumarOriginal + ;
' ca ' + ALLTRIM(Thisform.pcNumarNou) + ', total ' + Transform(Thisform.pnTotal) + ' ' + Thisform.pcMoneda + '? Operatia nu se poate anula.'
' ca ' + ALLTRIM(Thisform.pcNumarNou) + ', total ' + ALLTRIM(STR(-Thisform.pnTotal, 18, 2)) + ' ' + Thisform.pcMoneda + '? Operatia nu se poate anula.'
IF AMESSAGEBOX(m.lcMesajConf, 4+32+256, _screen.Caption) <> 6
RETURN
ENDIF
@@ -16001,21 +16022,16 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx"
WAIT CLEAR
IF !Empty(loReturn.cIdIncarcare)
lcDirProcesat = GetPdfPath('EFACTURA','TRIMISE') + 'procesat\'
lcFisierProcesat = loReturn.cIdIncarcare + '_' + Justfname(Thisform.pcFisierStorno)
IF Thisform.poAnaf.SaveFile(Thisform.pcFisierStorno, .F., m.lcDirProcesat, m.lcFisierProcesat)
TRY
Delete File (Thisform.pcFisierStorno)
CATCH
ENDTRY
ENDIF
goLog.Log('Storno eFactura: ' + Thisform.pcNumarOriginal + ' -> ' + ALLTRIM(Thisform.pcNumarNou) + ', index ' + loReturn.cIdIncarcare + ', ' + IIF(Thisform.plTest,'TEST','PRODUCTIE'))
Thisform.EnableButoane(.T.)
Thisform.SetStare(2, 'Trimis. Index incarcare ' + loReturn.cIdIncarcare + ' (' + IIF(Thisform.plTest,'TEST','PRODUCTIE') + '). ' + ;
'Stergeti factura din ROA si emiteti factura corecta cu acelasi numar. Storno-ul apare in Trimise dupa descarcarea mesajelor.')
'Storno-ul apare in Trimise dupa descarcarea mesajelor.')
ELSE
Thisform.EnableButoane(.T.)
Thisform.SetStare(0, 'Eroare: ' + loReturn.cMesaj + '. Verificati in Trimise, dupa descarcare, inainte de a retrimite.')
*!* HTTP 200 = ANAF a raspuns; altfel nu se stie daca a primit fisierul
lcMesajEroare = IIF(loReturn.nStatus = 200, '', IIF(Thisform.plTest, 'TEST ', '')) + ALLTRIM(loReturn.cMesaj) + ;
IIF(loReturn.nStatus = 200, '', '. Nu se stie daca ANAF a primit fisierul: verificati in Trimise, dupa descarcare, inainte de a retrimite.')
Thisform.SetStare(0, m.lcMesajEroare)
ENDIF
ENDPROC

View File

@@ -872,7 +872,7 @@ select a.*, cast(NULL as varchar2(1000)) as factura_detalii, 0 as modificat
Case !Empty(m.lcErrorMessage)
pcIdIncarcare = ''
pnTrimis = 1
pcMesajTrimis = m.pcMesajTrimis + Iif(This.lTest, 'TEST ', '') + 'Eroare. ' + m.lcErrorMessage
pcMesajTrimis = m.pcMesajTrimis + 'ANAF a respins incarcarea: ' + m.lcErrorMessage
Case [VALID] $ Upper(loReturn.cResponse)
pcIdIncarcare = ''
@@ -880,14 +880,14 @@ select a.*, cast(NULL as varchar2(1000)) as factura_detalii, 0 as modificat
pcMesajTrimis = m.pcMesajTrimis + loReturn.cResponse
Otherwise
pcMesajTrimis = m.pcMesajTrimis + Iif(This.lTest, 'TEST ', '') + 'Eroare. ' + m.lcErrorMessage
pcMesajTrimis = m.pcMesajTrimis + 'Raspuns ANAF neasteptat (fara status): ' + Alltrim(Transform(loReturn.cResponse))
pcIdIncarcare = ''
pnTrimis = 1
Endcase
loReturn.cMesaj = m.pcMesajTrimis + ' ' + m.lcMesajValidare
Else
pcMesajTrimis = ' Eroare transmitere - Http Status: ' + Transform(loReturn.nStatus) + ' Http Response: ' + Alltrim(Transform(loReturn.cResponse)) + ' ' + loReturn.cResponse
pcMesajTrimis = 'Eroare de comunicare cu ANAF - Http Status: ' + Transform(loReturn.nStatus) + IIF(loReturn.nStatus = 403, ' (token expirat - regenerati token-ul)', '') + '. Raspuns: ' + Alltrim(Transform(loReturn.cResponse))
loReturn.cResponse = pcMesajTrimis
loReturn.cMesaj = m.pcMesajTrimis + ' ' + m.lcMesajValidare
This.Log(loReturn.cResponse)
@@ -1322,7 +1322,8 @@ https://api.anaf.ro/<<Iif(m.llTest, [test], [prod])>>/FCTEL/rest/listaMesajePagi
EXIT
ENDIF
llSucces = This.SaveFile(loHttp.ResponseText, .T.,This.cSaveLogsPath,'response_json_' + TTOC(Datetime(),1) + '.txt')
*!* logul json e optional: esecul lui nu e esecul descarcarii (altfel mesaj gol "(nimic)")
This.SaveFile(loHttp.ResponseText, .T.,This.cSaveLogsPath,'response_json_' + TTOC(Datetime(),1) + '.txt')
TRY
loJson = nfjsonread(loHTTP.ResponseText)
@@ -3182,14 +3183,14 @@ select id, id_efactura, nr, articol, descriere, detalii, cantitate, um, pret, pr
Case !EMPTY(m.lcErrorMessage)
pcIdIncarcare = ''
pnTrimis = 1
pcMesajTrimis = m.pcMesajTrimis + Iif(This.lTest, 'TEST ', '') + 'Eroare. ' + m.lcErrorMessage
pcMesajTrimis = m.pcMesajTrimis + 'ANAF a respins incarcarea: ' + m.lcErrorMessage
Case [VALID] $ Upper(loReturn.cResponse)
pcIdIncarcare = ''
pnTrimis = 0
pcMesajTrimis = m.pcMesajTrimis + loReturn.cResponse
Otherwise
pcMesajTrimis = m.pcMesajTrimis + Iif(This.lTest, 'TEST ', '') + 'Eroare. ' + m.lcErrorMessage
pcMesajTrimis = m.pcMesajTrimis + 'Raspuns ANAF neasteptat (fara status): ' + Alltrim(Transform(loReturn.cResponse))
pcIdIncarcare = ''
pnTrimis = 1
Endcase