#6 editare factura emisa: S4 runda 3 completa (pagina de articole editabila)
frm_modific2024, pgfArticole.PAGE3 - editare in memorie, fara scriere in Oracle (aceea ramane S5). - sub-blocul A: cantitate/pret/pret_cu_tva editabile inline, marcaj lmodificat pe linie, coloana valoare pe linie - sub-blocul B: stergere logica de linii (sters/DynamicForeColor gri) si adaugare de linii prin frm_articol_factura, cu alegerea articolului prin caut_articol() - sub-blocul C: bara de totaluri sub grid (total linii convertit RON la cursul documentului, discount de antet editabil, total net), ascunsa pe transfer/custodie; verdict de corelatie ACT/RUL informativ, cu 3 stari - suma ACT: sold net debit-credit, cont pe tip de document (4111 / 418 / 461, iar pe rate/contract 4111, 411 sau 461) - suma RUL: doar ID_TIP_RULAJ = 0, adica miscarile reale; perechile ID_TIP_RULAJ = 3 sunt virtuale (tin locul procesului verbal de schimbare de pret) si nu intra in suma. Corectie cu liniile nestocate, marcata "ajustat" - adaugarea de linii pe document in valuta: dialogul primeste tip_valuta si cursul documentului de pe tvanz, deci pretul se introduce direct in valuta; ofacturare.vc2 ramane neatins - cei 5 apelanti frm_modific2024 (afisjurcom, anaf_efactura, cele doua .sc2 de import) pregatesc cursorul de articole inainte de Createobject, gardat pe SET PROCEDURE - registrul jurnal din ROACONT/ROAGEST ramane neschimbat Teste headless pe MARIUSM_AUTO, suite care isi descopera singure documentele: test_page3_articole 14/2 (cele 2 = artefact de grid nematerializat headless, acoperit pe ecran), test_incarca_vanzare_din_nota 5/0, test_adauga_linie_articol 20/0, test_adauga_linie_valuta 16/0, test_ui_sterge_linie 8/0, test_verdict_act_rul 26/0. docs/todos.txt: punctele 13 si 20, scrise de Marius. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
This commit is contained in:
159
utile/Teste/editare_factura/descopera_caz_test.prg
Normal file
159
utile/Teste/editare_factura/descopera_caz_test.prg
Normal file
@@ -0,0 +1,159 @@
|
||||
* descopera_caz_test.prg
|
||||
* Alege la rulare documentul de test pentru suitele de editare factura, dupa PROPRIETATEA ceruta de
|
||||
* asertie, nu dupa identitatea lui. VANZARI.COD se realoca la fiecare salvare a notei
|
||||
* (pack_contafin.finalizeaza_modificare_nota -> pack_facturare.actualizeaza_vanzari), deci orice
|
||||
* ancorare pe cod moare tacut; ID_VANZARE ramane, dar nici el nu e cunoscut dinainte.
|
||||
*
|
||||
* DescoperaCazTest(<nume caz>, <alias destinatie>) -> .T. daca a gasit un document, lasand in alias
|
||||
* un singur rand cu cod, an, luna, id_vanzare, tip, nlin (plus nract/serie_act/dataact/nract_fara
|
||||
* pentru cazul de coliziune). Pe .F. aliasul ramane cu 0 randuri.
|
||||
*
|
||||
* Interogarile merg pe VACT_TOT / VRUL_TOT / VANZARI / VANZARI_DETALII, adica pe alt drum decat
|
||||
* functiile verificate (IncarcaVanzareNota, IncarcaVanzareDinNota, IncarcaArticoleFactura): valorile
|
||||
* asteptate raman independente de codul aflat sub test.
|
||||
*
|
||||
* Cazuri:
|
||||
* FACTURA_ARTICOLE factura (tip=1) activa, cu linii active, a carei nota are PRIMUL rand
|
||||
* (min id_act) pe acelasi (nract, serie_act, dataact) ca vanzarea
|
||||
* NEFACTURA_ARTICOLE la fel, dar tip <> 1 (detectia merge pe orice tip de document)
|
||||
* FARA_RULAJE document cu linii active si ZERO rulaje active pe (cod, an, luna)
|
||||
* PRIM_RAND_ORB nota al carei PRIM rand NU duce la vanzare, dar un triplet ulterior da
|
||||
* COLIZIUNE_COD la fel, plus cod cu 2+ randuri active in VANZARI si un nract din nota
|
||||
* fara corespondent in VANZARI
|
||||
* NOTA_FARA_VANZARI nota activa fara rand in VANZARI pe niciun triplet
|
||||
|
||||
|
||||
FUNCTION DescoperaCazTest
|
||||
LPARAMETERS tcCaz, tcAlias
|
||||
|
||||
LOCAL lcAlias, lcNlin, lcPrim, lcJoinP, lcTriplete, lcJoinT, lcOrb, lcNractFara, lcSql, lnSucces
|
||||
|
||||
lcAlias = IIF(Type('tcAlias') = 'C' AND !Empty(m.tcAlias), m.tcAlias, 'crscaz')
|
||||
|
||||
lcNlin = [(select count(*) from vanzari_detalii d where d.id_vanzare=v.id_vanzare and d.sters=0)]
|
||||
|
||||
*!* p = primul rand al fiecarei note (min id_act), adica exact randul pe care cade un Go Top In tact
|
||||
lcPrim = [(select n.cod, n.an, n.luna, x.nract, x.serie_act, x.dataact from ] + ;
|
||||
[(select cod, an, luna, min(id_act) idmin from vact_tot where sters=0 group by cod, an, luna) n ] + ;
|
||||
[join vact_tot x on x.id_act = n.idmin) p]
|
||||
|
||||
*!* p = toate tripletele distincte ale notei, ca in IncarcaVanzareDinNota
|
||||
lcTriplete = [(select distinct cod, an, luna, nract, serie_act, dataact from vact_tot where sters=0) p]
|
||||
|
||||
lcJoinP = [join vanzari v on v.cod=p.cod and nvl(v.numar_act,-1)=nvl(p.nract,-1) ] + ;
|
||||
[and nvl(v.serie_act,' ')=nvl(p.serie_act,' ') and trunc(v.data_act)=trunc(p.dataact) and v.sters=0]
|
||||
|
||||
*!* nota la care primul rand nu se potriveste cu niciun rand din VANZARI
|
||||
lcOrb = [not exists (select 1 from ] + ;
|
||||
[(select cod, an, luna, min(id_act) idmin from vact_tot where sters=0 group by cod, an, luna) n ] + ;
|
||||
[join vact_tot x on x.id_act=n.idmin ] + ;
|
||||
[join vanzari w on w.cod=x.cod and nvl(w.numar_act,-1)=nvl(x.nract,-1) ] + ;
|
||||
[and nvl(w.serie_act,' ')=nvl(x.serie_act,' ') and trunc(w.data_act)=trunc(x.dataact) and w.sters=0 ] + ;
|
||||
[where n.cod=p.cod and n.an=p.an and n.luna=p.luna)]
|
||||
|
||||
*!* tripletul din nota care NU are corespondent in VANZARI - cazul negativ al filtrului compus;
|
||||
*!* cele trei coloane trebuie luate de pe ACELASI rand, de aceea "keep (dense_rank first ...)"
|
||||
lcNractFara = [(select min(y.<COL>) keep (dense_rank first order by y.nract) from ] + ;
|
||||
[(select distinct cod, an, luna, nract, serie_act, dataact from vact_tot where sters=0) y ] + ;
|
||||
[where y.cod=p.cod and y.an=p.an and y.luna=p.luna and not exists ] + ;
|
||||
[(select 1 from vanzari w where w.cod=y.cod and nvl(w.numar_act,-1)=nvl(y.nract,-1) ] + ;
|
||||
[and nvl(w.serie_act,' ')=nvl(y.serie_act,' ') and trunc(w.data_act)=trunc(y.dataact) and w.sters=0))]
|
||||
|
||||
DO CASE
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'FACTURA_ARTICOLE'
|
||||
lcSql = [select * from (select v.id_vanzare, p.cod, p.an, p.luna, v.tip, ] + m.lcNlin + [ nlin from ] + ;
|
||||
m.lcPrim + [ ] + m.lcJoinP + [ where v.tip = 1 and ] + m.lcNlin + [ > 0 ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'NEFACTURA_ARTICOLE'
|
||||
lcSql = [select * from (select v.id_vanzare, p.cod, p.an, p.luna, v.tip, ] + m.lcNlin + [ nlin from ] + ;
|
||||
m.lcPrim + [ ] + m.lcJoinP + [ where v.tip <> 1 and ] + m.lcNlin + [ > 0 ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'FARA_RULAJE'
|
||||
lcSql = [select * from (select v.id_vanzare, p.cod, p.an, p.luna, v.tip, ] + m.lcNlin + [ nlin from ] + ;
|
||||
m.lcPrim + [ ] + m.lcJoinP + [ where ] + m.lcNlin + [ > 0 ] + ;
|
||||
[and not exists (select 1 from vrul_tot r where r.cod=p.cod and r.an=p.an and r.luna=p.luna and r.sters=0) ] + ;
|
||||
[and not exists (select 1 from vrul_obinv_tot r where r.cod=p.cod and r.an=p.an and r.luna=p.luna and r.sters=0) ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'PRIM_RAND_ORB'
|
||||
lcSql = [select * from (select v.id_vanzare, p.cod, p.an, p.luna, v.tip, ] + m.lcNlin + [ nlin from ] + ;
|
||||
m.lcTriplete + [ ] + m.lcJoinP + [ where ] + m.lcNlin + [ > 0 and ] + m.lcOrb + [ ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'COLIZIUNE_COD'
|
||||
lcSql = [select * from (select v.id_vanzare, p.cod, p.an, p.luna, v.tip, ] + m.lcNlin + [ nlin, ] + ;
|
||||
[p.nract, p.serie_act, p.dataact, ] + ;
|
||||
Strtran(m.lcNractFara, [<COL>], [nract]) + [ nract_fara, ] + ;
|
||||
Strtran(m.lcNractFara, [<COL>], [serie_act]) + [ serie_fara, ] + ;
|
||||
Strtran(m.lcNractFara, [<COL>], [dataact]) + [ data_fara from ] + ;
|
||||
m.lcTriplete + [ ] + m.lcJoinP + [ where ] + m.lcNlin + [ > 0 and ] + m.lcOrb + [ ] + ;
|
||||
[and (select count(distinct v2.id_vanzare) from vanzari v2 where v2.cod=p.cod and v2.sters=0) >= 2 ] + ;
|
||||
[and ] + Strtran(m.lcNractFara, [<COL>], [nract]) + [ is not null ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'NOTA_FARA_VANZARI'
|
||||
lcSql = [select * from (select p.cod, p.an, p.luna, 0 id_vanzare, 0 tip, 0 nlin from ] + ;
|
||||
[(select cod, an, luna from vact_tot where sters=0 and cod > 0 group by cod, an, luna) p ] + ;
|
||||
[where not exists (select 1 from vact_tot x ] + ;
|
||||
[join vanzari v on v.cod=x.cod and nvl(v.numar_act,-1)=nvl(x.nract,-1) ] + ;
|
||||
[and nvl(v.serie_act,' ')=nvl(x.serie_act,' ') and trunc(v.data_act)=trunc(x.dataact) and v.sters=0 ] + ;
|
||||
[where x.cod=p.cod and x.an=p.an and x.luna=p.luna and x.sters=0) ] + ;
|
||||
[order by p.an desc, p.luna desc, p.cod desc) where rownum = 1]
|
||||
|
||||
OTHERWISE
|
||||
CreeazaCursorCazGol(m.lcAlias)
|
||||
RETURN .F.
|
||||
ENDCASE
|
||||
|
||||
IF Used('v_caz')
|
||||
Use In v_caz
|
||||
ENDIF
|
||||
|
||||
lnSucces = goExecutor.oExecute(m.lcSql, [v_caz])
|
||||
goExecutor.oReset()
|
||||
|
||||
IF m.lnSucces < 0
|
||||
CreeazaCursorCazGol(m.lcAlias)
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
IF Used(m.lcAlias)
|
||||
Use In (m.lcAlias)
|
||||
ENDIF
|
||||
SELECT * FROM v_caz INTO CURSOR (m.lcAlias) READWRITE
|
||||
USE IN v_caz
|
||||
|
||||
RETURN (Reccount(m.lcAlias) = 1)
|
||||
ENDFUNC && DescoperaCazTest
|
||||
|
||||
|
||||
FUNCTION CreeazaCursorCazGol
|
||||
LPARAMETERS tcAlias
|
||||
|
||||
LOCAL lcAlias
|
||||
lcAlias = IIF(Type('tcAlias') = 'C' AND !Empty(m.tcAlias), m.tcAlias, 'crscaz')
|
||||
|
||||
IF Used(m.lcAlias)
|
||||
Use In (m.lcAlias)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.lcAlias) (id_vanzare I, cod I, an I, luna I, tip I, nlin I)
|
||||
ENDFUNC && CreeazaCursorCazGol
|
||||
|
||||
|
||||
*!* descrierea pe o linie a cazului descoperit, pentru log
|
||||
FUNCTION DescrieCazTest
|
||||
LPARAMETERS tcCaz, tcAlias, tlGasit
|
||||
|
||||
IF !m.tlGasit
|
||||
RETURN ' ' + Padr(m.tcCaz, 20) + ' NEGASIT - niciun document nu satisface conditia'
|
||||
ENDIF
|
||||
|
||||
RETURN ' ' + Padr(m.tcCaz, 20) + ' cod=' + Transform(Evaluate(m.tcAlias + '.cod')) + ;
|
||||
' an=' + Transform(Evaluate(m.tcAlias + '.an')) + ;
|
||||
' luna=' + Transform(Evaluate(m.tcAlias + '.luna')) + ;
|
||||
' id_vanzare=' + Transform(Evaluate(m.tcAlias + '.id_vanzare')) + ;
|
||||
' tip=' + Transform(Evaluate(m.tcAlias + '.tip')) + ;
|
||||
' linii=' + Transform(Evaluate(m.tcAlias + '.nlin'))
|
||||
ENDFUNC && DescrieCazTest
|
||||
173
utile/Teste/editare_factura/test_adauga_linie_articol.prg
Normal file
173
utile/Teste/editare_factura/test_adauga_linie_articol.prg
Normal file
@@ -0,0 +1,173 @@
|
||||
* test_adauga_linie_articol.prg
|
||||
* Verifica S4 runda 3, sub-blocul B partea 2 (adaugarea de linii pe pagina de articole):
|
||||
* - CreeazaPoArticolNouTvd (ofacturare_editare.prg): obiectul poArticol gol, cu proprietatile
|
||||
* cerute de frm_articol_factura, valori implicite corecte (cantitate=1, gestionabil=0,
|
||||
* preturi_cu_tva=0, proc_tvav NULL - ca Init sa aleaga singur cota standard)
|
||||
* - Thisform.AdaugaLinieTvdDinArticol (omodificari.vc2, frm_modific2024): adauga in tvd o linie
|
||||
* noua cu id_vanzare_det=0 dintr-un poArticol deja completat (simuleaza ce lasa dialogul dupa
|
||||
* OK, fara sa deschida dialogul modal - netestabil headless, vezi raportul) - valoarea, flagul
|
||||
* pret_cu_tva, lmodificat si bara de totaluri (ActualizeazaBaraTotaluri) trebuie actualizate
|
||||
* Documentul nu e ancorat pe cod (se realoca la fiecare salvare) - descoperit prin descopera_caz_test.prg.
|
||||
* Nu scrie in Oracle - doar in cursorul tvd, in memorie. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_adauga_linie_articol_log.txt'
|
||||
STRTOFILE('start' + 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.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\descopera_caz_test.prg ADDITIVE
|
||||
|
||||
*!* test_init_env_auto incarca clasa omodificari din working copy-ul ROACONT (alt SET PATH) -
|
||||
*!* o eliberam si o reincarcam pe cea de sub test, cu cale completa
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
PUBLIC gnPass, gnFail
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
*========================= 1) CreeazaPoArticolNouTvd - obiect gol, valori implicite =========================
|
||||
LOCAL loArt
|
||||
loArt = CreeazaPoArticolNouTvd(9999, 'ART999', 'ARTICOL TEST NOU', 'BUC', '707')
|
||||
|
||||
DO asserteaza WITH 'id_articol preluat', loArt.id_articol == 9999, TRANSFORM(loArt.id_articol)
|
||||
DO asserteaza WITH 'codmat preluat', ALLTRIM(loArt.codmat) == 'ART999', loArt.codmat
|
||||
DO asserteaza WITH 'denumire preluata', ALLTRIM(loArt.denumire) == 'ARTICOL TEST NOU', loArt.denumire
|
||||
DO asserteaza WITH 'cantitate implicita = 1', loArt.cantitate == 1, TRANSFORM(loArt.cantitate)
|
||||
DO asserteaza WITH 'gestionabil = 0 (fara verificare de stoc - decizia 15)', loArt.gestionabil == 0, TRANSFORM(loArt.gestionabil)
|
||||
DO asserteaza WITH 'preturi_cu_tva = 0 (implicit fara TVA)', loArt.preturi_cu_tva == 0, TRANSFORM(loArt.preturi_cu_tva)
|
||||
DO asserteaza WITH 'proc_tvav NULL (Init alege singur cota standard)', ISNULL(loArt.proc_tvav), TRANSFORM(loArt.proc_tvav)
|
||||
DO asserteaza WITH 'discount_unitar = 0', loArt.discount_unitar == 0, TRANSFORM(loArt.discount_unitar)
|
||||
DO asserteaza WITH 'tip_valuta = 0 (RON)', loArt.tip_valuta == 0, TRANSFORM(loArt.tip_valuta)
|
||||
|
||||
*========================= 2) AdaugaLinieTvdDinArticol - pe un document real cu articole =========================
|
||||
LOCAL llCazA
|
||||
llCazA = DescoperaCazTest('FACTURA_ARTICOLE', 'crscaz_a')
|
||||
IF !llCazA
|
||||
STRTOFILE('EROARE: cazul FACTURA_ARTICOLE nu a fost gasit' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
STRTOFILE('caz A: cod=' + TRANSFORM(crscaz_a.cod) + ' id_vanzare=' + TRANSFORM(crscaz_a.id_vanzare) + ' nlin=' + TRANSFORM(crscaz_a.nlin) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, lnReccountInitial, lnReccountDupa, lnTotalInitial, lnTotalDupa
|
||||
LOCAL loArtNou, lnValoareAsteptata
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(crscaz_a.cod, crscaz_a.an, crscaz_a.luna, .F.)
|
||||
IF !llOk OR !Used('tact') OR Reccount('tact') = 0
|
||||
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat pe caz A' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
|
||||
DO asserteaza WITH 'formularul are articole (lAreArticoleVanzari)', loForm.lAreArticoleVanzari, TRANSFORM(loForm.lAreArticoleVanzari)
|
||||
|
||||
lnReccountInitial = Reccount('tvd')
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
lnTotalInitial = loForm.nTotalLiniiRon
|
||||
|
||||
*!* poArticol construit ca dupa un OK de dialog: cantitate=2, pret fara TVA=100, TVA 19%
|
||||
loArtNou = CreeazaPoArticolNouTvd(8001, 'ART001NOU', 'ARTICOL ADAUGAT TEST', 'BUC', '707')
|
||||
loArtNou.cantitate = 2
|
||||
loArtNou.preturi_cu_tva = 0
|
||||
loArtNou.proc_tvav = 1.19
|
||||
loArtNou.pretftva = 100
|
||||
loArtNou.discount_unitar = 0
|
||||
loArtNou.id_jtva_coloana = 1
|
||||
|
||||
loForm.AdaugaLinieTvdDinArticol(loArtNou)
|
||||
|
||||
lnReccountDupa = Reccount('tvd')
|
||||
DO asserteaza WITH 'Reccount(tvd) creste cu 1', lnReccountDupa == lnReccountInitial + 1, TRANSFORM(lnReccountDupa) + ' (initial ' + TRANSFORM(lnReccountInitial) + ')'
|
||||
|
||||
SELECT tvd
|
||||
GO BOTTOM
|
||||
DO asserteaza WITH 'linia noua: id_vanzare_det = 0', NVL(tvd.id_vanzare_det, -1) == 0, TRANSFORM(NVL(tvd.id_vanzare_det, -1))
|
||||
DO asserteaza WITH 'linia noua: id_vanzare = nIdVanzare', tvd.id_vanzare == loForm.nIdVanzare, TRANSFORM(tvd.id_vanzare)
|
||||
DO asserteaza WITH 'linia noua: id_articol preluat', tvd.id_articol == 8001, TRANSFORM(tvd.id_articol)
|
||||
DO asserteaza WITH 'linia noua: cantitate = 2', tvd.cantitate == 2, TRANSFORM(tvd.cantitate)
|
||||
DO asserteaza WITH 'linia noua: pret = 100 (pretftva, flag=0)', ROUND(tvd.pret, 2) == 100, TRANSFORM(tvd.pret)
|
||||
DO asserteaza WITH 'linia noua: sters = 0', NVL(tvd.sters, -1) == 0, TRANSFORM(NVL(tvd.sters, -1))
|
||||
DO asserteaza WITH 'linia noua: lmodificat = .T.', tvd.lmodificat == .T., TRANSFORM(tvd.lmodificat)
|
||||
|
||||
lnValoareAsteptata = ROUND(2 * 100 * 1.19, 2)
|
||||
DO asserteaza WITH 'linia noua: valoare = cantitate*pret*proc_tvav', ROUND(tvd.valoare, 2) == m.lnValoareAsteptata, TRANSFORM(tvd.valoare) + ' (asteptat ' + TRANSFORM(m.lnValoareAsteptata) + ')'
|
||||
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
lnTotalDupa = loForm.nTotalLiniiRon
|
||||
DO asserteaza WITH 'bara de totaluri creste exact cu valoarea liniei noi', ROUND(lnTotalDupa - lnTotalInitial, 2) == m.lnValoareAsteptata, TRANSFORM(lnTotalDupa) + ' (initial ' + TRANSFORM(lnTotalInitial) + ')'
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
loForm.Release()
|
||||
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('tact')
|
||||
Use In tact
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('trul')
|
||||
Use In trul
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
IF Used('trul_obinv')
|
||||
Use In trul_obinv
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
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: ' + 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
|
||||
190
utile/Teste/editare_factura/test_adauga_linie_valuta.prg
Normal file
190
utile/Teste/editare_factura/test_adauga_linie_valuta.prg
Normal file
@@ -0,0 +1,190 @@
|
||||
* test_adauga_linie_valuta.prg
|
||||
* Verifica AdaugaLinieTvdDinArticol pe un document in valuta, in ambele ramuri ale poArticol:
|
||||
* scenariul A (tip_valuta=0, dialogul a lucrat in RON) converteste pretul/discountul in valuta
|
||||
* documentului (tvanz.curs/multiplicator); scenariul B (tip_valuta=1, intrare directa in valuta)
|
||||
* citeste pretftva_val/discount_unitar_val direct, fara sa le mai reconverteasca. Ambele verifica
|
||||
* si preluarea id_valuta/nume_val de pe tvanz si recalculul corect al barei de totaluri RON.
|
||||
* Documentul e un caz real (FACTURA_ARTICOLE, gasit prin descopera_caz_test.prg), cu tvanz
|
||||
* suprascris manual dupa Show() ca sa simuleze un document in valuta (EURO, curs 5.2688) -
|
||||
* nu exista in schema un caz descoperibil prin tact/ACT care sa fie simultan "cu articole" si
|
||||
* "in valuta reala"; conversia se testeaza izolat, pe cursorul tvanz deja incarcat de formular.
|
||||
* Nu scrie in Oracle - doar in cursoare, in memorie. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_adauga_linie_valuta_log.txt'
|
||||
STRTOFILE('start' + 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.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\descopera_caz_test.prg ADDITIVE
|
||||
|
||||
*!* test_init_env_auto incarca clasa omodificari din working copy-ul ROACONT (alt SET PATH) -
|
||||
*!* o eliberam si o reincarcam pe cea de sub test, cu cale completa
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
PUBLIC gnPass, gnFail
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
LOCAL llCazA
|
||||
llCazA = DescoperaCazTest('FACTURA_ARTICOLE', 'crscaz_a')
|
||||
IF !llCazA
|
||||
STRTOFILE('EROARE: cazul FACTURA_ARTICOLE nu a fost gasit' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
STRTOFILE('caz A: cod=' + TRANSFORM(crscaz_a.cod) + ' id_vanzare=' + TRANSFORM(crscaz_a.id_vanzare) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, loArtNou, lnTotalInitial, lnTotalDupa, lnPretRonAsteptat
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(crscaz_a.cod, crscaz_a.an, crscaz_a.luna, .F.)
|
||||
IF !llOk OR !Used('tact') OR Reccount('tact') = 0
|
||||
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat pe caz A' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
|
||||
DO asserteaza WITH 'formularul are articole (lAreArticoleVanzari)', loForm.lAreArticoleVanzari, TRANSFORM(loForm.lAreArticoleVanzari)
|
||||
|
||||
*!* simuleaza un document in valuta (EURO, id_valuta=2 - confirmat pe date reale, id_vanzare=1037)
|
||||
SELECT tvanz
|
||||
REPLACE curs WITH 5.2688, multiplicator WITH 1, in_valuta WITH 1, id_valuta WITH 2, nume_val WITH 'EURO'
|
||||
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
lnTotalInitial = loForm.nTotalLiniiRon
|
||||
|
||||
*!* poArticol construit ca dupa un OK de dialog (dialogul lucreaza in RON): pret fara TVA = 1053.76
|
||||
*!* RON, echivalentul a 200 EUR la cursul 5.2688 - cantitate=1, fara discount, fara TVA (proc_tvav=1)
|
||||
loArtNou = CreeazaPoArticolNouTvd(8002, 'ART002VAL', 'ARTICOL VALUTA TEST', 'BUC', '707')
|
||||
loArtNou.cantitate = 1
|
||||
loArtNou.preturi_cu_tva = 0
|
||||
loArtNou.proc_tvav = 1
|
||||
loArtNou.pretftva = 1053.76
|
||||
loArtNou.discount_unitar = 0
|
||||
loArtNou.id_jtva_coloana = 1
|
||||
|
||||
loForm.AdaugaLinieTvdDinArticol(loArtNou)
|
||||
|
||||
SELECT tvd
|
||||
GO BOTTOM
|
||||
lnPretRonAsteptat = 1053.76
|
||||
DO asserteaza WITH 'linia noua: pret convertit in valuta documentului (200 EUR la curs 5.2688)', ROUND(tvd.pret, 2) == 200.00, TRANSFORM(tvd.pret)
|
||||
DO asserteaza WITH 'linia noua: id_valuta preluat de pe tvanz', NVL(tvd.id_valuta, -1) == 2, TRANSFORM(NVL(tvd.id_valuta, -1))
|
||||
DO asserteaza WITH 'linia noua: nume_val preluat de pe tvanz', ALLTRIM(NVL(tvd.nume_val, '')) == 'EURO', tvd.nume_val
|
||||
DO asserteaza WITH 'linia noua: valoare in valuta documentului (200, fara TVA/discount)', ROUND(tvd.valoare, 2) == 200.00, TRANSFORM(tvd.valoare)
|
||||
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
lnTotalDupa = loForm.nTotalLiniiRon
|
||||
DO asserteaza WITH 'bara de totaluri creste cu echivalentul RON corect (200 EUR * 5.2688)', ROUND(lnTotalDupa - lnTotalInitial, 2) == m.lnPretRonAsteptat, TRANSFORM(lnTotalDupa) + ' (initial ' + TRANSFORM(lnTotalInitial) + ')'
|
||||
|
||||
*!* decizia 35: intrare directa in valuta - CreeazaPoArticolNouTvd populat cu tip_valuta=1 si
|
||||
*!* Curs/multiplicator/nume_val/id_valuta ale documentului (tiparul frm_facturare_articole);
|
||||
*!* AdaugaLinieTvdDinArticol trebuie sa citeasca pretftva_val direct, FARA sa il mai reconverteasca
|
||||
*!* prin curs/multiplicator (ar fi o dubla conversie: valuta -> RON -> valuta)
|
||||
LOCAL loArtNou2, lnTotalInitial2, lnTotalDupa2
|
||||
loArtNou2 = CreeazaPoArticolNouTvd(8003, 'ART003VAL', 'ARTICOL VALUTA DIRECTA TEST', 'BUC', '707', ;
|
||||
.T., tvanz.curs, tvanz.multiplicator, tvanz.nume_val, tvanz.id_valuta)
|
||||
|
||||
DO asserteaza WITH 'CreeazaPoArticolNouTvd: tip_valuta=1 cand documentul e in valuta', loArtNou2.tip_valuta == 1, TRANSFORM(loArtNou2.tip_valuta)
|
||||
DO asserteaza WITH 'CreeazaPoArticolNouTvd: Curs preluat din tvanz', loArtNou2.Curs == 5.2688, TRANSFORM(loArtNou2.Curs)
|
||||
DO asserteaza WITH 'CreeazaPoArticolNouTvd: multiplicator preluat din tvanz', loArtNou2.multiplicator == 1, TRANSFORM(loArtNou2.multiplicator)
|
||||
DO asserteaza WITH 'CreeazaPoArticolNouTvd: nume_val preluat din tvanz', ALLTRIM(loArtNou2.nume_val) == 'EURO', loArtNou2.nume_val
|
||||
DO asserteaza WITH 'CreeazaPoArticolNouTvd: id_valuta preluat din tvanz', loArtNou2.id_valuta == 2, TRANSFORM(loArtNou2.id_valuta)
|
||||
|
||||
*!* pretul introdus de utilizator DIRECT in valuta (200 EUR) - nu se mai completeaza pretftva (RON),
|
||||
*!* exact ca la un dialog real cu tip_valuta=1 unde userul editeaza campul _val
|
||||
loArtNou2.cantitate = 1
|
||||
loArtNou2.preturi_cu_tva = 0
|
||||
loArtNou2.proc_tvav = 1
|
||||
loArtNou2.pretftva_val = 200.00
|
||||
loArtNou2.discount_unitar_val = 0
|
||||
loArtNou2.id_jtva_coloana = 1
|
||||
|
||||
lnTotalInitial2 = loForm.nTotalLiniiRon
|
||||
loForm.AdaugaLinieTvdDinArticol(loArtNou2)
|
||||
|
||||
SELECT tvd
|
||||
GO BOTTOM
|
||||
DO asserteaza WITH 'linia in valuta directa: pret in tvd ramane 200 (fara dubla conversie)', ROUND(tvd.pret, 2) == 200.00, TRANSFORM(tvd.pret)
|
||||
DO asserteaza WITH 'linia in valuta directa: id_valuta preluat de pe tvanz', NVL(tvd.id_valuta, -1) == 2, TRANSFORM(NVL(tvd.id_valuta, -1))
|
||||
DO asserteaza WITH 'linia in valuta directa: nume_val preluat de pe tvanz', ALLTRIM(NVL(tvd.nume_val, '')) == 'EURO', tvd.nume_val
|
||||
DO asserteaza WITH 'linia in valuta directa: valoare in valuta documentului (200, fara TVA/discount)', ROUND(tvd.valoare, 2) == 200.00, TRANSFORM(tvd.valoare)
|
||||
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
lnTotalDupa2 = loForm.nTotalLiniiRon
|
||||
DO asserteaza WITH 'bara de totaluri creste cu echivalentul RON corect (200 EUR * 5.2688, valuta directa)', ROUND(lnTotalDupa2 - lnTotalInitial2, 2) == 1053.76, TRANSFORM(lnTotalDupa2) + ' (initial ' + TRANSFORM(lnTotalInitial2) + ')'
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
loForm.Release()
|
||||
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('tact')
|
||||
Use In tact
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('trul')
|
||||
Use In trul
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
IF Used('trul_obinv')
|
||||
Use In trul_obinv
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
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: ' + 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
|
||||
117
utile/Teste/editare_factura/test_defect1_crsjtvatemp.prg
Normal file
117
utile/Teste/editare_factura/test_defect1_crsjtvatemp.prg
Normal file
@@ -0,0 +1,117 @@
|
||||
* test_defect1_crsjtvatemp.prg
|
||||
* Verifica fix-ul din frm_facturi.do_editare_factura (ofacturare_comun.vc2:3799-3804): inainte de
|
||||
* Createobject('frm_modific2024',...), metoda precreeaza crsJtvaTemp cu update_jtva_coloane("",
|
||||
* "crsJtvaTemp", 0) - acelasi tipar folosit de ooperatii_comune.prg:113 (viz_act, calea ROACONT
|
||||
* "registru jurnal > modificare" care functiona deja corect). Fara aceasta linie,
|
||||
* Column63.ControlSource din grid (Seek(...,'crsJtvaTemp','id_jtva')) crapa la constructia
|
||||
* formularului, fiindca cursorul nu exista inca.
|
||||
* Nu scrie in Oracle - doar SELECT-uri prin goExecutor si citiri de proprietati. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
LOCAL lcLog
|
||||
lcLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_defect1_crsjtvatemp_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), lcLog)
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = lcLog
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
*!* test_init_env_auto:139 incarca omodificari din copia ROACONT (alt working copy) - o eliberam
|
||||
*!* si o reincarcam pe cea DE SUB TEST, cu cale completa
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
DO verifica_defect1 WITH 1139934, 2021, 12, lcLog, 3, .T., 882
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE verifica_defect1
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcLog, tnPageCountAsteptat, tlAreArticoleAsteptat, tnIdVanzareAsteptat
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, llCrsJtvaInchisInainte, llCrsJtvaCreatDupa, lnPageCount, llAreArticole, lnIdVanzare
|
||||
|
||||
IF USED('crsJtvaTemp')
|
||||
USE IN crsJtvaTemp
|
||||
ENDIF
|
||||
llCrsJtvaInchisInainte = !USED('crsJtvaTemp')
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.)
|
||||
lnPageCount = -1
|
||||
llAreArticole = .F.
|
||||
lnIdVanzare = 0
|
||||
llCrsJtvaCreatDupa = .F.
|
||||
|
||||
IF llOk AND USED('tact') AND RECCOUNT('tact') > 0
|
||||
SELECT a.*, IIF(NVL(id_jtva_coloana,0)=0,0,1) AS cu_Tva FROM tact a INTO CURSOR tact READWRITE
|
||||
GO TOP IN tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
*-- linia din fix (ofacturare_comun.vc2:3801) - fara ea, grid-ul din frm_modific2024
|
||||
*-- crapa la constructie pe crsJtvaTemp lipsa
|
||||
update_jtva_coloane("", "crsJtvaTemp", 0)
|
||||
|
||||
llCrsJtvaCreatDupa = USED('crsJtvaTemp') AND RECCOUNT('crsJtvaTemp') >= 0
|
||||
|
||||
SELECT tact
|
||||
TRY
|
||||
loForm = CREATEOBJECT([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
lnPageCount = loForm.pgfArticole.PageCount
|
||||
llAreArticole = loForm.lAreArticoleVanzari
|
||||
lnIdVanzare = loForm.nIdVanzare
|
||||
loForm.Release()
|
||||
CATCH TO loExc
|
||||
STRTOFILE(' EXCEPTIE la Createobject/Show frm_modific2024: ' + TRANSFORM(loExc.ErrorNo) + ;
|
||||
' [' + loExc.Message + ']' + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDTRY
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- Defect 1 (crsJtvaTemp), cod=' + TRANSFORM(tnCod) + ' ---' + CHR(13) + CHR(10) + ;
|
||||
' crsJtvaTemp inchis inainte de apel = ' + TRANSFORM(llCrsJtvaInchisInainte) + CHR(13) + CHR(10) + ;
|
||||
' crsJtvaTemp creat de update_jtva_coloane (Used+Reccount>=0) = ' + TRANSFORM(llCrsJtvaCreatDupa) + CHR(13) + CHR(10) + ;
|
||||
' PageCount = ' + TRANSFORM(lnPageCount) + ' (asteptat ' + TRANSFORM(tnPageCountAsteptat) + ')' + CHR(13) + CHR(10) + ;
|
||||
' lAreArticoleVanzari = ' + TRANSFORM(llAreArticole) + ' (asteptat ' + TRANSFORM(tlAreArticoleAsteptat) + ')' + CHR(13) + CHR(10) + ;
|
||||
' nIdVanzare = ' + TRANSFORM(lnIdVanzare) + ' (asteptat ' + TRANSFORM(tnIdVanzareAsteptat) + ')' + CHR(13) + CHR(10) + ;
|
||||
' ' + IIF(llCrsJtvaInchisInainte AND llCrsJtvaCreatDupa AND lnPageCount == tnPageCountAsteptat AND llAreArticole == tlAreArticoleAsteptat AND lnIdVanzare == tnIdVanzareAsteptat, 'PASS', 'FAIL') + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
IF USED('actactan')
|
||||
USE IN actactan
|
||||
ENDIF
|
||||
IF USED('tact')
|
||||
USE IN tact
|
||||
ENDIF
|
||||
IF USED('rul_temp')
|
||||
USE IN rul_temp
|
||||
ENDIF
|
||||
IF USED('trul')
|
||||
USE IN trul
|
||||
ENDIF
|
||||
IF USED('rul_temp_obinv')
|
||||
USE IN rul_temp_obinv
|
||||
ENDIF
|
||||
IF USED('trul_obinv')
|
||||
USE IN trul_obinv
|
||||
ENDIF
|
||||
IF USED('crsJtvaTemp')
|
||||
USE IN crsJtvaTemp
|
||||
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
|
||||
@@ -1,11 +1,13 @@
|
||||
* test_incarca_vanzare_din_nota.prg
|
||||
* Smoke test izolat pentru IncarcaVanzareDinNota (ofacturare_editare.prg), inainte de a atinge
|
||||
* omodificari.vc2 runda 2. Verifica pe cazurile de regresie ale bugului "Go Top orb pe tact":
|
||||
* cod=1137874/an=2009/luna=8 -> trebuie sa gaseasca id_vanzare=506 (azi, cu Go Top orb, da 0 randuri)
|
||||
* cod=1139934/an=2021/luna=12 -> id_vanzare=882 (coliziune VANZARI.COD deja cunoscuta)
|
||||
* plus regresie pe cazurile vechi: cod=1140888 -> id_vanzare=1050; cod=1125486 -> nu gaseste (tact fara VANZARI)
|
||||
* o nota al carei prim rand nu duce la vanzare (cu Go Top orb da 0 randuri)
|
||||
* aceeasi situatie pe un cod cu coliziune in VANZARI
|
||||
* plus regresie pe o factura normala si pe o nota fara rand in VANZARI
|
||||
* plus cazul EOF: tact pozitionat deliberat la EOF (ca dupa CalculeazaTotal() din Show()) inainte de
|
||||
* apel - dovedeste ca "cod" se ia din cursorul de triplete (SELECT DISTINCT), nu de pe randul curent
|
||||
* Documentele nu sunt ancorate pe cod: VANZARI.COD se realoca la fiecare salvare a notei, deci se
|
||||
* descopera la rulare dupa proprietatea ceruta de asertie (descopera_caz_test.prg).
|
||||
* Nu atinge Oracle in scriere - doar SELECT-uri prin goExecutor. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
@@ -26,17 +28,61 @@ IF gnHandle <= 0
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\descopera_caz_test.prg ADDITIVE
|
||||
|
||||
DO verifica WITH 1137874, 2009, 8, 'blocant Go Top - prim rand INCASARE', lcLog, .T., 506
|
||||
DO verifica WITH 1139934, 2021, 12, 'coliziune VANZARI.COD', lcLog, .T., 882
|
||||
DO verifica WITH 1140888, (gnAn), (gnLuna), 'regresie runda 1 - factura normala', lcLog, .T., 1050
|
||||
DO verifica WITH 1125486, 2008, 2, 'regresie runda 1 - fara VANZARI', lcLog, .F., 0
|
||||
DO verifica_eof WITH 1137874, 2009, 8, lcLog, 506
|
||||
*!* cazurile de test, descoperite pe proprietate (nu ancorate pe cod - codul se realoca la salvare)
|
||||
LOCAL llCazA, llCazC, llCazD, llCazE
|
||||
llCazA = DescoperaCazTest('FACTURA_ARTICOLE', 'crscaz_a')
|
||||
llCazC = DescoperaCazTest('NOTA_FARA_VANZARI', 'crscaz_c')
|
||||
llCazD = DescoperaCazTest('PRIM_RAND_ORB', 'crscaz_d')
|
||||
llCazE = DescoperaCazTest('COLIZIUNE_COD', 'crscaz_e')
|
||||
|
||||
STRTOFILE('--- cazuri de test descoperite ---' + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('FACTURA_ARTICOLE', 'crscaz_a', llCazA) + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('NOTA_FARA_VANZARI', 'crscaz_c', llCazC) + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('PRIM_RAND_ORB', 'crscaz_d', llCazD) + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('COLIZIUNE_COD', 'crscaz_e', llCazE) + CHR(13) + CHR(10), lcLog, 1)
|
||||
|
||||
IF llCazD
|
||||
DO verifica WITH (crscaz_d.cod), (crscaz_d.an), (crscaz_d.luna), 'blocant Go Top - prim rand fara vanzare', lcLog, .T., (crscaz_d.id_vanzare)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'blocant Go Top - prim rand fara vanzare', lcLog
|
||||
ENDIF
|
||||
IF llCazE
|
||||
DO verifica WITH (crscaz_e.cod), (crscaz_e.an), (crscaz_e.luna), 'coliziune VANZARI.COD', lcLog, .T., (crscaz_e.id_vanzare)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'coliziune VANZARI.COD', lcLog
|
||||
ENDIF
|
||||
IF llCazA
|
||||
DO verifica WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), 'regresie runda 1 - factura normala', lcLog, .T., (crscaz_a.id_vanzare)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'regresie runda 1 - factura normala', lcLog
|
||||
ENDIF
|
||||
IF llCazC
|
||||
DO verifica WITH (crscaz_c.cod), (crscaz_c.an), (crscaz_c.luna), 'regresie runda 1 - fara VANZARI', lcLog, .F., 0
|
||||
ELSE
|
||||
DO caz_negasit WITH 'regresie runda 1 - fara VANZARI', lcLog
|
||||
ENDIF
|
||||
IF llCazD
|
||||
DO verifica_eof WITH (crscaz_d.cod), (crscaz_d.an), (crscaz_d.luna), lcLog, (crscaz_d.id_vanzare)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'EOF pe tact', lcLog
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
*!* cazul cerut de asertie nu exista in datele schemei - se raporteaza FAIL, nu se sare peste
|
||||
PROCEDURE caz_negasit
|
||||
LPARAMETERS tcEticheta, tcLog
|
||||
|
||||
STRTOFILE('--- ' + tcEticheta + ' ---' + CHR(13) + CHR(10) + ;
|
||||
' niciun document din schema nu satisface conditia cazului' + CHR(13) + CHR(10) + ;
|
||||
' FAIL' + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
* pozitioneaza tact deliberat la EOF (Go Bottom + Skip) inainte de IncarcaVanzareDinNota - dovedeste
|
||||
* ca "cod" nu se mai citeste de pe randul curent al aliasului (corectia care a inlocuit Evaluate(alias.cod))
|
||||
PROCEDURE verifica_eof
|
||||
|
||||
32
utile/Teste/editare_factura/test_nume_coloana_modificat.prg
Normal file
32
utile/Teste/editare_factura/test_nume_coloana_modificat.prg
Normal file
@@ -0,0 +1,32 @@
|
||||
*!* test izolat: verifica daca VFP accepta un camp de cursor numit "_modificat"
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
LOCAL lcLog
|
||||
lcLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_nume_coloana_modificat.log'
|
||||
IF FILE(m.lcLog)
|
||||
DELETE FILE (m.lcLog)
|
||||
ENDIF
|
||||
|
||||
ON ERROR DO logeaza WITH 'EROARE: ' + Message() + ' (linia ' + Transform(Lineno()) + ')'
|
||||
|
||||
CREATE CURSOR tprobA (id_vanzare_det I, _modificat L)
|
||||
APPEND BLANK
|
||||
REPLACE _modificat WITH .T.
|
||||
STRTOFILE('tprobA OK, _modificat=' + Transform(tprobA._modificat) + CHR(13) + CHR(10), m.lcLog, 1)
|
||||
USE IN tprobA
|
||||
|
||||
CREATE CURSOR tprobB (id_vanzare_det I, lmodificat L)
|
||||
APPEND BLANK
|
||||
REPLACE lmodificat WITH .T.
|
||||
STRTOFILE('tprobB OK, lmodificat=' + Transform(tprobB.lmodificat) + CHR(13) + CHR(10), m.lcLog, 1)
|
||||
USE IN tprobB
|
||||
|
||||
STRTOFILE('TERMINAT' + CHR(13) + CHR(10), m.lcLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE logeaza
|
||||
LPARAMETERS tcMesaj
|
||||
STRTOFILE(m.tcMesaj + CHR(13) + CHR(10), 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_nume_coloana_modificat.log', 1)
|
||||
RETURN
|
||||
ENDPROC
|
||||
@@ -1,17 +1,19 @@
|
||||
* test_page3_articole.prg
|
||||
* Verifica S4 runda 1+2 (PAGE3, view VVANZARI_ARTICOLE, pozitionare in tact, garda ROACONT/ROAGEST) pe date reale:
|
||||
* - IncarcaVanzareNota/IncarcaArticoleFactura (ofacturare_editare.prg) direct, pe cod=1140888,
|
||||
* cod=1140885 (au rand in VANZARI) si cod=1125486 (nota fara rand in VANZARI)
|
||||
* - cazul de coliziune pe cod: cod=1139934 are 4 randuri VANZARI cu acelasi cod - verifica ca
|
||||
* filtrul compus (cod+nract+serie_act+data_act) gaseste exact randul corect si NU gaseste
|
||||
* nimic pentru un nract fara corespondent (evitarea unei potriviri gresite)
|
||||
* - IncarcaVanzareNota/IncarcaArticoleFactura (ofacturare_editare.prg) direct, pe o factura si pe
|
||||
* un document de alt tip (amandoua cu rand in VANZARI) si pe o nota fara rand in VANZARI
|
||||
* - cazul de coliziune pe cod: un cod cu mai multe randuri VANZARI - verifica ca filtrul compus
|
||||
* (cod+nract+serie_act+data_act) gaseste exact randul corect si NU gaseste nimic pentru un
|
||||
* nract fara corespondent (evitarea unei potriviri gresite)
|
||||
* - frm_modific2024 instantiat ca in do_editare_factura (Createobject+Show): PageCount ajunge 3
|
||||
* pe documente cu rand in VANZARI, ramane 2 pe o nota fara VANZARI
|
||||
* - regresie runda 2: cod=1137874/an=2009/luna=8 si cod=1139934/an=2021/luna=12, unde primul
|
||||
* rand din tact e o INCASARE - Go Top orb (runda 1) rata id_vanzare, IncarcaVanzareDinNota il
|
||||
* gaseste prin toate tripletele distincte (nract,serie_act,dataact) din tact
|
||||
* - regresie runda 2: note al caror prim rand din tact nu duce la vanzare (tipic o INCASARE) -
|
||||
* Go Top orb (runda 1) rata id_vanzare, IncarcaVanzareDinNota il gaseste prin toate tripletele
|
||||
* distincte (nract,serie_act,dataact) din tact
|
||||
* - garda ROACONT/ROAGEST: cu ofacturare_editare.prg eliberat din SET PROCEDURE, Show() degradeaza
|
||||
* curat la PageCount=2, fara eroare
|
||||
* Documentele nu sunt ancorate pe cod: VANZARI.COD se realoca la fiecare salvare a notei, deci se
|
||||
* descopera la rulare dupa proprietatea ceruta de asertie (descopera_caz_test.prg).
|
||||
* Nu atinge Oracle in scriere - doar SELECT-uri prin goExecutor. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
@@ -32,6 +34,7 @@ IF gnHandle <= 0
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\descopera_caz_test.prg ADDITIVE
|
||||
|
||||
*!* OBLIGATORIU: test_init_env_auto:139 face "Set Classlib To omodificari Additive", iar SET PATH
|
||||
*!* e pe D:\ROA\ROACONT\..., deci se incarca copia ROACONT a clasei (alt working copy, fara
|
||||
@@ -40,34 +43,128 @@ SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDIT
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
*!* 0) cazurile de test, descoperite pe proprietate (nu ancorate pe cod - codul se realoca la salvare)
|
||||
LOCAL llCazA, llCazB, llCazC, llCazD, llCazE, llCazF
|
||||
llCazA = DescoperaCazTest('FACTURA_ARTICOLE', 'crscaz_a')
|
||||
llCazB = DescoperaCazTest('NEFACTURA_ARTICOLE', 'crscaz_b')
|
||||
llCazC = DescoperaCazTest('NOTA_FARA_VANZARI', 'crscaz_c')
|
||||
llCazD = DescoperaCazTest('PRIM_RAND_ORB', 'crscaz_d')
|
||||
llCazE = DescoperaCazTest('COLIZIUNE_COD', 'crscaz_e')
|
||||
llCazF = DescoperaCazTest('FARA_RULAJE', 'crscaz_f')
|
||||
|
||||
STRTOFILE('--- cazuri de test descoperite ---' + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('FACTURA_ARTICOLE', 'crscaz_a', llCazA) + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('NEFACTURA_ARTICOLE', 'crscaz_b', llCazB) + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('NOTA_FARA_VANZARI', 'crscaz_c', llCazC) + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('PRIM_RAND_ORB', 'crscaz_d', llCazD) + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('COLIZIUNE_COD', 'crscaz_e', llCazE) + CHR(13) + CHR(10) + ;
|
||||
DescrieCazTest('FARA_RULAJE', 'crscaz_f', llCazF) + CHR(13) + CHR(10), lcLog, 1)
|
||||
|
||||
*!* 1) IncarcaVanzareNota / IncarcaArticoleFactura direct, pe documente reale
|
||||
*!* (gnAn)/(gnLuna) in paranteze = pasare PRIN VALOARE: DO ... WITH paseaza prin REFERINTA, iar o
|
||||
*!* valorile in paranteze = pasare PRIN VALOARE: DO ... WITH paseaza prin REFERINTA, iar o
|
||||
*!* variabila pasata prin referinta devine invizibila sub numele ei propriu in procedura apelata -
|
||||
*!* de acolo venea dialogul nativ "View Parameter: Enter the value for gnAn" (?gnAn din SQL passthrough)
|
||||
DO verifica_vanzare_nota WITH 1140888, (gnAn), (gnLuna), 'A (factura, cu articole)', lcLog, .T., 1050, 1, 4
|
||||
DO verifica_vanzare_nota WITH 1140885, (gnAn), (gnLuna), 'B (aviz/tip -12, cu rand in VANZARI)', lcLog, .T., 1047, -12, -1
|
||||
DO verifica_vanzare_nota WITH 1125486, 2008, 2, 'C (nota fara rand in VANZARI)', lcLog, .F., 0, 0, -1
|
||||
IF llCazA
|
||||
DO verifica_vanzare_nota WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), 'A (factura, cu articole)', lcLog, .T., (crscaz_a.id_vanzare), (crscaz_a.tip), (crscaz_a.nlin)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'A (factura, cu articole)', lcLog
|
||||
ENDIF
|
||||
IF llCazB
|
||||
DO verifica_vanzare_nota WITH (crscaz_b.cod), (crscaz_b.an), (crscaz_b.luna), 'B (tip <> 1, cu rand in VANZARI)', lcLog, .T., (crscaz_b.id_vanzare), (crscaz_b.tip), (crscaz_b.nlin)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'B (tip <> 1, cu rand in VANZARI)', lcLog
|
||||
ENDIF
|
||||
IF llCazC
|
||||
DO verifica_vanzare_nota WITH (crscaz_c.cod), (crscaz_c.an), (crscaz_c.luna), 'C (nota fara rand in VANZARI)', lcLog, .F., 0, 0, -1
|
||||
ELSE
|
||||
DO caz_negasit WITH 'C (nota fara rand in VANZARI)', lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 2) cazul de coliziune pe cod=1139934 (4 randuri VANZARI cu acelasi cod) - filtrul compus
|
||||
DO verifica_coliziune_cod WITH lcLog
|
||||
*!* 2) cazul de coliziune pe cod (mai multe randuri VANZARI cu acelasi cod) - filtrul compus
|
||||
IF llCazE
|
||||
DO verifica_coliziune_cod WITH lcLog, (crscaz_e.cod), (crscaz_e.nract), (crscaz_e.serie_act), (crscaz_e.dataact), (crscaz_e.id_vanzare), ;
|
||||
(crscaz_e.nract_fara), (crscaz_e.serie_fara), (crscaz_e.data_fara)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'coliziune pe cod', lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 3) frm_modific2024 - PageCount pe factura reala (cod=1140888) si pe nota fara VANZARI (cod=1125486)
|
||||
DO verifica_pagecount_form WITH 1140888, (gnAn), (gnLuna), 'A (factura reala)', lcLog, 3, .T., 1050
|
||||
DO verifica_pagecount_form WITH 1125486, 2008, 2, 'C (nota fara VANZARI)', lcLog, 2, .F., 0
|
||||
*!* 3) frm_modific2024 - PageCount pe factura reala si pe nota fara VANZARI
|
||||
IF llCazA
|
||||
DO verifica_pagecount_form WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), 'A (factura reala)', lcLog, 3, .T., (crscaz_a.id_vanzare)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'frm_modific2024 A (factura reala)', lcLog
|
||||
ENDIF
|
||||
IF llCazC
|
||||
DO verifica_pagecount_form WITH (crscaz_c.cod), (crscaz_c.an), (crscaz_c.luna), 'C (nota fara VANZARI)', lcLog, 2, .F., 0
|
||||
ELSE
|
||||
DO caz_negasit WITH 'frm_modific2024 C (nota fara VANZARI)', lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 4) regresie runda 2 - blocantul "Go Top orb pe tact": prim rand din tact e o INCASARE, cu
|
||||
*!* nract/serie_act/dataact diferite de randul facturii - Go Top orb (runda 1) rata id_vanzare
|
||||
DO verifica_pagecount_form WITH 1137874, 2009, 8, 'D (Go Top orb - blocant runda 2)', lcLog, 3, .T., 506
|
||||
DO verifica_pagecount_form WITH 1139934, 2021, 12, 'E (coliziune cod + Go Top orb)', lcLog, 3, .T., 882
|
||||
*!* 4) regresie runda 2 - blocantul "Go Top orb pe tact": prim rand din tact nu duce la vanzare
|
||||
*!* (tipic o INCASARE, cu nract/serie_act/dataact diferite) - Go Top orb (runda 1) rata id_vanzare
|
||||
IF llCazD
|
||||
DO verifica_pagecount_form WITH (crscaz_d.cod), (crscaz_d.an), (crscaz_d.luna), 'D (Go Top orb - blocant runda 2)', lcLog, 3, .T., (crscaz_d.id_vanzare)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'frm_modific2024 D (Go Top orb)', lcLog
|
||||
ENDIF
|
||||
IF llCazE
|
||||
DO verifica_pagecount_form WITH (crscaz_e.cod), (crscaz_e.an), (crscaz_e.luna), 'E (coliziune cod + Go Top orb)', lcLog, 3, .T., (crscaz_e.id_vanzare)
|
||||
ELSE
|
||||
DO caz_negasit WITH 'frm_modific2024 E (coliziune cod + Go Top orb)', lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 4a) punctul A: pageframe vizibil cand exista doar articole (zero rulaje)
|
||||
IF llCazF
|
||||
DO verifica_pageframe_vizibil WITH (crscaz_f.cod), (crscaz_f.an), (crscaz_f.luna), lcLog
|
||||
ELSE
|
||||
DO caz_negasit WITH 'pgfArticole.Visible (zero rulaje)', lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 4b) S4 runda 3A: coloane editabile (cantitate/pret/pret_cu_tva), marcaj lmodificat, valoare
|
||||
IF llCazA
|
||||
DO verifica_editare_grid WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), lcLog
|
||||
ELSE
|
||||
DO caz_negasit WITH 'S4 runda 3A, editare grid', lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 4c) grid blank raportat de Marius: RecordSource-ul grdArticoleFactura dupa Show() - IncarcaArticoleFactura
|
||||
*!* inchide si recreeaza cursorul tvd (workarea noua), care rupe legatura grid-ului cu cursorul placeholder de la Load.
|
||||
*!* Inaintea gardei (5): garda elibereaza definitiv ofacturare_editare.prg, unde e definita IncarcaCursoareModificareNota
|
||||
IF llCazF
|
||||
DO verifica_recordsource_grid WITH (crscaz_f.cod), (crscaz_f.an), (crscaz_f.luna), lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 4d) PregatesteArticoleFacturaEditare (helper cei 5 apelanti): apelat ca la afisjurcom.do_modifica -
|
||||
*!* inainte de Createobject, pe tact deja incarcat - workarea tvd trebuie sa ramana identica intre
|
||||
*!* Load si Show (fallback-ul din Show nu se mai declanseaza, la fel ca la do_editare_factura)
|
||||
IF llCazA
|
||||
DO verifica_precarcare_articole WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), lcLog
|
||||
ELSE
|
||||
DO caz_negasit WITH 'PregatesteArticoleFacturaEditare (cei 5 apelanti)', lcLog
|
||||
ENDIF
|
||||
|
||||
*!* 5) garda ROACONT/ROAGEST: cu ofacturare_editare.prg eliberat, Show() nu mai gaseste garda si
|
||||
*!* degradeaza curat la PageCount=2 - ultimul test, elibereaza procedura definitiv pentru restul rularii
|
||||
DO verifica_garda_procedura_lipsa WITH 1140888, (gnAn), (gnLuna), lcLog
|
||||
IF llCazA
|
||||
DO verifica_garda_procedura_lipsa WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), lcLog
|
||||
ELSE
|
||||
DO caz_negasit WITH 'garda ofacturare_editare.prg lipsa', lcLog
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
*!* cazul cerut de asertie nu exista in datele schemei - se raporteaza FAIL, nu se sare peste
|
||||
PROCEDURE caz_negasit
|
||||
LPARAMETERS tcEticheta, tcLog
|
||||
|
||||
STRTOFILE('--- ' + tcEticheta + ' ---' + CHR(13) + CHR(10) + ;
|
||||
' niciun document din schema nu satisface conditia cazului' + CHR(13) + CHR(10) + ;
|
||||
' FAIL' + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE verifica_vanzare_nota
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcEticheta, tcLog, tlAsteptatGasit, tnIdVanzareAsteptat, tnTipAsteptat, tnLiniiAsteptate
|
||||
|
||||
@@ -133,33 +230,29 @@ PROCEDURE verifica_vanzare_nota
|
||||
ENDPROC
|
||||
|
||||
|
||||
* cod=1139934 are 4 randuri active in VANZARI cu acelasi cod (verificat pe MARIUSM_AUTO):
|
||||
* id_vanzare=882 numar_act=375/SSS, 883=24/PF, 884=25/PF, 885=26/PF - filtrul pe cod singur
|
||||
* ar fi ambiguu; filtrul compus (cod+nract+serie_act+data_act) trebuie sa gaseasca exact
|
||||
* randul cerut si sa NU gaseasca nimic pentru un nract fara corespondent in VANZARI (ACT are
|
||||
* randuri cu nract=13 pe acelasi cod, fara VANZARI corespunzator)
|
||||
* pe un cod cu 2+ randuri active in VANZARI, filtrul pe cod singur ar fi ambiguu; filtrul compus
|
||||
* (cod+nract+serie_act+data_act) trebuie sa gaseasca exact randul cerut si sa NU gaseasca nimic
|
||||
* pentru un nract prezent in nota, dar fara corespondent in VANZARI
|
||||
PROCEDURE verifica_coliziune_cod
|
||||
LPARAMETERS tcLog
|
||||
LPARAMETERS tcLog, tnCod, tnNract, tcSerieAct, tdDataAct, tnIdVanzareAsteptat, tnNractFara, tcSerieFara, tdDataFara
|
||||
|
||||
LOCAL ldDataAct, llOk1, llOk2
|
||||
LOCAL llOk1, llOk2
|
||||
|
||||
ldDataAct = DATE(2021,12,31)
|
||||
|
||||
IncarcaVanzareNota(1139934, 375, 'SSS', ldDataAct)
|
||||
llOk1 = (Reccount('tvanz') = 1 AND tvanz.id_vanzare == 882)
|
||||
IncarcaVanzareNota(tnCod, tnNract, tcSerieAct, tdDataAct)
|
||||
llOk1 = (Reccount('tvanz') = 1 AND tvanz.id_vanzare == tnIdVanzareAsteptat)
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
|
||||
IncarcaVanzareNota(1139934, 13, '', ldDataAct)
|
||||
IncarcaVanzareNota(tnCod, tnNractFara, tcSerieFara, tdDataFara)
|
||||
llOk2 = (Reccount('tvanz') = 0)
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- coliziune cod=1139934 (4 randuri VANZARI cu acelasi cod) ---' + CHR(13) + CHR(10) + ;
|
||||
' nract=375/SSS => gaseste id_vanzare=882: ' + IIF(llOk1, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ;
|
||||
' nract=13 (fara corespondent) => 0 randuri: ' + IIF(llOk2, 'PASS', 'FAIL') + CHR(13) + CHR(10), tcLog, 1)
|
||||
STRTOFILE('--- coliziune cod=' + TRANSFORM(tnCod) + ' (mai multe randuri VANZARI cu acelasi cod) ---' + CHR(13) + CHR(10) + ;
|
||||
' nract=' + TRANSFORM(tnNract) + '/' + ALLTRIM(NVL(tcSerieAct,'')) + ' => gaseste id_vanzare=' + TRANSFORM(tnIdVanzareAsteptat) + ': ' + IIF(llOk1, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ;
|
||||
' nract=' + TRANSFORM(tnNractFara) + ' (fara corespondent) => 0 randuri: ' + IIF(llOk2, 'PASS', 'FAIL') + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
@@ -232,6 +325,164 @@ PROCEDURE verifica_pagecount_form
|
||||
ENDPROC
|
||||
|
||||
|
||||
* S4 runda 3A: grdArticoleFactura editabil pe cantitate/pret/pret_cu_tva, marcaj lmodificat pe
|
||||
* linia atinsa, valoare recalculata (cantitate * (pret - discount_unitar), inmultit cu proc_tvav
|
||||
* cand pret_cu_tva = 0 - pret_cu_tva e flag, nu pret). Nu scrie in Oracle - doar in cursorul tvd.
|
||||
PROCEDURE verifica_editare_grid
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcLog
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, loGrid, llStructuraOk, llReadOnlyOk, llInitOk, llDupaEditareOk
|
||||
LOCAL lnCantitateVeche, lnValoareAsteptata, lnCantitateNoua, lnPretNet
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.)
|
||||
llStructuraOk = .F.
|
||||
llReadOnlyOk = .F.
|
||||
llInitOk = .F.
|
||||
llDupaEditareOk = .F.
|
||||
|
||||
IF llOk AND Used('tact') AND Reccount('tact') > 0
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
|
||||
loGrid = loForm.pgfArticole.Page3.grdArticoleFactura
|
||||
llStructuraOk = (loGrid.ColumnCount == 14) AND ;
|
||||
(Type('tvd.lmodificat') == 'L') AND (Type('tvd.valoare') == 'N')
|
||||
llReadOnlyOk = (loGrid.Column5.ReadOnly == .F.) AND (loGrid.Column6.ReadOnly == .F.) AND ;
|
||||
(loGrid.Column7.ReadOnly == .F.) AND (Pemstatus(loGrid.Column7, '_checkbox1', 5)) AND ;
|
||||
(loGrid.Column1.ReadOnly == .T.) AND (loGrid.Column14.ReadOnly == .T.)
|
||||
|
||||
IF Reccount('tvd') > 0
|
||||
Go Top In tvd
|
||||
lnPretNet = Nvl(tvd.pret, 0) - Nvl(tvd.discount_unitar, 0)
|
||||
llInitOk = (tvd.lmodificat == .F.) AND ;
|
||||
(Round(tvd.valoare, 2) == Round(tvd.cantitate * Iif(tvd.pret_cu_tva = 0, lnPretNet * tvd.proc_tvav, lnPretNet), 2))
|
||||
|
||||
lnCantitateVeche = tvd.cantitate
|
||||
lnCantitateNoua = lnCantitateVeche + 1
|
||||
Replace cantitate With lnCantitateNoua In tvd
|
||||
loForm.calculeaza_valori_articol()
|
||||
lnValoareAsteptata = Round(lnCantitateNoua * Iif(tvd.pret_cu_tva = 0, lnPretNet * tvd.proc_tvav, lnPretNet), 2)
|
||||
llDupaEditareOk = (tvd.lmodificat == .T.) AND (Round(tvd.valoare, 2) == lnValoareAsteptata)
|
||||
ENDIF
|
||||
|
||||
loForm.Release()
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- S4 runda 3A, editare grid, cod=' + TRANSFORM(tnCod) + ' ---' + CHR(13) + CHR(10) + ;
|
||||
' structura grid/cursor (ColumnCount=14, lmodificat L, valoare N) = ' + IIF(llStructuraOk, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ;
|
||||
' ReadOnly (cantitate/pret/pret_cu_tva editabile, checkbox pe pret_cu_tva, restul readonly) = ' + IIF(llReadOnlyOk, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ;
|
||||
' stare initiala (lmodificat=.F., valoare calculata corect) = ' + IIF(llInitOk, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ;
|
||||
' dupa editare cantitate (lmodificat=.T., valoare recalculata) = ' + IIF(llDupaEditareOk, 'PASS', 'FAIL') + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('tact')
|
||||
Use In tact
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('trul')
|
||||
Use In trul
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
IF Used('trul_obinv')
|
||||
Use In trul_obinv
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
* punctul A: pe un document fara rulaje (trul si trul_obinv goale), afiseaza_rulaje() colapseaza
|
||||
* this.pgfArticole.Visible - inainte de fix, asta ascundea si PAGE3 desi tvd are randuri; dupa fix,
|
||||
* conditia din Show() tine cont si de Reccount('tvd')
|
||||
PROCEDURE verifica_pageframe_vizibil
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcLog
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, llVizibilAsteptat, llVizibil, lnReccountTvd, lnReccountTrul, lnReccountTrulObinv
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.)
|
||||
llVizibil = .F.
|
||||
lnReccountTvd = -1
|
||||
lnReccountTrul = -1
|
||||
lnReccountTrulObinv = -1
|
||||
|
||||
IF llOk AND Used('tact') AND Reccount('tact') > 0
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
|
||||
llVizibil = loForm.pgfArticole.Visible
|
||||
lnReccountTvd = Reccount('tvd')
|
||||
lnReccountTrul = Reccount('trul')
|
||||
lnReccountTrulObinv = Reccount('trul_obinv')
|
||||
|
||||
loForm.Release()
|
||||
ENDIF
|
||||
|
||||
*!* oglinda conditiei de colaps din Show(): vizibil daca oricare din trul/trul_obinv/tvd are randuri
|
||||
llVizibilAsteptat = !(lnReccountTrul = 0 AND lnReccountTrulObinv = 0 AND lnReccountTvd <= 0)
|
||||
|
||||
STRTOFILE('--- pgfArticole.Visible, cod=' + TRANSFORM(tnCod) + ' (zero rulaje, doar articole) ---' + CHR(13) + CHR(10) + ;
|
||||
' Reccount(trul)=' + TRANSFORM(lnReccountTrul) + ', Reccount(trul_obinv)=' + TRANSFORM(lnReccountTrulObinv) + ;
|
||||
', Reccount(tvd)=' + TRANSFORM(lnReccountTvd) + CHR(13) + CHR(10) + ;
|
||||
' pgfArticole.Visible = ' + TRANSFORM(llVizibil) + ' (asteptat ' + TRANSFORM(llVizibilAsteptat) + ')' + CHR(13) + CHR(10) + ;
|
||||
' ' + IIF(llVizibil == llVizibilAsteptat, 'PASS', 'FAIL') + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('tact')
|
||||
Use In tact
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('trul')
|
||||
Use In trul
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
IF Used('trul_obinv')
|
||||
Use In trul_obinv
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
* verifica garda ROACONT/ROAGEST: cu ofacturare_editare.prg eliberat din SET PROCEDURE, Show()
|
||||
* trebuie sa degradeze curat la PageCount=2, fara eroare - ultimul test din suita, procedura
|
||||
* ramane eliberata pentru restul rularii (QUIT urmeaza imediat)
|
||||
@@ -298,6 +549,157 @@ PROCEDURE verifica_garda_procedura_lipsa
|
||||
ENDPROC
|
||||
|
||||
|
||||
*!* verifica ipoteza grid blank: grdArticoleFactura se leaga la construire pe workarea cursorului
|
||||
*!* placeholder tvd creat de Load; IncarcaArticoleFactura (apelat din Show) face Use In tvd + Select
|
||||
*!* Into Cursor tvd, care schimba workarea si rupe legatura, desi tvd ramane deschis cu date
|
||||
PROCEDURE verifica_recordsource_grid
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcLog
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, lnWorkareaLoad, lnWorkareaShow, lcRecordSourceShow, lnReccountTvd, llUsedTvd
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.)
|
||||
lnWorkareaLoad = 0
|
||||
lnWorkareaShow = 0
|
||||
lcRecordSourceShow = '?'
|
||||
lnReccountTvd = -1
|
||||
llUsedTvd = .F.
|
||||
|
||||
IF llOk AND Used('tact') AND Reccount('tact') > 0
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
|
||||
*!* dupa Createobject (Load), inainte de Show: tvd e cursorul placeholder gol, pe care s-a legat grid-ul
|
||||
lnWorkareaLoad = Select('tvd')
|
||||
|
||||
loForm.Show()
|
||||
|
||||
lnWorkareaShow = Select('tvd')
|
||||
lcRecordSourceShow = loForm.pgfArticole.Page3.grdArticoleFactura.RecordSource
|
||||
lnReccountTvd = Reccount('tvd')
|
||||
llUsedTvd = Used('tvd')
|
||||
|
||||
loForm.Release()
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- verificare RecordSource grid, cod=' + TRANSFORM(tnCod) + ' ---' + CHR(13) + CHR(10) + ;
|
||||
' workarea tvd dupa Load (inainte de Show) = ' + TRANSFORM(lnWorkareaLoad) + CHR(13) + CHR(10) + ;
|
||||
' workarea tvd dupa Show = ' + TRANSFORM(lnWorkareaShow) + CHR(13) + CHR(10) + ;
|
||||
' RecordSource grid dupa Show = [' + lcRecordSourceShow + ']' + CHR(13) + CHR(10) + ;
|
||||
' Used(tvd) dupa Show = ' + TRANSFORM(llUsedTvd) + ', Reccount(tvd) = ' + TRANSFORM(lnReccountTvd) + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('tact')
|
||||
Use In tact
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('trul')
|
||||
Use In trul
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
IF Used('trul_obinv')
|
||||
Use In trul_obinv
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
*!* apelul nou al celor 5 apelanti (afisjurcom.do_modifica, importmodifica, modificanote): tact deja
|
||||
*!* incarcat, PregatesteArticoleFacturaEditare('tact') inainte de Createobject - trebuie sa lege grid-ul
|
||||
*!* pe tvd deja plin, la fel ca do_editare_factura, fara ca fallback-ul din Show sa mai reinchida cursorul
|
||||
PROCEDURE verifica_precarcare_articole
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcLog
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, lnWorkareaLoad, lnWorkareaShow, lnReccountTvd, llUsedTvd
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.)
|
||||
lnWorkareaLoad = 0
|
||||
lnWorkareaShow = 0
|
||||
lnReccountTvd = -1
|
||||
llUsedTvd = .F.
|
||||
|
||||
IF llOk AND Used('tact') AND Reccount('tact') > 0
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
PregatesteArticoleFacturaEditare('tact')
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
|
||||
*!* dupa Createobject (Load): daca precarcarea a gasit articole, tvd e deja plin cu ele
|
||||
lnWorkareaLoad = Select('tvd')
|
||||
|
||||
loForm.Show()
|
||||
|
||||
lnWorkareaShow = Select('tvd')
|
||||
lnReccountTvd = Reccount('tvd')
|
||||
llUsedTvd = Used('tvd')
|
||||
|
||||
loForm.Release()
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- PregatesteArticoleFacturaEditare, cod=' + TRANSFORM(tnCod) + ' ---' + CHR(13) + CHR(10) + ;
|
||||
' workarea tvd dupa Load (cu precarcare) = ' + TRANSFORM(lnWorkareaLoad) + CHR(13) + CHR(10) + ;
|
||||
' workarea tvd dupa Show = ' + TRANSFORM(lnWorkareaShow) + ' (asteptat identica cu cea de dupa Load)' + CHR(13) + CHR(10) + ;
|
||||
' Used(tvd)=' + TRANSFORM(llUsedTvd) + ', Reccount(tvd)=' + TRANSFORM(lnReccountTvd) + CHR(13) + CHR(10) + ;
|
||||
' ' + IIF(lnWorkareaLoad == lnWorkareaShow AND lnWorkareaLoad > 0 AND lnReccountTvd > 0, 'PASS', 'FAIL') + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('tact')
|
||||
Use In tact
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('trul')
|
||||
Use In trul
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
IF Used('trul_obinv')
|
||||
Use In trul_obinv
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
IF Used('crsArticoleFactura')
|
||||
Use In crsArticoleFactura
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
|
||||
138
utile/Teste/editare_factura/test_ui_bara_totaluri.prg
Normal file
138
utile/Teste/editare_factura/test_ui_bara_totaluri.prg
Normal file
@@ -0,0 +1,138 @@
|
||||
* test_ui_bara_totaluri.prg - verifica pe formular vizibil (nu headless) bara de totaluri de pe
|
||||
* PAGE3 (sub-blocul C): totalul liniilor active convertit in RON la cursul documentului (decizia 33),
|
||||
* discountul de antet editabil (tvanz.discount, decizia 17), si ascunderea barei pe tipurile fara
|
||||
* suma comparabila (decizia 22). Document: cod=1139934/an=2021/luna=12 (id_vanzare=882, are si
|
||||
* rulaje, altfel Show() ascunde tot pgfArticole). Nu scrie in Oracle. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcSyncDir = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\uisync4\'
|
||||
gcUILog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_ui_bara_totaluri_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
PUBLIC gnPass, gnFail
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg ADDITIVE
|
||||
DO HarnessInit
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
*!* test_init_env_auto incarca intai copia omodificari din ROACONT - o eliberam si o reincarcam pe cea de sub test
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, loBara
|
||||
LOCAL lnTotalAsteptat, lnCurs, lnMultiplicator, lnDiscountVechi, lnDiscountNou
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(1139934, 2021, 12, .F.)
|
||||
IF !llOk OR !Used('tact') OR Reccount('tact') = 0
|
||||
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat pe cod=1139934' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
IncarcaArticoleFactura(882, 'crsArticoleFactura')
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
loForm.pgfArticole.ActivePage = 3
|
||||
DOEVENTS FORCE
|
||||
|
||||
loBara = loForm.pgfArticole.Page3
|
||||
|
||||
DO asserteaza WITH 'bara vizibila (tip comparabil)', loBara.lblTotalLiniiArt.Visible = .T., TRANSFORM(loBara.lblTotalLiniiArt.Visible)
|
||||
DO asserteaza WITH 'discount editabil', loBara.txtDiscountArt.ReadOnly = .F., TRANSFORM(loBara.txtDiscountArt.ReadOnly)
|
||||
DO asserteaza WITH 'total linii readonly', loBara.txtTotalLiniiArt.ReadOnly = .T., TRANSFORM(loBara.txtTotalLiniiArt.ReadOnly)
|
||||
|
||||
*!* totalul asteptat: suma liniilor active (tvd.sters<>1) convertita RON la cursul documentului
|
||||
lnCurs = NVL(tvanz.curs, 1)
|
||||
lnMultiplicator = NVL(tvanz.multiplicator, 1)
|
||||
IF m.lnMultiplicator = 0
|
||||
m.lnMultiplicator = 1
|
||||
ENDIF
|
||||
SELECT tvd
|
||||
SUM valoare TO lnTotalAsteptat FOR NVL(sters,0) <> 1
|
||||
lnTotalAsteptat = ROUND(m.lnTotalAsteptat * m.lnCurs / m.lnMultiplicator, 2)
|
||||
|
||||
STRTOFILE('curs=' + TRANSFORM(m.lnCurs) + ' multiplicator=' + TRANSFORM(m.lnMultiplicator) + ;
|
||||
' total_asteptat=' + TRANSFORM(m.lnTotalAsteptat) + ' bara.nTotalLiniiRon=' + TRANSFORM(loForm.nTotalLiniiRon) + CHR(13) + CHR(10), gcUILog, 1)
|
||||
|
||||
DO asserteaza WITH 'total linii RON calculat corect', loForm.nTotalLiniiRon = m.lnTotalAsteptat, TRANSFORM(loForm.nTotalLiniiRon) + ' vs ' + TRANSFORM(m.lnTotalAsteptat)
|
||||
|
||||
*!* editarea discountului recalculeaza totalul net, fara sa atinga Oracle
|
||||
lnDiscountVechi = NVL(tvanz.discount, 0)
|
||||
lnDiscountNou = m.lnDiscountVechi + 10
|
||||
loBara.txtDiscountArt.Value = m.lnDiscountNou
|
||||
loBara.txtDiscountArt.Valid()
|
||||
DOEVENTS FORCE
|
||||
|
||||
DO asserteaza WITH 'discountul ajunge in tvanz', NVL(tvanz.discount, 0) = m.lnDiscountNou, TRANSFORM(NVL(tvanz.discount, 0))
|
||||
DO asserteaza WITH 'total net recalculat', loForm.nTotalNetRon = ROUND(loForm.nTotalLiniiRon - m.lnDiscountNou, 2), TRANSFORM(loForm.nTotalNetRon)
|
||||
|
||||
*!* decizia 22: pe tipuri fara suma comparabila bara se ascunde, pagina ramane
|
||||
loForm.nTipVanzare = 23
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
DOEVENTS FORCE
|
||||
DO asserteaza WITH 'bara ascunsa pe transfer (tip 23)', loBara.lblTotalLiniiArt.Visible = .F., TRANSFORM(loBara.lblTotalLiniiArt.Visible)
|
||||
DO asserteaza WITH 'grid articole ramane vizibil pe transfer', loBara.grdArticoleFactura.Visible = .T., TRANSFORM(loBara.grdArticoleFactura.Visible)
|
||||
|
||||
loForm.nTipVanzare = 1
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
DOEVENTS FORCE
|
||||
DO asserteaza WITH 'bara revine vizibila pe factura normala', loBara.lblTotalLiniiArt.Visible = .T., TRANSFORM(loBara.lblTotalLiniiArt.Visible)
|
||||
|
||||
DO HarnessStep WITH 0, 'bara_totaluri', 25
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
|
||||
loForm.Release()
|
||||
|
||||
IF Used('crsArticoleFactura')
|
||||
Use In crsArticoleFactura
|
||||
ENDIF
|
||||
|
||||
DO HarnessDone WITH 'done'
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + m.tcValoare + ')' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDPROC
|
||||
119
utile/Teste/editare_factura/test_ui_culoare_contrast.prg
Normal file
119
utile/Teste/editare_factura/test_ui_culoare_contrast.prg
Normal file
@@ -0,0 +1,119 @@
|
||||
* test_ui_culoare_contrast.prg - dovada vizuala pe formular vizibil: linia stearsa (sters=1)
|
||||
* apare gri (RGB 150,150,150), o linie normala (sters=0) ramane neagra, pe acelasi grid
|
||||
* (pgfArticole.PAGE3.grdArticoleFactura). Foloseste un document cu minim 3 linii, ca linia
|
||||
* curenta a gridului (fundal albastru) sa nu coincida nici cu linia stearsa, nici cu linia
|
||||
* de control - selectia nu trebuie sa acopere culoarea testata. Nu scrie in Oracle. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcSyncDir = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\uisync5\'
|
||||
gcUILog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_ui_culoare_contrast_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
PUBLIC gnPass, gnFail
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg ADDITIVE
|
||||
DO HarnessInit
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\descopera_caz_test.prg ADDITIVE
|
||||
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
LOCAL llCazA
|
||||
llCazA = DescoperaCazTest('FACTURA_ARTICOLE', 'crscaz_a')
|
||||
IF !llCazA OR crscaz_a.nlin < 3
|
||||
STRTOFILE('EROARE: cazul FACTURA_ARTICOLE nu are minim 3 linii (nlin=' + TRANSFORM(IIF(llCazA,crscaz_a.nlin,-1)) + ')' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
STRTOFILE('caz A: cod=' + TRANSFORM(crscaz_a.cod) + ' id_vanzare=' + TRANSFORM(crscaz_a.id_vanzare) + ' nlin=' + TRANSFORM(crscaz_a.nlin) + CHR(13) + CHR(10), gcUILog, 1)
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, loGrid, loBut
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(crscaz_a.cod, crscaz_a.an, crscaz_a.luna, .F.)
|
||||
IF !llOk OR !Used('tact') OR Reccount('tact') = 0
|
||||
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
IncarcaArticoleFactura(crscaz_a.id_vanzare, 'crsArticoleFactura')
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
loForm.pgfArticole.ActivePage = 3
|
||||
DOEVENTS FORCE
|
||||
|
||||
loGrid = loForm.pgfArticole.Page3.grdArticoleFactura
|
||||
loBut = loForm.pgfArticole.Page3.cmdStergeArticol
|
||||
|
||||
*!* marcheaza linia 2 ca stearsa
|
||||
SELECT tvd
|
||||
GO 2
|
||||
loBut.Click()
|
||||
DOEVENTS FORCE
|
||||
DO asserteaza WITH 'linia 2: sters=1 dupa click', NVL(tvd.sters,0) = 1, TRANSFORM(NVL(tvd.sters,0))
|
||||
|
||||
*!* linia curenta a gridului ramane pe linia 3 (normala) - selectia (fundal albastru) nu trebuie
|
||||
*!* sa acopere nici linia 2 (stearsa, de verificat gri) nici linia 1 (normala, de verificat neagra)
|
||||
GO 3
|
||||
loGrid.SetFocus()
|
||||
DOEVENTS FORCE
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
|
||||
DO HarnessStep WITH 0, 'pagina3 - linia 2 stearsa (gri), linia 1 normala (neagra)', 25
|
||||
|
||||
loForm.Release()
|
||||
|
||||
IF Used('crsArticoleFactura')
|
||||
Use In crsArticoleFactura
|
||||
ENDIF
|
||||
|
||||
DO HarnessDone WITH 'done'
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + m.tcValoare + ')' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDPROC
|
||||
137
utile/Teste/editare_factura/test_ui_fix_editabil_subtotal.prg
Normal file
137
utile/Teste/editare_factura/test_ui_fix_editabil_subtotal.prg
Normal file
@@ -0,0 +1,137 @@
|
||||
* test_ui_fix_editabil_subtotal.prg - verifica pe formular vizibil (nu headless) defectele raportate
|
||||
* pe grid-ul grdArticoleFactura: coloanele cantitate/pret nu erau editabile (_grid.Init le forta
|
||||
* ReadOnly cat timp lcamptextneeditabil ramanea .T.), valoarea pe linie ramanea defazata cu un pas la
|
||||
* bifa "pret cu TVA" (in InteractiveChange, ControlSource nu e inca actualizat) si nu scadea
|
||||
* discountul unitar. Coloana se numeste acum "Valoare" (campul tvd.valoare).
|
||||
* Flux identic cu do_editare_factura. Document: cod=1139934/an=2021/luna=12 (id_vanzare=882, are si
|
||||
* rulaje, altfel Show() ascunde tot pgfArticole). Nu scrie in Oracle. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcSyncDir = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\uisync3\'
|
||||
gcUILog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_ui_fix_editabil_subtotal_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
PUBLIC gnPass, gnFail
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg ADDITIVE
|
||||
DO HarnessInit
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
*!* test_init_env_auto incarca intai copia omodificari din ROACONT - o eliberam si o reincarcam pe cea de sub test
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, loGrid, loChk
|
||||
LOCAL lnCant, lnPretNet, lnProcT, lnFlagVechi, lnFlagNou, lnValoareVeche, lnAsteptat, lnLaIncarcare
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(1139934, 2021, 12, .F.)
|
||||
IF !llOk OR !Used('tact') OR Reccount('tact') = 0
|
||||
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat pe cod=1139934' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
IncarcaArticoleFactura(882, 'crsArticoleFactura')
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
loForm.pgfArticole.ActivePage = 3
|
||||
DOEVENTS FORCE
|
||||
|
||||
loGrid = loForm.pgfArticole.Page3.grdArticoleFactura
|
||||
|
||||
DO asserteaza WITH 'ColumnCount = 14', loGrid.ColumnCount = 14, TRANSFORM(loGrid.ColumnCount)
|
||||
DO asserteaza WITH 'cantitate editabila', loGrid.cCantitateArt.ReadOnly = .F., TRANSFORM(loGrid.cCantitateArt.ReadOnly)
|
||||
DO asserteaza WITH 'pret editabil', loGrid.cPretArt.ReadOnly = .F., TRANSFORM(loGrid.cPretArt.ReadOnly)
|
||||
DO asserteaza WITH 'denumire ramane readonly', loGrid.cDenumireArt.ReadOnly = .T., TRANSFORM(loGrid.cDenumireArt.ReadOnly)
|
||||
DO asserteaza WITH 'discount_unitar ramane readonly', loGrid.cDiscountUnitarArt.ReadOnly = .T., TRANSFORM(loGrid.cDiscountUnitarArt.ReadOnly)
|
||||
DO asserteaza WITH 'valoare ramane readonly', loGrid.cValoareArt.ReadOnly = .T., TRANSFORM(loGrid.cValoareArt.ReadOnly)
|
||||
DO asserteaza WITH 'antetul coloanei e Valoare', loGrid.cValoareArt.Header1.Caption == 'Valoare', loGrid.cValoareArt.Header1.Caption
|
||||
|
||||
SELECT tvd
|
||||
GO TOP
|
||||
lnCant = NVL(tvd.cantitate, 0)
|
||||
lnPretNet = NVL(tvd.pret, 0) - NVL(tvd.discount_unitar, 0)
|
||||
lnProcT = NVL(tvd.proc_tvav, 1)
|
||||
lnFlagVechi = NVL(tvd.pret_cu_tva, 0)
|
||||
lnValoareVeche = NVL(tvd.valoare, 0)
|
||||
lnFlagNou = IIF(m.lnFlagVechi = 0, 1, 0)
|
||||
lnLaIncarcare = ROUND(m.lnCant * IIF(m.lnFlagVechi = 0, m.lnPretNet * m.lnProcT, m.lnPretNet), m.gnPC)
|
||||
lnAsteptat = ROUND(m.lnCant * IIF(m.lnFlagNou = 0, m.lnPretNet * m.lnProcT, m.lnPretNet), m.gnPC)
|
||||
|
||||
STRTOFILE('linia 1: cant=' + TRANSFORM(m.lnCant) + ' pret=' + TRANSFORM(NVL(tvd.pret,0)) + ;
|
||||
' discount_unitar=' + TRANSFORM(NVL(tvd.discount_unitar,0)) + ' proc_tvav=' + TRANSFORM(m.lnProcT) + ;
|
||||
' flag_vechi=' + TRANSFORM(m.lnFlagVechi) + ' valoare_la_incarcare=' + TRANSFORM(m.lnValoareVeche) + ;
|
||||
' -> flag_nou=' + TRANSFORM(m.lnFlagNou) + ' valoare_asteptata=' + TRANSFORM(m.lnAsteptat) + CHR(13) + CHR(10), gcUILog, 1)
|
||||
|
||||
DO asserteaza WITH 'discountul scazut deja la incarcare', m.lnValoareVeche = m.lnLaIncarcare, TRANSFORM(m.lnValoareVeche) + ' vs ' + TRANSFORM(m.lnLaIncarcare)
|
||||
|
||||
*!* reproduce clickul pe bifa: valoarea se schimba in control, ControlSource inca nu
|
||||
loChk = loGrid.cPretCuTvaArt._checkbox1
|
||||
loChk.Value = m.lnFlagNou
|
||||
loChk.InteractiveChange()
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT tvd
|
||||
GO TOP
|
||||
DO asserteaza WITH 'flagul ajunge in cursor', NVL(tvd.pret_cu_tva, 0) = m.lnFlagNou, TRANSFORM(NVL(tvd.pret_cu_tva, 0))
|
||||
DO asserteaza WITH 'valoare recalculata cu flagul nou', NVL(tvd.valoare, 0) = m.lnAsteptat, TRANSFORM(NVL(tvd.valoare, 0))
|
||||
DO asserteaza WITH 'linia marcata modificata', tvd.lmodificat = .T., TRANSFORM(tvd.lmodificat)
|
||||
|
||||
DO HarnessStep WITH 0, 'pagina3 articole - dupa bifa pret cu TVA', 25
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
|
||||
loForm.Release()
|
||||
|
||||
IF Used('crsArticoleFactura')
|
||||
Use In crsArticoleFactura
|
||||
ENDIF
|
||||
|
||||
DO HarnessDone WITH 'done'
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + m.tcValoare + ')' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDPROC
|
||||
98
utile/Teste/editare_factura/test_ui_grid_articole.prg
Normal file
98
utile/Teste/editare_factura/test_ui_grid_articole.prg
Normal file
@@ -0,0 +1,98 @@
|
||||
* test_ui_grid_articole.prg - reproducere UI (formular real, nu headless) a grid-ului
|
||||
* grdArticoleFactura raportat gol pe pagina 3 (Articole factura) la frm_modific2024.
|
||||
* Flux real, identic cu do_editare_factura (ofacturare_comun.vc2:~3780-3796): IncarcaCursoareModificareNota
|
||||
* -> rebuild tact -> update_jtva_coloane -> IncarcaArticoleFactura(id_vanzare,'crsArticoleFactura')
|
||||
* -> Createobject(frm_modific2024)+Show() -> ActivePage=3. Captura de ecran via vfp_ui_harness.ps1
|
||||
* (PrintWindow, off-screen, fara input real). Document: cod=1139934/an=2021/luna=12 (id_vanzare=882,
|
||||
* verificat in test_page3_articole.prg - PageCount=3) - ales in loc de 1140885 pentru ca are si
|
||||
* rulaje (trul/trul_obinv nevide), altfel Show() ascunde tot pgfArticole (deci si pagina 3),
|
||||
* indiferent de tvd - "Ascund pageframe rulaje daca nu am rulaje" (omodificari.vc2:14254).
|
||||
* Nu scrie in Oracle. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcSyncDir = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\uisync\'
|
||||
gcUILog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_ui_grid_articole_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg ADDITIVE
|
||||
DO HarnessInit
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
*!* test_init_env_auto face Set Classlib To omodificari Additive dupa Set Path pe ROACONT -
|
||||
*!* se incarca intai copia ROACONT; o eliberam si reincarcam pe cea de sub test, cu cale completa.
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, lnReccountTvd, lcRecordSource, lnColumnCount
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(1139934, 2021, 12, .F.)
|
||||
IF !llOk OR !Used('tact') OR Reccount('tact') = 0
|
||||
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat pe cod=1139934' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
*!* replica exact do_editare_factura: articolele se incarca ACUM, inainte de Createobject
|
||||
IncarcaArticoleFactura(882, 'crsArticoleFactura')
|
||||
STRTOFILE('Reccount(crsArticoleFactura) inainte de Createobject = ' + TRANSFORM(Reccount('crsArticoleFactura')) + CHR(13) + CHR(10), gcUILog, 1)
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
|
||||
*!* pagina 3 (Articole factura) apare doar daca lAreArticoleVanzari - navigheaza acolo din cod,
|
||||
*!* fara click real (masina partajata)
|
||||
*!* NU se mai cheama Refresh() manual aici - fixul din Show() (omodificari.vc2) trebuie sa fie suficient
|
||||
loForm.pgfArticole.ActivePage = 3
|
||||
DOEVENTS FORCE
|
||||
|
||||
lnReccountTvd = Reccount('tvd')
|
||||
lcRecordSource = loForm.pgfArticole.Page3.grdArticoleFactura.RecordSource
|
||||
lnColumnCount = loForm.pgfArticole.Page3.grdArticoleFactura.ColumnCount
|
||||
|
||||
STRTOFILE('PageCount = ' + TRANSFORM(loForm.pgfArticole.PageCount) + CHR(13) + CHR(10) + ;
|
||||
'pgfArticole.Visible = ' + TRANSFORM(loForm.pgfArticole.Visible) + CHR(13) + CHR(10) + ;
|
||||
'lAreArticoleVanzari = ' + TRANSFORM(loForm.lAreArticoleVanzari) + CHR(13) + CHR(10) + ;
|
||||
'Reccount(tvd) = ' + TRANSFORM(lnReccountTvd) + CHR(13) + CHR(10) + ;
|
||||
'RecordSource grid = [' + lcRecordSource + ']' + CHR(13) + CHR(10) + ;
|
||||
'ColumnCount grid = ' + TRANSFORM(lnColumnCount) + CHR(13) + CHR(10), gcUILog, 1)
|
||||
|
||||
DO HarnessStep WITH 0, 'pagina3 articole - formular vizibil dupa Show+ActivePage=3', 25
|
||||
|
||||
loForm.Release()
|
||||
|
||||
IF Used('crsArticoleFactura')
|
||||
Use In crsArticoleFactura
|
||||
ENDIF
|
||||
|
||||
DO HarnessDone WITH 'done'
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDPROC
|
||||
85
utile/Teste/editare_factura/test_ui_pageframe_articole.prg
Normal file
85
utile/Teste/editare_factura/test_ui_pageframe_articole.prg
Normal file
@@ -0,0 +1,85 @@
|
||||
* test_ui_pageframe_articole.prg - reproducere UI (formular real) a punctului A: pageframe-ul
|
||||
* articole trebuie sa ramana vizibil cand documentul are DOAR articole, zero rulaje.
|
||||
* Document: cod=1140885 (an/luna curente - vezi test_page3_articole.prg), id_vanzare=1047,
|
||||
* trul si trul_obinv goale, tvd cu 2 randuri. Flux real: IncarcaCursoareModificareNota ->
|
||||
* Createobject(frm_modific2024)+Show(), ca in do_editare_factura. Captura de ecran via
|
||||
* vfp_ui_harness.ps1 (PrintWindow, off-screen, fara input real). Nu scrie in Oracle. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcSyncDir = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\uisync\'
|
||||
gcUILog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_ui_pageframe_articole_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg ADDITIVE
|
||||
DO HarnessInit
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
*!* test_init_env_auto face Set Classlib To omodificari Additive dupa Set Path pe ROACONT -
|
||||
*!* se incarca intai copia ROACONT; o eliberam si reincarcam pe cea de sub test, cu cale completa.
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, lnReccountTvd, lnReccountTrul, lnReccountTrulObinv
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(1140885, gnAn, gnLuna, .F.)
|
||||
IF !llOk OR !Used('tact') OR Reccount('tact') = 0
|
||||
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat pe cod=1140885' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
|
||||
lnReccountTvd = Reccount('tvd')
|
||||
lnReccountTrul = Reccount('trul')
|
||||
lnReccountTrulObinv = Reccount('trul_obinv')
|
||||
|
||||
*!* daca pageframe-ul e vizibil, navigheaza pe pagina 3 (Articole factura) - fara click real
|
||||
IF loForm.pgfArticole.Visible
|
||||
loForm.pgfArticole.ActivePage = 3
|
||||
DOEVENTS FORCE
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('Reccount(trul) = ' + TRANSFORM(lnReccountTrul) + CHR(13) + CHR(10) + ;
|
||||
'Reccount(trul_obinv) = ' + TRANSFORM(lnReccountTrulObinv) + CHR(13) + CHR(10) + ;
|
||||
'Reccount(tvd) = ' + TRANSFORM(lnReccountTvd) + CHR(13) + CHR(10) + ;
|
||||
'pgfArticole.Visible = ' + TRANSFORM(loForm.pgfArticole.Visible) + CHR(13) + CHR(10) + ;
|
||||
'pgfArticole.PageCount = ' + TRANSFORM(loForm.pgfArticole.PageCount) + CHR(13) + CHR(10), gcUILog, 1)
|
||||
|
||||
DO HarnessStep WITH 0, 'pageframe articole - formular vizibil dupa Show (zero rulaje, doar articole)', 25
|
||||
|
||||
loForm.Release()
|
||||
|
||||
DO HarnessDone WITH 'done'
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDPROC
|
||||
@@ -0,0 +1,86 @@
|
||||
* test_ui_pageframe_zero_rulaje.prg - defectul 2: pageframe-ul rulaje/articole colapsa complet
|
||||
* (afiseaza_rulaje() -> pgfArticole.Visible = .F.) cand documentul are articole dar zero rulaje -
|
||||
* conditia veche din Show() (omodificari.vc2) verifica doar trul/trul_obinv, nu si tvd. Document:
|
||||
* cod=1140885/an=gnAn/luna=gnLuna (id_vanzare=1047) - verificat separat: Reccount(trul)=0,
|
||||
* Reccount(trul_obinv)=0, Reccount(tvd)=2. Acelasi flux ca do_editare_factura (IncarcaArticoleFactura
|
||||
* in cursor propriu, inainte de Createobject). Nu scrie in Oracle. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcSyncDir = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\uisync2\'
|
||||
gcUILog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_ui_pageframe_zero_rulaje_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg ADDITIVE
|
||||
DO HarnessInit
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(1140885, gnAn, gnLuna, .F.)
|
||||
IF !llOk OR !Used('tact') OR Reccount('tact') = 0
|
||||
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat pe cod=1140885' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
*!* replica do_editare_factura: articolele se incarca ACUM, inainte de Createobject (id_vanzare=1047)
|
||||
IncarcaArticoleFactura(1047, 'crsArticoleFactura')
|
||||
STRTOFILE('Reccount(crsArticoleFactura) inainte de Createobject = ' + TRANSFORM(Reccount('crsArticoleFactura')) + CHR(13) + CHR(10), gcUILog, 1)
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
|
||||
loForm.pgfArticole.ActivePage = 3
|
||||
DOEVENTS FORCE
|
||||
|
||||
STRTOFILE('PageCount = ' + TRANSFORM(loForm.pgfArticole.PageCount) + CHR(13) + CHR(10) + ;
|
||||
'pgfArticole.Visible = ' + TRANSFORM(loForm.pgfArticole.Visible) + CHR(13) + CHR(10) + ;
|
||||
'lAreArticoleVanzari = ' + TRANSFORM(loForm.lAreArticoleVanzari) + CHR(13) + CHR(10) + ;
|
||||
'Reccount(trul) = ' + TRANSFORM(IIF(Used('trul'),Reccount('trul'),-1)) + CHR(13) + CHR(10) + ;
|
||||
'Reccount(trul_obinv) = ' + TRANSFORM(IIF(Used('trul_obinv'),Reccount('trul_obinv'),-1)) + CHR(13) + CHR(10) + ;
|
||||
'Reccount(tvd) = ' + TRANSFORM(Reccount('tvd')) + CHR(13) + CHR(10) + ;
|
||||
'ColumnCount grid = ' + TRANSFORM(loForm.pgfArticole.Page3.grdArticoleFactura.ColumnCount) + CHR(13) + CHR(10), gcUILog, 1)
|
||||
|
||||
DO HarnessStep WITH 0, 'pageframe zero rulaje - articole populate', 25
|
||||
|
||||
loForm.Release()
|
||||
|
||||
IF Used('crsArticoleFactura')
|
||||
Use In crsArticoleFactura
|
||||
ENDIF
|
||||
|
||||
DO HarnessDone WITH 'done'
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDPROC
|
||||
151
utile/Teste/editare_factura/test_ui_sterge_linie.prg
Normal file
151
utile/Teste/editare_factura/test_ui_sterge_linie.prg
Normal file
@@ -0,0 +1,151 @@
|
||||
* test_ui_sterge_linie.prg - verifica pe formular vizibil (nu headless) butonul nou
|
||||
* pgfArticole.PAGE3.cmdStergeArticol: comuta tvd.sters intre 0 si 1 pe linia curenta,
|
||||
* marcheaza lmodificat si grizeaza vizual randul (DynamicForeColor pe toate coloanele
|
||||
* grid-ului) fara sa-l scoata din cursor - stergerea ramane logica, nu fizica.
|
||||
* Document: cod=1139934/an=2021/luna=12 (id_vanzare=882, 2 linii, are si rulaje, altfel
|
||||
* Show() ascunde tot pgfArticole). Nu scrie in Oracle. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcUILog, gcSyncDir
|
||||
gcSyncDir = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\uisync4\'
|
||||
gcUILog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_ui_sterge_linie_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
PUBLIC gnPass, gnFail
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg ADDITIVE
|
||||
DO HarnessInit
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
*!* test_init_env_auto incarca intai copia omodificari din ROACONT - o eliberam si o reincarcam pe cea de sub test
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm, loGrid, loBut
|
||||
LOCAL lnStersInitialR1, lnStersInitialR2
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(1139934, 2021, 12, .F.)
|
||||
IF !llOk OR !Used('tact') OR Reccount('tact') = 0
|
||||
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat pe cod=1139934' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
DO HarnessDone WITH 'error'
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
IncarcaArticoleFactura(882, 'crsArticoleFactura')
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
loForm.pgfArticole.ActivePage = 3
|
||||
DOEVENTS FORCE
|
||||
|
||||
loGrid = loForm.pgfArticole.Page3.grdArticoleFactura
|
||||
loBut = loForm.pgfArticole.Page3.cmdStergeArticol
|
||||
|
||||
DO asserteaza WITH 'butonul cmdStergeArticol exista', TYPE('loBut.Caption') = 'C', TYPE('loBut.Caption')
|
||||
DO asserteaza WITH 'butonul e vizibil', loBut.Visible, TRANSFORM(loBut.Visible)
|
||||
|
||||
SELECT tvd
|
||||
GO TOP
|
||||
lnStersInitialR1 = NVL(tvd.sters, 0)
|
||||
DO asserteaza WITH 'linia 1 incarcata cu sters=0', m.lnStersInitialR1 = 0, TRANSFORM(m.lnStersInitialR1)
|
||||
|
||||
SELECT tvd
|
||||
SKIP
|
||||
lnStersInitialR2 = NVL(tvd.sters, 0)
|
||||
GO TOP
|
||||
|
||||
*!* primul click - marcheaza linia 1 ca stearsa (logic, ramane in cursor)
|
||||
loBut.Click()
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT tvd
|
||||
GO TOP
|
||||
DO asserteaza WITH 'dupa click 1: sters=1 pe linia curenta', NVL(tvd.sters,0) = 1, TRANSFORM(NVL(tvd.sters,0))
|
||||
DO asserteaza WITH 'dupa click 1: lmodificat=.T.', tvd.lmodificat = .T., TRANSFORM(tvd.lmodificat)
|
||||
|
||||
SELECT tvd
|
||||
SKIP
|
||||
DO asserteaza WITH 'linia 2 neatinsa de stergerea liniei 1', NVL(tvd.sters,0) = m.lnStersInitialR2, TRANSFORM(NVL(tvd.sters,0))
|
||||
GO TOP
|
||||
|
||||
*!* al doilea click pe aceeasi linie - restaureaza (comutare, nu buton separat)
|
||||
*!* asertia ruleaza INAINTE de orice HarnessStep - daca harness-ul nu detecteaza fereastra,
|
||||
*!* procesul e omorat la primul READY si tot ce urmeaza dupa acel pas nu se mai executa
|
||||
loBut.Click()
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT tvd
|
||||
GO TOP
|
||||
DO asserteaza WITH 'dupa click 2: sters=0 (restaurata)', NVL(tvd.sters,0) = 0, TRANSFORM(NVL(tvd.sters,0))
|
||||
|
||||
*!* al treilea click - re-marcheaza linia, doar ca sa fie vizibila grizarea in captura de mai jos
|
||||
loBut.Click()
|
||||
DOEVENTS FORCE
|
||||
|
||||
SELECT tvd
|
||||
GO TOP
|
||||
DO asserteaza WITH 'dupa click 3: sters=1 (re-marcata pentru captura)', NVL(tvd.sters,0) = 1, TRANSFORM(NVL(tvd.sters,0))
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
|
||||
*!* muta randul curent al gridului pe linia 2, ca selectia (fundal albastru) sa nu acopere
|
||||
*!* culoarea DynamicForeColor a liniei grizate (linia 1) in captura
|
||||
SELECT tvd
|
||||
SKIP
|
||||
loGrid.SetFocus()
|
||||
DOEVENTS FORCE
|
||||
|
||||
DO HarnessStep WITH 0, 'pagina3 articole - linia 1 grizata (sters=1)', 25
|
||||
|
||||
loForm.Release()
|
||||
|
||||
IF Used('crsArticoleFactura')
|
||||
Use In crsArticoleFactura
|
||||
ENDIF
|
||||
|
||||
DO HarnessDone WITH 'done'
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + m.tcValoare + ')' + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcUILog, 1)
|
||||
ENDPROC
|
||||
365
utile/Teste/editare_factura/test_verdict_act_rul.prg
Normal file
365
utile/Teste/editare_factura/test_verdict_act_rul.prg
Normal file
@@ -0,0 +1,365 @@
|
||||
* test_verdict_act_rul.prg
|
||||
* Verifica ActualizeazaVerdictActRul (omodificari.vc2, S4/#6 sub-blocul C partea 2): calculul
|
||||
* Total ACT (sold net debit-credit pe cont, functie de tipul documentului), calculul Total RUL
|
||||
* (SUM((cant+cante)*pretvtva) WHERE id_tip_rulaj=0, corectat cu liniile nestocate), alegerea
|
||||
* contului pe grupa de tip (4111/461/418, respectiv 4111/411/461 pe rate/contract),
|
||||
* ascunderea pe tipurile fara suma comparabila si tratamentul special tip=51 (verdict fortat
|
||||
* "nu se aplica").
|
||||
* Cifrele sunt recalculate INDEPENDENT (SCAN, nu SUM) pe acelasi document, ca sa valideze formula
|
||||
* implementata, nu doar sa repete acelasi cod. Documentul e descoperit prin proprietate
|
||||
* (descopera_caz_test.prg), nu ancorat pe cod. Nu scrie in Oracle - doar SELECT-uri si cursoare
|
||||
* in memorie. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_verdict_act_rul_log.txt'
|
||||
STRTOFILE('start' + 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.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\descopera_caz_test.prg ADDITIVE
|
||||
|
||||
*!* test_init_env_auto incarca clasa omodificari din working copy-ul ROACONT (alt SET PATH) -
|
||||
*!* o eliberam si o reincarcam pe cea de sub test, cu cale completa
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
PUBLIC gnPass, gnFail
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
LOCAL llCazA
|
||||
llCazA = DescoperaCazTest('FACTURA_ARTICOLE', 'crscaz_a')
|
||||
IF !llCazA
|
||||
STRTOFILE('EROARE: cazul FACTURA_ARTICOLE nu a fost gasit' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
STRTOFILE('caz A: cod=' + TRANSFORM(crscaz_a.cod) + ' an=' + TRANSFORM(crscaz_a.an) + ' luna=' + TRANSFORM(crscaz_a.luna) + ;
|
||||
' id_vanzare=' + TRANSFORM(crscaz_a.id_vanzare) + ' tip=' + TRANSFORM(crscaz_a.tip) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm
|
||||
LOCAL lnActManual, lnRulManual, lnCorectieManual, lnRulCuCorectieManual
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(crscaz_a.cod, crscaz_a.an, crscaz_a.luna, .F.)
|
||||
IF !llOk OR !Used('tact') OR Reccount('tact') = 0
|
||||
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat pe caz A' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
||||
Go Top In tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !Used('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
|
||||
DO asserteaza WITH 'formularul are articole (lAreArticoleVanzari)', loForm.lAreArticoleVanzari, TRANSFORM(loForm.lAreArticoleVanzari)
|
||||
DO asserteaza WITH 'tip=1 (factura normala) - cont asteptat 4111, bara ACT/RUL vizibila', loForm.pgfArticole.PAGE3.lblTotalActArt.Visible, TRANSFORM(loForm.pgfArticole.PAGE3.lblTotalActArt.Visible)
|
||||
|
||||
*!* --- calcul independent (SCAN, nu SUM) al Total ACT pe contul 4111, ca sa valideze formula fara
|
||||
*!* sa repete acelasi cod din ActualizeazaVerdictActRul ---
|
||||
lnActManual = 0
|
||||
SELECT tact
|
||||
SCAN FOR Nvl(sters,0) = 0
|
||||
IF Alltrim(Nvl(scd,'')) == '4111'
|
||||
lnActManual = lnActManual + Nvl(suma,0)
|
||||
ELSE
|
||||
IF Alltrim(Nvl(scc,'')) == '4111' AND !INLIST(Alltrim(Nvl(scd,'')), '5311','5314','5121','5125','5126')
|
||||
lnActManual = lnActManual - Nvl(suma,0)
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
lnActManual = Round(lnActManual, 2)
|
||||
|
||||
DO asserteaza WITH 'Total ACT calculat de forma corespunde calculului independent (SCAN)', loForm.nTotalActRon == m.lnActManual, TRANSFORM(loForm.nTotalActRon) + ' vs manual ' + TRANSFORM(m.lnActManual)
|
||||
|
||||
*!* --- calcul independent al Total RUL (doar randurile cu id_tip_rulaj=0, decizia 36 - perechile
|
||||
*!* id_tip_rulaj=3 sunt miscari virtuale de diferenta de pret, nu intra in suma), plus corectia
|
||||
*!* liniilor nestocate ---
|
||||
lnRulManual = 0
|
||||
IF Used('trul')
|
||||
SELECT trul
|
||||
SCAN FOR Nvl(sters,0) = 0 AND Nvl(id_tip_rulaj,0) = 0
|
||||
lnRulManual = lnRulManual + (Nvl(cant,0) + Nvl(cante,0)) * Nvl(pretvtva,0)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
|
||||
lnCorectieManual = 0
|
||||
SELECT tvd
|
||||
SCAN FOR Nvl(sters,0) <> 1 AND Nvl(in_stoc,1) = 0
|
||||
lnCorectieManual = lnCorectieManual + Nvl(valoare,0)
|
||||
ENDSCAN
|
||||
lnRulCuCorectieManual = Round(m.lnRulManual + m.lnCorectieManual * Nvl(tvanz.curs,1) / Iif(Nvl(tvanz.multiplicator,1)=0,1,Nvl(tvanz.multiplicator,1)), 2)
|
||||
|
||||
DO asserteaza WITH 'Total RUL calculat de forma corespunde calculului independent (SCAN, formula + corectie nestocate)', loForm.nTotalRulRon == m.lnRulCuCorectieManual, TRANSFORM(loForm.nTotalRulRon) + ' vs manual ' + TRANSFORM(m.lnRulCuCorectieManual)
|
||||
DO asserteaza WITH 'lRulAjustat reflecta exact daca exista linii nestocate (corectie <> 0)', loForm.lRulAjustat == (Round(m.lnCorectieManual,2) <> 0), 'lRulAjustat=' + TRANSFORM(loForm.lRulAjustat) + ' corectie=' + TRANSFORM(m.lnCorectieManual)
|
||||
|
||||
LOCAL lcCaptionRul, lcVerdictText
|
||||
lcCaptionRul = loForm.pgfArticole.PAGE3.lblTotalRulArt.Caption
|
||||
lcVerdictText = loForm.pgfArticole.PAGE3.lblVerdictArt.Caption
|
||||
DO asserteaza WITH 'eticheta Total RUL marcheaza corect "(ajustat)" cand corectia s-a aplicat', ;
|
||||
IIF(loForm.lRulAjustat, '(ajustat)' $ m.lcCaptionRul, NOT '(ajustat)' $ m.lcCaptionRul), m.lcCaptionRul
|
||||
DO asserteaza WITH 'verdictul e informativ (contine "informativ", nu se prezinta ca eroare de sine statatoare)', ;
|
||||
'informativ' $ Lower(m.lcVerdictText) AND NOT 'eroare:' $ Lower(m.lcVerdictText), m.lcVerdictText
|
||||
|
||||
IF Abs(loForm.nTotalActRon - loForm.nTotalRulRon) <= 0.02
|
||||
DO asserteaza WITH 'verdict text = sincronizat, cand ACT si RUL coincid', 'sincronizat' $ Lower(m.lcVerdictText), m.lcVerdictText
|
||||
ELSE
|
||||
DO asserteaza WITH 'verdict text = divergent (informativ), cand ACT si RUL nu coincid', 'divergent' $ Lower(m.lcVerdictText), m.lcVerdictText
|
||||
ENDIF
|
||||
|
||||
*!* --- documentul de test (cod=1140895): dupa decizia 36, perechile id_tip_rulaj=3 nu mai intra
|
||||
*!* in Total RUL, deci ACT si RUL coincid exact la 1924.59 - verificare explicita a cifrei, nu
|
||||
*!* doar a egalitatii celor doua totaluri (un bug care ar pune ambele pe zero ar trece testul de mai sus) ---
|
||||
IF crscaz_a.cod = 1140895
|
||||
DO asserteaza WITH 'documentul de test cod=1140895: Total ACT = 1924.59', loForm.nTotalActRon == 1924.59, TRANSFORM(loForm.nTotalActRon)
|
||||
DO asserteaza WITH 'documentul de test cod=1140895: Total RUL = 1924.59 (decizia 36)', loForm.nTotalRulRon == 1924.59, TRANSFORM(loForm.nTotalRulRon)
|
||||
DO asserteaza WITH 'documentul de test cod=1140895: verdict sincronizat', 'sincronizat' $ Lower(m.lcVerdictText), m.lcVerdictText
|
||||
ENDIF
|
||||
|
||||
*!* --- tip=51 (ROAACNPRO): verdict fortat "nu se aplica", indiferent de cifre (decizia D din rec_suma_act.md) ---
|
||||
loForm.nTipVanzare = 51
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
DO asserteaza WITH 'tip=51: cifrele raman vizibile (informativ)', loForm.pgfArticole.PAGE3.lblTotalActArt.Visible, TRANSFORM(loForm.pgfArticole.PAGE3.lblTotalActArt.Visible)
|
||||
DO asserteaza WITH 'tip=51: verdictul e fortat "nu se aplica", nu sincronizat/divergent', 'nu se aplica' $ Lower(loForm.pgfArticole.PAGE3.lblVerdictArt.Caption), loForm.pgfArticole.PAGE3.lblVerdictArt.Caption
|
||||
|
||||
*!* --- transfer intre subunitati (tip=23, decizia 22): bara ACT/RUL se ascunde odata cu restul barei ---
|
||||
loForm.nTipVanzare = 23
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
DO asserteaza WITH 'tip=23 (transfer): Total ACT ascuns', !loForm.pgfArticole.PAGE3.lblTotalActArt.Visible, TRANSFORM(loForm.pgfArticole.PAGE3.lblTotalActArt.Visible)
|
||||
DO asserteaza WITH 'tip=23 (transfer): Total RUL ascuns', !loForm.pgfArticole.PAGE3.txtTotalRulArt.Visible, TRANSFORM(loForm.pgfArticole.PAGE3.txtTotalRulArt.Visible)
|
||||
DO asserteaza WITH 'tip=23 (transfer): indicatorul de verdict ascuns', !loForm.pgfArticole.PAGE3.lblVerdictArt.Visible, TRANSFORM(loForm.pgfArticole.PAGE3.lblVerdictArt.Visible)
|
||||
|
||||
*!* --- custodie (tip=42, decizia 22): la fel, fara suma comparabila ---
|
||||
loForm.nTipVanzare = 42
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
DO asserteaza WITH 'tip=42 (custodie): Total ACT ascuns', !loForm.pgfArticole.PAGE3.lblTotalActArt.Visible, TRANSFORM(loForm.pgfArticole.PAGE3.lblTotalActArt.Visible)
|
||||
|
||||
*!* --- alegerea contului pe grupa de tip: avize catre clienti debitori (28,29) -> 461 ---
|
||||
loForm.nTipVanzare = 28
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
LOCAL lnAct461
|
||||
lnAct461 = 0
|
||||
SELECT tact
|
||||
SCAN FOR Nvl(sters,0) = 0
|
||||
IF Alltrim(Nvl(scd,'')) == '461'
|
||||
lnAct461 = lnAct461 + Nvl(suma,0)
|
||||
ELSE
|
||||
IF Alltrim(Nvl(scc,'')) == '461' AND !INLIST(Alltrim(Nvl(scd,'')), '5311','5314','5121','5125','5126')
|
||||
lnAct461 = lnAct461 - Nvl(suma,0)
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
DO asserteaza WITH 'tip=28 (aviz client debitor): contul de referinta e 461', loForm.nTotalActRon == Round(m.lnAct461,2), TRANSFORM(loForm.nTotalActRon) + ' vs manual(461) ' + TRANSFORM(Round(m.lnAct461,2))
|
||||
|
||||
*!* --- restul avizelor (21,22,24,26) -> 418 ---
|
||||
loForm.nTipVanzare = 21
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
LOCAL lnAct418
|
||||
lnAct418 = 0
|
||||
SELECT tact
|
||||
SCAN FOR Nvl(sters,0) = 0
|
||||
IF Alltrim(Nvl(scd,'')) == '418'
|
||||
lnAct418 = lnAct418 + Nvl(suma,0)
|
||||
ELSE
|
||||
IF Alltrim(Nvl(scc,'')) == '418' AND !INLIST(Alltrim(Nvl(scd,'')), '5311','5314','5121','5125','5126')
|
||||
lnAct418 = lnAct418 - Nvl(suma,0)
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
DO asserteaza WITH 'tip=21 (aviz obisnuit): contul de referinta e 418', loForm.nTotalActRon == Round(m.lnAct418,2), TRANSFORM(loForm.nTotalActRon) + ' vs manual(418) ' + TRANSFORM(Round(m.lnAct418,2))
|
||||
|
||||
*!* --- restaurare tip original si verificare corectie sintetica pe linii nestocate ---
|
||||
loForm.nTipVanzare = crscaz_a.tip
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
LOCAL lnRulInainte, lnRulDupa, lnValoareLinie, lnCursDoc, lnMultDoc
|
||||
lnRulInainte = loForm.nTotalRulRon
|
||||
|
||||
SELECT tvd
|
||||
GO TOP
|
||||
lnValoareLinie = Nvl(valoare,0)
|
||||
REPLACE in_stoc WITH 0
|
||||
lnCursDoc = Nvl(tvanz.curs,1)
|
||||
lnMultDoc = Iif(Nvl(tvanz.multiplicator,1)=0,1,Nvl(tvanz.multiplicator,1))
|
||||
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
lnRulDupa = loForm.nTotalRulRon
|
||||
|
||||
DO asserteaza WITH 'fortarea in_stoc=0 pe o linie activeaza corectia (lRulAjustat=.T.)', loForm.lRulAjustat, TRANSFORM(loForm.lRulAjustat)
|
||||
DO asserteaza WITH 'corectia liniei nestocate creste Total RUL exact cu valoarea liniei convertita in RON', ;
|
||||
Round(lnRulDupa - lnRulInainte, 2) == Round(m.lnValoareLinie * m.lnCursDoc / m.lnMultDoc, 2), ;
|
||||
TRANSFORM(m.lnRulDupa) + ' - ' + TRANSFORM(m.lnRulInainte) + ' vs asteptat ' + TRANSFORM(Round(m.lnValoareLinie * m.lnCursDoc / m.lnMultDoc, 2))
|
||||
|
||||
*!* --- decizia 36: un rand id_tip_rulaj=3 nu intra in Total RUL, un rand id_tip_rulaj=0 intra ---
|
||||
LOCAL lnRulRef, lnDeltaRulaj, lnRecnoRulTest, lnPretvtvaTest
|
||||
lnRulRef = loForm.nTotalRulRon
|
||||
IF Used('trul')
|
||||
SELECT trul
|
||||
LOCATE FOR Nvl(id_tip_rulaj,0) = 3 AND Nvl(sters,0) = 0
|
||||
IF FOUND()
|
||||
lnRecnoRulTest = Recno()
|
||||
REPLACE cante WITH Nvl(cante,0) + 1000
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
DO asserteaza WITH 'un rand id_tip_rulaj=3 nu modifica Total RUL (miscare virtuala, decizia 36)', loForm.nTotalRulRon == m.lnRulRef, TRANSFORM(loForm.nTotalRulRon) + ' vs referinta ' + TRANSFORM(m.lnRulRef)
|
||||
SELECT trul
|
||||
GO (m.lnRecnoRulTest)
|
||||
REPLACE cante WITH Nvl(cante,0) - 1000
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
ELSE
|
||||
STRTOFILE('AVERTISMENT: nu s-a gasit rand trul cu id_tip_rulaj=3, testul de excludere sarit' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
SELECT trul
|
||||
LOCATE FOR Nvl(id_tip_rulaj,0) = 0 AND Nvl(sters,0) = 0
|
||||
IF FOUND()
|
||||
lnRecnoRulTest = Recno()
|
||||
lnPretvtvaTest = Nvl(trul.pretvtva,0)
|
||||
lnRulRef = loForm.nTotalRulRon
|
||||
lnDeltaRulaj = Iif(Nvl(trul.cant,0) <> 0, 1, 0)
|
||||
REPLACE cant WITH Nvl(cant,0) + m.lnDeltaRulaj, cante WITH Nvl(cante,0) + (1 - m.lnDeltaRulaj)
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
DO asserteaza WITH 'un rand id_tip_rulaj=0 modifica Total RUL cu exact pretvtva (decizia 36)', ;
|
||||
Round(loForm.nTotalRulRon - m.lnRulRef, 2) == Round(m.lnPretvtvaTest, 2), TRANSFORM(loForm.nTotalRulRon) + ' vs referinta ' + TRANSFORM(m.lnRulRef) + ' + pretvtva ' + TRANSFORM(m.lnPretvtvaTest)
|
||||
SELECT trul
|
||||
GO (m.lnRecnoRulTest)
|
||||
REPLACE cant WITH Nvl(cant,0) - m.lnDeltaRulaj, cante WITH Nvl(cante,0) - (1 - m.lnDeltaRulaj)
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
ELSE
|
||||
STRTOFILE('AVERTISMENT: nu s-a gasit rand trul cu id_tip_rulaj=0, testul de includere sarit' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
*!* --- decizia 37: cont de referinta pe rate/contract (tip 2,6,52) accepta 4111/411/461, nu doar 4111 ---
|
||||
SELECT tact
|
||||
LOCATE FOR Alltrim(Nvl(scd,'')) == '4111' AND Nvl(sters,0) = 0
|
||||
IF FOUND()
|
||||
LOCAL lnRecnoContTest, lcScdOriginal, lnActMulti
|
||||
lnRecnoContTest = Recno()
|
||||
lcScdOriginal = scd
|
||||
|
||||
REPLACE scd WITH '411'
|
||||
loForm.nTipVanzare = 2
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
lnActMulti = 0
|
||||
SELECT tact
|
||||
SCAN FOR Nvl(sters,0) = 0
|
||||
IF INLIST(Alltrim(Nvl(scd,'')), '4111', '411', '461')
|
||||
lnActMulti = lnActMulti + Nvl(suma,0)
|
||||
ELSE
|
||||
IF INLIST(Alltrim(Nvl(scc,'')), '4111', '411', '461') AND !INLIST(Alltrim(Nvl(scd,'')), '5311','5314','5121','5125','5126')
|
||||
lnActMulti = lnActMulti - Nvl(suma,0)
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
DO asserteaza WITH 'tip=2 (rata/contract): contul 411 e acceptat alaturi de 4111/461 (decizia 37)', loForm.nTotalActRon == Round(m.lnActMulti,2), TRANSFORM(loForm.nTotalActRon) + ' vs manual ' + TRANSFORM(Round(m.lnActMulti,2))
|
||||
|
||||
SELECT tact
|
||||
GO (m.lnRecnoContTest)
|
||||
REPLACE scd WITH '461'
|
||||
loForm.nTipVanzare = 6
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
lnActMulti = 0
|
||||
SELECT tact
|
||||
SCAN FOR Nvl(sters,0) = 0
|
||||
IF INLIST(Alltrim(Nvl(scd,'')), '4111', '411', '461')
|
||||
lnActMulti = lnActMulti + Nvl(suma,0)
|
||||
ELSE
|
||||
IF INLIST(Alltrim(Nvl(scc,'')), '4111', '411', '461') AND !INLIST(Alltrim(Nvl(scd,'')), '5311','5314','5121','5125','5126')
|
||||
lnActMulti = lnActMulti - Nvl(suma,0)
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
DO asserteaza WITH 'tip=6 (rata/contract): contul 461 e acceptat alaturi de 4111/411 (decizia 37)', loForm.nTotalActRon == Round(m.lnActMulti,2), TRANSFORM(loForm.nTotalActRon) + ' vs manual ' + TRANSFORM(Round(m.lnActMulti,2))
|
||||
|
||||
*!* pe un tip fara rata, contul ramane strict 4111 - randul mutat pe 461 nu mai intra in suma
|
||||
SELECT tact
|
||||
GO (m.lnRecnoContTest)
|
||||
loForm.nTipVanzare = 1
|
||||
loForm.ActualizeazaBaraTotaluri()
|
||||
lnActMulti = 0
|
||||
SELECT tact
|
||||
SCAN FOR Nvl(sters,0) = 0
|
||||
IF Alltrim(Nvl(scd,'')) == '4111'
|
||||
lnActMulti = lnActMulti + Nvl(suma,0)
|
||||
ELSE
|
||||
IF Alltrim(Nvl(scc,'')) == '4111' AND !INLIST(Alltrim(Nvl(scd,'')), '5311','5314','5121','5125','5126')
|
||||
lnActMulti = lnActMulti - Nvl(suma,0)
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
DO asserteaza WITH 'tip=1 (factura obisnuita): contul ramane strict 4111, randul mutat pe 461 nu mai intra in suma', loForm.nTotalActRon == Round(m.lnActMulti,2), TRANSFORM(loForm.nTotalActRon) + ' vs manual ' + TRANSFORM(Round(m.lnActMulti,2))
|
||||
|
||||
SELECT tact
|
||||
GO (m.lnRecnoContTest)
|
||||
REPLACE scd WITH m.lcScdOriginal
|
||||
ELSE
|
||||
STRTOFILE('AVERTISMENT: nu s-a gasit rand ACT cu scd=4111, testul decizia 37 sarit' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
loForm.Release()
|
||||
|
||||
IF Used('actactan')
|
||||
Use In actactan
|
||||
ENDIF
|
||||
IF Used('tact')
|
||||
Use In tact
|
||||
ENDIF
|
||||
IF Used('rul_temp')
|
||||
Use In rul_temp
|
||||
ENDIF
|
||||
IF Used('trul')
|
||||
Use In trul
|
||||
ENDIF
|
||||
IF Used('rul_temp_obinv')
|
||||
Use In rul_temp_obinv
|
||||
ENDIF
|
||||
IF Used('trul_obinv')
|
||||
Use In trul_obinv
|
||||
ENDIF
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
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: ' + 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