#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:
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
|
||||
Reference in New Issue
Block a user