TODO 21: perioade TVA la verificarea codurilor fiscale + diacritice ANAF

- validare.prg: cele 7 campuri de perioada (inregistrare TVA, TVA la incasare,
  inactivare/reactivare) duse din raspunsul ANAF pana in cVerificareCod
- validare.prg: AnafDecodeResponseText - raspunsul HTTP se citeste din responseBody
  prin ADODB.Stream cu Charset utf-8, cu cadere inapoi pe comportamentul vechi;
  repara diacriticele pierdute la marshalling-ul COM al lui responseText
- oproceduri_comune.prg: perioadele in mesajul de detalii; fix id_part N(16), data D
  in crsXMLParteneriVerificare (Insert Into esua tacit, lista ramanea goala)
- overificari.vc2: 7 coloane noi in grid, dublu-click pe Denumire/Cod fiscal deschide
  fisa partenerului, captionuri corectate in "inregistrare TVA"
- oparteneri / ofacturare_comun / onomenclatoare: id_part in SELECT-urile care
  alimenteaza verificarea
- teste headless noi: utile/Teste/test_todo21_perioade_anaf.prg, utile/Teste/todo21/

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GztNyTRxjHqBg5kyNMmcy1
This commit is contained in:
2026-08-22 18:26:17 +03:00
parent 02f4c9ec94
commit 2b695b3656
11 changed files with 1011 additions and 45 deletions

View File

@@ -4897,7 +4897,7 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
lcFilter = Filter("crsFacturi")
lcWhere = Iif(!Empty(m.lcFilter), m.lcFilter, ".T.")
IF m.lnOptiune = 1
Select distinct cod_fiscal, data_act as data, client as denumire, adresa_facturare as adresa_roa, IIF(LEFT(UPPER(cod_fiscal), 2) = "RO", "RO", " ") AS ATRIBUT_FISCAL, .T. AS IsCIF, .F. AS codvalid ;
Select distinct id_part, cod_fiscal, data_act as data, client as denumire, adresa_facturare as adresa_roa, IIF(LEFT(UPPER(cod_fiscal), 2) = "RO", "RO", " ") AS ATRIBUT_FISCAL, .T. AS IsCIF, .F. AS codvalid ;
From crsFacturi ;
Where &lcWhere ;
Into Cursor crsCoduriFiscale ;
@@ -4909,7 +4909,7 @@ DEFINE CLASS frm_facturi AS _frmbase OF "_frm_base.vcx"
ldData = GOMONTH(m.ldData,1) - 1
ENDIF
Select distinct cod_fiscal, m.ldData as data, client as denumire, adresa_facturare as adresa_roa, IIF(LEFT(UPPER(cod_fiscal), 2) = "RO", "RO", " ") AS ATRIBUT_FISCAL, .T. AS IsCIF, .F. AS codvalid ;
Select distinct id_part, cod_fiscal, m.ldData as data, client as denumire, adresa_facturare as adresa_roa, IIF(LEFT(UPPER(cod_fiscal), 2) = "RO", "RO", " ") AS ATRIBUT_FISCAL, .T. AS IsCIF, .F. AS codvalid ;
From crsFacturi ;
Where &lcWhere ;
Into Cursor crsCoduriFiscale ;

View File

@@ -11806,7 +11806,7 @@ DEFINE CLASS frm_partener AS _frmbase OF "_frm_base.vcx"
lcFilter = FILTER("crsparteneri")
lcWhere = IIF(x = 1, "recno() = " + ALLTRIM(STR(RECNO())), IIF(!EMPTY(m.lcFilter), m.lcFilter, ".T."))
Select Distinct COD_FISCAL, denumire, IIF(LEFT(UPPER(COD_FISCAL), 2) = "RO", "RO", " ") AS ATRIBUT_FISCAL, .T. As IsCIF, .F. As codvalid ;
Select Distinct id_part, COD_FISCAL, denumire, IIF(LEFT(UPPER(COD_FISCAL), 2) = "RO", "RO", " ") AS ATRIBUT_FISCAL, .T. As IsCIF, .F. As codvalid ;
FROM crsparteneri ;
WHERE &lcWhere ;
INTO Cursor crsCoduriFiscale ;

View File

@@ -3991,7 +3991,7 @@ DEFINE CLASS frm_bal_parteneri AS _frmbase OF "_frm_base.vcx"
lcFilter = Filter("xtemp")
lcWhere = Iif(m.lnOptiune = 1, "recno() = " + Alltrim(Str(Recno())), Iif(!Empty(m.lcFilter), m.lcFilter, ".T."))
Select Distinct cod_fiscal, nume As denumire, Iif(Left(Upper(cod_fiscal), 2) = "RO", "RO", " ") As ATRIBUT_FISCAL, .T. As IsCIF, .F. As codvalid ;
Select Distinct id_part, cod_fiscal, nume As denumire, Iif(Left(Upper(cod_fiscal), 2) = "RO", "RO", " ") As ATRIBUT_FISCAL, .T. As IsCIF, .F. As codvalid ;
From xtemp;
Where &lcWhere ;
Into Cursor crsCoduriFiscale ;
@@ -10704,7 +10704,7 @@ DEFINE CLASS frm_ireg_parteneri AS _frmbase OF "_frm_base.vcx"
lcFilter = Filter("actcv")
lcWhere = Iif(m.lnOptiune = 1, "recno() = " + Alltrim(Str(Recno())), Iif(!Empty(m.lcFilter), m.lcFilter, ".T."))
Select Distinct cod_fiscal, nume as denumire, Iif(Left(Upper(cod_fiscal), 2) = "RO", "RO", " ") As ATRIBUT_FISCAL, .T. As IsCIF, .F. As codvalid ;
Select Distinct id_part, cod_fiscal, nume as denumire, Iif(Left(Upper(cod_fiscal), 2) = "RO", "RO", " ") As ATRIBUT_FISCAL, .T. As IsCIF, .F. As codvalid ;
From actcv ;
Where &lcWhere ;
Into Cursor crsCoduriFiscale ;

View File

