* probe_12b_s7b_politica_nota.prg * Plan #12b, S7b - proba headless pe clasa cus_pret_nomenclator (COMUN\programe\ofacturare_comun.prg:2323), * metodele adaugate in S7b: incarca_nota_politica / salveaza_nota_politica (nota implicita a politicii * de stoc, folosita in optiunile facturarii, ofacturare.vc2). Clasa e definita direct in .prg * (Set Procedure To ofacturare_comun.prg, deja Additive in mediul de test) - CREATEOBJECT direct. * * Cazuri: * (1) asigura_politica() apelata de doua ori, ca din ROACONTRACTE (acelasi pachet PL/SQL, * D14 = pack_preturi.asigura_politica_stoc) dupa ce optiunea e golita -> o singura politica * noua (numarate randurile CRM_POLITICI_PRETURI inainte/dupa fiecare apel, nu doar id-ul). * (2) salveaza_nota_politica(id_pol_nou, '461', '7583') -> ID_NOTA citit DIRECT din * CRM_POLITICI_PRETURI (nu din proprietatile instantei), plus SCD/SCC ale notei citite prin * JOIN CRM_NOTE_VANZARI/NOTE_CONTABILE, comparate cu valorile asteptate 461/7583. * (3) incarca_nota_politica(acelasi id_pol) pe o instanta noua -> cScd/cScc = 461/7583, identic * cu ce s-a scris la (2). * Politica noua de la (1) e folosita si la (2)/(3), ca sa nu atinga politica 41 de productie - * dispare oricum la ROLLBACK. * * Spion pe goExecutor: nu e nevoie - toate verificarile citesc direct din Oracle (SQLEXEC), nu * numara apeluri RPC. * * Rulare: powershell -ExecutionPolicy Bypass -File ruleaza_suita.ps1 -Nume probe_12b_s7b_politica_nota * Log: D:\ROA\ROAFACTURARE\docs\loguri_12b\s7b_proba.log (cerut de sarcina, nu out\) SET SAFETY OFF SET TALK OFF SET NOTIFY OFF CLOSE DATABASES PUBLIC gcLog, gcCaz, gnPass, gnFail, gnTransOriginal gcLog = "D:\ROA\ROAFACTURARE\docs\loguri_12b\s7b_proba.log" IF !DIRECTORY("D:\ROA\ROAFACTURARE\docs\loguri_12b") MD "D:\ROA\ROAFACTURARE\docs\loguri_12b" ENDIF STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog) 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 gnIdUtil = 8 DO AfLog WITH "ENV OK gnHandle=" + TRANSFORM(gnHandle) gnTransOriginal = SQLGETPROP(gnHandle, "Transactions") SQLSETPROP(gnHandle, "Transactions", 2) DO AfLog WITH "Transactions manual, original=" + TRANSFORM(gnTransOriginal) LOCAL lnOk, lnCntInit, lnCntDupa1, lnCntDupa2, lcOptInit, loA, loB, lnPolA, lnPolB *========================================================================================== * CAZ (1): asigura_politica_stoc apelata de doua ori (ca din ROACONTRACTE) -> o singura politica *========================================================================================== gcCaz = "[1-asigura_politica_stoc-x2] " * precondition: sesiunea reala initializeaza pack_facturare.nid_moneda_nationala inaintea D14 * (initializeaza_facturare) - tiparul confirmat in docs\proba_s6a_asigura_politica_stoc.sql lnOk = SQLEXEC(gnHandle, "begin pack_facturare.nid_moneda_nationala := pack_def.GetIdMonedaNationala(); end;") DO Verdict WITH lnOk > 0, "precondition pack_facturare.nid_moneda_nationala initializat" lnOk = SQLEXEC(gnHandle, "select count(*) cnt from crm_politici_preturi", "crscnt0") lnCntInit = IIF(lnOk > 0 AND USED('crscnt0'), crscnt0.cnt, -1) IF USED('crscnt0') USE IN crscnt0 ENDIF lnOk = SQLEXEC(gnHandle, "select varvalue from optiuni where program='ROAFACTURARE' and varname='ID_POL_PRET_STOC'", "crsopt0") lcOptInit = IIF(lnOk > 0 AND USED('crsopt0') AND !ISNULL(crsopt0.varvalue), ALLTRIM(crsopt0.varvalue), "") IF USED('crsopt0') USE IN crsopt0 ENDIF DO AfLog WITH " OPTIUNE initiala ID_POL_PRET_STOC=[" + lcOptInit + "], politici initial=" + TRANSFORM(lnCntInit) lnOk = SQLEXEC(gnHandle, "UPDATE OPTIUNI SET VARVALUE = NULL WHERE PROGRAM = 'ROAFACTURARE' AND VARNAME = 'ID_POL_PRET_STOC'") DO Verdict WITH lnOk > 0, "UPDATE OPTIUNI ID_POL_PRET_STOC=NULL (tranzactie, ROLLBACK la final) - lnOk=" + TRANSFORM(lnOk) loA = CREATEOBJECT('cus_pret_nomenclator') lnPolA = loA.asigura_politica() DO Verdict WITH lnPolA > 0, "primul apel asigura_politica() > 0 (obtinut " + TRANSFORM(lnPolA) + ")" lnOk = SQLEXEC(gnHandle, "select count(*) cnt from crm_politici_preturi", "crscnt1") lnCntDupa1 = IIF(lnOk > 0 AND USED('crscnt1'), crscnt1.cnt, -1) IF USED('crscnt1') USE IN crscnt1 ENDIF DO Verdict WITH lnCntDupa1 = lnCntInit + 1, "dupa primul apel: politici " + TRANSFORM(lnCntInit) + " -> " + TRANSFORM(lnCntDupa1) + " (+1 asteptat)" loB = CREATEOBJECT('cus_pret_nomenclator') lnPolB = loB.asigura_politica() lnOk = SQLEXEC(gnHandle, "select count(*) cnt from crm_politici_preturi", "crscnt2") lnCntDupa2 = IIF(lnOk > 0 AND USED('crscnt2'), crscnt2.cnt, -1) IF USED('crscnt2') USE IN crscnt2 ENDIF DO Verdict WITH lnPolB = lnPolA, "al doilea apel (ca din ROACONTRACTE) intoarce acelasi id=" + TRANSFORM(lnPolA) + " (obtinut " + TRANSFORM(lnPolB) + ")" DO Verdict WITH lnCntDupa2 = lnCntDupa1, "al doilea apel NU creeaza politica noua (politici " + TRANSFORM(lnCntDupa1) + " -> " + TRANSFORM(lnCntDupa2) + ")" IF !EMPTY(lcOptInit) lnOk = SQLEXEC(gnHandle, "UPDATE OPTIUNI SET VARVALUE = '" + lcOptInit + "' WHERE PROGRAM = 'ROAFACTURARE' AND VARNAME = 'ID_POL_PRET_STOC'") DO Verdict WITH lnOk > 0, "restaurare OPTIUNI ID_POL_PRET_STOC=" + lcOptInit + " (tot in tranzactie) - lnOk=" + TRANSFORM(lnOk) ENDIF *========================================================================================== * CAZ (2): salveaza_nota_politica scrie ID_NOTA in CRM_POLITICI_PRETURI (citit din Oracle) *========================================================================================== gcCaz = "[2-salveaza_nota_politica] " LOCAL loC, llRes2, lnIdNotaCitit loC = CREATEOBJECT('cus_pret_nomenclator') llRes2 = loC.salveaza_nota_politica(lnPolA, '461', '7583') DO Verdict WITH llRes2, "salveaza_nota_politica(" + TRANSFORM(lnPolA) + ",461,7583) = .T." lnOk = SQLEXEC(gnHandle, "select id_nota from crm_politici_preturi where id_pol = " + TRANSFORM(lnPolA), "crsverif2") lnIdNotaCitit = IIF(lnOk > 0 AND USED('crsverif2') AND RECCOUNT('crsverif2') = 1, NVL(crsverif2.id_nota,-999), -999) IF USED('crsverif2') USE IN crsverif2 ENDIF DO Verdict WITH lnIdNotaCitit > 0, "ID_NOTA citit direct din CRM_POLITICI_PRETURI (nu din instanta) > 0 - obtinut " + TRANSFORM(lnIdNotaCitit) lnOk = SQLEXEC(gnHandle, "select n.scd, n.scc from crm_note_vanzari v, note_contabile n where v.id_nota = " + TRANSFORM(lnIdNotaCitit) + " and n.id_set = v.id_set", "crsnota2") DO Verdict WITH lnOk > 0 AND USED('crsnota2') AND RECCOUNT('crsnota2') = 1 AND ALLTRIM(crsnota2.scd) == "461" AND ALLTRIM(crsnota2.scc) == "7583", ; "nota din Oracle are scd/scc = 461/7583 (asteptat independent, nu cursorul clasei) - obtinut " + ; IIF(USED('crsnota2') AND RECCOUNT('crsnota2') = 1, ALLTRIM(NVL(crsnota2.scd,'?')) + '/' + ALLTRIM(NVL(crsnota2.scc,'?')), '') IF USED('crsnota2') USE IN crsnota2 ENDIF *========================================================================================== * CAZ (3): incarca_nota_politica citeste inapoi identic (instanta noua) *========================================================================================== gcCaz = "[3-incarca_nota_politica] " LOCAL loD, llRes3 loD = CREATEOBJECT('cus_pret_nomenclator') llRes3 = loD.incarca_nota_politica(lnPolA) DO Verdict WITH llRes3, "incarca_nota_politica(" + TRANSFORM(lnPolA) + ") = .T." DO Verdict WITH ALLTRIM(loD.cScd) == "461", "incarca_nota_politica: cScd=461 (obtinut [" + ALLTRIM(loD.cScd) + "])" DO Verdict WITH ALLTRIM(loD.cScc) == "7583", "incarca_nota_politica: cScc=7583 (obtinut [" + ALLTRIM(loD.cScc) + "])" 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] " lnOk = SQLEXEC(gnHandle, "ROLLBACK") DO AfLog WITH "ROLLBACK lnOk=" + TRANSFORM(lnOk) IF TYPE('gnTransOriginal') = 'N' SQLSETPROP(gnHandle, "Transactions", gnTransOriginal) ENDIF DO AfLog WITH "TOTAL PASS=" + TRANSFORM(gnPass) + " FAIL=" + TRANSFORM(gnFail) DO AfLog WITH "END " + TTOC(DATETIME()) QUIT ENDPROC