From b625609645081ac53000e679d4fc0cf4541e5e86 Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Mon, 23 Mar 2026 09:15:17 +0000 Subject: [PATCH] feat: configurable invoice line sorting via RF_SORTARE_COMANDA option cursor_comanda in PACK_FACTURARE now reads RF_SORTARE_COMANDA from OPTIUNI: 1=alphabetical (default, existing behavior), 0=original web order (by ID_COMANDA_ELEMENT). Co-Authored-By: Claude Opus 4.6 (1M context) --- api/database-scripts/08_PACK_FACTURARE.pck | 8 +- api/database-scripts/09_pack_sesiune.pck | 1179 ++++++++++++++++++++ 2 files changed, 1185 insertions(+), 2 deletions(-) create mode 100644 api/database-scripts/09_pack_sesiune.pck diff --git a/api/database-scripts/08_PACK_FACTURARE.pck b/api/database-scripts/08_PACK_FACTURARE.pck index 752d086..08bb360 100644 --- a/api/database-scripts/08_PACK_FACTURARE.pck +++ b/api/database-scripts/08_PACK_FACTURARE.pck @@ -13,6 +13,7 @@ CREATE OR REPLACE PACKAGE "PACK_FACTURARE" is -- 20.03.2026 - duplicate CODMAT pe comanda: PRET in GROUP BY/JOIN (cursor_comanda, cursor_lucrare, inchide_comanda, adauga_articol_*) -- 20.03.2026 - SIGN() fix for negative quantity (discount) lines in cursor_comanda and inchide_comanda -- 20.03.2026 - Fix NULL SUMA in adauga_articol_factura: use PTVA from COMENZI_ELEMENTE for discount lines (NVL2) + -- 23.03.2026 - Optiune sortare articole pe factura: RF_SORTARE_COMANDA (1=alfabetic, 0=ordine comanda) in cursor_comanda cnume_program VARCHAR(30) := 'ROAFACTURARE'; @@ -2939,6 +2940,7 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is V_ID_COMANDA COMENZI.ID_COMANDA%TYPE; V_NR_INREGISTRARI NUMBER(10); V_NR_INREGISTRARI_TOT NUMBER(10); + V_TIP_SORTARE NUMBER(1) := NVL(pack_sesiune.getOptiuneFirma('RF_SORTARE_COMANDA'), 1); BEGIN pack_facturare.initializeaza_facturare(V_ID_UTIL); V_ID_COMANDA := TO_NUMBER(V_LISTAID); @@ -3058,7 +3060,8 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is WHERE A.STERS = 0 AND A.ID_COMANDA = V_ID_COMANDA AND SIGN(A.CANTITATE) * (A.CANTITATE - NVL(D.CANTITATE, 0)) > 0 - ORDER BY C.DENUMIRE; + ORDER BY CASE WHEN V_TIP_SORTARE = 1 THEN C.DENUMIRE END ASC, + CASE WHEN V_TIP_SORTARE = 0 THEN A.ID_COMANDA_ELEMENT END ASC; ELSE -- aviz OPEN V_CURSOR FOR @@ -3145,7 +3148,8 @@ CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is WHERE A.STERS = 0 AND A.ID_COMANDA = V_ID_COMANDA AND SIGN(A.CANTITATE) * (A.CANTITATE - NVL(D.CANTITATE, 0)) > 0 - ORDER BY C.DENUMIRE; + ORDER BY CASE WHEN V_TIP_SORTARE = 1 THEN C.DENUMIRE END ASC, + CASE WHEN V_TIP_SORTARE = 0 THEN A.ID_COMANDA_ELEMENT END ASC; END IF; END cursor_comanda; ------------------------------------------------------------------- diff --git a/api/database-scripts/09_pack_sesiune.pck b/api/database-scripts/09_pack_sesiune.pck new file mode 100644 index 0000000..63e65e7 --- /dev/null +++ b/api/database-scripts/09_pack_sesiune.pck @@ -0,0 +1,1179 @@ +create or replace package pack_sesiune is + + -- Author : LIANA.MACINIC + -- Created : 1/6/2005 3:32:39 PM + -- Purpose : + + -- 30.09.2009 + -- marius.mutu + -- calculeaza_total_cu_tva, calculeaza_total_fara_tva, calculeaza_total_tva - nvl(V_AJUSTARE,0) + + -- Public type declarations + V_Schema varchar2(64); + dev_idLucrare number(20); + dev_idOrdl number(20); + dev_idOper number(20); + anbal number(4); + lunabal number(2); + dev_an number(4); + dev_luna number(2); + an number(4); + luna number(2); + gest_data_init date; + gest_data_final date; + sal_idStat number(10); + id_prg_owner syn_nom_programe.id_program%Type; + id_prg syn_def_programe.id_prog%Type; + comenzi_idSectie number(5); + + -- cont plcont.cont%type; + cont VARCHAR2(4); + + nIdeROASTART number(2) := 0; + nIdeROADEF number(2) := 1; + nIdeROACONT number(2) := 2; + nIdeROASAL number(2) := 3; + nIdeROARES number(2) := 4; + nIdeROAGEST number(2) := 5; + nIdeROAIMOB number(2) := 6; + nIdeROAMANAGER number(2) := 7; + nIdeROAAUTO number(2) := 8; + nIdeROANOR number(2) := 9; + nIdeROADECL number(2) := 10; + nIdeROARETAIL number(2) := 58; + nID_UTIL syn_utilizatori.id_util%Type; + nid_moneda_nationala nom_valute.id_valuta%TYPE; + nzecimale_pretv number(2); + nzecimale_preta number(2); + nzecimale_pretaval number(2); + nzecimale_pretvval number(2); + nzecimale_sumav number(2); + nzecimale_sumaa number(2); + nzecimale_sumaval number(2); + + function id_sesiune RETURN NUMBER; + function get_data_init return date; + function get_data_final return date; + procedure set_data_init(tcdata date); + procedure set_data_final(tcdata date); + procedure setlunabal(V_LUNA in number); + procedure setanbal(V_AN in number); + procedure setLuna(V_LUNA in number); + procedure setAn(V_AN in number); + procedure setcont(V_CONT IN varchar2); + procedure setSchema(v_gcs in varchar2); + function getlunabal return number; + function getanbal return number; + function getluna return number; + function getan return number; + function getcont return varchar2; + function getultimazi return date; + function getSchema return varchar2; + PROCEDURE set_data_ron(V_GCS VARCHAR2); + FUNCTION get_anron RETURN ACT_TEMP.AN%TYPE; + FUNCTION get_lunaron RETURN ACT_TEMP.LUNA%TYPE; + FUNCTION suma_ron(TNSUMA NUMBER, TNAN NUMBER, TNLUNA NUMBER) RETURN NUMBER; + FUNCTION suma_ron(TNSUMA NUMBER, + TNAN NUMBER, + TNLUNA NUMBER, + TNPRECIZIE NUMBER) RETURN NUMBER; + FUNCTION suma_ron(TNSUMA NUMBER, TDDATA DATE) RETURN NUMBER; + procedure set_id_stat(tn_id_stat in number); + function get_id_stat return number; + FUNCTION getoptiunefirma(tcS IN VARCHAR2, tcOptiune IN VARCHAR2) + RETURN VARCHAR2; + FUNCTION getOptiuneFirma(tcOptiune IN VARCHAR2) RETURN VARCHAR2; + PROCEDURE set_id_prg_owner(tnId_Prg_Owner IN syn_nom_programe.id_program%Type); + PROCEDURE set_id_prg(tnId_Prg IN syn_def_programe.id_prog%Type); + FUNCTION get_id_prg_owner return syn_nom_programe.id_program%Type; + FUNCTION get_id_prg return syn_def_programe.id_prog%Type; + PROCEDURE set_id_util(tnId_Util IN syn_utilizatori.id_util%Type); + FUNCTION get_id_util RETURN syn_utilizatori.id_util%Type; + procedure set_id_sectie_comenzi(tn_id_sectie IN NUMBER); + function get_id_sectie_comenzi return number; + function e_mama(tnIdFirma IN NUMBER) return number; + PROCEDURE SetOptiuneUtilizator(tcVarname IN OPTIUNI_UTIL.VARNAME%TYPE, + tnIdUtil OPTIUNI_UTIL.ID_UTIL%TYPE, + tcVarvalue OPTIUNI_UTIL.VARVALUE%TYPE, + tcVardesc OPTIUNI_UTIL.VARDESC%TYPE := NULL); + PROCEDURE SetOptiune(tcVarname IN OPTIUNI.VARNAME%TYPE, + tcVarvalue OPTIUNI.VARVALUE%TYPE, + tcVarType OPTIUNI.VARTYPE%TYPE DEFAULT 'CHARACTER', + tcVardesc OPTIUNI.VARDESC%TYPE DEFAULT NULL); + + PROCEDURE SetOptiune2(tcVarname IN OPTIUNI.VARNAME%TYPE, + tcVarvalue OPTIUNI.VARVALUE2%TYPE, + tcVarType OPTIUNI.VARTYPE%TYPE DEFAULT 'CHARACTER', + tcVardesc OPTIUNI.VARDESC%TYPE DEFAULT NULL); + + function calculeaza_pret_fara_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number; + + function calculeaza_pret_TVA(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number; + + function calculeaza_pret_cu_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number; + + function converteste_pret_fara_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number; + + function converteste_pret_TVA(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number; + + function converteste_pret_cu_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number; + + FUNCTION calculeaza_total_cu_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + return number; + + FUNCTION calculeaza_total_fara_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + return number; + + FUNCTION calculeaza_total_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + return number; + + function tva2proctva(V_TVA IN ACT.SUMA%TYPE, + V_PRET IN ACT.SUMA%TYPE, + V_AN IN ACT.AN%TYPE, + V_LUNA IN ACT.LUNA%TYPE) RETURN ACT.PROC_TVA%TYPE; + + function tva2proctva(V_TVA IN ACT.SUMA%TYPE, V_PRET IN ACT.SUMA%TYPE) + RETURN ACT.PROC_TVA%TYPE; + + FUNCTION verifica_acces(V_TABELA IN VARCHAR2, + V_ID IN NUMBER, + V_MINUTE_MAX IN NUMBER) RETURN VARCHAR2; + + FUNCTION verifica_acces(V_TABELA IN VARCHAR2, + V_ID IN NUMBER, + V_MINUTE_MAX IN NUMBER, + V_TIP IN NUMBER) RETURN VARCHAR2; + + PROCEDURE blocheaza_acces(V_TABELA IN VARCHAR2, + V_ID IN NUMBER, + V_MINUTE_MAX IN NUMBER); + + PROCEDURE deblocheaza_acces(V_SID IN NUMBER); + + PROCEDURE deblocheaza_acces(V_TABELA IN VARCHAR2, V_ID IN NUMBER); + + PROCEDURE deblocheaza_acces_expirat(V_TABELA IN VARCHAR2, V_ID IN NUMBER); +end pack_sesiune; +/ +create or replace package body pack_sesiune is + + -- 17.03.2016 + -- marius.mutu + -- tva2proctva - s-a calculat si procent tva 5% din raportul tva/pret, + -- la 5% aparea cota standard ex: 20% 2016 + + -- 18.10.2016 + -- marius.mutu + -- + SetOptiune + + -- 13.11.2020 + -- marius.mutu + -- + SetOptiune2 (salveaza in optiuni.varvalue2 clob in loc de optiuni.varvalue varchar2) + + FUNCTION id_sesiune RETURN NUMBER IS + V_RETURN NUMBER(20) := 0; + BEGIN + V_RETURN := DEV_IDLUCRARE; + RETURN V_RETURN; + END; + + FUNCTION get_data_init RETURN date IS + BEGIN + + return gest_data_init; + END; + + FUNCTION get_data_final RETURN date IS + BEGIN + + return gest_data_final; + END; + + procedure set_data_init(tcdata in date) is + + lcdata date := tcdata; + begin + gest_data_init := lcdata; + end; + + procedure set_data_final(tcdata in date) is + + lcdata date := tcdata; + begin + gest_data_final := lcdata; + end; + ------------------------------------------------------------------ + procedure setlunabal(V_LUNA IN NUMBER) is + begin + lunabal := V_LUNA; + end; + ------------------------------------------------------------------ + procedure setanbal(V_AN IN NUMBER) is + begin + anbal := V_AN; + end; + ------------------------------------------------------------------ + procedure setluna(V_LUNA IN NUMBER) is + begin + dev_luna := V_LUNA; + luna := V_LUNA; + end; + ------------------------------------------------------------------ + procedure setan(V_AN IN NUMBER) is + begin + dev_an := V_AN; + an := V_AN; + end; + ------------------------------------------------------------------ + procedure setcont(V_CONT IN varchar2) is + begin + cont := V_CONT; + end; + ------------------------------------------------------------------ + procedure setschema(V_gcs IN varchar2) is + begin + V_schema := v_gcs; + end; + ------------------------------------------------------------------ + function getlunabal return number is + begin + return lunabal; + end; + ------------------------------------------------------------------ + function getanbal return number is + begin + return anbal; + end; + ------------------------------------------------------------------ + function getluna return number is + begin + return dev_luna; + end; + ------------------------------------------------------------------ + function getan return number is + begin + return dev_an; + end; + ------------------------------------------------------------------ + function getcont return varchar2 is + begin + return cont; + end; + ------------------------------------------------------------------ + function getultimazi return date is + begin + return last_day(to_date(dev_an || '/' || dev_luna || '/01', + 'YYYY/MM/DD')); + end; + + --------------------------------------------------------------- + function getschema return varchar2 is + begin + return v_schema; + end; + + --------------------------------------------------------------- + FUNCTION getoptiunefirma(tcS IN VARCHAR2, tcOptiune IN VARCHAR2) + RETURN VARCHAR2 IS + lcValue Optiuni.Varvalue%Type := ''; + BEGIN + BEGIN + select varvalue + INTO lcValue + from optiuni + where UPPER(TRIM(VARNAME)) = UPPER(TRIM(tcOptiune)); + EXCEPTION + WHEN OTHERS THEN + lcValue := ''; + END; + RETURN lcValue; + END; + + --------------------------------------------------------------- + FUNCTION getOptiuneFirma(tcOptiune IN VARCHAR2) RETURN VARCHAR2 IS + lcValue Optiuni.Varvalue%Type := ''; + BEGIN + lcValue := getOptiuneFirma(user, tcOptiune); + return lcValue; + END; + + --------------------------------------------------------------- + PROCEDURE set_data_ron(V_GCS VARCHAR2) IS + lcDataRon varchar2(50); + + BEGIN + execute immediate 'SELECT varvalue from ' || V_GCS || + '.optiuni where upper(varname) = ''DATARON''' + into lcDataRon; + if lcDataRon is not null then + pack_contafin.nAnRON := to_number(substr(lcDataRon, 4, 4)); + pack_contafin.nLunaRON := to_number(substr(lcDataRon, 1, 2)); + else + pack_contafin.nAnRON := 2005; + pack_contafin.nLunaRON := 7; + end if; + END; + + --------------------------------------------------------------- + FUNCTION get_anron RETURN ACT_TEMP.AN%TYPE IS + BEGIN + return pack_contafin.nAnRON; + END GET_ANRON; + + --------------------------------------------------------------- + + FUNCTION get_lunaron RETURN ACT_TEMP.LUNA%TYPE IS + BEGIN + return pack_contafin.nLunaRon; + END GET_LUNARON; + + --------------------------------------------------------------- + + FUNCTION suma_ron(TNSUMA NUMBER, TNAN NUMBER, TNLUNA NUMBER) RETURN NUMBER IS + + BEGIN + + IF (tnluna + tnan * 12 < + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON()) AND + (pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON()) THEN + RETURN NVL(TNSUMA, 0) / 10000; + ELSE + RETURN NVL(TNSUMA, 0); + END IF; + + END SUMA_RON; + + --------------------------------------------------------------- + + FUNCTION suma_ron(TNSUMA NUMBER, + TNAN NUMBER, + TNLUNA NUMBER, + TNPRECIZIE NUMBER) RETURN NUMBER IS + + BEGIN + + IF (tnluna + tnan * 12 < + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON()) AND + (pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON()) THEN + RETURN round(NVL(TNSUMA, 0) / 10000, TNPRECIZIE); + ELSE + RETURN ROUND(NVL(TNSUMA, 0), TNPRECIZIE); + END IF; + + END SUMA_RON; + ---------------------------- + FUNCTION suma_ron(TNSUMA NUMBER, TDDATA DATE) RETURN NUMBER IS + lnAn number(4); + lnLuna number(2); + BEGIN + lnAn := extract(year from TDDATA); + lnLuna := extract(month from TDDATA); + RETURN pack_sesiune.suma_ron(TNSUMA, LNAN, LNLUNA); + + END SUMA_RON; + ---------------------------- + procedure set_id_stat(tn_id_stat IN NUMBER) is + begin + sal_idStat := tn_id_stat; + end; + ----------------------------------- + function get_id_stat return number is + begin + return sal_idStat; + end; + ----------------------------------- + PROCEDURE set_id_prg_owner(tnId_Prg_Owner IN syn_nom_programe.id_program%Type) IS + BEGIN + id_prg_owner := tnId_Prg_Owner; + END set_id_prg_owner; + ----------------------------------- + PROCEDURE set_id_prg(tnId_Prg IN syn_def_programe.id_prog%Type) IS + BEGIN + id_prg := tnId_Prg; + END set_id_prg; + ----------------------------------- + FUNCTION get_id_prg_owner return syn_nom_programe.id_program%Type IS + BEGIN + RETURN id_prg_owner; + END get_id_prg_owner; + ----------------------------------- + FUNCTION get_id_prg return syn_def_programe.id_prog%Type IS + BEGIN + RETURN id_prg; + END get_id_prg; + ----------------------------------- + ----------------------------------- + PROCEDURE set_id_util(tnId_Util IN syn_utilizatori.id_util%Type) IS + v_utilizator syn_vutilizatori.UTILIZATOR%type; + BEGIN + nId_Util := tnId_Util; + begin + SELECT UTILIZATOR + INTO v_utilizator + FROM syn_vutilizatori + WHERE ID_UTIL = tnId_Util + AND INACTIV = 0; + exception + when NO_DATA_FOUND then + v_utilizator := ''; + end; + dbms_session.set_identifier(v_utilizator); + END set_id_util; + ----------------------------------- + FUNCTION get_id_util RETURN syn_utilizatori.id_util%Type IS + BEGIN + RETURN nId_Util; + END get_id_util; + ----------------------------------- + procedure set_id_sectie_comenzi(tn_id_sectie IN NUMBER) is + begin + comenzi_idSectie := tn_id_sectie; + end; + ----------------------------------- + function get_id_sectie_comenzi return number is + begin + return comenzi_idSectie; + end; + ----------------------------------- + function e_mama(tnIdFirma IN NUMBER) return number is + V_E_MAMA NUMBER(1) := 0; + begin + if tnIdFirma IS NOT NULL then + V_E_MAMA := 0; + else + select max(NVL(e_mama, 0)) + into V_E_MAMA + from syn_nom_firme + where schema = USER; + end if; + + return v_e_mama; + end; + ----------------------------------- + PROCEDURE SetOptiuneUtilizator(tcVarname IN OPTIUNI_UTIL.VARNAME%TYPE, + tnIdUtil OPTIUNI_UTIL.ID_UTIL%TYPE, + tcVarvalue OPTIUNI_UTIL.VARVALUE%TYPE, + tcVardesc OPTIUNI_UTIL.VARDESC%TYPE := NULL) IS + + BEGIN + + MERGE INTO optiuni_util + USING dual + on (upper(varname) = upper(tcVarname) and id_util = tnIdUtil) + WHEN MATCHED THEN + UPDATE SET varvalue = tcVarvalue + WHEN NOT MATCHED THEN + INSERT + (varname, id_util, vardesc, varvalue) + VALUES + (upper(tcVarname), tnIdUtil, tcVardesc, tcVarvalue); + + END SetOptiuneUtilizator; + ----------------------------------- + PROCEDURE SetOptiune(tcVarname IN OPTIUNI.VARNAME%TYPE, + tcVarvalue OPTIUNI.VARVALUE%TYPE, + tcVarType OPTIUNI.VARTYPE%TYPE DEFAULT 'CHARACTER', + tcVardesc OPTIUNI.VARDESC%TYPE DEFAULT NULL) IS + + BEGIN + + MERGE INTO optiuni + USING dual + on (upper(varname) = upper(tcVarname)) + WHEN MATCHED THEN + UPDATE SET varvalue = tcVarvalue + WHEN NOT MATCHED THEN + INSERT + (varname, varvalue, vartype, vardesc) + VALUES + (upper(tcVarname), tcVarvalue, tcVarType, tcVardesc); + + END SetOptiune; + + ---------------------------------------------------------------------------- + PROCEDURE SetOptiune2(tcVarname IN OPTIUNI.VARNAME%TYPE, + tcVarvalue OPTIUNI.VARVALUE2%TYPE, + tcVarType OPTIUNI.VARTYPE%TYPE DEFAULT 'CHARACTER', + tcVardesc OPTIUNI.VARDESC%TYPE DEFAULT NULL) IS + BEGIN + MERGE INTO optiuni + USING dual + on (upper(varname) = upper(tcVarname)) + WHEN MATCHED THEN + UPDATE SET varvalue2 = tcVarvalue + WHEN NOT MATCHED THEN + INSERT + (varname, varvalue2, vartype, vardesc) + VALUES + (upper(tcVarname), tcVarvalue, tcVarType, tcVardesc); + + END SetOptiune2; + + ---------------------------------------------------------------------------- + function calculeaza_pret_fara_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number IS + V_PRET_FARA_TVA number := 0; + V_ZECIMALE number(2); + V_ZECIMALEVAL number(2); + BEGIN + IF V_TIP = 1 THEN + -- achizitie + V_ZECIMALE := pack_sesiune.nzecimale_preta; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval; + ELSE + -- vanzare + V_ZECIMALE := pack_sesiune.nzecimale_pretv; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval; + END IF; + IF V_PRET_ARE_TVA = 0 THEN + -- pretul de referinta este fara tva + IF NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <> + pack_sesiune.nid_moneda_nationala THEN + -- pretul este in valuta + V_PRET_FARA_TVA := ROUND(V_CURS * + ROUND(V_PRET_UNITAR, V_ZECIMALEVAL), + V_ZECIMALE); + ELSE + V_PRET_FARA_TVA := ROUND(V_PRET_UNITAR, V_ZECIMALE); + END IF; + ELSE + -- pretul de referinta este cu tva + V_PRET_FARA_TVA := ROUND(calculeaza_pret_cu_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) + + / V_PROC_TVA, + V_ZECIMALE); + END IF; + return V_PRET_FARA_TVA; + END calculeaza_pret_fara_tva; + ---------------------------------------------------------------------------- + function calculeaza_pret_TVA(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return NUMBER IS + V_PRET_TVA number := 0; + V_ZECIMALE number(2); + V_ZECIMALEVAL number(2); + BEGIN + IF V_TIP = 1 THEN + -- achizitie + V_ZECIMALE := pack_sesiune.nzecimale_preta; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval; + ELSE + -- vanzare + V_ZECIMALE := pack_sesiune.nzecimale_pretv; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval; + END IF; + IF V_PRET_ARE_TVA = 0 THEN + -- pretul de referinta este fara tva + V_PRET_TVA := ROUND(pack_sesiune.calculeaza_pret_fara_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) * + (V_PROC_TVA - 1), + V_ZECIMALE); + ELSE + -- pretul de referinta este cu tva + V_PRET_TVA := pack_sesiune.calculeaza_pret_cu_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) - + pack_sesiune.calculeaza_pret_fara_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip); + END IF; + return V_PRET_TVA; + END calculeaza_pret_TVA; + ---------------------------------------------------------------------------- + function calculeaza_pret_cu_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) RETURN NUMBER IS + V_PRET_CU_TVA number := 0; + V_ZECIMALE number(2); + V_ZECIMALEVAL number(2); + BEGIN + IF V_TIP = 1 THEN + -- achizitie + V_ZECIMALE := pack_sesiune.nzecimale_preta; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval; + ELSE + -- vanzare + V_ZECIMALE := pack_sesiune.nzecimale_pretv; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval; + END IF; + IF V_PRET_ARE_TVA = 0 THEN + V_PRET_CU_TVA := pack_sesiune.calculeaza_pret_fara_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) + + pack_sesiune.calculeaza_pret_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip); + ELSE + -- pretul de referinta este cu tva + IF NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <> + pack_sesiune.nid_moneda_nationala THEN + -- pretul este in valuta + V_PRET_CU_TVA := ROUND(V_CURS * ROUND(V_PRET_UNITAR, V_ZECIMALEVAL), + V_ZECIMALE); + ELSE + V_PRET_CU_TVA := ROUND(V_PRET_UNITAR, V_ZECIMALE); + END IF; + END IF; + return V_PRET_CU_TVA; + end calculeaza_pret_cu_tva; + ---------------------------------------------------------------------------- + function converteste_pret_fara_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number IS + V_PRET_FARA_TVA number := 0; + V_ZECIMALE number(2); + V_ZECIMALEVAL number(2); + BEGIN + IF V_TIP = 1 THEN + -- achizitie + V_ZECIMALE := pack_sesiune.nzecimale_preta; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval; + ELSE + -- vanzare + V_ZECIMALE := pack_sesiune.nzecimale_pretv; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval; + END IF; + IF V_PRET_ARE_TVA = 0 THEN + -- pretul de referinta este fara tva + IF NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <> + pack_sesiune.nid_moneda_nationala THEN + -- pretul este in valuta + V_PRET_FARA_TVA := ROUND(ROUND(V_PRET_UNITAR, V_ZECIMALE) / V_CURS, + V_ZECIMALEVAL); + ELSE + V_PRET_FARA_TVA := ROUND(V_PRET_UNITAR, V_ZECIMALE); + END IF; + ELSE + -- pretul de referinta este cu tva + V_PRET_FARA_TVA := ROUND(pack_sesiune.converteste_pret_cu_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) + + / V_PROC_TVA, + (CASE + WHEN NVL(V_ID_VALUTA, + pack_sesiune.nid_moneda_nationala) <> + pack_sesiune.nid_moneda_nationala THEN + V_ZECIMALEVAL + ELSE + V_ZECIMALE + END)); + END IF; + return V_PRET_FARA_TVA; + END converteste_pret_fara_tva; + ---------------------------------------------------------------------------- + function converteste_pret_TVA(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return NUMBER IS + V_PRET_TVA number := 0; + V_ZECIMALE number(2); + V_ZECIMALEVAL number(2); + BEGIN + IF V_TIP = 1 THEN + -- achizitie + V_ZECIMALE := pack_sesiune.nzecimale_preta; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval; + ELSE + -- vanzare + V_ZECIMALE := pack_sesiune.nzecimale_pretv; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval; + END IF; + IF V_PRET_ARE_TVA = 0 THEN + -- pretul de referinta este fara tva + V_PRET_TVA := ROUND(pack_sesiune.converteste_pret_fara_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) * + (V_PROC_TVA - 1), + (CASE + WHEN NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <> + pack_sesiune.nid_moneda_nationala THEN + V_ZECIMALEVAL + ELSE + V_ZECIMALE + END)); + ELSE + -- pretul de referinta este cu tva + V_PRET_TVA := pack_sesiune.converteste_pret_cu_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) - + pack_sesiune.converteste_pret_fara_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip); + END IF; + return V_PRET_TVA; + END converteste_pret_TVA; + ---------------------------------------------------------------------------- + function converteste_pret_cu_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) RETURN NUMBER IS + V_PRET_CU_TVA number := 0; + V_ZECIMALE number(2); + V_ZECIMALEVAL number(2); + BEGIN + IF V_TIP = 1 THEN + -- achizitie + V_ZECIMALE := pack_sesiune.nzecimale_preta; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval; + ELSE + -- vanzare + V_ZECIMALE := pack_sesiune.nzecimale_pretv; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval; + END IF; + IF V_PRET_ARE_TVA = 0 THEN + V_PRET_CU_TVA := pack_sesiune.converteste_pret_fara_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) + + pack_sesiune.converteste_pret_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip); + ELSE + -- pretul de referinta este cu tva + IF NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <> + pack_sesiune.nid_moneda_nationala THEN + -- pretul este in valuta + V_PRET_CU_TVA := ROUND(ROUND(V_PRET_UNITAR, V_ZECIMALE) / V_CURS, + V_ZECIMALEVAL); + ELSE + V_PRET_CU_TVA := ROUND(V_PRET_UNITAR, V_ZECIMALE); + END IF; + END IF; + return V_PRET_CU_TVA; + end converteste_pret_cu_tva; + ---------------------------------------------------------------------------- + FUNCTION calculeaza_total_cu_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER IS + V_SUMA_CU_TVA ACT.SUMA%TYPE; + V_ZECIMALEPRET NUMBER(1) := NVL(V_ZECIMALE_PRET, + pack_sesiune.nzecimale_pretv); + V_ZECIMALESUMA NUMBER(1) := NVL(V_ZECIMALE_SUMA, + pack_sesiune.nzecimale_sumav); + BEGIN + IF V_PRET_CU_TVA = 1 THEN + IF V_DISCOUNT_EVIDENTIAT = 1 THEN + V_SUMA_CU_TVA := ROUND((ROUND(NVL(V_CURS, 1) * V_PRET, + V_ZECIMALEPRET) + + ROUND(NVL(V_AJUSTARE, 0) * V_PROC_TVAV, + V_ZECIMALEPRET)) * V_CANTITATE, + V_ZECIMALESUMA) - + ROUND(ROUND(NVL(V_CURS, 1) * + NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALEPRET) * V_CANTITATE, + V_ZECIMALESUMA); + ELSE + V_SUMA_CU_TVA := ROUND((ROUND(NVL(V_CURS, 1) * + ROUND(V_PRET, V_ZECIMALEPRET), + V_ZECIMALEPRET) - + ROUND(NVL(V_CURS, 1) * + ROUND(NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALEPRET), + V_ZECIMALEPRET) + + ROUND(NVL(V_AJUSTARE, 0) * V_PROC_TVAV, + V_ZECIMALEPRET)) * V_CANTITATE, + V_ZECIMALESUMA); + END IF; + ELSE + V_SUMA_CU_TVA := pack_sesiune.calculeaza_total_fara_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALEPRET, + V_ZECIMALESUMA) + + pack_sesiune.calculeaza_total_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALEPRET, + V_ZECIMALESUMA); + END IF; + RETURN V_SUMA_CU_TVA; + END calculeaza_total_cu_tva; + ---------------------------------------------------------------------------- + FUNCTION calculeaza_total_fara_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER IS + V_SUMA_FARA_TVA ACT.SUMA%TYPE; + V_ZECIMALEPRET NUMBER(1) := NVL(V_ZECIMALE_PRET, + pack_sesiune.nzecimale_pretv); + V_ZECIMALESUMA NUMBER(1) := NVL(V_ZECIMALE_SUMA, + pack_sesiune.nzecimale_sumav); + BEGIN + IF V_PRET_CU_TVA = 1 THEN + V_SUMA_FARA_TVA := pack_sesiune.calculeaza_total_cu_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALEPRET, + V_ZECIMALESUMA) - + pack_sesiune.calculeaza_total_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALEPRET, + V_ZECIMALESUMA); + ELSE + IF V_DISCOUNT_EVIDENTIAT = 1 THEN + V_SUMA_FARA_TVA := ROUND((ROUND(NVL(V_CURS, 1) * V_PRET, + V_ZECIMALEPRET) + + NVL(V_AJUSTARE, 0)) * V_CANTITATE, + V_ZECIMALESUMA) - + ROUND(ROUND(NVL(V_CURS, 1) * + NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALEPRET) * V_CANTITATE, + V_ZECIMALESUMA); + ELSE + V_SUMA_FARA_TVA := ROUND((ROUND(NVL(V_CURS, 1) * + ROUND(V_PRET, V_ZECIMALEPRET), + V_ZECIMALEPRET) - + ROUND(NVL(V_CURS, 1) * + ROUND(NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALEPRET), + V_ZECIMALEPRET) + + NVL(V_AJUSTARE, 0)) * V_CANTITATE, + V_ZECIMALESUMA); + END IF; + END IF; + RETURN V_SUMA_FARA_TVA; + END calculeaza_total_fara_tva; + ---------------------------------------------------------------------------- + FUNCTION calculeaza_total_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER IS + V_SUMA_TVA ACT.SUMA%TYPE; + V_ZECIMALEPRET NUMBER(1) := NVL(V_ZECIMALE_PRET, + pack_sesiune.nzecimale_pretv); + V_ZECIMALESUMA NUMBER(1) := NVL(V_ZECIMALE_SUMA, + pack_sesiune.nzecimale_sumav); + BEGIN + IF V_PRET_CU_TVA = 1 THEN + V_SUMA_TVA := ROUND(pack_sesiune.calculeaza_total_cu_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALEPRET, + V_ZECIMALESUMA) * + (V_PROC_TVAV - 1) / V_PROC_TVAV, + V_ZECIMALESUMA); + + ELSE + IF V_DISCOUNT_EVIDENTIAT = 1 THEN + V_SUMA_TVA := ROUND(ROUND((ROUND(NVL(V_CURS, 1) * V_PRET, + V_ZECIMALEPRET) + + NVL(V_AJUSTARE, 0)) * V_CANTITATE, + V_ZECIMALESUMA) * (V_PROC_TVAV - 1), + V_ZECIMALESUMA) - + ROUND(ROUND(ROUND(NVL(V_CURS, 1) * + NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALEPRET) * V_CANTITATE, + V_ZECIMALESUMA) * (V_PROC_TVAV - 1), + V_ZECIMALESUMA); + ELSE + V_SUMA_TVA := ROUND(ROUND((ROUND(NVL(V_CURS, 1) * + ROUND(V_PRET, V_ZECIMALEPRET), + V_ZECIMALEPRET) - + ROUND(NVL(V_CURS, 1) * + ROUND(NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALEPRET), + V_ZECIMALEPRET) + + NVL(V_AJUSTARE, 0)) * V_CANTITATE, + V_ZECIMALESUMA) * (V_PROC_TVAV - 1), + V_ZECIMALESUMA); + END IF; + END IF; + RETURN V_SUMA_TVA; + END calculeaza_total_tva; + ---------------------------------------------------------------------------- + function tva2proctva(V_TVA IN ACT.SUMA%TYPE, + V_PRET IN ACT.SUMA%TYPE, + V_AN IN ACT.AN%TYPE, + V_LUNA IN ACT.LUNA%TYPE) RETURN ACT.PROC_TVA%TYPE is + V_PROC_TVA ACT.PROC_TVA%TYPE; + BEGIN + + if V_PRET = 0 or V_TVA = 0 then + V_PROC_TVA := 1; + else + V_PROC_TVA := ROUND(V_TVA / V_PRET, 2); + if V_PROC_TVA between 0.03 and 0.07 then + V_PROC_TVA := 1.05; + elsif V_PROC_TVA between 0.08 and 0.11 then + V_PROC_TVA := 1.09; + else + V_PROC_TVA := pack_contafin.getCotaTVAStandard(V_LUNA, V_AN); + end if; + end if; + return V_PROC_TVA; + END tva2proctva; + ---------------------------------------------------------------------------- + function tva2proctva(V_TVA IN ACT.SUMA%TYPE, V_PRET IN ACT.SUMA%TYPE) + RETURN ACT.PROC_TVA%TYPE is + BEGIN + return pack_sesiune.tva2proctva(V_TVA, + V_PRET, + pack_sesiune.an, + pack_sesiune.luna); + END tva2proctva; + ---------------------------------------------------------------------------- + FUNCTION verifica_acces(V_TABELA IN VARCHAR2, + V_ID IN NUMBER, + V_MINUTE_MAX IN NUMBER) RETURN VARCHAR2 IS + BEGIN + RETURN pack_sesiune.verifica_acces(V_TABELA, V_ID, V_MINUTE_MAX, 1); + END verifica_acces; + ---------------------------------------------------------------------------- + FUNCTION verifica_acces(V_TABELA IN VARCHAR2, + V_ID IN NUMBER, + V_MINUTE_MAX IN NUMBER, + V_TIP IN NUMBER) RETURN VARCHAR2 IS + -- V_TIP = 1 - verifica si blocheaza + -- = 2 - doar verifica + V_MESAJ VARCHAR2(1000); + V_DATAORAE DATE; + V_DATA_ACTUALA DATE; + BEGIN + BEGIN + SELECT MAX(DATAORAE) AS DATAORAE, SYSDATE + INTO V_DATAORAE, V_DATA_ACTUALA + FROM TABELE_BLOCATE + WHERE TABELA = V_TABELA + AND ID = V_ID; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_DATAORAE := NULL; + V_DATA_ACTUALA := NULL; + END; + + IF V_DATAORAE IS NULL THEN + V_MESAJ := NULL; + IF V_TIP = 1 THEN + pack_sesiune.blocheaza_acces(V_TABELA, V_ID, NVL(V_MINUTE_MAX, 60)); + END IF; + ELSE + IF V_DATA_ACTUALA > V_DATAORAE THEN + V_MESAJ := NULL; + pack_sesiune.deblocheaza_acces_expirat(V_TABELA, V_ID); + IF V_TIP = 1 THEN + pack_sesiune.blocheaza_acces(V_TABELA, + V_ID, + NVL(V_MINUTE_MAX, 60)); + END IF; + ELSE + V_MESAJ := 'Nu puteti face operatii asupra acestei inregistrari! Sesiunea expira la ' || + to_char(V_DATAORAE, 'DD/MM/YYYY HH24:mi:ss') || ' !'; + END IF; + END IF; + RETURN V_MESAJ; + END verifica_acces; + ---------------------------------------------------------------------------- + PROCEDURE blocheaza_acces(V_TABELA IN VARCHAR2, + V_ID IN NUMBER, + V_MINUTE_MAX IN NUMBER) is + BEGIN + INSERT INTO TABELE_BLOCATE + (SID, TABELA, ID, DATAORAE) + VALUES + (sys_context('userenv', 'SID'), + V_TABELA, + V_ID, + SYSDATE + NVL(V_MINUTE_MAX, 60) / (24 * 60)); + END blocheaza_acces; + ---------------------------------------------------------------------------- + PROCEDURE deblocheaza_acces(V_SID IN NUMBER) is + BEGIN + DELETE FROM TABELE_BLOCATE WHERE SID = V_SID; + END deblocheaza_acces; + ---------------------------------------------------------------------------- + PROCEDURE deblocheaza_acces(V_TABELA IN VARCHAR2, V_ID IN NUMBER) is + BEGIN + DELETE FROM TABELE_BLOCATE + WHERE SID = sys_context('userenv', 'SID') + AND TABELA = V_TABELA + AND ID = V_ID; + END deblocheaza_acces; + ---------------------------------------------------------------------------- + PROCEDURE deblocheaza_acces_expirat(V_TABELA IN VARCHAR2, V_ID IN NUMBER) is + BEGIN + DELETE FROM TABELE_BLOCATE + WHERE TABELA = V_TABELA + AND ID = V_ID; + END deblocheaza_acces_expirat; + ---------------------------------------------------------------------------- +begin + pack_sesiune.nid_moneda_nationala := pack_def.GetIdMonedaNationala(); + pack_sesiune.nzecimale_preta := PACK_SESIUNE.getoptiunefirma(USER, + 'PPRET'); + pack_sesiune.nzecimale_pretv := PACK_SESIUNE.getoptiunefirma(USER, + 'PPRETV'); + pack_sesiune.nzecimale_pretaval := PACK_SESIUNE.getoptiunefirma(USER, + 'PPRETVAL'); + pack_sesiune.nzecimale_pretvval := PACK_SESIUNE.getoptiunefirma(USER, + 'PVAL'); + pack_sesiune.nzecimale_sumaa := PACK_SESIUNE.getoptiunefirma(USER, + 'PC'); + pack_sesiune.nzecimale_sumav := PACK_SESIUNE.getoptiunefirma(USER, + 'PC'); + pack_sesiune.nzecimale_sumaval := PACK_SESIUNE.getoptiunefirma(USER, + 'PVAL'); +end pack_sesiune; +/