@@ -1598,6 +1598,20 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
*< OBJECTDATA: ObjPath="_grdbase1.Column26.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="_grdbase1.Column27.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="_grdbase1.Column27.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="_grdbase1.cDataInceputScpTva.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="_grdbase1.cDataInceputScpTva.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="_grdbase1.cDataSfarsitScpTva.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="_grdbase1.cDataSfarsitScpTva.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="_grdbase1.cDataAnulImpScpTva.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="_grdbase1.cDataAnulImpScpTva.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="_grdbase1.cDataInceputTvaInc.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="_grdbase1.cDataInceputTvaInc.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="_grdbase1.cDataSfarsitTvaInc.Header1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="_grdbase1.cDataSfarsitTvaInc.Text1" UniqueID="" Timestamp="" />
*< OBJECTDATA: ObjPath="_grdbase1.cDataInactivare.Header1" UniqueID="" Timestamp="" />
*< 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="" />
@@ -1620,6 +1634,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
*<DefinedPropArrayMethod>
*m: filtreatentionari
*m: meniu_dblclick
*m: meniu_dblclick_partener
*p: lautoverificare && Daca se porneste verificarea automat din metoda Show, cand este apelata verificarea din Reg. TVA
*p: lmfin
*p: lvies
@@ -1660,7 +1675,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
ADD OBJECT '_grdbase1' AS _grdbase WITH ;
Anchor = 15, ;
ColumnCount = 27, ;
ColumnCount = 34, ;
DeleteMark = .F., ;
HeaderHeight = 32, ;
Height = 283, ;
@@ -1683,14 +1698,14 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
Column2.ControlSource = "crsverificareparteneri.denumire", ;
Column2.Name = "Column2", ;
Column2.ReadOnly = .T., ;
Column2.ToolTipText = "Dublu click pentru verificare manuala pe www.mfinante.ro", ;
Column2.ToolTipText = "Dublu click pentru modificarea partenerului", ;
Column2.Visible = .T., ;
Column2.Width = 221, ;
Column3.ColumnOrder = 5, ;
Column3.ControlSource = "crsverificareparteneri.cod_fiscal", ;
Column3.Name = "Column3", ;
Column3.ReadOnly = .T., ;
Column3.ToolTipText = "Dublu click pentru verificare manuala pe www.mfinante.ro", ;
Column3.ToolTipText = "Dublu click pentru modificarea partenerului", ;
Column3.Visible = .T., ;
Column3.Width = 75, ;
Column4.ColumnOrder = 6, ;
@@ -1701,57 +1716,57 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
Column4.Sparse = .F., ;
Column4.Visible = .T., ;
Column4.Width = 41, ;
Column5.ColumnOrder = 10, ;
Column5.ColumnOrder = 13, ;
Column5.ControlSource = "crsverificareparteneri.firma", ;
Column5.Name = "Column5", ;
Column5.ReadOnly = .T., ;
Column5.Visible = .T., ;
Column5.Width = 305, ;
Column6.ColumnOrder = 14, ;
Column6.ColumnOrder = 21, ;
Column6.ControlSource = "crsverificareparteneri.cod", ;
Column6.Name = "Column6", ;
Column6.ReadOnly = .T., ;
Column6.Visible = .T., ;
Column6.Width = 75, ;
Column7.BackColor = 185,220,255, ;
Column7.ColumnOrder = 16, ;
Column7.ColumnOrder = 23, ;
Column7.ControlSource = "crsverificareparteneri.adresa", ;
Column7.DynamicBackColor = "RGB(185,220,255)", ;
Column7.Name = "Column7", ;
Column7.ReadOnly = .T., ;
Column7.Visible = .T., ;
Column7.Width = 150, ;
Column8.ColumnOrder = 17, ;
Column8.ColumnOrder = 24, ;
Column8.ControlSource = "crsverificareparteneri.judet", ;
Column8.Name = "Column8", ;
Column8.ReadOnly = .T., ;
Column8.Visible = .T., ;
Column8.Width = 89, ;
Column9.ColumnOrder = 18, ;
Column9.ColumnOrder = 25, ;
Column9.ControlSource = "crsverificareparteneri.regcom", ;
Column9.Name = "Column9", ;
Column9.ReadOnly = .T., ;
Column9.Visible = .T., ;
Column9.Width = 75, ;
Column10.ColumnOrder = 19, ;
Column10.ColumnOrder = 26, ;
Column10.ControlSource = "crsverificareparteneri.codpostal", ;
Column10.Name = "Column10", ;
Column10.ReadOnly = .T., ;
Column10.Visible = .T., ;
Column10.Width = 75, ;
Column11.ColumnOrder = 20, ;
Column11.ColumnOrder = 27, ;
Column11.ControlSource = "crsverificareparteneri.telefon", ;
Column11.Name = "Column11", ;
Column11.ReadOnly = .T., ;
Column11.Visible = .T., ;
Column11.Width = 75, ;
Column12.ColumnOrder = 21, ;
Column12.ColumnOrder = 28, ;
Column12.ControlSource = "crsverificareparteneri.fax", ;
Column12.Name = "Column12", ;
Column12.ReadOnly = .T., ;
Column12.Visible = .T., ;
Column12.Width = 75, ;
Column13.ColumnOrder = 22, ;
Column13.ColumnOrder = 29, ;
Column13.ControlSource = "crsverificareparteneri.vies", ;
Column13.CurrentControl = "_checkbox1", ;
Column13.Name = "Column13", ;
@@ -1759,7 +1774,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
Column13.Sparse = .F., ;
Column13.Visible = .T., ;
Column13.Width = 75, ;
Column14.ColumnOrder = 23, ;
Column14.ColumnOrder = 30, ;
Column14.ControlSource = "crsverificareparteneri.platitortva", ;
Column14.CurrentControl = "_checkbox1", ;
Column14.Name = "Column14", ;
@@ -1767,7 +1782,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
Column14.Sparse = .F., ;
Column14.Visible = .T., ;
Column14.Width = 75, ;
Column15.ColumnOrder = 24, ;
Column15.ColumnOrder = 31, ;
Column15.ControlSource = "crsverificareparteneri.eroare", ;
Column15.Name = "Column15", ;
Column15.ReadOnly = .T., ;
@@ -1784,7 +1799,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
Column17.ReadOnly = .T., ;
Column17.Sparse = .F., ;
Column17.Width = 71, ;
Column18.ColumnOrder = 25, ;
Column18.ColumnOrder = 32, ;
Column18.ControlSource = "crsverificareparteneri.duplicat", ;
Column18.CurrentControl = "_checkbox1", ;
Column18.Name = "Column18", ;
@@ -1796,7 +1811,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
Column19.Name = "Column19", ;
Column19.ReadOnly = .T., ;
Column19.Width = 41, ;
Column20.ColumnOrder = 9, ;
Column20.ColumnOrder = 12, ;
Column20.ControlSource = "stare", ;
Column20.Name = "Column20", ;
Column20.ReadOnly = .T., ;
@@ -1806,25 +1821,25 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
Column21.Name = "Column21", ;
Column21.ReadOnly = .T., ;
Column21.Width = 78, ;
Column22.ColumnOrder = 26, ;
Column22.ColumnOrder = 33, ;
Column22.ControlSource = "crsverificareparteneri.id_part", ;
Column22.Name = "Column23", ;
Column22.ReadOnly = .T., ;
Column23.ColumnOrder = 11, ;
Column23.ColumnOrder = 14, ;
Column23.ControlSource = "crsverificareparteneri.tvaincasare", ;
Column23.CurrentControl = "Check1", ;
Column23.Name = "cTVAincasare", ;
Column23.ReadOnly = .T., ;
Column23.Sparse = .F., ;
Column23.Width = 59, ;
Column24.ColumnOrder = 12, ;
Column24.ColumnOrder = 17, ;
Column24.ControlSource = "crsverificareparteneri.splittva", ;
Column24.CurrentControl = "Check1", ;
Column24.Name = "cSplitTVA", ;
Column24.ReadOnly = .T., ;
Column24.Sparse = .F., ;
Column24.Width = 59, ;
Column25.ColumnOrder = 13, ;
Column25.ColumnOrder = 18, ;
Column25.ControlSource = "crsverificareparteneri.inactiv", ;
Column25.CurrentControl = "Check1", ;
Column25.Name = "cInactiv", ;
@@ -1832,20 +1847,174 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
Column25.Sparse = .F., ;
Column25.Width = 51, ;
Column26.BackColor = 255,202,228, ;
Column26.ColumnOrder = 15, ;
Column26.ColumnOrder = 22, ;
Column26.ControlSource = "crsverificareparteneri.adresa_roa", ;
Column26.DynamicBackColor = "RGB(255,202,228)", ;
Column26.Name = "Column26", ;
Column26.ReadOnly = .T., ;
Column26.Width = 150, ;
Column27.ColumnOrder = 27, ;
Column27.ColumnOrder = 34, ;
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.Name = "Column27", ;
Column27.ReadOnly = .T., ;
Column27.Visible = .T., ;
Column27.Width = 230
Column27.Width = 230, ;
Column28.ColumnOrder = 9, ;
Column28.ControlSource = "crsverificareparteneri.data_inceput_scptva", ;
Column28.Name = "cDataInceputScpTva", ;
Column28.ReadOnly = .T., ;
Column28.Visible = .T., ;
Column28.Width = 85, ;
Column29.ColumnOrder = 10, ;
Column29.ControlSource = "crsverificareparteneri.data_sfarsit_scptva", ;
Column29.Name = "cDataSfarsitScpTva", ;
Column29.ReadOnly = .T., ;
Column29.Visible = .T., ;
Column29.Width = 85, ;
Column30.ColumnOrder = 11, ;
Column30.ControlSource = "crsverificareparteneri.data_anul_imp_scptva", ;
Column30.Name = "cDataAnulImpScpTva", ;
Column30.ReadOnly = .T., ;
Column30.Visible = .T., ;
Column30.Width = 85, ;
Column31.ColumnOrder = 15, ;
Column31.ControlSource = "crsverificareparteneri.data_inceput_tvainc", ;
Column31.Name = "cDataInceputTvaInc", ;
Column31.ReadOnly = .T., ;
Column31.Visible = .T., ;
Column31.Width = 85, ;
Column32.ColumnOrder = 16, ;
Column32.ControlSource = "crsverificareparteneri.data_sfarsit_tvainc", ;
Column32.Name = "cDataSfarsitTvaInc", ;
Column32.ReadOnly = .T., ;
Column32.Visible = .T., ;
Column32.Width = 85, ;
Column33.ColumnOrder = 19, ;
Column33.ControlSource = "crsverificareparteneri.data_inactivare", ;
Column33.Name = "cDataInactivare", ;
Column33.ReadOnly = .T., ;
Column33.Visible = .T., ;
Column33.Width = 85, ;
Column34.ColumnOrder = 20, ;
Column34.ControlSource = "crsverificareparteneri.data_reactivare", ;
Column34.Name = "cDataReactivare", ;
Column34.ReadOnly = .T., ;
Column34.Visible = .T., ;
Column34.Width = 85
*< END OBJECT: ClassLib="_grd_base.vcx" BaseClass="grid" />
ADD OBJECT '_grdbase1.cDataAnulImpScpTva.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Anulare inregistrare TVA", ;
Name = "Header1", ;
WordWrap = .T.
*< END OBJECT: BaseClass="header" />
ADD OBJECT '_grdbase1.cDataAnulImpScpTva.Text1' AS textbox WITH ;
BackColor = 255,255,255, ;
BorderStyle = 0, ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
ReadOnly = .T.
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT '_grdbase1.cDataInactivare.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Data inactivare", ;
Name = "Header1", ;
WordWrap = .T.
*< END OBJECT: BaseClass="header" />
ADD OBJECT '_grdbase1.cDataInactivare.Text1' AS textbox WITH ;
BackColor = 255,255,255, ;
BorderStyle = 0, ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
ReadOnly = .T.
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT '_grdbase1.cDataInceputScpTva.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Inceput inregistrare TVA", ;
Name = "Header1", ;
WordWrap = .T.
*< END OBJECT: BaseClass="header" />
ADD OBJECT '_grdbase1.cDataInceputScpTva.Text1' AS textbox WITH ;
BackColor = 255,255,255, ;
BorderStyle = 0, ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
ReadOnly = .T.
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT '_grdbase1.cDataInceputTvaInc.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Inceput TVA incasare", ;
Name = "Header1", ;
WordWrap = .T.
*< END OBJECT: BaseClass="header" />
ADD OBJECT '_grdbase1.cDataInceputTvaInc.Text1' AS textbox WITH ;
BackColor = 255,255,255, ;
BorderStyle = 0, ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
ReadOnly = .T.
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT '_grdbase1.cDataReactivare.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Data reactivare", ;
Name = "Header1", ;
WordWrap = .T.
*< END OBJECT: BaseClass="header" />
ADD OBJECT '_grdbase1.cDataReactivare.Text1' AS textbox WITH ;
BackColor = 255,255,255, ;
BorderStyle = 0, ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
ReadOnly = .T.
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT '_grdbase1.cDataSfarsitScpTva.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Sfarsit inregistrare TVA", ;
Name = "Header1", ;
WordWrap = .T.
*< END OBJECT: BaseClass="header" />
ADD OBJECT '_grdbase1.cDataSfarsitScpTva.Text1' AS textbox WITH ;
BackColor = 255,255,255, ;
BorderStyle = 0, ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
ReadOnly = .T.
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT '_grdbase1.cDataSfarsitTvaInc.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Sfarsit TVA incasare", ;
Name = "Header1", ;
WordWrap = .T.
*< END OBJECT: BaseClass="header" />
ADD OBJECT '_grdbase1.cDataSfarsitTvaInc.Text1' AS textbox WITH ;
BackColor = 255,255,255, ;
BorderStyle = 0, ;
ForeColor = 0,0,0, ;
Margin = 0, ;
Name = "Text1", ;
ReadOnly = .T.
*< END OBJECT: BaseClass="textbox" />
ADD OBJECT '_grdbase1.cInactiv.Check1' AS checkbox WITH ;
Alignment = 2, ;
Caption = "", ;
@@ -2566,7 +2735,7 @@ 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 pentru verificare manuala / istoric verificari", ;
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, ;
Left = 12, ;
@@ -2761,7 +2930,10 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
IF llGasit
Replace firma With .denumire, adresa With .adresa, datatvamfin With TRANSFORM(.data), platitortvamfin With .tva, stare With .mesaj, cod WITH ALLTRIM(STR(.cui)), ;
tvaincasare WITH .tvaincasare, splittva WITH .splittva, inactiv WITH .inactiv, ;
sursa WITH NVL(.sursa, 'ANAF'), data_sursa WITH .data_sursa
sursa WITH NVL(.sursa, 'ANAF'), data_sursa WITH .data_sursa, ;
data_inceput_scptva WITH .data_inceput_ScpTVA, data_sfarsit_scptva WITH .data_sfarsit_ScpTVA, data_anul_imp_scptva WITH .data_anul_imp_ScpTVA, ;
data_inceput_tvainc WITH .dataInceputTvaInc, data_sfarsit_tvainc WITH .dataSfarsitTvaInc, ;
data_inactivare WITH .dataInactivare, data_reactivare WITH .dataReactivare
ENDIF
ENDWITH
ENDSCAN && (m.lcCursorVerificareANAF)
@@ -2933,7 +3105,10 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
LOCAL lcAliasTmp
IF TYPE('crsVerificareParteneri.sursa') = 'U'
lcAliasTmp = 'crsVPTmp' + Sys(2015)
SELECT *, SPACE(20) AS sursa, {} AS data_sursa FROM crsVerificareParteneri INTO CURSOR (lcAliasTmp) READWRITE
SELECT *, SPACE(20) AS sursa, {} AS data_sursa, ;
{} AS data_inceput_scptva, {} AS data_sfarsit_scptva, {} AS data_anul_imp_scptva, ;
{} AS data_inceput_tvainc, {} AS data_sfarsit_tvainc, {} AS data_inactivare, {} AS data_reactivare ;
FROM crsVerificareParteneri INTO CURSOR (lcAliasTmp) READWRITE
USE IN (SELECT('crsVerificareParteneri'))
SELECT * FROM (lcAliasTmp) INTO CURSOR crsVerificareParteneri READWRITE
USE IN (SELECT(lcAliasTmp))
@@ -2958,6 +3133,22 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
lnRaspuns = VerificaCodFiscal(loDate, @lnOptiune, @loPartener)
ENDPROC
PROCEDURE meniu_dblclick_partener
*** Modificarea partenerului de pe inregistrarea curenta (id_part vine din lista trimisa la verificare)
Local lcAlias, lnIdPart, loRec
lcAlias = This._grdbase1.RecordSource
Select (m.lcAlias)
lnIdPart = Iif(Type(m.lcAlias + '.id_part') = 'N', Nvl(Evaluate(m.lcAlias + '.id_part'), 0), 0)
If Empty(m.lnIdPart)
AMESSAGEBOX('Partenerul nu poate fi identificat in nomenclator!', 0 + 48, _Screen.Caption)
Return
Endif
loRec = nom_parteneri_modifica(m.lnIdPart) && in onomenclatoare.prg
ENDPROC
PROCEDURE chkDuplicat.Click
Thisform.FiltreAtentionari()
ENDPROC
@@ -3002,7 +3193,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
ENDPROC
PROCEDURE _grdbase1.Column2.Text1.DblClick
Thisform.meniu_dblclick()
Thisform.meniu_dblclick_partener()
ENDPROC
@@ -3011,7 +3202,7 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
ENDPROC
PROCEDURE _grdbase1.Column3.Text1.DblClick
Thisform.meniu_dblclick()
Thisform.meniu_dblclick_partener()
ENDPROC
PROCEDURE _grdbase1.Column5.Text1.DblClick
@@ -3338,7 +3529,7 @@ DEFINE CLASS frm_verificare_parteneri_istoric AS _frmbase OF "_frm_base.vcx"
ADD OBJECT '_grdbase1.cDataAnulImpScpTva.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Anulare scutire TVA", ;
Caption = "Anulare inregistrare TVA", ;
Name = "Header1", ;
WordWrap = .T.
*< END OBJECT: BaseClass="header" />
@@ -3370,7 +3561,7 @@ DEFINE CLASS frm_verificare_parteneri_istoric AS _frmbase OF "_frm_base.vcx"
ADD OBJECT '_grdbase1.cDataInceputScpTva.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Inceput scutire TVA", ;
Caption = "Inceput inregistrare TVA", ;
Name = "Header1", ;
WordWrap = .T.
*< END OBJECT: BaseClass="header" />
@@ -3461,7 +3652,7 @@ DEFINE CLASS frm_verificare_parteneri_istoric AS _frmbase OF "_frm_base.vcx"
ADD OBJECT '_grdbase1.cDataSfarsitScpTva.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Sfarsit scutire TVA", ;
Caption = "Sfarsit inregistrare TVA", ;
Name = "Header1", ;
WordWrap = .T.
*< END OBJECT: BaseClass="header" />

