* 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 "". * * 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)) = "", "ultimul rand e (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