From 887ac9faeccf8545fc488cb48715fe606f985cd4 Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Sun, 23 Aug 2026 10:29:05 +0300 Subject: [PATCH] sync SVN r18038 --- clase/overificari.vc2 | 658 +++++++++++------- docs/flux-editare-vfp-text.md | 8 + programe/oproceduri_comune.prg | 102 +-- programe/validare.prg | 34 +- .../Teste/todo21/mock_meniu_dblclick_deps.prg | 7 + .../todo21/test_todo21_e2e_verificare.prg | 375 ++++++++++ .../todo21/test_todo21_grid_dblclick.prg | 321 +++++++-- .../Teste/todo21/test_todo21_mesaj_meniu.prg | 376 ++++++++++ 8 files changed, 1519 insertions(+), 362 deletions(-) create mode 100644 utile/Teste/todo21/test_todo21_e2e_verificare.prg create mode 100644 utile/Teste/todo21/test_todo21_mesaj_meniu.prg diff --git a/clase/overificari.vc2 b/clase/overificari.vc2 index dadfc5d..5d34b12 100644 --- a/clase/overificari.vc2 +++ b/clase/overificari.vc2 @@ -1612,13 +1612,9 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" *< OBJECTDATA: ObjPath="_grdbase1.cDataInactivare.Text1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="_grdbase1.cDataReactivare.Header1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="_grdbase1.cDataReactivare.Text1" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="But_verifica1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="Gridextra1" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="chkMFIN" UniqueID="" Timestamp="" /> + *< OBJECTDATA: ObjPath="optVedere" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="chkVIES" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="chkMFINURL" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="chkVIESURL" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="spnPauza" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="lblInfo" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="chkLiniaCurenta" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="chkDuplicat" UniqueID="" Timestamp="" /> @@ -1627,15 +1623,18 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" *< OBJECTDATA: ObjPath="But_renunt1" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="cmdVerifica" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="lblVerifica" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="chkExperimental" UniqueID="" Timestamp="" /> - *< OBJECTDATA: ObjPath="chkANAF" UniqueID="" Timestamp="" /> *< OBJECTDATA: ObjPath="chkInactiv" UniqueID="" Timestamp="" /> * + *m: asazafiltre + *m: construiesteatentie *m: filtreatentionari *m: meniu_dblclick *m: meniu_dblclick_partener + *m: setvedere + *p: lafiseazaales && Coloana Ales e vizibila doar cand apelantul o cere (D394 pe perioade vechi) *p: lautoverificare && Daca se porneste verificarea automat din metoda Show, cand este apelata verificarea din Reg. TVA + *p: lexperimental && Nu mai functioneaza mfinante.ro experimental, pastrat ca proprietate citita/scrisa din alte formulare *p: lmfin *p: lvies * @@ -1647,13 +1646,17 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" cusername = DoCreate = .T. Height = 416 + lafiseazaales = .F. lautoverificare = .F. + lexperimental = .F. lmfin = .F. lvies = .F. Name = "frm_verificare_parteneri" Width = 774 _memberdata = + + _shape1.Anchor = 10 _shape1.Height = 29 @@ -1661,11 +1664,13 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" _shape1.Name = "_shape1" _shape1.Top = 0 _shape1.Width = 780 + _shape2.Left = 717 _shape2.Name = "_shape2" + _shape2.Top = 0 Lb_titlu_alb_b121.Caption = "Verificare parteneri" Lb_titlu_alb_b121.Left = 12 Lb_titlu_alb_b121.Name = "Lb_titlu_alb_b121" - Lb_titlu_alb_b121.Top = 0 + Lb_titlu_alb_b121.Top = 4 BUT_TERMIN1.Anchor = 8 BUT_TERMIN1.Left = 743 BUT_TERMIN1.Name = "BUT_TERMIN1" @@ -1678,13 +1683,13 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ColumnCount = 34, ; DeleteMark = .F., ; HeaderHeight = 32, ; - Height = 283, ; + Height = 298, ; Left = 12, ; Name = "_grdbase1", ; Panel = 1, ; ReadOnly = .T., ; RecordSource = "crsverificareparteneri", ; - Top = 84, ; + Top = 80, ; Width = 756, ; Column1.ColumnOrder = 1, ; Column1.ControlSource = "crsverificareparteneri.ales", ; @@ -1716,57 +1721,58 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" Column4.Sparse = .F., ; Column4.Visible = .T., ; Column4.Width = 41, ; - Column5.ColumnOrder = 13, ; + Column5.ColumnOrder = 18, ; Column5.ControlSource = "crsverificareparteneri.firma", ; + Column5.DynamicBackColor = "RGB(205,229,252)", ; Column5.Name = "Column5", ; Column5.ReadOnly = .T., ; Column5.Visible = .T., ; Column5.Width = 305, ; - Column6.ColumnOrder = 21, ; + Column6.ColumnOrder = 22, ; Column6.ControlSource = "crsverificareparteneri.cod", ; + Column6.DynamicBackColor = "RGB(205,229,252)", ; Column6.Name = "Column6", ; Column6.ReadOnly = .T., ; Column6.Visible = .T., ; Column6.Width = 75, ; - Column7.BackColor = 185,220,255, ; - Column7.ColumnOrder = 23, ; + Column7.ColumnOrder = 24, ; Column7.ControlSource = "crsverificareparteneri.adresa", ; - Column7.DynamicBackColor = "RGB(185,220,255)", ; + Column7.DynamicBackColor = "RGB(205,229,252)", ; Column7.Name = "Column7", ; Column7.ReadOnly = .T., ; Column7.Visible = .T., ; Column7.Width = 150, ; - Column8.ColumnOrder = 24, ; + Column8.ColumnOrder = 25, ; Column8.ControlSource = "crsverificareparteneri.judet", ; Column8.Name = "Column8", ; Column8.ReadOnly = .T., ; Column8.Visible = .T., ; Column8.Width = 89, ; - Column9.ColumnOrder = 25, ; + Column9.ColumnOrder = 26, ; Column9.ControlSource = "crsverificareparteneri.regcom", ; Column9.Name = "Column9", ; Column9.ReadOnly = .T., ; Column9.Visible = .T., ; Column9.Width = 75, ; - Column10.ColumnOrder = 26, ; + Column10.ColumnOrder = 27, ; Column10.ControlSource = "crsverificareparteneri.codpostal", ; Column10.Name = "Column10", ; Column10.ReadOnly = .T., ; Column10.Visible = .T., ; Column10.Width = 75, ; - Column11.ColumnOrder = 27, ; + Column11.ColumnOrder = 28, ; Column11.ControlSource = "crsverificareparteneri.telefon", ; Column11.Name = "Column11", ; Column11.ReadOnly = .T., ; Column11.Visible = .T., ; Column11.Width = 75, ; - Column12.ColumnOrder = 28, ; + Column12.ColumnOrder = 29, ; Column12.ControlSource = "crsverificareparteneri.fax", ; Column12.Name = "Column12", ; Column12.ReadOnly = .T., ; Column12.Visible = .T., ; Column12.Width = 75, ; - Column13.ColumnOrder = 29, ; + Column13.ColumnOrder = 30, ; Column13.ControlSource = "crsverificareparteneri.vies", ; Column13.CurrentControl = "_checkbox1", ; Column13.Name = "Column13", ; @@ -1774,7 +1780,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" Column13.Sparse = .F., ; Column13.Visible = .T., ; Column13.Width = 75, ; - Column14.ColumnOrder = 30, ; + Column14.ColumnOrder = 31, ; Column14.ControlSource = "crsverificareparteneri.platitortva", ; Column14.CurrentControl = "_checkbox1", ; Column14.Name = "Column14", ; @@ -1782,7 +1788,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" Column14.Sparse = .F., ; Column14.Visible = .T., ; Column14.Width = 75, ; - Column15.ColumnOrder = 31, ; + Column15.ColumnOrder = 34, ; Column15.ControlSource = "crsverificareparteneri.eroare", ; Column15.Name = "Column15", ; Column15.ReadOnly = .T., ; @@ -1790,16 +1796,18 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" Column15.Width = 58, ; Column16.ColumnOrder = 8, ; Column16.ControlSource = "datatvamfin", ; + Column16.DynamicBackColor = "RGB(205,229,252)", ; Column16.Name = "Column16", ; Column16.ReadOnly = .T., ; Column17.ColumnOrder = 7, ; Column17.ControlSource = "platitortvamfin", ; Column17.CurrentControl = "_checkbox1", ; + Column17.DynamicBackColor = "RGB(205,229,252)", ; Column17.Name = "Column17", ; Column17.ReadOnly = .T., ; Column17.Sparse = .F., ; Column17.Width = 71, ; - Column18.ColumnOrder = 32, ; + Column18.ColumnOrder = 35, ; Column18.ControlSource = "crsverificareparteneri.duplicat", ; Column18.CurrentControl = "_checkbox1", ; Column18.Name = "Column18", ; @@ -1811,8 +1819,9 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" Column19.Name = "Column19", ; Column19.ReadOnly = .T., ; Column19.Width = 41, ; - Column20.ColumnOrder = 12, ; + Column20.ColumnOrder = 17, ; Column20.ControlSource = "stare", ; + Column20.DynamicBackColor = "RGB(205,229,252)", ; Column20.Name = "Column20", ; Column20.ReadOnly = .T., ; Column20.Width = 88, ; @@ -1820,83 +1829,92 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" Column21.ControlSource = "atentie", ; Column21.Name = "Column21", ; Column21.ReadOnly = .T., ; - Column21.Width = 78, ; - Column22.ColumnOrder = 33, ; + Column21.Width = 110, ; + Column22.ColumnOrder = 32, ; Column22.ControlSource = "crsverificareparteneri.id_part", ; Column22.Name = "Column23", ; Column22.ReadOnly = .T., ; - Column23.ColumnOrder = 14, ; + Column23.ColumnOrder = 19, ; Column23.ControlSource = "crsverificareparteneri.tvaincasare", ; Column23.CurrentControl = "Check1", ; + Column23.DynamicBackColor = "RGB(205,229,252)", ; Column23.Name = "cTVAincasare", ; Column23.ReadOnly = .T., ; Column23.Sparse = .F., ; Column23.Width = 59, ; - Column24.ColumnOrder = 17, ; + Column24.ColumnOrder = 20, ; Column24.ControlSource = "crsverificareparteneri.splittva", ; Column24.CurrentControl = "Check1", ; + Column24.DynamicBackColor = "RGB(205,229,252)", ; Column24.Name = "cSplitTVA", ; Column24.ReadOnly = .T., ; Column24.Sparse = .F., ; Column24.Width = 59, ; - Column25.ColumnOrder = 18, ; + Column25.ColumnOrder = 21, ; Column25.ControlSource = "crsverificareparteneri.inactiv", ; Column25.CurrentControl = "Check1", ; + Column25.DynamicBackColor = "RGB(205,229,252)", ; Column25.Name = "cInactiv", ; Column25.ReadOnly = .T., ; Column25.Sparse = .F., ; Column25.Width = 51, ; - Column26.BackColor = 255,202,228, ; - Column26.ColumnOrder = 22, ; + Column26.ColumnOrder = 23, ; Column26.ControlSource = "crsverificareparteneri.adresa_roa", ; - Column26.DynamicBackColor = "RGB(255,202,228)", ; Column26.Name = "Column26", ; Column26.ReadOnly = .T., ; Column26.Width = 150, ; - Column27.ColumnOrder = 34, ; + Column27.ColumnOrder = 33, ; Column27.ControlSource = "IIF(EMPTY(NVL(sursa,'')),'',IIF(ALLTRIM(sursa)=='ANAF','ANAF','CACHE '+DTOC(NVL(data_sursa,DATE()))+IIF(ALLTRIM(sursa)=='CACHE_INDISP',' (ANAF indisponibil)','')))", ; + Column27.DynamicBackColor = "RGB(205,229,252)", ; Column27.Name = "Column27", ; Column27.ReadOnly = .T., ; Column27.Visible = .T., ; Column27.Width = 230, ; Column28.ColumnOrder = 9, ; Column28.ControlSource = "crsverificareparteneri.data_inceput_scptva", ; + Column28.DynamicBackColor = "RGB(205,229,252)", ; Column28.Name = "cDataInceputScpTva", ; Column28.ReadOnly = .T., ; Column28.Visible = .T., ; Column28.Width = 85, ; Column29.ColumnOrder = 10, ; Column29.ControlSource = "crsverificareparteneri.data_sfarsit_scptva", ; + Column29.DynamicBackColor = "RGB(205,229,252)", ; Column29.Name = "cDataSfarsitScpTva", ; Column29.ReadOnly = .T., ; Column29.Visible = .T., ; Column29.Width = 85, ; Column30.ColumnOrder = 11, ; Column30.ControlSource = "crsverificareparteneri.data_anul_imp_scptva", ; + Column30.DynamicBackColor = "RGB(205,229,252)", ; Column30.Name = "cDataAnulImpScpTva", ; Column30.ReadOnly = .T., ; Column30.Visible = .T., ; Column30.Width = 85, ; - Column31.ColumnOrder = 15, ; + Column31.ColumnOrder = 12, ; Column31.ControlSource = "crsverificareparteneri.data_inceput_tvainc", ; + Column31.DynamicBackColor = "RGB(205,229,252)", ; Column31.Name = "cDataInceputTvaInc", ; Column31.ReadOnly = .T., ; Column31.Visible = .T., ; Column31.Width = 85, ; - Column32.ColumnOrder = 16, ; + Column32.ColumnOrder = 13, ; Column32.ControlSource = "crsverificareparteneri.data_sfarsit_tvainc", ; + Column32.DynamicBackColor = "RGB(205,229,252)", ; Column32.Name = "cDataSfarsitTvaInc", ; Column32.ReadOnly = .T., ; Column32.Visible = .T., ; Column32.Width = 85, ; - Column33.ColumnOrder = 19, ; + Column33.ColumnOrder = 14, ; Column33.ControlSource = "crsverificareparteneri.data_inactivare", ; + Column33.DynamicBackColor = "RGB(205,229,252)", ; Column33.Name = "cDataInactivare", ; Column33.ReadOnly = .T., ; Column33.Visible = .T., ; Column33.Width = 85, ; - Column34.ColumnOrder = 20, ; + Column34.ColumnOrder = 15, ; Column34.ControlSource = "crsverificareparteneri.data_reactivare", ; + Column34.DynamicBackColor = "RGB(205,229,252)", ; Column34.Name = "cDataReactivare", ; Column34.ReadOnly = .T., ; Column34.Visible = .T., ; @@ -1916,7 +1934,8 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ForeColor = 0,0,0, ; Margin = 0, ; Name = "Text1", ; - ReadOnly = .T. + ReadOnly = .T., ; + SelectedBackColor = 100,185,255 *< END OBJECT: BaseClass="textbox" /> ADD OBJECT '_grdbase1.cDataInactivare.Header1' AS header WITH ; @@ -1932,7 +1951,8 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ForeColor = 0,0,0, ; Margin = 0, ; Name = "Text1", ; - ReadOnly = .T. + ReadOnly = .T., ; + SelectedBackColor = 100,185,255 *< END OBJECT: BaseClass="textbox" /> ADD OBJECT '_grdbase1.cDataInceputScpTva.Header1' AS header WITH ; @@ -1948,7 +1968,8 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ForeColor = 0,0,0, ; Margin = 0, ; Name = "Text1", ; - ReadOnly = .T. + ReadOnly = .T., ; + SelectedBackColor = 100,185,255 *< END OBJECT: BaseClass="textbox" /> ADD OBJECT '_grdbase1.cDataInceputTvaInc.Header1' AS header WITH ; @@ -1964,7 +1985,8 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ForeColor = 0,0,0, ; Margin = 0, ; Name = "Text1", ; - ReadOnly = .T. + ReadOnly = .T., ; + SelectedBackColor = 100,185,255 *< END OBJECT: BaseClass="textbox" /> ADD OBJECT '_grdbase1.cDataReactivare.Header1' AS header WITH ; @@ -1980,7 +2002,8 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ForeColor = 0,0,0, ; Margin = 0, ; Name = "Text1", ; - ReadOnly = .T. + ReadOnly = .T., ; + SelectedBackColor = 100,185,255 *< END OBJECT: BaseClass="textbox" /> ADD OBJECT '_grdbase1.cDataSfarsitScpTva.Header1' AS header WITH ; @@ -1996,7 +2019,8 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ForeColor = 0,0,0, ; Margin = 0, ; Name = "Text1", ; - ReadOnly = .T. + ReadOnly = .T., ; + SelectedBackColor = 100,185,255 *< END OBJECT: BaseClass="textbox" /> ADD OBJECT '_grdbase1.cDataSfarsitTvaInc.Header1' AS header WITH ; @@ -2012,7 +2036,8 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ForeColor = 0,0,0, ; Margin = 0, ; Name = "Text1", ; - ReadOnly = .T. + ReadOnly = .T., ; + SelectedBackColor = 100,185,255 *< END OBJECT: BaseClass="textbox" /> ADD OBJECT '_grdbase1.cInactiv.Check1' AS checkbox WITH ; @@ -2188,7 +2213,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ADD OBJECT '_grdbase1.Column16.Header1' AS header WITH ; Alignment = 2, ; - Caption = "Data verificata", ; + Caption = "Verificat la", ; Name = "Header1", ; WordWrap = .T. *< END OBJECT: BaseClass="header" /> @@ -2287,7 +2312,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ADD OBJECT '_grdbase1.Column20.Header1' AS header WITH ; Alignment = 2, ; - Caption = "Stare", ; + Caption = "Mesaj ANAF", ; Name = "Header1" *< END OBJECT: BaseClass="header" /> @@ -2551,35 +2576,12 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" Top = 0 *< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" /> - ADD OBJECT 'But_verifica1' AS but_verifica WITH ; - Anchor = 8, ; - Comment = "*:OnResize=rt", ; - Left = 683, ; - Name = "But_verifica1", ; - TabIndex = 13, ; - ToolTipText = "Verificare coduri fiscale", ; - Top = 0 - *< END OBJECT: ClassLib="cmd_butoane.vcx" BaseClass="commandbutton" /> - - ADD OBJECT 'chkANAF' AS _checkbox WITH ; - Alignment = 0, ; - Anchor = 6, ; - Caption = "Serviciu web ANAF", ; - Enabled = .F., ; - Left = 441, ; - Name = "chkANAF", ; - ToolTipText = "Se verifica prin serviciul web ANAF, cate 500 de coduri fiscale per interogare", ; - Top = 393, ; - Value = .F., ; - Visible = .F. - *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> - ADD OBJECT 'chkDuplicat' AS _checkbox WITH ; Alignment = 0, ; AutoSize = .F., ; - Caption = "Coduri duplicate!", ; + Caption = "Coduri duplicate", ; FontBold = .T., ; - ForeColor = 255,0,0, ; + ForeColor = 128,0,128, ; Height = 29, ; Left = 358, ; Name = "chkDuplicat", ; @@ -2588,43 +2590,32 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ToolTipText = "Apasati pe buton pentru a selecta codurile fiscale/denumirile duplicate!", ; Top = 50, ; Visible = .F., ; - Width = 131 - *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> - - ADD OBJECT 'chkExperimental' AS _checkbox WITH ; - Alignment = 0, ; - Anchor = 6, ; - Caption = "Mod experimental", ; - Enabled = .F., ; - Left = 313, ; - Name = "chkExperimental", ; - ToolTipText = "Nu se cere codul Captcha si se interogheaza www.mfinante.ro fara pauza intre coduri fiscale", ; - Top = 392, ; - Value = .F., ; - Visible = .F. + Width = 110 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> ADD OBJECT 'chkInactiv' AS _checkbox WITH ; Alignment = 0, ; AutoSize = .F., ; - Caption = "Inactivi!", ; + Caption = "Inactivi", ; FontBold = .T., ; + ForeColor = 180,120,0, ; Height = 29, ; - Left = 489, ; + Left = 470, ; Name = "chkInactiv", ; SpecialEffect = 0, ; Style = 1, ; - ToolTipText = "Apasati pe buton pentru a selecta codurile fiscale invalide!", ; + ToolTipText = "Apasati pe buton pentru a selecta partenerii inactivi la ANAF!", ; Top = 50, ; Visible = .F., ; - Width = 72 + Width = 110 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> ADD OBJECT 'chkInvalid' AS _checkbox WITH ; Alignment = 0, ; AutoSize = .F., ; - Caption = "Coduri invalide!", ; + Caption = "Coduri invalide", ; FontBold = .T., ; + ForeColor = 200,0,0, ; Height = 29, ; Left = 248, ; Name = "chkInvalid", ; @@ -2633,95 +2624,61 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ToolTipText = "Apasati pe buton pentru a selecta codurile fiscale invalide!", ; Top = 50, ; Visible = .F., ; - Width = 111 + Width = 110 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> ADD OBJECT 'chkLiniaCurenta' AS _checkbox WITH ; Alignment = 0, ; Anchor = 6, ; Caption = "Verificare inregistrari de la linia curenta in jos", ; - Left = 12, ; + Left = 303, ; Name = "chkLiniaCurenta", ; ToolTipText = "Verificare inregistrari de la linia curenta in jos (altfel toate inregistrarile)", ; - Top = 372, ; + Top = 388, ; Value = .F. *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> - ADD OBJECT 'chkMFIN' AS _checkbox WITH ; - Alignment = 0, ; - Caption = "Interogare Min. Finante", ; - Enabled = .F., ; - Left = 12, ; - Name = "chkMFIN", ; - ToolTipText = "Informatii persoane juridice de pe website-ul www.mfinante.ro (cod, firma, adresa, reg. com. cod postal, telefon, fax)", ; - Top = 32, ; - Value = .T. - *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> - - ADD OBJECT 'chkMFINURL' AS _checkbox WITH ; - Alignment = 0, ; - Anchor = 6, ; - Caption = "Interogare mfinante.ro via romfast.ro", ; - Enabled = .F., ; - Left = 312, ; - Name = "chkMFINURL", ; - ToolTipText = "Interogare direct mfinante.ro sau via romfast.ro", ; - Top = 372, ; - Value = .F., ; - Visible = .F. - *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> - ADD OBJECT 'chkPlatitor' AS _checkbox WITH ; Alignment = 0, ; AutoSize = .F., ; BackColor = 150,150,150, ; - Caption = "(Ne)Platitori TVA (cu/fara) RO!", ; + Caption = "(Ne)Platitori TVA", ; FontBold = .T., ; + ForeColor = 170,20,90, ; Height = 29, ; - Left = 564, ; + Left = 583, ; Name = "chkPlatitor", ; SpecialEffect = 0, ; Style = 1, ; ToolTipText = "Apasati pe buton pentru a selecta inregistrarile Platitori TVA fara RO sau Neplatitori TVA cu RO", ; Top = 50, ; Visible = .F., ; - Width = 210 + Width = 110 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> ADD OBJECT 'chkVIES' AS _checkbox WITH ; Alignment = 0, ; - Caption = "Interogare VIES", ; + Anchor = 6, ; + Caption = "Interogare ANAF", ; Left = 12, ; Name = "chkVIES", ; - ToolTipText = "Calitate platitor TVA din registrul operatorilor intracomunitari de pe website-ul ec.europa.eu", ; - Top = 57, ; + ToolTipText = "Interogare registru ANAF: denumire, adresa, scop TVA, TVA la incasare, split TVA, inactivi", ; + Top = 386, ; Value = .T. *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> - ADD OBJECT 'chkVIESURL' AS _checkbox WITH ; - Alignment = 0, ; - Anchor = 6, ; - Caption = "Interogare ec.europa.eu via romfast.ro", ; - Enabled = .F., ; - Left = 12, ; - Name = "chkVIESURL", ; - ToolTipText = "Interogare direct ec.europa.eu sau via romfast.ro", ; - Top = 392, ; - Value = .F., ; - Visible = .F. - *< END OBJECT: ClassLib="_baza.vcx" BaseClass="checkbox" /> - ADD OBJECT 'cmdVerifica' AS cmd_executa WITH ; + Anchor = 12, ; BackColor = 0,0,0, ; caction = do_verifica, ; Caption = "\ ADD OBJECT 'Gridextra1' AS gridextra WITH ; @@ -2735,13 +2692,13 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" *< END OBJECT: ClassLib="..\utile\gridextras\gridextras.vcx" BaseClass="custom" /> ADD OBJECT 'lblInfo' AS _label WITH ; - Caption = "Apasati ESC pentru a intrerupe verificarile *** Dublu click pe Denumire/Cod fiscal = modificare partener, pe Firma/Cod ANAF = verificare manuala / istoric", ; - FontSize = 8, ; - ForeColor = 255,255,128, ; + Caption = "Alegeti optiunile si apasati Verifica!! *** Dublu click pe un rand = meniu de verificare", ; + FontSize = 10, ; + ForeColor = 128,128,128, ; Left = 12, ; Name = "lblInfo", ; - Top = 16, ; - Visible = .F. + Top = 32, ; + Visible = .T. *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> ADD OBJECT 'lblVerifica' AS _label WITH ; @@ -2757,29 +2714,46 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" Width = 606 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="label" /> - ADD OBJECT 'spnPauza' AS _spinner WITH ; - Anchor = 6, ; - Enabled = .F., ; - Height = 24, ; - Increment = 1.00, ; - KeyboardHighValue = 100, ; - KeyboardLowValue = 0, ; - Left = 245, ; - Name = "spnPauza", ; - SpinnerHighValue = 100.00, ; - SpinnerLowValue = 0.00, ; - ToolTipText = "Pauza (sec) intre interogarile www.mfinante.ro", ; - Top = 388, ; - Value = 5.0, ; - Visible = .F., ; - Width = 56 - *< END OBJECT: ClassLib="_baza.vcx" BaseClass="spinner" /> + ADD OBJECT 'optVedere' AS _optiongrup WITH ; + AutoSize = .F., ; + BackStyle = 0, ; + BorderStyle = 0, ; + ButtonCount = 3, ; + Height = 21, ; + Left = 12, ; + Name = "optVedere", ; + Top = 55, ; + Value = 1, ; + Width = 230, ; + Option1.AutoSize = .T., ; + Option1.BackStyle = 0, ; + Option1.Caption = "Esential", ; + Option1.Height = 17, ; + Option1.Left = 0, ; + Option1.Name = "Option1", ; + Option1.Top = 2, ; + Option2.AutoSize = .T., ; + Option2.BackStyle = 0, ; + Option2.Caption = "Perioade TVA", ; + Option2.Height = 17, ; + Option2.Left = 70, ; + Option2.Name = "Option2", ; + Option2.Top = 2, ; + Option3.AutoSize = .T., ; + Option3.BackStyle = 0, ; + Option3.Caption = "Tot", ; + Option3.Height = 17, ; + Option3.Left = 175, ; + Option3.Name = "Option3", ; + Option3.Top = 2, ; + Option3.Width = 35 + *< END OBJECT: ClassLib="_baza.vcx" BaseClass="optiongroup" /> PROCEDURE Activate *** lansez verificarea automat, cand sunt apelat cu lista de parteneri din Reg TVA *** o lansez pe activate ca sa se vada tabelul cu parteneri cand se face verificarea Local llMFin, llVIES, llValidare - llMFin = This.chkMFIN.Value + llMFin = This.lMFIN llVIES = This.chkVIES.Value llValidare = .T. If This.lAutoverificare @@ -2791,13 +2765,36 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" Endif ENDPROC - PROCEDURE do_termin - Local lcMFINROMFAST, lcVIESROMFAST - lcMFINROMFAST = TRANSFORM(this.chkMFINURL.Value) - lcVIESROMFAST = TRANSFORM(this.chkVIESURL.Value) - goAPI.WriteProfileString(m.gcSettingsFile, [validare], "mfinromfast", m.lcMFINROMFAST) - goAPI.WriteProfileString(m.gcSettingsFile, [validare], "viesromfast", m.lcVIESROMFAST) - DODEFAULT() + PROCEDURE asazafiltre + *!* 23.08.2026 marius.mutu: butoanele de filtru isi schimba latimea odata cu numarul din caption, deci se aseaza unul dupa altul, altfel se suprapun + Local lnI, lnLeft, lnTop, loBtn + Local Array laBtn[4] + laBtn[1] = This.chkInvalid + laBtn[2] = This.chkDuplicat + laBtn[3] = This.chkInactiv + laBtn[4] = This.chkPlatitor + lnLeft = This.chkInvalid.Left + lnTop = This.chkInvalid.Top + For lnI = 1 To 4 + loBtn = laBtn[m.lnI] + If loBtn.Visible + loBtn.AutoSize = .T. && ia latimea textului curent + loBtn.AutoSize = .F. + loBtn.Height = This.chkInvalid.Height + loBtn.Top = m.lnTop + loBtn.Left = m.lnLeft + lnLeft = m.lnLeft + loBtn.Width + 8 + Endif + Endfor + ENDPROC + + PROCEDURE construiesteatentie + *!* 22.08.2026 marius.mutu: atentie se reconstruieste din campurile boolene, in ordinea gravitatii; Alltrim pe campul padded, altfel a doua eticheta cade la trunchiere + Update crsVerificareParteneri Set atentie = '' + Update crsVerificareParteneri Set atentie = Alltrim(Alltrim(atentie) + ' INVALID') Where !Valid And !Isnull(Valid) + Update crsVerificareParteneri Set atentie = Alltrim(Alltrim(atentie) + ' DUPLICAT') Where duplicat + Update crsVerificareParteneri Set atentie = Alltrim(Alltrim(atentie) + ' INACTIV') Where inactiv + Update crsVerificareParteneri Set atentie = Alltrim(Alltrim(atentie) + ' FARA RO') Where !Empty(firma) And ((Upper(atribut_fiscal) = 'RO' And !platitortvamfin) Or (Empty(atribut_fiscal) And platitortvamfin)) ENDPROC PROCEDURE do_verifica @@ -2806,13 +2803,13 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" *** tlMFIN - se doreste verificarea MFIN (se apeleaza din INIT automat) *** tlVIES - se doreste verificarea VIES (se apeleaza din INIT automat) - Local lcCodFiscal, lcEroare, lcKey, lcTipInterogare, lcXml, llAtributFiscal, llMFINURL, llVIESURL + Local lcCodFiscal, lcEroare, lcKey, lcTipInterogare, lcXml, llAtributFiscal Local llMFIN, llVIES Local llLiniaCurenta, lnRecord, lcConditieSuplimentara, llModExperimental + Local lnInvalid, lnDuplicat, lnPlatitor, lnInactiv + Store 0 To lnInvalid, lnDuplicat, lnPlatitor, lnInactiv Local loPartener - llMFINURL = This.chkMFINURL.Value && verificare prin ROMFAST.RO = .T. - llVIESURL = This.chkVIESURL.Value && verificare prin ROMFAST.RO = .T. llLiniaCurenta = This.chkLiniaCurenta.Value lcConditieSuplimentara = ".T." @@ -2826,18 +2823,18 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" *!* glRCViesURL = .T. *!* gcRCVIESURL = "http://localhost/update/verificarecod.aspx/verificarecod/verificare/CIF/|CIF|/VIES" *!* loVerificare = Createobject("verificarecod", glRCViesURL, glRCMfinURL, gcRCRomfastURL, gcRCMfinanteURL, gcRCMfinanteParams) && validare.prg - loVerificare = Createobject("verificarecod", m.llMFINURL, m.llVIESURL) && validare.prg + loVerificare = Createobject("verificarecod", .F., .F.) && validare.prg, nu mai intretin ROMFAST.RO *!* MOD EXPERIMENTAL - llModExperimental = This.chkExperimental.Value - llServiciuWebANAF = This.chkANAF.Value + llModExperimental = This.lExperimental + llServiciuWebANAF = .T. && mai functioneaza doar serviciul ANAF, nu si mfinante.ro loVerificare.lOneSession = !m.llModExperimental loVerificare.lCaptcha = !m.llModExperimental *!* MOD EXPERIMENTAL ^ llValidare = Iif(Pcount() >= 1, m.tlValidare, .F.) - llMFIN = Iif(Pcount() >= 2, m.tlMFIN, This.chkMFIN.Value) + llMFIN = Iif(Pcount() >= 2, m.tlMFIN, This.lMFIN) llVIES = Iif(Pcount() >= 3, m.tlVIES, This.chkVIES.Value) llValidare = llValidare Or m.llMFIN Or m.llVIES && se valideaza codurile daca se doreste verificarea MFIN/VIES @@ -2857,10 +2854,12 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" Use In (Select('cCodDuplicat')) Use In (Select('cDenumireDuplicat')) - *** activez checkboxul CODURI/DENUMIRI DUPLICATE + *!* 22.08.2026 marius.mutu: caption cu numar, butonul ramane vizibil dezactivat la 0 Select crsVerificareParteneri - Locate For duplicat - This.chkDuplicat.Visible = Found() + Count For duplicat To lnDuplicat + This.chkDuplicat.Caption = "Duplicate (" + Transform(m.lnDuplicat) + ")" + This.chkDuplicat.Enabled = m.lnDuplicat > 0 + This.chkDuplicat.Visible = .T. Go Top In crsVerificareParteneri @@ -2869,9 +2868,11 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" Replace All IsCIF With loVerificare.IsCIF(cod_fiscal) Replace All Valid With Iif(IsCIF, loVerificare.validare('CIF', cod_fiscal), loVerificare.validare('CNP', cod_fiscal)) REPLACE all valid with .T. FOR EMPTY(NVL(cod_fiscal,'')) && nu consider invalide codurile fiscale goale - *** activez checkboxul CODURI INVALIDE - Locate For !Valid - This.chkInvalid.Visible = Found() + *!* 22.08.2026 marius.mutu: caption cu numar, butonul ramane vizibil dezactivat la 0 + Count For !Valid To lnInvalid + This.chkInvalid.Caption = "Coduri invalide (" + Transform(m.lnInvalid) + ")" + This.chkInvalid.Enabled = m.lnInvalid > 0 + This.chkInvalid.Visible = .T. Go Top In crsVerificareParteneri Endif @@ -2882,6 +2883,8 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" This.lblVerifica.Visible = .T. This.cmdVerifica.Visible = .F. + *!* 22.08.2026 marius.mutu: lblInfo oglindeste starea verificarii, ESC intrerupe + This.lblInfo.Caption = This.lblVerifica.Caption + " *** ESC intrerupe" *!* VERIFIC CODURILE FISCALE VALIDE PENTRU ATRIBUTUL FISCAL IN VIES lcTipInterogare = Iif(m.llVIES, 'VIES', '') + Iif(m.llMFIN, 'MFIN', '') @@ -2952,6 +2955,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" lcCodFiscal = Alltrim(Upper(cod_fiscal)) llAtributFiscal = Isalpha(lcCodFiscal) This.lblVerifica.Caption = "Se verifica... " + Alltrim(denumire) + ' ' + Transform(Recno()) + "/" + Transform(Reccount()) + " " + Transform(Round(Recno()/Reccount()*100,2)) + ' % * Apasati tasta pentru a intrerupe operatia de verificare' + This.lblInfo.Caption = This.lblVerifica.Caption Wait Window Alltrim(denumire) + ' ' + Transform(Recno()) + "/" + Transform(Reccount()) + " " + Transform(Round(Recno()/Reccount()*100,2)) + ' %' + ; Chr(13) + Chr(10) + '* Apasati tasta pentru a intrerupe operatia de verificare' Nowait @@ -2985,7 +2989,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" If !m.llModExperimental If Recno('crsVerificareParteneri') < Reccount('crsVerificareParteneri') - lcKey = Inkey(This.spnPauza.Value) + lcKey = Inkey(5) If lcKey = 27 && ESC If aMESSAGEBOX('Doriti sa intrerupeti operatia?', 4+32, _Screen.Caption) = 6 Exit @@ -3006,19 +3010,25 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ENDIF && m.llServiciuWebANAF Release loVerificare - Update crsVerificareParteneri Set atentie = 'DUPLICAT' Where duplicat - Update crsVerificareParteneri Set atentie = Alltrim(Alltrim(atentie) + ' ' + Iif(!platitortvamfin, 'NE', '') + 'PLATITOR TVA') Where !Empty(firma) And ((Upper(atribut_fiscal) = 'RO' And !platitortvamfin) Or (Empty(atribut_fiscal) And platitortvamfin)) + This.ConstruiesteAtentie() - *** activez checkboxul platitor TVA fara RO + *!* 22.08.2026 marius.mutu: caption cu numar, butonul ramane vizibil dezactivat la 0 Select crsVerificareParteneri - Locate For 'PLATITOR TVA'$atentie - This.chkPlatitor.Visible = Found() + Count For 'FARA RO'$atentie To lnPlatitor + This.chkPlatitor.Caption = "Atribut RO (" + Transform(m.lnPlatitor) + ")" + This.chkPlatitor.Enabled = m.lnPlatitor > 0 + This.chkPlatitor.Visible = .T. - LOCATE FOR inactiv - This.chkInactiv.Visible = Found() + Count For inactiv To lnInactiv + This.chkInactiv.Caption = "Inactivi (" + Transform(m.lnInactiv) + ")" + This.chkInactiv.Enabled = m.lnInactiv > 0 + This.chkInactiv.Visible = .T. + This.AsazaFiltre() This.lblVerifica.Visible = .F. This.cmdVerifica.Visible = .T. + *!* 22.08.2026 marius.mutu: lblInfo arata rezumatul verificarii + This.lblInfo.Caption = Transform(Reccount('crsVerificareParteneri')) + " parteneri verificati *** " + Transform(m.lnInvalid) + " coduri invalide *** " + Transform(m.lnDuplicat) + " duplicate *** " + Transform(m.lnInactiv) + " inactivi *** Dublu click pe un rand = meniu de verificare" Go Top In crsVerificareParteneri @@ -3029,7 +3039,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" LOCAL lcFilter lcFilter = Iif(Thisform.chkInvalid.Value = 1, "!valid", ".T.") + ' and ' + ; Iif(Thisform.chkDuplicat.Value = 1, "duplicat", ".T.") + ' And ' + ; - Iif(Thisform.chkPlatitor.Value = 1, "'PLATITOR'$ATENTIE", ".T.") + ' And ' + ; + Iif(Thisform.chkPlatitor.Value = 1, "'FARA RO'$ATENTIE", ".T.") + ' And ' + ; Iif(Thisform.chkInactiv.Value = 1, "inactiv", ".T.") Thisform.gridextra1.customcolumnfilters[1,5] = m.lcFilter @@ -3037,66 +3047,40 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ENDPROC PROCEDURE Init - LPARAMETERS tlValidare, tlMFIN, tlVIES, tlAutoVerificare, tlExperimental, tlServiciuWebANAF - *** tlExperimental: .T. se verifica mfinante.ro fara captcha, fara pauze, cu interogari distincte pentru fiecare cod - *** tlServiciuWebANAF: .T. se verifica prin serviciul web ANAF, cate 500 de coduri fiscale per interogare + LPARAMETERS tlValidare, tlMFIN, tlVIES, tlAutoVerificare, tlExperimental, tlServiciuWebANAF, tlAfiseazaAles + *** tlExperimental: nu mai functioneaza (pastrat doar ca proprietate, citit/scris din alte formulare) + *** tlServiciuWebANAF: neutilizat, mai functioneaza doar serviciul ANAF (verificare cate 500 de coduri fiscale per interogare) + *** tlAfiseazaAles: .T. arata coloana Ales (doar D394 pe perioade vechi o citeste) #DEFINE CRLF CHR(13) + CHR(10) - Local lcMFINROMFAST, lcVIESROMFAST, llMFINROMFAST, llVIESROMFAST - lcMFINROMFAST = goAPI.GetProfileString(m.gcSettingsFile, [validare], "mfinromfast") - lcVIESROMFAST = goAPI.GetProfileString(m.gcSettingsFile, [validare], "viesromfast") - lcMFINROMFAST = NVL(m.lcMFINROMFAST, '') - lcVIESROMFAST = NVL(m.lcVIESROMFAST, '') - IF !INLIST(m.lcMFINROMFAST, '.T.', '.F.') - llMFINROMFAST = .F. - ELSE - llMFINROMFAST = &lcMFINROMFAST - ENDIF - IF !INLIST(m.lcVIESROMFAST, '.T.', '.F.') - llVIESROMFAST = .F. - ELSE - llVIESROMFAST = &lcVIESROMFAST - ENDIF + This.lMFIN = m.tlMFIN + *!* 23.08.2026 marius.mutu: bifa arata interogarea ANAF, singura care se mai face (VIES nu se interogheaza nicaieri) + this.chkVIES.Value = m.tlVIES Or m.tlMFIN - * Nu mai intretin nici un serviciu pentru verificarea prin romfast.ro - llMFINROMFAST = .F. - llVIESROMFAST = .F. - tlExperimental = .F. && nu mai functioneaza mfinante.ro experimental + This.lExperimental = m.tlExperimental && mfinante.ro experimental, mai e trimis doar de D394 pe perioade vechi + This.lafiseazaales = Iif(Pcount() >= 7, m.tlAfiseazaAles, .F.) - this.chkMFINURL.Value = m.llMFINROMFAST - this.chkVIESURL.Value = m.llVIESROMFAST - - this.chkMFIN.Value = m.tlMFIN - this.chkVIES.Value = m.tlVIES - - this.chkExperimental.Value = m.tlExperimental - this.chkANAF.Value = .T. && m.tlServiciuWebANAF mai functioneaza doar serviciul ANAF, nu si mfinante.ro - - *!* this.but_verifica1.ToolTipText = "Verificare coduri fiscale" - - this.spnPauza.ToolTipText = "Pauza (sec) intre interogarile www.mfinante.ro" + CHR(13) + CHR(10) + ; - "Daca interogarile sunt prea dese, mfinante.ro blocheaza cautarile." + CHR(13) + CHR(10) + ; - "Incercati pauze mai mari de 5-6 secunde!" - - this.WindowState = 2 + this.WindowState = 2 this.gridextra1.setup() DODEFAULT() This.lAutoVerificare = m.tlAutoVerificare + *!* 22.08.2026 marius.mutu: culoarea semnalata pe coloana Atentie si pe celula vinovata, cate o culoare per problema + this._grdbase1.Column21.DynamicForeColor = "IIF('INVALID'$ATENTIE, RGB(200,0,0), IIF('DUPLICAT'$ATENTIE, RGB(128,0,128), IIF('INACTIV'$ATENTIE, RGB(180,120,0), IIF('FARA RO'$ATENTIE, RGB(170,20,90), RGB(0,0,0)))))" + this._grdbase1.Column3.DynamicForeColor = "IIF(!Valid, RGB(200,0,0), RGB(0,0,0))" + this._grdbase1.Column2.DynamicForeColor = "IIF(duplicat, RGB(128,0,128), RGB(0,0,0))" + this._grdbase1.Column5.DynamicForeColor = "IIF(inactiv, RGB(180,120,0), RGB(0,0,0))" + this._grdbase1.Column17.DynamicForeColor = "IIF('FARA RO'$ATENTIE, RGB(170,20,90), RGB(0,0,0))" - - *** FONT ROSU PENTRU CODURILE, PARTENERII DUPLICATI - this._grdbase1.SetAll("DynamicForeColor","IIF(duplicat, RGB(255,0,0), RGB(0,0,0))", "Column") - *** FUNDAL GRI PENTRU PARTENERII CU RO SI FARA DATA LUARII IN EVIDENTA TVA SAU FARA RO SI CU DATA LUARII IN EVIDENTA TVA - this._grdbase1.SetAll("DynamicBackColor","IIF('PLATITOR TVA'$ATENTIE, RGB(200,200,200), RGB(255,255,255))", "Column") + This.SetVedere(1) SELECT crsVerificareParteneri - GO TOP + GO TOP - this._grDBASE1.HeaderHeight = 32 + this._grDBASE1.HeaderHeight = 32 ENDPROC PROCEDURE Load @@ -3119,7 +3103,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" PROCEDURE meniu_dblclick *** Verificare cod fiscal de pe inregistrarea curenta Local loDate As "empty" - Local lcAlias, lcCodFiscal, lcDenumire, lnOptiune, lnRaspuns, loPartener + Local lcAlias, lcCodFiscal, lcDenumire, lnIdPart, lnOptiune, lnRaspuns, loPartener lnOptiune = 0 loPartener = Null @@ -3127,10 +3111,16 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" lcAlias = This._grdbase1.RecordSource Select (m.lcAlias) + lnIdPart = Iif(Type(m.lcAlias + '.id_part') = 'N', Nvl(Evaluate(m.lcAlias + '.id_part'), 0), 0) AddProperty(loDate, "denumire", Alltrim(denumire)) AddProperty(loDate, "cod_fiscal", Alltrim(Nvl(cod_fiscal, ''))) + *!* 22.08.2026 marius.mutu: prima optiune a meniului deschide fisa partenerului; ; din denumire se inlocuieste cu , ca sa nu sparga meniul + AddProperty(loDate, "optiuni_meniu_ante", Iif(Empty(m.lnIdPart), "\", "") + "MODIFICARE PARTENER - " + Strtran(Alltrim(denumire), ';', ',') + ";\-;") lnRaspuns = VerificaCodFiscal(loDate, @lnOptiune, @loPartener) + If m.lnOptiune = 1 + Thisform.meniu_dblclick_partener() + Endif ENDPROC PROCEDURE meniu_dblclick_partener @@ -3149,6 +3139,65 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" loRec = nom_parteneri_modifica(m.lnIdPart) && in onomenclatoare.prg ENDPROC + PROCEDURE setvedere + Lparameters tnVedere + *!* 22.08.2026 marius.mutu: comuta vederea Esential/Perioade TVA/Tot; nicio coloana nu se sterge, doar Visible + Local lnI + With This._grdbase1 + For lnI = 1 To 34 + .Columns(m.lnI).Visible = (m.tnVedere = 3) + Endfor + + Do Case + Case m.tnVedere = 1 && Esential + .Column1.Visible = This.lafiseazaales + .Column21.Visible = .T. + .Column2.Visible = .T. + .Column2.Width = 130 + .Column3.Visible = .T. + .Column3.Width = 85 + .Column3.ControlSource = "IIF(EMPTY(NVL(atribut_fiscal,'')),'',ALLTRIM(atribut_fiscal)) + ALLTRIM(NVL(cod_fiscal,''))" + .Column3.Header1.Caption = "Cod fiscal ROA" + .Column5.Visible = .T. + .Column5.Width = 110 + .Column17.Visible = .T. + .Column17.Width = 52 + .cDataInceputScpTva.Visible = .T. + .cDataSfarsitScpTva.Visible = .T. + .cDataAnulImpScpTva.Visible = .T. + .Column27.Visible = .T. + Case m.tnVedere = 2 && Perioade TVA + .Column2.Visible = .T. + .Column2.Width = 221 + .Column3.Visible = .T. + .Column3.Width = 75 + .Column3.ControlSource = "crsverificareparteneri.cod_fiscal" + .Column3.Header1.Caption = "CIF/CNP" + .cDataInceputScpTva.Visible = .T. + .cDataSfarsitScpTva.Visible = .T. + .cDataAnulImpScpTva.Visible = .T. + .cDataInceputTvaInc.Visible = .T. + .cDataSfarsitTvaInc.Visible = .T. + .cDataInactivare.Visible = .T. + .cDataReactivare.Visible = .T. + .Column27.Visible = .T. + Otherwise && Tot + *!* 23.08.2026 marius.mutu: coloanele VIES raman ascunse si in Tot, nu se mai completeaza + .Column13.Visible = .F. + .Column14.Visible = .F. + .Column2.Width = 221 + .Column3.Width = 75 + .Column3.ControlSource = "crsverificareparteneri.cod_fiscal" + .Column3.Header1.Caption = "CIF/CNP" + .Column5.Width = 305 + .Column16.Width = 75 + .Column17.Width = 71 + .Column1.Visible = This.lafiseazaales + Endcase + Endwith + This.optVedere.Value = m.tnVedere + ENDPROC + PROCEDURE chkDuplicat.Click Thisform.FiltreAtentionari() ENDPROC @@ -3162,47 +3211,124 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" ENDPROC - PROCEDURE chkMFIN.ProgrammaticChange - Thisform.chkMFINURL.Visible = .F. && This.Value - thisform.spnPauza.Visible = .F. && This.Value - thisform.chkLiniaCurenta.Visible = This.Value or thisform.chkVies.Value - ENDPROC - - PROCEDURE chkMFIN.Valid - Thisform.chkMFINURL.Visible = This.Value - thisform.spnPauza.Visible = This.Value - thisform.chkLiniaCurenta.Visible = This.Value or thisform.chkVies.Value - ENDPROC - PROCEDURE chkPlatitor.Click Thisform.FiltreAtentionari() ENDPROC PROCEDURE chkVIES.ProgrammaticChange - Thisform.chkViesURL.Visible = .F. && This.Value - thisform.chkLiniaCurenta.Visible = This.Value or thisform.chkMfin.Value + thisform.chkLiniaCurenta.Visible = This.Value or thisform.lMFIN ENDPROC PROCEDURE chkVIES.Valid - Thisform.chkViesURL.Visible = This.Value - thisform.chkLiniaCurenta.Visible = This.Value or thisform.chkMfin.Value + thisform.chkLiniaCurenta.Visible = This.Value or thisform.lMFIN + ENDPROC + + PROCEDURE optVedere.Click + Thisform.SetVedere(This.Value) + ENDPROC + + PROCEDURE _grdbase1.cDataAnulImpScpTva.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.cDataInactivare.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.cDataInceputScpTva.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.cDataInceputTvaInc.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.cDataReactivare.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.cDataSfarsitScpTva.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.cDataSfarsitTvaInc.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.cInactiv.Check1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.Column10.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.Column11.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.Column12.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.Column13._checkbox1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.Column14._checkbox1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.Column15.Text1.DblClick + Thisform.meniu_dblclick() ENDPROC PROCEDURE _grdbase1.Column16.Text1.DblClick Thisform.meniu_dblclick() ENDPROC + PROCEDURE _grdbase1.Column17._checkbox1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.Column18._checkbox1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.Column19.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + PROCEDURE _grdbase1.Column2.Text1.DblClick - Thisform.meniu_dblclick_partener() - + Thisform.meniu_dblclick() ENDPROC PROCEDURE _grdbase1.Column20.Text1.DblClick Thisform.meniu_dblclick() ENDPROC + PROCEDURE _grdbase1.Column21.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.Column23.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.Column26.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.Column27.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + PROCEDURE _grdbase1.Column3.Text1.DblClick - Thisform.meniu_dblclick_partener() + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.Column4._checkbox1.DblClick + Thisform.meniu_dblclick() ENDPROC PROCEDURE _grdbase1.Column5.Text1.DblClick @@ -3213,6 +3339,26 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx" Thisform.meniu_dblclick() ENDPROC + PROCEDURE _grdbase1.Column7.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.Column8.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.Column9.Text1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.cSplitTVA.Check1.DblClick + Thisform.meniu_dblclick() + ENDPROC + + PROCEDURE _grdbase1.cTVAincasare.Check1.DblClick + Thisform.meniu_dblclick() + ENDPROC + ENDDEFINE DEFINE CLASS frm_verificare_parteneri_istoric AS _frmbase OF "_frm_base.vcx" diff --git a/docs/flux-editare-vfp-text.md b/docs/flux-editare-vfp-text.md index 3f4ebce..315986b 100644 --- a/docs/flux-editare-vfp-text.md +++ b/docs/flux-editare-vfp-text.md @@ -109,3 +109,11 @@ fals `roundtrip text1 != text2`. Ruleaza atunci cu lista rebazata: la fiecare capat de linie - rezultatul e un fisier cu sfarsituri de linie amestecate (CRLF pe continutul vechi, LF pe cel nou). Verificare finala obligatorie dupa orice scriere: numara octetii `0x0A` neprecedati de `0x0D` (LF izolati) - trebuie sa fie 0. +- **`-DryRun` NU e plasa de siguranta pentru capete de linie** - fidelity-check-ul compara doar + continutul text, nu CRLF vs LF, deci un fisier convertit integral la LF de un tool Edit/Write + (patit si cumulat, pe mai multe runde succesive) trece cu OK/EXITCODE=0. Verificare separata, + obligatorie dupa fiecare editare, langa censul de octeti non-ASCII deja documentat mai sus: + `perl -e 'local $/; open F,"<:raw",$ARGV[0]; $d=; $crlf=()=$d=~/\r\n/g; $lf=()=$d=~/\n/g; print $lf-$crlf' ` + trebuie sa dea 0. Semnal secundar: daca `git diff --numstat` arata brusc tot fisierul schimbat + (nu doar liniile atinse), capetele de linie sunt gresite. Reparare (doar dupa ce ai confirmat ca + fisierul n-are deja niciun `\r`): `perl -pe 's/\n/\r\n/' < f > f.tmp`. diff --git a/programe/oproceduri_comune.prg b/programe/oproceduri_comune.prg index 6d6e17f..91890f4 100644 --- a/programe/oproceduri_comune.prg +++ b/programe/oproceduri_comune.prg @@ -4772,7 +4772,7 @@ Function verifica_partener_show_info *** tcMesajIntrebare: IN, optional, daca se intreaba ceva la sfarsitul formularului (ex: Se completeaza datele in formularul partener nou?) Local lcCodFiscal, lcDenumire, lcText, llCodRO, llPlatitorTVAMfin, llPlatitorTVAVIES, lnDialogType - Local lnRaspuns, loPartener, lcProvenienta, lcPerioade + Local lnRaspuns, loPartener, lcSursaPrefix, llAtentie, lcTVA, lcStareFirma, lcIdent, lcMesajAnaf lcCodFiscal = Transform(m.tcCodFiscal) lcDenumire = Transform(m.tcDenumire) @@ -4784,50 +4784,68 @@ Function verifica_partener_show_info llTvaIncasare = loPartener.tvaincasare llSplitTVA = loPartener.splittva llInactiv = loPartener.inactiv - *!* 01.08.2026 marius.mutu: marcaj explicit al sursei (ANAF live / cache), nu doar pe randurile din cache - lcProvenienta = '' + llAtentie = ((m.llPlatitorTVAMfin And !m.llCodRO) Or (!m.llPlatitorTVAMfin And m.llCodRO)) Or m.llInactiv + + *!* 22.08.2026 marius.mutu: marcaj explicit al sursei (ANAF live / cache), ca prefix pe linia denumirii + lcSursaPrefix = '' If Pemstatus(m.loPartener, 'sursa', 5) And !Empty(Alltrim(Nvl(loPartener.sursa, ''))) - lcProvenienta = Iif(Alltrim(Nvl(loPartener.sursa, '')) == 'ANAF', '(sursa: ANAF)', ; - '(sursa: CACHE ' + Dtoc(Nvl(loPartener.data_sursa, Date())) + Iif(Alltrim(Nvl(loPartener.sursa, '')) == 'CACHE_INDISP', ', ANAF indisponibil', '') + ')') + lcSursaPrefix = Iif(Alltrim(Nvl(loPartener.sursa, '')) == 'ANAF', 'ANAF: ', ; + 'CACHE ' + Dtoc(Nvl(loPartener.data_sursa, Date())) + Iif(Alltrim(Nvl(loPartener.sursa, '')) == 'CACHE_INDISP', ' (ANAF indisponibil)', '') + ': ') Endif - *!* 22.08.2026 marius.mutu: perioadele ANAF, doar cele completate (traseul mfinante.ro nu le are) - lcPerioade = '' + *!* 22.08.2026 marius.mutu: mesaj grupat pe sectiuni TVA/STARE FIRMA/IDENTIFICARE, fara campuri goale + lcMesajAnaf = Iif(!Empty(Alltrim(Nvl(loPartener.stare, ''))), 'Mesaj ANAF: ' + Alltrim(loPartener.stare) + crlf, '') + + lcTVA = Iif(m.llPlatitorTVAMfin, "Platitor TVA: DA (la " + Alltrim(loPartener.datatvamfin) + ")", "Platitor TVA: NU") + crlf + lcStareFirma = 'Inactiv: ' + Iif(m.llInactiv, 'DA', 'NU') + crlf If Pemstatus(m.loPartener, 'data_inceput_scptva', 5) If !Empty(Nvl(loPartener.data_inceput_scptva, {})) - lcPerioade = m.lcPerioade + 'Perioada TVA: ' + Dtoc(loPartener.data_inceput_scptva) + ' - ' + ; + lcTVA = m.lcTVA + 'Perioada TVA: ' + Dtoc(loPartener.data_inceput_scptva) + ' - ' + ; Iif(Empty(Nvl(loPartener.data_sfarsit_scptva, {})), 'in vigoare', Dtoc(loPartener.data_sfarsit_scptva)) + ; Iif(Empty(Nvl(loPartener.data_anul_imp_scptva, {})), '', ' (anulare din oficiu: ' + Dtoc(loPartener.data_anul_imp_scptva) + ')') + crlf Endif + lcTVA = m.lcTVA + m.lcMesajAnaf + 'TVA la incasare: ' + Iif(m.llTvaIncasare, 'DA', 'NU') + crlf If !Empty(Nvl(loPartener.data_inceput_tvainc, {})) - lcPerioade = m.lcPerioade + 'Perioada TVA la incasare: ' + Dtoc(loPartener.data_inceput_tvainc) + ' - ' + ; + lcTVA = m.lcTVA + 'Perioada TVA la incasare: ' + Dtoc(loPartener.data_inceput_tvainc) + ' - ' + ; Iif(Empty(Nvl(loPartener.data_sfarsit_tvainc, {})), 'in vigoare', Dtoc(loPartener.data_sfarsit_tvainc)) + crlf Endif + lcTVA = m.lcTVA + 'Split TVA: ' + Iif(m.llSplitTVA, 'DA', 'NU') + crlf If !Empty(Nvl(loPartener.data_inactivare, {})) - lcPerioade = m.lcPerioade + 'Inactivare: ' + Dtoc(loPartener.data_inactivare) + ; + lcStareFirma = m.lcStareFirma + 'Inactivare: ' + Dtoc(loPartener.data_inactivare) + ; Iif(Empty(Nvl(loPartener.data_reactivare, {})), '', ' Reactivare: ' + Dtoc(loPartener.data_reactivare)) + crlf Endif + Else + lcTVA = m.lcTVA + m.lcMesajAnaf + 'TVA la incasare: ' + Iif(m.llTvaIncasare, 'DA', 'NU') + crlf + ; + 'Split TVA: ' + Iif(m.llSplitTVA, 'DA', 'NU') + crlf + Endif + + lcIdent = '' + If !Empty(loPartener.adresa) + lcIdent = m.lcIdent + 'Adresa: ' + Alltrim(loPartener.adresa) + crlf + Endif + If !Empty(loPartener.judet) + lcIdent = m.lcIdent + 'Judet: ' + loPartener.judet + crlf + Endif + If !Empty(loPartener.regcom) + lcIdent = m.lcIdent + 'Reg. comertului: ' + loPartener.regcom + crlf + Endif + If !Empty(loPartener.codpostal) + lcIdent = m.lcIdent + 'Cod postal: ' + loPartener.codpostal + crlf + Endif + If !Empty(loPartener.telefon) + lcIdent = m.lcIdent + 'Telefon: ' + loPartener.telefon + crlf + Endif + If !Empty(loPartener.fax) + lcIdent = m.lcIdent + 'Fax: ' + loPartener.fax + crlf Endif lcText = 'VERIFICARE CIF: ' + m.lcCodFiscal + ' ' + m.lcDenumire + crlf + crlf + ; - Alltrim(loPartener.firma) + crlf + ; - Iif(!Empty(m.lcProvenienta), m.lcProvenienta + crlf, '') + ; - Iif((m.llPlatitorTVAMfin And !m.llCodRO) Or (!m.llPlatitorTVAMfin And m.llCodRO), ' *** ATENTIE *** ', '') + ; - Iif(m.llPlatitorTVAMfin, "PLATITOR TVA (" + Alltrim(loPartener.datatvamfin) + ")", "NEPLATITOR TVA") + crlf + ; - 'Stare: ' + Alltrim(loPartener.stare) + crlf + ; - 'TVA Incasare: ' + Iif(m.llTvaIncasare, 'DA', 'NU') + crlf + ; - 'Split TVA: ' + Iif(m.llSplitTVA, 'DA', 'NU') + crlf + ; - 'Inactiv: ' + Iif(m.llInactiv, 'DA *** ATENTIE!', 'NU') + crlf + ; - m.lcPerioade + ; - '----------------------------------------------------' + crlf + ; - '* Adresa: ' + Alltrim(loPartener.adresa) + crlf + ; - '* Judet: ' + loPartener.judet + crlf + ; - '* Nr. inregistrare la Registrul Comertului: ' + loPartener.regcom + crlf + ; - '* Cod Postal: ' + loPartener.codpostal + crlf + ; - '* Telefon: ' + loPartener.telefon + crlf + ; - '* Fax: ' + loPartener.fax + crlf + ; - Iif(!Empty(loPartener.eroare), Alltrim(loPartener.eroare) + crlf, '') + ; - '----------------------------------------------------' + crlf + crlf + ; + m.lcSursaPrefix + Alltrim(loPartener.firma) + crlf + ; + Iif(m.llAtentie, ' *** ATENTIE *** ' + crlf, '') + crlf + ; + '--- TVA ---' + crlf + m.lcTVA + crlf + ; + Iif(!Empty(m.lcStareFirma), '--- STARE FIRMA ---' + crlf + m.lcStareFirma + crlf, '') + ; + Iif(!Empty(m.lcIdent), '--- IDENTIFICARE ---' + crlf + m.lcIdent + crlf, '') + ; + Iif(!Empty(loPartener.eroare), Alltrim(loPartener.eroare) + crlf + crlf, '') + ; Iif(!Empty(m.tcMesajIntrebare), m.tcMesajIntrebare + crlf + crlf + crlf, "") lnRaspuns = amessagebox(lcText, m.lnDialogType, _Screen.Caption) @@ -4841,20 +4859,13 @@ Function GetMeniuVerificareCodFiscal llVerificareCod = Type('tcCodFiscal') = 'C' And !Empty(m.tcCodFiscal) lcMeniuOptiuniAnte = Iif(Type('tcOptiuniMeniuAnte') = 'C' And !Empty(m.tcOptiuniMeniuAnte), Alltrim(m.tcOptiuniMeniuAnte), '') + *!* 22.08.2026 marius.mutu: meniu scurtat, un raspuns ANAF acopera toate verificarile separate de mai jos lcMenu = lcMeniuOptiuniAnte + ; - Iif(!m.llVerificareCod, "\", "") + "Verificare ANAF (automat);" + ; + Iif(!m.llVerificareCod, "\", "") + "VERIFICARE ANAF;" + ; + Iif(!m.llVerificareCod, "\", "") + "VERIFICARE VIES;" + ; + "ISTORIC VERIFICARI COD FISCAL;" + ; "\-;" + ; - Iif(!m.llVerificareCod, "\", "") + "Verificare MFINANTE (manual);" + ; - "\-;" + ; - Iif(!m.llVerificareCod, "\", "") + "Verificare Registru inactivi ANAF (manual);" + ; - "\-;" + ; - Iif(!m.llVerificareCod, "\", "") + "Verificare Registru TVA Incasare (automat);" + ; - Iif(!m.llVerificareCod, "\", "") + "Verificare Registru TVA Incasare (manual);" + ; - "\-;" + ; - Iif(!m.llVerificareCod, "\", "") + "Verificare VIES (automat);" + ; - Iif(!m.llVerificareCod, "\", "") + "Verificare VIES (manual);" + ; - "\-;" + ; - "Istoric verificari cod fiscal" + Iif(!m.llVerificareCod, "\", "") + "DESCHIDE FISA PE MFINANTE.RO" Return m.lcMenu Endfunc @@ -4867,14 +4878,11 @@ Function GetOptiuneVerificareCodFiscal lnOptiune = Iif(Type('tnOptiune') = 'N', m.tnOptiune, 0) + *!* 22.08.2026 marius.mutu: numerotare pe meniul scurtat (1 ANAF, 2 VIES, 3 ISTORIC, 5 MFINANTE.RO) lcTipVerificare = Iif(m.lnOptiune = 1, 'ANAF_SERVICIU_WEB', ; - Iif(m.lnOptiune = 3, 'MFIN_MANUAL_COD', ; - Iif(m.lnOptiune = 5, 'ANAF_MANUAL_COD', ; - Iif(m.lnOptiune = 7, 'RTVAI_AUTO_COD', ; - Iif(m.lnOptiune = 8, 'RTVAI_MANUAL_COD', ; - Iif(m.lnOptiune = 10, 'VIES_AUTO', ; - Iif(m.lnOptiune = 11, 'VIES_MANUAL', ; - Iif(m.lnOptiune = 13, 'ISTORIC', '')))))))) + Iif(m.lnOptiune = 2, 'VIES_AUTO', ; + Iif(m.lnOptiune = 3, 'ISTORIC', ; + Iif(m.lnOptiune = 5, 'MFIN_MANUAL_COD', '')))) Return m.lcTipVerificare Endfunc diff --git a/programe/validare.prg b/programe/validare.prg index f5d6493..07fbccf 100644 --- a/programe/validare.prg +++ b/programe/validare.prg @@ -958,6 +958,10 @@ Define Class VerificareCod As Custom If Type("This.oHTTP") <> "O" && la prima apelare a verificarii MFIN If This.lXMLHTTP This.oHTTP = Createobject("winhttp.winhttprequest.5.1") + Try + This.oHTTP.SetTimeouts(5000, 5000, 10000, 15000) + Catch To loEx + Endtry Else This.oHTTP = Createobject("InternetExplorer.Application") This.oHTTP.Visible = .F. @@ -1174,6 +1178,10 @@ Define Class VerificareCod As Custom Try *!* loHTTP = Createobject("MSXML2.ServerXMLHTTP") loHTTP = Createobject("winhttp.winhttprequest.5.1") + Try + loHTTP.SetTimeouts(5000, 5000, 10000, 20000) + Catch To loEx + Endtry loHTTP.Open("GET", lcRomfastURL, .F.) loHTTP.Send() lnStatus = loHTTP.Status @@ -1236,9 +1244,16 @@ Define Class VerificareCod As Custom *!* 15.03.2010 ^ ENDIF && .F. Try + *!* 23.08.2026 marius.mutu: text/xml (nu urlencoded) - serviciul VIES da 400 pe content-type gresit + lcViesURL = "https://ec.europa.eu/taxation_customs/vies/services/checkVatService" loHTTP = Createobject("winhttp.winhttprequest.5.1") - loHTTP.Open("POST", "http://ec.europa.eu/taxation_customs/vies/services/checkVatService", .F.) - loHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') + *!* 23.08.2026 marius.mutu: timeout, altfel apelul blocheaza formularul la nesfarsit daca serviciul nu raspunde + Try + loHTTP.SetTimeouts(5000, 5000, 10000, 20000) + Catch To loEx + Endtry + loHTTP.Open("POST", m.lcViesURL, .F.) + loHTTP.setRequestHeader('Content-Type', 'text/xml; charset=utf-8') TEXT TO lcValues NOSHOW TEXTMERGE @@ -1249,20 +1264,21 @@ Define Class VerificareCod As Custom - ENDTEXT + ENDTEXT loHTTP.Send(lcValues) lnStatus = loHTTP.Status - If lnStatus = 200 && OK + If lnStatus = 200 && OK lcXML = loHTTP.responseText - llPlatitorTVA = (STREXTRACT(m.lcXML, [],[],1,1) = 'true') && true/false - lcFirma = STRTRAN(STREXTRACT(m.lcXML, [],[],1,1), '-','',1,10,1) - lcAdresa = STRTRAN(STREXTRACT(m.lcXML, [
],[
],1,1), '-','',1,10,1) + *!* 23.08.2026 marius.mutu: raspunsul are prefix de namespace (ns2:valid, ns2:name...) - delimitatorii vechi nu se mai potriveau + llPlatitorTVA = (STREXTRACT(m.lcXML, [valid>],[<],1,1) = 'true') && true/false + lcFirma = STRTRAN(STREXTRACT(m.lcXML, [name>],[<],1,1), '-','',1,10,1) + lcAdresa = STRTRAN(STREXTRACT(m.lcXML, [address>],[<],1,1), '-','',1,10,1) lcAdresa = Strtran(m.lcAdresa, Chr(13) + CHR(10), ' ') - llVies = .T. + llVies = .T. Else lcEroare = 'VERIFICARE_CIF VIES - ' + m.lcViesURL + ' eroare ' + Alltrim(Str(lnStatus)) - Endif && lnStatus + Endif && lnStatus Catch To loEx lcEroare = 'VERIFICARE_CIF VIES ' + CRLF + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) This.Log(m.lcEroare) diff --git a/utile/Teste/todo21/mock_meniu_dblclick_deps.prg b/utile/Teste/todo21/mock_meniu_dblclick_deps.prg index 55599b2..3b6047d 100644 --- a/utile/Teste/todo21/mock_meniu_dblclick_deps.prg +++ b/utile/Teste/todo21/mock_meniu_dblclick_deps.prg @@ -5,6 +5,9 @@ * daca e incarcat cu SET PROCEDURE ... ADDITIVE INAINTE de test_init_env_auto. * Apelurile se numara in variabile PUBLIC (declarate si initializate de test inainte de fiecare pas): * gnMockNomModCount / gnMockNomModId (nom_parteneri_modifica) si gnMockVerifCodCount (VerificaCodFiscal). +* gcMockVerifCodOptiuniAnte (daca declarata C de test) - captureaza toDate.optiuni_meniu_ante primit. +* gnMockVerifCodLnOptiune (daca declarata N de test) - controleaza ce intoarce mock-ul prin @lnOptiune, +* ca testul sa simuleze alegerea din XMENU (ex. 1 = prima optiune din meniu) fara sa-l deschida. PROCEDURE nom_parteneri_modifica LPARAMETERS tnId_Part, tnIdTipPart, tcTipPart, tnSpecial, tcMesaj @@ -22,6 +25,10 @@ PROCEDURE VerificaCodFiscal IF TYPE('gnMockVerifCodCount') = 'N' gnMockVerifCodCount = gnMockVerifCodCount + 1 ENDIF + IF TYPE('gcMockVerifCodOptiuniAnte') = 'C' + gcMockVerifCodOptiuniAnte = IIF(PEMSTATUS(toDate, 'optiuni_meniu_ante', 5), ALLTRIM(toDate.optiuni_meniu_ante), '') + ENDIF + lnOptiune = IIF(TYPE('gnMockVerifCodLnOptiune') = 'N', gnMockVerifCodLnOptiune, 0) loPartener = NULL RETURN 7 ENDPROC diff --git a/utile/Teste/todo21/test_todo21_e2e_verificare.prg b/utile/Teste/todo21/test_todo21_e2e_verificare.prg new file mode 100644 index 0000000..cd949c8 --- /dev/null +++ b/utile/Teste/todo21/test_todo21_e2e_verificare.prg @@ -0,0 +1,375 @@ +* test_todo21_e2e_verificare.prg +* TODO #21 - test END-TO-END al verificarii codurilor fiscale. +* +* Spre deosebire de celelalte teste (care instantiaza direct frm_verificare_parteneri), acesta +* intra prin punctul de intrare REAL folosit de toti apelantii - verificare_parteneri() +* (COMUN\programe\oproceduri_comune.prg:4525) - cu lista in formatul sir +* "cod***denumire***atribut***ales***id_part***data|...", si merge pana la capat: +* sir -> crsXMLParteneriVerificare -> crsVerificareParteneri -> formular modal -> +* Activate -> do_verifica -> serviciul web ANAF REAL -> perioade + atentie -> cursor final. +* +* Formularul se deschide cu Show(1) (modal), deci headless-ul s-ar agata. Deblocarea se face cu +* un obiect Timer independent (clasa tmrE2EDeblocare, la finalul fisierului), care asteapta ca +* verificarea sa PORNEASCA (lblVerifica.Visible = .T., pus la inceputul lui do_verifica) si abia +* apoi ca ea sa se TERMINE (lblVerifica.Visible = .F., pus la final), inainte sa dea Release. +* Fara cele doua faze, timer-ul ar putea elibera formularul in mijlocul verificarii - do_verifica +* apeleaza Inkey(1), moment in care evenimentele de timer chiar se executa. +* +* Cursorul se pastreaza dupa inchidere (tlDontCloseCursor = .T.), iar asertiunile se fac pe el. +* +* Datele de test: coduri fiscale REALE alese dinamic din istoric_coduri_fiscale si un partener +* REAL din nom_parteneri (id_part nenul), plus un cod invalid fabricat si un duplicat - nimic +* hardcodat, deci testul nu depinde de starea unei anumite firme. +* +* Nu scrie nimic in Oracle (doar SELECT-uri) si nu modifica nomenclatorul. +* +* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\test_todo21_e2e_verificare.prg" +* Verdict in log: TOTAL OK / TOTAL FAIL: n pas(i). + +SET SAFETY OFF +SET TALK OFF +SET DELETED ON +SET EXACT ON +SET CENTURY ON +SET DATE DMY +SET NULLDISPLAY TO '' +CLOSE DATABASES + +PUBLIC gcLog +gcLog = "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\test_todo21_e2e_verificare_log.txt" +STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog) + +PUBLIC gnEsecuri +gnEsecuri = 0 + +ON ERROR DO PrErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() +ON SHUTDOWN QUIT + +PUBLIC gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns +gcMockUltimMesaj = '' +gnMockUltimTip = 0 +gnMockRaspuns = 6 + +PUBLIC goTmrE2E, gnE2EFazaTimer, gnE2ETicks, glE2EEliberat +gnE2EFazaTimer = 0 +gnE2ETicks = 0 +glE2EEliberat = .F. + +TRY + SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE + DO PrLog WITH 'mock-uri incarcate' + + DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT' + IF gnHandle <= 0 + DO PrLog WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')' + gnEsecuri = gnEsecuri + 1 + DO PrLog WITH 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)' + QUIT + ENDIF + DO PrLog WITH 'mediu OK, schema=' + gcS + + *===================================================================== + * Date de test reale, alese dinamic + *===================================================================== + LOCAL lcSql, lcCod1, lcCod2 + TEXT TO lcSql NOSHOW +select cod_fiscal_n from ( + select cod_fiscal_n from istoric_coduri_fiscale + where cod_fiscal_n is not null and data_inceput_scptva is not null + order by dataorav_anaf desc) where rownum <= 2 + ENDTEXT + lcCod1 = '' + lcCod2 = '' + IF goExecutor.oExecuta(lcSql, 'crsE1') AND USED('crsE1') AND RECCOUNT('crsE1') > 0 + SELECT crsE1 + GO TOP + lcCod1 = ALLTRIM(TRANSFORM(NVL(crsE1.cod_fiscal_n, 0))) + IF RECCOUNT('crsE1') > 1 + SKIP + lcCod2 = ALLTRIM(TRANSFORM(NVL(crsE1.cod_fiscal_n, 0))) + ENDIF + ENDIF + USE IN (SELECT('crsE1')) + + LOCAL lnIdPart, lcCodPart, lcDenPart + TEXT TO lcSql NOSHOW +select id_part, cod_fiscal, denumire from ( + select id_part, cod_fiscal, denumire from nom_parteneri + where nvl(inactiv,0) = 0 and nvl(sters,0) = 0 and not cod_fiscal is null + order by id_part desc) where rownum <= 1 + ENDTEXT + lnIdPart = 0 + lcCodPart = '' + lcDenPart = '' + IF goExecutor.oExecuta(lcSql, 'crsE2') AND USED('crsE2') AND RECCOUNT('crsE2') > 0 + lnIdPart = NVL(crsE2.id_part, 0) + lcCodPart = ALLTRIM(NVL(crsE2.cod_fiscal, '')) + lcDenPart = ALLTRIM(NVL(crsE2.denumire, '')) + ENDIF + USE IN (SELECT('crsE2')) + + DO PrLog WITH 'coduri ANAF de test: [' + lcCod1 + '] [' + lcCod2 + ']; partener: id_part=' + ; + TRANSFORM(lnIdPart) + ' cod=[' + lcCodPart + ']' + + IF EMPTY(lcCod1) OR lnIdPart = 0 + DO PrLog WITH 'FAIL: nu s-au gasit date de test in Oracle' + gnEsecuri = gnEsecuri + 1 + DO PrLog WITH 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)' + QUIT + ENDIF + + *===================================================================== + * Lista de intrare, construita EXACT ca la apelantii reali (D394, jurnale TVA): un cursor cu + * id_part / cod_fiscal / denumire / atribut_fiscal / ales / data, trecut prin Cursortoxml + * (vezi Clase/ovanzcump.vc2:19608-19618). + * 5 randuri: cod real 1 de doua ori (-> DUPLICAT), cod real 2, partener real cu id_part, + * cod fabricat invalid (-> INVALID). + *===================================================================== + LOCAL lcLista, ldData + ldData = DATE(YEAR(DATE()), MONTH(DATE()), 1) + CREATE CURSOR crsE2ELista (id_part N(16), cod_fiscal C(30), denumire C(100), atribut_fiscal C(2), ; + ales L, IsCIF L, Data D) + INSERT INTO crsE2ELista VALUES (0, lcCod1, 'E2E DUPLICAT A', 'RO', .F., .T., ldData) + INSERT INTO crsE2ELista VALUES (0, lcCod1, 'E2E DUPLICAT B', 'RO', .F., .T., ldData) + IF !EMPTY(lcCod2) + INSERT INTO crsE2ELista VALUES (0, lcCod2, 'E2E COD ANAF 2', 'RO', .F., .T., ldData) + ENDIF + INSERT INTO crsE2ELista VALUES (lnIdPart, lcCodPart, lcDenPart, ; + IIF(LEFT(UPPER(lcCodPart), 2) == 'RO', 'RO', ' '), .F., .T., ldData) + INSERT INTO crsE2ELista VALUES (0, '123', 'E2E COD INVALID', 'RO', .F., .T., ldData) + lcLista = '' + CURSORTOXML('crsE2ELista', 'lcLista', 1, 0, 0, '1') + USE IN (SELECT('crsE2ELista')) + + *===================================================================== + * Timer de deblocare + apelul REAL (modal) + *===================================================================== + goTmrE2E = CREATEOBJECT('tmrE2EDeblocare') + goTmrE2E.Enabled = .T. + + LOCAL lcCursor, ltStart + ltStart = DATETIME() + DO PrLog WITH 'apelez verificare_parteneri (modal) ...' + lcCursor = verificare_parteneri(m.lcLista, .T., .T., .F., .T., .T., .F., .T.) + goTmrE2E.Enabled = .F. + DO PrLog WITH 'verificare_parteneri s-a intors dupa ' + TRANSFORM(INT(DATETIME() - ltStart)) + ; + ' s, cursor=[' + TRANSFORM(lcCursor) + '], timer: faza=' + TRANSFORM(gnE2EFazaTimer) + ; + ' ticks=' + TRANSFORM(gnE2ETicks) + ' eliberat=' + TRANSFORM(glE2EEliberat) + + *===================================================================== + * E1: cursorul supravietuieste (tlDontCloseCursor = .T.) si are toate randurile + *===================================================================== + LOCAL lnAsteptate + lnAsteptate = IIF(EMPTY(lcCod2), 4, 5) + IF USED('crsVerificareParteneri') AND RECCOUNT('crsVerificareParteneri') = lnAsteptate + DO PrLog WITH 'OK E1: cursorul crsVerificareParteneri a ramas deschis, ' + ; + TRANSFORM(lnAsteptate) + ' randuri' + ELSE + DO PrLog WITH 'FAIL E1: cursor deschis=' + TRANSFORM(USED('crsVerificareParteneri')) + ; + ' randuri=' + TRANSFORM(IIF(USED('crsVerificareParteneri'), RECCOUNT('crsVerificareParteneri'), -1)) + ; + ' asteptat ' + TRANSFORM(lnAsteptate) + gnEsecuri = gnEsecuri + 1 + DO PrLog WITH 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)' + QUIT + ENDIF + + *===================================================================== + * E2: id_part si data au traversat parsarea sirului (fix-ul C4 din TODO 21) + *===================================================================== + SELECT crsVerificareParteneri + LOCATE FOR ALLTRIM(NVL(denumire, '')) == lcDenPart + IF FOUND() AND NVL(crsVerificareParteneri.id_part, 0) = lnIdPart AND crsVerificareParteneri.Data = ldData + DO PrLog WITH 'OK E2: id_part=' + TRANSFORM(lnIdPart) + ' si data=' + DTOC(ldData) + ' au ajuns in cursor' + ELSE + DO PrLog WITH 'FAIL E2: id_part=' + TRANSFORM(IIF(FOUND(), NVL(crsVerificareParteneri.id_part, 0), -1)) + ; + ' data=' + IIF(FOUND(), DTOC(crsVerificareParteneri.Data), '?') + ' asteptat ' + ; + TRANSFORM(lnIdPart) + ' / ' + DTOC(ldData) + gnEsecuri = gnEsecuri + 1 + ENDIF + + *===================================================================== + * E3: codul invalid e marcat Valid = .F. si primeste eticheta INVALID + *===================================================================== + SELECT crsVerificareParteneri + LOCATE FOR ALLTRIM(NVL(denumire, '')) == 'E2E COD INVALID' + IF FOUND() AND NVL(crsVerificareParteneri.Valid, .T.) = .F. AND 'INVALID' $ crsVerificareParteneri.atentie + DO PrLog WITH 'OK E3: cod invalid -> Valid=.F., atentie=[' + ALLTRIM(crsVerificareParteneri.atentie) + ']' + ELSE + DO PrLog WITH 'FAIL E3: cod invalid -> Valid=' + TRANSFORM(IIF(FOUND(), crsVerificareParteneri.Valid, .NULL.)) + ; + ' atentie=[' + IIF(FOUND(), ALLTRIM(crsVerificareParteneri.atentie), '?') + ']' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *===================================================================== + * E4: cele doua randuri cu acelasi cod fiscal sunt marcate DUPLICAT + *===================================================================== + LOCAL lnDupl + SELECT crsVerificareParteneri + COUNT FOR ALLTRIM(NVL(cod_fiscal, '')) == lcCod1 AND 'DUPLICAT' $ atentie TO lnDupl + IF lnDupl = 2 + DO PrLog WITH 'OK E4: ambele randuri cu codul ' + lcCod1 + ' au eticheta DUPLICAT' + ELSE + DO PrLog WITH 'FAIL E4: randuri DUPLICAT pentru ' + lcCod1 + ' = ' + TRANSFORM(lnDupl) + ' (asteptat 2)' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *===================================================================== + * E5: ANAF a raspuns pe traseul real - cel putin un rand cu firma completata + * si cel putin o perioada de TVA completata (coloanele noi din TODO 21) + *===================================================================== + LOCAL lnCuFirma, lnCuPerioada + SELECT crsVerificareParteneri + COUNT FOR !EMPTY(NVL(firma, '')) TO lnCuFirma + COUNT FOR !EMPTY(NVL(data_inceput_scptva, {})) OR !EMPTY(NVL(data_inceput_tvainc, {})) ; + OR !EMPTY(NVL(data_inactivare, {})) TO lnCuPerioada + IF lnCuFirma > 0 AND lnCuPerioada > 0 + DO PrLog WITH 'OK E5: ANAF a raspuns real - ' + TRANSFORM(lnCuFirma) + ' rand(uri) cu firma, ' + ; + TRANSFORM(lnCuPerioada) + ' cu perioade completate' + ELSE + DO PrLog WITH 'FAIL E5: firma=' + TRANSFORM(lnCuFirma) + ' perioade=' + TRANSFORM(lnCuPerioada) + ' (asteptat > 0)' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *===================================================================== + * E6: textul venit de la ANAF nu contine '?' (decodarea UTF-8 prin + * AnafDecodeResponseText - COMUN\programe\validare.prg) + *===================================================================== + LOCAL lnSemn, lcExemplu + lnSemn = 0 + lcExemplu = '' + SELECT crsVerificareParteneri + SCAN FOR !EMPTY(NVL(firma, '')) + IF '?' $ NVL(firma, '') OR '?' $ NVL(adresa, '') OR '?' $ NVL(stare, '') OR '?' $ NVL(judet, '') + lnSemn = lnSemn + 1 + lcExemplu = ALLTRIM(NVL(firma, '')) + ' / ' + ALLTRIM(NVL(adresa, '')) + ENDIF + ENDSCAN + IF lnSemn = 0 + DO PrLog WITH 'OK E6: niciun "?" in textele ANAF (firma/adresa/judet/stare)' + ELSE + DO PrLog WITH 'FAIL E6: ' + TRANSFORM(lnSemn) + ' rand(uri) cu "?" in text, ex: [' + lcExemplu + ']' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *===================================================================== + * E7: atentie contine numai etichetele definite, in ordinea gravitatii, + * si nu are text trunchiat (regresie: concatenarea pe camp padded) + *===================================================================== + LOCAL lcAtn, llOrdineOK, lnPozI, lnPozD, lnPozN, lnPozR, llRauOK + llOrdineOK = .T. + llRauOK = .T. + SELECT crsVerificareParteneri + SCAN + lcAtn = ALLTRIM(NVL(atentie, '')) + IF EMPTY(lcAtn) + LOOP + ENDIF + *-- fara spatii duble (semn ca s-a concatenat peste padding) + IF ' ' $ lcAtn + llRauOK = .F. + DO PrLog WITH ' atentie cu spatii duble pe randul ' + TRANSFORM(RECNO()) + ': [' + lcAtn + ']' + ENDIF + lnPozI = AT('INVALID', lcAtn) + lnPozD = AT('DUPLICAT', lcAtn) + lnPozN = AT('INACTIV', lcAtn) + lnPozR = AT('FARA RO', lcAtn) + IF (lnPozI > 0 AND lnPozD > 0 AND lnPozI > lnPozD) OR ; + (lnPozD > 0 AND lnPozN > 0 AND lnPozD > lnPozN) OR ; + (lnPozN > 0 AND lnPozR > 0 AND lnPozN > lnPozR) + llOrdineOK = .F. + DO PrLog WITH ' ordine gresita in atentie pe randul ' + TRANSFORM(RECNO()) + ': [' + lcAtn + ']' + ENDIF + ENDSCAN + IF llOrdineOK AND llRauOK + DO PrLog WITH 'OK E7: coloana atentie e coerenta (ordine INVALID/DUPLICAT/INACTIV/FARA RO, fara spatii duble)' + ELSE + DO PrLog WITH 'FAIL E7: coloana atentie incoerenta' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *===================================================================== + * E8: formularul a fost inchis de timer, nu a ramas deschis + *===================================================================== + IF glE2EEliberat AND gnE2EFazaTimer >= 2 + DO PrLog WITH 'OK E8: verificarea a pornit si s-a terminat, formularul a fost eliberat normal' + ELSE + DO PrLog WITH 'FAIL E8: faza timer=' + TRANSFORM(gnE2EFazaTimer) + ' eliberat=' + TRANSFORM(glE2EEliberat) + ; + ' (formularul nu a parcurs ciclul complet de verificare)' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *-- rezumat pe randuri, pentru diagnostic + SELECT crsVerificareParteneri + SCAN + DO PrLog WITH ' ' + PADR(ALLTRIM(NVL(denumire, '')), 24) + ' cod=' + PADR(ALLTRIM(NVL(cod_fiscal, '')), 14) + ; + ' valid=' + TRANSFORM(NVL(Valid, .NULL.)) + ' dupl=' + TRANSFORM(duplicat) + ; + ' firma=[' + LEFT(ALLTRIM(NVL(firma, '')), 30) + ']' + ' atentie=[' + ALLTRIM(NVL(atentie, '')) + ']' + ENDSCAN + + USE IN (SELECT('crsVerificareParteneri')) + DO PrLog WITH IIF(gnEsecuri = 0, 'TOTAL OK', 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)') +CATCH TO loEx + DO PrLog WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure + DO PrLog WITH 'TOTAL FAIL: exceptie neasteptata' +ENDTRY + +QUIT + +********************************************************** +PROCEDURE PrLog + LPARAMETERS tcMsg + LOCAL lcL + SET SAFETY OFF + lcL = IIF(FILE(gcLog), FILETOSTR(gcLog), '') + STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcLog) +ENDPROC + +********************************************************** +PROCEDURE PrErr + LPARAMETERS tnErr, tcMsg, tcProg, tnLine + DO PrLog WITH 'EROARE ' + TRANSFORM(tnErr) + ': ' + TRANSFORM(tcMsg) + ' in ' + ; + TRANSFORM(tcProg) + ' linia ' + TRANSFORM(tnLine) + gnEsecuri = gnEsecuri + 1 + DO PrLog WITH 'TOTAL FAIL: eroare neasteptata' + QUIT +ENDPROC + +********************************************************** +* Deblocarea formularului modal, in doua faze: +* faza 0 -> asteapta ca do_verifica sa PORNEASCA (lblVerifica.Visible = .T.) +* faza 1 -> asteapta ca do_verifica sa TERMINE (lblVerifica.Visible = .F.) si da Release +* Plasa de siguranta: dupa 240 de ticks (~8 minute) elibereaza oricum, ca sa nu agate testul. +********************************************************** +DEFINE CLASS tmrE2EDeblocare AS Timer + Interval = 2000 + Enabled = .F. + + PROCEDURE Timer + LOCAL lnI, loF, llVaz + gnE2ETicks = gnE2ETicks + 1 + IF gnE2ETicks <= 3 OR MOD(gnE2ETicks, 15) = 0 + DO PrLog WITH ' timer tick ' + TRANSFORM(gnE2ETicks) + ' forme=' + TRANSFORM(_SCREEN.FormCount) + ' faza=' + TRANSFORM(gnE2EFazaTimer) + ENDIF + FOR lnI = 1 TO _SCREEN.FormCount + loF = _SCREEN.Forms(lnI) + IF !PEMSTATUS(loF, 'lblVerifica', 5) OR !PEMSTATUS(loF, 'do_verifica', 5) + LOOP + ENDIF + llVaz = loF.lblVerifica.Visible + DO CASE + CASE loF.lAutoverificare OR llVaz + *-- verificarea nu a pornit inca sau e in curs (lblVerifica vizibil) + gnE2EFazaTimer = IIF(llVaz, 1, gnE2EFazaTimer) + CASE gnE2ETicks > 240 + glE2EEliberat = .F. + loF.Release() + OTHERWISE + *-- Activate a rulat (lAutoverificare = .F.) si do_verifica s-a terminat + gnE2EFazaTimer = 2 + glE2EEliberat = .T. + loF.Release() + ENDCASE + EXIT + ENDFOR + ENDPROC +ENDDEFINE diff --git a/utile/Teste/todo21/test_todo21_grid_dblclick.prg b/utile/Teste/todo21/test_todo21_grid_dblclick.prg index d7fc594..e46e76b 100644 --- a/utile/Teste/todo21/test_todo21_grid_dblclick.prg +++ b/utile/Teste/todo21/test_todo21_grid_dblclick.prg @@ -1,17 +1,33 @@ * test_todo21_grid_dblclick.prg -* TODO #21, benzile A (coloanele de perioada in grid-ul de verificare coduri fiscale) si C -* (dublu-click pe denumire/cod fiscal ROA -> editare partener, coloanele ANAF raman pe verificare). -* Instantiaza DIRECT frm_verificare_parteneri (COMUN\clase\overificari.vc2), fara Show(1) modal - -* cursorul crsVerificareParteneri e construit ca in oproceduri_comune.prg (verificare_parteneri), -* fara sa treaca prin acea procedura (care ar deschide formularul modal). +* TODO #21, benzile A (coloanele de perioada in grid-ul de verificare coduri fiscale, inclusiv +* coloana calculata cPerioadaTva) si D (meniul unic de dublu-click, vederi de grid, coloana Ales +* conditionata). Instantiaza DIRECT frm_verificare_parteneri (COMUN\clase\overificari.vc2), fara +* Show(1) modal - cursorul crsVerificareParteneri e construit ca in oproceduri_comune.prg +* (verificare_parteneri), fara sa treaca prin acea procedura (care ar deschide formularul modal). +* +* Reproiectare: TOATE coloanele grid-ului cheama acum meniu_dblclick (nu mai exista rutare directa +* pe Column2/3 vs Column5/6); prima optiune a meniului ("MODIFICARE PARTENER - ") vine +* prin optiuni_meniu_ante, deci prin VerificaCodFiscal, care ar deschide XMENU (agata headless-ul) - +* de-asta VerificaCodFiscal e mock-uita (mock_meniu_dblclick_deps.prg), nu apelata real. * * Mock-uri (fisiere DIFERITE de overificari.vc2 - rezolutia "primul incarcat" e sigura): * mock_amessagebox.prg - dialogul "partener neidentificat" -* mock_meniu_dblclick_deps.prg - nom_parteneri_modifica si VerificaCodFiscal (numara apelurile) +* mock_meniu_dblclick_deps.prg - nom_parteneri_modifica, VerificaCodFiscal (numara apelurile, +* captureaza optiuni_meniu_ante, controleaza @lnOptiune intors) +* +* Banda G (continutul coloanei atentie): do_verifica face verificare ANAF reala (nu se poate +* controla ce raspunde ANAF), deci nu se pot fabrica exact cele 4 texte pe randurile reale - se +* verifica doar BUCATA care umple atentie (COMUN\clase\overificari.vc2:2992-2996), copiata LITERAL +* si rulata pe randuri fabricate distincte, fara alt apel la do_verifica. +* +* Banda H: chkANAF si chkExperimental au disparut ca obiecte din formular (do_verifica are acum +* llServiciuWebANAF constant .T.; modul experimental e citit din proprietatea lExperimental, nu +* dintr-un control) - se verifica ca lExperimental reflecta al 5-lea parametru la Init, nu o +* valoare hardcodata (regresie deja prinsa o data). chkMFIN ramane ca obiect (doar Visible=.F.). * * Coduri de test: un cod fiscal REAL cu perioada ANAF (ales dinamic din istoric_coduri_fiscale, * ca in test_todo21_perioade_anaf.prg) si un partener REAL din NOM_PARTENERI (ales dinamic, cel -* mai nou activ), plus un rand cu id_part = 0 pentru cazul "partener neidentificat". +* mai nou activ), plus randuri fabricate pentru meniu_dblclick/atentie. * * Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\test_todo21_grid_dblclick.prg" * Verdict in log: TOTAL OK / TOTAL FAIL: n pas(i). @@ -40,10 +56,12 @@ gcMockUltimMesaj = '' gnMockUltimTip = 0 gnMockRaspuns = 6 -PUBLIC gnMockNomModCount, gnMockNomModId, gnMockVerifCodCount +PUBLIC gnMockNomModCount, gnMockNomModId, gnMockVerifCodCount, gcMockVerifCodOptiuniAnte, gnMockVerifCodLnOptiune gnMockNomModCount = 0 gnMockNomModId = 0 gnMockVerifCodCount = 0 +gcMockVerifCodOptiuniAnte = '' +gnMockVerifCodLnOptiune = 0 TRY SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE @@ -74,7 +92,7 @@ select cod_fiscal_n from ( USE IN (SELECT('crsGD1')) DO PrLog WITH 'cod fiscal ANAF de test: [' + lcCodAnaf + ']' - *-- partener real activ, pentru banda C (dublu-click -> editare partener) + *-- partener real activ, pentru banda D (meniu_dblclick -> editare partener) LOCAL lnIdPartTest, lcCodFiscalPart, lcDenumirePart TEXT TO lcSql NOSHOW select id_part, cod_fiscal, denumire from ( @@ -110,18 +128,67 @@ select id_part, cod_fiscal, denumire from ( INSERT INTO crsVerificareParteneri (denumire, cod_fiscal, id_part) VALUES ('TEST ANAF PERIOADA', lcCodAnaf, 0) INSERT INTO crsVerificareParteneri (denumire, cod_fiscal, id_part) VALUES (lcDenumirePart, lcCodFiscalPart, lnIdPartTest) INSERT INTO crsVerificareParteneri (denumire, cod_fiscal, id_part) VALUES ('TEST FARA ID_PART', 'RO9999999', 0) + *-- randul D1c: denumire cu ';' - trebuie inlocuit cu ',' ca sa nu sparga sirul XMENU + INSERT INTO crsVerificareParteneri (denumire, cod_fiscal, id_part) VALUES ('TEST; CU PUNCT VIRGULA', 'RO8888888', 777) UPDATE crsVerificareParteneri SET IsCIF = .T. GO TOP + *===================================================================== + * Banda F: coloana Ales (Column1) - conditionata de al 7-lea parametru la Init + *===================================================================== + LOCAL loFormAles + loFormAles = CREATEOBJECT('frm_verificare_parteneri', .F., .T., .F., .F., .F., .T.) + loFormAles.WindowType = 0 + IF !loFormAles._grdbase1.Column1.Visible + DO PrLog WITH 'OK F1: Column1 (Ales) ascunsa cu 6 parametri (implicit, fara al 7-lea)' + ELSE + DO PrLog WITH 'FAIL F1: Column1 (Ales) vizibila desi formularul a primit doar 6 parametri' + gnEsecuri = gnEsecuri + 1 + ENDIF + loFormAles.Release() + + loFormAles = CREATEOBJECT('frm_verificare_parteneri', .F., .T., .F., .F., .F., .T., .T.) + loFormAles.WindowType = 0 + IF loFormAles._grdbase1.Column1.Visible + DO PrLog WITH 'OK F2: Column1 (Ales) vizibila cu al 7-lea parametru .T.' + ELSE + DO PrLog WITH 'FAIL F2: Column1 (Ales) ramane ascunsa desi al 7-lea parametru e .T.' + gnEsecuri = gnEsecuri + 1 + ENDIF + loFormAles.Release() + PUBLIC goFormGD goFormGD = CREATEOBJECT('frm_verificare_parteneri', .F., .T., .F., .F., .F., .T.) goFormGD.WindowType = 0 goFormGD.Show() DOEVENTS FORCE - DO PrLog WITH 'formular instantiat, chkANAF=' + TRANSFORM(goFormGD.chkANAF.Value) + DO PrLog WITH 'formular instantiat, lMFIN=' + TRANSFORM(goFormGD.lMFIN) *===================================================================== - * Banda A: grid cu 34 coloane (era 27), cele 7 noi legate pe cursorul real + * Banda H: chkANAF/chkExperimental/chkMFIN au disparut ca obiecte; lExperimental (proprietate) trebuie + *-- sa reflecte al 5-lea parametru la Init, nu o valoare hardcodata + *===================================================================== + IF goFormGD.lExperimental = .F. + DO PrLog WITH 'OK H1: tlExperimental=.F. (al 5-lea parametru) -> lExperimental=.F.' + ELSE + DO PrLog WITH 'FAIL H1: lExperimental=' + TRANSFORM(goFormGD.lExperimental) + ' asteptat .F.' + gnEsecuri = gnEsecuri + 1 + ENDIF + + LOCAL loFormExp + loFormExp = CREATEOBJECT('frm_verificare_parteneri', .F., .T., .F., .F., .T., .T.) + loFormExp.WindowType = 0 + IF loFormExp.lExperimental = .T. + DO PrLog WITH 'OK H2: tlExperimental=.T. (al 5-lea parametru) -> lExperimental=.T.' + ELSE + DO PrLog WITH 'FAIL H2: lExperimental=' + TRANSFORM(loFormExp.lExperimental) + ' asteptat .T. (nu mai e hardcodat pe .F.)' + gnEsecuri = gnEsecuri + 1 + ENDIF + loFormExp.Release() + + *===================================================================== + * Banda A: cele 7 coloane de perioada ANAF din grid (34 in total; coloana calculata + * cPerioadaTva a fost scoasa - vederea Esential arata doua coloane de date, nu un text lung) *===================================================================== IF goFormGD._grdbase1.ColumnCount = 34 DO PrLog WITH 'OK A1: _grdbase1.ColumnCount = 34' @@ -130,6 +197,13 @@ select id_part, cod_fiscal, denumire from ( gnEsecuri = gnEsecuri + 1 ENDIF + IF !PEMSTATUS(goFormGD._grdbase1, 'cPerioadaTva', 5) + DO PrLog WITH 'OK A1b: coloana calculata cPerioadaTva a fost scoasa din grid' + ELSE + DO PrLog WITH 'FAIL A1b: cPerioadaTva inca exista in grid' + gnEsecuri = gnEsecuri + 1 + ENDIF + *-- coloanele redenumite sunt membri ai grid-ului dupa Name (cDataInceputScpTva...), nu dupa *-- pozitia Column28..Column34 - VFP adreseaza obiectul din container dupa Name, nu dupa pozitie LOCAL laCol[7,2], lnI, lcNume, lcSrc, llColOk @@ -167,7 +241,7 @@ select id_part, cod_fiscal, denumire from ( gnEsecuri = gnEsecuri + 1 ENDIF - *-- do_verifica cu chkANAF fortat .T. in Init -> ramura serviciu web ANAF (banda A2) + *-- do_verifica: llServiciuWebANAF e acum constanta .T. in cod (overificari.vc2:2808) -> ramura serviciu web ANAF (banda A2) goFormGD.do_verifica(.F., .T., .F.) DO PrLog WITH 'do_verifica rulat (tlValidare=.F. tlMFIN=.T. tlVIES=.F.)' @@ -193,67 +267,214 @@ select id_part, cod_fiscal, denumire from ( ENDIF *===================================================================== - * Banda C: dublu-click pe coloanele ROA (denumire/cod fiscal) -> editare partener; - * coloanele ANAF (firma/cod) raman pe meniul de verificare + * Banda D: meniu_dblclick unic pe toate coloanele (nu mai exista rutare directa pe coloana) *===================================================================== + + *-- D1a: partener cu id_part - prima optiune activa, cu denumirea lui SELECT crsVerificareParteneri LOCATE FOR id_part = lnIdPartTest - - gnMockNomModCount = 0 - gnMockNomModId = 0 - gnMockVerifCodCount = 0 + gcMockVerifCodOptiuniAnte = '' + gnMockVerifCodLnOptiune = 0 goFormGD._grdbase1.Column2.Text1.DblClick() - IF gnMockNomModCount = 1 AND gnMockNomModId = lnIdPartTest AND gnMockVerifCodCount = 0 - DO PrLog WITH 'OK C1: dublu-click Column2 (denumire) -> nom_parteneri_modifica(' + TRANSFORM(lnIdPartTest) + ')' + IF gcMockVerifCodOptiuniAnte == "MODIFICARE PARTENER - " + lcDenumirePart + ";\-;" + DO PrLog WITH 'OK D1a: Column2 DblClick -> optiuni_meniu_ante = [MODIFICARE PARTENER - ;\-;]' ELSE - DO PrLog WITH 'FAIL C1: Column2 DblClick - nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' id=' + TRANSFORM(gnMockNomModId) + ' verifcod count=' + TRANSFORM(gnMockVerifCodCount) + DO PrLog WITH 'FAIL D1a: optiuni_meniu_ante=[' + gcMockVerifCodOptiuniAnte + ']' gnEsecuri = gnEsecuri + 1 ENDIF - gnMockNomModCount = 0 - gnMockNomModId = 0 - gnMockVerifCodCount = 0 - goFormGD._grdbase1.Column3.Text1.DblClick() - IF gnMockNomModCount = 1 AND gnMockNomModId = lnIdPartTest AND gnMockVerifCodCount = 0 - DO PrLog WITH 'OK C2: dublu-click Column3 (cod fiscal ROA) -> nom_parteneri_modifica(' + TRANSFORM(lnIdPartTest) + ')' - ELSE - DO PrLog WITH 'FAIL C2: Column3 DblClick - nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' id=' + TRANSFORM(gnMockNomModId) + ' verifcod count=' + TRANSFORM(gnMockVerifCodCount) - gnEsecuri = gnEsecuri + 1 - ENDIF - - gnMockNomModCount = 0 - gnMockVerifCodCount = 0 + *-- coloana ANAF (firma) cheama ACELASI meniu_dblclick - nu mai exista rutare separata + gcMockVerifCodOptiuniAnte = '' goFormGD._grdbase1.Column5.Text1.DblClick() - IF gnMockVerifCodCount = 1 AND gnMockNomModCount = 0 - DO PrLog WITH 'OK C3: dublu-click Column5 (firma ANAF) -> VerificaCodFiscal, fara editare partener' + IF gcMockVerifCodOptiuniAnte == "MODIFICARE PARTENER - " + lcDenumirePart + ";\-;" + DO PrLog WITH 'OK D1a2: Column5 (firma ANAF) DblClick -> acelasi meniu_dblclick unificat' ELSE - DO PrLog WITH 'FAIL C3: Column5 DblClick - verifcod count=' + TRANSFORM(gnMockVerifCodCount) + ' nom_mod count=' + TRANSFORM(gnMockNomModCount) + DO PrLog WITH 'FAIL D1a2: optiuni_meniu_ante=[' + gcMockVerifCodOptiuniAnte + '] - coloana ANAF nu mai e unificata cu restul' gnEsecuri = gnEsecuri + 1 ENDIF - gnMockNomModCount = 0 - gnMockVerifCodCount = 0 - goFormGD._grdbase1.Column6.Text1.DblClick() - IF gnMockVerifCodCount = 1 AND gnMockNomModCount = 0 - DO PrLog WITH 'OK C4: dublu-click Column6 (cod ANAF) -> VerificaCodFiscal, fara editare partener' - ELSE - DO PrLog WITH 'FAIL C4: Column6 DblClick - verifcod count=' + TRANSFORM(gnMockVerifCodCount) + ' nom_mod count=' + TRANSFORM(gnMockNomModCount) - gnEsecuri = gnEsecuri + 1 - ENDIF - - *-- id_part gol -> mesaj de avertizare, fara editare partener + *-- D1b: fara id_part - prima optiune dezactivata (prefix \) SELECT crsVerificareParteneri LOCATE FOR cod_fiscal = 'RO9999999' + gcMockVerifCodOptiuniAnte = '' + goFormGD._grdbase1.Column2.Text1.DblClick() + IF gcMockVerifCodOptiuniAnte == "\MODIFICARE PARTENER - TEST FARA ID_PART;\-;" + DO PrLog WITH 'OK D1b: fara id_part -> prima optiune dezactivata cu \' + ELSE + DO PrLog WITH 'FAIL D1b: optiuni_meniu_ante=[' + gcMockVerifCodOptiuniAnte + ']' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *-- D1c: ';' din denumire devine ',' - altfel ar sparge sirul XMENU + SELECT crsVerificareParteneri + LOCATE FOR cod_fiscal = 'RO8888888' + gcMockVerifCodOptiuniAnte = '' + goFormGD._grdbase1.Column2.Text1.DblClick() + IF gcMockVerifCodOptiuniAnte == "MODIFICARE PARTENER - TEST, CU PUNCT VIRGULA;\-;" + DO PrLog WITH 'OK D1c: ";" din denumire e inlocuit cu "," in optiuni_meniu_ante' + ELSE + DO PrLog WITH 'FAIL D1c: optiuni_meniu_ante=[' + gcMockVerifCodOptiuniAnte + ']' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *-- D2: lnOptiune = 1 (prima optiune aleasa) -> meniu_dblclick_partener -> nom_parteneri_modifica + SELECT crsVerificareParteneri + LOCATE FOR id_part = lnIdPartTest + gnMockVerifCodLnOptiune = 1 + gnMockNomModCount = 0 + gnMockNomModId = 0 + goFormGD._grdbase1.Column2.Text1.DblClick() + IF gnMockNomModCount = 1 AND gnMockNomModId = lnIdPartTest + DO PrLog WITH 'OK D2: lnOptiune=1 -> meniu_dblclick_partener -> nom_parteneri_modifica(' + TRANSFORM(lnIdPartTest) + ')' + ELSE + DO PrLog WITH 'FAIL D2: nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' id=' + TRANSFORM(gnMockNomModId) + gnEsecuri = gnEsecuri + 1 + ENDIF + + *-- D2b: orice alta optiune (ex. 7 = anulat/alta actiune din meniul de verificare) -> NU editeaza partenerul + gnMockVerifCodLnOptiune = 7 + gnMockNomModCount = 0 + goFormGD._grdbase1.Column2.Text1.DblClick() + IF gnMockNomModCount = 0 + DO PrLog WITH 'OK D2b: lnOptiune<>1 -> nu se cheama meniu_dblclick_partener' + ELSE + DO PrLog WITH 'FAIL D2b: nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' desi lnOptiune=7' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *-- D3: id_part gol + lnOptiune=1 -> mesaj de avertizare, fara editare partener (fostul C5) + SELECT crsVerificareParteneri + LOCATE FOR cod_fiscal = 'RO9999999' + gnMockVerifCodLnOptiune = 1 gnMockNomModCount = 0 gcMockUltimMesaj = '' goFormGD._grdbase1.Column2.Text1.DblClick() IF gnMockNomModCount = 0 AND 'nu poate fi identificat' $ LOWER(gcMockUltimMesaj) - DO PrLog WITH 'OK C5: id_part gol -> mesaj de avertizare, fara editare partener' + DO PrLog WITH 'OK D3: id_part gol -> mesaj de avertizare, fara editare partener' ELSE - DO PrLog WITH 'FAIL C5: id_part gol - nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' mesaj=[' + gcMockUltimMesaj + ']' + DO PrLog WITH 'FAIL D3: nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' mesaj=[' + gcMockUltimMesaj + ']' gnEsecuri = gnEsecuri + 1 ENDIF + *===================================================================== + * Banda E: SetVedere(1/2/3) - coloane vizibile si suma latimilor + *===================================================================== + LOCAL lnV, lnC, lnSuma, lcVizibile + FOR lnV = 1 TO 3 + goFormGD.SetVedere(m.lnV) + lnSuma = 0 + lcVizibile = '' + FOR lnC = 1 TO goFormGD._grdbase1.ColumnCount + IF goFormGD._grdbase1.Columns(m.lnC).Visible + lnSuma = lnSuma + goFormGD._grdbase1.Columns(m.lnC).Width + lcVizibile = lcVizibile + goFormGD._grdbase1.Columns(m.lnC).Name + '(' + TRANSFORM(goFormGD._grdbase1.Columns(m.lnC).Width) + ') ' + ENDIF + ENDFOR + DO PrLog WITH 'Vedere ' + TRANSFORM(m.lnV) + ': suma latimi=' + TRANSFORM(m.lnSuma) + ' px, coloane vizibile: ' + m.lcVizibile + IF m.lnV = 1 + IF m.lnSuma <= goFormGD._grdbase1.Width + DO PrLog WITH 'OK E1: vedere Esential, suma latimilor (' + TRANSFORM(m.lnSuma) + ') <= ' + TRANSFORM(goFormGD._grdbase1.Width) + ' px (latimea reala a gridului)' + ELSE + DO PrLog WITH 'FAIL E1: vedere Esential depaseste latimea gridului - suma=' + TRANSFORM(m.lnSuma) + ' px > ' + TRANSFORM(goFormGD._grdbase1.Width) + ' px' + gnEsecuri = gnEsecuri + 1 + ENDIF + ENDIF + ENDFOR + + *-- E2: in vederea Esential perioada de TVA se vede pe doua coloane de data, nu ca text lung + goFormGD.SetVedere(1) + IF goFormGD._grdbase1.cDataInceputScpTva.Visible AND goFormGD._grdbase1.cDataSfarsitScpTva.Visible ; + AND goFormGD._grdbase1.cDataAnulImpScpTva.Visible + DO PrLog WITH 'OK E2: vederea Esential arata Inceput / Sfarsit / Anulare TVA ca trei coloane' + ELSE + DO PrLog WITH 'FAIL E2: vederea Esential nu arata cele trei coloane de perioada TVA' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *===================================================================== + * Banda I: AsazaFiltre - butoanele de filtru au caption cu numar, deci latime variabila; + * trebuie asezate unul dupa altul, fara suprapunere, oricat de lung ar fi textul + *===================================================================== + LOCAL laFil[4], lnF, llSupra, lcPoz + goFormGD.chkInvalid.Caption = 'Coduri invalide (12345)' + goFormGD.chkDuplicat.Caption = 'Duplicate (12345)' + goFormGD.chkInactiv.Caption = 'Inactivi (12345)' + goFormGD.chkPlatitor.Caption = 'Atribut RO (12345)' + goFormGD.chkInvalid.Visible = .T. + goFormGD.chkDuplicat.Visible = .T. + goFormGD.chkInactiv.Visible = .T. + goFormGD.chkPlatitor.Visible = .T. + goFormGD.AsazaFiltre() + laFil[1] = goFormGD.chkInvalid + laFil[2] = goFormGD.chkDuplicat + laFil[3] = goFormGD.chkInactiv + laFil[4] = goFormGD.chkPlatitor + llSupra = .F. + lcPoz = '' + FOR lnF = 1 TO 4 + lcPoz = lcPoz + ALLTRIM(laFil[m.lnF].Caption) + ' [' + TRANSFORM(laFil[m.lnF].Left) + '..' + ; + TRANSFORM(laFil[m.lnF].Left + laFil[m.lnF].Width) + '] ' + IF m.lnF > 1 AND laFil[m.lnF].Left < laFil[m.lnF - 1].Left + laFil[m.lnF - 1].Width + llSupra = .T. + ENDIF + ENDFOR + DO PrLog WITH ' filtre: ' + m.lcPoz + IF !llSupra + DO PrLog WITH 'OK I1: butoanele de filtru nu se suprapun dupa AsazaFiltre' + ELSE + DO PrLog WITH 'FAIL I1: butoanele de filtru se suprapun' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *-- I2: chkMFIN a disparut ca obiect; ramane proprietatea lMFIN, setata din al 2-lea parametru + IF !PEMSTATUS(goFormGD, 'chkMFIN', 5) AND goFormGD.lMFIN = .T. + DO PrLog WITH 'OK I2: chkMFIN a fost scos, lMFIN = .T. (al 2-lea parametru la Init)' + ELSE + DO PrLog WITH 'FAIL I2: chkMFIN inca exista sau lMFIN=' + TRANSFORM(goFormGD.lMFIN) + ' (asteptat .T.)' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *===================================================================== + * Banda G: continutul coloanei atentie - metoda reala ConstruiesteAtentie (COMUN\clase\overificari.vc2), + * apelata real, pe randuri fabricate, fara ANAF + *===================================================================== + INSERT INTO crsVerificareParteneri (denumire, Valid, duplicat, inactiv, firma, atribut_fiscal, platitortvamfin) ; + VALUES ('ATN INVALID', .F., .F., .F., '', '', .F.) + INSERT INTO crsVerificareParteneri (denumire, Valid, duplicat, inactiv, firma, atribut_fiscal, platitortvamfin) ; + VALUES ('ATN DUPLICAT', .T., .T., .F., '', '', .F.) + INSERT INTO crsVerificareParteneri (denumire, Valid, duplicat, inactiv, firma, atribut_fiscal, platitortvamfin) ; + VALUES ('ATN INACTIV', .T., .F., .T., '', '', .F.) + INSERT INTO crsVerificareParteneri (denumire, Valid, duplicat, inactiv, firma, atribut_fiscal, platitortvamfin) ; + VALUES ('ATN FARARO', .T., .F., .F., 'FIRMA TEST SRL', 'RO', .F.) + INSERT INTO crsVerificareParteneri (denumire, Valid, duplicat, inactiv, firma, atribut_fiscal, platitortvamfin) ; + VALUES ('ATN COMBO', .T., .T., .T., 'FIRMA COMBO SRL', '', .T.) + + goFormGD.ConstruiesteAtentie() + + LOCAL laAtn[5,2] + laAtn[1,1] = 'ATN INVALID' + laAtn[1,2] = 'INVALID' + laAtn[2,1] = 'ATN DUPLICAT' + laAtn[2,2] = 'DUPLICAT' + laAtn[3,1] = 'ATN INACTIV' + laAtn[3,2] = 'INACTIV' + laAtn[4,1] = 'ATN FARARO' + laAtn[4,2] = 'FARA RO' + laAtn[5,1] = 'ATN COMBO' + laAtn[5,2] = 'DUPLICAT INACTIV FARA RO' + + LOCAL lnG + FOR lnG = 1 TO 5 + SELECT crsVerificareParteneri + LOCATE FOR denumire = laAtn[m.lnG, 1] + IF FOUND() AND ALLTRIM(crsVerificareParteneri.atentie) == laAtn[m.lnG, 2] + DO PrLog WITH 'OK G' + TRANSFORM(m.lnG) + ': ' + laAtn[m.lnG, 1] + ' -> atentie=[' + laAtn[m.lnG, 2] + ']' + ELSE + DO PrLog WITH 'FAIL G' + TRANSFORM(m.lnG) + ': ' + laAtn[m.lnG, 1] + ' -> atentie=[' + ALLTRIM(crsVerificareParteneri.atentie) + '] asteptat [' + laAtn[m.lnG, 2] + ']' + gnEsecuri = gnEsecuri + 1 + ENDIF + ENDFOR + goFormGD.Release() DO PrLog WITH IIF(gnEsecuri = 0, 'TOTAL OK', 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)') diff --git a/utile/Teste/todo21/test_todo21_mesaj_meniu.prg b/utile/Teste/todo21/test_todo21_mesaj_meniu.prg new file mode 100644 index 0000000..2ddc56f --- /dev/null +++ b/utile/Teste/todo21/test_todo21_mesaj_meniu.prg @@ -0,0 +1,376 @@ +* test_todo21_mesaj_meniu.prg +* TODO #21: regresie pentru D6/D7 (mesajul de detalii grupat pe sectiuni) si D10 (meniul +* scurtat de verificare cod fiscal), ca schimbari ulterioare in formular sa nu le strice tacut. +* Fara HTTP, fara ANAF live, fara Oracle - GetMeniuVerificareCodFiscal/GetOptiuneVerificareCodFiscal/ +* verifica_partener_show_info nu depind de ele (doar de parametri si de variabila globala crlf, +* setata mai jos ca in test_init_env_auto.prg). +* +* Pas 1-2: GetMeniuVerificareCodFiscal / GetOptiuneVerificareCodFiscal apelate DIRECT (functii +* pure, fara XMENU in interior). +* Pas 3: aritmetica optiuni_meniu_ante - copiata LITERAL din VerificaCodFiscal +* (COMUN\programe\oproceduri_comune.prg:4960-4967: "lnOptiuneVerificare = m.lnOptiune" apoi +* "lnOptiuneVerificare = m.lnOptiuneVerificare - Occurs(';', m.lcOptiuniMeniuAnte)"), aplicata pe +* o pozitie FABRICATA (nu se apeleaza VerificaCodFiscal, care ar deschide XMENU si ar bloca +* headless-ul). +* Pas 4: verifica_partener_show_info, apelata prin umbra (copie a oproceduri_comune.prg cu +* amessagebox redenumit, ca in test_todo21_perioade_anaf.prg) - amessagebox e inlocuit de +* mock_amessagebox.prg, textul se captureaza in gcMockUltimMesaj fara dialog modal. Obiectele +* partener sunt fabricate (CREATEOBJECT("empty") + ADDPROPERTY), fara verificare reala. +* +* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\test_todo21_mesaj_meniu.prg" +* Verdict in log: TOTAL OK / TOTAL FAIL: n pas(i). + +SET SAFETY OFF +SET TALK OFF +SET DELETED ON +SET EXACT ON +SET CENTURY ON +SET DATE DMY +SET NULLDISPLAY TO '' +CLOSE DATABASES + +PUBLIC gcLog, gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns, crlf +gcLog = "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\test_todo21_mesaj_meniu_log.txt" +gcMockUltimMesaj = '' +gnMockUltimTip = 0 +gnMockRaspuns = 6 +crlf = CHR(13) + CHR(10) +STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog) + +PUBLIC gnEsecuri +gnEsecuri = 0 + +ON ERROR DO WriteTestErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() +ON SHUTDOWN QUIT + +TRY + *-- umbra: copie a oproceduri_comune.prg cu FUNCTION amessagebox redenumita, ca apelul din + *-- verifica_partener_show_info sa cada pe mock_amessagebox.prg (fara conflict de nume) si + *-- niciun dialog modal sa nu apara. VFP rezolva numele duplicate de procedura in favoarea + *-- fisierului deschis PRIMUL cu SET PROCEDURE - de-asta mock-ul si umbra se incarca aici, + *-- inaintea oricarui alt cod. + LOCAL lcSrc, lcUmbra + lcUmbra = ADDBS(SYS(2023)) + 'oproceduri_comune_umbra_mesajmeniu.prg' + lcSrc = FILETOSTR("D:\ROA\ROACONT\COMUN\programe\oproceduri_comune.prg") + lcSrc = STRTRAN(lcSrc, CHR(13) + CHR(10) + 'Function amessagebox' + CHR(13) + CHR(10), ; + CHR(13) + CHR(10) + 'Function amessagebox_umbrit_mm' + CHR(13) + CHR(10)) + STRTOFILE(lcSrc, lcUmbra) + ERASE (FORCEEXT(lcUmbra, 'fxp')) + + SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE + SET PROCEDURE TO (lcUmbra) ADDITIVE + DO WriteTestLog WITH 'mock si umbra incarcate (fara Oracle - functiile testate nu depind de el)' + + *================================================================== + * Pas 1: GetMeniuVerificareCodFiscal - cele 5 pozitii, in ordine, cu cod fiscal prezent + *================================================================== + LOCAL lcMenu, lcMenuAsteptat, lcMenuFaraCod, lcMenuFaraCodAsteptat + + lcMenu = GetMeniuVerificareCodFiscal('RO1890420') + lcMenuAsteptat = "VERIFICARE ANAF;VERIFICARE VIES;ISTORIC VERIFICARI COD FISCAL;\-;DESCHIDE FISA PE MFINANTE.RO" + IF m.lcMenu == m.lcMenuAsteptat + DO WriteTestLog WITH 'OK P1a: meniul cu cod fiscal are exact cele 5 pozitii, in ordine' + ELSE + DO WriteTestLog WITH 'FAIL P1a: meniu=[' + m.lcMenu + '] asteptat=[' + m.lcMenuAsteptat + ']' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *-- Pas 3 (partial aici): fara cod fiscal, pozitiile dezactivabile au prefixul "\"; + *-- ISTORIC (pozitia 3) ramane activa oricum. + lcMenuFaraCod = GetMeniuVerificareCodFiscal('') + lcMenuFaraCodAsteptat = "\VERIFICARE ANAF;\VERIFICARE VIES;ISTORIC VERIFICARI COD FISCAL;\-;\DESCHIDE FISA PE MFINANTE.RO" + IF m.lcMenuFaraCod == m.lcMenuFaraCodAsteptat + DO WriteTestLog WITH 'OK P1b: fara cod fiscal, ANAF/VIES/MFINANTE dezactivate (\), ISTORIC ramane activ' + ELSE + DO WriteTestLog WITH 'FAIL P1b: meniu=[' + m.lcMenuFaraCod + '] asteptat=[' + m.lcMenuFaraCodAsteptat + ']' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *================================================================== + * Pas 2: GetOptiuneVerificareCodFiscal - 1/2/3/5 mapate, 4 (separator) si restul goale + *================================================================== + LOCAL lnI, lcOptRezultat, lcOptAsteptat + DIMENSION laOptiuni(7,2) + laOptiuni(1,1) = 0 + laOptiuni(1,2) = '' + laOptiuni(2,1) = 1 + laOptiuni(2,2) = 'ANAF_SERVICIU_WEB' + laOptiuni(3,1) = 2 + laOptiuni(3,2) = 'VIES_AUTO' + laOptiuni(4,1) = 3 + laOptiuni(4,2) = 'ISTORIC' + laOptiuni(5,1) = 4 + laOptiuni(5,2) = '' + laOptiuni(6,1) = 5 + laOptiuni(6,2) = 'MFIN_MANUAL_COD' + laOptiuni(7,1) = 6 + laOptiuni(7,2) = '' + + FOR lnI = 1 TO 7 + lcOptRezultat = GetOptiuneVerificareCodFiscal(laOptiuni(m.lnI,1)) + lcOptAsteptat = laOptiuni(m.lnI,2) + IF m.lcOptRezultat == m.lcOptAsteptat + DO WriteTestLog WITH 'OK P2: GetOptiuneVerificareCodFiscal(' + TRANSFORM(laOptiuni(m.lnI,1)) + ') = [' + m.lcOptRezultat + ']' + ELSE + DO WriteTestLog WITH 'FAIL P2: GetOptiuneVerificareCodFiscal(' + TRANSFORM(laOptiuni(m.lnI,1)) + ') = [' + m.lcOptRezultat + '], asteptat [' + m.lcOptAsteptat + ']' + gnEsecuri = gnEsecuri + 1 + ENDIF + ENDFOR + + *================================================================== + * Pas 3: aritmetica optiuni_meniu_ante - formula copiata din VerificaCodFiscal:4960-4967 + *================================================================== + LOCAL lcOptiuniMeniuAnte, lcMenuCombinat, lcMenuCombinatAsteptat, lnOptiuneSimulat, lnOptiuneVerificare, lcTip + + lcOptiuniMeniuAnte = "MODIFICARE PARTENER - X;\-;" + + *-- meniul combinat trebuie sa fie exact prepandatul + submeniul de verificare neschimbat + lcMenuCombinat = GetMeniuVerificareCodFiscal('RO1890420', m.lcOptiuniMeniuAnte) + lcMenuCombinatAsteptat = m.lcOptiuniMeniuAnte + m.lcMenuAsteptat + IF m.lcMenuCombinat == m.lcMenuCombinatAsteptat + DO WriteTestLog WITH 'OK P3a: meniul combinat = prepandate (2 pozitii) + submeniul de verificare neschimbat' + ELSE + DO WriteTestLog WITH 'FAIL P3a: combinat=[' + m.lcMenuCombinat + '] asteptat=[' + m.lcMenuCombinatAsteptat + ']' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *-- pozitia 3 din meniul COMBINAT (dupa cele 2 prepandate: "MODIFICARE PARTENER - X" si "\-") + *-- e primul element din submeniul de verificare -> trebuie sa cada pe ANAF_SERVICIU_WEB + lnOptiuneSimulat = 3 + lnOptiuneVerificare = m.lnOptiuneSimulat + IF !EMPTY(m.lcOptiuniMeniuAnte) + lnOptiuneVerificare = m.lnOptiuneVerificare - OCCURS(';', m.lcOptiuniMeniuAnte) + ENDIF + lcTip = GetOptiuneVerificareCodFiscal(m.lnOptiuneVerificare) + IF m.lcTip == 'ANAF_SERVICIU_WEB' + DO WriteTestLog WITH 'OK P3b: pozitia 3 din meniul combinat (dupa cele 2 prepandate) = ANAF_SERVICIU_WEB' + ELSE + DO WriteTestLog WITH 'FAIL P3b: pozitia 3 combinata a dat [' + m.lcTip + '], asteptat ANAF_SERVICIU_WEB' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *-- pozitia 7 (ultima din meniul combinat) e ultimul element din submeniu -> MFIN_MANUAL_COD + lnOptiuneSimulat = 7 + lnOptiuneVerificare = m.lnOptiuneSimulat - OCCURS(';', m.lcOptiuniMeniuAnte) + lcTip = GetOptiuneVerificareCodFiscal(m.lnOptiuneVerificare) + IF m.lcTip == 'MFIN_MANUAL_COD' + DO WriteTestLog WITH 'OK P3c: pozitia 7 din meniul combinat = MFIN_MANUAL_COD' + ELSE + DO WriteTestLog WITH 'FAIL P3c: pozitia 7 combinata a dat [' + m.lcTip + '], asteptat MFIN_MANUAL_COD' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *================================================================== + * Pas 4: verifica_partener_show_info - structura mesajului, pe obiecte fabricate + *================================================================== + LOCAL loPart + + *-- 4a: sursa ANAF, atribut RO nepotrivit (neplatitor + cod RO) -> *** ATENTIE ***, + *-- Mesaj ANAF completat, identificare PARTIALA (telefon/fax/cod postal goale -> absente) + loPart = CREATEOBJECT("empty") + ADDPROPERTY(loPart, "firma", "FIRMA UNU SRL") + ADDPROPERTY(loPart, "sursa", "ANAF") + ADDPROPERTY(loPart, "data_sursa", {}) + ADDPROPERTY(loPart, "platitortvamfin", .F.) + ADDPROPERTY(loPart, "datatvamfin", "") + ADDPROPERTY(loPart, "PlatitorTVA", .F.) + ADDPROPERTY(loPart, "tvaincasare", .T.) + ADDPROPERTY(loPart, "splittva", .F.) + ADDPROPERTY(loPart, "inactiv", .F.) + ADDPROPERTY(loPart, "stare", "ANULAT DIN OFICIU - TEST") + ADDPROPERTY(loPart, "adresa", "STR TEST NR 1") + ADDPROPERTY(loPart, "judet", "BUCURESTI") + ADDPROPERTY(loPart, "regcom", "J40/1/2020") + ADDPROPERTY(loPart, "codpostal", "") + ADDPROPERTY(loPart, "telefon", "") + ADDPROPERTY(loPart, "fax", "") + ADDPROPERTY(loPart, "eroare", "") + + gcMockUltimMesaj = '' + verifica_partener_show_info(m.loPart, 'RO1234567', 'FIRMA UNU SRL', '') + + IF 'ANAF: FIRMA UNU SRL' $ m.gcMockUltimMesaj + DO WriteTestLog WITH 'OK P4a1: prefix sursa "ANAF: " pe linia denumirii' + ELSE + DO WriteTestLog WITH 'FAIL P4a1: prefixul ANAF lipseste din mesaj' + gnEsecuri = gnEsecuri + 1 + ENDIF + IF '*** ATENTIE ***' $ m.gcMockUltimMesaj + DO WriteTestLog WITH 'OK P4a2: *** ATENTIE *** prezent (atribut RO nepotrivit)' + ELSE + DO WriteTestLog WITH 'FAIL P4a2: *** ATENTIE *** lipseste pentru atribut RO nepotrivit' + gnEsecuri = gnEsecuri + 1 + ENDIF + IF '--- TVA ---' $ m.gcMockUltimMesaj AND '--- STARE FIRMA ---' $ m.gcMockUltimMesaj AND '--- IDENTIFICARE ---' $ m.gcMockUltimMesaj + DO WriteTestLog WITH 'OK P4a3: cele 3 titluri de sectiune sunt prezente' + ELSE + DO WriteTestLog WITH 'FAIL P4a3: lipseste cel putin un titlu de sectiune - [' + m.gcMockUltimMesaj + ']' + gnEsecuri = gnEsecuri + 1 + ENDIF + IF 'Mesaj ANAF: ANULAT DIN OFICIU - TEST' $ m.gcMockUltimMesaj + DO WriteTestLog WITH 'OK P4a4: Mesaj ANAF completat cand stare e nevida' + ELSE + DO WriteTestLog WITH 'FAIL P4a4: linia Mesaj ANAF lipseste sau e gresita' + gnEsecuri = gnEsecuri + 1 + ENDIF + IF NOT ('Cod postal:' $ m.gcMockUltimMesaj) AND NOT ('Telefon:' $ m.gcMockUltimMesaj) AND NOT ('Fax:' $ m.gcMockUltimMesaj) + DO WriteTestLog WITH 'OK P4a5: liniile pentru campurile goale (cod postal/telefon/fax) lipsesc' + ELSE + DO WriteTestLog WITH 'FAIL P4a5: cel putin un camp gol si-a pastrat linia - [' + m.gcMockUltimMesaj + ']' + gnEsecuri = gnEsecuri + 1 + ENDIF + IF 'Adresa: STR TEST NR 1' $ m.gcMockUltimMesaj AND 'Judet: BUCURESTI' $ m.gcMockUltimMesaj AND 'Reg. comertului: J40/1/2020' $ m.gcMockUltimMesaj + DO WriteTestLog WITH 'OK P4a6: campurile completate (adresa/judet/reg. comertului) apar' + ELSE + DO WriteTestLog WITH 'FAIL P4a6: lipseste cel putin un camp completat de identificare' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *-- 4b: sursa CACHE cu data, platitor+cod RO potrivite dar INACTIV -> *** ATENTIE *** pt. inactiv, + *-- fara proprietatile de perioada ANAF (ramura Else din verifica_partener_show_info), + *-- identificare COMPLETA (toate cele 6 campuri completate) + loPart = CREATEOBJECT("empty") + ADDPROPERTY(loPart, "firma", "FIRMA DOI SRL") + ADDPROPERTY(loPart, "sursa", "CACHE") + ADDPROPERTY(loPart, "data_sursa", {^2026-08-21}) + ADDPROPERTY(loPart, "platitortvamfin", .T.) + ADDPROPERTY(loPart, "datatvamfin", "01/01/2015") + ADDPROPERTY(loPart, "PlatitorTVA", .T.) + ADDPROPERTY(loPart, "tvaincasare", .F.) + ADDPROPERTY(loPart, "splittva", .F.) + ADDPROPERTY(loPart, "inactiv", .T.) + ADDPROPERTY(loPart, "stare", "") + ADDPROPERTY(loPart, "adresa", "STR DOI NR 2") + ADDPROPERTY(loPart, "judet", "CLUJ") + ADDPROPERTY(loPart, "regcom", "J12/2/2015") + ADDPROPERTY(loPart, "codpostal", "400000") + ADDPROPERTY(loPart, "telefon", "0264000000") + ADDPROPERTY(loPart, "fax", "0264000001") + ADDPROPERTY(loPart, "eroare", "") + + gcMockUltimMesaj = '' + verifica_partener_show_info(m.loPart, 'RO7654321', 'FIRMA DOI SRL', '') + + IF 'CACHE 21/08/2026: FIRMA DOI SRL' $ m.gcMockUltimMesaj + DO WriteTestLog WITH 'OK P4b1: prefix sursa "CACHE dd/mm/yyyy: " pe linia denumirii' + ELSE + DO WriteTestLog WITH 'FAIL P4b1: prefixul CACHE lipseste sau e gresit - [' + m.gcMockUltimMesaj + ']' + gnEsecuri = gnEsecuri + 1 + ENDIF + IF '*** ATENTIE ***' $ m.gcMockUltimMesaj + DO WriteTestLog WITH 'OK P4b2: *** ATENTIE *** prezent (inactiv)' + ELSE + DO WriteTestLog WITH 'FAIL P4b2: *** ATENTIE *** lipseste pentru partener inactiv' + gnEsecuri = gnEsecuri + 1 + ENDIF + IF 'Mesaj ANAF:' $ m.gcMockUltimMesaj + DO WriteTestLog WITH 'FAIL P4b3: linia Mesaj ANAF apare desi stare e goala' + gnEsecuri = gnEsecuri + 1 + ELSE + DO WriteTestLog WITH 'OK P4b3: linia Mesaj ANAF lipseste cand stare e goala' + ENDIF + IF 'Cod postal: 400000' $ m.gcMockUltimMesaj AND 'Telefon: 0264000000' $ m.gcMockUltimMesaj AND 'Fax: 0264000001' $ m.gcMockUltimMesaj + DO WriteTestLog WITH 'OK P4b4: identificare completa (cod postal/telefon/fax completate) apare integral' + ELSE + DO WriteTestLog WITH 'FAIL P4b4: lipseste cel putin un camp de identificare completat' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *-- 4c: sursa CACHE_INDISP, fara atentie, IDENTIFICARE complet goala -> sectiunea lipseste + loPart = CREATEOBJECT("empty") + ADDPROPERTY(loPart, "firma", "FIRMA TREI SRL") + ADDPROPERTY(loPart, "sursa", "CACHE_INDISP") + ADDPROPERTY(loPart, "data_sursa", {^2026-08-20}) + ADDPROPERTY(loPart, "platitortvamfin", .T.) + ADDPROPERTY(loPart, "datatvamfin", "01/01/2015") + ADDPROPERTY(loPart, "PlatitorTVA", .T.) + ADDPROPERTY(loPart, "tvaincasare", .F.) + ADDPROPERTY(loPart, "splittva", .F.) + ADDPROPERTY(loPart, "inactiv", .F.) + ADDPROPERTY(loPart, "stare", "") + ADDPROPERTY(loPart, "adresa", "") + ADDPROPERTY(loPart, "judet", "") + ADDPROPERTY(loPart, "regcom", "") + ADDPROPERTY(loPart, "codpostal", "") + ADDPROPERTY(loPart, "telefon", "") + ADDPROPERTY(loPart, "fax", "") + ADDPROPERTY(loPart, "eroare", "") + + gcMockUltimMesaj = '' + verifica_partener_show_info(m.loPart, 'RO1112223', 'FIRMA TREI SRL', '') + + IF 'CACHE 20/08/2026 (ANAF indisponibil): FIRMA TREI SRL' $ m.gcMockUltimMesaj + DO WriteTestLog WITH 'OK P4c1: prefix "CACHE dd/mm/yyyy (ANAF indisponibil): " pe linia denumirii' + ELSE + DO WriteTestLog WITH 'FAIL P4c1: prefixul CACHE_INDISP lipseste sau e gresit - [' + m.gcMockUltimMesaj + ']' + gnEsecuri = gnEsecuri + 1 + ENDIF + IF '*** ATENTIE ***' $ m.gcMockUltimMesaj + DO WriteTestLog WITH 'FAIL P4c2: *** ATENTIE *** apare desi codul si starea sunt consistente' + gnEsecuri = gnEsecuri + 1 + ELSE + DO WriteTestLog WITH 'OK P4c2: *** ATENTIE *** absent cand nu e cazul' + ENDIF + IF '--- IDENTIFICARE ---' $ m.gcMockUltimMesaj + DO WriteTestLog WITH 'FAIL P4c3: sectiunea IDENTIFICARE apare desi toate campurile ei sunt goale' + gnEsecuri = gnEsecuri + 1 + ELSE + DO WriteTestLog WITH 'OK P4c3: sectiunea IDENTIFICARE lipseste cand toate campurile ei sunt goale' + ENDIF + IF '--- TVA ---' $ m.gcMockUltimMesaj AND '--- STARE FIRMA ---' $ m.gcMockUltimMesaj + DO WriteTestLog WITH 'OK P4c4: sectiunile TVA/STARE FIRMA raman prezente' + ELSE + DO WriteTestLog WITH 'FAIL P4c4: lipseste sectiunea TVA sau STARE FIRMA' + gnEsecuri = gnEsecuri + 1 + ENDIF + + *-- 4d: fara proprietatea sursa (stil mfinante.ro) -> fara prefix pe linia denumirii + loPart = CREATEOBJECT("empty") + ADDPROPERTY(loPart, "firma", "FIRMA PATRU SRL") + ADDPROPERTY(loPart, "platitortvamfin", .T.) + ADDPROPERTY(loPart, "datatvamfin", "01/01/2015") + ADDPROPERTY(loPart, "PlatitorTVA", .T.) + ADDPROPERTY(loPart, "tvaincasare", .F.) + ADDPROPERTY(loPart, "splittva", .F.) + ADDPROPERTY(loPart, "inactiv", .F.) + ADDPROPERTY(loPart, "stare", "") + ADDPROPERTY(loPart, "adresa", "") + ADDPROPERTY(loPart, "judet", "") + ADDPROPERTY(loPart, "regcom", "") + ADDPROPERTY(loPart, "codpostal", "") + ADDPROPERTY(loPart, "telefon", "") + ADDPROPERTY(loPart, "fax", "") + ADDPROPERTY(loPart, "eroare", "") + + gcMockUltimMesaj = '' + verifica_partener_show_info(m.loPart, 'RO4445556', 'FIRMA PATRU SRL', '') + + IF 'FIRMA PATRU SRL' $ m.gcMockUltimMesaj AND NOT ('ANAF:' $ m.gcMockUltimMesaj) AND NOT ('CACHE' $ m.gcMockUltimMesaj) + DO WriteTestLog WITH 'OK P4d: fara proprietatea sursa, linia denumirii nu are niciun prefix' + ELSE + DO WriteTestLog WITH 'FAIL P4d: mesajul are un prefix desi obiectul nu are proprietatea sursa' + gnEsecuri = gnEsecuri + 1 + ENDIF + + DO WriteTestLog WITH IIF(gnEsecuri = 0, 'TOTAL OK', 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)') +CATCH TO loEx + DO WriteTestLog WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure + DO WriteTestLog WITH 'TOTAL FAIL: exceptie neasteptata' +ENDTRY + +QUIT + +********************************************************** +PROCEDURE WriteTestLog + LPARAMETERS tcMsg + LOCAL lcL + SET SAFETY OFF + lcL = IIF(FILE(gcLog), FILETOSTR(gcLog), '') + STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcLog) +ENDPROC + +********************************************************** +PROCEDURE WriteTestErr + LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo + DO WriteTestLog WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo) +ENDPROC