Files
comun/utile/Teste/facturare_unificat/probe_e2e_cont_667.prg
2026-09-17 11:19:54 +03:00

297 lines
12 KiB
Plaintext

* probe_e2e_cont_667.prg
* E2E (Pas 4 din docs\handoff_cont_discount_667_709.md): articol cu cont=667 din catalog
* articole (politica de stoc) salvat prin clasa REALA cus_pret_nomenclator, cu conturi analitice,
* si verificat capat-la-capat pe MARIUSM_AUTO:
* - nota per-articol scrisa de pack_preturi.gaseste_creeaza_nota_vanzare (overload 6 arg):
* SCD=667 / ASCD / SCC=4111 / ASCC
* - verifica_cont_venit_linie() = [] (nu mai blocheaza linia)
* - rezolvarea din cursor_articol (pack_facturare) aduce 667/4111 + analiticele, NU contul de
* venit al politicii - deci scrie_nota va aplica semnul negativ (V_SCD in 667/267/2678/709)
* - fallback: articol de discount fara conturi primeste automat nota implicita 667=4111
* - valideaza: analitic fara cont sintetic = refuz
* TOTUL ruleaza in TRANZACTIE MANUALA (SQLSETPROP Transactions=2) si se inchide cu ROLLBACK -
* nicio scriere nu ramane in schema (vezi capcana din handoff sectiunea 7).
*
* Rulare: vfp9.exe -A -T "...\probe_e2e_cont_667.prg" (dupa _precompile.ps1)
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\probe_e2e_cont_667.log
SET SAFETY OFF
SET TALK OFF
SET NOTIFY OFF
SET DELETED ON
SET EXACT ON
SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcLog, gnPass, gnFail, gcCaz
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\probe_e2e_cont_667.log"
IF !DIRECTORY(JUSTPATH(gcLog))
MD JUSTPATH(gcLog)
ENDIF
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
gnPass = 0
gnFail = 0
gcCaz = ""
ON ERROR DO E2eErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
DO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
IF TYPE('gnHandle') <> 'N' OR gnHandle <= 0
DO E2eLog WITH "FAIL: conexiune Oracle esuata"
DO E2eFinal
ENDIF
gnIdUtil = 8
SQLSETPROP(gnHandle, "QueryTimeOut", 60)
DO E2eLog WITH "ENV OK (gnHandle=" + TRANSFORM(gnHandle) + ")"
LOCAL lnIdPolStoc, lnArt, lnIdNotaInitial, lnIdNotaNou, llOk
LOCAL lcScd, lcAscd, lcScc, lcAscc, lcRezScd, lcRezAscd, lcRezScc, lcRezAscc, lcMsg
LOCAL loC, loC2, llTranzactieDeschisa
*----------------- pregatire: politica de stoc + un articol de discount ---------------
gcCaz = "[setup] "
IF Used('crsoptstoc')
Use In crsoptstoc
ENDIF
goExecutor.oExecute([select varvalue from optiuni where program = 'ROAFACTURARE' and varname = 'ID_POL_PRET_STOC'], 'crsoptstoc')
lnIdPolStoc = 0
IF Used('crsoptstoc') And Reccount('crsoptstoc') = 1
lnIdPolStoc = Val(Alltrim(Nvl(crsoptstoc.varvalue, '0')))
ENDIF
IF Used('crsoptstoc')
Use In crsoptstoc
ENDIF
DO Assert WITH lnIdPolStoc > 0, "politica de stoc rezolvata din OPTIUNI (id=" + TRANSFORM(lnIdPolStoc) + ")"
IF Used('crsart667')
Use In crsart667
ENDIF
goExecutor.oExecute([select a.id_articol, e.cont, e.denumire, a.id_nota from crm_politici_pret_art a, nom_articole e ] + ;
[where a.id_pol = ] + TRANSFORM(lnIdPolStoc) + [ and a.id_articol = e.id_articol ] + ;
[ and trim(e.cont) in ('667','709') order by a.id_articol], 'crsart667')
DO Assert WITH Used('crsart667') And Reccount('crsart667') > 0, "exista articole cu cont 667/709 in politica de stoc (count=" + TRANSFORM(Iif(Used('crsart667'), Reccount('crsart667'), -1)) + ")"
lnArt = 0
lnIdNotaInitial = -1
IF Used('crsart667') And Reccount('crsart667') > 0
lnArt = crsart667.id_articol
lnIdNotaInitial = Iif(Isnull(crsart667.id_nota), 0, crsart667.id_nota)
DO E2eLog WITH " articol test=" + TRANSFORM(lnArt) + " cont=" + Alltrim(Nvl(crsart667.cont, [])) + " id_nota initial=" + TRANSFORM(lnIdNotaInitial)
ENDIF
IF Used('crsart667')
Use In crsart667
ENDIF
IF lnArt = 0
DO E2eLog WITH "ABANDON: nu am articol de test"
DO E2eFinal
ENDIF
*----------------- TRANZACTIE MANUALA (orice scriere de mai jos se anuleaza) ----------
gcCaz = "[tranzactie] "
llTranzactieDeschisa = MyDeschideTranzactie()
DO Assert WITH llTranzactieDeschisa, "tranzactie manuala deschisa (SQLSETPROP Transactions=2)"
IF llTranzactieDeschisa
*--- 1. incarca prin clasa: conturile notei curente (667=4111) ---------------------
gcCaz = "[1-incarca] "
loC = CREATEOBJECT('cus_pret_nomenclator')
llOk = loC.incarca(lnArt)
DO Assert WITH llOk, "cus_pret_nomenclator.incarca(" + TRANSFORM(lnArt) + ") = .T."
DO Assert WITH loC.nIdPolitica = lnIdPolStoc, "nIdPolitica=" + TRANSFORM(loC.nIdPolitica) + " (asteptat " + TRANSFORM(lnIdPolStoc) + ")"
DO Assert WITH Alltrim(loC.cScd) = "667", "cScd incarcat=[" + Alltrim(loC.cScd) + "] (asteptat 667)"
DO Assert WITH Alltrim(loC.cScc) = "4111", "cScc incarcat=[" + Alltrim(loC.cScc) + "] (asteptat 4111)"
*--- 2. salveaza cu analitice (calea reala salveaza -> RPC 6 arg -> nota) -----------
gcCaz = "[2-salveaza-analitice] "
loC.cScd = "667"
loC.cAscd = "11"
loC.cScc = "4111"
loC.cAscc = "12"
llOk = loC.salveaza(lnArt)
DO Assert WITH llOk, "cus_pret_nomenclator.salveaza(" + TRANSFORM(lnArt) + ") = .T."
IF Used('crsnotanova')
Use In crsnotanova
ENDIF
goExecutor.oExecute([select a.id_nota, n.scd, n.ascd, n.scc, n.ascc from crm_politici_pret_art a, crm_note_vanzari v, note_contabile n ] + ;
[where a.id_pol = ] + TRANSFORM(lnIdPolStoc) + [ and a.id_articol = ] + TRANSFORM(lnArt) + ;
[ and v.id_nota = a.id_nota and n.id_set = v.id_set], 'crsnotanova')
lnIdNotaNou = 0
IF Used('crsnotanova') And Reccount('crsnotanova') > 0
lcScd = Alltrim(Nvl(crsnotanova.scd, []))
lcAscd = Alltrim(Nvl(crsnotanova.ascd, []))
lcScc = Alltrim(Nvl(crsnotanova.scc, []))
lcAscc = Alltrim(Nvl(crsnotanova.ascc, []))
lnIdNotaNou = crsnotanova.id_nota
DO E2eLog WITH " nota noua id=" + TRANSFORM(lnIdNotaNou) + " : " + lcScd + "/" + lcAscd + " = " + lcScc + "/" + lcAscc
ENDIF
IF Used('crsnotanova')
Use In crsnotanova
ENDIF
DO Assert WITH lnIdNotaNou > 0 And lnIdNotaNou <> lnIdNotaInitial, "nota per-articol noua scrisa (id=" + TRANSFORM(lnIdNotaNou) + ", initial=" + TRANSFORM(lnIdNotaInitial) + ")"
DO Assert WITH lcScd = "667", "nota SCD=[" + lcScd + "] (asteptat 667)"
DO Assert WITH lcAscd = "11", "nota ASCD=[" + lcAscd + "] (asteptat 11)"
DO Assert WITH lcScc = "4111", "nota SCC=[" + lcScc + "] (asteptat 4111)"
DO Assert WITH lcAscc = "12", "nota ASCC=[" + lcAscc + "] (asteptat 12)"
*--- 3. verifica_cont_venit_linie: linia nu mai e blocata -------------------------
gcCaz = "[3-verifica_cont_venit_linie] "
gnId_pol_pret_stoc = lnIdPolStoc
lcMsg = verifica_cont_venit_linie(lnArt, lnIdPolStoc)
DO Assert WITH Empty(lcMsg), "verifica_cont_venit_linie = [] (obtinut [" + lcMsg + "])"
*--- 4. rezolvarea din cursor_articol (pack_facturare) ----------------------------
gcCaz = "[4-cursor_articol] "
IF Used('crsrezart')
Use In crsrezart
ENDIF
goExecutor.oExecute([select d.scd as scd_rez, d.ascd as ascd_rez, d.scc as scc_rez, d.ascc as ascc_rez ] + ;
[from crm_politici_pret_art a ] + ;
[left join crm_politici_preturi b on a.id_pol = b.id_pol ] + ;
[left join crm_note_vanzari c on c.id_nota = (case when a.id_pol = ] + TRANSFORM(lnIdPolStoc) + [ then nvl(a.id_nota, b.id_nota) else b.id_nota end) ] + ;
[left join note_contabile d on d.id_set = c.id_set ] + ;
[where a.id_pol = ] + TRANSFORM(lnIdPolStoc) + [ and a.id_articol = ] + TRANSFORM(lnArt), 'crsrezart')
lcRezScd = ""
lcRezAscd = ""
lcRezScc = ""
lcRezAscc = ""
IF Used('crsrezart') And Reccount('crsrezart') > 0
lcRezScd = Alltrim(Nvl(crsrezart.scd_rez, []))
lcRezAscd = Alltrim(Nvl(crsrezart.ascd_rez, []))
lcRezScc = Alltrim(Nvl(crsrezart.scc_rez, []))
lcRezAscc = Alltrim(Nvl(crsrezart.ascc_rez, []))
ENDIF
IF Used('crsrezart')
Use In crsrezart
ENDIF
DO E2eLog WITH " rezolvare: " + lcRezScd + "/" + lcRezAscd + " = " + lcRezScc + "/" + lcRezAscc
DO Assert WITH lcRezScd = "667", "rezolvare SCD=[" + lcRezScd + "] (asteptat 667, nu contul politicii)"
DO Assert WITH lcRezScc = "4111", "rezolvare SCC=[" + lcRezScc + "] (asteptat 4111, nu contul de venit al politicii)"
DO Assert WITH lcRezAscd = "11" And lcRezAscc = "12", "rezolvare analitice=[" + lcRezAscd + "/" + lcRezAscc + "] (asteptat 11/12)"
*--- 5. reincarca: clasa citeste analiticele inapoi -------------------------------
gcCaz = "[5-reincarca] "
loC2 = CREATEOBJECT('cus_pret_nomenclator')
llOk = loC2.incarca(lnArt)
DO Assert WITH llOk And Alltrim(loC2.cAscd) = "11" And Alltrim(loC2.cAscc) = "12", ;
"reincarca citeste analiticele (ascd=[" + Alltrim(loC2.cAscd) + "] ascc=[" + Alltrim(loC2.cAscc) + "])"
*--- 6. valideaza: analitic fara sintetic = refuz ---------------------------------
gcCaz = "[6-valideaza] "
loC2.cAscd = "11"
loC2.cScd = []
llOk = loC2.valideaza()
DO Assert WITH !llOk And "analitic debitor" $ Lower(loC2.cEroare), "valideaza refuza analitic fara sintetic (mesaj=[" + loC2.cEroare + "])"
*--- 7. fallback: articol de discount fara conturi -> nota implicita 667=4111 -----
gcCaz = "[7-fallback-asigura] "
loC2.cScd = []
loC2.cAscd = []
loC2.cScc = []
loC2.cAscc = []
llOk = loC2.salveaza(lnArt)
IF Used('crsnotafb')
Use In crsnotafb
ENDIF
goExecutor.oExecute([select a.id_nota, n.scd, n.scc from crm_politici_pret_art a, crm_note_vanzari v, note_contabile n ] + ;
[where a.id_pol = ] + TRANSFORM(lnIdPolStoc) + [ and a.id_articol = ] + TRANSFORM(lnArt) + ;
[ and v.id_nota = a.id_nota and n.id_set = v.id_set], 'crsnotafb')
lcScd = ""
lcScc = ""
lnIdNotaNou = 0
IF Used('crsnotafb') And Reccount('crsnotafb') > 0
lcScd = Alltrim(Nvl(crsnotafb.scd, []))
lcScc = Alltrim(Nvl(crsnotafb.scc, []))
lnIdNotaNou = crsnotafb.id_nota
ENDIF
IF Used('crsnotafb')
Use In crsnotafb
ENDIF
DO Assert WITH llOk, "salveaza fara conturi pe articol de discount = .T."
DO Assert WITH lcScd = "667" And lcScc = "4111", "fallback a creat/refolosit nota 667=4111 (scd=[" + lcScd + "] scc=[" + lcScc + "])"
*--- ROLLBACK ---------------------------------------------------------------------
gcCaz = "[rollback] "
loC = .NULL.
loC2 = .NULL.
llOk = MyInchideTranzactie(2)
DO Assert WITH llOk, "ROLLBACK executat (nimic nu ramane in schema)"
ENDIF
*----------------- verificare post-rollback (conexiune noua, autocommit) --------------
gcCaz = "[post-rollback] "
IF Used('crsverifrb')
Use In crsverifrb
ENDIF
goExecutor.oExecute([select a.id_nota, n.scd, n.ascd, n.scc, n.ascc from crm_politici_pret_art a, crm_note_vanzari v, note_contabile n ] + ;
[where a.id_pol = ] + TRANSFORM(lnIdPolStoc) + [ and a.id_articol = ] + TRANSFORM(lnArt) + ;
[ and v.id_nota = a.id_nota and n.id_set = v.id_set], 'crsverifrb')
DO Assert WITH Used('crsverifrb') And Reccount('crsverifrb') = 1 And ;
Alltrim(Nvl(crsverifrb.scd, [])) = "667" And Alltrim(Nvl(crsverifrb.scc, [])) = "4111", ;
"post-rollback articolul are din nou nota initiala 667=4111 (id=" + TRANSFORM(Iif(Used('crsverifrb'), crsverifrb.id_nota, 0)) + ")"
DO Assert WITH !(Used('crsverifrb') And Alltrim(Nvl(crsverifrb.ascd, [])) = "11"), "post-rollback analiticul 11 NU a supravietuit (ascd=[" + Alltrim(Nvl(Iif(Used('crsverifrb'), crsverifrb.ascd, ''), [])) + "])"
IF Used('crsverifrb')
Use In crsverifrb
ENDIF
*----------------- rezumat -----------------------------------------------------------------
gcCaz = ""
DO E2eLog WITH ""
DO E2eLog WITH "REZULTAT: " + TRANSFORM(gnPass) + " PASS / " + TRANSFORM(gnFail) + " FAIL"
DO E2eFinal
*==========================================================================================
PROCEDURE E2eLog
LPARAMETERS tcMsg
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
ENDPROC
PROCEDURE E2eErr
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
DO E2eLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
ENDPROC
PROCEDURE Assert
LPARAMETERS tlCond, tcMsg
IF tlCond
gnPass = gnPass + 1
DO E2eLog WITH "PASS: " + gcCaz + tcMsg
ELSE
gnFail = gnFail + 1
DO E2eLog WITH "FAIL: " + gcCaz + tcMsg
ENDIF
ENDPROC
*-- _frm_base.vc2 do_deschide_tranzactie: Transactions=2
PROCEDURE MyDeschideTranzactie
LOCAL llReturn, lnSuccesLocal
IF TYPE('goExecutor') = 'O'
goExecutor.oExecuta([select * from dual])
ENDIF
lnSuccesLocal = SQLSETPROP(gnHandle, "Transactions", 2)
llReturn = IIF(lnSuccesLocal < 0, .F., .T.)
RETURN llReturn
ENDPROC
*-- _frm_base.vc2 do_inchide_tranzactie: 1=commit, altfel rollback
PROCEDURE MyInchideTranzactie
LPARAMETERS tnTip
LOCAL llReturn, lnSuccesLocal
IF tnTip = 1
lnSuccesLocal = SQLCOMMIT(gnHandle)
ELSE
lnSuccesLocal = SQLROLLBACK(gnHandle)
ENDIF
IF lnSuccesLocal < 0
llReturn = .F.
ELSE
lnSuccesLocal = SQLSETPROP(gnHandle, "Transactions", 1)
llReturn = IIF(lnSuccesLocal < 0, .F., .T.)
ENDIF
RETURN llReturn
ENDPROC
PROCEDURE E2eFinal
DO E2eLog WITH "END " + TTOC(DATETIME())
QUIT
ENDPROC