* 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