View File

@@ -52,4 +52,6 @@ INTERESUL MEU ESTE SA SIMPLIFIC INTERFATA, SA FIE MAI EFICIENTA, SA NU FIE 2 FOR
20. ROAFACTURARE - FACTURA DIN COMANDA, COMANDA SE CONSIDERA FACTURATA DACA EXISTA FACTURI CU ACELEASI CANTITATI. AS VREA SA PUN MARKER DE FACTURAT PE COMANDA, CA SA NU MAI CAUT FACTURI - ESTE COSTISITOR. DOAR CA TREBUIE SA FII ATENT CA O COMANDA SE POATE FACTURA TOTAL/PARTIAL, SAU DIN MAI MULTE FACTURI, SAU SE POATE INCHIDE FORTAT. ACUM INCHIDEREA FORTATA ADAUGA CANTITATI NEGATIVE PE COMANDA, CA SA FACA CANTITATILE NEFACTURATE ZERO.
21. ROACONT - in formularul de verificare coduri fiscale, ar trebui sa fie si perioadele de tva, tva incasare, inactivitate, la fel ca in istoric, pentru ca utilizatorul sa nu mai caute altundeva. de asemenea, in messagebox pentru verificarea automata pe ANAF individuala ar trebui sa fie toate aceste informatii. sa se poata edita partenerul din formularul de verificare coduri fiscale prin dublu-click pe numele/codul fiscal al partenerului, similar cu formularul saft.
21. ROACONT - in formularul de verificare coduri fiscale, ar trebui sa fie si perioadele de tva, tva incasare, inactivitate, la fel ca in istoric, pentru ca utilizatorul sa nu mai caute altundeva. de asemenea, in messagebox pentru verificarea automata pe ANAF individuala ar trebui sa fie toate aceste informatii. sa se poata edita partenerul din formularul de verificare coduri fiscale prin dublu-click pe numele/codul fiscal al partenerului, similar cu formularul saft.
22. ROADEF - la datele firmei, dupa completarea codului fiscal sa existe buton de preluare date de pe ANAF, similar cu cel din ROACONT partener nou. vezi ca trebuie completate localitatea si judetul cu id-uri. am inceput sa lucrez ceva - poate trebuie doar continuat si corectat - am ramas la judet si localitate.

