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
160 lines
7.4 KiB
Plaintext
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
|