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:
164
utile/Teste/todo21/test_todo21_jurnal_data_factura.prg
Normal file
164
utile/Teste/todo21/test_todo21_jurnal_data_factura.prg
Normal 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
|
||||
Reference in New Issue
Block a user