View File

@@ -4541,7 +4541,8 @@ Procedure verificare_parteneri
If Left(Lower(tcXMLParteneri), 5) = "<?xml"
Xmltocursor(tcXMLParteneri, 'crsXMLParteneriVerificare') && denumire, cod_fiscal, [atribut_fiscal], [ales], [data]
Else
Create Cursor crsXMLParteneriVerificare (cod_fiscal C(30), denumire C(100), atribut_fiscal C(2), ales L, dataact D)
*!* 22.08.2026 marius.mutu: id_part si data lipseau din cursor, iar Insert Into de mai jos esua tacut (ON ERROR) - lista ramanea goala
Create Cursor crsXMLParteneriVerificare (cod_fiscal C(30), denumire C(100), atribut_fiscal C(2), ales L, id_part N(16), data D)
lnNrParteneri = Getwordcount(tcXMLParteneri, "|")
For lnPartener = 1 To lnNrParteneri
lcItem = Getwordnum(tcXMLParteneri, m.lnPartener, "|")
@@ -4771,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
Local lnRaspuns, loPartener, lcProvenienta, lcPerioade
lcCodFiscal = Transform(m.tcCodFiscal)
lcDenumire = Transform(m.tcDenumire)
@@ -4790,6 +4791,24 @@ Function verifica_partener_show_info
'(sursa: 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 = ''
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) + ' - ' + ;
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
If !Empty(Nvl(loPartener.data_inceput_tvainc, {}))
lcPerioade = m.lcPerioade + '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
If !Empty(Nvl(loPartener.data_inactivare, {}))
lcPerioade = m.lcPerioade + 'Inactivare: ' + Dtoc(loPartener.data_inactivare) + ;
Iif(Empty(Nvl(loPartener.data_reactivare, {})), '', ' Reactivare: ' + Dtoc(loPartener.data_reactivare)) + crlf
Endif
Endif
lcText = 'VERIFICARE CIF: ' + m.lcCodFiscal + ' ' + m.lcDenumire + crlf + crlf + ;
Alltrim(loPartener.firma) + crlf + ;
Iif(!Empty(m.lcProvenienta), m.lcProvenienta + crlf, '') + ;
@@ -4799,7 +4818,8 @@ Function verifica_partener_show_info
'TVA Incasare: ' + Iif(m.llTvaIncasare, 'DA', 'NU') + crlf + ;
'Split TVA: ' + Iif(m.llSplitTVA, 'DA', 'NU') + crlf + ;
'Inactiv: ' + Iif(m.llInactiv, 'DA *** ATENTIE!', 'NU') + crlf + ;
'----------------------------------------------------' + crlf + ;
m.lcPerioade + ;
'----------------------------------------------------' + crlf + ;
'* Adresa: ' + Alltrim(loPartener.adresa) + crlf + ;
'* Judet: ' + loPartener.judet + crlf + ;
'* Nr. inregistrare la Registrul Comertului: ' + loPartener.regcom + crlf + ;

View File

