From a682e7985be3f68ab1061f9ccf5f26a120d88bcc Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Fri, 18 Sep 2026 23:18:30 +0300 Subject: [PATCH] storno eFactura: forma rearanjata (butoane jos, meniu Trimite, stare pe un rand, redimensionabila), sume vizibile in grid (V(250)), fara SET STEP ON in borderou; e2e adaptat (mock xmenu) Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01WsxyCHJYL6W9MZ6FPnH8ax --- clase/anaf_efactura.vc2 | 260 +++++++++++++---------- utile/Teste/storno/mock_xmenu_storno.prg | 24 +++ utile/Teste/storno/test_storno_e2e.prg | 48 ++++- 3 files changed, 212 insertions(+), 120 deletions(-) create mode 100644 utile/Teste/storno/mock_xmenu_storno.prg diff --git a/clase/anaf_efactura.vc2 b/clase/anaf_efactura.vc2 index a9545e6..3cefc6d 100644 --- a/clase/anaf_efactura.vc2 +++ b/clase/anaf_efactura.vc2 @@ -6000,7 +6000,7 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" lcAvertizare = m.lcAvertizare + 'Documentul original e nota de credit / are total negativ - stornarea va produce valori pozitive.' + Chr(13) + Chr(10) ENDIF - CREATE CURSOR crsStornoDetalii (element C(60), original C(250), nou C(250), tip N(1)) + CREATE CURSOR crsStornoDetalii (element C(60), original V(250), nou V(250), tip N(1)) loForma = NEWOBJECT('frm_storno_efactura', 'anaf_efactura.vcx', '', ; Thisform.oAnaf.AnafeFacturaServer, m.lnId, m.lcXmlOriginal, m.lcNumarOriginal, m.ldIssueDate, ; @@ -6557,7 +6557,6 @@ DEFINE CLASS anaf_efactura AS _frmbase OF "_frm_base.vcx" If !Empty(m.lnOptiune) plFaraValidareEFactura = (m.lnOptiune = 2) llNuTrimiteEFacturaANAF = (m.lnOptiune = 3) - SET STEP ON llSucces = Thisform.oAnaf.TrimiteFacturi(m.llNuTrimiteEFacturaANAF) Thisform.pgfeFactura.page1.grdFacturiEmise.Refresh() Endif @@ -15509,7 +15508,7 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx" *-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder *< OBJECTDATA: ObjPath="But_renunt1" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="lblAntet" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="lblClient" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="lblNumar" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="txtNumar" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="lblMotiv" UniqueID="" Timestamp="" /> @@ -15523,8 +15522,7 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx" *< OBJECTDATA: ObjPath="grdModificari.cNou.Header1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="grdModificari.cNou.Text1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="lblStare" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="edtStatus" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="cmdValideaza" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="cmdGenereaza" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="cmdPdf" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="cmdTrimite" UniqueID="" Timestamp="" /> @@ -15533,6 +15531,7 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx" *m: regenereazaxml *m: setstare *m: umplegrid + *m: valideaza *p: pcciffirma *p: pcclient *p: pcfisierstorno @@ -15551,18 +15550,20 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx" * * - BorderStyle = 1 + BorderStyle = 3 DoCreate = .T. - Height = 560 + Height = 480 + MinHeight = 480 + MinWidth = 760 Name = "frm_storno_efactura" - pcciffirma = '' - pcclient = '' - pcfisierstorno = '' - pcmoneda = '' - pcmotiv = '' - pcnumarnou = '' - pcnumaroriginal = '' - pcxmloriginal = '' + pcciffirma = + pcclient = + pcfisierstorno = + pcmoneda = + pcmotiv = + pcnumarnou = + pcnumaroriginal = + pcxmloriginal = pddataoriginal = {} plb2c = .F. pltest = .F. @@ -15591,15 +15592,19 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx" + + _shape1.Anchor = 10 _shape1.Height = 29 _shape1.Left = 0 _shape1.Name = "_shape1" _shape1.Top = 0 _shape1.Width = 760 + _shape2.Anchor = 9 _shape2.Left = 701 _shape2.Name = "_shape2" _shape2.Top = 0 + Lb_titlu_alb_b121.Anchor = 3 Lb_titlu_alb_b121.Caption = "Stornare eFactura" Lb_titlu_alb_b121.Name = "Lb_titlu_alb_b121" BUT_TERMIN1.Name = "BUT_TERMIN1" @@ -15614,78 +15619,73 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx" Top = 2 *< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" /> + ADD OBJECT 'cmdGenereaza' AS cmd_executa WITH ; + Anchor = 6, ; + Caption = "\ + ADD OBJECT 'cmdPdf' AS cmd_executa WITH ; + Anchor = 6, ; Caption = "\ ADD OBJECT 'cmdTrimite' AS cmd_executa WITH ; + Anchor = 12, ; Caption = "\ - ADD OBJECT 'cmdValideaza' AS cmd_executa WITH ; - Caption = "\ - - ADD OBJECT 'edtStatus' AS _editbox WITH ; - Height = 50, ; - Left = 220, ; - Name = "edtStatus", ; - ReadOnly = .T., ; - Top = 448, ; - Width = 528 - *< END OBJECT: ClassLib="_baza.vcx" BaseClass="editbox" /> - ADD OBJECT 'grdModificari' AS _grdbase WITH ; + Anchor = 15, ; ColumnCount = 3, ; DeleteMark = .F., ; FontSize = 10, ; - Height = 280, ; + Height = 252, ; Left = 12, ; Name = "grdModificari", ; Panel = 1, ; ReadOnly = .T., ; RecordSource = "crsStornoDetalii", ; RowHeight = 19, ; - TabIndex = 6, ; - Top = 164, ; + TabIndex = 3, ; + Top = 134, ; Width = 736, ; Column1.ControlSource = "crsStornoDetalii.element", ; Column1.FontSize = 10, ; Column1.Name = "cElement", ; Column1.ReadOnly = .T., ; - Column1.Width = 300, ; + Column1.Width = 330, ; Column2.Alignment = 1, ; Column2.ControlSource = "crsStornoDetalii.original", ; Column2.FontSize = 10, ; Column2.Name = "cOriginal", ; Column2.ReadOnly = .T., ; - Column2.Width = 200, ; + Column2.Width = 180, ; Column3.Alignment = 1, ; Column3.ControlSource = "crsStornoDetalii.nou", ; Column3.FontSize = 10, ; Column3.Name = "cNou", ; Column3.ReadOnly = .T., ; - Column3.Width = 200 + Column3.Width = 180 *< END OBJECT: ClassLib="_grd_base.vcx" BaseClass="grid" /> ADD OBJECT 'grdModificari.cElement.Header1' AS header WITH ; @@ -15743,84 +15743,88 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx" SelectedBackColor = 100,185,255 *< END OBJECT: BaseClass="textbox" /> - ADD OBJECT 'lblAntet' AS _label WITH ; - AutoSize = .F., ; - Caption = "", ; - Height = 46, ; - Left = 12, ; - Name = "lblAntet", ; - Top = 38, ; - Width = 736, ; - WordWrap = .T. - *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> - ADD OBJECT 'lblAvertisment' AS _label WITH ; + Anchor = 11, ; AutoSize = .F., ; Caption = "", ; ForeColor = 192,0,0, ; - Height = 40, ; + Height = 36, ; Left = 12, ; Name = "lblAvertisment", ; - Top = 118, ; + Top = 90, ; Width = 736, ; WordWrap = .T. *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> + ADD OBJECT 'lblClient' AS _label WITH ; + Anchor = 1, ; + AutoSize = .F., ; + Caption = "", ; + Height = 18, ; + Left = 12, ; + Name = "lblClient", ; + Top = 34, ; + Width = 736 + *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> + ADD OBJECT 'lblMotiv' AS _label WITH ; + Anchor = 1, ; Caption = "Motiv (optional):", ; Left = 270, ; Name = "lblMotiv", ; - Top = 90 + Top = 62 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> ADD OBJECT 'lblNumar' AS _label WITH ; + Anchor = 1, ; Caption = "Numar storno:", ; Left = 12, ; Name = "lblNumar", ; - Top = 90 + Top = 62 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> ADD OBJECT 'lblStare' AS _label WITH ; + Anchor = 14, ; + AutoSize = .F., ; Caption = "Nevalidat", ; FontBold = .T., ; + ForeColor = 96,96,96, ; + Height = 34, ; Left = 12, ; Name = "lblStare", ; - Top = 452, ; - Width = 200 + Top = 396, ; + Width = 736, ; + WordWrap = .T. *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> ADD OBJECT 'txtMotiv' AS _textbox WITH ; + Anchor = 11, ; ControlSource = "Thisform.pcmotiv", ; + Format = "!K", ; Height = 23, ; Left = 375, ; MaxLength = 200, ; Name = "txtMotiv", ; TabIndex = 2, ; - Top = 87, ; + Top = 59, ; Width = 373 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="textbox" /> ADD OBJECT 'txtNumar' AS _textbox WITH ; + Anchor = 1, ; ControlSource = "Thisform.pcnumarnou", ; + Format = "!K", ; Height = 23, ; Left = 105, ; Name = "txtNumar", ; TabIndex = 1, ; - Top = 87, ; + Top = 59, ; Width = 150 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="textbox" /> - PROCEDURE Activate - DODEFAULT() - TRY - This.cmdValideaza.SetFocus() - CATCH - ENDTRY - ENDPROC - PROCEDURE EnableButoane LPARAMETERS tlEnable - This.cmdValideaza.Enabled = m.tlEnable + This.cmdGenereaza.Enabled = m.tlEnable This.cmdPdf.Enabled = m.tlEnable This.cmdTrimite.Enabled = m.tlEnable This.txtNumar.Enabled = m.tlEnable @@ -15832,6 +15836,7 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx" LPARAMETERS toAnaf, tnIdEfactura, tcXmlOriginal, tcNumarOriginal, tdDataOriginal, ; tcClient, tcCifFirma, tnTotal, tcMoneda, tlTest, tlB2C, tcFisierStorno, tcNumarNou, ; tcAvertizare + DODEFAULT() This.poAnaf = toAnaf This.pnIdEfactura = tnIdEfactura @@ -15849,8 +15854,7 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx" This.Caption = 'Stornare eFactura ' + m.tcNumarOriginal + ' - ' + IIF(m.tlTest, 'TEST', 'PRODUCTIE') This.Lb_titlu_alb_b121.Caption = This.Caption - This.lblAntet.Caption = 'Factura ' + m.tcNumarOriginal + ' din ' + Dtoc(m.tdDataOriginal) + ' -> Storno' + Chr(13) + Chr(10) + ; - 'Client: ' + m.tcClient + ' CIF firma: ' + m.tcCifFirma + ' Moneda: ' + m.tcMoneda + This.lblClient.Caption = 'Client: ' + m.tcClient + ' CIF: ' + m.tcCifFirma + ' Moneda: ' + m.tcMoneda This.lblAvertisment.Caption = m.tcAvertizare This.grdModificari.SetAll("DynamicFontBold", "tip = 2", "Column") @@ -15870,8 +15874,7 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx" llSucces = StornoEFacturaXML(This.pcXmlOriginal, m.lcNumarNou, m.lcNotaFinal, This.pcFisierStorno, @laModif, @lcMesaj) IF !m.llSucces - This.edtStatus.Value = 'Eroare la regenerare: ' + m.lcMesaj - This.SetStare(0) + This.SetStare(0, 'Eroare la regenerare: ' + m.lcMesaj) RETURN .F. ENDIF This.UmpleGrid(@laModif) @@ -15879,27 +15882,32 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx" ENDPROC PROCEDURE SetStare - LPARAMETERS tnStare + LPARAMETERS tnStare, tcMesaj + IF PCOUNT() < 2 + tcMesaj = '' + ENDIF This.pnStare = m.tnStare This.cmdPdf.Enabled = .T. + This.lblStare.ToolTipText = m.tcMesaj DO CASE CASE m.tnStare = 2 * trimis - stare terminala (D26/D35) - This.lblStare.Caption = 'Trimis' - This.cmdValideaza.Enabled = .F. + This.lblStare.Caption = IIF(Empty(m.tcMesaj), 'Trimis', m.tcMesaj) + This.lblStare.ForeColor = RGB(0,64,160) This.cmdTrimite.Enabled = .F. This.txtNumar.Enabled = .F. This.txtMotiv.Enabled = .F. CASE m.tnStare = 1 - This.lblStare.Caption = 'Valid' - This.cmdValideaza.Enabled = .T. + This.lblStare.Caption = IIF(Empty(m.tcMesaj), 'Valid', m.tcMesaj) + This.lblStare.ForeColor = RGB(0,128,0) This.cmdTrimite.Enabled = .T. This.txtNumar.Enabled = .T. This.txtMotiv.Enabled = .T. OTHERWISE - This.lblStare.Caption = 'Nevalidat' - This.cmdValideaza.Enabled = .T. - This.cmdTrimite.Enabled = .F. + * mesaj gol = nevalidat (gri), mesaj dat = eroare de validare/regenerare (rosu) + This.lblStare.Caption = IIF(Empty(m.tcMesaj), 'Nevalidat', m.tcMesaj) + This.lblStare.ForeColor = IIF(Empty(m.tcMesaj), RGB(96,96,96), RGB(192,0,0)) + This.cmdTrimite.Enabled = .T. This.txtNumar.Enabled = .T. This.txtMotiv.Enabled = .T. ENDCASE @@ -15919,6 +15927,34 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx" This.grdModificari.Refresh() ENDPROC + PROCEDURE Valideaza + LOCAL llValid, lcMesajValid, loSrv, loExport + IF !This.RegenereazaXml() + RETURN .F. + ENDIF + loSrv = This.poAnaf + This.EnableButoane(.F.) + WAIT WINDOW 'Se valideaza...' NOWAIT + loSrv.RefreshTokenAuto() + loExport = CREATEOBJECT('ExportEFactura', .T., loSrv.cToken) + llValid = m.loExport.ValidareEFacturaANAF(This.pcFisierStorno, @lcMesajValid) + CLEAR TYPEAHEAD + WAIT CLEAR + This.EnableButoane(.T.) + IF m.llValid + This.SetStare(1) + ELSE + This.SetStare(0, IIF(Empty(m.lcMesajValid), 'Validare indisponibila - verificati tokenul/reteaua.', 'Invalid: ' + m.lcMesajValid)) + ENDIF + RETURN m.llValid + ENDPROC + + PROCEDURE cmdGenereaza.Click + IF Thisform.RegenereazaXml() + Thisform.SetStare(0, 'XML regenerat.') + ENDIF + ENDPROC + PROCEDURE cmdPdf.Click LOCAL lcXmlCurent, lcFisierPdf lcXmlCurent = Filetostr(Thisform.pcFisierStorno) @@ -15930,10 +15966,27 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx" ENDPROC PROCEDURE cmdTrimite.Click - LOCAL lcMesajConf, loReturn, lcDirProcesat, lcFisierProcesat - IF Thisform.pnStare <> 1 + LOCAL lcMesajConf, loReturn, lcDirProcesat, lcFisierProcesat, lnOptiune + IF Thisform.pnStare = 2 RETURN ENDIF + lnOptiune = xmenu('\ 6 @@ -15957,37 +16010,12 @@ DEFINE CLASS frm_storno_efactura AS _frmbase OF "_frm_base.vcx" ENDTRY ENDIF goLog.Log('Storno eFactura: ' + Thisform.pcNumarOriginal + ' -> ' + ALLTRIM(Thisform.pcNumarNou) + ', index ' + loReturn.cIdIncarcare + ', ' + IIF(Thisform.plTest,'TEST','PRODUCTIE')) - Thisform.edtStatus.Value = '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.' Thisform.EnableButoane(.T.) - Thisform.SetStare(2) + 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.') ELSE - Thisform.edtStatus.Value = 'Eroare: ' + loReturn.cMesaj + '. Verificati in Trimise, dupa descarcare, inainte de a retrimite.' Thisform.EnableButoane(.T.) - Thisform.SetStare(0) - ENDIF - ENDPROC - - PROCEDURE cmdValideaza.Click - LOCAL llValid, lcMesajValid, loSrv, loExport - IF !Thisform.RegenereazaXml() - RETURN - ENDIF - loSrv = Thisform.poAnaf - Thisform.EnableButoane(.F.) - WAIT WINDOW 'Se valideaza...' NOWAIT - loSrv.RefreshTokenAuto() - loExport = CREATEOBJECT('ExportEFactura', .T., loSrv.cToken) - llValid = m.loExport.ValidareEFacturaANAF(Thisform.pcFisierStorno, @lcMesajValid) - CLEAR TYPEAHEAD - WAIT CLEAR - Thisform.EnableButoane(.T.) - IF m.llValid - Thisform.edtStatus.Value = 'Valid.' - Thisform.SetStare(1) - ELSE - Thisform.edtStatus.Value = IIF(Empty(m.lcMesajValid), 'Validare indisponibila - verificati tokenul/reteaua.', 'Invalid: ' + m.lcMesajValid) - Thisform.SetStare(0) + Thisform.SetStare(0, 'Eroare: ' + loReturn.cMesaj + '. Verificati in Trimise, dupa descarcare, inainte de a retrimite.') ENDIF ENDPROC diff --git a/utile/Teste/storno/mock_xmenu_storno.prg b/utile/Teste/storno/mock_xmenu_storno.prg new file mode 100644 index 0000000..7a91a70 --- /dev/null +++ b/utile/Teste/storno/mock_xmenu_storno.prg @@ -0,0 +1,24 @@ +* mock_xmenu_storno.prg - mock XMENU specific testului E2E storno (test_storno_e2e.prg). +* Raspunde din coada PUBLIC gaXmenuQueue/gnXmenuQueuePos (populata de test inainte de fiecare +* Click care deschide meniul cmdTrimite); coada goala -> 0 (echivalent Esc/renuntare la xmenu). +* Logheaza toate apelurile in PUBLIC gaXmenuCalls/gnXmenuCalls. +FUNCTION xmenu + LPARAMETERS tcItems, tnBar + LOCAL lnRaspuns + IF TYPE('gnXmenuQueuePos') = 'N' AND gnXmenuQueuePos <= ALEN(gaXmenuQueue) + lnRaspuns = gaXmenuQueue[gnXmenuQueuePos] + gnXmenuQueuePos = gnXmenuQueuePos + 1 + ELSE + lnRaspuns = 0 + ENDIF + IF TYPE('gnXmenuCalls') = 'N' + gnXmenuCalls = gnXmenuCalls + 1 + DIMENSION gaXmenuCalls[gnXmenuCalls, 2] + gaXmenuCalls[gnXmenuCalls, 1] = TRANSFORM(tcItems) + gaXmenuCalls[gnXmenuCalls, 2] = lnRaspuns + ENDIF + IF TYPE('gcUILog') = 'C' + DO PrLogLocal WITH 'MOCK xmenu: [' + LEFT(TRANSFORM(tcItems), 100) + '] -> ' + TRANSFORM(lnRaspuns) + ENDIF + RETURN lnRaspuns +ENDFUNC diff --git a/utile/Teste/storno/test_storno_e2e.prg b/utile/Teste/storno/test_storno_e2e.prg index 0f5b0f1..717af45 100644 --- a/utile/Teste/storno/test_storno_e2e.prg +++ b/utile/Teste/storno/test_storno_e2e.prg @@ -8,8 +8,9 @@ * * ZERO trimiteri ANAF: Thisform.oAnaf.AnafeFacturaServer e inlocuit cu MockAnafServerStorno * (mock_anaf_server_storno.prg) imediat dupa ce forma reala citeste cCodFiscal/lTest de la -* serverul real. cmdValideaza (ValidareEFacturaANAF, apel HTTP real, hardcodat /prod/ - -* xmlefactura.prg:1275,1278) NU e apelat; se ocoleste cu SetStare(1) direct. +* serverul real. Valideaza() (ValidareEFacturaANAF, apel HTTP real, hardcodat /prod/ - +* xmlefactura.prg:1275,1278) NU e apelat; se ocoleste cu SetStare(1) direct. cmdTrimite.Click +* deschide XMENU, mockuit din coada gaXmenuQueue (mock_xmenu_storno.prg). SET SAFETY OFF SET TALK OFF @@ -21,15 +22,20 @@ SET NULLDISPLAY TO '' CLOSE DATABASES PUBLIC gcUILog, gcTestDir, gcTesteDir -PUBLIC gnPass, gnFail, gnMockRaspuns, gnAmsgCalls, gnMockApeluri +PUBLIC gnPass, gnFail, gnMockRaspuns, gnAmsgCalls, gnMockApeluri, gnXmenuCalls, gnXmenuQueuePos PUBLIC loAnaf, loForm, loMockSrv, loStornoForm, lnLastErrorNo, lcLastErrorMsg DECLARE gaAmsgCalls[1,2] DECLARE gaMockApeluri[1,3] +DECLARE gaXmenuCalls[1,2] +DECLARE gaXmenuQueue[1] gnPass = 0 gnFail = 0 gnAmsgCalls = 0 gnMockApeluri = 0 gnMockRaspuns = 6 +gnXmenuCalls = 0 +gnXmenuQueuePos = 1 +gaXmenuQueue[1] = 0 lnLastErrorNo = 0 lcLastErrorMsg = '' @@ -44,6 +50,7 @@ ON SHUTDOWN QUIT * mock-urile INAINTEA test_init_env_auto: la nume duplicat de procedura castiga fisierul * cautat PRIMUL (vezi mock_amessagebox.prg / capcana testare-ui-vfp.md) SET PROCEDURE TO (gcTestDir + 'mock_amessagebox_storno.prg') ADDITIVE +SET PROCEDURE TO (gcTestDir + 'mock_xmenu_storno.prg') ADDITIVE SET PROCEDURE TO (gcTestDir + 'mock_anaf_server_storno.prg') ADDITIVE TRY @@ -365,7 +372,28 @@ DEFINE CLASS DriverStorno AS Custom DO TVerdict WITH RECCOUNT('crsStornoDetalii') > 0, 'grid crsStornoDetalii populat', 'reccount=' + TRANSFORM(RECCOUNT('crsStornoDetalii')) DO TVerdict WITH 'TEST' $ UPPER(loStorno.Caption), 'Caption contine TEST', 'caption=[' + loStorno.Caption + ']' DO TVerdict WITH UPPER(ALLTRIM(loStorno.lblStare.Caption)) == 'NEVALIDAT', 'stare initiala Nevalidat', 'stare=[' + loStorno.lblStare.Caption + ']' + DO TVerdict WITH loStorno.lblStare.ForeColor == RGB(96,96,96), 'lblStare gri la Nevalidat', 'forecolor=' + TRANSFORM(loStorno.lblStare.ForeColor) DO TVerdict WITH FILE(loStorno.pcFisierStorno), 'fisier storno exista pe disc', 'fisier=[' + loStorno.pcFisierStorno + ']' + DO PrLogLocal WITH 'grid coloane: ' + TRANSFORM(loStorno.grdModificari.cElement.Width) + '/' + TRANSFORM(loStorno.grdModificari.cOriginal.Width) + '/' + TRANSFORM(loStorno.grdModificari.cNou.Width) + ; + ' controlsource: ' + loStorno.grdModificari.cElement.ControlSource + '|' + loStorno.grdModificari.cOriginal.ControlSource + '|' + loStorno.grdModificari.cNou.ControlSource + DO TVerdict WITH loStorno.grdModificari.cElement.Width = 330 AND loStorno.grdModificari.cOriginal.Width = 180 AND loStorno.grdModificari.cNou.Width = 180, 'latimi coloane grid (330/180/180)', '' + DO TVerdict WITH LOWER(loStorno.grdModificari.cElement.ControlSource) == 'crsstornodetalii.element' AND LOWER(loStorno.grdModificari.cOriginal.ControlSource) == 'crsstornodetalii.original' AND LOWER(loStorno.grdModificari.cNou.ControlSource) == 'crsstornodetalii.nou', 'controlsource coloane grid calificat', '' + + * V(250) in loc de C(250) (fix Marius, cf. docs/storno_forma_ux_diff.md pct.12b) - + * sumele nu mai vin cu padding la dreapta, care le scotea vizual din coloana. + LOCAL lnPadFail, lcPadDetail + lnPadFail = 0 + lcPadDetail = '' + SELECT crsStornoDetalii + SCAN + IF LEN(crsStornoDetalii.original) != LEN(ALLTRIM(crsStornoDetalii.original)) OR LEN(crsStornoDetalii.nou) != LEN(ALLTRIM(crsStornoDetalii.nou)) + lnPadFail = lnPadFail + 1 + lcPadDetail = lcPadDetail + 'rand=' + TRANSFORM(RECNO()) + ' original=[' + crsStornoDetalii.original + '] nou=[' + crsStornoDetalii.nou + '] ' + ENDIF + ENDSCAN + DO TVerdict WITH lnPadFail = 0, 'fara padding pe original/nou (V(250), sumele nu mai ies din coloana)', 'randuri cu padding=' + TRANSFORM(lnPadFail) + ' ' + lcPadDetail + + DO TVerdict WITH EMPTY(loStorno.txtMotiv.Value), 'txtMotiv fara apostrofuri la init', 'value=[' + TRANSFORM(loStorno.txtMotiv.Value) + ']' This.nState = 1 CASE This.nState = 1 @@ -381,8 +409,20 @@ DEFINE CLASS DriverStorno AS Custom loStorno = loStornoForm loStorno.SetStare(1) DO TVerdict WITH UPPER(ALLTRIM(loStorno.lblStare.Caption)) == 'VALID', 'SetStare(1) -> Valid (ocolire ValidareEFacturaANAF, retea reala, cf. instructiuni)', 'stare=[' + loStorno.lblStare.Caption + ']' + DO TVerdict WITH loStorno.lblStare.ForeColor == RGB(0,128,0), 'lblStare verde la Valid', 'forecolor=' + TRANSFORM(loStorno.lblStare.ForeColor) + + * renuntare la xmenu (0) -> cmdTrimite.Click nu schimba nimic, fara retea + gaXmenuQueue[1] = 0 + gnXmenuQueuePos = 1 loStorno.cmdTrimite.Click() - DO TVerdict WITH UPPER(ALLTRIM(loStorno.lblStare.Caption)) == 'TRIMIS', 'dupa cmdTrimite.Click -> Trimis', 'stare=[' + loStorno.lblStare.Caption + ']' + DO TVerdict WITH UPPER(ALLTRIM(loStorno.lblStare.Caption)) == 'VALID', 'renuntare xmenu -> starea nu se schimba', 'stare=[' + loStorno.lblStare.Caption + ']' + + * optiunea 2 (trimite fara validare, cf. instructiuni: fara Valideaza/retea reala) + gaXmenuQueue[1] = 2 + gnXmenuQueuePos = 1 + loStorno.cmdTrimite.Click() + DO TVerdict WITH loStorno.pnStare = 2, 'dupa cmdTrimite.Click (xmenu=2) -> Trimis', 'pnStare=' + TRANSFORM(loStorno.pnStare) + ' caption=[' + loStorno.lblStare.Caption + ']' + DO TVerdict WITH loStorno.lblStare.ForeColor == RGB(0,64,160), 'lblStare albastru la Trimis', 'forecolor=' + TRANSFORM(loStorno.lblStare.ForeColor) DO TVerdict WITH ExistaApelMock('TrimiteFacturaXML'), 'mock a primit TrimiteFacturaXML', '' This.nState = 3