#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:
421
utile/Teste/editare_factura/test_s10_proc_tvav.prg
Normal file
421
utile/Teste/editare_factura/test_s10_proc_tvav.prg
Normal file
@@ -0,0 +1,421 @@
|
||||
* 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
|
||||
Reference in New Issue
Block a user