@@ -635,6 +635,7 @@ Define Class VerificareCod As Custom
Local lcMfinanteURL, lcMfinanteParams, lcRomfastURL, llMFINURL, loMFIN, loVIES, lcProcedura, llInterogareAnaf
Local lStare, lcApart, lcBloc, lcDataTVAMFIN, lcEtaj, lcLocalitate, lcNr, lcScara, lcStrada
Local llPlatitorTVAMFIN, lnSucces, llTVAIncasare, llSplitTVA, llInactiv, ldData, lcSqlIstoric, lcSursa, ldDataSursa
Local ldInceputScpTva, ldSfarsitScpTva, ldAnulImpScpTva, ldInceputTvaInc, ldSfarsitTvaInc, ldInactivare, ldReactivare
Local lcTipInterogare, llInterogareVies, llInterogareMfin
If Empty(tcTipInterogare) Or Type('tcTipInterogare') <> 'C'
@@ -691,11 +692,13 @@ Define Class VerificareCod As Custom
llInactiv = .F.
lcSursa = ''
ldDataSursa = {}
Store {} To ldInceputScpTva, ldSfarsitScpTva, ldAnulImpScpTva, ldInceputTvaInc, ldSfarsitTvaInc, ldInactivare, ldReactivare
Create Cursor cVerificareCod (Valid L, eroare c(250), cod V(100) Null, firma V(100), adresa V(250), judet V(100), ;
regcom V(30), codpostal V(20), telefon V(30), fax V(30), datatvamfin V(30), platitortvamfin L, VIES L, PlatitorTVA L, ;
stare V(100), strada V(100), nr V(25), localitate V(100), Bloc V(30), Scara V(10), Etaj V(10), Apart V(20), ;
tvaincasare L, splittva L, inactiv L, sursa C(20), data_sursa D)
tvaincasare L, splittva L, inactiv L, sursa C(20), data_sursa D, ;
data_inceput_scptva D, data_sfarsit_scptva D, data_anul_imp_scptva D, data_inceput_tvainc D, data_sfarsit_tvainc D, data_inactivare D, data_reactivare D)
Cursortoxml("cVerificareCod", "lcXML", 1, 0, 0, "1")
Select cVerificareCod
@@ -738,6 +741,14 @@ Define Class VerificareCod As Custom
llInactiv = loMFIN.Inactiv
lcSursa = Nvl(loMFIN.sursa, 'ANAF')
ldDataSursa = Nvl(loMFIN.data_sursa, {})
*!* 22.08.2026 marius.mutu: perioadele vin doar de la ANAF; pe traseul mfinante.ro raman goale
ldInceputScpTva = loMFIN.data_inceput_scptva
ldSfarsitScpTva = loMFIN.data_sfarsit_scptva
ldAnulImpScpTva = loMFIN.data_anul_imp_scptva
ldInceputTvaInc = loMFIN.data_inceput_tvainc
ldSfarsitTvaInc = loMFIN.data_sfarsit_tvainc
ldInactivare = loMFIN.data_inactivare
ldReactivare = loMFIN.data_reactivare
Endif && llValid AND llInterogareMfin
If m.llValid And m.llRO And m.llInterogareMfin
@@ -789,8 +800,10 @@ Define Class VerificareCod As Custom
lcStrada = This.RemoveCharacters(m.lcStrada)
TRY
Insert Into cVerificareCod(Valid, eroare, cod, firma, adresa, judet, regcom, codpostal, telefon, fax, datatvamfin, platitortvamfin, VIES, PlatitorTVA, stare, strada, nr, localitate, bloc, scara, etaj, apart, tvaincasare, splittva, inactiv, sursa, data_sursa) ;
Values (m.llValid, Left(m.lcEroare, 250), m.lcVerificareCod, m.lcFirma, m.lcAdresa, m.lcJudet, m.lcRegCom, m.lcCodpostal, m.lcTelefon, m.lcFax, m.lcDataTVAMFIN, m.llPlatitorTVAMFIN, m.llVies, m.llPlatitorTVA, m.lcStare, m.lcStrada, m.lcNr, m.lcLocalitate, m.lcBloc, m.lcscara, m.lcetaj, m.lcapart, m.llTVAIncasare, m.llSplitTVA, m.llInactiv, m.lcSursa, m.ldDataSursa)
Insert Into cVerificareCod(Valid, eroare, cod, firma, adresa, judet, regcom, codpostal, telefon, fax, datatvamfin, platitortvamfin, VIES, PlatitorTVA, stare, strada, nr, localitate, bloc, scara, etaj, apart, tvaincasare, splittva, inactiv, sursa, data_sursa, ;
data_inceput_scptva, data_sfarsit_scptva, data_anul_imp_scptva, data_inceput_tvainc, data_sfarsit_tvainc, data_inactivare, data_reactivare) ;
Values (m.llValid, Left(m.lcEroare, 250), m.lcVerificareCod, m.lcFirma, m.lcAdresa, m.lcJudet, m.lcRegCom, m.lcCodpostal, m.lcTelefon, m.lcFax, m.lcDataTVAMFIN, m.llPlatitorTVAMFIN, m.llVies, m.llPlatitorTVA, m.lcStare, m.lcStrada, m.lcNr, m.lcLocalitate, m.lcBloc, m.lcscara, m.lcetaj, m.lcapart, m.llTVAIncasare, m.llSplitTVA, m.llInactiv, m.lcSursa, m.ldDataSursa, ;
m.ldInceputScpTva, m.ldSfarsitScpTva, m.ldAnulImpScpTva, m.ldInceputTvaInc, m.ldSfarsitTvaInc, m.ldInactivare, m.ldReactivare)
Select cVerificareCod
Go Top
@@ -889,6 +902,13 @@ Define Class VerificareCod As Custom
loMFIN.Inactiv = inactiv
loMFIN.sursa = Nvl(sursa, 'ANAF')
loMFIN.data_sursa = Nvl(data_sursa, {})
loMFIN.data_inceput_scptva = Nvl(data_inceput_ScpTVA, {})
loMFIN.data_sfarsit_scptva = Nvl(data_sfarsit_ScpTVA, {})
loMFIN.data_anul_imp_scptva = Nvl(data_anul_imp_ScpTVA, {})
loMFIN.data_inceput_tvainc = Nvl(dataInceputTvaInc, {})
loMFIN.data_sfarsit_tvainc = Nvl(dataSfarsitTvaInc, {})
loMFIN.data_inactivare = Nvl(dataInactivare, {})
loMFIN.data_reactivare = Nvl(dataReactivare, {})
Endif
Endif
@@ -1615,6 +1635,14 @@ Define Class VerificareCod As Custom
AddProperty(loMFIN, "Inactiv", .F.)
AddProperty(loMFIN, "sursa", '')
AddProperty(loMFIN, "data_sursa", {})
*!* 22.08.2026 marius.mutu: perioadele ANAF (scop TVA, TVA la incasare, inactivitate) duse pana in messagebox
AddProperty(loMFIN, "data_inceput_scptva", {})
AddProperty(loMFIN, "data_sfarsit_scptva", {})
AddProperty(loMFIN, "data_anul_imp_scptva", {})
AddProperty(loMFIN, "data_inceput_tvainc", {})
AddProperty(loMFIN, "data_sfarsit_tvainc", {})
AddProperty(loMFIN, "data_inactivare", {})
AddProperty(loMFIN, "data_reactivare", {})
Return loMFIN
Endfunc && GetEmptyMfinObj
Enddefine
@@ -1687,7 +1715,8 @@ Function ANAF_VerificaCuiSingle
loHTTP = ANAF_CreeazaCerereANAF(m.lnCuiCautat, m.ldData, .F.)
llRaspunsPrimit = .T.
lcJsonString = Alltrim(loHTTP.responseText)
*!* 22.08.2026 marius.mutu: raspunsul ANAF e UTF-8 - decodare din responseBody, altfel diacriticele ajung mojibake (Stare)
lcJsonString = Alltrim(AnafDecodeResponseText(loHTTP))
If !Empty(m.lcJsonString) And Left(m.lcJsonString, 1) = '{'
Use In (Select(m.lcAliasTemp))
@@ -1869,6 +1898,64 @@ Function ANAF_SondaOpreste
Return m.llOprita
Endfunc && ANAF_SondaOpreste
*!* 22.08.2026 marius.mutu: literele romanesti fara corespondent in codepage-ul local devin '?' la conversie, deci se inlocuiesc intai cu litera simpla
Function AnafTextLocal
Lparameters tcText
Local lcText
lcText = Nvl(m.tcText, '')
lcText = Strtran(m.lcText, Chr(196) + Chr(131), 'a')
lcText = Strtran(m.lcText, Chr(196) + Chr(130), 'A')
lcText = Strtran(m.lcText, Chr(200) + Chr(153), 's')
lcText = Strtran(m.lcText, Chr(200) + Chr(152), 'S')
lcText = Strtran(m.lcText, Chr(197) + Chr(159), 's')
lcText = Strtran(m.lcText, Chr(197) + Chr(158), 'S')
lcText = Strtran(m.lcText, Chr(200) + Chr(155), 't')
lcText = Strtran(m.lcText, Chr(200) + Chr(154), 'T')
lcText = Strtran(m.lcText, Chr(197) + Chr(163), 't')
lcText = Strtran(m.lcText, Chr(197) + Chr(162), 'T')
Return Strconv(Strconv(m.lcText, 12), 6)
Endfunc
*!* 22.08.2026 marius.mutu: citeste raspunsul ANAF din responseBody (bytes bruti) printr-un ADODB.Stream cu Charset='utf-8', ca sa pastreze toate diacriticele romanesti; cade pe AnafTextLocal(responseText) doar daca ADODB.Stream nu poate fi folosit
Function AnafDecodeResponseText
Lparameters toHTTP
Local lcText, loStream, loEx As Exception, llOk
If Type('gvANAF_FallbackTextLogat') = 'U'
Public gvANAF_FallbackTextLogat
gvANAF_FallbackTextLogat = .F.
Endif
lcText = ''
llOk = .F.
Try
loStream = Createobject('ADODB.Stream')
loStream.Type = 1
loStream.Open()
loStream.Write(toHTTP.responseBody)
loStream.Position = 0
loStream.Type = 2
loStream.Charset = 'utf-8'
lcText = loStream.ReadText()
loStream.Close()
llOk = .T.
Catch To loEx
llOk = .F.
Endtry
If !m.llOk
If !gvANAF_FallbackTextLogat
If Type('goLog') = 'O'
goLog.Log('AnafDecodeResponseText: ADODB.Stream indisponibil, revenire pe responseText', 'AnafDecodeResponseText')
Endif
gvANAF_FallbackTextLogat = .T.
Endif
lcText = AnafTextLocal(Alltrim(toHTTP.responseText))
Endif
Return m.lcText
Endfunc
*********************************************
*** Verificare coduri fiscale folosind serviciul web ANAF, cate 500 de coduri per interogare
*********************************************
@@ -2206,7 +2293,7 @@ Define Class VerificareANAF As Custom
loHTTP.Open('POST', lcServer, .F.) && !!! POST e blocat de furnizor
loHTTP.setRequestHeader("Content-Type", "application/json;")
loHTTP.Send(lcSend)
lcAlias = This.ProceseazaRaspunsHTTP(loHTTP.Status, loHTTP.responseText, m.tcAlias)
lcAlias = This.ProceseazaRaspunsHTTP(loHTTP.Status, AnafDecodeResponseText(loHTTP), m.tcAlias)
Catch To loEx
This.cMesajANAF = loEx.Message
Endtry
@@ -2234,6 +2321,7 @@ Define Class VerificareANAF As Custom
Local lcAlias, lcJsonString, loJsonObject, loEx As Exception, lcMesaj, llRaspunsInteles
lcAlias = Iif(!Empty(m.tcAlias) And Type('tcAlias') = "C", m.tcAlias, "crsANAF")
*!* 22.08.2026 marius.mutu: decodarea UTF-8 se face in apelant (AnafDecodeResponseText), inainte de a ajunge aici
lcJsonString = Alltrim(Nvl(m.tcResponseText, ''))
goLog.Log('tnStatus: ' + Transform(m.tnStatus) + ' lcJsonString: ' + m.lcJsonString, 'ANAF_SincronWebService_PlatitorTva')

View File

