Files
comun/utile/Teste/editare_factura/test_s10_proc_tvav.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

422 lines
22 KiB
Plaintext

* test_s10_proc_tvav.prg
* Control negativ S10 (docs\propunere_s10_proc_tvav.md §10), PE COD NEMODIFICAT: dovedeste ca
* PACK_FACTURARE.adauga_articol_factura re-deriva PROC_TVAV, silentios, pe ramura contract SI pe
* ramura ELSE - inainte de a scrie diff-ul din runda 2.
*
* PROIECTARE REVIZUITA (fata de prima incercare din aceasta sesiune): apel DIRECT la
* pack_facturare.adauga_articol_factura, cu parametrii exact ca linia reala 1604 (doc 1055), nu
* prin tot lantul do_scrie_factura()/scrie_factura2 - acela a picat cu o eroare Oracle NELEGATA de
* S10 ("SQL statement parameter is required for non-prepared SQLEXEC() calls", pe scrie_factura2
* pentru documente CONTRACT reale - vezi §11 din propunere). Apelul direct testeaza EXACT
* mecanismul in discutie (CASE-ul din adauga_articol_factura), scrie doar in
* VANZARI_DETALII_TEMP (niciodata in VANZARI/VANZARI_DETALII/DOCUMENTE - zero risc, zero SSS ars,
* nimic de reparat la un document real) si e complet reversibil.
*
* EXTINDERE (aplicare Oracle, dupa scrierea diff-ului din §7 - vezi docs\raport_s10_aplicare_oracle.md):
* cazurile 3 si 4 folosesc parametrul nou V_PROC_TVAV_TEMP (pozitia 28) si flag-ul de pachet
* pack_facturare.nregenerare_editare, ca sa dovedeasca proba ceruta de decizia 3: cu flag=1 si
* V_PROC_TVAV_TEMP trimis, cota scrisa trebuie sa fie cea SALVATA, nu cea derivata. Cazurile 1/2
* raman NESCHIMBATE LA COD (apel cu 27 argumente, flag-ul niciodata atins) - proba de "neschimbat"
* e ca produc EXACT ACELASI TIPAR de PASS/FAIL dupa diff ca inainte (CTR-2/ELSE-2 continua sa PICE,
* adica tot re-deriva - flag-ul implicit 0 inseamna "override-ul nu se aplica", nu "comportament
* corect"), nu ca ar incepe sa treaca.
*
* Parametru tnCaz:
* 1 = CONTRACT - parametrii liniei reale 1604 (doc 1055: id_articol 4294507173, id_pol 41,
* pret 101.13, id_valuta 3, id_jtva_coloana 37, proc_tvav SALVAT 1.21), trimisi la
* adauga_articol_factura (27 argumente, flag neatins - ramane 0) cu V_ID_CTR = 61
* (CONTRACTE.OPT_FACTURARE NULL -> branch-ul principal, nu portita NO_DATA_FOUND). Setup:
* CRM_POLITICI_PRET_ART (id_pol_art 1593, acelasi articol/politica ca linia reala, azi
* PROC_TVAV NULL) -> 1.09; CTR_ARTICOLE nou care leaga contractul 61 de politica 1593
* (pret_unitar=0, ca sa nu amestece si divergenta de PRET - izolat strict pe PROC_TVAV).
* INAINTE si DUPA diff: TREBUIE sa PICE la fel (CTR-2), tot re-deriva - flag=0 nu schimba
* nimic pentru apelantii de azi.
* 2 = ELSE - parametrii liniei reale 481 (doc 287: id_jtva_coloana 1 "RO19B", proc_tvav
* SALVAT 1.19), trimisi cu pack_facturare.ntip := 1 (tip simplu, nu comanda/aviz/restaurant/
* contract - cade pe ELSE). Setup: JTVA_COLOANE.COTA_TVA (id 1) 19 -> 9 (simuleaza o
* schimbare legala de cota intre emiterea documentului si o eventuala regenerare). INAINTE si
* DUPA diff: TREBUIE sa PICE la fel (ELSE-2).
* 3 = CONTRACT + FLAG - acelasi setup ca 1, dar apel cu 28 argumente:
* pack_facturare.nregenerare_editare := 1 inainte de apel, V_PROC_TVAV_TEMP = cota salvata
* (1.21). Cere pachetul deja recompilat cu diff-ul din §7 (altfel pica cu "wrong number of
* arguments"). TREBUIE sa TREACA: cota scrisa = cea salvata, nu cea noua din politica.
* 4 = ELSE + FLAG - acelasi setup ca 2, apel cu 28 argumente, flag=1, V_PROC_TVAV_TEMP = cota
* salvata (1.19). TREBUIE sa TREACA: cota scrisa = cea salvata, nu cea noua din JTVA_COLOANE.
*
* Cazurile 1/2: asertul central e "PROC_TVAV in TEMP = cel salvat pe linia reala" - PICA mereu (si
* inainte, si dupa diff, cat timp flag-ul ramane 0): Oracle re-deriva din politica/JTVA_COLOANE
* curente, nu primeste si nu respecta o valoare salvata pe calea normala (fara flag). Asertul de
* control CTR-3/ELSE-3 (valoarea noua chiar a ajuns in TEMP) confirma ca testul masoara ceva real
* si inainte, si dupa - proba ca diff-ul n-a schimbat comportamentul implicit. Setup-ul de schema e
* revertit necondiționat la finalul fiecarui caz. Cazurile 3/4 reseteaza flag-ul la 0 imediat dupa
* citirea rezultatului, in ACELASI bloc/sesiune, ca sa nu ramana agatat pentru vreun apel urmator
* din aceeasi conexiune.
LPARAMETERS tnCaz
SET SAFETY OFF
SET TALK OFF
PUBLIC gcErrLog, gnPass, gnFail
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s10_proc_tvav_log_' + ;
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' caz=' + TRANSFORM(tnCaz) + CHR(13) + CHR(10), gcErrLog)
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
IF gnHandle <= 0
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
gnIdUtil = 8
gnPass = 0
gnFail = 0
LOCAL lnCaz
lnCaz = VAL(TRANSFORM(tnCaz))
DO CASE
CASE lnCaz = 1
DO CazContract
CASE lnCaz = 2
DO CazElse
CASE lnCaz = 3
DO CazContractFlag
CASE lnCaz = 4
DO CazElseFlag
OTHERWISE
STRTOFILE('EROARE: tnCaz trebuie sa fie 1 (CONTRACT) / 2 (ELSE) / 3 (CONTRACT+FLAG) / 4 (ELSE+FLAG)' + CHR(13) + CHR(10), gcErrLog, 1)
ENDCASE
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
*==============================================================================================
* CazContract: parametrii liniei reale 1604 (doc 1055), trimisi cu V_ID_CTR=61 (OPT_FACTURARE
* NULL - branch-ul principal, nu NO_DATA_FOUND).
*==============================================================================================
PROCEDURE CazContract
LOCAL lnIdPolArt, lnIdCtr, lnProcTvavVechi, lnIdCtrArtNou, lnProcTvavSalvat, lnProcTvavTemp
LOCAL llOk
lnIdPolArt = 1593
lnIdCtr = 61
lnProcTvavSalvat = Val1([select proc_tvav as v from vanzari_detalii where id_vanzare_det = 1604])
DO asserteaza WITH 'PRECONDITIE linia reala 1604 are proc_tvav salvat = 1.21', lnProcTvavSalvat = 1.21, TRANSFORM(lnProcTvavSalvat)
lnProcTvavVechi = Val1([select proc_tvav as v from crm_politici_pret_art where id_pol_art = ] + TRANSFORM(lnIdPolArt))
STRTOFILE('SETUP inainte: crm_politici_pret_art.proc_tvav (id_pol_art=' + TRANSFORM(lnIdPolArt) + ') = ' + TRANSFORM(lnProcTvavVechi) + CHR(13) + CHR(10), gcErrLog, 1)
DO asserteaza WITH 'PRECONDITIE contractul 61 are OPT_FACTURARE care cade pe branch-ul principal (NVL(...,3)=3)', ;
Val1([select nvl(opt_facturare,3) as v from contracte where id_ctr = ] + TRANSFORM(lnIdCtr)) = 3, ;
TRANSFORM(Val1([select nvl(opt_facturare,3) as v from contracte where id_ctr = ] + TRANSFORM(lnIdCtr)))
llOk = goExecutor.oExecuta([update crm_politici_pret_art set proc_tvav = 1.09 where id_pol_art = ] + TRANSFORM(lnIdPolArt))
DO asserteaza WITH 'SETUP update politica reusit', llOk, TRANSFORM(llOk)
IF !llOk
RETURN
ENDIF
lnIdCtrArtNou = Val1([select seq_ctr_articole.nextval as v from dual])
llOk = goExecutor.oExecuta([insert into ctr_articole (id_ctr_art, id_ctr, id_pol_art, pret_unitar) values (] + ;
TRANSFORM(lnIdCtrArtNou) + [, ] + TRANSFORM(lnIdCtr) + [, ] + TRANSFORM(lnIdPolArt) + [, 0)])
DO asserteaza WITH 'SETUP insert ctr_articole reusit (id_ctr_art=' + TRANSFORM(lnIdCtrArtNou) + ')', llOk, TRANSFORM(llOk)
IF !llOk
DO CazContractRevert WITH lnIdPolArt, lnProcTvavVechi, -1
RETURN
ENDIF
*!* apel DIRECT, 27 argumente, ca la ofacturare.vc2:19977-19999 - flag NEATINS (implicit 0 pe
*!* pachet, sau ce a ramas de la un caz anterior din aceeasi sesiune - de aceea CazContractFlag/
*!* CazElseFlag reseteaza flag-ul la 0 imediat dupa citire). CITIREA rezultatului trebuie sa fie
*!* in ACELASI apel/tranzactie: VANZARI_DETALII_TEMP e GLOBAL TEMPORARY TABLE cu
*!* DURATION=SYS$TRANSACTION (verificat pe USER_TABLES) - randul dispare la primul COMMIT, iar
*!* goExecutor face auto-commit dupa fiecare oExecuta separat (Transactions <> 2, nicio
*!* tranzactie manuala deschisa aici). Un al doilea apel SELECT separat vedea mereu 0 randuri.
*!* Solutia: SELECT ... INTO ?@pnRezultatCtr (bind OUT, PRIVATE - vezi tiparul ?@poDate.nid_vanzare
*!* din ofacturare.vc2) IN ACELASI bloc PL/SQL, inainte de commit-ul acelui apel.
PRIVATE pnRezultatCtr
pnRezultatCtr = -999
LOCAL lcSqlApel
lcSqlApel = [begin pack_facturare.ntip := 2; pack_facturare.adauga_articol_factura(] + ;
[999001, 4294507173, '', '', 41, NULL, 0, NULL, NULL, ] + ;
[101.13, 3, 0, 1, 1, 0, 'XXXX', 1, 1, 37, NULL, NULL, 101.13, NULL, ] + TRANSFORM(lnIdCtr) + [, 8, NULL, NULL); ] + ;
[select proc_tvav into ?@pnRezultatCtr from vanzari_detalii_temp where id_temp = 999001; end;]
*!* oExecute (spre deosebire de oExecuta) intoarce direct codul numeric (lnSucces < 0 = eroare)
LOCAL lnSuccesApel
lnSuccesApel = goExecutor.oExecute(lcSqlApel)
llOk = (lnSuccesApel >= 0)
STRTOFILE('goExecutor.cEroare dupa apel: [' + NVL(goExecutor.cEroare,'') + ']' + CHR(13) + CHR(10), gcErrLog, 1)
DO asserteaza WITH 'CTR-1 apelul la adauga_articol_factura a reusit (fara exceptie Oracle)', llOk, TRANSFORM(lnSuccesApel)
IF llOk
lnProcTvavTemp = NVL(pnRezultatCtr, -1)
STRTOFILE('CTR proc_tvav in VANZARI_DETALII_TEMP: ' + TRANSFORM(lnProcTvavTemp) + ;
' (salvat_pe_document=' + TRANSFORM(lnProcTvavSalvat) + ', politica_noua=1.09)' + CHR(13) + CHR(10), gcErrLog, 1)
*!* ASERTUL CENTRAL - flag ramane 0 (neatins) - TREBUIE sa PICE la fel INAINTE si DUPA diff
*!* (dovada ca diff-ul nu schimba comportamentul implicit pentru apelantii de azi)
DO asserteaza WITH 'CTR-2 PROC_TVAV = cel salvat pe document (decizia 3, flag implicit 0 - trebuie sa PICE, neschimbat fata de azi)', ;
lnProcTvavTemp = lnProcTvavSalvat, TRANSFORM(lnProcTvavSalvat) + ' -> ' + TRANSFORM(lnProcTvavTemp)
DO asserteaza WITH 'CTR-3 (control ca testul masoara ceva) cota noua a politicii chiar a ajuns in TEMP', ;
lnProcTvavTemp = 1.09, TRANSFORM(lnProcTvavTemp)
ENDIF
DO CazContractRevert WITH lnIdPolArt, lnProcTvavVechi, lnIdCtrArtNou
ENDPROC
PROCEDURE CazContractRevert
LPARAMETERS tnIdPolArt, tnProcTvavVechi, tnIdCtrArtNou
LOCAL llOk1, llOk2
llOk2 = .T.
IF tnIdCtrArtNou <> -1
llOk2 = goExecutor.oExecuta([delete from ctr_articole where id_ctr_art = ] + TRANSFORM(tnIdCtrArtNou))
ENDIF
llOk1 = goExecutor.oExecuta([update crm_politici_pret_art set proc_tvav = ] + ;
IIF(ISNULL(tnProcTvavVechi) OR tnProcTvavVechi = -1, [NULL], TRANSFORM(tnProcTvavVechi)) + [ where id_pol_art = ] + TRANSFORM(tnIdPolArt))
STRTOFILE('REVERT: delete ctr_articole=' + TRANSFORM(llOk2) + ' update politica=' + TRANSFORM(llOk1) + CHR(13) + CHR(10), gcErrLog, 1)
DO asserteaza WITH 'CTR-9 revert setup (politica + ctr_articole) reusit', llOk1 AND llOk2, TRANSFORM(llOk1) + '/' + TRANSFORM(llOk2)
LOCAL lnVerif
lnVerif = Val1([select proc_tvav as v from crm_politici_pret_art where id_pol_art = ] + TRANSFORM(tnIdPolArt))
STRTOFILE('REVERT verificat: proc_tvav acum = ' + TRANSFORM(lnVerif) + CHR(13) + CHR(10), gcErrLog, 1)
ENDPROC
*==============================================================================================
* CazElse: parametrii liniei reale 481 (doc 287), trimisi cu pack_facturare.ntip := 1 (cade pe
* ELSE - nu e in nicio lista comanda/aviz/restaurant/contract).
*==============================================================================================
PROCEDURE CazElse
LOCAL lnCotaVeche, lnProcTvavSalvat, lnProcTvavTemp, llOk
lnProcTvavSalvat = Val1([select proc_tvav as v from vanzari_detalii where id_vanzare_det = 481])
DO asserteaza WITH 'PRECONDITIE linia reala 481 are proc_tvav salvat = 1.19', lnProcTvavSalvat = 1.19, TRANSFORM(lnProcTvavSalvat)
lnCotaVeche = Val1([select cota_tva as v from jtva_coloane where id_jtva_coloana = 1])
STRTOFILE('SETUP inainte: jtva_coloane.cota_tva (id=1) = ' + TRANSFORM(lnCotaVeche) + CHR(13) + CHR(10), gcErrLog, 1)
DO asserteaza WITH 'PRECONDITIE cota_tva porneste de la 19', lnCotaVeche = 19, TRANSFORM(lnCotaVeche)
llOk = goExecutor.oExecuta([update jtva_coloane set cota_tva = 9 where id_jtva_coloana = 1])
DO asserteaza WITH 'SETUP update jtva_coloane reusit', llOk, TRANSFORM(llOk)
IF !llOk
RETURN
ENDIF
*!* apel DIRECT, 27 argumente (V_ID_JTVA_COLOANA=1, restul dupa vanzari_detalii), ntip=1
*!* (tip simplu -> ELSE); V_ID_ARTICOL 691698485 ca in linia reala - flag NEATINS. Citire in
*!* ACELASI apel/tranzactie - vezi comentariul din CazContract (VANZARI_DETALII_TEMP e GTT
*!* DURATION=SYS$TRANSACTION, disparea la commit-ul automat al urmatorului oExecuta separat)
PRIVATE pnRezultatElse
pnRezultatElse = -999
LOCAL lcSqlApel2, lnSuccesApel2
lcSqlApel2 = [begin pack_facturare.ntip := 1; pack_facturare.adauga_articol_factura(] + ;
[999002, 691698485, '', '', NULL, NULL, 0, NULL, NULL, ] + ;
[100, 1, 0, 1, 1, 0, 'XXXX', 1, 1, 1, NULL, NULL, 100, NULL, NULL, 8, NULL, NULL); ] + ;
[select proc_tvav into ?@pnRezultatElse from vanzari_detalii_temp where id_temp = 999002; end;]
lnSuccesApel2 = goExecutor.oExecute(lcSqlApel2)
llOk = (lnSuccesApel2 >= 0)
STRTOFILE('goExecutor.cEroare dupa apel: [' + NVL(goExecutor.cEroare,'') + ']' + CHR(13) + CHR(10), gcErrLog, 1)
DO asserteaza WITH 'ELSE-1 apelul la adauga_articol_factura a reusit (fara exceptie Oracle)', llOk, TRANSFORM(lnSuccesApel2)
IF llOk
lnProcTvavTemp = NVL(pnRezultatElse, -1)
STRTOFILE('ELSE proc_tvav in VANZARI_DETALII_TEMP: ' + TRANSFORM(lnProcTvavTemp) + ;
' (salvat_pe_document=' + TRANSFORM(lnProcTvavSalvat) + ', cota_noua_asteptata=1.09)' + CHR(13) + CHR(10), gcErrLog, 1)
DO asserteaza WITH 'ELSE-2 PROC_TVAV = cel salvat pe document (decizia 3, flag implicit 0 - trebuie sa PICE, neschimbat fata de azi)', ;
lnProcTvavTemp = lnProcTvavSalvat, TRANSFORM(lnProcTvavSalvat) + ' -> ' + TRANSFORM(lnProcTvavTemp)
DO asserteaza WITH 'ELSE-3 (control ca testul masoara ceva) cota noua din JTVA_COLOANE chiar a ajuns in TEMP', ;
lnProcTvavTemp = 1.09, TRANSFORM(lnProcTvavTemp)
ENDIF
DO CazElseRevert WITH lnCotaVeche
ENDPROC
PROCEDURE CazElseRevert
LPARAMETERS tnCotaVeche
LOCAL llOk
llOk = goExecutor.oExecuta([update jtva_coloane set cota_tva = ] + TRANSFORM(tnCotaVeche) + [ where id_jtva_coloana = 1])
STRTOFILE('REVERT: update jtva_coloane=' + TRANSFORM(llOk) + CHR(13) + CHR(10), gcErrLog, 1)
DO asserteaza WITH 'ELSE-9 revert setup (jtva_coloane) reusit', llOk, TRANSFORM(llOk)
LOCAL lnVerif
lnVerif = Val1([select cota_tva as v from jtva_coloane where id_jtva_coloana = 1])
STRTOFILE('REVERT verificat: cota_tva acum = ' + TRANSFORM(lnVerif) + CHR(13) + CHR(10), gcErrLog, 1)
ENDPROC
*==============================================================================================
* CazContractFlag: acelasi setup ca CazContract, dar apel cu 28 argumente - flag=1,
* V_PROC_TVAV_TEMP = cota salvata (1.21). Cere parametrul nou pe pachet (dupa diff-ul din §7).
*==============================================================================================
PROCEDURE CazContractFlag
LOCAL lnIdPolArt, lnIdCtr, lnProcTvavVechi, lnIdCtrArtNou, lnProcTvavSalvat, lnProcTvavTemp
LOCAL llOk
lnIdPolArt = 1593
lnIdCtr = 61
lnProcTvavSalvat = Val1([select proc_tvav as v from vanzari_detalii where id_vanzare_det = 1604])
DO asserteaza WITH 'PRECONDITIE linia reala 1604 are proc_tvav salvat = 1.21', lnProcTvavSalvat = 1.21, TRANSFORM(lnProcTvavSalvat)
lnProcTvavVechi = Val1([select proc_tvav as v from crm_politici_pret_art where id_pol_art = ] + TRANSFORM(lnIdPolArt))
STRTOFILE('SETUP inainte: crm_politici_pret_art.proc_tvav (id_pol_art=' + TRANSFORM(lnIdPolArt) + ') = ' + TRANSFORM(lnProcTvavVechi) + CHR(13) + CHR(10), gcErrLog, 1)
llOk = goExecutor.oExecuta([update crm_politici_pret_art set proc_tvav = 1.09 where id_pol_art = ] + TRANSFORM(lnIdPolArt))
DO asserteaza WITH 'SETUP update politica reusit', llOk, TRANSFORM(llOk)
IF !llOk
RETURN
ENDIF
lnIdCtrArtNou = Val1([select seq_ctr_articole.nextval as v from dual])
llOk = goExecutor.oExecuta([insert into ctr_articole (id_ctr_art, id_ctr, id_pol_art, pret_unitar) values (] + ;
TRANSFORM(lnIdCtrArtNou) + [, ] + TRANSFORM(lnIdCtr) + [, ] + TRANSFORM(lnIdPolArt) + [, 0)])
DO asserteaza WITH 'SETUP insert ctr_articole reusit (id_ctr_art=' + TRANSFORM(lnIdCtrArtNou) + ')', llOk, TRANSFORM(llOk)
IF !llOk
DO CazContractRevert WITH lnIdPolArt, lnProcTvavVechi, -1
RETURN
ENDIF
*!* apel cu 28 argumente: flag pornit inainte de apel, V_PROC_TVAV_TEMP = cota salvata pe
*!* document. Flag resetat la 0 IN ACELASI bloc, dupa citirea rezultatului, ca sa nu ramana
*!* agatat pentru vreun apel urmator din aceeasi sesiune (goExecutor.oExecute e o singura
*!* conexiune reutilizata pe tot testul).
PRIVATE pnRezultatCtrFlag
pnRezultatCtrFlag = -999
LOCAL lcSqlApel
lcSqlApel = [begin pack_facturare.nregenerare_editare := 1; pack_facturare.ntip := 2; ] + ;
[pack_facturare.adauga_articol_factura(] + ;
[999003, 4294507173, '', '', 41, NULL, 0, NULL, NULL, ] + ;
[101.13, 3, 0, 1, 1, 0, 'XXXX', 1, 1, 37, NULL, NULL, 101.13, NULL, ] + TRANSFORM(lnIdCtr) + [, 8, NULL, NULL, ] + ;
ALLTRIM(STR(lnProcTvavSalvat,18,4)) + [); ] + ;
[select proc_tvav into ?@pnRezultatCtrFlag from vanzari_detalii_temp where id_temp = 999003; ] + ;
[pack_facturare.nregenerare_editare := 0; end;]
LOCAL lnSuccesApel
lnSuccesApel = goExecutor.oExecute(lcSqlApel)
llOk = (lnSuccesApel >= 0)
STRTOFILE('goExecutor.cEroare dupa apel: [' + NVL(goExecutor.cEroare,'') + ']' + CHR(13) + CHR(10), gcErrLog, 1)
DO asserteaza WITH 'CTRF-1 apelul (28 arg, flag=1) la adauga_articol_factura a reusit (fara exceptie Oracle)', llOk, TRANSFORM(lnSuccesApel)
IF llOk
lnProcTvavTemp = NVL(pnRezultatCtrFlag, -1)
STRTOFILE('CTRF proc_tvav in VANZARI_DETALII_TEMP: ' + TRANSFORM(lnProcTvavTemp) + ;
' (salvat_pe_document=' + TRANSFORM(lnProcTvavSalvat) + ', politica_noua=1.09)' + CHR(13) + CHR(10), gcErrLog, 1)
*!* ASERTUL CENTRAL - cu flag=1 SI V_PROC_TVAV_TEMP trimis, TREBUIE sa TREACA: cota
*!* pastrata = cea salvata, nu cea noua din politica
DO asserteaza WITH 'CTRF-2 PROC_TVAV = cel salvat pe document (decizia 3, flag=1 - pastrat)', ;
lnProcTvavTemp = lnProcTvavSalvat, TRANSFORM(lnProcTvavSalvat) + ' -> ' + TRANSFORM(lnProcTvavTemp)
DO asserteaza WITH 'CTRF-3 (control) cota pastrata NU e cea noua a politicii (1.09)', ;
lnProcTvavTemp <> 1.09, TRANSFORM(lnProcTvavTemp)
ENDIF
DO CazContractRevert WITH lnIdPolArt, lnProcTvavVechi, lnIdCtrArtNou
ENDPROC
*==============================================================================================
* CazElseFlag: acelasi setup ca CazElse, dar apel cu 28 argumente - flag=1, V_PROC_TVAV_TEMP =
* cota salvata (1.19).
*==============================================================================================
PROCEDURE CazElseFlag
LOCAL lnCotaVeche, lnProcTvavSalvat, lnProcTvavTemp, llOk
lnProcTvavSalvat = Val1([select proc_tvav as v from vanzari_detalii where id_vanzare_det = 481])
DO asserteaza WITH 'PRECONDITIE linia reala 481 are proc_tvav salvat = 1.19', lnProcTvavSalvat = 1.19, TRANSFORM(lnProcTvavSalvat)
lnCotaVeche = Val1([select cota_tva as v from jtva_coloane where id_jtva_coloana = 1])
STRTOFILE('SETUP inainte: jtva_coloane.cota_tva (id=1) = ' + TRANSFORM(lnCotaVeche) + CHR(13) + CHR(10), gcErrLog, 1)
DO asserteaza WITH 'PRECONDITIE cota_tva porneste de la 19', lnCotaVeche = 19, TRANSFORM(lnCotaVeche)
llOk = goExecutor.oExecuta([update jtva_coloane set cota_tva = 9 where id_jtva_coloana = 1])
DO asserteaza WITH 'SETUP update jtva_coloane reusit', llOk, TRANSFORM(llOk)
IF !llOk
RETURN
ENDIF
PRIVATE pnRezultatElseFlag
pnRezultatElseFlag = -999
LOCAL lcSqlApel2, lnSuccesApel2
lcSqlApel2 = [begin pack_facturare.nregenerare_editare := 1; pack_facturare.ntip := 1; ] + ;
[pack_facturare.adauga_articol_factura(] + ;
[999004, 691698485, '', '', NULL, NULL, 0, NULL, NULL, ] + ;
[100, 1, 0, 1, 1, 0, 'XXXX', 1, 1, 1, NULL, NULL, 100, NULL, NULL, 8, NULL, NULL, ] + ;
ALLTRIM(STR(lnProcTvavSalvat,18,4)) + [); ] + ;
[select proc_tvav into ?@pnRezultatElseFlag from vanzari_detalii_temp where id_temp = 999004; ] + ;
[pack_facturare.nregenerare_editare := 0; end;]
lnSuccesApel2 = goExecutor.oExecute(lcSqlApel2)
llOk = (lnSuccesApel2 >= 0)
STRTOFILE('goExecutor.cEroare dupa apel: [' + NVL(goExecutor.cEroare,'') + ']' + CHR(13) + CHR(10), gcErrLog, 1)
DO asserteaza WITH 'ELSEF-1 apelul (28 arg, flag=1) la adauga_articol_factura a reusit (fara exceptie Oracle)', llOk, TRANSFORM(lnSuccesApel2)
IF llOk
lnProcTvavTemp = NVL(pnRezultatElseFlag, -1)
STRTOFILE('ELSEF proc_tvav in VANZARI_DETALII_TEMP: ' + TRANSFORM(lnProcTvavTemp) + ;
' (salvat_pe_document=' + TRANSFORM(lnProcTvavSalvat) + ', cota_noua_asteptata=1.09)' + CHR(13) + CHR(10), gcErrLog, 1)
DO asserteaza WITH 'ELSEF-2 PROC_TVAV = cel salvat pe document (decizia 3, flag=1 - pastrat)', ;
lnProcTvavTemp = lnProcTvavSalvat, TRANSFORM(lnProcTvavSalvat) + ' -> ' + TRANSFORM(lnProcTvavTemp)
DO asserteaza WITH 'ELSEF-3 (control) cota pastrata NU e cea noua din JTVA_COLOANE (1.09)', ;
lnProcTvavTemp <> 1.09, TRANSFORM(lnProcTvavTemp)
ENDIF
DO CazElseRevert WITH lnCotaVeche
ENDPROC
*==============================================================================================
FUNCTION Val1
LPARAMETERS tcSql
LOCAL lnRet
lnRet = -1
IF USED('v_val10')
USE IN v_val10
ENDIF
IF goExecutor.oExecuta(tcSql, 'v_val10')
SELECT v_val10
IF RECCOUNT('v_val10') > 0
GO TOP
lnRet = NVL(v_val10.v, -1)
ENDIF
USE IN v_val10
ELSE
STRTOFILE('EROARE Val1: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
ENDIF
RETURN lnRet
ENDFUNC
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)
gnFail = gnFail + 1
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDPROC