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
191 lines
8.4 KiB
Plaintext
191 lines
8.4 KiB
Plaintext
* 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
|