@@ -0,0 +1,194 @@
* test_todo21_perioade_anaf.prg
* TODO #21: perioadele ANAF (scop TVA, TVA la incasare, inactivare) duse pana la utilizator.
* Verifica lantul de date din banda B, care ruleaza integral din .prg (nu are nevoie de
* write-back-ul binarelor): cursorul crsANAF -> Procedure ANAF -> oEntitate (VERIFICARE_CIF)
* -> verifica_partener_show_info. Mesajul modal e capturat cu mock_amessagebox (gcMockUltimMesaj),
* nu afisat, ca sa nu blocheze rularea headless.
*
* Codurile fiscale de test se aleg din istoric_coduri_fiscale (unul cu perioada de TVA la
* incasare, unul cu inactivare), ca verificarea sa treaca prin fluxul real ANAF/cache.
*
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\test_todo21_perioade_anaf.prg"
* Verdict in log: cate un rand OK/FAIL per pas si un TOTAL la final.
SET SAFETY OFF
SET TALK OFF
SET DELETED ON
SET EXACT ON
SET CENTURY ON
SET DATE DMY
SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcUILog, gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns, gnButon
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\test_todo21_perioade_anaf_log.txt"
gcMockUltimMesaj = ''
gnMockUltimTip = 0
gnMockRaspuns = 1
gnButon = 0
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
PUBLIC gnEsecuri
gnEsecuri = 0
ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
TRY
*-- VFP rezolva procedurile in ordinea in care au fost deschise fisierele (castiga PRIMUL),
*-- deci mock-ul si umbra trebuie incarcate INAINTE ca test_init_env_auto sa incarce
*-- oproceduri_comune.prg real. verifica_partener_show_info sta in ACELASI fisier cu
*-- FUNCTION amessagebox, asa ca umbra e o copie a fisierului cu amessagebox redenumit:
*-- apelul cade atunci pe mock si mesajul poate fi verificat fara dialog modal.
LOCAL lcSrc, lcUmbra
lcUmbra = ADDBS(SYS(2023)) + 'oproceduri_comune_umbra.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' + CHR(13) + CHR(10))
STRTOFILE(lcSrc, lcUmbra)
ERASE (FORCEEXT(lcUmbra, 'fxp'))
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
SET PROCEDURE TO (lcUmbra) ADDITIVE
DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
IF gnHandle <= 0
DO PrLogLocal WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
QUIT
ENDIF
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle)
DO PrLogLocal WITH 'umbra + mock amessagebox incarcate (' + lcUmbra + ')'
*-- proba: mock-ul chiar castiga la un apel direct?
LOCAL lnProba
lnProba = amessagebox('PING', 0 + 64, 'T')
DO PrLogLocal WITH 'proba amessagebox a intors ' + TRANSFORM(lnProba)
*-- coduri fiscale reale: unul cu perioada de TVA la incasare, unul cu inactivare
LOCAL lcSql, lcCodTvaInc, lcCodInactiv
TEXT TO lcSql NOSHOW
select cod_fiscal_n from (
select cod_fiscal_n from istoric_coduri_fiscale
where data_inceput_tvainc is not null and cod_fiscal_n is not null
order by dataorav_anaf desc) where rownum <= 1
ENDTEXT
lcCodTvaInc = ''
IF goExecutor.oExecuta(lcSql, 'crsT21a') AND USED('crsT21a') AND RECCOUNT('crsT21a') > 0
lcCodTvaInc = ALLTRIM(TRANSFORM(NVL(crsT21a.cod_fiscal_n, 0)))
ENDIF
USE IN (SELECT('crsT21a'))
TEXT TO lcSql NOSHOW
select cod_fiscal_n from (
select cod_fiscal_n from istoric_coduri_fiscale
where data_inactivare is not null and cod_fiscal_n is not null
order by dataorav_anaf desc) where rownum <= 1
ENDTEXT
lcCodInactiv = ''
IF goExecutor.oExecuta(lcSql, 'crsT21b') AND USED('crsT21b') AND RECCOUNT('crsT21b') > 0
lcCodInactiv = ALLTRIM(TRANSFORM(NVL(crsT21b.cod_fiscal_n, 0)))
ENDIF
USE IN (SELECT('crsT21b'))
DO PrLogLocal WITH 'coduri de test: TVA incasare=[' + lcCodTvaInc + '] inactiv=[' + lcCodInactiv + ']'
IF EMPTY(lcCodTvaInc) AND EMPTY(lcCodInactiv)
DO PrLogLocal WITH 'FAIL: nu s-a gasit niciun cod fiscal de test in istoric_coduri_fiscale'
gnEsecuri = gnEsecuri + 1
ENDIF
DO PrVerificaCod WITH lcCodTvaInc, 'TVA la incasare'
DO PrVerificaCod WITH lcCodInactiv, 'inactivare'
DO PrLogLocal WITH IIF(gnEsecuri = 0, 'TOTAL OK', 'TOTAL FAIL: ' + TRANSFORM(gnEsecuri) + ' pas(i)')
CATCH TO loEx
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ')'
ENDTRY
QUIT
**********************************************************
PROCEDURE PrVerificaCod
LPARAMETERS tcCodFiscal, tcEticheta
LOCAL loVerificare, loEnt, ldData, lcXml, lnRaspuns, llArePerioada
IF EMPTY(tcCodFiscal)
DO PrLogLocal WITH 'SKIP ' + tcEticheta + ': cod fiscal negasit'
RETURN
ENDIF
ldData = DATE(gnAn, gnLuna, 1)
loVerificare = CREATEOBJECT('verificarecod') && validare.prg
lcXml = loVerificare.Verificare('CIF', tcCodFiscal, 'ANAF', ldData)
IF TYPE('loVerificare.oEntitate') <> 'O'
DO PrLogLocal WITH 'FAIL ' + tcEticheta + ': oEntitate lipseste pentru ' + tcCodFiscal
gnEsecuri = gnEsecuri + 1
RETURN
ENDIF
loEnt = loVerificare.oEntitate
*-- 1. cele 7 campuri noi exista pe obiectul intors de VERIFICARE_CIF
LOCAL lnLipsa, lcCamp, laCampuri[7], lnI
laCampuri[1] = 'data_inceput_scptva'
laCampuri[2] = 'data_sfarsit_scptva'
laCampuri[3] = 'data_anul_imp_scptva'
laCampuri[4] = 'data_inceput_tvainc'
laCampuri[5] = 'data_sfarsit_tvainc'
laCampuri[6] = 'data_inactivare'
laCampuri[7] = 'data_reactivare'
lnLipsa = 0
FOR lnI = 1 TO 7
lcCamp = laCampuri[lnI]
IF !PEMSTATUS(loEnt, lcCamp, 5)
lnLipsa = lnLipsa + 1
DO PrLogLocal WITH 'FAIL ' + tcEticheta + ': lipseste ' + lcCamp + ' din oEntitate'
ENDIF
ENDFOR
IF lnLipsa = 0
DO PrLogLocal WITH 'OK ' + tcEticheta + ': cele 7 campuri de perioada exista in oEntitate'
ELSE
gnEsecuri = gnEsecuri + 1
ENDIF
DO PrLogLocal WITH ' ' + tcCodFiscal + ' firma=[' + ALLTRIM(TRANSFORM(loEnt.firma)) + '] sursa=[' + ALLTRIM(TRANSFORM(loEnt.sursa)) + ']'
DO PrLogLocal WITH ' scpTVA ' + DTOC(loEnt.data_inceput_scptva) + ' - ' + DTOC(loEnt.data_sfarsit_scptva) + ' anul.imp ' + DTOC(loEnt.data_anul_imp_scptva)
DO PrLogLocal WITH ' tvaInc ' + DTOC(loEnt.data_inceput_tvainc) + ' - ' + DTOC(loEnt.data_sfarsit_tvainc)
DO PrLogLocal WITH ' inactiv ' + DTOC(loEnt.data_inactivare) + ' reactivat ' + DTOC(loEnt.data_reactivare)
*-- 2. cel putin o perioada e completata (altfel testul nu dovedeste nimic despre transport)
llArePerioada = !EMPTY(loEnt.data_inceput_scptva) OR !EMPTY(loEnt.data_inceput_tvainc) OR !EMPTY(loEnt.data_inactivare)
IF llArePerioada
DO PrLogLocal WITH 'OK ' + tcEticheta + ': cel putin o perioada e completata'
ELSE
DO PrLogLocal WITH 'FAIL ' + tcEticheta + ': toate perioadele sunt goale (transportul nu e dovedit)'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- 3. mesajul de verificare individuala contine perioadele
gcMockUltimMesaj = ''
lnRaspuns = verifica_partener_show_info(loEnt, tcCodFiscal, 'TEST ' + tcEticheta, '')
IF 'Perioada TVA' $ gcMockUltimMesaj OR 'Inactivare:' $ gcMockUltimMesaj
DO PrLogLocal WITH 'OK ' + tcEticheta + ': mesajul contine perioadele'
ELSE
DO PrLogLocal WITH 'FAIL ' + tcEticheta + ': mesajul NU contine perioadele'
gnEsecuri = gnEsecuri + 1
ENDIF
DO PrLogLocal WITH '--- mesaj ---' + CHR(13) + CHR(10) + gcMockUltimMesaj + '--- sfarsit mesaj ---'
ENDPROC
**********************************************************
PROCEDURE PrLogLocal
LPARAMETERS tcMsg
LOCAL lcL
SET SAFETY OFF
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
ENDPROC
**********************************************************
PROCEDURE PrErrLocal
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
ENDPROC

View File

