259 lines
15 KiB
Plaintext
259 lines
15 KiB
Plaintext
* probe_vanzare_ui_cota_tva.prg
|
|
* Proba headless pe pagina "Vanzare" din fisa articolului (COMUN\clase\onom_articole.vc2, clasa
|
|
* frm_catalog_articole_nou) si pe clasa cus_pret_nomenclator (COMUN\programe\ofacturare_comun.prg):
|
|
* combo-ul de cota TVA din tabela pe luni, pastrarea PROC_TVAV NULL ("ales la facturare"), cota
|
|
* standard pe articol nou, recalculul pretului derivat si etichetele paginii.
|
|
*
|
|
* Fara dialoguri: formularul nu se arata niciodata (CREATEOBJECT fara Show()), iar AMESSAGEBOX e
|
|
* inlocuit de mock-ul incarcat de test_init_env_auto_roafacturare.prg sub -A -T.
|
|
* Fara scriere permanenta in Oracle: singura scriere (cazul NOMEN) se face in tranzactie manuala,
|
|
* inchisa cu ROLLBACK.
|
|
* Cazurile ruleaza in procese vfp9 separate - a doua instantiere a formularului in acelasi proces
|
|
* se autoblocheaza (tiparul probe_12b_s6c_fisa_pagina_vanzare.prg).
|
|
*
|
|
* Articol de proba: 2528841557, pe politica 41 (PRETURI_CU_TVA = 0, PROC_TVAV = NULL).
|
|
* Cotele lunii (comun.vcote_tva): 21/1.21, 19/1.19, 11/1.11, 0/1, apoi randul "<ALES LA FACTURARE>".
|
|
*
|
|
* Rulare (form): powershell -ExecutionPolicy Bypass -File ruleaza_suita.ps1 -Nume probe_vanzare_ui_cota_tva
|
|
* Rulare (nomen): "C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe" -A -T probe_vanzare_ui_cota_tva.prg NOMEN
|
|
* Log: D:\ROA\ROAFACTURARE\docs\loguri_12b\vanzare_ui_cota_tva.log (fiecare proces face APPEND)
|
|
|
|
PARAMETERS tcModo
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
SET NOTIFY OFF
|
|
CLOSE DATABASES
|
|
|
|
LOCAL lcMod
|
|
lcMod = UPPER(ALLTRIM(IIF(VARTYPE(tcModo) = "C", tcModo, "")))
|
|
IF EMPTY(lcMod)
|
|
lcMod = "FORM"
|
|
ENDIF
|
|
|
|
PUBLIC gcLog, gcCaz, gnPass, gnFail
|
|
gcLog = "D:\ROA\ROAFACTURARE\docs\loguri_12b\vanzare_ui_cota_tva.log"
|
|
IF !DIRECTORY("D:\ROA\ROAFACTURARE\docs\loguri_12b")
|
|
MD "D:\ROA\ROAFACTURARE\docs\loguri_12b"
|
|
ENDIF
|
|
STRTOFILE("--- caz (" + lcMod + ") START " + TTOC(DATETIME()) + " ---" + CHR(13) + CHR(10), gcLog, 1)
|
|
gcCaz = ""
|
|
gnPass = 0
|
|
gnFail = 0
|
|
ON ERROR DO AfErr 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 AfLog WITH "FAIL: conexiune Oracle esuata"
|
|
DO Final
|
|
ENDIF
|
|
PUBLIC gnPc
|
|
gnPc = 2
|
|
gnIdUtil = 8
|
|
gcNumeProgram = [ROAFACTURARE]
|
|
DO AfLog WITH "ENV OK gnHandle=" + TRANSFORM(gnHandle) + " gnPc=" + TRANSFORM(gnPc) + " gnAn=" + TRANSFORM(gnAn) + " gnLuna=" + TRANSFORM(gnLuna) + " gnPc=" + TRANSFORM(gnPc)
|
|
|
|
LOCAL lnIdArtProba, lnProcStd, lnCoefStd
|
|
lnIdArtProba = 2528841557
|
|
lnProcStd = GetProcTvaStandard()
|
|
lnCoefStd = ROUND((lnProcStd + 100)/100, 4)
|
|
DO AfLog WITH "cota standard " + TRANSFORM(gnLuna) + "/" + TRANSFORM(gnAn) + ": procent=" + TRANSFORM(lnProcStd) + " coeficient=" + TRANSFORM(lnCoefStd)
|
|
|
|
DO CASE
|
|
*=================================================================================================
|
|
* Cazul FORM: pagina "Vanzare" - combo cota TVA din vcote_tva, etichete, recalcul
|
|
*=================================================================================================
|
|
CASE lcMod == "FORM"
|
|
* incarcare explicita din calea COMPLETA (tiparul S7a): ofacturare.vcx inainte de
|
|
* onom_articole.vcx, ca la instalarea reala
|
|
SET PATH TO (gcAppPath + "COMUN\CLASE") ADDITIVE
|
|
SET CLASSLIB TO (gcAppPath + "COMUN\CLASE\ofacturare.vcx") ADDITIVE
|
|
SET CLASSLIB TO (gcAppPath + "COMUN\CLASE\onom_articole.vcx") ADDITIVE
|
|
|
|
* precondition-urile pe care le face onomenclatoare.prg inainte sa deschida fisa
|
|
update_um()
|
|
update_um_iso()
|
|
update_grupe_art()
|
|
update_subgrupe_art()
|
|
|
|
gcCaz = "[form-precondition] "
|
|
LOCAL lnOk, loRec
|
|
lnOk = goExecutor.oExecuta('select * from vnom_articole where id_articol = ' + TRANSFORM(lnIdArtProba), 'vnom_articole_nou')
|
|
DO Verdict WITH lnOk # .F. AND USED('vnom_articole_nou') AND RECCOUNT('vnom_articole_nou') = 1, "SELECT vnom_articole pentru articolul de proba"
|
|
SELECT vnom_articole_nou
|
|
SCATTER NAME loRec MEMO
|
|
loRec.conditii_pastrare = NVL(loRec.conditii_pastrare,'')
|
|
USE IN vnom_articole_nou
|
|
|
|
lnOk = SQLEXEC(gnHandle, "select a.proc_tvav, nvl(p.preturi_cu_tva,0) ptva from crm_politici_pret_art a, crm_politici_preturi p where a.id_pol = p.id_pol and a.id_pol = 41 and a.id_articol = " + TRANSFORM(lnIdArtProba), "crsref")
|
|
DO Verdict WITH lnOk > 0 AND USED('crsref') AND RECCOUNT('crsref') = 1, "referinta directa proc_tvav / preturi_cu_tva pentru politica 41"
|
|
LOCAL llRefProcNull, lnRefPreturiCuTva
|
|
llRefProcNull = .F.
|
|
lnRefPreturiCuTva = -1
|
|
IF USED('crsref') AND RECCOUNT('crsref') = 1
|
|
llRefProcNull = ISNULL(crsref.proc_tvav)
|
|
lnRefPreturiCuTva = crsref.ptva
|
|
ENDIF
|
|
IF USED('crsref')
|
|
USE IN crsref
|
|
ENDIF
|
|
DO AfLog WITH " referinta: proc_tvav=" + IIF(llRefProcNull,"NULL",TRANSFORM(lnCoefStd)) + " preturi_cu_tva=" + TRANSFORM(lnRefPreturiCuTva)
|
|
DO Verdict WITH llRefProcNull, "preconditie: articolul de proba are PROC_TVAV NULL (cazul 'ales la facturare')"
|
|
DO Verdict WITH lnRefPreturiCuTva = 0, "preconditie: politica 41 are PRETURI_CU_TVA = 0 (referinta e pretul fara TVA)"
|
|
|
|
gcCaz = "[form-createobject] "
|
|
PRIVATE poRec, pnIdAMS
|
|
poRec = loRec
|
|
pnIdAMS = lnIdArtProba
|
|
LOCAL loForm, llCrapat, lcErrMsg, lnErrNo
|
|
llCrapat = .F.
|
|
lcErrMsg = ''
|
|
lnErrNo = 0
|
|
TRY
|
|
loForm = CREATEOBJECT('frm_catalog_articole_nou', loRec, lnIdArtProba, 'UPDATE')
|
|
CATCH TO loExc
|
|
llCrapat = .T.
|
|
lnErrNo = loExc.ErrorNo
|
|
lcErrMsg = loExc.Message
|
|
DO AfLog WITH " diagnostic exceptie: Procedure=[" + TRANSFORM(loExc.Procedure) + "] LineNo=" + TRANSFORM(loExc.LineNo) + " LineContents=[" + TRANSFORM(loExc.LineContents) + "] Details=[" + TRANSFORM(loExc.Details) + "]"
|
|
ENDTRY
|
|
DO AfLog WITH " rezultat CREATEOBJECT: llCrapat=" + TRANSFORM(llCrapat) + " errno=" + TRANSFORM(lnErrNo) + " mesaj=[" + lcErrMsg + "]"
|
|
DO Verdict WITH !llCrapat AND lnErrNo = 0, "CREATEOBJECT frm_catalog_articole_nou (UPDATE) trece (errno=0)"
|
|
|
|
IF !llCrapat
|
|
LOCAL loCb, lnI, lcLista
|
|
|
|
gcCaz = "[form-combo-cota] "
|
|
DO Verdict WITH loForm._pageframe1.PageCount = 3, "PageCount = 3 (Page3 Vanzare vizibila)"
|
|
DO Verdict WITH PEMSTATUS(loForm._pageframe1.Page3,"Cb_tx_proc_tvav",5), "controlul Cb_tx_proc_tvav exista pe Page3"
|
|
DO Verdict WITH PEMSTATUS(loForm._pageframe1.Page3,"Clb_tx_proc_tvav",5) = .F., "vechiul Clb_tx_proc_tvav (textbox) nu mai exista"
|
|
loCb = loForm._pageframe1.Page3.Cb_tx_proc_tvav._cbbase1
|
|
DO Verdict WITH UPPER(ALLTRIM(loCb.BaseClass)) = "COMBOBOX", "Cb_tx_proc_tvav._cbbase1 e ComboBox (obtinut " + ALLTRIM(loCb.BaseClass) + ")"
|
|
DO Verdict WITH loCb.RowSourceType = 2, "RowSourceType = 2 alias (obtinut " + TRANSFORM(loCb.RowSourceType) + ")"
|
|
DO Verdict WITH UPPER(ALLTRIM(loCb.RowSource)) = "CRS_COTE_TVA", "RowSource = crs_cote_tva (obtinut [" + loCb.RowSource + "])"
|
|
DO Verdict WITH USED('crs_cote_tva'), "cursorul crs_cote_tva e deschis"
|
|
DO Verdict WITH loCb.ListCount = 5, "ListCount = 5 (4 cote ale lunii + randul 'ales la facturare') (obtinut " + TRANSFORM(loCb.ListCount) + ")"
|
|
lcLista = ""
|
|
FOR lnI = 1 TO loCb.ListCount
|
|
lcLista = lcLista + "[" + ALLTRIM(loCb.List(lnI)) + "]"
|
|
ENDFOR
|
|
DO AfLog WITH " lista combo: " + lcLista
|
|
DO Verdict WITH ALLTRIM(loCb.List(1)) = "21.00", "primul rand afiseaza procentul 21 (obtinut [" + ALLTRIM(loCb.List(1)) + "])"
|
|
DO Verdict WITH ALLTRIM(loCb.List(loCb.ListCount)) = "<ALES LA FACTURARE>", "ultimul rand e <ALES LA FACTURARE> (obtinut [" + ALLTRIM(loCb.List(loCb.ListCount)) + "])"
|
|
DO Verdict WITH loCb.ListIndex = loCb.ListCount, "ListIndex pe randul 'ales la facturare' (PROC_TVAV NULL) (obtinut " + TRANSFORM(loCb.ListIndex) + ")"
|
|
DO Verdict WITH loForm._pageframe1.Page3.Cb_tx_proc_tvav.TabIndex = 3, "TabIndex Cb_tx_proc_tvav = 3"
|
|
|
|
gcCaz = "[form-date-neatinse] "
|
|
DO Verdict WITH ISNULL(loForm.oPretNom.nProcTvav), "nProcTvav a ramas NULL dupa Init (cota din baza nu a fost alterata) (obtinut " + IIF(ISNULL(loForm.oPretNom.nProcTvav),"NULL",TRANSFORM(loForm.oPretNom.nProcTvav)) + ")"
|
|
DO Verdict WITH loForm.oPretNom.lPreturiCuTva = .F., "lPreturiCuTva = .F. (politica 41)"
|
|
|
|
gcCaz = "[form-etichete] "
|
|
DO Verdict WITH loForm._pageframe1.Page3.Clb_tx_cont_dedus.Lb_simplu1.Caption = "Cont venit articol", "eticheta contului de venit = 'Cont venit articol' (obtinut [" + loForm._pageframe1.Page3.Clb_tx_cont_dedus.Lb_simplu1.Caption + "])"
|
|
DO Verdict WITH loForm._pageframe1.Page3.Clb_tx_pret_ftva.Lb_simplu1.Caption = "Pret fara TVA (pret lista)", "eticheta pretului de referinta = 'Pret fara TVA (pret lista)' (obtinut [" + loForm._pageframe1.Page3.Clb_tx_pret_ftva.Lb_simplu1.Caption + "])"
|
|
DO Verdict WITH loForm._pageframe1.Page3.Clb_tx_pret_ftva.Lb_simplu1.FontBold, "eticheta pretului de referinta e FontBold"
|
|
DO Verdict WITH loForm._pageframe1.Page3.Clb_tx_pret_ctva.Lb_simplu1.Caption = "Pret cu TVA", "eticheta celuilalt pret = 'Pret cu TVA' (obtinut [" + loForm._pageframe1.Page3.Clb_tx_pret_ctva.Lb_simplu1.Caption + "])"
|
|
DO Verdict WITH !loForm._pageframe1.Page3.Clb_tx_pret_ctva.Lb_simplu1.FontBold, "eticheta celuilalt pret NU e FontBold"
|
|
DO Verdict WITH PEMSTATUS(loForm._pageframe1.Page3,"Lb_info_conturi",5), "controlul Lb_info_conturi exista pe Page3"
|
|
DO Verdict WITH loForm._pageframe1.Page3.Lb_info_conturi.Caption = "Necompletate: debit 4111, credit contul de venit al articolului", "textul informativ al conturilor (obtinut [" + loForm._pageframe1.Page3.Lb_info_conturi.Caption + "])"
|
|
|
|
gcCaz = "[form-interactive-change] "
|
|
SELECT crs_cote_tva
|
|
LOCATE FOR !ISNULL(proc_tva) AND proc_tva = lnCoefStd
|
|
DO Verdict WITH FOUND(), "randul cotei standard (" + TRANSFORM(lnCoefStd) + ") gasit in crs_cote_tva"
|
|
loCb.ListIndex = RECNO()
|
|
loForm.oPretNom.nPretFtva = 100
|
|
loForm.oPretNom.nPretCtva = 0
|
|
loCb.InteractiveChange()
|
|
DO Verdict WITH ROUND(NVL(loForm.oPretNom.nProcTvav,0),4) = lnCoefStd, "InteractiveChange a scris coeficientul " + TRANSFORM(lnCoefStd) + " in nProcTvav (obtinut " + TRANSFORM(loForm.oPretNom.nProcTvav) + ")"
|
|
DO Verdict WITH ROUND(loForm.oPretNom.nPretCtva,2) = ROUND(100 * lnCoefStd,2), "pretul derivat recalculat de combo: 100 fara TVA -> " + TRANSFORM(ROUND(100 * lnCoefStd,2)) + " cu TVA (obtinut " + TRANSFORM(loForm.oPretNom.nPretCtva) + ")"
|
|
|
|
gcCaz = "[form-recalcul] "
|
|
loForm.oPretNom.nProcTvav = .NULL.
|
|
DO Verdict WITH loForm.oPretNom.recalculeaza_pret(100, .T.) = ROUND(100 * lnCoefStd, gnPc), "recalculeaza_pret cu cota lipsa (NULL) foloseste cota standard a lunii: 100 -> " + TRANSFORM(ROUND(100 * lnCoefStd, gnPc)) + " (obtinut " + TRANSFORM(loForm.oPretNom.recalculeaza_pret(100, .T.)) + ")"
|
|
loForm.oPretNom.nProcTvav = 1.21
|
|
DO Verdict WITH loForm.oPretNom.recalculeaza_pret(100, .T.) = 121, "recalculeaza_pret(100,.T.) cu coeficientul 1.21 = 121 (obtinut " + TRANSFORM(loForm.oPretNom.recalculeaza_pret(100, .T.)) + ")"
|
|
DO Verdict WITH loForm.oPretNom.recalculeaza_pret(121, .F.) = 100, "recalculeaza_pret(121,.F.) = 100 (reciproc, obtinut " + TRANSFORM(loForm.oPretNom.recalculeaza_pret(121, .F.)) + ")"
|
|
|
|
RELEASE loForm
|
|
ENDIF
|
|
|
|
*=================================================================================================
|
|
* Cazul NOMEN: clasa cus_pret_nomenclator - cota standard pe articol nou, PROC_TVAV NULL salvat
|
|
*=================================================================================================
|
|
CASE lcMod == "NOMEN"
|
|
gcCaz = "[nomen-articol-nou] "
|
|
LOCAL loPN
|
|
loPN = CREATEOBJECT('cus_pret_nomenclator')
|
|
DO Verdict WITH VARTYPE(loPN) = "O", "cus_pret_nomenclator instantiat"
|
|
DO Verdict WITH loPN.incarca(0), "incarca(0) (articol nou) = .T."
|
|
DO Verdict WITH !ISNULL(loPN.nProcTvav) AND ROUND(loPN.nProcTvav,4) = lnCoefStd, "articol nou: nProcTvav = coeficientul standard " + TRANSFORM(lnCoefStd) + " (obtinut " + TRANSFORM(loPN.nProcTvav) + ")"
|
|
DO Verdict WITH loPN.nPretFtva = 0 AND loPN.nPretCtva = 0, "articol nou: preturile pornesc de la 0"
|
|
DO Verdict WITH loPN.recalculeaza_pret(100, .T.) = ROUND(100 * lnCoefStd, gnPc), "articol nou: 100 fara TVA -> " + TRANSFORM(ROUND(100 * lnCoefStd, gnPc)) + " cu TVA"
|
|
DO Verdict WITH loPN.recalculeaza_pret(ROUND(100 * lnCoefStd, gnPc), .F.) = 100, "articol nou: revenire la 100 fara TVA (reciproc)"
|
|
|
|
gcCaz = "[nomen-articol-existent-null] "
|
|
LOCAL loPE
|
|
loPE = CREATEOBJECT('cus_pret_nomenclator')
|
|
DO Verdict WITH loPE.incarca(lnIdArtProba), "incarca(" + TRANSFORM(lnIdArtProba) + ") = .T."
|
|
DO Verdict WITH ISNULL(loPE.nProcTvav), "articol existent cu PROC_TVAV NULL: nProcTvav ramane NULL (obtinut " + IIF(ISNULL(loPE.nProcTvav),"NULL",TRANSFORM(loPE.nProcTvav)) + ")"
|
|
DO Verdict WITH loPE.lPreturiCuTva = .F., "lPreturiCuTva = .F. pentru politica 41"
|
|
DO Verdict WITH loPE.recalculeaza_pret(100, .T.) = ROUND(100 * lnCoefStd, gnPc), "cota lipsa: recalculeaza_pret foloseste cota standard (100 -> " + TRANSFORM(ROUND(100 * lnCoefStd, gnPc)) + ") (obtinut " + TRANSFORM(loPE.recalculeaza_pret(100, .T.)) + ")"
|
|
|
|
gcCaz = "[nomen-salvare-proc-tvav-null] "
|
|
LOCAL lnTransOrig, lnOk2
|
|
lnTransOrig = SQLGETPROP(gnHandle, "Transactions")
|
|
SQLSETPROP(gnHandle, "Transactions", 2)
|
|
loPE.nPretFtva = 50
|
|
loPE.nPretCtva = 60.5
|
|
DO Verdict WITH ISNULL(loPE.nProcTvav), "preconditie: nProcTvav e NULL inainte de salveaza()"
|
|
DO Verdict WITH loPE.salveaza(lnIdArtProba), "salveaza() = .T. cu PROC_TVAV NULL"
|
|
lnOk2 = SQLEXEC(gnHandle, "select proc_tvav, pretftva, pretctva from crm_politici_pret_art where id_pol = 41 and id_articol = " + TRANSFORM(lnIdArtProba), "crsnull")
|
|
DO Verdict WITH lnOk2 > 0 AND USED('crsnull') AND RECCOUNT('crsnull') = 1, "randul din crm_politici_pret_art citit in tranzactie"
|
|
IF USED('crsnull') AND RECCOUNT('crsnull') = 1
|
|
DO Verdict WITH ISNULL(crsnull.proc_tvav), "Oracle: PROC_TVAV a ramas NULL dupa salvare"
|
|
DO Verdict WITH ROUND(crsnull.pretftva,2) = 50, "Oracle: PRETFTVA = 50 (obtinut " + TRANSFORM(crsnull.pretftva) + ")"
|
|
DO Verdict WITH ROUND(crsnull.pretctva,2) = 60.5, "Oracle: PRETCTVA = 60.5 (obtinut " + TRANSFORM(crsnull.pretctva) + ")"
|
|
ENDIF
|
|
IF USED('crsnull')
|
|
USE IN crsnull
|
|
ENDIF
|
|
lnOk2 = SQLEXEC(gnHandle, "ROLLBACK")
|
|
SQLSETPROP(gnHandle, "Transactions", lnTransOrig)
|
|
DO Verdict WITH lnOk2 > 0, "ROLLBACK dupa verificare (datele de proba nu raman)"
|
|
ENDCASE
|
|
|
|
DO Final
|
|
|
|
PROCEDURE Verdict
|
|
LPARAMETERS tlCond, tcMsg
|
|
IF tlCond
|
|
gnPass = gnPass + 1
|
|
DO AfLog WITH "PASS: " + gcCaz + tcMsg
|
|
ELSE
|
|
gnFail = gnFail + 1
|
|
DO AfLog WITH "FAIL: " + gcCaz + tcMsg
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROCEDURE AfLog
|
|
LPARAMETERS tcMsg
|
|
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
|
ENDPROC
|
|
|
|
PROCEDURE AfErr
|
|
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
|
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + gcCaz + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
|
|
ENDPROC
|
|
|
|
PROCEDURE Final
|
|
LOCAL lnOk
|
|
gcCaz = "[final] "
|
|
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
|
lnOk = SQLEXEC(gnHandle, "ROLLBACK")
|
|
DO AfLog WITH "ROLLBACK lnOk=" + TRANSFORM(lnOk) + " (plasa de siguranta)"
|
|
ENDIF
|
|
DO AfLog WITH "PARTIAL PASS=" + TRANSFORM(gnPass) + " FAIL=" + TRANSFORM(gnFail)
|
|
DO AfLog WITH "END " + TTOC(DATETIME())
|
|
QUIT
|
|
ENDPROC
|