Files
comun/utile/Teste/editare_factura/test_s9_3_stergere.prg
Marius Mutu 8e022d332e #13: formular de facturare unificat - etapa curenta
Squash al branch-ului de lucru plan13-s2.

Clase: ofacturare (nucleul formularului unificat), ofacturare_comun,
ferestre_cere_date, ocomenzi, caut_ora (lista de preturi in combo-urile de
cautare), omodificari.

Programe: ofacturare impartit - ofacturare_antet, ofacturare_rutare_scriere si
ogrid_latimi sunt fisiere noi; oproceduri_facturare primeste discountul pe linie
si cota standard de TVA cand articolul nu are cota pe politica.

Documentatie: capcana SQLExec no_data_found, conventia de encoding, depanarea
testelor VFP si regulile de lucru - conflictele cu modificarile venite din alte
proiecte sunt rezolvate pastrand ambele parti.

Loguri de rulare a testelor scoase din versionare; testele raman.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PkyjGyrV2S7932om4kfSiK
2026-09-09 21:38:25 +03:00

160 lines
7.4 KiB
Plaintext

* test_s9_3_stergere.prg
* Proba S9-3 (docs\propunere_s9_stergere_reemitere.md, sectiunea 3) - StergeDocumentFacturare
* (ofacturare_rutare_scriere.prg), piciorul de stergere extras din ofacturare_comun.vc2:4837-4977.
*
* SCRIE IN ORACLE: alege singur, la rulare, un document eligibil (STERS=0, in perioada gnAn/gnLuna
* activa din calendar, fara referinte incasari/plati, fara urmasi, cu randuri reale in vact_tot/
* vrul_tot - ca sa probeze reversarea de stoc) si il sterge definitiv (soft-delete). Nu reemite.
* Zero numere SSS consumate. Trei rulari distincte ale acestui script sterg trei documente diferite
* (fiecare candidat ales e exclus de urmatoarea rulare, fiindca STERS a devenit 1).
*
* Documente EXCLUSE explicit (folosite de alte suite / DATA_ACT alterata):
* 1047, 1048, 1055, 1130 (test_s8b_rutare_scriere / test_s9_1_2_listaid_snapshot)
* 1113 (DATA_ACT alterata, iese din luna curenta)
LPARAMETERS tnForceAn, tnForceLuna
*!* tnForceAn/tnForceLuna optionale: forteaza perioada activa gnAn/gnLuna (test_init_env_auto_
*!* roafacturare accepta tnAn/tnLuna) - folosit doar cand luna curenta reala e epuizata de candidati
*!* eligibili (STERS=0 + randuri reale vact_tot/vrul_tot + fara referinte/urmasi); alege un document
*!* real din acea perioada, nu ocoleste nicio garda a functiei testate
SET SAFETY OFF
SET TALK OFF
PUBLIC gcErrLog
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s9_3_stergere_log_' + ;
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', tnForceAn, tnForceLuna
IF gnHandle <= 0
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
gnIdUtil = 8
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
PUBLIC gnPass, gnFail
gnPass = 0
gnFail = 0
DO RuleazaS93
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
PROCEDURE RuleazaS93
STRTOFILE('perioada activa gnAn/gnLuna = ' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
*!* --- alege un candidat eligibil: STERS=0, in perioada activa, cu randuri reale in vact_tot SI vrul_tot
*!* (vact_tot singur nu garanteaza randuri de stoc - articolele pot fi negestionabile) ---
LOCAL lcSqlCand, lcExclusi
*!* documentele-martor ale celorlalte teste din suita: le sterge o singura data si raman
*!* rosii pana la rularea scriptului de regenerare (docs\wip13_2026_09_05_04_COMUN_FIXTURI_TEST)
lcExclusi = [1047,1048,1049,1050,1055,1071,1072,1113,1125,1126,1128,1129,1130,1160]
lcSqlCand = [select v.id_vanzare, v.cod, v.tip, v.data_act from vanzari v ] + ;
[where v.sters = 0 and extract(year from v.data_act) = ] + TRANSFORM(gnAn) + ;
[ and extract(month from v.data_act) = ] + TRANSFORM(gnLuna) + ;
[ and v.id_vanzare not in (] + lcExclusi + [) ] + ;
[ and exists (select 1 from ] + gcs + [.vact_tot a where a.sters = 0 and a.an = ] + TRANSFORM(gnAn) + ;
[ and a.luna = ] + TRANSFORM(gnLuna) + [ and a.cod = v.cod) ] + ;
[ and exists (select 1 from ] + gcs + [.vrul_tot r where r.sters = 0 and r.an = ] + TRANSFORM(gnAn) + ;
[ and r.luna = ] + TRANSFORM(gnLuna) + [ and r.cod = v.cod) ] + ;
[order by v.id_vanzare]
IF USED('v_candidati_s93')
USE IN v_candidati_s93
ENDIF
LOCAL lnSuccesCand
lnSuccesCand = goExecutor.oExecuta(lcSqlCand, 'v_candidati_s93')
DO asserteaza WITH 'interogarea de candidati a reusit', m.lnSuccesCand, TRANSFORM(m.lnSuccesCand)
IF !m.lnSuccesCand
RETURN
ENDIF
LOCAL lnIdVanzareAles, lnCodAles, lnTipAles, lnAnAles, lnLunaAles
lnIdVanzareAles = 0
SELECT v_candidati_s93
SCAN
lnIdVanzareAles = id_vanzare
lnCodAles = cod
lnTipAles = tip
lnAnAles = YEAR(data_act)
lnLunaAles = MONTH(data_act)
*!* excludem candidatii cu referinte incasari/plati sau cu urmasi - garzile pe care do_sterge/
*!* editarea le fac deja INAINTE de piciorul de stergere, nu fac parte din functia extrasa
IF !ReferinteDocumenteNota(lnAnAles, lnLunaAles, lnCodAles) AND !DocumentAreUrmasi(lnIdVanzareAles)
EXIT
ENDIF
lnIdVanzareAles = 0
ENDSCAN
USE IN v_candidati_s93
DO asserteaza WITH 'exista un candidat eligibil (fara referinte, fara urmasi)', m.lnIdVanzareAles > 0, TRANSFORM(m.lnIdVanzareAles)
IF m.lnIdVanzareAles = 0
RETURN
ENDIF
STRTOFILE('candidat ales: id_vanzare=' + TRANSFORM(lnIdVanzareAles) + ' cod=' + TRANSFORM(lnCodAles) + ;
' tip=' + TRANSFORM(lnTipAles) + ' an=' + TRANSFORM(lnAnAles) + ' luna=' + TRANSFORM(lnLunaAles) + CHR(13) + CHR(10), gcErrLog, 1)
*!* --- stare INAINTE ---
LOCAL lnStersInainte, lnRulInainte
lnStersInainte = -1
lnRulInainte = -1
goExecutor.oSelecteaza2Value([select sters from vanzari where id_vanzare = ] + TRANSFORM(lnIdVanzareAles), @lnStersInainte)
DO asserteaza WITH 'INAINTE: documentul ales nu e deja sters', m.lnStersInainte == 0, TRANSFORM(m.lnStersInainte)
goExecutor.oSelecteaza2Value([select count(*) as nr from rul where sters = 0 and an = ] + TRANSFORM(lnAnAles) + ;
[ and luna = ] + TRANSFORM(lnLunaAles) + [ and cod = ] + TRANSFORM(lnCodAles), @lnRulInainte)
STRTOFILE('INAINTE: vanzari.sters=' + TRANSFORM(lnStersInainte) + ' rul sters=0 count=' + TRANSFORM(lnRulInainte) + CHR(13) + CHR(10), gcErrLog, 1)
DO asserteaza WITH 'INAINTE: exista randuri RUL nesterse de reversat (precondite candidat)', m.lnRulInainte > 0, TRANSFORM(m.lnRulInainte)
IF m.lnRulInainte <= 0
RETURN
ENDIF
*!* --- executa piciorul de stergere ---
LOCAL llRezultat
llRezultat = StergeDocumentFacturare(m.lnIdVanzareAles, m.lnCodAles, m.lnAnAles, m.lnLunaAles, 8)
DO asserteaza WITH 'StergeDocumentFacturare a intors .T.', m.llRezultat, TRANSFORM(m.llRezultat)
*!* --- stare DUPA: VANZARI.STERS=1 si RUL marcat STERS=1 (dovada reversarii de stoc) ---
LOCAL lnStersDupa, lnRulRamasNesters
lnStersDupa = -1
lnRulRamasNesters = -1
goExecutor.oSelecteaza2Value([select sters from vanzari where id_vanzare = ] + TRANSFORM(lnIdVanzareAles), @lnStersDupa)
goExecutor.oSelecteaza2Value([select count(*) as nr from rul where sters = 0 and an = ] + TRANSFORM(lnAnAles) + ;
[ and luna = ] + TRANSFORM(lnLunaAles) + [ and cod = ] + TRANSFORM(lnCodAles), @lnRulRamasNesters)
STRTOFILE('DUPA: vanzari.sters=' + TRANSFORM(lnStersDupa) + ' rul sters=0 count=' + TRANSFORM(lnRulRamasNesters) + CHR(13) + CHR(10), gcErrLog, 1)
DO asserteaza WITH 'DUPA: vanzari.sters = 1', m.lnStersDupa == 1, TRANSFORM(m.lnStersDupa)
DO asserteaza WITH 'DUPA: toate randurile RUL ale documentului sunt sters=1 (reversare stoc probata)', m.lnRulRamasNesters == 0, TRANSFORM(m.lnRulRamasNesters)
ENDPROC
PROCEDURE asserteaza
LPARAMETERS tcNume, tlConditie, tcValoare
IF m.tlConditie
gnPass = gnPass + 1
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
ELSE
gnFail = gnFail + 1
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + Transform(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
ENDIF
ENDPROC
PROCEDURE test_error_handler
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
ENDPROC