@@ -0,0 +1,27 @@
* mock_meniu_dblclick_deps.prg - inlocuieste nom_parteneri_modifica (COMUN\programe\onomenclatoare.prg)
* si VerificaCodFiscal (COMUN\programe\oproceduri_comune.prg) in testele banda C (dublu-click in
* grid-ul de verificare coduri fiscale), ca sa nu deschida formulare modale reale. Ambele proceduri
* sunt definite in fisiere DIFERITE de overificari.vc2 (apelantul), deci mock-ul castiga normal
* 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).
PROCEDURE nom_parteneri_modifica
LPARAMETERS tnId_Part, tnIdTipPart, tcTipPart, tnSpecial, tcMesaj
IF TYPE('gnMockNomModCount') = 'N'
gnMockNomModCount = gnMockNomModCount + 1
ENDIF
IF TYPE('gnMockNomModId') = 'N'
gnMockNomModId = tnId_Part
ENDIF
RETURN NULL
ENDPROC
PROCEDURE VerificaCodFiscal
LPARAMETERS toDate, lnOptiune, loPartener
IF TYPE('gnMockVerifCodCount') = 'N'
gnMockVerifCodCount = gnMockVerifCodCount + 1
ENDIF
loPartener = NULL
RETURN 7
ENDPROC

View File

@@ -0,0 +1,280 @@
* 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).
*
* 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)
*
* 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".
*
* 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).
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_grid_dblclick_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 gnMockNomModCount, gnMockNomModId, gnMockVerifCodCount
gnMockNomModCount = 0
gnMockNomModId = 0
gnMockVerifCodCount = 0
TRY
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\mock_meniu_dblclick_deps.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
*-- cod fiscal real cu perioada ANAF, pentru banda A2 (do_verifica)
LOCAL lcSql, lcCodAnaf
TEXT TO lcSql NOSHOW
select cod_fiscal_n from (
select cod_fiscal_n from istoric_coduri_fiscale
where (data_inceput_tvainc is not null or data_inactivare is not null) and cod_fiscal_n is not null
order by dataorav_anaf desc) where rownum <= 1
ENDTEXT
lcCodAnaf = ''
IF goExecutor.oExecuta(lcSql, 'crsGD1') AND USED('crsGD1') AND RECCOUNT('crsGD1') > 0
lcCodAnaf = ALLTRIM(TRANSFORM(NVL(crsGD1.cod_fiscal_n, 0)))
ENDIF
USE IN (SELECT('crsGD1'))
DO PrLog WITH 'cod fiscal ANAF de test: [' + lcCodAnaf + ']'
*-- partener real activ, pentru banda C (dublu-click -> editare partener)
LOCAL lnIdPartTest, lcCodFiscalPart, lcDenumirePart
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
lnIdPartTest = 0
lcCodFiscalPart = ''
lcDenumirePart = ''
IF goExecutor.oExecuta(lcSql, 'crsGD2') AND USED('crsGD2') AND RECCOUNT('crsGD2') > 0
lnIdPartTest = NVL(crsGD2.id_part, 0)
lcCodFiscalPart = ALLTRIM(NVL(crsGD2.cod_fiscal, ''))
lcDenumirePart = ALLTRIM(NVL(crsGD2.denumire, ''))
ENDIF
USE IN (SELECT('crsGD2'))
DO PrLog WITH 'partener de test: id_part=' + TRANSFORM(lnIdPartTest) + ' cod=[' + lcCodFiscalPart + '] denumire=[' + lcDenumirePart + ']'
IF EMPTY(lcCodAnaf) OR lnIdPartTest = 0
DO PrLog WITH 'FAIL: nu s-au gasit date de test (cod fiscal ANAF sau partener activ)'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- cursorul EXACT ca in oproceduri_comune.prg:4584 (verificare_parteneri), fara sa apelam
*-- acea procedura (Show(1) modal) - Load-ul formularului adauga singur cele 7 campuri noi
CREATE CURSOR crsVerificareParteneri (ales L, denumire C(100) NULL, cod_fiscal C(30) NULL, Valid L NULL, ;
firma C(100) NULL, cod C(100) NULL, adresa_roa C(250) NULL, adresa C(250) NULL, ;
judet C(100) NULL, regcom C(30) NULL, codpostal C(20) NULL, telefon C(30) NULL, fax C(30) NULL, ;
datatvamfin C(30) NULL, platitortvamfin L NULL, VIES L NULL, PlatitorTVA L NULL, eroare C(250) NULL, ;
IsCIF L NULL, duplicat L, atribut_fiscal C(2), stare C(100), atentie C(100), cod_fiscalfro C(30) NULL, ;
id_part N(16), tvaincasare L, splittva L, inactiv L, Data D)
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)
UPDATE crsVerificareParteneri SET IsCIF = .T.
GO TOP
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)
*=====================================================================
* Banda A: grid cu 34 coloane (era 27), cele 7 noi legate pe cursorul real
*=====================================================================
IF goFormGD._grdbase1.ColumnCount = 34
DO PrLog WITH 'OK A1: _grdbase1.ColumnCount = 34'
ELSE
DO PrLog WITH 'FAIL A1: ColumnCount = ' + TRANSFORM(goFormGD._grdbase1.ColumnCount) + ' (asteptat 34)'
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
laCol[1,1] = 'cDataInceputScpTva'
laCol[1,2] = 'data_inceput_scptva'
laCol[2,1] = 'cDataSfarsitScpTva'
laCol[2,2] = 'data_sfarsit_scptva'
laCol[3,1] = 'cDataAnulImpScpTva'
laCol[3,2] = 'data_anul_imp_scptva'
laCol[4,1] = 'cDataInceputTvaInc'
laCol[4,2] = 'data_inceput_tvainc'
laCol[5,1] = 'cDataSfarsitTvaInc'
laCol[5,2] = 'data_sfarsit_tvainc'
laCol[6,1] = 'cDataInactivare'
laCol[6,2] = 'data_inactivare'
laCol[7,1] = 'cDataReactivare'
laCol[7,2] = 'data_reactivare'
llColOk = .T.
FOR lnI = 1 TO 7
lcNume = laCol[lnI, 1]
IF !PEMSTATUS(goFormGD._grdbase1, lcNume, 5)
llColOk = .F.
DO PrLog WITH 'FAIL A3: coloana ' + lcNume + ' nu exista ca membru al _grdbase1'
LOOP
ENDIF
lcSrc = LOWER(EVALUATE('goFormGD._grdbase1.' + lcNume + '.ControlSource'))
IF !('crsverificareparteneri.' + laCol[lnI, 2] $ lcSrc)
llColOk = .F.
DO PrLog WITH 'FAIL A3: ' + lcNume + ' ControlSource=[' + lcSrc + '] asteptat crsverificareparteneri.' + laCol[lnI, 2]
ENDIF
ENDFOR
IF llColOk
DO PrLog WITH 'OK A3: cele 7 coloane noi exista pe binarul curent, cu ControlSource corect'
ELSE
gnEsecuri = gnEsecuri + 1
ENDIF
*-- do_verifica cu chkANAF fortat .T. in Init -> ramura serviciu web ANAF (banda A2)
goFormGD.do_verifica(.F., .T., .F.)
DO PrLog WITH 'do_verifica rulat (tlValidare=.F. tlMFIN=.T. tlVIES=.F.)'
SELECT crsVerificareParteneri
LOCATE FOR cod_fiscal = lcCodAnaf
IF FOUND()
LOCAL llArePerioada
llArePerioada = !EMPTY(crsVerificareParteneri.data_inceput_scptva) OR ;
!EMPTY(crsVerificareParteneri.data_inceput_tvainc) OR ;
!EMPTY(crsVerificareParteneri.data_inactivare)
IF llArePerioada
DO PrLog WITH 'OK A2: do_verifica a completat cel putin o perioada pentru ' + lcCodAnaf
ELSE
DO PrLog WITH 'FAIL A2: nicio perioada completata pentru ' + lcCodAnaf + ' dupa do_verifica'
gnEsecuri = gnEsecuri + 1
ENDIF
DO PrLog WITH ' scpTVA ' + DTOC(crsVerificareParteneri.data_inceput_scptva) + '-' + DTOC(crsVerificareParteneri.data_sfarsit_scptva) + ;
' tvaInc ' + DTOC(crsVerificareParteneri.data_inceput_tvainc) + '-' + DTOC(crsVerificareParteneri.data_sfarsit_tvainc) + ;
' inactiv ' + DTOC(crsVerificareParteneri.data_inactivare) + ' reactivat ' + DTOC(crsVerificareParteneri.data_reactivare)
ELSE
DO PrLog WITH 'FAIL A2: randul de test ' + lcCodAnaf + ' nu mai exista in cursor'
gnEsecuri = gnEsecuri + 1
ENDIF
*=====================================================================
* Banda C: dublu-click pe coloanele ROA (denumire/cod fiscal) -> editare partener;
* coloanele ANAF (firma/cod) raman pe meniul de verificare
*=====================================================================
SELECT crsVerificareParteneri
LOCATE FOR id_part = lnIdPartTest
gnMockNomModCount = 0
gnMockNomModId = 0
gnMockVerifCodCount = 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) + ')'
ELSE
DO PrLog WITH 'FAIL C1: Column2 DblClick - nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' id=' + TRANSFORM(gnMockNomModId) + ' verifcod count=' + TRANSFORM(gnMockVerifCodCount)
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
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'
ELSE
DO PrLog WITH 'FAIL C3: Column5 DblClick - verifcod count=' + TRANSFORM(gnMockVerifCodCount) + ' nom_mod count=' + TRANSFORM(gnMockNomModCount)
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
SELECT crsVerificareParteneri
LOCATE FOR cod_fiscal = 'RO9999999'
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'
ELSE
DO PrLog WITH 'FAIL C5: id_part gol - nom_mod count=' + TRANSFORM(gnMockNomModCount) + ' mesaj=[' + gcMockUltimMesaj + ']'
gnEsecuri = gnEsecuri + 1
ENDIF
goFormGD.Release()
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 tnError, tcMessage, tcProgram, tnLineNo
DO PrLog WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
ENDPROC

