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

@@ -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 + ;