sync SVN r18004/r18007: #6 editare factura emisa - pagina de articole
ofacturare_editare.prg (nou): helpere comune - garda eFactura, cursoarele notei si ale rulajelor, randul de vanzare corespunzator notei si liniile de articole citite din view-ul VVANZARI_ARTICOLE. omodificari.vc2 (frm_modific2024): pagina noua de articole ale facturii, deocamdata doar afisare. Apare numai cand ofacturare_editare.prg e inregistrat si documentul are rand in VANZARI; in ROACONT si ROAGEST, unde fisierul nu e incarcat, pagina lipseste si registrul jurnal ramane neatins. Randul de vanzare al notei se cauta pe toate tripletele distincte (nract, serie_act, dataact) din nota, pentru ca primul rand poate fi o incasare. ofacturare_comun.vc2 (frm_facturi): do_editare_factura si butonul aferent, dupa modelul lui do_sterge, cu garzile de luna inchisa, luna curenta, document sters, referinte si eFactura. docs: comentariile se scriu strict necesar, si in cod si in scripturile de migrare - fara referinte la planuri, stories, decizii sau erori, istoricul doar in antetul fisierului. Plus regula zero (predarea contextului), capcanele de la testarea headless si completari pe fluxul text -> binar. utile/Teste: suita de regresie pentru editarea facturii si harness-ul watchdog (nu sunt in SVN, unde utile/Teste e ignorat). .gitignore ignora si capturile PNG si watchdog_out/, ramase din rulari. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
This commit is contained in:
305
utile/Teste/editare_factura/test_page3_articole.prg
Normal file
305
utile/Teste/editare_factura/test_page3_articole.prg
Normal file
@@ -0,0 +1,305 @@
|
||||
* 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)
|
||||
* - 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
|
||||
* - garda ROACONT/ROAGEST: cu ofacturare_editare.prg eliberat din SET PROCEDURE, Show() degradeaza
|
||||
* curat la PageCount=2, fara eroare
|
||||
* Nu atinge Oracle in scriere - doar SELECT-uri prin goExecutor. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
LOCAL lcLog
|
||||
lcLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_page3_articole_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
|
||||
|
||||
*!* 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
|
||||
*!* modificarile noastre). O eliberam si o reincarcam pe cea DE SUB TEST, cu cale completa -
|
||||
*!* altfel Createobject valideaza cu totul alt fisier decat cel editat.
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
*!* 1) IncarcaVanzareNota / IncarcaArticoleFactura direct, pe documente reale
|
||||
*!* (gnAn)/(gnLuna) 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
|
||||
|
||||
*!* 2) cazul de coliziune pe cod=1139934 (4 randuri VANZARI cu acelasi cod) - filtrul compus
|
||||
DO verifica_coliziune_cod WITH lcLog
|
||||
|
||||
*!* 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
|
||||
|
||||
*!* 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
|
||||
|
||||
*!* 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
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE verifica_vanzare_nota
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcEticheta, tcLog, tlAsteptatGasit, tnIdVanzareAsteptat, tnTipAsteptat, tnLiniiAsteptate
|
||||
|
||||
LOCAL llOk, lcMsg, llGasit, lnIdVanzare, lnTip, lnLinii, llIdOk, llTipOk, llLiniiOk
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.)
|
||||
|
||||
llGasit = .F.
|
||||
lnIdVanzare = 0
|
||||
lnTip = 0
|
||||
lnLinii = -1
|
||||
|
||||
IF llOk AND Used('tact') AND Reccount('tact') > 0
|
||||
Go Top In tact
|
||||
IncarcaVanzareNota(tact.cod, tact.nract, tact.serie_act, tact.dataact)
|
||||
IF Reccount('tvanz') = 1
|
||||
llGasit = .T.
|
||||
lnIdVanzare = tvanz.id_vanzare
|
||||
lnTip = tvanz.tip
|
||||
IncarcaArticoleFactura(lnIdVanzare)
|
||||
lnLinii = Reccount('tvd')
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
llIdOk = IIF(tlAsteptatGasit, lnIdVanzare == tnIdVanzareAsteptat, .T.)
|
||||
llTipOk = IIF(tlAsteptatGasit, lnTip == tnTipAsteptat, .T.)
|
||||
llLiniiOk = IIF(tlAsteptatGasit AND tnLiniiAsteptate >= 0, lnLinii == tnLiniiAsteptate, .T.)
|
||||
|
||||
lcMsg = '--- cod=' + TRANSFORM(tnCod) + ' [' + tcEticheta + '] ---' + CHR(13) + CHR(10) + ;
|
||||
' IncarcaCursoareModificareNota => ' + TRANSFORM(llOk) + CHR(13) + CHR(10) + ;
|
||||
' gasit in vanzari = ' + TRANSFORM(llGasit) + ' (asteptat ' + TRANSFORM(tlAsteptatGasit) + ')' + CHR(13) + CHR(10) + ;
|
||||
' id_vanzare = ' + TRANSFORM(lnIdVanzare) + ' (asteptat ' + TRANSFORM(tnIdVanzareAsteptat) + ')' + CHR(13) + CHR(10) + ;
|
||||
' tip = ' + TRANSFORM(lnTip) + ' (asteptat ' + TRANSFORM(tnTipAsteptat) + ')' + CHR(13) + CHR(10) + ;
|
||||
' Reccount(tvd) = ' + TRANSFORM(lnLinii) + ' (asteptat ' + TRANSFORM(tnLiniiAsteptate) + ')' + CHR(13) + CHR(10) + ;
|
||||
' ' + IIF(llGasit == tlAsteptatGasit AND llIdOk AND llTipOk AND llLiniiOk, 'PASS', 'FAIL') + CHR(13) + CHR(10)
|
||||
|
||||
STRTOFILE(lcMsg, 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
|
||||
|
||||
|
||||
* 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)
|
||||
PROCEDURE verifica_coliziune_cod
|
||||
LPARAMETERS tcLog
|
||||
|
||||
LOCAL ldDataAct, llOk1, llOk2
|
||||
|
||||
ldDataAct = DATE(2021,12,31)
|
||||
|
||||
IncarcaVanzareNota(1139934, 375, 'SSS', ldDataAct)
|
||||
llOk1 = (Reccount('tvanz') = 1 AND tvanz.id_vanzare == 882)
|
||||
IF Used('tvanz')
|
||||
Use In tvanz
|
||||
ENDIF
|
||||
|
||||
IncarcaVanzareNota(1139934, 13, '', ldDataAct)
|
||||
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)
|
||||
ENDPROC
|
||||
|
||||
|
||||
* instantiaza frm_modific2024 exact ca in do_editare_factura (ofacturare_comun.vc2:3781-3803):
|
||||
* IncarcaCursoareModificareNota, rebuild tact cu coloana cu_Tva, Createobject+Show; verifica
|
||||
* pgfArticole.PageCount si proprietatile de detectie dupa Show()
|
||||
PROCEDURE verifica_pagecount_form
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcEticheta, tcLog, tnPageCountAsteptat, tlAreArticoleAsteptat, tnIdVanzareAsteptat
|
||||
|
||||
LOCAL llOk, lnIdSet, lnPageCount, llAreArticole, lnIdVanzare, loForm, llIdVanzareOk
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.)
|
||||
lnPageCount = -1
|
||||
llAreArticole = .F.
|
||||
lnIdVanzare = 0
|
||||
|
||||
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()
|
||||
|
||||
lnPageCount = loForm.pgfArticole.PageCount
|
||||
llAreArticole = loForm.lAreArticoleVanzari
|
||||
lnIdVanzare = loForm.nIdVanzare
|
||||
|
||||
loForm.Release()
|
||||
ENDIF
|
||||
|
||||
llIdVanzareOk = IIF(PCOUNT() >= 9, lnIdVanzare == tnIdVanzareAsteptat, .T.)
|
||||
|
||||
STRTOFILE('--- frm_modific2024, cod=' + TRANSFORM(tnCod) + ' [' + tcEticheta + '] ---' + 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) + IIF(PCOUNT() >= 9, ' (asteptat ' + TRANSFORM(tnIdVanzareAsteptat) + ')', '') + CHR(13) + CHR(10) + ;
|
||||
' ' + IIF(lnPageCount == tnPageCountAsteptat AND llAreArticole == tlAreArticoleAsteptat AND llIdVanzareOk, '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)
|
||||
PROCEDURE verifica_garda_procedura_lipsa
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcLog
|
||||
|
||||
LOCAL llOk, lnIdSet, lnPageCount, loForm, lcProcList, lnI, lcFile
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.)
|
||||
lnPageCount = -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
|
||||
|
||||
*!* simuleaza ROACONT/ROAGEST: reconstruieste lista de proceduri incarcate, fara ofacturare_editare.prg
|
||||
*!* (VFP nu are un "release" pe un singur fisier din SET PROCEDURE - se inchid toate si se redeschid restul)
|
||||
lcProcList = Set('Procedure')
|
||||
SET PROCEDURE TO
|
||||
FOR lnI = 1 TO GETWORDCOUNT(lcProcList, ',')
|
||||
lcFile = ALLTRIM(GETWORDNUM(lcProcList, lnI, ','))
|
||||
IF !EMPTY(lcFile) AND !("OFACTURARE_EDITARE" $ UPPER(lcFile))
|
||||
SET PROCEDURE TO (lcFile) ADDITIVE
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
Select tact
|
||||
loForm = Createobject([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
|
||||
lnPageCount = loForm.pgfArticole.PageCount
|
||||
|
||||
loForm.Release()
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- garda ofacturare_editare.prg lipsa, cod=' + TRANSFORM(tnCod) + ' ---' + CHR(13) + CHR(10) + ;
|
||||
' PageCount = ' + TRANSFORM(lnPageCount) + ' (asteptat 2, ca pe ROACONT/ROAGEST)' + CHR(13) + CHR(10) + ;
|
||||
' ' + IIF(lnPageCount == 2, '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
|
||||
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