View File

@@ -0,0 +1,164 @@
* test_todo21_jurnal_data_factura.prg
* TODO #21, banda D: verificarea codurilor fiscale la DATA FACTURII in jurnalele de TVA
* (Clase\ovanzcump.vc2 - frm_regcump2010/frm_regcump2025/frm_regvanz2010/frm_regvanz2025.do_verifica).
*
* Optiunea 3 din meniul XMENU ("VERIFICA TOTI PARTENERII LA DATA FACTURII - ANAF") deschide un
* popup interactiv (ACTIVATE POPUP, proceduri_comune.prg:XMENU) care asteapta o tasta - nu poate
* fi condus headless fara sa se conduca simularea unui formular de jurnal intreg (ovanzcump.vc2,
* fara niciun harness existent, fisier text de 1.9 MB). Testul verifica deci:
* 1. RUNTIME - cele doua ramuri de SELECT (optiunea 3 cu data facturii / restul optiunilor fara
* data), copiate LITERAL din Clase\ovanzcump.vc2 (frm_regcump2010.do_verifica), rulate pe un
* cursor `actcv` construit local: optiunea 3 pastreaza cate un rand PER DATA DE DOCUMENT
* (acelasi partener, doua facturi in date diferite -> doua randuri), optiunea implicita
* colapseaza pe partener (un singur rand), exact cauza pentru care s-a cerut punctul 4 din
* TODO #21 (partenerul care isi schimba starea TVA in cursul lunii).
* 2. STATIC - textul optiunii 3 de meniu si fragmentul "dataact As data" exista in TOATE cele
* 4 metode (frm_regcump2010/2025, frm_regvanz2010/2025), citind Clase\ovanzcump.vc2 curent
* de pe disc (dovada ca write-back-ul a dus modificarea in toate cele 4 locuri, nu doar in
* cea testata la pasul 1).
* Verificarea prin UI reala (meniul XMENU, formularul de jurnal) ramane de facut manual in IDE.
*
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\todo21\test_todo21_jurnal_data_factura.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_jurnal_data_factura_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
TRY
*=====================================================================
* Pasul 1: comportamentul SELECT-urilor, copiate literal din
* Clase\ovanzcump.vc2:39304-39318 (frm_regcump2010.do_verifica)
*=====================================================================
CREATE CURSOR actcv (id_part N(16), cod_fiscal C(30), denumire C(100), dataact D)
INSERT INTO actcv VALUES (5001, 'RO12345671', 'PARTENER SCHIMBAT TVA SRL', {^2026-08-05})
INSERT INTO actcv VALUES (5001, 'RO12345671', 'PARTENER SCHIMBAT TVA SRL', {^2026-08-22})
INSERT INTO actcv VALUES (5002, 'RO12345672', 'PARTENER FIX SRL', {^2026-08-10})
LOCAL lcWhere
lcWhere = ".T."
*-- optiunea 3: verificare la data facturii
Select Distinct id_part, cod_fiscal, denumire, dataact As data, Iif(Left(Upper(cod_fiscal), 2) = "RO", "RO", " ") As ATRIBUT_FISCAL, .T. As IsCIF, .F. As codvalid ;
From actcv ;
Where &lcWhere ;
Into Cursor crsOptiunea3 ;
Order By denumire, cod_fiscal ;
Readwrite
*-- optiunea implicita (azi/data 1 a lunii): fara data facturii
Select Distinct id_part, cod_fiscal, denumire, Iif(Left(Upper(cod_fiscal), 2) = "RO", "RO", " ") As ATRIBUT_FISCAL, .T. As IsCIF, .F. As codvalid ;
From actcv ;
Where &lcWhere ;
Into Cursor crsOptiunea2 ;
Order By denumire, cod_fiscal ;
Readwrite
IF RECCOUNT('crsOptiunea3') = 3
DO PrLog WITH 'OK D1: optiunea 3 (data facturii) pastreaza 3 randuri - cate unul per data de document'
ELSE
DO PrLog WITH 'FAIL D1: optiunea 3 a dat ' + TRANSFORM(RECCOUNT('crsOptiunea3')) + ' randuri (asteptat 3)'
gnEsecuri = gnEsecuri + 1
ENDIF
IF RECCOUNT('crsOptiunea2') = 2
DO PrLog WITH 'OK D2: optiunea implicita colapseaza pe partener - 2 randuri (5001 o singura data)'
ELSE
DO PrLog WITH 'FAIL D2: optiunea implicita a dat ' + TRANSFORM(RECCOUNT('crsOptiunea2')) + ' randuri (asteptat 2)'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- id_part si data corecte pe fiecare rand din optiunea 3 (regasite dupa data, nu dupa recno)
LOCAL llDataOk
llDataOk = .T.
SELECT crsOptiunea3
LOCATE FOR id_part = 5001 AND data = {^2026-08-05}
llDataOk = llDataOk AND FOUND()
LOCATE FOR id_part = 5001 AND data = {^2026-08-22}
llDataOk = llDataOk AND FOUND()
LOCATE FOR id_part = 5002 AND data = {^2026-08-10}
llDataOk = llDataOk AND FOUND()
IF llDataOk
DO PrLog WITH 'OK D3: fiecare rand din optiunea 3 are id_part si data (=dataact) corecte'
ELSE
DO PrLog WITH 'FAIL D3: cel putin o combinatie id_part/data lipseste din crsOptiunea3'
gnEsecuri = gnEsecuri + 1
ENDIF
*-- id_part completat si pe optiunea implicita (banda C3, in acelasi SELECT)
SELECT crsOptiunea2
LOCATE FOR EMPTY(NVL(id_part, 0))
IF !FOUND()
DO PrLog WITH 'OK D4: id_part completat pe toate randurile din optiunea implicita'
ELSE
DO PrLog WITH 'FAIL D4: exista randuri fara id_part in optiunea implicita'
gnEsecuri = gnEsecuri + 1
ENDIF
USE IN (SELECT('crsOptiunea3'))
USE IN (SELECT('crsOptiunea2'))
USE IN (SELECT('actcv'))
*=====================================================================
* Pasul 2: verificare statica - toate cele 4 metode au optiunea 3 de meniu si
* SELECT-ul cu "dataact As data" (dovada ca write-back-ul a atins toate cele 4 locuri)
*=====================================================================
LOCAL lcSrc
lcSrc = FILETOSTR("D:\ROA\ROACONT\Clase\ovanzcump.vc2")
DO PrLog WITH 'lungime Clase\ovanzcump.vc2 (text curent de pe disc) = ' + TRANSFORM(LEN(lcSrc)) + ' octeti'
LOCAL lnAparitiiMeniu, lnAparitiiSelect
lnAparitiiMeniu = OCCURS('VERIFICA TOTI PARTENERII LA DATA FACTURII - ANAF', lcSrc)
lnAparitiiSelect = OCCURS('dataact As data', lcSrc)
IF lnAparitiiMeniu = 4
DO PrLog WITH 'OK D5: optiunea 3 de meniu apare de 4 ori in ovanzcump.vc2 (cate una per jurnal)'
ELSE
DO PrLog WITH 'FAIL D5: optiunea 3 de meniu apare de ' + TRANSFORM(lnAparitiiMeniu) + ' ori (asteptat 4)'
gnEsecuri = gnEsecuri + 1
ENDIF
IF lnAparitiiSelect = 4
DO PrLog WITH 'OK D6: fragmentul "dataact As data" apare de 4 ori in ovanzcump.vc2 (cate unul per jurnal)'
ELSE
DO PrLog WITH 'FAIL D6: fragmentul "dataact As data" apare de ' + TRANSFORM(lnAparitiiSelect) + ' ori (asteptat 4)'
gnEsecuri = gnEsecuri + 1
ENDIF
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 tnError, tcMessage, tcProgram, tnLineNo
DO PrLog WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
ENDPROC