#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
This commit is contained in:
159
utile/Teste/editare_factura/test_s9_3_stergere.prg
Normal file
159
utile/Teste/editare_factura/test_s9_3_stergere.prg
Normal file
@@ -0,0 +1,159 @@
|
||||
* 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
|
||||
Reference in New Issue
Block a user